forked from qt-creator/qt-creator
Integrate ADS in QtCreator
- Integrate DockManager in DesignModeWidget (create factory default workspace, create menu items, add qds constants, remove unused shortcuts) - Remove unused functions and variables due to new docking system usage - Add DockWidget style sheet to resources - Fix scrollbar style by merging base and scrollbar style sheets - Fix update of StatesEditorWidget when switching tabs - Add missing unique ids in widget info - Set minimum size on ItemLibraryWidget Change-Id: I08be6d753233fc767037a33b41af335cec6d43b1 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
committed by
Henning Gründl
parent
8f686e985c
commit
79612417e3
@@ -1,6 +1,6 @@
|
||||
add_qtc_plugin(QmlDesigner
|
||||
DEPENDS
|
||||
QmlJS LanguageUtils QmlEditorWidgets
|
||||
QmlJS LanguageUtils QmlEditorWidgets AdvancedDockingSystem
|
||||
Qt5::QuickWidgets Qt5::CorePrivate
|
||||
DEFINES
|
||||
DESIGNER_CORE_LIBRARY
|
||||
|
||||
@@ -87,8 +87,6 @@ ConnectionViewWidget::ConnectionViewWidget(QWidget *parent) :
|
||||
QStyle *style = QStyleFactory::create("fusion");
|
||||
setStyle(style);
|
||||
|
||||
setStyleSheet(Theme::replaceCssColors(QLatin1String(Utils::FileReader::fetchQrc(QLatin1String(":/connectionview/stylesheet.css")))));
|
||||
|
||||
//ui->tabWidget->tabBar()->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
|
||||
ui->tabBar->setUsesScrollButtons(true);
|
||||
@@ -105,13 +103,9 @@ ConnectionViewWidget::ConnectionViewWidget(QWidget *parent) :
|
||||
|
||||
ui->tabBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
|
||||
|
||||
const QString themedScrollBarCss = Theme::replaceCssColors(
|
||||
QLatin1String(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/scrollbar.css"))));
|
||||
|
||||
ui->connectionView->setStyleSheet(themedScrollBarCss);
|
||||
ui->bindingView->setStyleSheet(themedScrollBarCss);
|
||||
ui->dynamicPropertiesView->setStyleSheet(themedScrollBarCss);
|
||||
ui->backendView->setStyleSheet(themedScrollBarCss);
|
||||
QByteArray sheet = Utils::FileReader::fetchQrc(":/connectionview/stylesheet.css");
|
||||
sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css");
|
||||
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(sheet)));
|
||||
|
||||
connect(ui->tabBar, &QTabBar::currentChanged,
|
||||
ui->stackedWidget, &QStackedWidget::setCurrentIndex);
|
||||
|
||||
@@ -59,8 +59,6 @@ namespace QmlDesigner {
|
||||
FormEditorWidget::FormEditorWidget(FormEditorView *view) :
|
||||
m_formEditorView(view)
|
||||
{
|
||||
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/formeditorstylesheet.css")))));
|
||||
|
||||
auto fillLayout = new QVBoxLayout(this);
|
||||
fillLayout->setContentsMargins(0, 0, 0, 0);
|
||||
fillLayout->setSpacing(0);
|
||||
@@ -168,7 +166,10 @@ FormEditorWidget::FormEditorWidget(FormEditorView *view) :
|
||||
m_graphicsView = new FormEditorGraphicsView(this);
|
||||
|
||||
fillLayout->addWidget(m_graphicsView.data());
|
||||
m_graphicsView.data()->setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(QLatin1String(":/qmldesigner/scrollbar.css")))));
|
||||
|
||||
QByteArray sheet = Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css");
|
||||
sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css");
|
||||
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(sheet)));
|
||||
}
|
||||
|
||||
void FormEditorWidget::changeTransformTool(bool checked)
|
||||
|
||||
@@ -56,7 +56,7 @@ WidgetInfo ImportManagerView::widgetInfo()
|
||||
m_importsWidget->setImports(model()->imports());
|
||||
}
|
||||
|
||||
return createWidgetInfo(m_importsWidget, nullptr, QLatin1String("ImportManager"), WidgetInfo::LeftPane, 1);
|
||||
return createWidgetInfo(m_importsWidget, nullptr, QLatin1String("ImportManager"), WidgetInfo::LeftPane, 1, tr("Import Manager"));
|
||||
}
|
||||
|
||||
void ImportManagerView::modelAttached(Model *model)
|
||||
|
||||
@@ -58,7 +58,8 @@ WidgetInfo ItemLibraryView::widgetInfo()
|
||||
new WidgetInfo::ToolBarWidgetDefaultFactory<ItemLibraryWidget>(m_widget.data()),
|
||||
QStringLiteral("Library"),
|
||||
WidgetInfo::LeftPane,
|
||||
0);
|
||||
0,
|
||||
tr("Library"));
|
||||
}
|
||||
|
||||
void ItemLibraryView::modelAttached(Model *model)
|
||||
|
||||
@@ -83,7 +83,7 @@ static QString propertyEditorResourcesPath() {
|
||||
ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
|
||||
QFrame(parent),
|
||||
m_itemIconSize(24, 24),
|
||||
m_itemViewQuickWidget(new QQuickWidget),
|
||||
m_itemViewQuickWidget(new QQuickWidget(this)),
|
||||
m_resourcesView(new ItemLibraryResourceView(this)),
|
||||
m_importTagsWidget(new QWidget(this)),
|
||||
m_addResourcesWidget(new QWidget(this)),
|
||||
@@ -147,6 +147,8 @@ ItemLibraryWidget::ItemLibraryWidget(QWidget *parent) :
|
||||
m_stackedWidget = new QStackedWidget(this);
|
||||
m_stackedWidget->addWidget(m_itemViewQuickWidget.data());
|
||||
m_stackedWidget->addWidget(m_resourcesView.data());
|
||||
m_stackedWidget->setMinimumHeight(30);
|
||||
m_stackedWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
|
||||
|
||||
QWidget *spacer = new QWidget(this);
|
||||
spacer->setObjectName(QStringLiteral("itemLibrarySearchInputSpacer"));
|
||||
|
||||
@@ -142,7 +142,8 @@ WidgetInfo NavigatorView::widgetInfo()
|
||||
new WidgetInfo::ToolBarWidgetDefaultFactory<NavigatorWidget>(m_widget.data()),
|
||||
QStringLiteral("Navigator"),
|
||||
WidgetInfo::LeftPane,
|
||||
0);
|
||||
0,
|
||||
tr("Navigator"));
|
||||
}
|
||||
|
||||
void NavigatorView::modelAttached(Model *model)
|
||||
|
||||
@@ -92,8 +92,9 @@ NavigatorWidget::NavigatorWidget(NavigatorView *view)
|
||||
setWindowTitle(tr("Navigator", "Title of navigator view"));
|
||||
|
||||
#ifndef QMLDESIGNER_TEST
|
||||
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"))));
|
||||
m_treeView->setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css"))));
|
||||
QByteArray sheet = Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css");
|
||||
sheet += Utils::FileReader::fetchQrc(":/qmldesigner/scrollbar.css");
|
||||
setStyleSheet(Theme::replaceCssColors(QString::fromUtf8(sheet)));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -760,7 +760,7 @@ bool PropertyEditorView::hasWidget() const
|
||||
|
||||
WidgetInfo PropertyEditorView::widgetInfo()
|
||||
{
|
||||
return createWidgetInfo(m_stackedWidget, nullptr, QStringLiteral("Properties"), WidgetInfo::RightPane, 0);
|
||||
return createWidgetInfo(m_stackedWidget, nullptr, QStringLiteral("Properties"), WidgetInfo::RightPane, 0, tr("Properties"));
|
||||
}
|
||||
|
||||
void PropertyEditorView::currentStateChanged(const ModelNode &node)
|
||||
|
||||
128
src/plugins/qmldesigner/components/resources/dockwidgets.css
Normal file
128
src/plugins/qmldesigner/components/resources/dockwidgets.css
Normal file
@@ -0,0 +1,128 @@
|
||||
ADS--DockContainerWidget
|
||||
{
|
||||
background-color: creatorTheme.QmlDesigner_BackgroundColorDarkAlternate;
|
||||
}
|
||||
|
||||
ADS--DockContainerWidget QSplitter::handle
|
||||
{
|
||||
background-color: creatorTheme.QmlDesigner_BackgroundColorDarkAlternate;
|
||||
}
|
||||
|
||||
ADS--DockAreaWidget
|
||||
{
|
||||
background-color: creatorTheme.BackgroundColorNormal;
|
||||
}
|
||||
|
||||
ADS--DockAreaWidget #tabsMenuButton::menu-indicator
|
||||
{
|
||||
image: none;
|
||||
}
|
||||
|
||||
ADS--DockSplitter::handle:horizontal {
|
||||
width: 1px;
|
||||
background-color: creatorTheme.SplitterColor;
|
||||
}
|
||||
|
||||
ADS--DockSplitter::handle:vertical {
|
||||
height: 1px;
|
||||
background-color: creatorTheme.SplitterColor;
|
||||
}
|
||||
|
||||
ADS--DockWidgetTab
|
||||
{
|
||||
background-color: creatorTheme.BackgroundColorDark;
|
||||
border-color: creatorTheme.SplitterColor;
|
||||
border-style: solid;
|
||||
border-width: 0 1px 0 0;
|
||||
}
|
||||
|
||||
ADS--DockWidgetTab[activeTab="true"]
|
||||
{
|
||||
background-color: creatorTheme.QmlDesigner_TabLight;
|
||||
}
|
||||
|
||||
ADS--DockWidgetTab QLabel
|
||||
{
|
||||
color: creatorTheme.QmlDesigner_TabLight;
|
||||
}
|
||||
|
||||
ADS--DockWidgetTab[activeTab="true"] QLabel
|
||||
{
|
||||
color: creatorTheme.QmlDesigner_TabDark;
|
||||
}
|
||||
|
||||
ADS--DockWidget
|
||||
{
|
||||
background-color: palette(light);
|
||||
border-color: red;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
ADS--DockAreaTitleBar{ background-color: creatorTheme.BackgroundColorDark; }
|
||||
|
||||
QWidget#tabsContainerWidget { background-color: creatorTheme.BackgroundColorDark; }
|
||||
|
||||
ADS--TitleBarButton
|
||||
{
|
||||
padding: 0px 0px;
|
||||
}
|
||||
|
||||
QScrollArea#dockWidgetScrollArea
|
||||
{
|
||||
padding: 0px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#tabCloseButton
|
||||
{
|
||||
margin-top: 2px;
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 0px -2px;
|
||||
}
|
||||
|
||||
#tabCloseButton:hover
|
||||
{
|
||||
border: 1px solid rgba(0, 0, 0, 32);
|
||||
background: rgba(0, 0, 0, 16);
|
||||
}
|
||||
|
||||
#tabCloseButton:pressed
|
||||
{
|
||||
background: rgba(0, 0, 0, 32);
|
||||
}
|
||||
|
||||
QScrollBar {
|
||||
background-color: creatorTheme.BackgroundColorDark;
|
||||
}
|
||||
|
||||
QScrollBar:vertical {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
QScrollBar:horizontal {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
QScrollBar::handle {
|
||||
background-color: creatorTheme.QmlDesigner_ScrollBarHandleColor;
|
||||
}
|
||||
|
||||
QScrollBar::handle:vertical {
|
||||
min-height: 30px;
|
||||
}
|
||||
|
||||
QScrollBar::handle:horizontal {
|
||||
min-width: 30px;
|
||||
}
|
||||
|
||||
QScrollBar::add-line,
|
||||
QScrollBar::sub-line,
|
||||
QScrollBar::left-arrow,
|
||||
QScrollBar::right-arrow,
|
||||
QScrollBar::add-page,
|
||||
QScrollBar::sub-page {
|
||||
height: 0px;
|
||||
width: 0px;
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
<file>scrollbar.css</file>
|
||||
<file>formeditorstylesheet.css</file>
|
||||
<file>centerwidget.css</file>
|
||||
<file>dockwidgets.css</file>
|
||||
<file>images/spliteditorhorizontally.png</file>
|
||||
<file>images/spliteditorhorizontally@2x.png</file>
|
||||
<file>images/spliteditorvertically.png</file>
|
||||
|
||||
@@ -127,6 +127,12 @@ void StatesEditorWidget::toggleStatesViewExpanded()
|
||||
rootObject()->setProperty("expanded", !expanded);
|
||||
}
|
||||
|
||||
void StatesEditorWidget::showEvent(QShowEvent *event)
|
||||
{
|
||||
Q_UNUSED(event)
|
||||
update();
|
||||
}
|
||||
|
||||
void StatesEditorWidget::reloadQmlSource()
|
||||
{
|
||||
QString statesListQmlFilePath = qmlSourcesPath() + QStringLiteral("/StatesList.qml");
|
||||
|
||||
@@ -59,6 +59,9 @@ public:
|
||||
|
||||
void toggleStatesViewExpanded();
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *) override;
|
||||
|
||||
private:
|
||||
void reloadQmlSource();
|
||||
Q_SLOT void handleExpandedChanged();
|
||||
|
||||
@@ -37,6 +37,12 @@
|
||||
#include <itemlibrarywidget.h>
|
||||
#include <theme.h>
|
||||
|
||||
#include <coreplugin/actionmanager/actioncontainer.h>
|
||||
#include <coreplugin/actionmanager/actionmanager.h>
|
||||
#include <coreplugin/actionmanager/actionmanager_p.h>
|
||||
#include <coreplugin/actionmanager/command.h>
|
||||
#include <qmldesigner/qmldesignerconstants.h>
|
||||
|
||||
#include <coreplugin/outputpane.h>
|
||||
#include <coreplugin/modemanager.h>
|
||||
#include <coreplugin/coreconstants.h>
|
||||
@@ -56,6 +62,10 @@
|
||||
#include <QToolBar>
|
||||
#include <QLayout>
|
||||
#include <QBoxLayout>
|
||||
#include <QDir>
|
||||
|
||||
#include <advanceddockingsystem/dockareawidget.h>
|
||||
#include <advanceddockingsystem/docksplitter.h>
|
||||
|
||||
using Core::MiniSplitter;
|
||||
using Core::IEditor;
|
||||
@@ -67,13 +77,9 @@ enum {
|
||||
debug = false
|
||||
};
|
||||
|
||||
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)
|
||||
for (QToolButton *button : buttons)
|
||||
button->hide();
|
||||
}
|
||||
|
||||
@@ -138,36 +144,12 @@ DesignModeWidget::DesignModeWidget()
|
||||
|
||||
DesignModeWidget::~DesignModeWidget()
|
||||
{
|
||||
m_leftSideBar.reset();
|
||||
m_rightSideBar.reset();
|
||||
|
||||
foreach (QPointer<QWidget> widget, m_viewWidgets) {
|
||||
for (QPointer<QWidget> widget : m_viewWidgets) {
|
||||
if (widget)
|
||||
widget.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void DesignModeWidget::restoreDefaultView()
|
||||
{
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
m_leftSideBar->closeAllWidgets();
|
||||
m_rightSideBar->closeAllWidgets();
|
||||
m_leftSideBar->readSettings(settings, "none.LeftSideBar");
|
||||
m_rightSideBar->readSettings(settings, "none.RightSideBar");
|
||||
m_leftSideBar->show();
|
||||
m_rightSideBar->show();
|
||||
}
|
||||
|
||||
void DesignModeWidget::toggleLeftSidebar()
|
||||
{
|
||||
if (m_leftSideBar)
|
||||
m_leftSideBar->setVisible(!m_leftSideBar->isVisible());
|
||||
}
|
||||
|
||||
void DesignModeWidget::toggleRightSidebar()
|
||||
{
|
||||
if (m_rightSideBar)
|
||||
m_rightSideBar->setVisible(!m_rightSideBar->isVisible());
|
||||
delete m_dockManager;
|
||||
}
|
||||
|
||||
QWidget *DesignModeWidget::createProjectExplorerWidget(QWidget *parent)
|
||||
@@ -178,7 +160,7 @@ QWidget *DesignModeWidget::createProjectExplorerWidget(QWidget *parent)
|
||||
Core::NavigationView navigationView;
|
||||
navigationView.widget = nullptr;
|
||||
|
||||
foreach (Core::INavigationWidgetFactory *factory, factories) {
|
||||
for (Core::INavigationWidgetFactory *factory : factories) {
|
||||
if (factory->id() == "Projects") {
|
||||
navigationView = factory->createWidget();
|
||||
hideToolButtons(navigationView.dockToolBarWidgets);
|
||||
@@ -196,29 +178,23 @@ QWidget *DesignModeWidget::createProjectExplorerWidget(QWidget *parent)
|
||||
return navigationView.widget;
|
||||
}
|
||||
|
||||
void DesignModeWidget::readSettings()
|
||||
void DesignModeWidget::readSettings() // readPerspectives
|
||||
{
|
||||
return;
|
||||
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
|
||||
settings->beginGroup("Bauhaus");
|
||||
m_leftSideBar->readSettings(settings, QStringLiteral("LeftSideBar"));
|
||||
m_rightSideBar->readSettings(settings, QStringLiteral("RightSideBar"));
|
||||
if (settings->contains("MainSplitter")) {
|
||||
const QByteArray splitterState = settings->value("MainSplitter").toByteArray();
|
||||
m_mainSplitter->restoreState(splitterState);
|
||||
m_mainSplitter->setOpaqueResize(); // force opaque resize since it used to be off
|
||||
}
|
||||
settings->endGroup();
|
||||
}
|
||||
|
||||
void DesignModeWidget::saveSettings()
|
||||
void DesignModeWidget::saveSettings() // savePerspectives
|
||||
{
|
||||
return;
|
||||
|
||||
QSettings *settings = Core::ICore::settings();
|
||||
|
||||
settings->beginGroup("Bauhaus");
|
||||
m_leftSideBar->saveSettings(settings, QStringLiteral("LeftSideBar"));
|
||||
m_rightSideBar->saveSettings(settings, QStringLiteral("RightSideBar"));
|
||||
settings->setValue("MainSplitter", m_mainSplitter->saveState());
|
||||
settings->endGroup();
|
||||
}
|
||||
|
||||
@@ -240,12 +216,20 @@ void DesignModeWidget::disableWidgets()
|
||||
m_isDisabled = true;
|
||||
}
|
||||
|
||||
void DesignModeWidget::switchTextOrForm()
|
||||
bool DesignModeWidget::eventFilter(QObject *obj, QEvent *event) // TODO
|
||||
{
|
||||
if (m_centralTabWidget->currentWidget() == viewManager().widget("TextEditor"))
|
||||
m_centralTabWidget->switchTo(viewManager().widget("FormEditor"));
|
||||
else
|
||||
m_centralTabWidget->switchTo(viewManager().widget("TextEditor"));
|
||||
if (event->type() == QEvent::Hide) {
|
||||
qDebug() << ">>> HIDE";
|
||||
m_outputPaneDockWidget->toggleView(false);
|
||||
return true;
|
||||
} else if (event->type() == QEvent::Show) {
|
||||
qDebug() << ">>> SHOW";
|
||||
m_outputPaneDockWidget->toggleView(true);
|
||||
return true;
|
||||
} else {
|
||||
// standard event processing
|
||||
return QObject::eventFilter(obj, event);
|
||||
}
|
||||
}
|
||||
|
||||
void DesignModeWidget::setup()
|
||||
@@ -255,42 +239,122 @@ void DesignModeWidget::setup()
|
||||
actionManager.createDefaultAddResourceHandler();
|
||||
actionManager.polishActions();
|
||||
|
||||
QList<Core::INavigationWidgetFactory *> factories =
|
||||
Core::INavigationWidgetFactory::allNavigationFactories();
|
||||
m_dockManager = new ADS::DockManager(this);
|
||||
m_dockManager->setConfigFlags(ADS::DockManager::DefaultNonOpaqueConfig);
|
||||
m_dockManager->setSettings(Core::ICore::settings(QSettings::UserScope));
|
||||
|
||||
QWidget *openDocumentsWidget = nullptr;
|
||||
QWidget *projectsExplorer = nullptr;
|
||||
QWidget *fileSystemExplorer = nullptr;
|
||||
QString sheet = QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/dockwidgets.css"));
|
||||
m_dockManager->setStyleSheet(Theme::replaceCssColors(sheet));
|
||||
|
||||
foreach (Core::INavigationWidgetFactory *factory, factories) {
|
||||
// Setup Actions and Menus
|
||||
Core::ActionContainer *mwindow = Core::ActionManager::actionContainer(Core::Constants::M_WINDOW);
|
||||
// Window > Views
|
||||
Core::ActionContainer *mviews = Core::ActionManager::createMenu(Core::Constants::M_WINDOW_VIEWS);
|
||||
mviews->menu()->addSeparator();
|
||||
// Window > Workspaces
|
||||
Core::ActionContainer *mworkspaces = Core::ActionManager::createMenu(QmlDesigner::Constants::M_WINDOW_WORKSPACES);
|
||||
mwindow->addMenu(mworkspaces, Core::Constants::G_WINDOW_VIEWS);
|
||||
mworkspaces->menu()->setTitle(tr("&Workspaces"));
|
||||
mworkspaces->setOnAllDisabledBehavior(Core::ActionContainer::Show); // TODO what does it exactly do?!
|
||||
|
||||
// Connect opening of the 'window' menu with creation of the workspaces menu
|
||||
connect(mwindow->menu(), &QMenu::aboutToShow, this, &DesignModeWidget::aboutToShowWorkspaces);
|
||||
|
||||
// Create a DockWidget for each QWidget and add them to the DockManager
|
||||
const Core::Context designContext(Core::Constants::C_DESIGN_MODE);
|
||||
static const Core::Id actionToggle("QmlDesigner.Toggle");
|
||||
|
||||
// First get all navigation views
|
||||
QList<Core::INavigationWidgetFactory *> factories = Core::INavigationWidgetFactory::allNavigationFactories();
|
||||
|
||||
for (Core::INavigationWidgetFactory *factory : factories) {
|
||||
Core::NavigationView navigationView;
|
||||
navigationView.widget = nullptr;
|
||||
QString uniqueId;
|
||||
QString title;
|
||||
|
||||
if (factory->id() == "Projects") {
|
||||
navigationView = factory->createWidget();
|
||||
projectsExplorer = navigationView.widget;
|
||||
hideToolButtons(navigationView.dockToolBarWidgets);
|
||||
projectsExplorer->setWindowTitle(tr("Projects"));
|
||||
} else if (factory->id() == "File System") {
|
||||
navigationView.widget->setWindowTitle(tr(factory->id().name()));
|
||||
uniqueId = "Projects";
|
||||
title = "Projects";
|
||||
}
|
||||
if (factory->id() == "File System") {
|
||||
navigationView = factory->createWidget();
|
||||
fileSystemExplorer = navigationView.widget;
|
||||
hideToolButtons(navigationView.dockToolBarWidgets);
|
||||
fileSystemExplorer->setWindowTitle(tr("File System"));
|
||||
} else if (factory->id() == "Open Documents") {
|
||||
navigationView.widget->setWindowTitle(tr(factory->id().name()));
|
||||
uniqueId = "FileSystem";
|
||||
title = "File System";
|
||||
}
|
||||
if (factory->id() == "Open Documents") {
|
||||
navigationView = factory->createWidget();
|
||||
openDocumentsWidget = navigationView.widget;
|
||||
hideToolButtons(navigationView.dockToolBarWidgets);
|
||||
openDocumentsWidget->setWindowTitle(tr("Open Documents"));
|
||||
navigationView.widget->setWindowTitle(tr(factory->id().name()));
|
||||
uniqueId = "OpenDocuments";
|
||||
title = "Open Documents";
|
||||
}
|
||||
|
||||
if (navigationView.widget) {
|
||||
// Apply stylesheet to QWidget
|
||||
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)));
|
||||
|
||||
// Create DockWidget
|
||||
ADS::DockWidget *dockWidget = new ADS::DockWidget(uniqueId);
|
||||
dockWidget->setWidget(navigationView.widget);
|
||||
dockWidget->setWindowTitle(title);
|
||||
m_dockManager->addDockWidget(ADS::NoDockWidgetArea, dockWidget);
|
||||
|
||||
// Create menu action
|
||||
auto command = Core::ActionManager::registerAction(dockWidget->toggleViewAction(),
|
||||
actionToggle.withSuffix(uniqueId + "Widget"),
|
||||
designContext);
|
||||
command->setAttribute(Core::Command::CA_Hide);
|
||||
mviews->addAction(command);
|
||||
}
|
||||
}
|
||||
|
||||
auto toolBar = new QToolBar;
|
||||
// Afterwards get all the other widgets
|
||||
for (const WidgetInfo &widgetInfo : viewManager().widgetInfos()) {
|
||||
// Create DockWidget
|
||||
ADS::DockWidget *dockWidget = new ADS::DockWidget(widgetInfo.uniqueId);
|
||||
dockWidget->setWidget(widgetInfo.widget);
|
||||
dockWidget->setWindowTitle(widgetInfo.tabName);
|
||||
m_dockManager->addDockWidget(ADS::NoDockWidgetArea, dockWidget);
|
||||
|
||||
// Add to view widgets
|
||||
m_viewWidgets.append(widgetInfo.widget);
|
||||
|
||||
// Create menu action
|
||||
auto command = Core::ActionManager::registerAction(dockWidget->toggleViewAction(),
|
||||
actionToggle.withSuffix(widgetInfo.uniqueId + "Widget"),
|
||||
designContext);
|
||||
command->setAttribute(Core::Command::CA_Hide);
|
||||
mviews->addAction(command);
|
||||
}
|
||||
|
||||
// Finally the output pane
|
||||
{
|
||||
auto outputPanePlaceholder = new Core::OutputPanePlaceHolder(Core::Constants::MODE_DESIGN);
|
||||
m_outputPaneDockWidget = new ADS::DockWidget("OutputPane");
|
||||
m_outputPaneDockWidget->setWidget(outputPanePlaceholder);
|
||||
m_outputPaneDockWidget->setWindowTitle("Output Pane");
|
||||
m_dockManager->addDockWidget(ADS::NoDockWidgetArea, m_outputPaneDockWidget);
|
||||
// Create menu action
|
||||
auto command = Core::ActionManager::registerAction(m_outputPaneDockWidget->toggleViewAction(),
|
||||
actionToggle.withSuffix("OutputPaneWidget"),
|
||||
designContext);
|
||||
command->setAttribute(Core::Command::CA_Hide);
|
||||
mviews->addAction(command);
|
||||
|
||||
//outputPanePlaceholder->installEventFilter(this);
|
||||
}
|
||||
|
||||
// Create toolbars
|
||||
auto toolBar = new QToolBar();
|
||||
toolBar->addAction(viewManager().componentViewAction());
|
||||
toolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||
DesignerActionToolBar *designerToolBar = QmlDesignerPlugin::instance()->viewManager().designerActionManager().createToolBar(m_toolBar);
|
||||
@@ -298,99 +362,164 @@ void DesignModeWidget::setup()
|
||||
designerToolBar->layout()->addWidget(toolBar);
|
||||
|
||||
m_toolBar->addCenterToolBar(designerToolBar);
|
||||
|
||||
m_toolBar->setMinimumWidth(320);
|
||||
|
||||
m_mainSplitter = new MiniSplitter(this);
|
||||
m_mainSplitter->setObjectName("mainSplitter");
|
||||
|
||||
QList<Core::SideBarItem*> sideBarItems;
|
||||
QList<Core::SideBarItem*> leftSideBarItems;
|
||||
QList<Core::SideBarItem*> rightSideBarItems;
|
||||
|
||||
foreach (const WidgetInfo &widgetInfo, viewManager().widgetInfos()) {
|
||||
if (widgetInfo.placementHint == widgetInfo.LeftPane) {
|
||||
Core::SideBarItem *sideBarItem = new DesignerSideBarItem(widgetInfo.widget, widgetInfo.toolBarWidgetFactory, widgetInfo.uniqueId);
|
||||
sideBarItems.append(sideBarItem);
|
||||
leftSideBarItems.append(sideBarItem);
|
||||
}
|
||||
|
||||
if (widgetInfo.placementHint == widgetInfo.RightPane) {
|
||||
Core::SideBarItem *sideBarItem = new DesignerSideBarItem(widgetInfo.widget, widgetInfo.toolBarWidgetFactory, widgetInfo.uniqueId);
|
||||
sideBarItems.append(sideBarItem);
|
||||
rightSideBarItems.append(sideBarItem);
|
||||
|
||||
}
|
||||
m_viewWidgets.append(widgetInfo.widget);
|
||||
}
|
||||
|
||||
if (projectsExplorer) {
|
||||
Core::SideBarItem *projectExplorerItem = new Core::SideBarItem(projectsExplorer, QLatin1String(SB_PROJECTS));
|
||||
sideBarItems.append(projectExplorerItem);
|
||||
}
|
||||
|
||||
if (fileSystemExplorer) {
|
||||
Core::SideBarItem *fileSystemExplorerItem = new Core::SideBarItem(fileSystemExplorer, QLatin1String(SB_FILESYSTEM));
|
||||
sideBarItems.append(fileSystemExplorerItem);
|
||||
}
|
||||
|
||||
if (openDocumentsWidget) {
|
||||
Core::SideBarItem *openDocumentsItem = new Core::SideBarItem(openDocumentsWidget, QLatin1String(SB_OPENDOCUMENTS));
|
||||
sideBarItems.append(openDocumentsItem);
|
||||
}
|
||||
|
||||
m_leftSideBar.reset(new Core::SideBar(sideBarItems, leftSideBarItems));
|
||||
m_rightSideBar.reset(new Core::SideBar(sideBarItems, rightSideBarItems));
|
||||
|
||||
connect(m_leftSideBar.data(), &Core::SideBar::availableItemsChanged, [=](){
|
||||
// event comes from m_leftSidebar, so update right side.
|
||||
m_rightSideBar->setUnavailableItemIds(m_leftSideBar->unavailableItemIds());
|
||||
});
|
||||
|
||||
connect(m_rightSideBar.data(), &Core::SideBar::availableItemsChanged, [=](){
|
||||
// event comes from m_rightSidebar, so update left side.
|
||||
m_leftSideBar->setUnavailableItemIds(m_rightSideBar->unavailableItemIds());
|
||||
});
|
||||
|
||||
connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose, [=](){
|
||||
m_leftSideBar.reset();
|
||||
m_rightSideBar.reset();
|
||||
});
|
||||
|
||||
m_toolBar->setToolbarCreationFlags(Core::EditorToolBar::FlagsStandalone);
|
||||
m_toolBar->setNavigationVisible(true);
|
||||
|
||||
connect(m_toolBar, &Core::EditorToolBar::goForwardClicked, this, &DesignModeWidget::toolBarOnGoForwardClicked);
|
||||
connect(m_toolBar, &Core::EditorToolBar::goBackClicked, this, &DesignModeWidget::toolBarOnGoBackClicked);
|
||||
|
||||
QToolBar* toolBarWrapper = new QToolBar();
|
||||
toolBarWrapper->addWidget(m_toolBar);
|
||||
toolBarWrapper->addWidget(createCrumbleBarFrame());
|
||||
toolBarWrapper->setMovable(false);
|
||||
addToolBar(Qt::TopToolBarArea, toolBarWrapper);
|
||||
|
||||
if (currentDesignDocument())
|
||||
setupNavigatorHistory(currentDesignDocument()->textEditor());
|
||||
|
||||
// m_mainSplitter area:
|
||||
m_mainSplitter->addWidget(m_leftSideBar.data());
|
||||
m_mainSplitter->addWidget(createCenterWidget());
|
||||
m_mainSplitter->addWidget(m_rightSideBar.data());
|
||||
// Get a list of all available workspaces
|
||||
QStringList workspaces = m_dockManager->workspaces();
|
||||
QString workspace = ADS::Constants::FACTORY_DEFAULT_NAME;
|
||||
|
||||
// Finishing touches:
|
||||
m_mainSplitter->setStretchFactor(1, 1);
|
||||
m_mainSplitter->setSizes({150, 300, 150});
|
||||
// If there is no factory default workspace create one and write the xml file
|
||||
if (!workspaces.contains(ADS::Constants::FACTORY_DEFAULT_NAME)) {
|
||||
createFactoryDefaultWorkspace();
|
||||
// List of workspaces needs to be updated
|
||||
workspaces = m_dockManager->workspaces();
|
||||
}
|
||||
|
||||
QLayout *mainLayout = new QBoxLayout(QBoxLayout::RightToLeft, this);
|
||||
mainLayout->setContentsMargins(0, 0, 0, 0);
|
||||
mainLayout->setSpacing(0);
|
||||
mainLayout->addWidget(m_mainSplitter);
|
||||
// Determine workspace to restore at startup
|
||||
if (m_dockManager->autoRestorLastWorkspace()) {
|
||||
QString lastWorkspace = m_dockManager->lastWorkspace();
|
||||
if (!lastWorkspace.isEmpty() && workspaces.contains(lastWorkspace))
|
||||
workspace = lastWorkspace;
|
||||
else
|
||||
qDebug() << "Couldn't restore last workspace!";
|
||||
}
|
||||
|
||||
if (workspace.isNull() && workspaces.contains(ADS::Constants::DEFAULT_NAME)) {
|
||||
workspace = ADS::Constants::DEFAULT_NAME;
|
||||
}
|
||||
|
||||
m_dockManager->openWorkspace(workspace);
|
||||
|
||||
viewManager().enableWidgets();
|
||||
m_leftSideBar->setEnabled(true);
|
||||
m_rightSideBar->setEnabled(true);
|
||||
m_leftSideBar->setCloseWhenEmpty(false);
|
||||
m_rightSideBar->setCloseWhenEmpty(false);
|
||||
|
||||
readSettings();
|
||||
|
||||
show();
|
||||
}
|
||||
|
||||
void DesignModeWidget::aboutToShowWorkspaces()
|
||||
{
|
||||
Core::ActionContainer *aci = Core::ActionManager::actionContainer(QmlDesigner::Constants::M_WINDOW_WORKSPACES);
|
||||
QMenu *menu = aci->menu();
|
||||
menu->clear();
|
||||
|
||||
auto *ag = new QActionGroup(menu);
|
||||
|
||||
connect(ag, &QActionGroup::triggered, this, [this](QAction *action) {
|
||||
QString workspace = action->data().toString();
|
||||
m_dockManager->openWorkspace(workspace);
|
||||
});
|
||||
|
||||
QAction *action = menu->addAction("Manage...");
|
||||
connect(action, &QAction::triggered,
|
||||
m_dockManager, &ADS::DockManager::showWorkspaceMananger);
|
||||
|
||||
menu->addSeparator();
|
||||
|
||||
for (const auto &workspace : m_dockManager->workspaces())
|
||||
{
|
||||
QAction *action = ag->addAction(workspace);
|
||||
action->setData(workspace);
|
||||
action->setCheckable(true);
|
||||
if (workspace == m_dockManager->activeWorkspace())
|
||||
action->setChecked(true);
|
||||
}
|
||||
menu->addActions(ag->actions());
|
||||
}
|
||||
|
||||
void DesignModeWidget::createFactoryDefaultWorkspace()
|
||||
{
|
||||
ADS::DockAreaWidget* centerArea = nullptr;
|
||||
ADS::DockAreaWidget* leftArea = nullptr;
|
||||
ADS::DockAreaWidget* rightArea = nullptr;
|
||||
ADS::DockAreaWidget* bottomArea = nullptr;
|
||||
|
||||
// Iterate over all widgets and only get the central once to start with creating the factory
|
||||
// default workspace layout.
|
||||
for (const WidgetInfo &widgetInfo : viewManager().widgetInfos()) {
|
||||
if (widgetInfo.placementHint == widgetInfo.CentralPane) {
|
||||
ADS::DockWidget *dockWidget = m_dockManager->findDockWidget(widgetInfo.uniqueId);
|
||||
if (centerArea)
|
||||
m_dockManager->addDockWidget(ADS::CenterDockWidgetArea, dockWidget, centerArea);
|
||||
else
|
||||
centerArea = m_dockManager->addDockWidget(ADS::CenterDockWidgetArea, dockWidget);
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate over all widgets and get the remaining left, right and bottom widgets
|
||||
for (const WidgetInfo &widgetInfo : viewManager().widgetInfos()) {
|
||||
if (widgetInfo.placementHint == widgetInfo.LeftPane) {
|
||||
ADS::DockWidget *dockWidget = m_dockManager->findDockWidget(widgetInfo.uniqueId);
|
||||
if (leftArea)
|
||||
m_dockManager->addDockWidget(ADS::CenterDockWidgetArea, dockWidget, leftArea);
|
||||
else
|
||||
leftArea = m_dockManager->addDockWidget(ADS::LeftDockWidgetArea, dockWidget, centerArea);
|
||||
}
|
||||
|
||||
if (widgetInfo.placementHint == widgetInfo.RightPane) {
|
||||
ADS::DockWidget *dockWidget = m_dockManager->findDockWidget(widgetInfo.uniqueId);
|
||||
if (rightArea)
|
||||
m_dockManager->addDockWidget(ADS::CenterDockWidgetArea, dockWidget, rightArea);
|
||||
else
|
||||
rightArea = m_dockManager->addDockWidget(ADS::RightDockWidgetArea, dockWidget, centerArea);
|
||||
}
|
||||
|
||||
if (widgetInfo.placementHint == widgetInfo.BottomPane) {
|
||||
ADS::DockWidget *dockWidget = m_dockManager->findDockWidget(widgetInfo.uniqueId);
|
||||
if (bottomArea)
|
||||
m_dockManager->addDockWidget(ADS::CenterDockWidgetArea, dockWidget, bottomArea);
|
||||
else
|
||||
bottomArea = m_dockManager->addDockWidget(ADS::BottomDockWidgetArea, dockWidget, centerArea);
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate over all 'special' widgets
|
||||
QStringList specialWidgets = {"Projects", "FileSystem", "OpenDocuments"};
|
||||
ADS::DockAreaWidget* leftBottomArea = nullptr;
|
||||
for (const QString &uniqueId : specialWidgets) {
|
||||
ADS::DockWidget *dockWidget = m_dockManager->findDockWidget(uniqueId);
|
||||
if (leftBottomArea)
|
||||
m_dockManager->addDockWidget(ADS::CenterDockWidgetArea, dockWidget, leftBottomArea);
|
||||
else
|
||||
leftBottomArea = m_dockManager->addDockWidget(ADS::BottomDockWidgetArea, dockWidget, leftArea);
|
||||
}
|
||||
|
||||
// Add the last widget 'OutputPane' as the bottom bottom area
|
||||
ADS::DockWidget *dockWidget = m_dockManager->findDockWidget("OutputPane");
|
||||
m_dockManager->addDockWidget(ADS::BottomDockWidgetArea, dockWidget, bottomArea);
|
||||
|
||||
// TODO This is just a test
|
||||
auto splitter = centerArea->dockContainer()->rootSplitter();
|
||||
splitter->setSizes({100, 800, 100});
|
||||
// TODO
|
||||
|
||||
m_dockManager->createWorkspace(ADS::Constants::FACTORY_DEFAULT_NAME);
|
||||
|
||||
// Write the xml file
|
||||
Utils::FilePath fileName = m_dockManager->workspaceNameToFileName(ADS::Constants::FACTORY_DEFAULT_NAME);
|
||||
QString errorString;
|
||||
Utils::FileSaver fileSaver(fileName.toString(), QIODevice::Text);
|
||||
QByteArray data = m_dockManager->saveState();
|
||||
if (!fileSaver.hasError()) {
|
||||
fileSaver.write(data);
|
||||
}
|
||||
if (!fileSaver.finalize()) {
|
||||
errorString = fileSaver.errorString();
|
||||
}
|
||||
}
|
||||
|
||||
void DesignModeWidget::toolBarOnGoBackClicked()
|
||||
{
|
||||
if (m_navigatorHistoryCounter > 0) {
|
||||
@@ -445,93 +574,6 @@ void DesignModeWidget::addNavigatorHistoryEntry(const Utils::FilePath &fileName)
|
||||
++m_navigatorHistoryCounter;
|
||||
}
|
||||
|
||||
static QTabWidget *createWidgetsInTabWidget(const QList<WidgetInfo> &widgetInfos)
|
||||
{
|
||||
auto tabWidget = new QTabWidget;
|
||||
|
||||
foreach (const WidgetInfo &widgetInfo, widgetInfos)
|
||||
tabWidget->addTab(widgetInfo.widget, widgetInfo.tabName);
|
||||
|
||||
return tabWidget;
|
||||
}
|
||||
|
||||
static QWidget *createbottomSideBarWidget(const QList<WidgetInfo> &widgetInfos)
|
||||
{
|
||||
//### we now own these here
|
||||
QList<WidgetInfo> topWidgetInfos;
|
||||
foreach (const WidgetInfo &widgetInfo, widgetInfos) {
|
||||
if (widgetInfo.placementHint == widgetInfo.BottomPane)
|
||||
topWidgetInfos.append(widgetInfo);
|
||||
}
|
||||
|
||||
QWidget *widget = topWidgetInfos.constFirst().widget;
|
||||
if (topWidgetInfos.count() > 1) {
|
||||
QWidget *background = new QWidget();
|
||||
background->setProperty("designerBackgroundColor", true);
|
||||
|
||||
QString sheet = QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css"));
|
||||
sheet.prepend("QWidget[designerBackgroundColor=\"true\"] {background-color: creatorTheme.QmlDesigner_BackgroundColorDarkAlternate;}");
|
||||
|
||||
background->setStyleSheet(Theme::replaceCssColors(sheet));
|
||||
background->setLayout(new QVBoxLayout);
|
||||
background->layout()->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
background->layout()->addWidget(createWidgetsInTabWidget(topWidgetInfos));
|
||||
widget = background;
|
||||
}
|
||||
return widget;
|
||||
}
|
||||
|
||||
static Core::MiniSplitter *createCentralSplitter(const QList<WidgetInfo> &widgetInfos)
|
||||
{
|
||||
// editor and output panes
|
||||
auto outputPlaceholderSplitter = new Core::MiniSplitter;
|
||||
outputPlaceholderSplitter->setOrientation(Qt::Vertical);
|
||||
|
||||
auto switchSplitTabWidget = new SwitchSplitTabWidget();
|
||||
|
||||
foreach (const WidgetInfo &widgetInfo, widgetInfos) {
|
||||
if (widgetInfo.placementHint == widgetInfo.CentralPane)
|
||||
switchSplitTabWidget->addTab(widgetInfo.widget, widgetInfo.tabName);
|
||||
}
|
||||
|
||||
outputPlaceholderSplitter->addWidget(switchSplitTabWidget);
|
||||
|
||||
QWidget *bottomSideBar = createbottomSideBarWidget(widgetInfos);
|
||||
bottomSideBar->setObjectName("bottomSideBar");
|
||||
outputPlaceholderSplitter->addWidget(bottomSideBar);
|
||||
|
||||
auto outputPanePlaceholder = new Core::OutputPanePlaceHolder(Core::Constants::MODE_DESIGN, outputPlaceholderSplitter);
|
||||
outputPlaceholderSplitter->addWidget(outputPanePlaceholder);
|
||||
|
||||
outputPlaceholderSplitter->setStretchFactor(0, 10);
|
||||
outputPlaceholderSplitter->setStretchFactor(1, 1);
|
||||
return outputPlaceholderSplitter;
|
||||
}
|
||||
|
||||
QWidget *DesignModeWidget::createCenterWidget()
|
||||
{
|
||||
QWidget *centerWidget = new QWidget;
|
||||
|
||||
auto horizontalLayout = new QVBoxLayout(centerWidget);
|
||||
horizontalLayout->setContentsMargins(0, 0, 0, 0);
|
||||
horizontalLayout->setSpacing(0);
|
||||
|
||||
horizontalLayout->addWidget(m_toolBar);
|
||||
horizontalLayout->addWidget(createCrumbleBarFrame());
|
||||
|
||||
Core::MiniSplitter *centralSplitter = createCentralSplitter(viewManager().widgetInfos());
|
||||
m_centralTabWidget = centralSplitter->findChild<SwitchSplitTabWidget*>();
|
||||
Q_ASSERT(m_centralTabWidget);
|
||||
m_centralTabWidget->switchTo(viewManager().widget("FormEditor"));
|
||||
|
||||
m_bottomSideBar = centralSplitter->findChild<QWidget*>("bottomSideBar");
|
||||
Q_ASSERT(m_bottomSideBar);
|
||||
horizontalLayout->addWidget(centralSplitter);
|
||||
|
||||
return centerWidget;
|
||||
}
|
||||
|
||||
QWidget *DesignModeWidget::createCrumbleBarFrame()
|
||||
{
|
||||
auto frame = new Utils::StyledBar(this);
|
||||
@@ -551,7 +593,9 @@ CrumbleBar *DesignModeWidget::crumbleBar() const
|
||||
|
||||
void DesignModeWidget::showInternalTextEditor()
|
||||
{
|
||||
m_centralTabWidget->switchTo(viewManager().widget("TextEditor"));
|
||||
auto dockWidget = m_dockManager->findDockWidget("TextEditor");
|
||||
if (dockWidget)
|
||||
dockWidget->toggleView(true);
|
||||
}
|
||||
|
||||
void DesignModeWidget::contextHelp(const Core::IContext::HelpCallback &callback) const
|
||||
|
||||
@@ -32,8 +32,11 @@
|
||||
#include <modelnode.h>
|
||||
|
||||
#include <QWidget>
|
||||
#include <QMainWindow>
|
||||
#include <QScopedPointer>
|
||||
|
||||
#include <advanceddockingsystem/dockmanager.h>
|
||||
|
||||
namespace Core {
|
||||
class SideBar;
|
||||
class SideBarItem;
|
||||
@@ -53,7 +56,7 @@ namespace Internal {
|
||||
class DesignMode;
|
||||
class DocumentWidget;
|
||||
|
||||
class DesignModeWidget : public QWidget
|
||||
class DesignModeWidget : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -75,17 +78,17 @@ public:
|
||||
|
||||
void enableWidgets();
|
||||
void disableWidgets();
|
||||
void switchTextOrForm();
|
||||
|
||||
CrumbleBar* crumbleBar() const;
|
||||
void showInternalTextEditor();
|
||||
|
||||
void restoreDefaultView();
|
||||
void toggleLeftSidebar();
|
||||
void toggleRightSidebar();
|
||||
void determineWorkspaceToRestoreAtStartup();
|
||||
|
||||
static QWidget *createProjectExplorerWidget(QWidget *parent);
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
|
||||
private: // functions
|
||||
enum InitializeStatus { NotInitialized, Initializing, Initialized };
|
||||
|
||||
@@ -99,12 +102,13 @@ private: // functions
|
||||
QWidget *createCenterWidget();
|
||||
QWidget *createCrumbleBarFrame();
|
||||
|
||||
void aboutToShowWorkspaces();
|
||||
|
||||
void createFactoryDefaultWorkspace();
|
||||
|
||||
private: // variables
|
||||
QSplitter *m_mainSplitter = nullptr;
|
||||
SwitchSplitTabWidget* m_centralTabWidget = nullptr;
|
||||
|
||||
QScopedPointer<Core::SideBar> m_leftSideBar;
|
||||
QScopedPointer<Core::SideBar> m_rightSideBar;
|
||||
QPointer<QWidget> m_bottomSideBar;
|
||||
Core::EditorToolBar *m_toolBar;
|
||||
CrumbleBar *m_crumbleBar;
|
||||
@@ -118,6 +122,9 @@ private: // variables
|
||||
bool m_keepNavigatorHistory = false;
|
||||
|
||||
QList<QPointer<QWidget> >m_viewWidgets;
|
||||
|
||||
ADS::DockManager *m_dockManager = nullptr;
|
||||
ADS::DockWidget *m_outputPaneDockWidget = nullptr;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -2,7 +2,8 @@ QTC_PLUGIN_NAME = QmlDesigner
|
||||
QTC_LIB_DEPENDS += \
|
||||
utils \
|
||||
qmljs \
|
||||
qmleditorwidgets
|
||||
qmleditorwidgets \
|
||||
advanceddockingsystem
|
||||
QTC_PLUGIN_DEPENDS += \
|
||||
coreplugin \
|
||||
texteditor \
|
||||
|
||||
@@ -56,6 +56,9 @@ const char QUICK_3D_ASSET_ICON_DIR[] = "_icons";
|
||||
const char DEFAULT_ASSET_IMPORT_FOLDER[] = "/asset_imports";
|
||||
const char QT_QUICK_3D_MODULE_NAME[] = "QtQuick3D";
|
||||
|
||||
// Menus
|
||||
const char M_WINDOW_WORKSPACES[] = "QmlDesigner.Menu.Window.Workspaces";
|
||||
|
||||
namespace Internal {
|
||||
enum { debug = 0 };
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ Project {
|
||||
"core-private", "quickwidgets"
|
||||
]
|
||||
}
|
||||
Depends { name: "AdvancedDockingSystem" }
|
||||
Depends { name: "Core" }
|
||||
Depends { name: "QmlJS" }
|
||||
Depends { name: "QmlEditorWidgets" }
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
|
||||
#include "qmldesignerconstants.h"
|
||||
#include "qmldesignerplugin.h"
|
||||
#include "designmodewidget.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
@@ -71,10 +70,6 @@ ShortCutManager::ShortCutManager()
|
||||
m_pasteAction(tr("&Paste")),
|
||||
m_selectAllAction(tr("Select &All")),
|
||||
m_collapseExpandStatesAction(tr("Toggle States")),
|
||||
m_restoreDefaultViewAction(tr("&Restore Default View")),
|
||||
m_toggleLeftSidebarAction(tr("Toggle &Left Sidebar")),
|
||||
m_toggleRightSidebarAction(tr("Toggle &Right Sidebar")),
|
||||
m_switchTextFormAction(tr("Switch Text/Design")),
|
||||
m_escapeAction(this)
|
||||
{
|
||||
|
||||
@@ -101,26 +96,6 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex
|
||||
|
||||
connect(&m_selectAllAction,&QAction::triggered, this, &ShortCutManager::selectAll);
|
||||
|
||||
connect(&m_restoreDefaultViewAction,
|
||||
&QAction::triggered,
|
||||
QmlDesignerPlugin::instance()->mainWidget(),
|
||||
&Internal::DesignModeWidget::restoreDefaultView);
|
||||
|
||||
connect(&m_toggleLeftSidebarAction,
|
||||
&QAction::triggered,
|
||||
QmlDesignerPlugin::instance()->mainWidget(),
|
||||
&Internal::DesignModeWidget::toggleLeftSidebar);
|
||||
|
||||
connect(&m_toggleRightSidebarAction,
|
||||
&QAction::triggered,
|
||||
QmlDesignerPlugin::instance()->mainWidget(),
|
||||
&Internal::DesignModeWidget::toggleRightSidebar);
|
||||
|
||||
connect(&m_switchTextFormAction,
|
||||
&QAction::triggered,
|
||||
QmlDesignerPlugin::instance()->mainWidget(),
|
||||
&Internal::DesignModeWidget::switchTextOrForm);
|
||||
|
||||
connect(&m_collapseExpandStatesAction, &QAction::triggered, [] {
|
||||
QmlDesignerPlugin::instance()->viewManager().toggleStatesViewExpanded();
|
||||
});
|
||||
@@ -216,21 +191,11 @@ void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContex
|
||||
|
||||
Core::ActionContainer *viewsMenu = Core::ActionManager::actionContainer(Core::Constants::M_WINDOW_VIEWS);
|
||||
|
||||
Core::ActionManager::registerAction(&m_toggleLeftSidebarAction, Core::Constants::TOGGLE_LEFT_SIDEBAR, qmlDesignerMainContext);
|
||||
Core::ActionManager::registerAction(&m_toggleRightSidebarAction, Core::Constants::TOGGLE_RIGHT_SIDEBAR, qmlDesignerMainContext);
|
||||
|
||||
command = Core::ActionManager::registerAction(&m_collapseExpandStatesAction, Constants::TOGGLE_STATES_EDITOR, qmlDesignerMainContext);
|
||||
command->setAttribute(Core::Command::CA_Hide);
|
||||
command->setDefaultKeySequence(QKeySequence("Ctrl+Alt+s"));
|
||||
viewsMenu->addAction(command);
|
||||
|
||||
command = Core::ActionManager::registerAction(&m_restoreDefaultViewAction, Constants::RESTORE_DEFAULT_VIEW, qmlDesignerMainContext);
|
||||
command->setAttribute(Core::Command::CA_Hide);
|
||||
viewsMenu->addAction(command);
|
||||
|
||||
command = Core::ActionManager::registerAction(&m_switchTextFormAction, QmlDesigner::Constants::SWITCH_TEXT_DESIGN, qmlDesignerMainContext);
|
||||
command->setDefaultKeySequence(QKeySequence(Qt::Key_F4));
|
||||
|
||||
/* Registering disabled action for Escape, because Qt Quick does not support shortcut overrides. */
|
||||
command = Core::ActionManager::registerAction(&m_escapeAction, Core::Constants::S_RETURNTOEDITOR, qmlDesignerMainContext);
|
||||
command->setDefaultKeySequence(QKeySequence(Qt::Key_Escape));
|
||||
@@ -326,16 +291,6 @@ void ShortCutManager::selectAll()
|
||||
currentDesignDocument()->selectAll();
|
||||
}
|
||||
|
||||
void ShortCutManager::toggleLeftSidebar()
|
||||
{
|
||||
QmlDesignerPlugin::instance()->mainWidget()->toggleLeftSidebar();
|
||||
}
|
||||
|
||||
void ShortCutManager::toggleRightSidebar()
|
||||
{
|
||||
QmlDesignerPlugin::instance()->mainWidget()->toggleRightSidebar();
|
||||
}
|
||||
|
||||
void ShortCutManager::connectUndoActions(DesignDocument *designDocument)
|
||||
{
|
||||
if (designDocument) {
|
||||
|
||||
@@ -63,8 +63,6 @@ private:
|
||||
void copySelected();
|
||||
void paste();
|
||||
void selectAll();
|
||||
void toggleLeftSidebar();
|
||||
void toggleRightSidebar();
|
||||
void undoAvailable(bool isAvailable);
|
||||
void redoAvailable(bool isAvailable);
|
||||
void goIntoComponent();
|
||||
@@ -85,10 +83,6 @@ private:
|
||||
QAction m_pasteAction;
|
||||
QAction m_selectAllAction;
|
||||
QAction m_collapseExpandStatesAction;
|
||||
QAction m_restoreDefaultViewAction;
|
||||
QAction m_toggleLeftSidebarAction;
|
||||
QAction m_toggleRightSidebarAction;
|
||||
QAction m_switchTextFormAction;
|
||||
QAction m_escapeAction;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user