diff options
author | Jochen Becher <jochen_becher@gmx.de> | 2015-12-03 21:31:56 +0100 |
---|---|---|
committer | Jochen Becher <jochen_becher@gmx.de> | 2015-12-08 10:00:54 +0000 |
commit | 0750fd6de53cc70de67913372088309fe4101644 (patch) | |
tree | 9315980b1edebc7845c6f2d90d3eabe14cd436b8 /src/plugins/modeleditor | |
parent | 90ab6e9b949a7162f4786dff2258bbd92df5a2d3 (diff) | |
download | qt-creator-0750fd6de53cc70de67913372088309fe4101644.tar.gz |
ModelEditor: Store last used toolbar in diagram
Opening a diagram will automatically show the toolbar which was lastly
used for that diagram.
Change-Id: Ia78225ca0bd3d9fbebfcfd22691bcc702e69e5ea
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
Diffstat (limited to 'src/plugins/modeleditor')
-rw-r--r-- | src/plugins/modeleditor/modeleditor.cpp | 93 | ||||
-rw-r--r-- | src/plugins/modeleditor/modeleditor.h | 2 |
2 files changed, 69 insertions, 26 deletions
diff --git a/src/plugins/modeleditor/modeleditor.cpp b/src/plugins/modeleditor/modeleditor.cpp index 034eb8e716..1248492583 100644 --- a/src/plugins/modeleditor/modeleditor.cpp +++ b/src/plugins/modeleditor/modeleditor.cpp @@ -98,6 +98,8 @@ namespace ModelEditor { namespace Internal { +static const char PROPERTYNAME_TOOLBARID[] = "ToolbarId"; + class ModelEditor::ModelEditorPrivate { public: @@ -215,6 +217,7 @@ void ModelEditor::init(QWidget *parent) QFont font = d->leftToolBox->font(); font.setPointSizeF(font.pointSizeF() * 0.8); d->leftToolBox->setFont(font); + connect(d->leftToolBox, &QToolBox::currentChanged, this, &ModelEditor::onToolbarSelectionChanged); d->diagramStack = new QStackedWidget(d->leftGroup); @@ -222,16 +225,17 @@ void ModelEditor::init(QWidget *parent) d->diagramStack->addWidget(d->diagramView); d->noDiagramLabel = new QLabel(d->diagramStack); - const QString placeholderText = tr("<html><body style=\"color:#909090; font-size:14px\">" - "<div align='center'>" - "<div style=\"font-size:20px\">Open a diagram</div>" - "<table><tr><td>" - "<hr/>" - "<div style=\"margin-top: 5px\">• Double-click on diagram in model tree</div>" - "<div style=\"margin-top: 5px\">• Select \"Open Diagram\" from package's context menu in model tree</div>" - "</td></tr></table>" - "</div>" - "</body></html>"); + const QString placeholderText = + tr("<html><body style=\"color:#909090; font-size:14px\">" + "<div align='center'>" + "<div style=\"font-size:20px\">Open a diagram</div>" + "<table><tr><td>" + "<hr/>" + "<div style=\"margin-top: 5px\">• Double-click on diagram in model tree</div>" + "<div style=\"margin-top: 5px\">• Select \"Open Diagram\" from package's context menu in model tree</div>" + "</td></tr></table>" + "</div>" + "</body></html>"); d->noDiagramLabel->setText(placeholderText); d->diagramStack->addWidget(d->noDiagramLabel); d->diagramStack->setCurrentWidget(d->noDiagramLabel); @@ -295,22 +299,22 @@ void ModelEditor::init(QWidget *parent) toolbarLayout->addWidget(d->diagramSelector, 1); toolbarLayout->addStretch(1); - toolbarLayout->addWidget(createToolbarCommandButton( - Constants::ACTION_ADD_PACKAGE, [this]() { onAddPackage(); }, - QIcon(QStringLiteral(":/modelinglib/48x48/package.png")), - tr("Add Package"), d->toolbar)); - toolbarLayout->addWidget(createToolbarCommandButton( - Constants::ACTION_ADD_COMPONENT, [this]() { onAddComponent(); }, - QIcon(QStringLiteral(":/modelinglib/48x48/component.png")), - tr("Add Component"), d->toolbar)); - toolbarLayout->addWidget(createToolbarCommandButton( - Constants::ACTION_ADD_CLASS, [this]() { onAddClass(); }, - QIcon(QStringLiteral(":/modelinglib/48x48/class.png")), - tr("Add Class"), d->toolbar)); - toolbarLayout->addWidget(createToolbarCommandButton( - Constants::ACTION_ADD_CANVAS_DIAGRAM, [this]() { onAddCanvasDiagram(); }, - QIcon(QStringLiteral(":/modelinglib/48x48/canvas-diagram.png")), - tr("Add Canvas Diagram"), d->toolbar)); + toolbarLayout->addWidget( + createToolbarCommandButton(Constants::ACTION_ADD_PACKAGE, [this]() { onAddPackage(); }, + QIcon(QStringLiteral(":/modelinglib/48x48/package.png")), + tr("Add Package"), d->toolbar)); + toolbarLayout->addWidget( + createToolbarCommandButton(Constants::ACTION_ADD_COMPONENT, [this]() { onAddComponent(); }, + QIcon(QStringLiteral(":/modelinglib/48x48/component.png")), + tr("Add Component"), d->toolbar)); + toolbarLayout->addWidget( + createToolbarCommandButton(Constants::ACTION_ADD_CLASS, [this]() { onAddClass(); }, + QIcon(QStringLiteral(":/modelinglib/48x48/class.png")), + tr("Add Class"), d->toolbar)); + toolbarLayout->addWidget( + createToolbarCommandButton(Constants::ACTION_ADD_CANVAS_DIAGRAM, [this]() { onAddCanvasDiagram(); }, + QIcon(QStringLiteral(":/modelinglib/48x48/canvas-diagram.png")), + tr("Add Canvas Diagram"), d->toolbar)); toolbarLayout->addSpacing(20); } @@ -849,6 +853,11 @@ void ModelEditor::onRightHorizSplitterChanged(const QByteArray &state) d->rightHorizSplitter->restoreState(state); } +void ModelEditor::onToolbarSelectionChanged() +{ + storeToolbarIdInDiagram(currentDiagram()); +} + void ModelEditor::initToolbars() { QHash<QString, QWidget *> toolBars; @@ -860,9 +869,11 @@ void ModelEditor::initToolbars() QLayout *toolBarLayout = 0; if (!toolBar) { toolBar = new QWidget(d->leftToolBox); + toolBar->setProperty(PROPERTYNAME_TOOLBARID, toolbar.id()); toolBarLayout = new QVBoxLayout(toolBar); toolBarLayout->setContentsMargins(2, 2, 2, 2); toolBarLayout->setSpacing(6); + // TODO add a user defined string attribute to toolbar as toolbar title d->leftToolBox->addItem(toolBar, toolbar.id()); toolBars.insert(toolbar.id(), toolBar); } else { @@ -929,6 +940,7 @@ void ModelEditor::initToolbars() if (!toolBars.isEmpty()) { QString generalId = QStringLiteral("General"); auto toolBar = new QWidget(d->leftToolBox); + toolBar->setProperty(PROPERTYNAME_TOOLBARID, generalId); auto toolBarLayout = new QVBoxLayout(toolBar); toolBarLayout->setContentsMargins(2, 2, 2, 2); toolBarLayout->setSpacing(6); @@ -988,6 +1000,17 @@ void ModelEditor::openDiagram(qmt::MDiagram *diagram, bool addToHistory) d->diagramStack->setCurrentWidget(d->diagramView); updateSelectedArea(SelectedArea::Nothing); addDiagramToSelector(diagram); + if (!diagram->toolbarId().isEmpty()) { + for (int i = 0; i < d->leftToolBox->count(); ++i) { + QWidget *widget = d->leftToolBox->widget(i); + if (widget && widget->property(PROPERTYNAME_TOOLBARID).toString() == diagram->toolbarId()) { + d->leftToolBox->setCurrentIndex(i); + break; + } + } + } else { + storeToolbarIdInDiagram(diagram); + } } } @@ -1108,6 +1131,24 @@ QString ModelEditor::buildDiagramLabel(const qmt::MDiagram *diagram) return label; } +void ModelEditor::storeToolbarIdInDiagram(qmt::MDiagram *diagram) +{ + int leftToolboxIndex = d->leftToolBox->currentIndex(); + if (diagram && leftToolboxIndex >= 0 && leftToolboxIndex < d->leftToolBox->count()) { + QWidget *widget = d->leftToolBox->widget(leftToolboxIndex); + if (widget) { + QString toolbarId = widget->property(PROPERTYNAME_TOOLBARID).toString(); + if (toolbarId != diagram->toolbarId()) { + // NOTE: This update is done without calling ModelController::startUpdateObject() by intention. + // This update does not need to be seen by any other controller nor shall it + // No undo shall be possible + // The document should not be set to modified state + diagram->setToolbarId(toolbarId); + } + } + } +} + void ModelEditor::addToNavigationHistory(const qmt::MDiagram *diagram) { if (Core::EditorManager::currentEditor() == this) diff --git a/src/plugins/modeleditor/modeleditor.h b/src/plugins/modeleditor/modeleditor.h index 09d62c3af4..07ede04867 100644 --- a/src/plugins/modeleditor/modeleditor.h +++ b/src/plugins/modeleditor/modeleditor.h @@ -128,6 +128,7 @@ private: void onRightSplitterChanged(const QByteArray &state); void onRightHorizSplitterMoved(int pos, int index); void onRightHorizSplitterChanged(const QByteArray &state); + void onToolbarSelectionChanged(); void initToolbars(); void openDiagram(qmt::MDiagram *diagram, bool addToHistory); @@ -141,6 +142,7 @@ private: void updateDiagramSelector(); void onDiagramSelectorSelected(int index); QString buildDiagramLabel(const qmt::MDiagram *diagram); + void storeToolbarIdInDiagram(qmt::MDiagram *diagram); void addToNavigationHistory(const qmt::MDiagram *diagram); QByteArray saveState(const qmt::MDiagram *diagram) const; |