Thu, 20 Jun 2019 08:54:35 +0300
uuid things
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
1326 | 3 | * Copyright (C) 2013 - 2018 Teemu Piippo |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #include <QComboBox> |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | #include <QPainter> |
1297
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
21 | #include <QPushButton> |
1300 | 22 | #include <QInputDialog> |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
23 | #include "colors.h" |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
24 | #include "guiutilities.h" |
1145
02264bf0108d
Renamed ldDocument.cpp → lddocument.cpp
Teemu Piippo <teemu@hecknology.net>
parents:
1072
diff
changeset
|
25 | #include "lddocument.h" |
1297
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
26 | #include "dialogs/colorselector.h" |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | #include "mainwindow.h" |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
28 | #include "linetypes/modelobject.h" |
1300 | 29 | #include "linetypes/comment.h" |
1406
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
30 | #include "linetypes/circularprimitive.h" |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
31 | #include "dialogs/subfilereferenceeditor.h" |
1406
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
32 | #include "dialogs/circularprimitiveeditor.h" |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
33 | #include "widgets/vertexobjecteditor.h" |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
34 | |
1043 | 35 | /* |
36 | * makeColorIcon | |
37 | * | |
38 | * Creates an icon to represent an LDraw color. | |
39 | */ | |
1252 | 40 | QIcon makeColorIcon(LDColor color, int size) |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
41 | { |
1043 | 42 | QImage image {size, size, QImage::Format_ARGB32}; |
43 | QPainter painter {&image}; | |
1252 | 44 | QColor truecolor; |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | |
1252 | 46 | if (color == MainColor) |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
47 | { |
1043 | 48 | // Use the user preferences for the main color. |
1323
05b3e173c900
Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1319
diff
changeset
|
49 | truecolor = config::mainColor(); |
05b3e173c900
Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1319
diff
changeset
|
50 | truecolor.setAlphaF(config::mainColorAlpha()); |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
51 | } |
1043 | 52 | else |
1252 | 53 | { |
54 | truecolor = color.faceColor(); | |
55 | } | |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
56 | |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
57 | // Paint the icon border |
1252 | 58 | painter.fillRect(QRect {0, 0, size, size}, color.edgeColor()); |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
59 | |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
60 | // Paint the checkerboard background, visible with translucent icons |
1252 | 61 | painter.drawPixmap( |
62 | QRect {1, 1, size - 2, size - 2}, | |
63 | MainWindow::getIcon("checkerboard"), | |
64 | QRect {0, 0, 8, 8} | |
65 | ); | |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
66 | |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
67 | // Paint the color above the checkerboard |
1252 | 68 | painter.fillRect(QRect {1, 1, size - 2, size - 2}, truecolor); |
69 | return {QPixmap::fromImage(image)}; | |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
70 | } |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
71 | |
1043 | 72 | /* |
73 | * fillUsedColorsToComboBox | |
74 | * | |
75 | * Fills the provided combo box with the colors used in the current document. | |
76 | */ | |
1435
b8dc3620e5db
removed the GuiUtilities class
Teemu Piippo <teemu@hecknology.net>
parents:
1434
diff
changeset
|
77 | void fillUsedColorsToComboBox(Model* model, QComboBox* box) |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
78 | { |
1043 | 79 | QMap<LDColor, int> frequencies; |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
80 | |
1435
b8dc3620e5db
removed the GuiUtilities class
Teemu Piippo <teemu@hecknology.net>
parents:
1434
diff
changeset
|
81 | for (LDObject* object : model->objects()) |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
82 | { |
1043 | 83 | if (object->isColored() and object->color().isValid()) |
84 | { | |
85 | if (not frequencies.contains(object->color())) | |
86 | frequencies[object->color()] = 1; | |
87 | else | |
88 | frequencies[object->color()] += 1; | |
89 | } | |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | } |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
92 | box->clear(); |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
93 | int row = 0; |
1043 | 94 | QMapIterator<LDColor, int> iterator {frequencies}; |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
95 | |
1043 | 96 | while (iterator.hasNext()) |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
97 | { |
1043 | 98 | iterator.next(); |
99 | LDColor color = iterator.key(); | |
100 | int frequency = iterator.value(); | |
101 | QIcon icon = makeColorIcon(color, 16); | |
1319 | 102 | box->addItem(icon, format("[%1] %2 (%3 object(s))", color.index(), color.name(), frequency)); |
1043 | 103 | box->setItemData(row, color.index()); |
974
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
104 | ++row; |
b2fa5f89798a
Added a GuiUtilities class to contain useful non-MainWindow-related GUI functions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
105 | } |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
106 | } |
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
107 | |
1043 | 108 | /* |
109 | * Returns the user-preferred appearance for the main color. | |
110 | */ | |
1434
4c06435bd87f
removed unneeded stuff
Teemu Piippo <teemu@hecknology.net>
parents:
1432
diff
changeset
|
111 | QColor mainColorRepresentation() |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
112 | { |
1323
05b3e173c900
Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1319
diff
changeset
|
113 | QColor result = {config::mainColor()}; |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
114 | |
1043 | 115 | if (result.isValid()) |
116 | { | |
1323
05b3e173c900
Config is now a namespace
Teemu Piippo <teemu@hecknology.net>
parents:
1319
diff
changeset
|
117 | result.setAlpha(config::mainColorAlpha() * 255.f); |
1043 | 118 | return result; |
119 | } | |
120 | else | |
121 | { | |
122 | return QColor {0, 0, 0}; | |
123 | } | |
986
525921eae58c
Refactor GLRenderer and GLCompiler
Teemu Piippo <crimsondusk64@gmail.com>
parents:
978
diff
changeset
|
124 | } |
1017
fc1c13db9618
Renamed ConfigurationValueBag to Configuration and added a pointer to it into HierarchyElement. This helps with the fight against global variables.
Teemu Piippo <crimsondusk64@gmail.com>
parents:
1014
diff
changeset
|
125 | |
1297
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
126 | void setColorButton(QPushButton* button, LDColor color) |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
127 | { |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
128 | if (color.isValid()) |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
129 | { |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
130 | button->setFlat(true); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
131 | button->setText(color.name()); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
132 | button->setStyleSheet(format("background-color: %1", color.hexcode())); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
133 | button->setStyleSheet(format("color: %1", color.edgeColor().name())); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
134 | } |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
135 | else |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
136 | { |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
137 | button->setFlat(false); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
138 | button->setText(""); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
139 | button->setStyleSheet(""); |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
140 | } |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
141 | } |
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
142 | |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
143 | void editObject(MainWindow* parent, LDObject* object) |
1297
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
144 | { |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
145 | if (object->type() == LDObjectType::SubfileReference) |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
146 | { |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
147 | LDSubfileReference* reference = static_cast<LDSubfileReference*>(object); |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
148 | SubfileReferenceEditor editor {reference, parent}; |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
149 | editor.setPrimitivesTree(parent->primitives()); |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
150 | editor.exec(); |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
151 | } |
1406
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
152 | else if (object->type() == LDObjectType::CircularPrimitive) |
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
153 | { |
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
154 | LDCircularPrimitive* primitive = static_cast<LDCircularPrimitive*>(object); |
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
155 | CircularPrimitiveEditor editor {primitive, parent}; |
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
156 | editor.exec(); |
37fffb682d2f
Circular primitive editor complete
Teemu Piippo <teemu@hecknology.net>
parents:
1397
diff
changeset
|
157 | } |
1300 | 158 | else if (object->type() == LDObjectType::Comment) |
159 | { | |
160 | LDComment* comment = static_cast<LDComment*>(object); | |
161 | comment->setText(QInputDialog::getText( | |
162 | parent, | |
163 | QObject::tr("Edit comment"), | |
164 | QObject::tr("Comment text:"), | |
165 | QLineEdit::Normal, | |
166 | comment->text() | |
167 | )); | |
168 | } | |
1298
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
169 | else |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
170 | { |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
171 | VertexObjectEditor editor {object, parent}; |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
172 | editor.exec(); |
dbc8bb2a4d84
fixed infinite recursion and integrated the subfilereference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1297
diff
changeset
|
173 | } |
1297
389516787a4c
added subfile reference editor
Teemu Piippo <teemu@hecknology.net>
parents:
1252
diff
changeset
|
174 | } |