X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fkeyboard.h;h=e34c424329f3e0761ffd5325be2d7421b8d86b28;hb=ccf58b8de23619db9983a45f696fd97e13a15cce;hp=fb22f2eca9d9bef1868ee893ba876f483948d489;hpb=f7f9d6fdc40248b190ec9c6e1a886261d55777ae;p=ardour.git diff --git a/gtk2_ardour/keyboard.h b/gtk2_ardour/keyboard.h index fb22f2eca9..e34c424329 100644 --- a/gtk2_ardour/keyboard.h +++ b/gtk2_ardour/keyboard.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001 Paul Davis + Copyright (C) 2001 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,20 +20,19 @@ #ifndef __ardour_keyboard_h__ #define __ardour_keyboard_h__ +#include #include #include #include #include +#include -#include -#include +#include "ardour/types.h" +#include "pbd/stateful.h" #include "selection.h" -using std::vector; -using std::string; - class Keyboard : public sigc::trackable, PBD::Stateful { public: @@ -41,15 +40,36 @@ class Keyboard : public sigc::trackable, PBD::Stateful ~Keyboard (); XMLNode& get_state (void); - int set_state (const XMLNode&); + int set_state (const XMLNode&, int version); - typedef vector State; + typedef std::vector State; typedef uint32_t ModifierMask; - static uint32_t Control; - static uint32_t Shift; - static uint32_t Alt; - static uint32_t Meta; + static uint32_t PrimaryModifier; + static uint32_t SecondaryModifier; + static uint32_t TertiaryModifier; + static uint32_t Level4Modifier; + static uint32_t CopyModifier; + static uint32_t RangeSelectModifier; + + static void set_primary_modifier (uint32_t newval) { + set_modifier (newval, PrimaryModifier); + } + static void set_secondary_modifier (uint32_t newval) { + set_modifier (newval, SecondaryModifier); + } + static void set_tertiary_modifier (uint32_t newval) { + set_modifier (newval, TertiaryModifier); + } + static void set_level4_modifier (uint32_t newval) { + set_modifier (newval, Level4Modifier); + } + static void set_copy_modifier (uint32_t newval) { + set_modifier (newval, CopyModifier); + } + static void set_range_select_modifier (uint32_t newval) { + set_modifier (newval, RangeSelectModifier); + } bool key_is_down (uint32_t keyval); @@ -69,9 +89,12 @@ class Keyboard : public sigc::trackable, PBD::Stateful static bool no_modifiers_active (guint state); - static void set_meta_modifier (guint); - static void set_snap_modifier (guint); + + /** @return Modifier mask to temporarily toggle grid setting; with this modifier + * - magnetic or normal grid should become no grid and + * - no grid should become normal grid + */ static ModifierMask snap_modifier () { return ModifierMask (snap_mod); } static guint edit_button() { return edit_but; } @@ -87,6 +110,7 @@ class Keyboard : public sigc::trackable, PBD::Stateful static bool is_edit_event (GdkEventButton*); static bool is_delete_event (GdkEventButton*); static bool is_context_menu_event (GdkEventButton*); + static bool is_button2_event (GdkEventButton*); static Keyboard& the_keyboard() { return *_the_keyboard; } @@ -94,6 +118,24 @@ class Keyboard : public sigc::trackable, PBD::Stateful static void magic_widget_grab_focus (); static void magic_widget_drop_focus (); + static void setup_keybindings (); + static void keybindings_changed (); + static void save_keybindings (); + static bool load_keybindings (std::string path); + static void set_can_save_keybindings (bool yn); + static std::string current_binding_name () { return _current_binding_name; } + static std::map binding_files; + + struct AccelKeyLess { + bool operator() (const Gtk::AccelKey a, const Gtk::AccelKey b) const { + if (a.get_key() != b.get_key()) { + return a.get_key() < b.get_key(); + } else { + return a.get_mod() < b.get_mod(); + } + } + }; + private: static Keyboard* _the_keyboard; @@ -105,11 +147,22 @@ class Keyboard : public sigc::trackable, PBD::Stateful static guint delete_but; static guint delete_mod; static guint snap_mod; + static guint button2_modifiers; static Gtk::Window* current_window; + static std::string user_keybindings_path; + static bool can_save_keybindings; + static bool bindings_changed_after_save_became_legal; + static std::string _current_binding_name; + + typedef std::pair two_strings; + + static std::map release_keys; static gint _snooper (GtkWidget*, GdkEventKey*, gpointer); gint snooper (GtkWidget*, GdkEventKey*); + static void set_modifier (uint32_t newval, uint32_t& variable); + static bool _some_magic_widget_has_focus; };