From 3435635a7be20206caf77f05acf87fc5372ad82e Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Sat, 6 Oct 2007 15:48:58 +0000 Subject: [PATCH] Move TabWidget related code to TabWorkArea class in GuiWorkArea.{cpp,h} The close button is back... git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20787 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/GuiView.cpp | 64 ++++--------------------------- src/frontends/qt4/GuiView.h | 7 +++- src/frontends/qt4/GuiWorkArea.cpp | 64 +++++++++++++++++++++++++++++++ src/frontends/qt4/GuiWorkArea.h | 26 +++++++++++-- 4 files changed, 100 insertions(+), 61 deletions(-) diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index ac2e1fd4a4..a50889e0fe 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -63,9 +63,7 @@ #include #include #include -#include #include -#include #include using std::endl; @@ -123,16 +121,9 @@ private: QPixmap * splash_; }; - -class TabWidget : public QTabWidget { -public: - void showBar(bool show) { tabBar()->setVisible(show); } }; -} // namespace anon - - struct GuiViewBase::GuiViewPrivate { string cur_title; @@ -140,7 +131,7 @@ struct GuiViewBase::GuiViewPrivate int posx_offset; int posy_offset; - TabWidget * tab_widget_; + TabWorkArea * tab_widget_; QStackedWidget * stack_widget_; BackgroundWidget * bg_widget_; /// view's menubar @@ -241,31 +232,9 @@ GuiViewBase::GuiViewBase(int id) setWindowIcon(QPixmap(toqstr(iconname.absFilename()))); #endif - d.tab_widget_ = new TabWidget; - - QPushButton * closeTabButton = new QPushButton(this); - FileName const file = support::libFileSearch("images", "closetab", "png"); - if (!file.empty()) { - QPixmap pm(toqstr(file.absFilename())); - closeTabButton->setIcon(QIcon(pm)); - closeTabButton->setMaximumSize(pm.size()); - closeTabButton->setFlat(true); - } else { - closeTabButton->setText("Close"); - } - closeTabButton->setCursor(Qt::ArrowCursor); - closeTabButton->setToolTip(tr("Close tab")); - closeTabButton->setEnabled(true); - - QObject::connect(d.tab_widget_, SIGNAL(currentChanged(int)), - this, SLOT(currentTabChanged(int))); - QObject::connect(closeTabButton, SIGNAL(clicked()), - this, SLOT(closeCurrentTab())); - - d.tab_widget_->setCornerWidget(closeTabButton); -#if QT_VERSION >= 0x040200 - d.tab_widget_->setUsesScrollButtons(true); -#endif + d.tab_widget_ = new TabWorkArea; + QObject::connect(d.tab_widget_, SIGNAL(currentWorkAreaChanged(GuiWorkArea *)), + this, SLOT(on_currentWorkAreaChanged(GuiWorkArea *))); d.initBackground(); if (d.bg_widget_) { @@ -639,26 +608,12 @@ void GuiViewBase::update_view_state_qt() } -void GuiViewBase::closeCurrentTab() -{ - dispatch(FuncRequest(LFUN_BUFFER_CLOSE)); -} - - -void GuiViewBase::currentTabChanged(int i) +void GuiViewBase::on_currentWorkAreaChanged(GuiWorkArea * wa) { disconnectBuffer(); disconnectBufferView(); - GuiWorkArea * wa = dynamic_cast(d.tab_widget_->widget(i)); - BOOST_ASSERT(wa); - BufferView & bv = wa->bufferView(); - connectBufferView(bv); - connectBuffer(bv.buffer()); - bv.updateMetrics(false); - bv.cursor().fixIfBroken(); - wa->setUpdatesEnabled(true); - wa->redraw(); - wa->setFocus(); + connectBufferView(wa->bufferView()); + connectBuffer(wa->bufferView().buffer()); updateToc(); // Buffer-dependent dialogs should be updated or @@ -669,9 +624,6 @@ void GuiViewBase::currentTabChanged(int i) updateLayoutChoice(); updateWindowTitle(); updateStatusBar(); - - LYXERR(Debug::GUI) << "currentTabChanged " << i - << "File" << bv.buffer().fileName() << endl; } @@ -921,7 +873,7 @@ void GuiViewBase::setCurrentWorkArea(WorkArea * work_area) d.tab_widget_->setCurrentWidget(wa); else // Make sure the work area is up to date. - currentTabChanged(d.tab_widget_->currentIndex()); + d.tab_widget_->on_currentTabChanged(d.tab_widget_->currentIndex()); wa->setFocus(); } diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index 4b8b6b536b..0b429e1d5d 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -21,6 +21,7 @@ #include #include #include +#include #include class QDragEnterEvent; @@ -32,6 +33,7 @@ namespace lyx { namespace frontend { class GuiToolbar; +class GuiWorkArea; QWidget * mainWindow(); @@ -95,8 +97,8 @@ public Q_SLOTS: /// idle timeout void update_view_state_qt(); - void currentTabChanged(int index); - void closeCurrentTab(); + /// + void on_currentWorkAreaChanged(GuiWorkArea *); /// slots to change the icon size void smallSizedIcons(); @@ -166,6 +168,7 @@ private: GuiViewPrivate& d; }; + } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/GuiWorkArea.cpp b/src/frontends/qt4/GuiWorkArea.cpp index 9853a56930..c25d392531 100644 --- a/src/frontends/qt4/GuiWorkArea.cpp +++ b/src/frontends/qt4/GuiWorkArea.cpp @@ -20,10 +20,12 @@ #include "frontends/LyXView.h" +#include "Buffer.h" #include "BufferView.h" #include "Color.h" #include "debug.h" #include "FuncRequest.h" +#include "LyXFunc.h" #include "LyXRC.h" #include "version.h" @@ -36,7 +38,9 @@ #include #include #include +#include #include +#include #include #include @@ -687,6 +691,66 @@ QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const } } +//////////////////////////////////////////////////////////////////// +// TabWorkArea implementation. +//////////////////////////////////////////////////////////////////// +TabWorkArea::TabWorkArea(QWidget * parent): QTabWidget(parent) +{ + QPushButton * closeTabButton = new QPushButton(this); + FileName const file = support::libFileSearch("images", "closetab", "png"); + if (!file.empty()) { + QPixmap pm(toqstr(file.absFilename())); + closeTabButton->setIcon(QIcon(pm)); + closeTabButton->setMaximumSize(pm.size()); + closeTabButton->setFlat(true); + } else { + closeTabButton->setText("Close"); + } + closeTabButton->setCursor(Qt::ArrowCursor); + closeTabButton->setToolTip(tr("Close tab")); + closeTabButton->setEnabled(true); + + QObject::connect(this, SIGNAL(currentChanged(int)), + this, SLOT(on_currentTabChanged(int))); + QObject::connect(closeTabButton, SIGNAL(clicked()), + this, SLOT(closeCurrentTab())); + + setCornerWidget(closeTabButton); +#if QT_VERSION >= 0x040200 + setUsesScrollButtons(true); +#endif +} + + +void TabWorkArea::showBar(bool show) +{ + tabBar()->setVisible(show); +} + + +void TabWorkArea::on_currentTabChanged(int i) +{ + GuiWorkArea * wa = dynamic_cast(widget(i)); + BOOST_ASSERT(wa); + BufferView & bv = wa->bufferView(); + bv.updateMetrics(false); + bv.cursor().fixIfBroken(); + wa->setUpdatesEnabled(true); + wa->redraw(); + wa->setFocus(); + /// + currentWorkAreaChanged(wa); + + LYXERR(Debug::GUI) << "currentTabChanged " << i + << "File" << bv.buffer().fileName() << endl; +} + + +void TabWorkArea::closeCurrentTab() +{ + lyx::dispatch(FuncRequest(LFUN_BUFFER_CLOSE)); +} + } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/GuiWorkArea.h b/src/frontends/qt4/GuiWorkArea.h index 2bafbeb5b3..dc9c84c2a4 100644 --- a/src/frontends/qt4/GuiWorkArea.h +++ b/src/frontends/qt4/GuiWorkArea.h @@ -19,11 +19,12 @@ #include "support/Timeout.h" #include +#include #include +#include #include -#include +#include #include -#include #include @@ -170,7 +171,26 @@ private: bool schedule_redraw_; /// int preedit_lines_; -}; +}; //GuiWorkArea + +/// A tabbed set of GuiWorkAreas. +class TabWorkArea : public QTabWidget +{ + Q_OBJECT +public: + TabWorkArea(QWidget * parent = 0); + void showBar(bool show); + +Q_SIGNALS: + /// + void currentWorkAreaChanged(GuiWorkArea *); + +public Q_SLOTS: + /// + void on_currentTabChanged(int index); + /// + void closeCurrentTab(); +}; // TabWorkArea } // namespace frontend } // namespace lyx -- 2.39.5