Mercurial > octave
changeset 29162:bb6bb306b8a6
copy lexer settings from default settings file for new languages
* file-editor-tab.cc (update_lexer_settings): call the new member function
of the resource manager for loading the current lexer settings instead
of the related lexer function directly
* resource-manager.cc (get_default_font): move the code for determining
the default monospace font and size into a separate function;
(reload_settings): call new function for the default font and size;
(read_lexer_settings): new member function testing for lexer settings
in a given settings file and copy them from the default settings if
not available
* resource-manager.h: include Qsci/qscilexer.h, new member function
get_default_font and read_lexer_settings
* settings-dialog.cc (read_lexer_settings): call the new member function
of the resource manager for loading the current lexer settings instead
of the related lexer function directly
author | Torsten Lilge <ttl-octave@mailbox.org> |
---|---|
date | Tue, 08 Dec 2020 21:34:55 +0100 |
parents | b58e3a04fab3 |
children | 8f67ad8b3103 |
files | libgui/src/m-editor/file-editor-tab.cc libgui/src/resource-manager.cc libgui/src/resource-manager.h libgui/src/settings-dialog.cc |
diffstat | 4 files changed, 106 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/m-editor/file-editor-tab.cc Tue Dec 08 11:13:26 2020 -0800 +++ b/libgui/src/m-editor/file-editor-tab.cc Tue Dec 08 21:34:55 2020 +0100 @@ -861,7 +861,7 @@ if (update_apis_only) return; // We are done here - lexer->readSettings (*settings); + rmgr.read_lexer_settings (lexer, settings); m_edit_area->setCaretForegroundColor (lexer->color (0)); m_edit_area->setIndentationGuidesForegroundColor (lexer->color (0));
--- a/libgui/src/resource-manager.cc Tue Dec 08 11:13:26 2020 -0800 +++ b/libgui/src/resource-manager.cc Tue Dec 08 21:34:55 2020 +0100 @@ -255,10 +255,35 @@ return default_family; } - void resource_manager::reload_settings (void) + QStringList resource_manager::get_default_font (void) { QString default_family = get_default_font_family (); + // determine the fefault fotn size of the system + QFont font = QFont (default_family); + int font_size = font.pointSize (); + if (font_size == -1) + font_size = static_cast <int> (std::floor(font.pointSizeF ())); + + // check for valid font size, otherwise take default 10 + QString default_font_size = "10"; + if (font_size > 0) + default_font_size = QString::number (font_size); + + std::string env_default_font_size + = sys::env::getenv ("OCTAVE_DEFAULT_FONT_SIZE"); + + if (! env_default_font_size.empty ()) + default_font_size = QString::fromStdString (env_default_font_size); + + QStringList result; + result << default_family; + result << default_font_size; + return result; + } + + void resource_manager::reload_settings (void) + { if (! QFile::exists (m_settings_file)) { QDir ("/").mkpath (m_settings_directory); @@ -271,24 +296,8 @@ QString settings_text = in.readAll (); qt_settings.close (); - default_family = get_default_font_family (); - - // determine the fefault fotn size of the system - QFont font = QFont (default_family); - int font_size = font.pointSize (); - if (font_size == -1) - font_size = static_cast <int> (std::floor(font.pointSizeF ())); - - // check for valid font size, otherwise take default 10 - QString default_font_size = "10"; - if (font_size > 0) - default_font_size = QString::number (font_size); - - std::string env_default_font_size - = sys::env::getenv ("OCTAVE_DEFAULT_FONT_SIZE"); - - if (! env_default_font_size.empty ()) - default_font_size = QString::fromStdString (env_default_font_size); + // Get the default font + QStringList def_font = get_default_font (); // Get the default custom editor #if defined (Q_OS_WIN32) @@ -305,8 +314,8 @@ // Replace placeholders settings_text.replace ("__default_custom_editor__", custom_editor); - settings_text.replace ("__default_font__", default_family); - settings_text.replace ("__default_font_size__", default_font_size); + settings_text.replace ("__default_font__", def_font.at(0)); + settings_text.replace ("__default_font_size__", def_font.at (1)); QFile user_settings (m_settings_file); @@ -325,8 +334,72 @@ // Write the default monospace font into the settings for later use by // console and editor as fallbacks of their font preferences. if (m_settings) - m_settings->setValue (global_mono_font.key, default_family); + m_settings->setValue (global_mono_font.key, + get_default_font_family ()); + + } + + void resource_manager::read_lexer_settings (QsciLexer *lexer, + QSettings *settings) + { + // Test whether the settings for lexer is already contained in the + // given gui settings file. If yes, load them, if not copy them from the + // default settings file. + // This is useful when a new language support is implemented and the + // existing settings file is used (which is of course the common case). + + settings->beginGroup ("Scintilla"); + settings->beginGroup (lexer->language ()); + + QStringList lexer_keys = settings->allKeys (); + + if (lexer_keys.count () == 0) + { + // No Lexer keys found + // => copy all settings from the default settings + QSettings def_settings (default_qt_settings_file (), + QSettings::IniFormat); + // Get all lexer keys and copy the ones for the given lexer + def_settings.beginGroup ("Scintilla"); + def_settings.beginGroup (lexer->language ()); + + // Get the default font + QStringList def_font = get_default_font (); + lexer_keys = def_settings.allKeys (); + + for (int i = 0; i < lexer_keys.count (); i++) + { + QString key = lexer_keys.at (i); + if (key.contains ("font")) + { + // font setting, insert default font and size + QStringList val = def_settings.value (key).toStringList (); + val.removeFirst (); + val.removeFirst (); + val.prepend (def_font.at (1)); + val.prepend (def_font.at (0)); + settings->setValue (key, val); + } + else + { + // No font setting just copy + QVariant var = def_settings.value (key); + settings->setValue (key, var); + } + } + + def_settings.endGroup (); + def_settings.endGroup (); + + } + + settings->endGroup (); + settings->endGroup (); + + settings->sync (); + + lexer->readSettings (*settings); } void resource_manager::set_settings (const QString& file)
--- a/libgui/src/resource-manager.h Tue Dec 08 11:13:26 2020 -0800 +++ b/libgui/src/resource-manager.h Tue Dec 08 21:34:55 2020 +0100 @@ -29,6 +29,7 @@ #include <QComboBox> #include <QIcon> #include <QPointer> +#include <Qsci/qscilexer.h> #include <QTranslator> #include <QTemporaryFile> @@ -69,6 +70,8 @@ QString get_default_font_family (void); + QStringList get_default_font (void); + QPointer<QTemporaryFile> create_tmp_file (const QString& extension = QString (), const QString& contents = QString ()); @@ -77,6 +80,8 @@ void reload_settings (void); + void read_lexer_settings (QsciLexer *lexer, QSettings *settings); + void set_settings (const QString& file); bool update_settings_key (const QString& new_key, const QString& old_key);
--- a/libgui/src/settings-dialog.cc Tue Dec 08 11:13:26 2020 -0800 +++ b/libgui/src/settings-dialog.cc Tue Dec 08 21:34:55 2020 +0100 @@ -664,8 +664,12 @@ gui_settings *settings) { #if defined (HAVE_QSCINTILLA) + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - lexer->readSettings (*settings); + // Get lexer settings and copy from default settings if not yet + // available in normal settings file + rmgr.read_lexer_settings (lexer, settings); + int styles[MaxLexerStyles]; // array for saving valid styles // (enum is not continuous) int max_style = get_valid_lexer_styles (lexer, styles);