SVN commit 1154758 by piggz: Port of the KexiProjectListView from Q/K3 listview to Qts Model/View framework. This is not 100% complete, but i am posting here to see if it is ok to commit and continue working in trunk. As is, this will add a second project navigator to the docker, below the old navigator. This means it can be used side-by-side for comparison with the old version, and when ready, the old code can be removed. Classes: KexiProjectNavigator - main widget, which contains the treeview and some tool buttons KexiProjectTreeView - Treeview widget which contains the project model KexiProjectModel - The model describing the projects objects (tables/queries/forms/reports/scripts) KexiProjectModelItem - Individual model items Known not to work/not yet implemented: Removing items from the project Asterix after names of modified items M +51 -1 main/KexiMainWindow.cpp M +3 -0 main/KexiMainWindow_p.h M +4 -0 widget/CMakeLists.txt AM widget/KexiProjectModel.cpp [License: LGPL (v2)] AM widget/KexiProjectModel.h [License: LGPL (v2)] AM widget/KexiProjectModelItem.cpp [License: LGPL (v2+)] AM widget/KexiProjectModelItem.h [License: LGPL (v2)] AM widget/KexiProjectNavigator.cpp [License: LGPL (v2+)] AM widget/KexiProjectNavigator.h [License: LGPL (v2+)] AM widget/KexiProjectTreeView.cpp [License: LGPL (v2+)] AM widget/KexiProjectTreeView.h [License: LGPL (v2+)] --- trunk/koffice/kexi/main/KexiMainWindow.cpp #1154757:1154758 @@ -94,11 +94,13 @@ #include "kexifinddialog.h" #include "kexisearchandreplaceiface.h" #include +#include "KexiProjectModel.h" #include #include #include #include +#include #include #include @@ -298,6 +300,7 @@ //#ifdef KEXI_DEBUG_GUI // delete debugWindow; //#endif + return 0; } @@ -2087,7 +2090,22 @@ KexiDockableWidget* navDockableWidget = new KexiDockableWidget(d->navDockWidget); d->nav = new KexiProjectListView(navDockableWidget); - navDockableWidget->setWidget(d->nav); + d->nav2 = new KexiProjectNavigator(navDockableWidget); + + //navDockableWidget->setWidget(d->nav); + + + //TODO temp + QWidget *navi = new QWidget(navDockableWidget); + QVBoxLayout *navi_layout = new QVBoxLayout(); + navi_layout->addWidget(d->nav); + navi_layout->addWidget(d->nav2); + navi->setLayout(navi_layout); + + navDockableWidget->setWidget(navi); + //End TODO + + //TODO REMOVE? d->nav->installEventFilter(this); d->navDockWidget->setWindowTitle(d->nav->windowTitle()); d->navDockWidget->setWidget(navDockableWidget); @@ -2131,9 +2149,39 @@ } connect(d->nav, SIGNAL(selectionChanged(KexiPart::Item*)), this, SLOT(slotPartItemSelectedInNavigator(KexiPart::Item*))); + connect(d->navDockWidget, SIGNAL(visibilityChanged(bool)), this, SLOT(slotProjectNavigatorVisibilityChanged(bool))); + //Nav2 Signals + connect(d->nav2, SIGNAL(openItem(KexiPart::Item*, Kexi::ViewMode)), + this, SLOT(openObject(KexiPart::Item*, Kexi::ViewMode))); + connect(d->nav2, SIGNAL(openOrActivateItem(KexiPart::Item*, Kexi::ViewMode)), + this, SLOT(openObjectFromNavigator(KexiPart::Item*, Kexi::ViewMode))); + connect(d->nav2, SIGNAL(newItem(KexiPart::Info*)), + this, SLOT(newObject(KexiPart::Info*))); + connect(d->nav2, SIGNAL(removeItem(KexiPart::Item*)), + this, SLOT(removeObject(KexiPart::Item*))); + connect(d->nav2->model(), SIGNAL(renameItem(KexiPart::Item*, const QString&, bool&)), + this, SLOT(renameObject(KexiPart::Item*, const QString&, bool&))); + connect(d->nav2, SIGNAL(executeItem(KexiPart::Item*)), + this, SLOT(executeItem(KexiPart::Item*))); + connect(d->nav2, SIGNAL(exportItemToClipboardAsDataTable(KexiPart::Item*)), + this, SLOT(copyItemToClipboardAsDataTable(KexiPart::Item*))); + connect(d->nav2, SIGNAL(exportItemToFileAsDataTable(KexiPart::Item*)), + this, SLOT(exportItemAsDataTable(KexiPart::Item*))); + connect(d->nav2, SIGNAL(printItem(KexiPart::Item*)), + this, SLOT(printItem(KexiPart::Item*))); + connect(d->nav2, SIGNAL(pageSetupForItem(KexiPart::Item*)), + this, SLOT(showPageSetupForItem(KexiPart::Item*))); + connect(d->nav2, SIGNAL(selectionChanged(KexiPart::Item*)), + this, SLOT(slotPartItemSelectedInNavigator(KexiPart::Item*))); + if (d->prj) {//connect to the project + connect(d->prj, SIGNAL(itemRemoved(const KexiPart::Item&)), + d->nav2, SLOT(slotRemoveItem(const KexiPart::Item&))); + } + + // d->restoreNavigatorWidth(); } if (d->prj->isConnected()) { @@ -2143,6 +2191,8 @@ showWarningContinueMessage(partManagerErrorMessages, QString(), "dontShowWarningsRelatedToPluginsLoading"); } + d->nav2->setProject(d->prj, QString()/*all classes*/, &partManagerErrorMessages); + } connect(d->prj, SIGNAL(newItemStored(KexiPart::Item&)), d->nav, SLOT(addItem(KexiPart::Item&))); d->nav->setFocus(); --- trunk/koffice/kexi/main/KexiMainWindow_p.h #1154757:1154758 @@ -35,6 +35,7 @@ #include #include +class KexiProjectNavigator; //! @short Main application's tabbed toolbar class KexiTabbedToolBar : public KTabWidget @@ -298,6 +299,7 @@ d->tabToRaise = -1; } else if (d->tabToRaise != tab) { d->tabRaiseTimer.start(); + d->tabToRaise = tab; } KTabWidget::mouseMoveEvent(event); @@ -945,6 +947,7 @@ KexiContextHelp *ctxHelp; #endif KexiProjectListView *nav; + KexiProjectNavigator *nav2; KexiTabbedToolBar *tabbedToolBar; KexiDockWidget *navDockWidget; KTabWidget *propEditorTabWidget; --- trunk/koffice/kexi/widget/CMakeLists.txt #1154757:1154758 @@ -32,6 +32,10 @@ kexiprjtypeselector.cpp KexiProjectListView.cpp KexiProjectListViewItem.cpp + KexiProjectModel.cpp + KexiProjectModelItem.cpp + KexiProjectNavigator.cpp + KexiProjectTreeView.cpp )