82 // ============================================================================= |
84 // ============================================================================= |
83 // ----------------------------------------------------------------------------- |
85 // ----------------------------------------------------------------------------- |
84 ConfigDialog::ConfigDialog (ConfigDialog::Tab deftab, QWidget* parent, Qt::WindowFlags f) : |
86 ConfigDialog::ConfigDialog (ConfigDialog::Tab deftab, QWidget* parent, Qt::WindowFlags f) : |
85 QDialog (parent, f) |
87 QDialog (parent, f) |
86 { |
88 { |
87 assert (g_win); |
89 assert (g_win != null); |
88 ui = new Ui_ConfigUI; |
90 ui = new Ui_ConfigUI; |
89 ui->setupUi (this); |
91 ui->setupUi (this); |
90 |
92 |
91 // Interface tab |
93 // Interface tab |
92 setButtonBackground (ui->backgroundColorButton, gl_bgcolor); |
94 setButtonBackground (ui->backgroundColorButton, gl_bgcolor); |
93 connect (ui->backgroundColorButton, SIGNAL (clicked()), |
95 connect (ui->backgroundColorButton, SIGNAL (clicked()), |
94 this, SLOT (slot_setGLBackground())); |
96 this, SLOT (slot_setGLBackground())); |
95 |
97 |
96 setButtonBackground (ui->mainColorButton, gl_maincolor); |
98 setButtonBackground (ui->mainColorButton, gl_maincolor); |
97 connect (ui->mainColorButton, SIGNAL (clicked()), |
99 connect (ui->mainColorButton, SIGNAL (clicked()), |
98 this, SLOT (slot_setGLForeground())); |
100 this, SLOT (slot_setGLForeground())); |
99 |
101 |
100 ui->mainColorAlpha->setValue (gl_maincolor_alpha * 10.0f); |
102 ui->mainColorAlpha->setValue (gl_maincolor_alpha * 10.0f); |
101 ui->lineThickness->setValue (gl_linethickness); |
103 ui->lineThickness->setValue (gl_linethickness); |
102 ui->colorizeObjects->setChecked (lv_colorize); |
104 ui->colorizeObjects->setChecked (lv_colorize); |
103 ui->colorBFC->setChecked (gl_colorbfc); |
105 ui->colorBFC->setChecked (gl_colorbfc); |
104 ui->blackEdges->setChecked (gl_blackedges); |
106 ui->blackEdges->setChecked (gl_blackedges); |
|
107 ui->m_aa->setChecked (gl_aa); |
105 ui->implicitFiles->setChecked (gui_implicitfiles); |
108 ui->implicitFiles->setChecked (gui_implicitfiles); |
106 ui->m_logostuds->setChecked (gl_logostuds); |
109 ui->m_logostuds->setChecked (gl_logostuds); |
107 |
110 |
108 ulong i = 0; |
111 int i = 0; |
109 #define act(N) addShortcut (key_##N, ACTION(N), i); |
112 #define act(N) addShortcut (key_##N, ACTION(N), i); |
110 #include "actions.h" |
113 #include "actions.h" |
111 |
114 |
112 ui->shortcutsList->setSortingEnabled (true); |
115 ui->shortcutsList->setSortingEnabled (true); |
113 ui->shortcutsList->sortItems(); |
116 ui->shortcutsList->sortItems(); |
114 |
117 |
115 connect (ui->shortcut_set, SIGNAL (clicked()), this, SLOT (slot_setShortcut())); |
118 connect (ui->shortcut_set, SIGNAL (clicked()), this, SLOT (slot_setShortcut())); |
116 connect (ui->shortcut_reset, SIGNAL (clicked()), this, SLOT (slot_resetShortcut())); |
119 connect (ui->shortcut_reset, SIGNAL (clicked()), this, SLOT (slot_resetShortcut())); |
117 connect (ui->shortcut_clear, SIGNAL (clicked()), this, SLOT (slot_clearShortcut())); |
120 connect (ui->shortcut_clear, SIGNAL (clicked()), this, SLOT (slot_clearShortcut())); |
118 |
121 |
119 quickColors = quickColorsFromConfig(); |
122 quickColors = quickColorsFromConfig(); |
120 updateQuickColorList(); |
123 updateQuickColorList(); |
121 |
124 |
122 connect (ui->quickColor_add, SIGNAL (clicked()), this, SLOT (slot_setColor())); |
125 connect (ui->quickColor_add, SIGNAL (clicked()), this, SLOT (slot_setColor())); |
123 connect (ui->quickColor_remove, SIGNAL (clicked()), this, SLOT (slot_delColor())); |
126 connect (ui->quickColor_remove, SIGNAL (clicked()), this, SLOT (slot_delColor())); |
124 connect (ui->quickColor_edit, SIGNAL (clicked()), this, SLOT (slot_setColor())); |
127 connect (ui->quickColor_edit, SIGNAL (clicked()), this, SLOT (slot_setColor())); |
125 connect (ui->quickColor_addSep, SIGNAL (clicked()), this, SLOT (slot_addColorSeparator())); |
128 connect (ui->quickColor_addSep, SIGNAL (clicked()), this, SLOT (slot_addColorSeparator())); |
126 connect (ui->quickColor_moveUp, SIGNAL (clicked()), this, SLOT (slot_moveColor())); |
129 connect (ui->quickColor_moveUp, SIGNAL (clicked()), this, SLOT (slot_moveColor())); |
127 connect (ui->quickColor_moveDown, SIGNAL (clicked()), this, SLOT (slot_moveColor())); |
130 connect (ui->quickColor_moveDown, SIGNAL (clicked()), this, SLOT (slot_moveColor())); |
128 connect (ui->quickColor_clear, SIGNAL (clicked()), this, SLOT (slot_clearColors())); |
131 connect (ui->quickColor_clear, SIGNAL (clicked()), this, SLOT (slot_clearColors())); |
129 |
132 |
130 ui->downloadPath->setText (net_downloadpath); |
133 ui->downloadPath->setText (net_downloadpath); |
131 ui->guessNetPaths->setChecked (net_guesspaths); |
134 ui->guessNetPaths->setChecked (net_guesspaths); |
132 ui->autoCloseNetPrompt->setChecked (net_autoclose); |
135 ui->autoCloseNetPrompt->setChecked (net_autoclose); |
133 connect (ui->findDownloadPath, SIGNAL (clicked(bool)), this, SLOT (slot_findDownloadFolder())); |
136 connect (ui->findDownloadPath, SIGNAL (clicked (bool)), this, SLOT (slot_findDownloadFolder())); |
134 |
137 |
135 ui->m_profileName->setText (ld_defaultname); |
138 ui->m_profileName->setText (ld_defaultname); |
136 ui->m_profileUsername->setText (ld_defaultuser); |
139 ui->m_profileUsername->setText (ld_defaultuser); |
137 ui->m_profileLicense->setCurrentIndex (ld_defaultlicense); |
140 ui->m_profileLicense->setCurrentIndex (ld_defaultlicense); |
138 ui->tabs->setCurrentIndex (deftab); |
141 |
139 |
|
140 initGrids(); |
142 initGrids(); |
141 initExtProgs(); |
143 initExtProgs(); |
142 |
144 selectPage (deftab); |
|
145 |
143 connect (ui->buttonBox, SIGNAL (clicked (QAbstractButton*)), |
146 connect (ui->buttonBox, SIGNAL (clicked (QAbstractButton*)), |
144 this, SLOT (buttonClicked(QAbstractButton*))); |
147 this, SLOT (buttonClicked (QAbstractButton*))); |
145 } |
148 |
146 |
149 connect (ui->m_pages, SIGNAL (currentChanged (int)), |
147 // ============================================================================= |
150 this, SLOT (selectPage (int))); |
148 // ----------------------------------------------------------------------------- |
151 |
149 ConfigDialog::~ConfigDialog() { |
152 connect (ui->m_pagelist, SIGNAL (currentRowChanged (int)), |
150 delete ui; |
153 this, SLOT (selectPage (int))); |
|
154 } |
|
155 |
|
156 // ============================================================================= |
|
157 // ----------------------------------------------------------------------------- |
|
158 ConfigDialog::~ConfigDialog() |
|
159 { delete ui; |
|
160 } |
|
161 |
|
162 // ============================================================================= |
|
163 // ----------------------------------------------------------------------------- |
|
164 void ConfigDialog::selectPage (int row) |
|
165 { ui->m_pagelist->setCurrentRow (row); |
|
166 ui->m_pages->setCurrentIndex (row); |
151 } |
167 } |
152 |
168 |
153 // ============================================================================= |
169 // ============================================================================= |
154 // Adds a shortcut entry to the list of shortcuts. |
170 // Adds a shortcut entry to the list of shortcuts. |
155 // ----------------------------------------------------------------------------- |
171 // ----------------------------------------------------------------------------- |
156 void ConfigDialog::addShortcut (KeySequenceConfig& cfg, QAction* act, ulong& i) { |
172 void ConfigDialog::addShortcut (KeySequenceConfig& cfg, QAction* act, int& i) |
157 ShortcutListItem* item = new ShortcutListItem; |
173 { ShortcutListItem* item = new ShortcutListItem; |
158 item->setIcon (act->icon()); |
174 item->setIcon (act->icon()); |
159 item->setKeyConfig (&cfg); |
175 item->setKeyConfig (&cfg); |
160 item->setAction (act); |
176 item->setAction (act); |
161 setShortcutText (item); |
177 setShortcutText (item); |
162 |
178 |
163 // If the action doesn't have a valid icon, use an empty one |
179 // If the action doesn't have a valid icon, use an empty one |
164 // so that the list is kept aligned. |
180 // so that the list is kept aligned. |
165 if (act->icon().isNull()) |
181 if (act->icon().isNull()) |
166 item->setIcon (getIcon ("empty")); |
182 item->setIcon (getIcon ("empty")); |
167 |
183 |
168 ui->shortcutsList->insertItem (i++, item); |
184 ui->shortcutsList->insertItem (i++, item); |
169 } |
185 } |
170 |
186 |
171 // ============================================================================= |
187 // ============================================================================= |
172 // Initializes the table of grid stuff |
188 // Initializes the table of grid stuff |
173 // ----------------------------------------------------------------------------- |
189 // ----------------------------------------------------------------------------- |
174 void ConfigDialog::initGrids() { |
190 void ConfigDialog::initGrids() |
175 QGridLayout* gridlayout = new QGridLayout; |
191 { QGridLayout* gridlayout = new QGridLayout; |
176 QLabel* xlabel = new QLabel ("X"), |
192 QLabel* xlabel = new QLabel ("X"), |
177 *ylabel = new QLabel ("Y"), |
193 *ylabel = new QLabel ("Y"), |
178 *zlabel = new QLabel ("Z"), |
194 *zlabel = new QLabel ("Z"), |
179 *anglabel = new QLabel ("Angle"); |
195 *anglabel = new QLabel ("Angle"); |
180 short i = 1; |
196 short i = 1; |
181 |
197 |
182 for (QLabel* label : initlist<QLabel*> ({ xlabel, ylabel, zlabel, anglabel })) { |
198 for (QLabel* label : initlist<QLabel*> ({xlabel, ylabel, zlabel, anglabel})) |
183 label->setAlignment (Qt::AlignCenter); |
199 { label->setAlignment (Qt::AlignCenter); |
184 gridlayout->addWidget (label, 0, i++); |
200 gridlayout->addWidget (label, 0, i++); |
185 } |
201 } |
186 |
202 |
187 for (int i = 0; i < g_NumGrids; ++i) { |
203 for (int i = 0; i < g_NumGrids; ++i) |
188 // Icon |
204 { // Icon |
189 lb_gridIcons[i] = new QLabel; |
205 lb_gridIcons[i] = new QLabel; |
190 lb_gridIcons[i]->setPixmap (getIcon (fmt ("grid-%1", str (g_GridInfo[i].name).toLower()))); |
206 lb_gridIcons[i]->setPixmap (getIcon (fmt ("grid-%1", str (g_GridInfo[i].name).toLower()))); |
191 |
207 |
192 // Text label |
208 // Text label |
193 lb_gridLabels[i] = new QLabel (fmt ("%1:", g_GridInfo[i].name)); |
209 lb_gridLabels[i] = new QLabel (fmt ("%1:", g_GridInfo[i].name)); |
194 |
210 |
195 QHBoxLayout* labellayout = new QHBoxLayout; |
211 QHBoxLayout* labellayout = new QHBoxLayout; |
196 labellayout->addWidget (lb_gridIcons[i]); |
212 labellayout->addWidget (lb_gridIcons[i]); |
197 labellayout->addWidget (lb_gridLabels[i]); |
213 labellayout->addWidget (lb_gridLabels[i]); |
198 gridlayout->addLayout (labellayout, i + 1, 0); |
214 gridlayout->addLayout (labellayout, i + 1, 0); |
199 |
215 |
200 // Add the widgets |
216 // Add the widgets |
201 for (int j = 0; j < 4; ++j) { |
217 for (int j = 0; j < 4; ++j) |
202 dsb_gridData[i][j] = new QDoubleSpinBox; |
218 { dsb_gridData[i][j] = new QDoubleSpinBox; |
203 dsb_gridData[i][j]->setValue (g_GridInfo[i].confs[j]->value); |
219 dsb_gridData[i][j]->setValue (g_GridInfo[i].confs[j]->value); |
204 gridlayout->addWidget (dsb_gridData[i][j], i + 1, j + 1); |
220 gridlayout->addWidget (dsb_gridData[i][j], i + 1, j + 1); |
205 } |
221 } |
206 } |
222 } |
207 |
223 |
208 ui->grids->setLayout (gridlayout); |
224 ui->grids->setLayout (gridlayout); |
209 } |
225 } |
210 |
226 |
211 // ============================================================================= |
227 // ============================================================================= |
212 // ----------------------------------------------------------------------------- |
228 // ----------------------------------------------------------------------------- |
213 static const struct extProgInfo { |
229 static const struct LDExtProgInfo |
214 const str name, iconname; |
230 { const str name, iconname; |
215 StringConfig* const path; |
231 StringConfig* const path; |
216 mutable QLineEdit* input; |
232 mutable QLineEdit* input; |
217 mutable QPushButton* setPathButton; |
233 mutable QPushButton* setPathButton; |
218 #ifndef _WIN32 |
234 #ifndef _WIN32 |
219 BoolConfig* const wine; |
235 BoolConfig* const wine; |
220 mutable QCheckBox* wineBox; |
236 mutable QCheckBox* wineBox; |
221 #endif // _WIN32 |
237 #endif // _WIN32 |
222 } g_extProgInfo[] = { |
238 } g_LDExtProgInfo[] = |
|
239 { |
223 #ifndef _WIN32 |
240 #ifndef _WIN32 |
224 # define EXTPROG(NAME, LOWNAME) { #NAME, #LOWNAME, &prog_##LOWNAME, null, null, &prog_##LOWNAME##_wine, null }, |
241 # define EXTPROG(NAME, LOWNAME) { #NAME, #LOWNAME, &prog_##LOWNAME, null, null, &prog_##LOWNAME##_wine, null }, |
225 #else |
242 #else |
226 # define EXTPROG(NAME, LOWNAME) { #NAME, #LOWNAME, &prog_##LOWNAME, null, null }, |
243 # define EXTPROG(NAME, LOWNAME) { #NAME, #LOWNAME, &prog_##LOWNAME, null, null }, |
227 #endif |
244 #endif |
235 }; |
252 }; |
236 |
253 |
237 // ============================================================================= |
254 // ============================================================================= |
238 // Initializes the stuff in the ext programs tab |
255 // Initializes the stuff in the ext programs tab |
239 // ----------------------------------------------------------------------------- |
256 // ----------------------------------------------------------------------------- |
240 void ConfigDialog::initExtProgs() { |
257 void ConfigDialog::initExtProgs() |
241 QGridLayout* pathsLayout = new QGridLayout; |
258 { QGridLayout* pathsLayout = new QGridLayout; |
242 ulong row = 0; |
259 int row = 0; |
243 |
260 |
244 for (const extProgInfo & info : g_extProgInfo) { |
261 for (const LDExtProgInfo& info : g_LDExtProgInfo) |
245 QLabel* icon = new QLabel, |
262 { QLabel* icon = new QLabel, |
246 *progLabel = new QLabel (info.name); |
263 *progLabel = new QLabel (info.name); |
247 QLineEdit* input = new QLineEdit; |
264 QLineEdit* input = new QLineEdit; |
248 QPushButton* setPathButton = new QPushButton; |
265 QPushButton* setPathButton = new QPushButton; |
249 |
266 |
250 icon->setPixmap (getIcon (info.iconname)); |
267 icon->setPixmap (getIcon (info.iconname)); |
251 input->setText (info.path->value); |
268 input->setText (info.path->value); |
252 setPathButton->setIcon (getIcon ("folder")); |
269 setPathButton->setIcon (getIcon ("folder")); |
253 info.input = input; |
270 info.input = input; |
254 info.setPathButton = setPathButton; |
271 info.setPathButton = setPathButton; |
255 |
272 |
256 connect (setPathButton, SIGNAL (clicked()), this, SLOT (slot_setExtProgPath())); |
273 connect (setPathButton, SIGNAL (clicked()), this, SLOT (slot_setExtProgPath())); |
257 |
274 |
258 pathsLayout->addWidget (icon, row, 0); |
275 pathsLayout->addWidget (icon, row, 0); |
259 pathsLayout->addWidget (progLabel, row, 1); |
276 pathsLayout->addWidget (progLabel, row, 1); |
260 pathsLayout->addWidget (input, row, 2); |
277 pathsLayout->addWidget (input, row, 2); |
261 pathsLayout->addWidget (setPathButton, row, 3); |
278 pathsLayout->addWidget (setPathButton, row, 3); |
262 |
279 |
263 #ifndef _WIN32 |
280 #ifndef _WIN32 |
264 QCheckBox* wineBox = new QCheckBox ("Wine"); |
281 QCheckBox* wineBox = new QCheckBox ("Wine"); |
265 wineBox->setChecked (*info.wine); |
282 wineBox->setChecked (*info.wine); |
266 info.wineBox = wineBox; |
283 info.wineBox = wineBox; |
267 pathsLayout->addWidget (wineBox, row, 4); |
284 pathsLayout->addWidget (wineBox, row, 4); |
268 #endif |
285 #endif |
269 |
286 |
270 ++row; |
287 ++row; |
271 } |
288 } |
272 |
289 |
273 ui->extProgs->setLayout (pathsLayout); |
290 ui->extProgs->setLayout (pathsLayout); |
274 } |
291 } |
275 |
292 |
276 // ============================================================================= |
293 // ============================================================================= |
277 // Set the settings based on widget data. |
294 // Set the settings based on widget data. |
278 // ----------------------------------------------------------------------------- |
295 // ----------------------------------------------------------------------------- |
279 void ConfigDialog::applySettings() { |
296 void ConfigDialog::applySettings() |
280 // Apply configuration |
297 { // Apply configuration |
281 lv_colorize = ui->colorizeObjects->isChecked(); |
298 lv_colorize = ui->colorizeObjects->isChecked(); |
282 gl_colorbfc = ui->colorBFC->isChecked(); |
299 gl_colorbfc = ui->colorBFC->isChecked(); |
283 gl_blackedges = ui->blackEdges->isChecked(); |
300 gl_blackedges = ui->blackEdges->isChecked(); |
284 gl_maincolor_alpha = ((double) ui->mainColorAlpha->value()) / 10.0f; |
301 gl_maincolor_alpha = ( (double) ui->mainColorAlpha->value()) / 10.0f; |
285 gl_linethickness = ui->lineThickness->value(); |
302 gl_linethickness = ui->lineThickness->value(); |
286 gui_implicitfiles = ui->implicitFiles->isChecked(); |
303 gui_implicitfiles = ui->implicitFiles->isChecked(); |
287 net_downloadpath = ui->downloadPath->text(); |
304 net_downloadpath = ui->downloadPath->text(); |
288 net_guesspaths = ui->guessNetPaths->isChecked(); |
305 net_guesspaths = ui->guessNetPaths->isChecked(); |
289 net_autoclose = ui->autoCloseNetPrompt->isChecked(); |
306 net_autoclose = ui->autoCloseNetPrompt->isChecked(); |
290 gl_logostuds = ui->m_logostuds->isChecked(); |
307 gl_logostuds = ui->m_logostuds->isChecked(); |
291 ld_defaultuser = ui->m_profileUsername->text(); |
308 ld_defaultuser = ui->m_profileUsername->text(); |
292 ld_defaultname = ui->m_profileName->text(); |
309 ld_defaultname = ui->m_profileName->text(); |
293 ld_defaultlicense = ui->m_profileLicense->currentIndex(); |
310 ld_defaultlicense = ui->m_profileLicense->currentIndex(); |
294 |
311 gl_aa = ui->m_aa->isChecked(); |
|
312 |
295 // Rebuild the quick color toolbar |
313 // Rebuild the quick color toolbar |
296 g_win->setQuickColors (quickColors); |
314 g_win->setQuickColors (quickColors); |
297 gui_colortoolbar = quickColorString(); |
315 gui_colortoolbar = quickColorString(); |
298 |
316 |
299 // Set the grid settings |
317 // Set the grid settings |
300 for (int i = 0; i < g_NumGrids; ++i) |
318 for (int i = 0; i < g_NumGrids; ++i) |
301 for (int j = 0; j < 4; ++j) |
319 for (int j = 0; j < 4; ++j) |
302 g_GridInfo[i].confs[j]->value = dsb_gridData[i][j]->value(); |
320 g_GridInfo[i].confs[j]->value = dsb_gridData[i][j]->value(); |
303 |
321 |
304 // Apply key shortcuts |
322 // Apply key shortcuts |
305 #define act(N) ACTION(N)->setShortcut (key_##N); |
323 #define act(N) ACTION(N)->setShortcut (key_##N); |
306 #include "actions.h" |
324 #include "actions.h" |
307 |
325 |
308 // Ext program settings |
326 // Ext program settings |
309 for (const extProgInfo & info : g_extProgInfo) { |
327 for (const LDExtProgInfo& info : g_LDExtProgInfo) |
310 *info.path = info.input->text(); |
328 { *info.path = info.input->text(); |
311 |
329 |
312 #ifndef _WIN32 |
330 #ifndef _WIN32 |
313 *info.wine = info.wineBox->isChecked(); |
331 *info.wine = info.wineBox->isChecked(); |
314 #endif // _WIN32 |
332 #endif // _WIN32 |
315 } |
333 } |
316 |
334 |
317 Config::save(); |
335 Config::save(); |
318 reloadAllSubfiles(); |
336 reloadAllSubfiles(); |
319 loadLogoedStuds(); |
337 loadLogoedStuds(); |
320 g_win->R()->setBackground(); |
338 g_win->R()->setBackground(); |
321 g_win->fullRefresh(); |
339 g_win->fullRefresh(); |
324 } |
342 } |
325 |
343 |
326 // ============================================================================= |
344 // ============================================================================= |
327 // A dialog button was clicked |
345 // A dialog button was clicked |
328 // ----------------------------------------------------------------------------- |
346 // ----------------------------------------------------------------------------- |
329 void ConfigDialog::buttonClicked (QAbstractButton* button) { |
347 void ConfigDialog::buttonClicked (QAbstractButton* button) |
330 typedef QDialogButtonBox QDDB; |
348 { typedef QDialogButtonBox QDDB; |
331 QDialogButtonBox* dbb = ui->buttonBox; |
349 QDialogButtonBox* dbb = ui->buttonBox; |
332 |
350 |
333 if (button == dbb->button (QDDB::Ok)) { |
351 if (button == dbb->button (QDDB::Ok)) |
334 applySettings(); |
352 { applySettings(); |
335 accept(); |
353 accept(); |
336 } elif (button == dbb->button (QDDB::Apply)) { |
354 } elif (button == dbb->button (QDDB::Apply)) |
337 applySettings(); |
355 { applySettings(); |
338 } elif (button == dbb->button (QDDB::Cancel)) { |
356 } elif (button == dbb->button (QDDB::Cancel)) |
339 reject(); |
357 { reject(); |
340 } |
358 } |
341 } |
359 } |
342 |
360 |
343 // ============================================================================= |
361 // ============================================================================= |
344 // Update the list of color toolbar items in the quick color tab. |
362 // Update the list of color toolbar items in the quick color tab. |
345 // ----------------------------------------------------------------------------- |
363 // ----------------------------------------------------------------------------- |
346 void ConfigDialog::updateQuickColorList (LDQuickColor* sel) { |
364 void ConfigDialog::updateQuickColorList (LDQuickColor* sel) |
347 for (QListWidgetItem* item : quickColorItems) |
365 { for (QListWidgetItem * item : quickColorItems) |
348 delete item; |
366 delete item; |
349 |
367 |
350 quickColorItems.clear(); |
368 quickColorItems.clear(); |
351 |
369 |
352 // Init table items |
370 // Init table items |
353 for (LDQuickColor& entry : quickColors) { |
371 for (LDQuickColor& entry : quickColors) |
354 QListWidgetItem* item = new QListWidgetItem; |
372 { QListWidgetItem* item = new QListWidgetItem; |
355 |
373 |
356 if (entry.isSeparator()) { |
374 if (entry.isSeparator()) |
357 item->setText ("--------"); |
375 { item->setText ("--------"); |
358 item->setIcon (getIcon ("empty")); |
376 item->setIcon (getIcon ("empty")); |
359 } else { |
377 } |
360 LDColor* col = entry.color(); |
378 else |
361 |
379 { LDColor* col = entry.color(); |
362 if (col == null) { |
380 |
363 item->setText ("[[unknown color]]"); |
381 if (col == null) |
|
382 { item->setText ("[[unknown color]]"); |
364 item->setIcon (getIcon ("error")); |
383 item->setIcon (getIcon ("error")); |
365 } else { |
384 } |
366 item->setText (col->name); |
385 else |
|
386 { item->setText (col->name); |
367 item->setIcon (makeColorIcon (col, 16)); |
387 item->setIcon (makeColorIcon (col, 16)); |
368 } |
388 } |
369 } |
389 } |
370 |
390 |
371 ui->quickColorList->addItem (item); |
391 ui->quickColorList->addItem (item); |
372 quickColorItems << item; |
392 quickColorItems << item; |
373 |
393 |
374 if (sel && &entry == sel) { |
394 if (sel && &entry == sel) |
375 ui->quickColorList->setCurrentItem (item); |
395 { ui->quickColorList->setCurrentItem (item); |
376 ui->quickColorList->scrollToItem (item); |
396 ui->quickColorList->scrollToItem (item); |
377 } |
397 } |
378 } |
398 } |
379 } |
399 } |
380 |
400 |
381 // ============================================================================= |
401 // ============================================================================= |
382 // Quick colors: add or edit button was clicked. |
402 // Quick colors: add or edit button was clicked. |
383 // ----------------------------------------------------------------------------- |
403 // ----------------------------------------------------------------------------- |
384 void ConfigDialog::slot_setColor() { |
404 void ConfigDialog::slot_setColor() |
385 LDQuickColor* entry = null; |
405 { LDQuickColor* entry = null; |
386 QListWidgetItem* item = null; |
406 QListWidgetItem* item = null; |
387 const bool isNew = static_cast<QPushButton*> (sender()) == ui->quickColor_add; |
407 const bool isNew = static_cast<QPushButton*> (sender()) == ui->quickColor_add; |
388 |
408 |
389 if (isNew == false) { |
409 if (isNew == false) |
390 item = getSelectedQuickColor(); |
410 { item = getSelectedQuickColor(); |
391 |
411 |
392 if (!item) |
412 if (!item) |
393 return; |
413 return; |
394 |
414 |
395 ulong i = getItemRow (item, quickColorItems); |
415 int i = getItemRow (item, quickColorItems); |
396 entry = &quickColors[i]; |
416 entry = &quickColors[i]; |
397 |
417 |
398 if (entry->isSeparator() == true) |
418 if (entry->isSeparator() == true) |
399 return; // don't color separators |
419 return; // don't color separators |
400 } |
420 } |
401 |
421 |
402 short defval = entry ? entry->color()->index : -1; |
422 short defval = entry ? entry->color()->index : -1; |
403 short val; |
423 short val; |
404 |
424 |
405 if (ColorSelector::getColor (val, defval, this) == false) |
425 if (ColorSelector::getColor (val, defval, this) == false) |
406 return; |
426 return; |
407 |
427 |
408 if (entry) |
428 if (entry) |
409 entry->setColor (getColor (val)); |
429 entry->setColor (getColor (val)); |
410 else { |
430 else |
411 LDQuickColor entry (getColor (val), null); |
431 { LDQuickColor entry (getColor (val), null); |
412 |
432 |
413 item = getSelectedQuickColor(); |
433 item = getSelectedQuickColor(); |
414 ulong idx; |
434 int idx = (item) ? getItemRow (item, quickColorItems) + 1 : quickColorItems.size(); |
415 |
435 |
416 if (item) |
|
417 idx = getItemRow (item, quickColorItems) + 1; |
|
418 else |
|
419 idx = quickColorItems.size(); |
|
420 |
|
421 quickColors.insert (idx, entry); |
436 quickColors.insert (idx, entry); |
422 entry = quickColors[idx]; |
437 entry = quickColors[idx]; |
423 } |
438 } |
424 |
439 |
425 updateQuickColorList (entry); |
440 updateQuickColorList (entry); |
426 } |
441 } |
427 |
442 |
428 // ============================================================================= |
443 // ============================================================================= |
429 // Remove a quick color |
444 // Remove a quick color |
430 // ----------------------------------------------------------------------------- |
445 // ----------------------------------------------------------------------------- |
431 void ConfigDialog::slot_delColor() { |
446 void ConfigDialog::slot_delColor() |
432 if (ui->quickColorList->selectedItems().size() == 0) |
447 { if (ui->quickColorList->selectedItems().isEmpty()) |
433 return; |
448 return; |
434 |
449 |
435 QListWidgetItem* item = ui->quickColorList->selectedItems() [0]; |
450 QListWidgetItem* item = ui->quickColorList->selectedItems() [0]; |
436 quickColors.erase (getItemRow (item, quickColorItems)); |
451 quickColors.removeAt (getItemRow (item, quickColorItems)); |
437 updateQuickColorList(); |
452 updateQuickColorList(); |
438 } |
453 } |
439 |
454 |
440 // ============================================================================= |
455 // ============================================================================= |
441 // Move a quick color up/down |
456 // Move a quick color up/down |
442 // ----------------------------------------------------------------------------- |
457 // ----------------------------------------------------------------------------- |
443 void ConfigDialog::slot_moveColor() { |
458 void ConfigDialog::slot_moveColor() |
444 const bool up = (static_cast<QPushButton*> (sender()) == ui->quickColor_moveUp); |
459 { const bool up = (static_cast<QPushButton*> (sender()) == ui->quickColor_moveUp); |
445 |
460 |
446 if (ui->quickColorList->selectedItems().size() == 0) |
461 if (ui->quickColorList->selectedItems().isEmpty()) |
447 return; |
462 return; |
448 |
463 |
449 QListWidgetItem* item = ui->quickColorList->selectedItems() [0]; |
464 QListWidgetItem* item = ui->quickColorList->selectedItems() [0]; |
450 int idx = getItemRow (item, quickColorItems); |
465 int idx = getItemRow (item, quickColorItems); |
451 int dest = up ? (idx - 1) : (idx + 1); |
466 int dest = up ? (idx - 1) : (idx + 1); |
452 |
467 |
453 if (dest < 0 || (ulong) dest >= quickColorItems.size()) |
468 if (dest < 0 || dest >= quickColorItems.size()) |
454 return; // destination out of bounds |
469 return; // destination out of bounds |
455 |
470 |
456 LDQuickColor tmp = quickColors[dest]; |
471 LDQuickColor tmp = quickColors[dest]; |
457 quickColors[dest] = quickColors[idx]; |
472 quickColors[dest] = quickColors[idx]; |
458 quickColors[idx] = tmp; |
473 quickColors[idx] = tmp; |
459 |
474 |
460 updateQuickColorList (&quickColors[dest]); |
475 updateQuickColorList (&quickColors[dest]); |
461 } |
476 } |
462 |
477 |
463 // ============================================================================= |
478 // ============================================================================= |
464 // Add a separator to quick colors |
479 // Add a separator to quick colors |
465 // ----------------------------------------------------------------------------- |
480 // ----------------------------------------------------------------------------- |
466 void ConfigDialog::slot_addColorSeparator() { |
481 void ConfigDialog::slot_addColorSeparator() |
467 quickColors << LDQuickColor::getSeparator(); |
482 { quickColors << LDQuickColor::getSeparator(); |
468 updateQuickColorList (&quickColors[quickColors.size() - 1]); |
483 updateQuickColorList (&quickColors[quickColors.size() - 1]); |
469 } |
484 } |
470 |
485 |
471 // ============================================================================= |
486 // ============================================================================= |
472 // Clear all quick colors |
487 // Clear all quick colors |
473 // ----------------------------------------------------------------------------- |
488 // ----------------------------------------------------------------------------- |
474 void ConfigDialog::slot_clearColors() { |
489 void ConfigDialog::slot_clearColors() |
475 quickColors.clear(); |
490 { quickColors.clear(); |
476 updateQuickColorList(); |
491 updateQuickColorList(); |
477 } |
492 } |
478 |
493 |
479 // ============================================================================= |
494 // ============================================================================= |
480 // Pick a color and set the appropriate configuration option. |
495 // Pick a color and set the appropriate configuration option. |
481 // ----------------------------------------------------------------------------- |
496 // ----------------------------------------------------------------------------- |
482 void ConfigDialog::pickColor (StringConfig& conf, QPushButton* button) { |
497 void ConfigDialog::pickColor (StringConfig& conf, QPushButton* button) |
483 QColor col = QColorDialog::getColor (QColor (conf)); |
498 { QColor col = QColorDialog::getColor (QColor (conf)); |
484 |
499 |
485 if (col.isValid()) { |
500 if (col.isValid()) |
486 uchar r = col.red(), |
501 { uchar r = col.red(), |
487 g = col.green(), |
502 g = col.green(), |
488 b = col.blue(); |
503 b = col.blue(); |
489 conf.value.sprintf ("#%.2X%.2X%.2X", r, g, b); |
504 conf.value.sprintf ("#%.2X%.2X%.2X", r, g, b); |
490 setButtonBackground (button, conf.value); |
505 setButtonBackground (button, conf.value); |
491 } |
506 } |
492 } |
507 } |
493 |
508 |
494 // ============================================================================= |
509 // ============================================================================= |
495 // ----------------------------------------------------------------------------- |
510 // ----------------------------------------------------------------------------- |
496 void ConfigDialog::slot_setGLBackground() { |
511 void ConfigDialog::slot_setGLBackground() |
497 pickColor (gl_bgcolor, ui->backgroundColorButton); |
512 { pickColor (gl_bgcolor, ui->backgroundColorButton); |
498 } |
513 } |
499 |
514 |
500 // ============================================================================= |
515 // ============================================================================= |
501 // ----------------------------------------------------------------------------- |
516 // ----------------------------------------------------------------------------- |
502 void ConfigDialog::slot_setGLForeground() { |
517 void ConfigDialog::slot_setGLForeground() |
503 pickColor (gl_maincolor, ui->mainColorButton); |
518 { pickColor (gl_maincolor, ui->mainColorButton); |
504 } |
519 } |
505 |
520 |
506 // ============================================================================= |
521 // ============================================================================= |
507 // Sets background color of a given button. |
522 // Sets background color of a given button. |
508 // ----------------------------------------------------------------------------- |
523 // ----------------------------------------------------------------------------- |
509 void ConfigDialog::setButtonBackground (QPushButton* button, str value) { |
524 void ConfigDialog::setButtonBackground (QPushButton* button, str value) |
510 button->setIcon (getIcon ("colorselect")); |
525 { button->setIcon (getIcon ("colorselect")); |
511 button->setAutoFillBackground (true); |
526 button->setAutoFillBackground (true); |
512 button->setStyleSheet (fmt ("background-color: %1", value)); |
527 button->setStyleSheet (fmt ("background-color: %1", value)); |
513 } |
528 } |
514 |
529 |
515 // ============================================================================= |
530 // ============================================================================= |
516 // Finds the given list widget item in the list of widget items given. |
531 // Finds the given list widget item in the list of widget items given. |
517 // ----------------------------------------------------------------------------- |
532 // ----------------------------------------------------------------------------- |
518 int ConfigDialog::getItemRow (QListWidgetItem* item, List<QListWidgetItem*>& haystack) { |
533 int ConfigDialog::getItemRow (QListWidgetItem* item, QList<QListWidgetItem*>& haystack) |
519 int i = 0; |
534 { int i = 0; |
520 |
535 |
521 for (QListWidgetItem* it : haystack) { |
536 for (QListWidgetItem* it : haystack) |
522 if (it == item) |
537 { if (it == item) |
523 return i; |
538 return i; |
524 |
539 |
525 ++i; |
540 ++i; |
526 } |
541 } |
|
542 |
527 return -1; |
543 return -1; |
528 } |
544 } |
529 |
545 |
530 // ============================================================================= |
546 // ============================================================================= |
531 // Which quick color is currently selected? |
547 // Which quick color is currently selected? |
532 // ----------------------------------------------------------------------------- |
548 // ----------------------------------------------------------------------------- |
533 QListWidgetItem* ConfigDialog::getSelectedQuickColor() { |
549 QListWidgetItem* ConfigDialog::getSelectedQuickColor() |
534 if (ui->quickColorList->selectedItems().size() == 0) |
550 { if (ui->quickColorList->selectedItems().isEmpty()) |
535 return null; |
551 return null; |
536 |
552 |
537 return ui->quickColorList->selectedItems()[0]; |
553 return ui->quickColorList->selectedItems() [0]; |
538 } |
554 } |
539 |
555 |
540 // ============================================================================= |
556 // ============================================================================= |
541 // Get the list of shortcuts selected |
557 // Get the list of shortcuts selected |
542 // ----------------------------------------------------------------------------- |
558 // ----------------------------------------------------------------------------- |
543 QList<ShortcutListItem*> ConfigDialog::getShortcutSelection() { |
559 QList<ShortcutListItem*> ConfigDialog::getShortcutSelection() |
544 QList<ShortcutListItem*> out; |
560 { QList<ShortcutListItem*> out; |
545 |
561 |
546 for (QListWidgetItem* entry : ui->shortcutsList->selectedItems()) |
562 for (QListWidgetItem* entry : ui->shortcutsList->selectedItems()) |
547 out << static_cast<ShortcutListItem*> (entry); |
563 out << static_cast<ShortcutListItem*> (entry); |
548 |
564 |
549 return out; |
565 return out; |
550 } |
566 } |
551 |
567 |
552 // ============================================================================= |
568 // ============================================================================= |
553 // Edit the shortcut of a given action. |
569 // Edit the shortcut of a given action. |
554 // ----------------------------------------------------------------------------- |
570 // ----------------------------------------------------------------------------- |
555 void ConfigDialog::slot_setShortcut() { |
571 void ConfigDialog::slot_setShortcut() |
556 QList<ShortcutListItem*> sel = getShortcutSelection(); |
572 { QList<ShortcutListItem*> sel = getShortcutSelection(); |
557 |
573 |
558 if (sel.size() < 1) |
574 if (sel.size() < 1) |
559 return; |
575 return; |
560 |
576 |
561 ShortcutListItem* item = sel[0]; |
577 ShortcutListItem* item = sel[0]; |
562 |
578 |
563 if (KeySequenceDialog::staticDialog (item->keyConfig(), this)) |
579 if (KeySequenceDialog::staticDialog (item->keyConfig(), this)) |
564 setShortcutText (item); |
580 setShortcutText (item); |
565 } |
581 } |
566 |
582 |
567 // ============================================================================= |
583 // ============================================================================= |
568 // Reset a shortcut to defaults |
584 // Reset a shortcut to defaults |
569 // ----------------------------------------------------------------------------- |
585 // ----------------------------------------------------------------------------- |
570 void ConfigDialog::slot_resetShortcut() { |
586 void ConfigDialog::slot_resetShortcut() |
571 QList<ShortcutListItem*> sel = getShortcutSelection(); |
587 { QList<ShortcutListItem*> sel = getShortcutSelection(); |
572 |
588 |
573 for (ShortcutListItem* item : sel) { |
589 for (ShortcutListItem* item : sel) |
574 item->keyConfig()->reset(); |
590 { item->keyConfig()->reset(); |
575 setShortcutText (item); |
591 setShortcutText (item); |
576 } |
592 } |
577 } |
593 } |
578 |
594 |
579 // ============================================================================= |
595 // ============================================================================= |
580 // Remove the shortcut of an action. |
596 // Remove the shortcut of an action. |
581 // ----------------------------------------------------------------------------- |
597 // ----------------------------------------------------------------------------- |
582 void ConfigDialog::slot_clearShortcut() { |
598 void ConfigDialog::slot_clearShortcut() |
583 QList<ShortcutListItem*> sel = getShortcutSelection(); |
599 { QList<ShortcutListItem*> sel = getShortcutSelection(); |
584 |
600 |
585 for (ShortcutListItem* item : sel) { |
601 for (ShortcutListItem* item : sel) |
586 item->keyConfig()->value = QKeySequence(); |
602 { item->keyConfig()->value = QKeySequence(); |
587 setShortcutText (item); |
603 setShortcutText (item); |
588 } |
604 } |
589 } |
605 } |
590 |
606 |
591 // ============================================================================= |
607 // ============================================================================= |
592 // Set the path of an external program |
608 // Set the path of an external program |
593 // ----------------------------------------------------------------------------- |
609 // ----------------------------------------------------------------------------- |
594 void ConfigDialog::slot_setExtProgPath() { |
610 void ConfigDialog::slot_setExtProgPath() |
595 const extProgInfo* info = null; |
611 { const LDExtProgInfo* info = null; |
596 |
612 |
597 for (const extProgInfo& it : g_extProgInfo) { |
613 for (const LDExtProgInfo& it : g_LDExtProgInfo) |
598 if (it.setPathButton == sender()) { |
614 { if (it.setPathButton == sender()) |
599 info = ⁢ |
615 { info = ⁢ |
600 break; |
616 break; |
601 } |
617 } |
602 } |
618 } |
603 |
619 |
604 assert (info != null); |
620 assert (info != null); |
605 str fpath = QFileDialog::getOpenFileName (this, fmt ("Path to %1", info->name), *info->path, g_extProgPathFilter); |
621 str fpath = QFileDialog::getOpenFileName (this, fmt ("Path to %1", info->name), *info->path, g_extProgPathFilter); |
606 |
622 |
607 if (fpath.isEmpty()) |
623 if (fpath.isEmpty()) |
608 return; |
624 return; |
609 |
625 |
610 info->input->setText (fpath); |
626 info->input->setText (fpath); |
611 } |
627 } |
612 |
628 |
613 // ============================================================================= |
629 // ============================================================================= |
614 // '...' button pressed for the download path |
630 // '...' button pressed for the download path |
615 // ----------------------------------------------------------------------------- |
631 // ----------------------------------------------------------------------------- |
616 void ConfigDialog::slot_findDownloadFolder() { |
632 void ConfigDialog::slot_findDownloadFolder() |
617 str dpath = QFileDialog::getExistingDirectory(); |
633 { str dpath = QFileDialog::getExistingDirectory(); |
618 ui->downloadPath->setText (dpath); |
634 ui->downloadPath->setText (dpath); |
619 } |
635 } |
620 |
636 |
621 // ============================================================================= |
637 // ============================================================================= |
622 // Updates the text string for a given shortcut list item |
638 // Updates the text string for a given shortcut list item |
623 // ----------------------------------------------------------------------------- |
639 // ----------------------------------------------------------------------------- |
624 void ConfigDialog::setShortcutText (ShortcutListItem* item) { |
640 void ConfigDialog::setShortcutText (ShortcutListItem* item) |
625 QAction* act = item->action(); |
641 { QAction* act = item->action(); |
626 str label = act->iconText(); |
642 str label = act->iconText(); |
627 str keybind = item->keyConfig()->value.toString(); |
643 str keybind = item->keyConfig()->value.toString(); |
628 item->setText (fmt ("%1 (%2)", label, keybind)); |
644 item->setText (fmt ("%1 (%2)", label, keybind)); |
629 } |
645 } |
630 |
646 |
631 // ============================================================================= |
647 // ============================================================================= |
632 // Gets the configuration string of the quick color toolbar |
648 // Gets the configuration string of the quick color toolbar |
633 // ----------------------------------------------------------------------------- |
649 // ----------------------------------------------------------------------------- |
634 str ConfigDialog::quickColorString() { |
650 str ConfigDialog::quickColorString() |
635 str val; |
651 { str val; |
636 |
652 |
637 for (const LDQuickColor& entry : quickColors) { |
653 for (const LDQuickColor& entry : quickColors) |
638 if (val.length() > 0) |
654 { if (val.length() > 0) |
639 val += ':'; |
655 val += ':'; |
640 |
656 |
641 if (entry.isSeparator()) |
657 if (entry.isSeparator()) |
642 val += '|'; |
658 val += '|'; |
643 else |
659 else |
644 val += fmt ("%1", entry.color()->index); |
660 val += fmt ("%1", entry.color()->index); |
645 } |
661 } |
646 |
662 |
647 return val; |
663 return val; |
648 } |
664 } |
649 |
665 |
650 // ========================================================================================================================= |
666 // ========================================================================================================================= |
651 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
667 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |