Mercurial > octave
diff libgui/src/shortcut-manager.h @ 18611:086093fbdc1a gui-release
first implementation of a shortcut manager (bug #41217)
* file-editor.cc (set_shortcuts): use shortcut-manager to set some shortcuts
* main_window.cc (set_global_shortcuts): use shortcut-manager to set some
shortcuts;
(construct_file_menu): all actions as class variables;
(construct_edit_menu): all actions as class variables;
* main_window.h: actions as class variables
* module.mk: new files shortcut_manager.cc, shortcut_manager.h
* octave-gui.cc (octave_start_gui): initialize the shortcut_manager
* settings-dialog.cc (constructor): call shortcut-manager for shortcut table
(write_changed_settings): call shortcut-manager for writing shortcuts
* settings-dialog.ui: new tab with a tree widget for the shortcuts
* shortcut_manager.cc (constructor, destructor): new class;
(instance_ok): checks if instance is valid, creates a new one otherwise;
(do_init_data): initialize the list with all shortcut's data;
(init): internal function for initializing the data list;
(do_fill_treewidget): fills the tree widget in the settings dialog;
(do_write_shortcuts): writes shortcuts from settings dialog into file;
(do_set_shortcut): setting the shortcut for an action;
(handle_double_clicked): slot for double clicking into the tree widget;
(shortcut_dialog): dialog for entering a new shortcut;
(shortcut_dialog_finished): processing the dialog's result;
(shortcut_dialog_set_default): setting the shortcut to it's default;
(enter_shortcut::enter_shortcut): new class derived from QLineEdit;
(enter_shortcut::handle_direct_shortcut): switch between normal editing and
directly entering a shortcut;
(enter_shortcut::keyPressEvent): event handler filtering the shortcuts;
* shortcut_manager.h (init_data): static function calling do_init_data;
(write_shortcuts): static function calling do_write_shortcuts;
(fill_treewidget): static function calling do_fill_treewidget;
(set_shortcut): static function calling do_set_shortcut;
author | Torsten <ttl@justmail.de> |
---|---|
date | Tue, 01 Apr 2014 21:29:48 +0200 |
parents | |
children | 1b289f45187f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgui/src/shortcut-manager.h Tue Apr 01 21:29:48 2014 +0200 @@ -0,0 +1,139 @@ +/* + +Copyright (C) 2014 Torsten <ttl@justmail.de> + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#ifndef SHORTCUT_MANAGER_H +#define SHORTCUT_MANAGER_H + +#include <QWidget> +#include <QTreeWidget> +#include <QLineEdit> +#include <QKeyEvent> +#include <QLabel> + + +class enter_shortcut : public QLineEdit +{ + Q_OBJECT + +public: + enter_shortcut (QWidget *p = 0); + ~enter_shortcut (); + + virtual void keyPressEvent (QKeyEvent *e); + +public slots: + void handle_direct_shortcut (int); + +private: + bool _direct_shortcut; + +}; + + +class shortcut_manager : public QWidget +{ + Q_OBJECT + +public: + shortcut_manager (); + ~shortcut_manager (); + + static void init_data () + { + if (instance_ok ()) + instance->do_init_data (); + } + + static void write_shortcuts () + { + if (instance_ok ()) + instance->do_write_shortcuts (); + } + + static void set_shortcut (QAction *action, const QString& key) + { + if (instance_ok ()) + instance->do_set_shortcut (action, key); + } + + static void fill_treewidget (QTreeWidget *tree_view) + { + if (instance_ok ()) + instance->do_fill_treewidget (tree_view); + } + +public slots: + +signals: + +protected: + +protected slots: + + void handle_double_clicked (QTreeWidgetItem*, int); + void shortcut_dialog_finished (int); + void shortcut_dialog_set_default (); + +private: + + static shortcut_manager *instance; + static void cleanup_instance (void) { delete instance; instance = 0; } + + // No copying! + + shortcut_manager (const shortcut_manager&); + shortcut_manager& operator = (const shortcut_manager&); + + static bool instance_ok (void); + + void init (QString, QString, QKeySequence); + void do_init_data (); + void do_write_shortcuts (); + void do_set_shortcut (QAction *action, const QString& key); + void do_fill_treewidget (QTreeWidget *tree_view); + void shortcut_dialog (int); + + struct shortcut_t + { + QString description; + QString settings_key; + QKeySequence actual_sc; + QKeySequence default_sc; + QTreeWidgetItem *tree_item; + }; + + QList<shortcut_t> _sc; + QHash<QString, int> _shortcut_hash; + QHash<QString, int> _action_hash; + QHash <QString, QTreeWidgetItem*> _level_hash; + QHash<int, QTreeWidgetItem*> _index_item_hash; + QHash<QTreeWidgetItem*, int> _item_index_hash; + + QDialog *_dialog; + enter_shortcut *_edit_actual; + QLabel *_label_default; + int _handled_index; + +}; + + +#endif // SHORTCUT_MANAGER_H