]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/accel.h
added template wxScopedArray<> too
[wxWidgets.git] / include / wx / accel.h
index 40676ee7f0803f0049d2665788c123e2c567df04..0d3593cc282a2463db621a254970849a4359cad5 100644 (file)
@@ -5,8 +5,8 @@
 // Modified by:
 // Created:     31.05.01 (extracted from other files)
 // RCS-ID:      $Id$
-// Copyright:   (c) wxWindows team
-// Licence:     wxWindows license
+// Copyright:   (c) wxWidgets team
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_ACCEL_H_BASE_
 
 #include "wx/object.h"
 
-class WXDLLEXPORT wxAcceleratorTable;
-class WXDLLEXPORT wxMenuItem;
-class WXDLLEXPORT wxKeyEvent;
+class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable;
+class WXDLLIMPEXP_FWD_CORE wxMenuItem;
+class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
 
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
 
 // wxAcceleratorEntry flags
-enum
+enum wxAcceleratorEntryFlags
 {
     wxACCEL_NORMAL  = 0x0000,   // no modifiers
     wxACCEL_ALT     = 0x0001,   // hold Alt key down
     wxACCEL_CTRL    = 0x0002,   // hold Ctrl key down
-    wxACCEL_SHIFT   = 0x0004    // hold Shift key down
+    wxACCEL_SHIFT   = 0x0004,   // hold Shift key down
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+    wxACCEL_CMD      = 0x0008   // Command key on OS X
+#else
+    wxACCEL_CMD      = wxACCEL_CTRL
+#endif
 };
 
 // ----------------------------------------------------------------------------
 // an entry in wxAcceleratorTable corresponds to one accelerator
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxAcceleratorEntry
+class WXDLLIMPEXP_CORE wxAcceleratorEntry
 {
 public:
     wxAcceleratorEntry(int flags = 0, int keyCode = 0, int cmd = 0,
                        wxMenuItem *item = NULL)
+        : m_flags(flags)
+        , m_keyCode(keyCode)
+        , m_command(cmd)
+        , m_item(item)
+        { }
+
+    wxAcceleratorEntry(const wxAcceleratorEntry& entry)
+        : m_flags(entry.m_flags)
+        , m_keyCode(entry.m_keyCode)
+        , m_command(entry.m_command)
+        , m_item(entry.m_item)
+        { }
+
+    // create accelerator corresponding to the specified string, return NULL if
+    // string couldn't be parsed or a pointer to be deleted by the caller
+    static wxAcceleratorEntry *Create(const wxString& str);
+
+    wxAcceleratorEntry& operator=(const wxAcceleratorEntry& entry)
     {
-        Set(flags, keyCode, cmd, item);
+        if (&entry != this)
+            Set(entry.m_flags, entry.m_keyCode, entry.m_command, entry.m_item);
+        return *this;
     }
 
     void Set(int flags, int keyCode, int cmd, wxMenuItem *item = NULL)
@@ -75,12 +100,36 @@ public:
     bool operator!=(const wxAcceleratorEntry& entry) const
         { return !(*this == entry); }
 
-#ifdef __WXMOTIF__
+#if defined(__WXMOTIF__)
     // Implementation use only
-    bool MatchesEvent(const wxKeyEvent& event) const ;
+    bool MatchesEvent(const wxKeyEvent& event) const;
 #endif
-    
+
+    bool IsOk() const
+    {
+        return m_flags != 0 &&
+               m_keyCode != 0;
+    }
+
+
+    // string <-> wxAcceleratorEntry conversion
+    // ----------------------------------------
+
+    // returns a wxString for the this accelerator.
+    // this function formats it using the <flags>-<keycode> format
+    // where <flags> maybe a hyphen-separed list of "shift|alt|ctrl"
+    wxString ToString() const;
+
+    // returns true if the given string correctly initialized this object
+    // (i.e. if IsOk() returns true after this call)
+    bool FromString(const wxString& str);
+
+
 private:
+    // common part of Create() and FromString()
+    static bool ParseAccel(const wxString& str, int *flags, int *keycode);
+
+
     int m_flags;    // combination of wxACCEL_XXX constants
     int m_keyCode;  // ASCII or virtual keycode
     int m_command;  // Command id to generate
@@ -89,7 +138,7 @@ private:
     wxMenuItem *m_item;
 
     // for compatibility with old code, use accessors now!
-    friend class WXDLLEXPORT wxMenu;
+    friend class WXDLLIMPEXP_FWD_CORE wxMenu;
 };
 
 // ----------------------------------------------------------------------------
@@ -103,17 +152,19 @@ private:
     #include "wx/msw/accel.h"
 #elif defined(__WXMOTIF__)
     #include "wx/motif/accel.h"
-#elif defined(__WXGTK__)
+#elif defined(__WXGTK20__)
     #include "wx/gtk/accel.h"
+#elif defined(__WXGTK__)
+    #include "wx/gtk1/accel.h"
 #elif defined(__WXMAC__)
-    #include "wx/mac/accel.h"
+    #include "wx/osx/accel.h"
+#elif defined(__WXCOCOA__)
+    #include "wx/generic/accel.h"
 #elif defined(__WXPM__)
     #include "wx/os2/accel.h"
-#elif defined(__WXSTUBS__)
-    #include "wx/stubs/accel.h"
 #endif
 
-WXDLLEXPORT_DATA(extern wxAcceleratorTable) wxNullAcceleratorTable;
+extern WXDLLIMPEXP_DATA_CORE(wxAcceleratorTable) wxNullAcceleratorTable;
 
 #endif // wxUSE_ACCEL