# HG changeset patch # User Torsten # Date 1365358187 -7200 # Node ID 06bdf84aa3d924b3e447bc4d3989a725056d55bb # Parent facf00ce97d3e2e17d98b78605fac90d6f5f980c 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 diff --git a/libgui/src/settings-dialog.cc b/libgui/src/settings-dialog.cc --- a/libgui/src/settings-dialog.cc +++ b/libgui/src/settings-dialog.cc @@ -154,31 +154,47 @@ #ifdef HAVE_QSCINTILLA +int +settings_dialog::get_valid_lexer_styles (QsciLexer *lexer, int styles[]) +{ + int max_style = 0; + int actual_style = 0; + while (actual_style < MaxStyleNumber && max_style < MaxLexerStyles) + { + if ((lexer->description(actual_style)) != "") // valid style + styles[max_style++] = actual_style; + actual_style++; + } + return max_style; +} + void settings_dialog::read_lexer_settings (QsciLexer *lexer, QSettings *settings) { lexer->readSettings (*settings); - int styles = 0; - while (lexer->description(styles) != "") - styles++; + int styles[MaxLexerStyles]; // array for saving valid styles (enum is not continuous) + int max_style = get_valid_lexer_styles (lexer, styles); QGridLayout *style_grid = new QGridLayout (); - QLabel *description[styles]; - QFontComboBox *select_font[styles]; - QSpinBox *font_size[styles]; - QCheckBox *attrib_font[3][styles]; - color_picker *color[styles]; + QLabel *description[max_style]; + QFontComboBox *select_font[max_style]; + QSpinBox *font_size[max_style]; + QCheckBox *attrib_font[3][max_style]; + color_picker *color[max_style]; int default_size = 10; QFont default_font = QFont (); - for (int i = 0; i < styles; i++) // create dialog elements for all styles + for (int i = 0; i < max_style; i++) // create dialog elements for all styles { - QString actual_name = lexer->description (i); - QFont actual_font = lexer->font (i); + QString actual_name = lexer->description (styles[i]); + QFont actual_font = lexer->font (styles[i]); description[i] = new QLabel (actual_name); + description[i]->setWordWrap (true); + description[i]->setMaximumSize (180,QWIDGETSIZE_MAX); + description[i]->setMinimumSize (180,1); select_font[i] = new QFontComboBox (); select_font[i]->setObjectName (actual_name+"_font"); font_size[i] = new QSpinBox (); font_size[i]->setObjectName (actual_name+"_size"); - if (i == 0) // the default + if (styles[i] == 0) // the default { select_font[i]->setCurrentFont (actual_font); default_font = actual_font; @@ -204,7 +220,7 @@ attrib_font[1][i]->setObjectName (actual_name+"_italic"); attrib_font[2][i]->setChecked(Qt::Checked && actual_font.underline ()); attrib_font[2][i]->setObjectName (actual_name+"_underline"); - color[i] = new color_picker (lexer->color (i)); + color[i] = new color_picker (lexer->color (styles[i])); color[i]->setObjectName (actual_name+"_color"); int column = 1; style_grid->addWidget (description[i], i,column++); @@ -311,18 +327,17 @@ { QWidget *tab = ui->tabs_editor_styles-> findChild (QString (lexer->language ())+"_styles"); - int styles = 0; - while (lexer->description(styles) != "") - styles++; + int styles[MaxLexerStyles]; // array for saving valid styles (enum is not continuous) + int max_style = get_valid_lexer_styles (lexer, styles); QFontComboBox *select_font; QSpinBox *font_size; QCheckBox *attrib_font[3]; color_picker *color; int default_size = 10; QFont default_font = QFont ("Courier New",10,-1,0); - for (int i = 0; i < styles; i++) // get dialog elements and their contents + for (int i = 0; i < max_style; i++) // get dialog elements and their contents { - QString actual_name = lexer->description (i); + QString actual_name = lexer->description (styles[i]); select_font = tab->findChild (actual_name+"_font"); font_size = tab->findChild (actual_name+"_size"); attrib_font[0] = tab->findChild (actual_name+"_bold"); @@ -333,7 +348,7 @@ if (select_font) { new_font = select_font->currentFont (); - if (i == 0) + if (styles[i] == 0) default_font = new_font; else if (select_font->currentText () == lexer->description (0)) @@ -341,7 +356,7 @@ } if (font_size) { - if (i == 0) + if (styles[i] == 0) { default_size = font_size->value (); new_font.setPointSize (font_size->value ()); @@ -355,11 +370,11 @@ new_font.setItalic (attrib_font[1]->isChecked ()); if (attrib_font[2]) new_font.setUnderline (attrib_font[2]->isChecked ()); - lexer->setFont (new_font,i); - if (i == 0) + lexer->setFont (new_font,styles[i]); + if (styles[i] == 0) lexer->setDefaultFont (new_font); if (color) - lexer->setColor (color->color (),i); + lexer->setColor (color->color (),styles[i]); } lexer->writeSettings (*settings); } diff --git a/libgui/src/settings-dialog.h b/libgui/src/settings-dialog.h --- a/libgui/src/settings-dialog.h +++ b/libgui/src/settings-dialog.h @@ -45,6 +45,9 @@ #ifdef HAVE_QSCINTILLA void read_lexer_settings (QsciLexer *lexer, QSettings *settings); void write_lexer_settings (QsciLexer *lexer, QSettings *settings); + int get_valid_lexer_styles (QsciLexer *lexer, int styles[]); + enum { MaxLexerStyles = 64, + MaxStyleNumber = 128 }; #endif };