Mercurial > hg > octave-lyh
diff libgui/src/settings-dialog.cc @ 16402:7fa90eb41240
gui: individually configurable styles of the editor lexers
* color-picker.cc/.h: new class for a simple color picker
* libgui/src/module.mk: added color-picker.cc/.h
* file-editor-tab.cc(update_lexer): read config of the lexer from settings file
* file-editor-tab(notice_settings): editor font not directly configured from
the settings file but via the lexer settings in update_lexer
* lexer-octave-gui.cc(constructor): inherits from QsciLexerOctave instaead of
QsciLexer, code cleanup
* lexer-octave-gui.cc(language,lexer,defaultFont,defaultColor,description):
removed, original methods used and configured via settings
* lexer-octave-gui.h: removed functions language,lexer,defaultFont,defaultColor,
description and enum; using methods of octave lexer instead
* settings-dialog.cc(constructor): editor font not configured from settings,
defining lexers for supported languages and reading their actual settings
from the settings file (via read_lexer_settings)
* settings-dialog.cc(read_lexer_settings): new function for reading the lexers
settings from settings file and creating the tabs with interactive elements
for configuring these settings
* settings-dialog.cc(write_changed_settings): remove settings for editor font,
defining lexers for supported languages and writing the settings from the
dialog into the settings file (via write_lexer_settings)
* settings-dialog.cc(write_lexer_settings): new funciton for getting the new
lexer settings from the interactive elements and write them into the settings
file
* settings-dialog.h: new functiond read_lexer_settings, write_lexer_settings
* settings-dialog.ui: new tab for the editor styles which contents is
dynamically created in settings_dialog ()
author | Torsten <ttl@justmail.de> |
---|---|
date | Sun, 31 Mar 2013 23:56:11 +0200 |
parents | 4bb1b82076e5 |
children | f62163bed4dc |
line wrap: on
line diff
--- a/libgui/src/settings-dialog.cc +++ b/libgui/src/settings-dialog.cc @@ -31,6 +31,16 @@ #include <QDir> #include <QFileInfo> +#ifdef HAVE_QSCINTILLA +#include <QScrollArea> +#include "color-picker.h" +#include <Qsci/qscilexercpp.h> +#include <Qsci/qscilexerbash.h> +#include <Qsci/qscilexerperl.h> +#include <Qsci/qscilexerbatch.h> +#include <Qsci/qscilexerdiff.h> +#endif + settings_dialog::settings_dialog (QWidget *p): QDialog (p), ui (new Ui::settings_dialog) { @@ -71,8 +81,6 @@ ui->editor_showLineNumbers->setChecked (settings->value ("editor/showLineNumbers",true).toBool () ); ui->editor_highlightCurrentLine->setChecked (settings->value ("editor/highlightCurrentLine",true).toBool () ); ui->editor_codeCompletion->setChecked (settings->value ("editor/codeCompletion",true).toBool () ); - ui->editor_fontName->setCurrentFont (QFont (settings->value ("editor/fontName","Courier New").toString()) ); - ui->editor_fontSize->setValue (settings->value ("editor/fontSize",10).toInt ()); ui->editor_longWindowTitle->setChecked (settings->value ("editor/longWindowTitle",false).toBool ()); ui->editor_restoreSession->setChecked (settings->value ("editor/restoreSession",true).toBool ()); ui->terminal_fontName->setCurrentFont (QFont (settings->value ("terminal/fontName","Courier New").toString()) ); @@ -114,6 +122,29 @@ ui->proxyPort->setText (settings->value ("proxyPort").toString ()); ui->proxyUserName->setText (settings->value ("proxyUserName").toString ()); ui->proxyPassword->setText (settings->value ("proxyPassword").toString ()); + +#ifdef HAVE_QSCINTILLA + // editor styles: create lexer, read settings, and create dialog elements + QsciLexer *lexer; + lexer = new lexer_octave_gui (); + read_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerCPP (); + read_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerPerl (); + read_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerBatch (); + read_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerDiff (); + read_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerBash (); + read_lexer_settings (lexer,settings); + delete lexer; +#endif } settings_dialog::~settings_dialog () @@ -121,6 +152,80 @@ delete ui; } + +#ifdef HAVE_QSCINTILLA +void +settings_dialog::read_lexer_settings (QsciLexer *lexer, QSettings *settings) +{ + lexer->readSettings (*settings); + int styles = 0; + while (lexer->description(styles) != "") + 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]; + int default_size = 10; + QFont default_font = QFont (); + for (int i = 0; i < styles; i++) // create dialog elements for all styles + { + QString actual_name = lexer->description (i); + QFont actual_font = lexer->font (i); + description[i] = new QLabel (actual_name); + 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 + { + select_font[i]->setCurrentFont (actual_font); + default_font = actual_font; + font_size[i]->setRange (6,24); + default_size = actual_font.pointSize (); + font_size[i]->setValue (default_size); + } + else // other styles + { + select_font[i]->setCurrentFont (actual_font); + if (actual_font.family () == default_font.family ()) + select_font[i]->setEditText (lexer->description (0)); + font_size[i]->setRange (-4,4); + font_size[i]->setValue (actual_font.pointSize ()-default_size); + font_size[i]->setToolTip ("Difference to the defalt size"); + } + attrib_font[0][i] = new QCheckBox (tr("b")); + attrib_font[1][i] = new QCheckBox (tr("i")); + attrib_font[2][i] = new QCheckBox (tr("u")); + attrib_font[0][i]->setChecked(Qt::Checked && actual_font.bold ()); + attrib_font[0][i]->setObjectName (actual_name+"_bold"); + attrib_font[1][i]->setChecked(Qt::Checked && actual_font.italic ()); + 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]->setObjectName (actual_name+"_color"); + int column = 1; + style_grid->addWidget (description[i], i,column++); + style_grid->addWidget (select_font[i], i,column++); + style_grid->addWidget (font_size[i], i,column++); + style_grid->addWidget (attrib_font[0][i],i,column++); + style_grid->addWidget (attrib_font[1][i],i,column++); + style_grid->addWidget (attrib_font[2][i],i,column++); + style_grid->addWidget (color[i], i,column++); + } + // place grid with elements into the tab + QScrollArea *scroll_area = new QScrollArea (); + QWidget *scroll_area_contents = new QWidget (); + scroll_area_contents->setObjectName (QString (lexer->language ())+"_styles"); + scroll_area_contents->setLayout (style_grid); + scroll_area->setWidget (scroll_area_contents); + ui->tabs_editor_styles->addTab (scroll_area,lexer->language ()); +} +#endif + + void settings_dialog::write_changed_settings () { @@ -147,8 +252,6 @@ settings->setValue ("editor/showLineNumbers", ui->editor_showLineNumbers->isChecked ()); settings->setValue ("editor/highlightCurrentLine", ui->editor_highlightCurrentLine->isChecked ()); settings->setValue ("editor/codeCompletion", ui->editor_codeCompletion->isChecked ()); - settings->setValue ("editor/fontName", ui->editor_fontName->currentFont().family()); - settings->setValue ("editor/fontSize", ui->editor_fontSize->value()); settings->setValue ("editor/longWindowTitle", ui->editor_longWindowTitle->isChecked()); settings->setValue ("editor/restoreSession", ui->editor_restoreSession->isChecked ()); settings->setValue ("terminal/fontSize", ui->terminal_fontSize->value()); @@ -177,4 +280,87 @@ } settings->setValue ("terminal/cursorType", cursorType); settings->sync (); + +#ifdef HAVE_QSCINTILLA + // editor styles: create lexer, get dialog contents, and write settings + QsciLexer *lexer; + lexer = new lexer_octave_gui (); + write_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerCPP (); + write_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerPerl (); + write_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerBatch (); + write_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerDiff (); + write_lexer_settings (lexer,settings); + delete lexer; + lexer = new QsciLexerBash (); + write_lexer_settings (lexer,settings); + delete lexer; +#endif } + +#ifdef HAVE_QSCINTILLA +void +settings_dialog::write_lexer_settings (QsciLexer *lexer, QSettings *settings) +{ + QWidget *tab = ui->tabs_editor_styles-> + findChild <QWidget *>(QString (lexer->language ())+"_styles"); + int styles = 0; + while (lexer->description(styles) != "") + 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 + { + QString actual_name = lexer->description (i); + select_font = tab->findChild <QFontComboBox *>(actual_name+"_font"); + font_size = tab->findChild <QSpinBox *>(actual_name+"_size"); + attrib_font[0] = tab->findChild <QCheckBox *>(actual_name+"_bold"); + attrib_font[1] = tab->findChild <QCheckBox *>(actual_name+"_italic"); + attrib_font[2] = tab->findChild <QCheckBox *>(actual_name+"_underline"); + color = tab->findChild <color_picker *>(actual_name+"_color"); + QFont new_font = default_font; + if (select_font) + { + new_font = select_font->currentFont (); + if (i == 0) + default_font = new_font; + else + if (select_font->currentText () == lexer->description (0)) + new_font = default_font; + } + if (font_size) + { + if (i == 0) + { + default_size = font_size->value (); + new_font.setPointSize (font_size->value ()); + } + else + new_font.setPointSize (font_size->value ()+default_size); + } + if (attrib_font[0]) + new_font.setBold (attrib_font[0]->isChecked ()); + if (attrib_font[1]) + 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->setDefaultFont (new_font); + if (color) + lexer->setColor (color->color (),i); + } + lexer->writeSettings (*settings); +} +#endif