12 #include "gl/partrenderer.h" |
12 #include "gl/partrenderer.h" |
13 #include "document.h" |
13 #include "document.h" |
14 #include "settingseditor/settingseditor.h" |
14 #include "settingseditor/settingseditor.h" |
15 #include "widgets/colorselectdialog.h" |
15 #include "widgets/colorselectdialog.h" |
16 #include "settings.h" |
16 #include "settings.h" |
|
17 #include "ui/circletooloptions.h" |
17 |
18 |
18 static const QDir LOCALE_DIR {":/locale"}; |
19 static const QDir LOCALE_DIR {":/locale"}; |
19 |
20 |
20 class ModelSubWindow : public QMdiSubWindow |
21 class ModelSubWindow : public QMdiSubWindow |
21 { |
22 { |
267 .drawAxes = setting<Setting::DrawAxes>(), |
268 .drawAxes = setting<Setting::DrawAxes>(), |
268 .wireframe = setting<Setting::Wireframe>(), |
269 .wireframe = setting<Setting::Wireframe>(), |
269 }; |
270 }; |
270 } |
271 } |
271 |
272 |
272 void initializeTools(Ui_MainWindow* ui, QWidget* parent) |
273 void initializeTools(Ui_MainWindow* ui, DocumentManager* documents, QWidget* parent) |
273 { |
274 { |
|
275 CircleToolOptionsWidget* circleToolOptions = new CircleToolOptionsWidget{parent}; |
274 const struct |
276 const struct |
275 { |
277 { |
276 QString name, tooltip; |
278 QString name, tooltip; |
277 QPixmap icon; |
279 QPixmap icon; |
278 QWidget* widget; |
280 QWidget* widget; |
286 { |
288 { |
287 .name = QObject::tr("Draw"), |
289 .name = QObject::tr("Draw"), |
288 .tooltip = QObject::tr("Draw new elements into the model."), |
290 .tooltip = QObject::tr("Draw new elements into the model."), |
289 .icon = {":/icons/pencil-outline.png"}, |
291 .icon = {":/icons/pencil-outline.png"}, |
290 .widget = nullptr, |
292 .widget = nullptr, |
|
293 }, |
|
294 { |
|
295 .name = QObject::tr("Circle"), |
|
296 .tooltip = QObject::tr("Draw circular primitives."), |
|
297 .icon = {":/icons/linetype-circularprimitive.png"}, |
|
298 .widget = circleToolOptions, |
291 }, |
299 }, |
292 }; |
300 }; |
293 for (int i = 0; i < countof(editingModesInfo); ++i) { |
301 for (int i = 0; i < countof(editingModesInfo); ++i) { |
294 const auto& editingModeInfo = editingModesInfo[i]; |
302 const auto& editingModeInfo = editingModesInfo[i]; |
295 QAction* action = new QAction{editingModeInfo.name, parent}; |
303 QAction* action = new QAction{editingModeInfo.name, parent}; |
302 QWidget* widget = editingModeInfo.widget; |
310 QWidget* widget = editingModeInfo.widget; |
303 if (widget == nullptr) { |
311 if (widget == nullptr) { |
304 widget = new QWidget{parent}; |
312 widget = new QWidget{parent}; |
305 } |
313 } |
306 ui->toolWidgetStack->addWidget(widget); |
314 ui->toolWidgetStack->addWidget(widget); |
307 } |
315 QObject::connect(action, &QAction::triggered, [ui, i]{ |
|
316 ui->toolWidgetStack->setCurrentIndex(i); |
|
317 }); |
|
318 } |
|
319 QObject::connect( |
|
320 circleToolOptions, |
|
321 &CircleToolOptionsWidget::optionsChanged, |
|
322 [ui, documents](const CircleToolOptions& options) { |
|
323 if (ModelData* data = currentModelData(ui, documents)) { |
|
324 data->tools->setCircleToolOptions(options); |
|
325 } |
|
326 }); |
308 } |
327 } |
309 |
328 |
310 constexpr bool sortModelIndexesByRow(const QModelIndex& a, const QModelIndex& b) |
329 constexpr bool sortModelIndexesByRow(const QModelIndex& a, const QModelIndex& b) |
311 { |
330 { |
312 return a.row() < b.row(); |
331 return a.row() < b.row(); |
581 const auto checkEditingModeAction = [&ui](EditingMode mode) { |
600 const auto checkEditingModeAction = [&ui](EditingMode mode) { |
582 for (QAction* action : ui.editingModesToolBar->actions()) { |
601 for (QAction* action : ui.editingModesToolBar->actions()) { |
583 action->setChecked(action->data().value<EditingMode>() == mode); |
602 action->setChecked(action->data().value<EditingMode>() == mode); |
584 } |
603 } |
585 }; |
604 }; |
586 initializeTools(&ui, &mainWindow); |
605 initializeTools(&ui, &documents, &mainWindow); |
587 for (QAction* action : ui.editingModesToolBar->actions()) { |
606 for (QAction* action : ui.editingModesToolBar->actions()) { |
588 QObject::connect(action, &QAction::triggered, [&, action]{ |
607 QObject::connect(action, &QAction::triggered, [&, action]{ |
589 if (ModelData* data = currentModelData(&ui, &documents)) { |
608 if (ModelData* data = currentModelData(&ui, &documents)) { |
590 const EditingMode mode = action->data().value<EditingMode>(); |
609 const EditingMode mode = action->data().value<EditingMode>(); |
591 data->tools->setEditMode(mode); |
610 data->tools->setEditMode(mode); |