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