170 qApp->installTranslator(translator); |
170 qApp->installTranslator(translator); |
171 } |
171 } |
172 } |
172 } |
173 } |
173 } |
174 |
174 |
175 ModelData* findModelData(DocumentManager* documents, ModelId modelId) |
175 static ModelData* findModelData(const DocumentManager* documents, ModelId modelId) |
176 { |
176 { |
177 return documents->findPayload<ModelData>(modelId); |
177 return documents->findPayload<ModelData>(modelId); |
178 } |
178 } |
179 |
179 |
180 static ModelSubWindow* currentModelSubWindow(Ui_MainWindow* ui) |
180 static ModelSubWindow* currentModelSubWindow(Ui_MainWindow* ui) |
181 { |
181 { |
182 auto* w = ui->mdiArea->activeSubWindow(); |
182 auto* w = ui->mdiArea->activeSubWindow(); |
183 return qobject_cast<ModelSubWindow*>(w); |
183 return qobject_cast<ModelSubWindow*>(w); |
184 } |
184 } |
185 |
185 |
186 static ModelData* currentModelData(Ui_MainWindow* ui, DocumentManager* documents) |
186 static ModelData* currentModelData(Ui_MainWindow* ui, const DocumentManager* documents) |
187 { |
187 { |
188 if (auto* const activeSubWindow = currentModelSubWindow(ui)) { |
188 if (auto* const activeSubWindow = currentModelSubWindow(ui)) { |
189 return findModelData(documents, activeSubWindow->modelId); |
189 return findModelData(documents, activeSubWindow->modelId); |
190 } |
190 } |
191 else { |
191 else { |
331 }; |
331 }; |
332 for (int i = 0; i < countof(editingModesInfo); ++i) { |
332 for (int i = 0; i < countof(editingModesInfo); ++i) { |
333 const auto& editingModeInfo = editingModesInfo[i]; |
333 const auto& editingModeInfo = editingModesInfo[i]; |
334 QAction* action = new QAction{editingModeInfo.name, parent}; |
334 QAction* action = new QAction{editingModeInfo.name, parent}; |
335 action->setCheckable(true); |
335 action->setCheckable(true); |
336 action->setChecked(i == 0); |
336 action->setEnabled(false); |
337 action->setData(static_cast<EditingMode>(i)); |
337 action->setData(static_cast<EditingMode>(i)); |
338 action->setToolTip(editingModeInfo.tooltip); |
338 action->setToolTip(editingModeInfo.tooltip); |
339 action->setIcon(QPixmap{editingModeInfo.icon}); |
339 action->setIcon(QPixmap{editingModeInfo.icon}); |
340 ui->editingModesToolBar->addAction(action); |
340 ui->editingModesToolBar->addAction(action); |
341 QWidget* widget = editingModeInfo.widget; |
341 QWidget* widget = editingModeInfo.widget; |
668 renderPreferences.style = data.payload; |
668 renderPreferences.style = data.payload; |
669 saveSettings(); |
669 saveSettings(); |
670 updateRenderPreferences(&ui, &renderPreferences, &documents); |
670 updateRenderPreferences(&ui, &renderPreferences, &documents); |
671 }); |
671 }); |
672 } |
672 } |
673 const auto checkEditingModeAction = [&ui](EditingMode mode) { |
673 const auto checkEditingModeAction = [&ui, &documents](EditingMode mode) { |
|
674 const bool hasDocument = currentModelData(&ui, &documents) != nullptr; |
674 for (QAction* action : ui.editingModesToolBar->actions()) { |
675 for (QAction* action : ui.editingModesToolBar->actions()) { |
675 action->setChecked(action->data().value<EditingMode>() == mode); |
676 action->setEnabled(hasDocument); |
|
677 action->setChecked(hasDocument and action->data().value<EditingMode>() == mode); |
676 } |
678 } |
677 }; |
679 }; |
678 initializeTools(&ui, &toolWidgets, &mainWindow); |
680 initializeTools(&ui, &toolWidgets, &mainWindow); |
679 for (QAction* action : ui.editingModesToolBar->actions()) { |
681 for (QAction* action : ui.editingModesToolBar->actions()) { |
680 QObject::connect(action, &QAction::triggered, [&, action]{ |
682 QObject::connect(action, &QAction::triggered, [&, action]{ |