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>
This commit is contained in:
Thomas Hartmann
2018-02-01 10:25:07 +01:00
parent bc15b47487
commit 99da7ef2b3
5 changed files with 80 additions and 16 deletions

View File

@@ -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
}

View File

@@ -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();

View File

@@ -85,6 +85,8 @@ public:
void toggleLeftSidebar();
void toggleRightSidebar();
static QWidget *createProjectExplorerWidget(QWidget *parent);
private: // functions
enum InitializeStatus { NotInitialized, Initializing, Initialized };

View File

@@ -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, [] () {

View File

@@ -82,6 +82,8 @@ public:
DesignDocument *currentDesignDocument() const;
Internal::DesignModeWidget *mainWidget() const;
QWidget *createProjectExplorerWidget(QWidget *parent) const;
void switchToTextModeDeferred();
void emitCurrentTextEditorChanged(Core::IEditor *editor);