diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-02-01 10:25:07 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2018-02-02 11:01:49 +0000 |
commit | 99da7ef2b3c782f486d420b1229862e0c3b5bcd0 (patch) | |
tree | c3b6c0c05834cd64905b703cfc6416de0e09eed3 | |
parent | bc15b474878494e2b31c90d46856c3cf50690a7e (diff) |
Add project tab to navigator
This makes navigation the project a lot easier
and the layout of the side bars can be locked.
Change-Id: I3ad7b85cb8704aedf8f5ec9ea9b2930c5a0986d1
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp | 49 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designmodewidget.cpp | 38 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designmodewidget.h | 2 | ||||
-rw-r--r-- | src/plugins/qmldesigner/qmldesignerplugin.cpp | 5 | ||||
-rw-r--r-- | src/plugins/qmldesigner/qmldesignerplugin.h | 2 |
5 files changed, 80 insertions, 16 deletions
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp index 6926f7a9b3..ef96d0c161 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp @@ -25,19 +25,23 @@ #include "navigatorwidget.h" #include "navigatorview.h" -#include "qmldesignerconstants.h" -#include "qmldesignericons.h" + #include <designersettings.h> +#include <qmldesignerconstants.h> +#include <qmldesignericons.h> +#include <qmldesignerplugin.h> #include <theme.h> -#include <QBoxLayout> -#include <QToolButton> #include <QAbstractItemModel> -#include <QMenu> +#include <QBoxLayout> #include <QHeaderView> -#include <QtDebug> +#include <QMenu> +#include <QStackedWidget> +#include <QToolButton> + #include <utils/fileutils.h> #include <utils/utilsicons.h> +#include <utils/qtcassert.h> namespace QmlDesigner { @@ -54,18 +58,43 @@ NavigatorWidget::NavigatorWidget(NavigatorView *view) : m_treeView->setDefaultDropAction(Qt::LinkAction); m_treeView->setHeaderHidden(true); - QVBoxLayout *layout = new QVBoxLayout; + auto layout = new QVBoxLayout; layout->setSpacing(0); layout->setMargin(0); - layout->addWidget(m_treeView); + auto tabBar = new QTabBar(this); + tabBar->addTab(tr("Navigator")); + tabBar->addTab(tr("Project")); + tabBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + QWidget *spacer = new QWidget(this); + spacer->setObjectName(QStringLiteral("itemLibrarySearchInputSpacer")); + spacer->setFixedHeight(4); + + layout->addWidget(tabBar); + layout->addWidget(spacer); + + auto stackedWidget = new QStackedWidget(this); + stackedWidget->addWidget(m_treeView); + +#ifndef QMLDESIGNER_TEST + auto projectManager = QmlDesignerPlugin::instance()->createProjectExplorerWidget(this); + + QTC_ASSERT(projectManager, ;); + if (projectManager) + stackedWidget->addWidget(projectManager); +#endif + + connect(tabBar, &QTabBar::currentChanged, stackedWidget, &QStackedWidget::setCurrentIndex); + + layout->addWidget(stackedWidget); setLayout(layout); setWindowTitle(tr("Navigator", "Title of navigator view")); #ifndef QMLDESIGNER_TEST - setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/stylesheet.css"))))); - m_treeView->setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/scrollbar.css"))))); + setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css")))); + m_treeView->setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css")))); #endif } diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index cdad6b7bd7..867b965bd3 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -72,6 +72,12 @@ const char SB_PROJECTS[] = "Projects"; const char SB_FILESYSTEM[] = "FileSystem"; const char SB_OPENDOCUMENTS[] = "OpenDocuments"; +static void hideToolButtons(QList<QToolButton*> &buttons) +{ + foreach (QToolButton *button, buttons) + button->hide(); +} + namespace QmlDesigner { namespace Internal { @@ -169,6 +175,32 @@ void DesignModeWidget::toggleRightSidebar() m_rightSideBar->setVisible(!m_rightSideBar->isVisible()); } +QWidget *DesignModeWidget::createProjectExplorerWidget(QWidget *parent) +{ + QList<Core::INavigationWidgetFactory *> factories = + ExtensionSystem::PluginManager::getObjects<Core::INavigationWidgetFactory>(); + + Core::NavigationView navigationView; + navigationView.widget = nullptr; + + foreach (Core::INavigationWidgetFactory *factory, factories) { + if (factory->id() == "Projects") { + navigationView = factory->createWidget(); + hideToolButtons(navigationView.dockToolBarWidgets); + } + } + + if (navigationView.widget) { + QByteArray sheet = Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"); + sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css"); + sheet += "QLabel { background-color: #4f4f4f; }"; + navigationView.widget->setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(sheet))); + navigationView.widget->setParent(parent); + } + + return navigationView.widget; +} + void DesignModeWidget::readSettings() { QSettings *settings = Core::ICore::settings(); @@ -221,12 +253,6 @@ void DesignModeWidget::switchTextOrForm() m_centralTabWidget->switchTo(viewManager().widget("TextEditor")); } -static void hideToolButtons(QList<QToolButton*> &buttons) -{ - foreach (QToolButton *button, buttons) - button->hide(); -} - void DesignModeWidget::setup() { auto &actionManager = viewManager().designerActionManager(); diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h index ce585a381b..f392058b76 100644 --- a/src/plugins/qmldesigner/designmodewidget.h +++ b/src/plugins/qmldesigner/designmodewidget.h @@ -85,6 +85,8 @@ public: void toggleLeftSidebar(); void toggleRightSidebar(); + static QWidget *createProjectExplorerWidget(QWidget *parent); + private: // functions enum InitializeStatus { NotInitialized, Initializing, Initialized }; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 8750f19865..30b7a2b199 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -455,6 +455,11 @@ Internal::DesignModeWidget *QmlDesignerPlugin::mainWidget() const return nullptr; } +QWidget *QmlDesignerPlugin::createProjectExplorerWidget(QWidget *parent) const +{ + return Internal::DesignModeWidget::createProjectExplorerWidget(parent); +} + void QmlDesignerPlugin::switchToTextModeDeferred() { QTimer::singleShot(0, this, [] () { diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h index 1106c7d974..cf4a212fea 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.h +++ b/src/plugins/qmldesigner/qmldesignerplugin.h @@ -82,6 +82,8 @@ public: DesignDocument *currentDesignDocument() const; Internal::DesignModeWidget *mainWidget() const; + QWidget *createProjectExplorerWidget(QWidget *parent) const; + void switchToTextModeDeferred(); void emitCurrentTextEditorChanged(Core::IEditor *editor); |