Mercurial > octave
diff libgui/src/shortcut-manager.cc @ 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 | 95249367d6fa |
children | 479d1d3cb5c3 1802dc60fb4a |
line wrap: on
line diff
--- 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)); } } -