]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/accel.cpp
Improve drawing of the tree item buttons in the generic renderer.
[wxWidgets.git] / src / generic / accel.cpp
index ff0483376b0ad01b2af60abc5b8fc45961277b7a..e540ec9c0356084dacc3a29b07d05247fd921ec3 100644 (file)
@@ -1,9 +1,8 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        generic/accel.cpp
+// Name:        src/generic/accel.cpp
 // Purpose:     generic implementation of wxAcceleratorTable class
 // Author:      Robert Roebling
 // Modified:    VZ pn 31.05.01: use typed lists, Unicode cleanup, Add/Remove
-// Id:          $Id$
 // Copyright:   (c) 1998 Robert Roebling
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
-    #pragma implementation "accel.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -30,8 +25,8 @@
 #if wxUSE_ACCEL
 
 #ifndef WX_PRECOMP
-    #include "wx/event.h"
     #include "wx/list.h"
+    #include "wx/event.h"
 #endif // WX_PRECOMP
 
 #include "wx/accel.h"
@@ -44,7 +39,7 @@
 
 WX_DECLARE_LIST(wxAcceleratorEntry, wxAccelList);
 #include "wx/listimpl.cpp"
-WX_DEFINE_LIST(wxAccelList);
+WX_DEFINE_LIST(wxAccelList)
 
 // ----------------------------------------------------------------------------
 // wxAccelRefData: the data used by wxAcceleratorTable
@@ -55,16 +50,19 @@ class wxAccelRefData : public wxObjectRefData
 public:
     wxAccelRefData()
     {
-        m_accels.DeleteContents(TRUE);
     }
 
     wxAccelRefData(const wxAccelRefData& data)
         : wxObjectRefData()
     {
-        m_accels.DeleteContents(TRUE);
         m_accels = data.m_accels;
     }
 
+    virtual ~wxAccelRefData()
+    {
+        WX_CLEAR_LIST(wxAccelList, m_accels);
+    }
+
     wxAccelList m_accels;
 };
 
@@ -86,7 +84,7 @@ wxAcceleratorTable::wxAcceleratorTable()
 {
 }
 
-wxAcceleratorTable::wxAcceleratorTable(int n, wxAcceleratorEntry entries[])
+wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[])
 {
     m_refData = new wxAccelRefData;
 
@@ -95,7 +93,7 @@ wxAcceleratorTable::wxAcceleratorTable(int n, wxAcceleratorEntry entries[])
         const wxAcceleratorEntry& entry = entries[i];
 
         int keycode = entry.GetKeyCode();
-        if ( wxIslower(keycode) )
+        if ( wxIsascii(keycode) )
             keycode = wxToupper(keycode);
 
         M_ACCELDATA->m_accels.Append(new wxAcceleratorEntry(entry.GetFlags(),
@@ -108,7 +106,7 @@ wxAcceleratorTable::~wxAcceleratorTable()
 {
 }
 
-bool wxAcceleratorTable::Ok() const
+bool wxAcceleratorTable::IsOk() const
 {
     return m_refData != NULL;
 }
@@ -133,14 +131,19 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry)
 {
     AllocExclusive();
 
-    wxAccelList::Node *node = M_ACCELDATA->m_accels.GetFirst();
+    wxAccelList::compatibility_iterator node = M_ACCELDATA->m_accels.GetFirst();
     while ( node )
     {
         const wxAcceleratorEntry *entryCur = node->GetData();
 
-        if ( *entryCur == entry )
+        // given entry contains only the information of the accelerator key
+        // because it was set that way during creation so do not use the
+        // comparison operator which also checks the command field
+        if ((entryCur->GetKeyCode() == entry.GetKeyCode()) &&
+            (entryCur->GetFlags() == entry.GetFlags()))
         {
-            M_ACCELDATA->m_accels.DeleteNode(node);
+            delete node->GetData();
+            M_ACCELDATA->m_accels.Erase(node);
 
             return;
         }
@@ -148,7 +151,7 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry)
         node = node->GetNext();
     }
 
-    wxFAIL_MSG(_T("deleting inexistent accel from wxAcceleratorTable"));
+    wxFAIL_MSG(wxT("deleting inexistent accel from wxAcceleratorTable"));
 }
 
 // ----------------------------------------------------------------------------
@@ -158,13 +161,13 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry)
 const wxAcceleratorEntry *
 wxAcceleratorTable::GetEntry(const wxKeyEvent& event) const
 {
-    if ( !Ok() )
+    if ( !IsOk() )
     {
         // not an error, the accel table is just empty
         return NULL;
     }
 
-    wxAccelList::Node *node = M_ACCELDATA->m_accels.GetFirst();
+    wxAccelList::compatibility_iterator node = M_ACCELDATA->m_accels.GetFirst();
     while ( node )
     {
         const wxAcceleratorEntry *entry = node->GetData();
@@ -177,8 +180,7 @@ wxAcceleratorTable::GetEntry(const wxKeyEvent& event) const
             // now check flags
             if ( (((flags & wxACCEL_CTRL) != 0) == event.ControlDown()) &&
                  (((flags & wxACCEL_SHIFT) != 0) == event.ShiftDown()) &&
-                 (((flags & wxACCEL_ALT) != 0) ==
-                    (event.AltDown() || event.MetaDown())) )
+                 (((flags & wxACCEL_ALT) != 0) == event.AltDown()) )
             {
                 return entry;
             }
@@ -215,4 +217,3 @@ wxObjectRefData *wxAcceleratorTable::CloneRefData(const wxObjectRefData *data) c
 }
 
 #endif // wxUSE_ACCEL
-