Here a first attempt for tabs, it's the JMarc approach, because it's the simples way. It's only a additional switch by a QTabBar, but I don't know how to get the current name and how to emit a switch signal.
Peter
Index: LyXView.h =================================================================== --- LyXView.h (revision 15526) +++ LyXView.h (working copy) @@ -153,6 +153,9 @@ /// updates the title of the window void updateWindowTitle(); + /// updates the tab view + virtual void updateTab() = 0; + /// reset autosave timer void resetAutosaveTimer(); Index: qt4/GuiView.h =================================================================== --- qt4/GuiView.h (revision 15526) +++ qt4/GuiView.h (working copy) @@ -26,7 +26,7 @@ #include <QCloseEvent> class QToolBar; - +class TabHeader; //class FuncRequest; //class string; @@ -66,6 +66,8 @@ virtual void clearMessage(); virtual bool hasFocus() const; + virtual void updateTab(); + /// show - display the top-level window void show(); @@ -75,6 +77,7 @@ /// menu item has been selected void activated(FuncRequest const &); + void initTab(QWidget* workArea); Q_SIGNALS: void closing(int); @@ -86,6 +89,8 @@ /// populate a toplevel menu and all its children on demand void updateMenu(QAction *); + void currentTabChanged (int index); + protected: /// make sure we quit cleanly virtual void closeEvent(QCloseEvent * e); @@ -116,6 +121,8 @@ void updateFloatingGeometry(); /// QRect floatingGeometry_; + + TabHeader* t; }; } // namespace frontend Index: qt4/GuiImplementation.C =================================================================== --- qt4/GuiImplementation.C (revision 15526) +++ qt4/GuiImplementation.C (working copy) @@ -104,6 +104,7 @@ view->setWorkArea(work_areas_[id]); view->setCentralWidget(work_areas_[id]); + view->initTab(work_areas_[id]); return id; } Index: qt4/GuiView.C =================================================================== --- qt4/GuiView.C (revision 15526) +++ qt4/GuiView.C (working copy) @@ -45,14 +45,29 @@ #include <QPixmap> #include <QStatusBar> #include <QToolBar> +#include <QTabBar> - #include <boost/bind.hpp> using std::string; using std::endl; +class TabHeader : public QWidget +{ +public: + QTabBar* tabbar; + TabHeader(QWidget* w) + { + tabbar = new QTabBar; + QVBoxLayout* l = new QVBoxLayout; + l->addWidget(tabbar); + l->addWidget(w); + l->setMargin(0); + setLayout(l); + } +}; + namespace lyx { using support::subst; @@ -67,6 +82,7 @@ } // namespace anon + GuiView::GuiView(int id) : QMainWindow(), LyXView(id), commandbuffer_(0) { @@ -222,7 +238,25 @@ statusbar_timer_.stop(); } +void GuiView::initTab(QWidget* workarea) +{ + t = new TabHeader(workarea); + setCentralWidget(t); + QObject::connect(t->tabbar, SIGNAL(currentChanged(int)), + this, SLOT(currentTabChanged(int))); +} +void GuiView::currentTabChanged (int index) +{ + +} + +void GuiView::updateTab() +{ + QString getName("todo"); + t->tabbar->addTab(getName); +} + void GuiView::updateStatusBar() { // let the user see the explicit message Index: LyXView.C =================================================================== --- LyXView.C (revision 15526) +++ LyXView.C (working copy) @@ -144,6 +144,7 @@ updateToolbars(); updateLayoutChoice(); updateWindowTitle(); + updateTab(); if (loaded) { connectBuffer(*work_area_->bufferView().buffer()); showErrorList("Parse");