diff options
Diffstat (limited to 'khotkeys/kcontrol/triggers_tab.h')
-rw-r--r-- | khotkeys/kcontrol/triggers_tab.h | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/khotkeys/kcontrol/triggers_tab.h b/khotkeys/kcontrol/triggers_tab.h new file mode 100644 index 000000000..57cce3e3e --- /dev/null +++ b/khotkeys/kcontrol/triggers_tab.h @@ -0,0 +1,206 @@ +/**************************************************************************** + + KHotKeys + + Copyright (C) 1999-2001 Lubos Lunak <l.lunak@kde.org> + + Distributed under the terms of the GNU General Public License version 2. + +****************************************************************************/ + +#ifndef _TRIGGERS_TAB_H_ +#define _TRIGGERS_TAB_H_ + +#include <kdialogbase.h> + +#include <khlistview.h> + +#include <triggers.h> +#include <triggers_tab_ui.h> +#include <window_trigger_widget.h> + +class KKeyButton; +class KShortcut; + +namespace KHotKeys +{ + +class Windowdef_list; +class Action_data; +class Trigger_list_item; +class KHotKeysShortcutList; + +// A listbox here would do too, but unlike QListView, QListBox now even cannot be subclassed +// to behave sanely WRT selecting and the current item +class Triggers_tab + : public Triggers_tab_ui + { + Q_OBJECT + public: + Triggers_tab( QWidget* parent_P = NULL, const char* name_P = NULL ); + virtual ~Triggers_tab(); + void set_data( const Trigger_list* data_P ); + Trigger_list* get_data( Action_data* data_P ) const; + public slots: + void clear_data(); + protected: + Trigger_list_item* create_listview_item( Trigger* trigger_P, QListView* parent_P, + QListViewItem* after_P, bool copy_P ); + void edit_listview_item( Trigger_list_item* item_P ); + Trigger_list_item* selected_item; + enum type_t { TYPE_SHORTCUT_TRIGGER, TYPE_GESTURE_TRIGGER, TYPE_WINDOW_TRIGGER, TYPE_VOICE_TRIGGER }; + protected slots: + void new_selected( int type_P ); + virtual void copy_pressed(); + virtual void delete_pressed(); + virtual void modify_pressed(); + virtual void current_changed( QListViewItem* item_P ); + }; + +class Trigger_list_item + : public QListViewItem + { + public: + Trigger_list_item( QListView* parent_P, Trigger* trigger_P ); + Trigger_list_item( QListView* parent_P, QListViewItem* after_P, Trigger* trigger_P ); + virtual ~Trigger_list_item(); + virtual QString text( int column_P ) const; + Trigger* trigger() const; + void set_trigger( Trigger* trigger_P ); + protected: + Trigger* _trigger; // owns + }; + +class Trigger_dialog + { + public: + virtual Trigger* edit_trigger() = 0; + virtual ~Trigger_dialog(); + }; + +// TODO no need for such extra class? +class Shortcut_trigger_widget + : public QWidget + { + Q_OBJECT + public: + Shortcut_trigger_widget( QWidget* parent_P = NULL, const char* name_P = NULL ); + void set_data( const Shortcut_trigger* trigger_P ); + Shortcut_trigger* get_data( Action_data* data_P ) const; + public slots: + void clear_data(); + private slots: + void capturedShortcut( const KShortcut& ); + private: + KKeyButton* bt; + }; + +typedef Shortcut_trigger_widget Shortcut_trigger_tab; + +class Shortcut_trigger_dialog + : public KDialogBase, public Trigger_dialog + { + Q_OBJECT + public: + Shortcut_trigger_dialog( Shortcut_trigger* trigger_P ); + virtual Trigger* edit_trigger(); + protected: + virtual void accept(); + Shortcut_trigger_widget* widget; + Shortcut_trigger* trigger; + }; + +class Window_trigger_dialog + : public KDialogBase, public Trigger_dialog + { + Q_OBJECT + public: + Window_trigger_dialog( Window_trigger* trigger_P ); + virtual Trigger* edit_trigger(); + protected: + virtual void accept(); + Window_trigger_widget* widget; + Window_trigger* trigger; + }; + +class GestureRecordPage; + +class Gesture_trigger_dialog + : public KDialogBase, public Trigger_dialog + { + Q_OBJECT + public: + Gesture_trigger_dialog( Gesture_trigger* trigger_P ); + virtual Trigger* edit_trigger(); + private: + // CHECKME accept() ? + Gesture_trigger* _trigger; + GestureRecordPage *_page; + }; + + +class VoiceRecordPage; + +class Voice_trigger_dialog + : public KDialogBase, public Trigger_dialog +{ + Q_OBJECT + public: + Voice_trigger_dialog( Voice_trigger* trigger_P ); + virtual Trigger* edit_trigger(); + private: + // CHECKME accept() ? + Voice_trigger* _trigger; + VoiceRecordPage *_page; +}; + + + +//*************************************************************************** +// Inline +//*************************************************************************** + +// Trigger_list_item + +inline +Trigger_list_item::Trigger_list_item( QListView* parent_P, Trigger* trigger_P ) + : QListViewItem( parent_P ), _trigger( trigger_P ) + { + } + +inline +Trigger_list_item::Trigger_list_item( QListView* parent_P, QListViewItem* after_P, + Trigger* trigger_P ) + : QListViewItem( parent_P, after_P ), _trigger( trigger_P ) + { + } + +inline +Trigger_list_item::~Trigger_list_item() + { // CHECKME if the listview will ever be used hiearchically, + delete _trigger; // this will be wrong, the triggers tree will have to be kept + } // and deleted separately + +inline +Trigger* Trigger_list_item::trigger() const + { + return _trigger; + } + +inline +void Trigger_list_item::set_trigger( Trigger* trigger_P ) + { + delete _trigger; + _trigger = trigger_P; + } + +// Trigger_dialog + +inline +Trigger_dialog::~Trigger_dialog() + { + } + +} // namespace KHotKeys + +#endif |