2 Copyright (C) 2001-2006, William Joseph.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #if !defined(INCLUDED_GTKUTIL_ACCELERATOR_H)
23 #define INCLUDED_GTKUTIL_ACCELERATOR_H
25 #include <gdk/gdktypes.h>
26 #include <gdk/gdkkeysyms.h>
27 #include <gdk/gdkkeys.h>
29 #include "generic/callback.h"
32 #define ALLOWED_MODIFIERS (~(GDK_MOD2_MASK | GDK_LOCK_MASK | GDK_MOD3_MASK | GDK_MOD4_MASK | GDK_MOD5_MASK))
36 Accelerator(guint _key)
37 : key(gdk_keyval_to_upper(_key)), modifiers((GdkModifierType)0)
40 Accelerator(guint _key, GdkModifierType _modifiers)
41 : key(gdk_keyval_to_upper(_key)), modifiers((GdkModifierType) (_modifiers & ALLOWED_MODIFIERS))
44 Accelerator(const Accelerator &src)
45 : key(gdk_keyval_to_upper(src.key)), modifiers((GdkModifierType) (src.modifiers & ALLOWED_MODIFIERS))
48 bool operator<(const Accelerator& other) const
52 int mod1 = modifiers & ALLOWED_MODIFIERS;
53 int mod2 = other.modifiers & ALLOWED_MODIFIERS;
54 return k1 < k2 || (!(k2 < k1) && mod1 < mod2);
56 bool operator==(const Accelerator& other) const
60 int mod1 = modifiers & ALLOWED_MODIFIERS;
61 int mod2 = other.modifiers & ALLOWED_MODIFIERS;
62 return k1 == k2 && mod1 == mod2;
64 Accelerator &operator=(const Accelerator& other)
67 modifiers = (GdkModifierType) (other.modifiers & ALLOWED_MODIFIERS);
71 GdkModifierType modifiers;
74 inline Accelerator accelerator_null()
76 return Accelerator(0, (GdkModifierType)0);
79 const char* global_keys_find(unsigned int key);
80 unsigned int global_keys_find(const char* name);
82 class TextOutputStream;
83 void accelerator_write(const Accelerator& accelerator, TextOutputStream& ostream);
85 template<typename TextOutputStreamType>
86 TextOutputStreamType& ostream_write(TextOutputStreamType& ostream, const Accelerator& accelerator)
88 accelerator_write(accelerator, ostream);
92 void keydown_accelerators_add(Accelerator accelerator, const Callback& callback);
93 void keydown_accelerators_remove(Accelerator accelerator);
94 void keyup_accelerators_add(Accelerator accelerator, const Callback& callback);
95 void keyup_accelerators_remove(Accelerator accelerator);
97 typedef struct _GtkWidget GtkWidget;
98 typedef struct _GtkWindow GtkWindow;
99 void global_accel_connect_window(GtkWindow* window);
100 void global_accel_disconnect_window(GtkWindow* window);
102 void GlobalPressedKeys_releaseAll();
104 typedef struct _GtkAccelGroup GtkAccelGroup;
105 extern GtkAccelGroup* global_accel;
106 void global_accel_init();
107 void global_accel_destroy();
109 GClosure* global_accel_group_find(Accelerator accelerator);
111 void global_accel_group_connect(const Accelerator& accelerator, const Callback& callback);
112 void global_accel_group_disconnect(const Accelerator& accelerator, const Callback& callback);
119 const Accelerator& m_accelerator;
120 Command(const Callback& callback, const Accelerator& accelerator) : m_callback(callback), m_accelerator(accelerator)
129 BoolExportCallback m_exportCallback;
130 Toggle(const Callback& callback, const Accelerator& accelerator, const BoolExportCallback& exportCallback) : m_command(callback, accelerator), m_exportCallback(exportCallback)
138 const Accelerator& m_accelerator;
141 KeyEvent(const Accelerator& accelerator, const Callback& keyDown, const Callback& keyUp) : m_accelerator(accelerator), m_keyDown(keyDown), m_keyUp(keyUp)
148 struct PressedButtons;
149 typedef struct _GtkWidget GtkWidget;
150 void PressedButtons_connect(PressedButtons& pressedButtons, GtkWidget* widget);
152 extern PressedButtons g_pressedButtons;