# HG changeset patch # User Torsten # Date 1402591529 -7200 # Node ID 3f6280d0a36b48eb2daffd62af231bbdd891fe4b # Parent 2e68c34521e0277636d745078507e0dab5af439e 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 diff -r 2e68c34521e0 -r 3f6280d0a36b libgui/src/settings-dialog.cc --- 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); +} diff -r 2e68c34521e0 -r 3f6280d0a36b libgui/src/settings-dialog.h --- 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 diff -r 2e68c34521e0 -r 3f6280d0a36b libgui/src/settings-dialog.ui --- 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 @@ - 1 + 6 @@ -1738,33 +1738,57 @@ - - - + + + 10 + + + + + 0 + + + + + - Use Shortcut Set: + Use this set - + + + + Set 1: + + + + + + + Export + + + + + + + Import + + + + - Set 1 + Use this set true - - - - Set 2 - - - - - + + Qt::Horizontal @@ -1776,6 +1800,43 @@ + + + + Export + + + + + + + Import + + + + + + + Set 2: + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + diff -r 2e68c34521e0 -r 3f6280d0a36b libgui/src/shortcut-manager.cc --- 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 #include #include +#include #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)); } } - diff -r 2e68c34521e0 -r 3f6280d0a36b libgui/src/shortcut-manager.h --- 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 {