Mercurial > octave
changeset 18822:3f6280d0a36b gui-release
allow export and import of shortcut sets
* settings-dialog.ui: new buttons for import/export of one of the shortcut sets
* settings-dialog.cc (constrctor): bundle the code for the shortcut settings,
connect slots to signals from the import/export-buttons;
(im-/export_shortcut_set1/2): four new slots for the buttons signals
* settings-dialog.h: new slots
* shortcut-manager.cc (do_fill_treewidget): some code formatting;
(do_write_shortcuts): set and settings as parameters, distinguish if all
or only one set has to be written into the file;
(import_shortcuts): new function for reading a shortcut set from a
settings file;
(do_import_export): new function called from the static wrapper function
import_export for importing or exporting a shortcut sets;
(enter_shortcut::enter_shortcut, enter_shortcut::handle_direct_shortcut,
enter_shortcut::keyPressevent): added some comments
* shortcut-manager.h (write_shortcuts): new parameters set and settings;
(import_export): new static function;
(do_write_shortcuts): new parameters set and settings;
(do_import_export, import_shortcuts): new functions
author | Torsten <ttl@justmail.de> |
---|---|
date | Thu, 12 Jun 2014 18:45:29 +0200 |
parents | 2e68c34521e0 |
children | 4b98fc5c2eb1 |
files | libgui/src/settings-dialog.cc libgui/src/settings-dialog.h libgui/src/settings-dialog.ui libgui/src/shortcut-manager.cc libgui/src/shortcut-manager.h |
diffstat | 5 files changed, 223 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/settings-dialog.cc Sun Jun 08 16:34:22 2014 -0700 +++ b/libgui/src/settings-dialog.cc Thu Jun 12 18:45:29 2014 +0200 @@ -58,8 +58,6 @@ { ui->setupUi (this); - shortcut_manager::fill_treewidget (ui->shortcuts_treewidget); - QSettings *settings = resource_manager::get_settings (); // restore last geometry @@ -280,12 +278,27 @@ read_terminal_colors (settings); // shortcuts + ui->cb_prevent_readline_conflicts->setChecked ( settings->value ("shortcuts/prevent_readline_conflicts", true).toBool ()); int set = settings->value ("shortcuts/set",0).toInt (); ui->rb_sc_set1->setChecked (set == 0); ui->rb_sc_set2->setChecked (set == 1); + // initialize the tree view with all shortcut data + shortcut_manager::fill_treewidget (ui->shortcuts_treewidget); + + // connect the buttons for import/export of the shortcut sets + connect (ui->btn_import_shortcut_set1, SIGNAL (clicked ()), + this, SLOT (import_shortcut_set1 ())); + connect (ui->btn_export_shortcut_set1, SIGNAL (clicked ()), + this, SLOT (export_shortcut_set1 ())); + connect (ui->btn_import_shortcut_set2, SIGNAL (clicked ()), + this, SLOT (import_shortcut_set2 ())); + connect (ui->btn_export_shortcut_set2, SIGNAL (clicked ()), + this, SLOT (export_shortcut_set2 ())); + + #ifdef HAVE_QSCINTILLA // editor styles: create lexer, read settings, and create dialog elements QsciLexer *lexer; @@ -713,7 +726,7 @@ if (ui->rb_sc_set2->isChecked ()) set = 1; settings->setValue ("shortcuts/set",set); - shortcut_manager::write_shortcuts (); + shortcut_manager::write_shortcuts (0, settings); // 0: write both sets // settings dialog's geometry settings->setValue ("settings/last_tab",ui->tabWidget->currentIndex ()); @@ -882,3 +895,28 @@ ui->pb_file_browser_dir->setDisabled (disable); } } + +// slots for import/export of shortcut sets +void +settings_dialog::import_shortcut_set1 () +{ + shortcut_manager::import_export (true,1); +} + +void +settings_dialog::export_shortcut_set1 () +{ + shortcut_manager::import_export (false,1); +} + +void +settings_dialog::import_shortcut_set2 () +{ + shortcut_manager::import_export (true,2); +} + +void +settings_dialog::export_shortcut_set2 () +{ + shortcut_manager::import_export (false,2); +}
--- a/libgui/src/settings-dialog.h Sun Jun 08 16:34:22 2014 -0700 +++ b/libgui/src/settings-dialog.h Thu Jun 12 18:45:29 2014 +0200 @@ -52,6 +52,12 @@ void get_dir (QLineEdit*, const QString&); void set_disabled_pref_file_browser_dir (bool disable); + // slots for import/export-buttons of shortcut sets + void import_shortcut_set1 (); + void export_shortcut_set1 (); + void import_shortcut_set2 (); + void export_shortcut_set2 (); + private: Ui::settings_dialog * ui; #ifdef HAVE_QSCINTILLA
--- a/libgui/src/settings-dialog.ui Sun Jun 08 16:34:22 2014 -0700 +++ b/libgui/src/settings-dialog.ui Thu Jun 12 18:45:29 2014 +0200 @@ -32,7 +32,7 @@ </size> </property> <property name="currentIndex"> - <number>1</number> + <number>6</number> </property> <widget class="QWidget" name="tab_general"> <property name="enabled"> @@ -1738,33 +1738,57 @@ </widget> </item> <item> - <layout class="QHBoxLayout" name="horizontalLayout_14"> - <item> - <widget class="QLabel" name="label_22"> + <layout class="QGridLayout" name="gridLayout_12"> + <property name="topMargin"> + <number>10</number> + </property> + <item row="3" column="0"> + <layout class="QHBoxLayout" name="horizontalLayout_16"> + <property name="topMargin"> + <number>0</number> + </property> + </layout> + </item> + <item row="1" column="2"> + <widget class="QRadioButton" name="rb_sc_set2"> <property name="text"> - <string>Use Shortcut Set: </string> + <string>Use this set</string> </property> </widget> </item> - <item> + <item row="0" column="0"> + <widget class="QLabel" name="label_23"> + <property name="text"> + <string>Set 1:</string> + </property> + </widget> + </item> + <item row="1" column="4"> + <widget class="QPushButton" name="btn_export_shortcut_set2"> + <property name="text"> + <string>Export</string> + </property> + </widget> + </item> + <item row="1" column="3"> + <widget class="QPushButton" name="btn_import_shortcut_set2"> + <property name="text"> + <string>Import</string> + </property> + </widget> + </item> + <item row="0" column="2"> <widget class="QRadioButton" name="rb_sc_set1"> <property name="text"> - <string>Set 1</string> + <string>Use this set</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> - <item> - <widget class="QRadioButton" name="rb_sc_set2"> - <property name="text"> - <string>Set 2</string> - </property> - </widget> - </item> - <item> - <spacer name="horizontalSpacer_17"> + <item row="0" column="5"> + <spacer name="horizontalSpacer_26"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> @@ -1776,6 +1800,43 @@ </property> </spacer> </item> + <item row="0" column="4"> + <widget class="QPushButton" name="btn_export_shortcut_set1"> + <property name="text"> + <string>Export</string> + </property> + </widget> + </item> + <item row="0" column="3"> + <widget class="QPushButton" name="btn_import_shortcut_set1"> + <property name="text"> + <string>Import</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_24"> + <property name="text"> + <string>Set 2:</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <spacer name="horizontalSpacer_33"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> </layout> </item> <item>
--- a/libgui/src/shortcut-manager.cc Sun Jun 08 16:34:22 2014 -0700 +++ b/libgui/src/shortcut-manager.cc Thu Jun 12 18:45:29 2014 +0200 @@ -34,6 +34,7 @@ #include <QCheckBox> #include <QHeaderView> #include <QAction> +#include <QFileDialog> #include "error.h" #include "resource-manager.h" @@ -300,7 +301,7 @@ QColor fg = QColor (tree_item->foreground (1).color ()); fg.setAlpha (128); tree_item->setForeground (1, QBrush (fg)); - tree_item->setForeground (3,QBrush (fg)); + tree_item->setForeground (3, QBrush (fg)); // write the shortcuts tree_item->setText (0, sc.description); @@ -315,18 +316,35 @@ } +// write one or all actual shortcut set(s) into a settings file void -shortcut_manager::do_write_shortcuts () +shortcut_manager::do_write_shortcuts (int set, QSettings* settings) { - for (int i = 0; i < _sc.count (); i++) + if (set) { - _settings->setValue("shortcuts/"+_sc.at (i).settings_key, _sc.at (i).actual_sc[0].toString ()); - _settings->setValue("shortcuts/"+_sc.at (i).settings_key+"_1", _sc.at (i).actual_sc[1].toString ()); + // set is not zero, only write the desired set (index = set-1) + // into the settings file that the user has selected for this export + for (int i = 0; i < _sc.count (); i++) // loop over all shortcuts + { + settings->setValue("shortcuts/"+_sc.at (i).settings_key, + _sc.at (i).actual_sc[set-1].toString ()); + } + } + else + { + // set is zero, write all sets into the normal octave settings file + // (this is only the case when called from the closing settings dialog) + for (int i = 0; i < _sc.count (); i++) // loop over all shortcuts + { + settings->setValue("shortcuts/"+_sc.at (i).settings_key, + _sc.at (i).actual_sc[0].toString ()); + settings->setValue("shortcuts/"+_sc.at (i).settings_key+"_1", + _sc.at (i).actual_sc[1].toString ()); + } + delete _dialog; // the dialog for key sequences can be removed now } - _settings->sync (); - - delete _dialog; + settings->sync (); // sync the settings file } void @@ -498,26 +516,85 @@ _edit_actual->setText (_label_default->text ()); } +// import a shortcut set from a given settings file and refresh the tree view +void +shortcut_manager::import_shortcuts (int set, QSettings *settings) +{ + for (int i = 0; i < _sc.count (); i++) + { + // update the list of all shortcuts + shortcut_t sc = _sc.at (i); // make a copy + sc.actual_sc[set-1] = QKeySequence ( // get new shortcut from settings + settings->value ("shortcuts/"+sc.settings_key,sc.actual_sc[set-1]). + toString ()); // and use the old one as default + _sc.replace (i,sc); // replace the old with the new one + + // update the tree view + QTreeWidgetItem* tree_item = _index_item_hash[i]; // get related tree item + tree_item->setText (2*set, sc.actual_sc [set-1]); // display new shortcut + } +} + +// import or export of shortcut sets, +// called from settings dialog when related buttons are clicked +void +shortcut_manager::do_import_export (bool import, int set) +{ + QString file; + + // get the file name to read or write the shortcuts, + // the default extension is .osc (octave shortcuts) + if (import) + { + file = QFileDialog::getOpenFileName (this, + tr ("Import shortcut set %1 from file ...").arg (set), QString (), + tr ("Octave Shortcut Files (*.osc);;All Files (*)")); + } + else + { + file = QFileDialog::getSaveFileName (this, + tr ("Export shortcut set %1 into file ...").arg (set), QString (), + tr ("Octave Shortcut Files (*.osc);;All Files (*)")); + } + + // create a settings object related to this file + QSettings *osc_settings = new QSettings (file, QSettings::IniFormat); + if (osc_settings) + { + // the settings object was successfully created: carry on + if (import) + import_shortcuts (set, osc_settings); // import (special action) + else + do_write_shortcuts (set, osc_settings); // export, like saving settings + } + else + qWarning () << tr ("Failed to open %1 as octave shortcut file"). arg (file); + +} +// enter_shortcut: +// class derived from QLineEdit for directly entering key sequences which enter_shortcut::enter_shortcut (QWidget *p) : QLineEdit (p) { - _direct_shortcut = true; + _direct_shortcut = true; // the shortcut is directly entered } enter_shortcut::~enter_shortcut () { } +// slot for checkbox whether the shortcut is directly entered or not void enter_shortcut::handle_direct_shortcut (int state) { if (state) - _direct_shortcut = true; + _direct_shortcut = true; // the shortcut is directly entered else - _direct_shortcut = false; + _direct_shortcut = false; // the shortcut has to be written as text } +// new keyPressEvent void enter_shortcut::keyPressEvent (QKeyEvent *e) { @@ -548,4 +625,3 @@ setText (QKeySequence(key)); } } -
--- a/libgui/src/shortcut-manager.h Sun Jun 08 16:34:22 2014 -0700 +++ b/libgui/src/shortcut-manager.h Thu Jun 12 18:45:29 2014 +0200 @@ -63,10 +63,10 @@ instance->do_init_data (); } - static void write_shortcuts () + static void write_shortcuts (int set, QSettings *settings) { if (instance_ok ()) - instance->do_write_shortcuts (); + instance->do_write_shortcuts (set, settings); } static void set_shortcut (QAction *action, const QString& key) @@ -81,6 +81,12 @@ instance->do_fill_treewidget (tree_view); } + static void import_export (bool import, int set) + { + if (instance_ok ()) + instance->do_import_export (import, set); + } + public slots: signals: @@ -107,10 +113,12 @@ void init (QString, QString, QKeySequence); void do_init_data (); - void do_write_shortcuts (); + void do_write_shortcuts (int set, QSettings *settings); void do_set_shortcut (QAction *action, const QString& key); void do_fill_treewidget (QTreeWidget *tree_view); + void do_import_export (bool import, int set); void shortcut_dialog (int); + void import_shortcuts (int set, QSettings *settings); struct shortcut_t {