Mercurial > hg > octave-lyh
comparison libgui/src/settings-dialog.cc @ 16500:06bdf84aa3d9
gui: make all styles of the lexers configurable
* settings-dialog.cc/.h(get_valid_lexer_styles): new function for collecting all
available styles of a lexer which are not consecutively enumerated
* settings-dialog.cc(read_lexer_settings): use new get_valid_lexer_styles,
improve size of style label in dialog
(write_lexer_settings): use new get_valid_lexer_styles
author | Torsten <ttl@justmail.de> |
---|---|
date | Sun, 07 Apr 2013 20:09:47 +0200 |
parents | facf00ce97d3 |
children | e192525236ad |
comparison
equal
deleted
inserted
replaced
16499:facf00ce97d3 | 16500:06bdf84aa3d9 |
---|---|
152 delete ui; | 152 delete ui; |
153 } | 153 } |
154 | 154 |
155 | 155 |
156 #ifdef HAVE_QSCINTILLA | 156 #ifdef HAVE_QSCINTILLA |
157 int | |
158 settings_dialog::get_valid_lexer_styles (QsciLexer *lexer, int styles[]) | |
159 { | |
160 int max_style = 0; | |
161 int actual_style = 0; | |
162 while (actual_style < MaxStyleNumber && max_style < MaxLexerStyles) | |
163 { | |
164 if ((lexer->description(actual_style)) != "") // valid style | |
165 styles[max_style++] = actual_style; | |
166 actual_style++; | |
167 } | |
168 return max_style; | |
169 } | |
170 | |
157 void | 171 void |
158 settings_dialog::read_lexer_settings (QsciLexer *lexer, QSettings *settings) | 172 settings_dialog::read_lexer_settings (QsciLexer *lexer, QSettings *settings) |
159 { | 173 { |
160 lexer->readSettings (*settings); | 174 lexer->readSettings (*settings); |
161 int styles = 0; | 175 int styles[MaxLexerStyles]; // array for saving valid styles (enum is not continuous) |
162 while (lexer->description(styles) != "") | 176 int max_style = get_valid_lexer_styles (lexer, styles); |
163 styles++; | |
164 QGridLayout *style_grid = new QGridLayout (); | 177 QGridLayout *style_grid = new QGridLayout (); |
165 QLabel *description[styles]; | 178 QLabel *description[max_style]; |
166 QFontComboBox *select_font[styles]; | 179 QFontComboBox *select_font[max_style]; |
167 QSpinBox *font_size[styles]; | 180 QSpinBox *font_size[max_style]; |
168 QCheckBox *attrib_font[3][styles]; | 181 QCheckBox *attrib_font[3][max_style]; |
169 color_picker *color[styles]; | 182 color_picker *color[max_style]; |
170 int default_size = 10; | 183 int default_size = 10; |
171 QFont default_font = QFont (); | 184 QFont default_font = QFont (); |
172 for (int i = 0; i < styles; i++) // create dialog elements for all styles | 185 for (int i = 0; i < max_style; i++) // create dialog elements for all styles |
173 { | 186 { |
174 QString actual_name = lexer->description (i); | 187 QString actual_name = lexer->description (styles[i]); |
175 QFont actual_font = lexer->font (i); | 188 QFont actual_font = lexer->font (styles[i]); |
176 description[i] = new QLabel (actual_name); | 189 description[i] = new QLabel (actual_name); |
190 description[i]->setWordWrap (true); | |
191 description[i]->setMaximumSize (180,QWIDGETSIZE_MAX); | |
192 description[i]->setMinimumSize (180,1); | |
177 select_font[i] = new QFontComboBox (); | 193 select_font[i] = new QFontComboBox (); |
178 select_font[i]->setObjectName (actual_name+"_font"); | 194 select_font[i]->setObjectName (actual_name+"_font"); |
179 font_size[i] = new QSpinBox (); | 195 font_size[i] = new QSpinBox (); |
180 font_size[i]->setObjectName (actual_name+"_size"); | 196 font_size[i]->setObjectName (actual_name+"_size"); |
181 if (i == 0) // the default | 197 if (styles[i] == 0) // the default |
182 { | 198 { |
183 select_font[i]->setCurrentFont (actual_font); | 199 select_font[i]->setCurrentFont (actual_font); |
184 default_font = actual_font; | 200 default_font = actual_font; |
185 font_size[i]->setRange (6,24); | 201 font_size[i]->setRange (6,24); |
186 default_size = actual_font.pointSize (); | 202 default_size = actual_font.pointSize (); |
202 attrib_font[0][i]->setObjectName (actual_name+"_bold"); | 218 attrib_font[0][i]->setObjectName (actual_name+"_bold"); |
203 attrib_font[1][i]->setChecked(Qt::Checked && actual_font.italic ()); | 219 attrib_font[1][i]->setChecked(Qt::Checked && actual_font.italic ()); |
204 attrib_font[1][i]->setObjectName (actual_name+"_italic"); | 220 attrib_font[1][i]->setObjectName (actual_name+"_italic"); |
205 attrib_font[2][i]->setChecked(Qt::Checked && actual_font.underline ()); | 221 attrib_font[2][i]->setChecked(Qt::Checked && actual_font.underline ()); |
206 attrib_font[2][i]->setObjectName (actual_name+"_underline"); | 222 attrib_font[2][i]->setObjectName (actual_name+"_underline"); |
207 color[i] = new color_picker (lexer->color (i)); | 223 color[i] = new color_picker (lexer->color (styles[i])); |
208 color[i]->setObjectName (actual_name+"_color"); | 224 color[i]->setObjectName (actual_name+"_color"); |
209 int column = 1; | 225 int column = 1; |
210 style_grid->addWidget (description[i], i,column++); | 226 style_grid->addWidget (description[i], i,column++); |
211 style_grid->addWidget (select_font[i], i,column++); | 227 style_grid->addWidget (select_font[i], i,column++); |
212 style_grid->addWidget (font_size[i], i,column++); | 228 style_grid->addWidget (font_size[i], i,column++); |
309 void | 325 void |
310 settings_dialog::write_lexer_settings (QsciLexer *lexer, QSettings *settings) | 326 settings_dialog::write_lexer_settings (QsciLexer *lexer, QSettings *settings) |
311 { | 327 { |
312 QWidget *tab = ui->tabs_editor_styles-> | 328 QWidget *tab = ui->tabs_editor_styles-> |
313 findChild <QWidget *>(QString (lexer->language ())+"_styles"); | 329 findChild <QWidget *>(QString (lexer->language ())+"_styles"); |
314 int styles = 0; | 330 int styles[MaxLexerStyles]; // array for saving valid styles (enum is not continuous) |
315 while (lexer->description(styles) != "") | 331 int max_style = get_valid_lexer_styles (lexer, styles); |
316 styles++; | |
317 QFontComboBox *select_font; | 332 QFontComboBox *select_font; |
318 QSpinBox *font_size; | 333 QSpinBox *font_size; |
319 QCheckBox *attrib_font[3]; | 334 QCheckBox *attrib_font[3]; |
320 color_picker *color; | 335 color_picker *color; |
321 int default_size = 10; | 336 int default_size = 10; |
322 QFont default_font = QFont ("Courier New",10,-1,0); | 337 QFont default_font = QFont ("Courier New",10,-1,0); |
323 for (int i = 0; i < styles; i++) // get dialog elements and their contents | 338 for (int i = 0; i < max_style; i++) // get dialog elements and their contents |
324 { | 339 { |
325 QString actual_name = lexer->description (i); | 340 QString actual_name = lexer->description (styles[i]); |
326 select_font = tab->findChild <QFontComboBox *>(actual_name+"_font"); | 341 select_font = tab->findChild <QFontComboBox *>(actual_name+"_font"); |
327 font_size = tab->findChild <QSpinBox *>(actual_name+"_size"); | 342 font_size = tab->findChild <QSpinBox *>(actual_name+"_size"); |
328 attrib_font[0] = tab->findChild <QCheckBox *>(actual_name+"_bold"); | 343 attrib_font[0] = tab->findChild <QCheckBox *>(actual_name+"_bold"); |
329 attrib_font[1] = tab->findChild <QCheckBox *>(actual_name+"_italic"); | 344 attrib_font[1] = tab->findChild <QCheckBox *>(actual_name+"_italic"); |
330 attrib_font[2] = tab->findChild <QCheckBox *>(actual_name+"_underline"); | 345 attrib_font[2] = tab->findChild <QCheckBox *>(actual_name+"_underline"); |
331 color = tab->findChild <color_picker *>(actual_name+"_color"); | 346 color = tab->findChild <color_picker *>(actual_name+"_color"); |
332 QFont new_font = default_font; | 347 QFont new_font = default_font; |
333 if (select_font) | 348 if (select_font) |
334 { | 349 { |
335 new_font = select_font->currentFont (); | 350 new_font = select_font->currentFont (); |
336 if (i == 0) | 351 if (styles[i] == 0) |
337 default_font = new_font; | 352 default_font = new_font; |
338 else | 353 else |
339 if (select_font->currentText () == lexer->description (0)) | 354 if (select_font->currentText () == lexer->description (0)) |
340 new_font = default_font; | 355 new_font = default_font; |
341 } | 356 } |
342 if (font_size) | 357 if (font_size) |
343 { | 358 { |
344 if (i == 0) | 359 if (styles[i] == 0) |
345 { | 360 { |
346 default_size = font_size->value (); | 361 default_size = font_size->value (); |
347 new_font.setPointSize (font_size->value ()); | 362 new_font.setPointSize (font_size->value ()); |
348 } | 363 } |
349 else | 364 else |
353 new_font.setBold (attrib_font[0]->isChecked ()); | 368 new_font.setBold (attrib_font[0]->isChecked ()); |
354 if (attrib_font[1]) | 369 if (attrib_font[1]) |
355 new_font.setItalic (attrib_font[1]->isChecked ()); | 370 new_font.setItalic (attrib_font[1]->isChecked ()); |
356 if (attrib_font[2]) | 371 if (attrib_font[2]) |
357 new_font.setUnderline (attrib_font[2]->isChecked ()); | 372 new_font.setUnderline (attrib_font[2]->isChecked ()); |
358 lexer->setFont (new_font,i); | 373 lexer->setFont (new_font,styles[i]); |
359 if (i == 0) | 374 if (styles[i] == 0) |
360 lexer->setDefaultFont (new_font); | 375 lexer->setDefaultFont (new_font); |
361 if (color) | 376 if (color) |
362 lexer->setColor (color->color (),i); | 377 lexer->setColor (color->color (),styles[i]); |
363 } | 378 } |
364 lexer->writeSettings (*settings); | 379 lexer->writeSettings (*settings); |
365 } | 380 } |
366 #endif | 381 #endif |