47 std::unique_ptr<EditTools> tools; |
47 std::unique_ptr<EditTools> tools; |
48 std::unique_ptr<AxesLayer> axesLayer; |
48 std::unique_ptr<AxesLayer> axesLayer; |
49 std::unique_ptr<GridLayer> gridLayer; |
49 std::unique_ptr<GridLayer> gridLayer; |
50 Model* model; |
50 Model* model; |
51 }; |
51 }; |
|
52 |
|
53 class Signal final : public QObject |
|
54 { |
|
55 Q_OBJECT |
|
56 public: |
|
57 Signal() : QObject{}{} |
|
58 virtual ~Signal(){} |
|
59 void emit() |
|
60 { |
|
61 Q_EMIT this->triggered(); |
|
62 } |
|
63 Q_SIGNALS: |
|
64 void triggered(); |
|
65 }; |
52 #include "main.moc" |
66 #include "main.moc" |
53 |
67 |
54 static void doQtRegistrations() |
68 static void doQtRegistrations() |
55 { |
69 { |
56 QCoreApplication::setApplicationName(::appName); |
70 QCoreApplication::setApplicationName(::appName); |
357 LibrariesModel libraries{&mainWindow}; |
371 LibrariesModel libraries{&mainWindow}; |
358 QStringList recentlyOpenedFiles; |
372 QStringList recentlyOpenedFiles; |
359 ColorTable colorTable; |
373 ColorTable colorTable; |
360 gl::RenderPreferences renderPreferences; |
374 gl::RenderPreferences renderPreferences; |
361 MessageLog messageLog; |
375 MessageLog messageLog; |
|
376 Signal settingsChanged; |
362 ui.setupUi(&mainWindow); |
377 ui.setupUi(&mainWindow); |
363 const uiutilities::KeySequenceMap defaultKeyboardShortcuts = |
378 const uiutilities::KeySequenceMap defaultKeyboardShortcuts = |
364 uiutilities::makeKeySequenceMap(uiutilities::collectActions(&mainWindow)); |
379 uiutilities::makeKeySequenceMap(uiutilities::collectActions(&mainWindow)); |
365 const auto saveSettings = [&]{ |
380 const auto saveSettings = [&]{ |
366 setSetting<Setting::MainWindowGeometry>(mainWindow.saveGeometry()); |
381 setSetting<Setting::MainWindowGeometry>(mainWindow.saveGeometry()); |
368 setSetting<Setting::RecentFiles>(recentlyOpenedFiles); |
383 setSetting<Setting::RecentFiles>(recentlyOpenedFiles); |
369 setSetting<Setting::RenderStyle>(renderPreferences.style); |
384 setSetting<Setting::RenderStyle>(renderPreferences.style); |
370 setSetting<Setting::DrawAxes>(renderPreferences.drawAxes); |
385 setSetting<Setting::DrawAxes>(renderPreferences.drawAxes); |
371 setSetting<Setting::Wireframe>(renderPreferences.wireframe); |
386 setSetting<Setting::Wireframe>(renderPreferences.wireframe); |
372 libraries.storeToSettings(); |
387 libraries.storeToSettings(); |
|
388 settingsChanged.emit(); |
373 }; |
389 }; |
374 const auto updateRecentlyOpenedDocumentsMenu = [&]{ |
390 const auto updateRecentlyOpenedDocumentsMenu = [&]{ |
375 rebuildRecentFilesMenu(ui.menuRecentFiles, recentlyOpenedFiles, &mainWindow); |
391 rebuildRecentFilesMenu(ui.menuRecentFiles, recentlyOpenedFiles, &mainWindow); |
376 for (QAction* action : ui.menuRecentFiles->findChildren<QAction*>()) { |
392 for (QAction* action : ui.menuRecentFiles->findChildren<QAction*>()) { |
377 QString path = action->data().toString(); |
393 QString path = action->data().toString(); |
404 updateRecentlyOpenedDocumentsMenu(); |
420 updateRecentlyOpenedDocumentsMenu(); |
405 colorTable = loadColors(&libraries); |
421 colorTable = loadColors(&libraries); |
406 updateRenderPreferences(&ui, &renderPreferences, &documents); |
422 updateRenderPreferences(&ui, &renderPreferences, &documents); |
407 ui.mdiArea->setViewMode(setting<Setting::ViewMode>()); |
423 ui.mdiArea->setViewMode(setting<Setting::ViewMode>()); |
408 ui.retranslateUi(&mainWindow); |
424 ui.retranslateUi(&mainWindow); |
|
425 settingsChanged.emit(); |
409 }; |
426 }; |
410 const auto addRecentlyOpenedFile = [&](const QString& path){ |
427 const auto addRecentlyOpenedFile = [&](const QString& path){ |
411 constexpr int maxRecentlyOpenedFiles = 10; |
428 constexpr int maxRecentlyOpenedFiles = 10; |
412 recentlyOpenedFiles.removeAll(path); |
429 recentlyOpenedFiles.removeAll(path); |
413 recentlyOpenedFiles.insert(0, path); |
430 recentlyOpenedFiles.insert(0, path); |
478 data->itemSelectionModel->select(qindex, QItemSelectionModel::Select); |
495 data->itemSelectionModel->select(qindex, QItemSelectionModel::Select); |
479 } |
496 } |
480 } |
497 } |
481 } |
498 } |
482 }); |
499 }); |
|
500 QObject::connect(&settingsChanged, &Signal::triggered, [modelId, &documents]{ |
|
501 ModelData* data = findModelData(&documents, modelId); |
|
502 if (data != nullptr) { |
|
503 data->gridLayer->settingsChanged(); |
|
504 } |
|
505 }); |
483 QObject::connect(data->canvas.get(), &PartRenderer::message, &messageLog, &MessageLog::addMessage); |
506 QObject::connect(data->canvas.get(), &PartRenderer::message, &messageLog, &MessageLog::addMessage); |
484 const QFileInfo fileInfo{*documents.modelPath(modelId)}; |
507 const QFileInfo fileInfo{*documents.modelPath(modelId)}; |
485 ModelSubWindow* subWindow = new ModelSubWindow{modelId, ui.mdiArea}; |
508 ModelSubWindow* subWindow = new ModelSubWindow{modelId, ui.mdiArea}; |
486 subWindow->setWidget(data->canvas.get()); |
509 subWindow->setWidget(data->canvas.get()); |
487 subWindow->setWindowTitle(tabName(fileInfo)); |
510 subWindow->setWindowTitle(tabName(fileInfo)); |