summaryrefslogtreecommitdiff
path: root/src/plugins/modeleditor
diff options
context:
space:
mode:
authorJochen Becher <jochen_becher@gmx.de>2015-12-03 21:31:56 +0100
committerJochen Becher <jochen_becher@gmx.de>2015-12-08 10:00:54 +0000
commit0750fd6de53cc70de67913372088309fe4101644 (patch)
tree9315980b1edebc7845c6f2d90d3eabe14cd436b8 /src/plugins/modeleditor
parent90ab6e9b949a7162f4786dff2258bbd92df5a2d3 (diff)
downloadqt-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.cpp93
-rw-r--r--src/plugins/modeleditor/modeleditor.h2
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\">&bull; Double-click on diagram in model tree</div>"
- "<div style=\"margin-top: 5px\">&bull; 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\">&bull; Double-click on diagram in model tree</div>"
+ "<div style=\"margin-top: 5px\">&bull; 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;