src/main.cpp

changeset 232
8efa3a33172e
parent 231
a9bf6bab5ea2
child 233
5509bec02c81
equal deleted inserted replaced
231:a9bf6bab5ea2 232:8efa3a33172e
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);

mercurial