]> git.saurik.com Git - wxWidgets.git/commitdiff
wxMotif STL-ification.
authorMattia Barbon <mbarbon@cpan.org>
Wed, 13 Aug 2003 21:28:56 +0000 (21:28 +0000)
committerMattia Barbon <mbarbon@cpan.org>
Wed, 13 Aug 2003 21:28:56 +0000 (21:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22822 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/tabg.h
src/generic/tabg.cpp
src/motif/timer.cpp

index effb98ce4c0283eab64746ae2ebc714761c0bce7..c26b524d0883226f6e10e6ddeec74d7ce2d7ed20 100644 (file)
 
 #define WXTAB_VERSION   1.1
 
-#include "wx/hash.h"
+#include "wx/hashmap.h"
 #include "wx/string.h"
 #include "wx/dialog.h"
 #include "wx/panel.h"
+#include "wx/list.h"
 
 class WXDLLEXPORT wxTabView;
 
@@ -86,13 +87,14 @@ protected:
 
 class WXDLLEXPORT wxTabLayer: public wxList
 {
-  DECLARE_DYNAMIC_CLASS(wxTabLayer)
 };
 
 /*
  * The wxTabView controls and draws the tabbed object
  */
 
+WX_DECLARE_LIST(wxTabLayer, wxTabLayerList);
+
 #define wxTAB_STYLE_DRAW_BOX         1   // Draws 3D boxes round tab layers
 #define wxTAB_STYLE_COLOUR_INTERIOR  2   // Colours interior of tabs, otherwise draws outline
 
@@ -104,7 +106,7 @@ public:
   ~wxTabView();
 
   inline int GetNumberOfLayers() const { return m_layers.GetCount(); }
-  inline wxList& GetLayers() { return m_layers; }
+  inline wxList& GetLayers() { return (wxList&)m_layers; }
 
   inline void SetWindow(wxWindow* wnd) { m_window = wnd; }
   inline wxWindow* GetWindow(void) const { return m_window; }
@@ -197,7 +199,7 @@ public:
   inline wxFont *GetSelectedTabFont() const { return (wxFont*) & m_tabSelectedFont; }
   inline void SetSelectedTabFont(const wxFont& f) { m_tabSelectedFont = f; }
   // Find the node and the column at which this control is positioned.
-  wxNode *FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
+  wxList::compatibility_iterator FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
   
   // Do the necessary to change to this tab
   virtual bool ChangeTab(wxTabControl *control);
@@ -210,7 +212,7 @@ public:
 
 protected:
    // List of layers, from front to back.
-   wxList           m_layers;
+   wxTabLayerList   m_layers;
    
    // Selected tab
    int              m_tabSelection;
@@ -321,6 +323,9 @@ protected:
 DECLARE_EVENT_TABLE()
 };
 
+WX_DECLARE_HASH_MAP(int, wxWindow*, wxIntegerHash, wxIntegerEqual,
+                    wxIntToWindowHashMap);
+
 class WXDLLEXPORT wxPanelTabView: public wxTabView
 {
 DECLARE_DYNAMIC_CLASS(wxPanelTabView)
@@ -338,14 +343,14 @@ public:
    inline wxWindow *GetCurrentWindow() const { return m_currentWindow; }
    
    void ShowWindowForTab(int id);
-   inline wxList& GetWindows() const { return (wxList&) m_tabWindows; }
+   // inline wxList& GetWindows() const { return (wxList&) m_tabWindows; }
 
 protected:
    // List of panels, one for each tab. Indexed
    // by tab ID.
-   wxList           m_tabWindows;
-   wxWindow*        m_currentWindow;
-   wxPanel*         m_panel;
+   wxIntToWindowHashMap m_tabWindows;
+   wxWindow*            m_currentWindow;
+   wxPanel*             m_panel;
 };
 
 #endif
index 89cd65ab643d7e660a75c3315b6e96ff729a5142..6c6ffa012047a0e1cdabf551ef3fff4170a279f1 100644 (file)
@@ -34,6 +34,9 @@
 #include <math.h>
 
 #include "wx/tab.h"
+#include "wx/listimpl.cpp"
+
+WX_DEFINE_LIST(wxTabLayerList);
 
 // not defined: use old, square tab implementation (fills in tabs)
 // defined: use new, rounded tab implementation (doesn't colour in tabs)
@@ -41,7 +44,7 @@
 
 IMPLEMENT_DYNAMIC_CLASS(wxTabControl, wxObject)
 
-IMPLEMENT_DYNAMIC_CLASS(wxTabLayer, wxList)
+// IMPLEMENT_DYNAMIC_CLASS(wxTabLayer, wxList)
 
 wxTabControl::wxTabControl(wxTabView *v)
 {
@@ -547,7 +550,7 @@ wxTabView::~wxTabView()
 wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *existingTab)
 {
   // First, find which layer we should be adding to.
-  wxNode *node = m_layers.GetLast();
+  wxTabLayerList::compatibility_iterator node = m_layers.GetLast();
   if (!node)
   {
     wxTabLayer *newLayer = new wxTabLayer;
@@ -556,7 +559,7 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
   // Check if adding another tab control would go off the
   // right-hand edge of the layer.
   wxTabLayer *tabLayer = (wxTabLayer *)node->GetData();
-  wxNode *lastTabNode = tabLayer->GetLast();
+  wxList::compatibility_iterator lastTabNode = tabLayer->GetLast();
   if (lastTabNode)
   {
     wxTabControl *lastTab = (wxTabControl *)lastTabNode->GetData();
@@ -571,7 +574,7 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
     {
       tabLayer = new wxTabLayer;
       m_layers.Append(tabLayer);
-      lastTabNode = (wxNode *) NULL;
+      lastTabNode = wxList::compatibility_iterator();
     }
   }
   int layer = m_layers.GetCount() - 1;
@@ -610,11 +613,11 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
 // Remove the tab without deleting the window
 bool wxTabView::RemoveTab(int id)
 {
-  wxNode *layerNode = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
   while (layerNode)
   {
     wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
-    wxNode *tabNode = layer->GetFirst();
+    wxList::compatibility_iterator tabNode = layer->GetFirst();
     while (tabNode)
     {
       wxTabControl *tab = (wxTabControl *)tabNode->GetData();
@@ -623,7 +626,7 @@ bool wxTabView::RemoveTab(int id)
         if (id == m_tabSelection)
           m_tabSelection = -1;
         delete tab;
-        delete tabNode;
+        layer->Erase(tabNode);
         m_noTabs --;
 
         // The layout has changed
@@ -661,11 +664,11 @@ int wxTabView::GetTotalTabHeight()
 {
   int minY = 0;
 
-  wxNode *layerNode = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
   while (layerNode)
   {
     wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
-    wxNode *tabNode = layer->GetFirst();
+    wxList::compatibility_iterator tabNode = layer->GetFirst();
     while (tabNode)
     {
       wxTabControl *tab = (wxTabControl *)tabNode->GetData();
@@ -683,23 +686,23 @@ int wxTabView::GetTotalTabHeight()
 
 void wxTabView::ClearTabs(bool deleteTabs)
 {
-  wxNode *layerNode = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
   while (layerNode)
   {
     wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
-    wxNode *tabNode = layer->GetFirst();
+    wxList::compatibility_iterator tabNode = layer->GetFirst();
     while (tabNode)
     {
       wxTabControl *tab = (wxTabControl *)tabNode->GetData();
       if (deleteTabs)
         delete tab;
-      wxNode *next = tabNode->GetNext();
-      delete tabNode;
+      wxList::compatibility_iterator next = tabNode->GetNext();
+      layer->Erase(tabNode);
       tabNode = next;
     }
-    wxNode *nextLayerNode = layerNode->GetNext();
+    wxTabLayerList::compatibility_iterator nextLayerNode = layerNode->GetNext();
     delete layer;
-    delete layerNode;
+    m_layers.Erase(layerNode);
     layerNode = nextLayerNode;
   }
   m_noTabs = 0;
@@ -713,22 +716,22 @@ void wxTabView::LayoutTabs(void)
   // Make a list of the tab controls, deleting the wxTabLayers.
   wxList controls;
 
-  wxNode *layerNode = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
   while (layerNode)
   {
     wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
-    wxNode *tabNode = layer->GetFirst();
+    wxList::compatibility_iterator tabNode = layer->GetFirst();
     while (tabNode)
     {
       wxTabControl *tab = (wxTabControl *)tabNode->GetData();
       controls.Append(tab);
-      wxNode *next = tabNode->GetNext();
-      delete tabNode;
+      wxList::compatibility_iterator next = tabNode->GetNext();
+      layer->Erase(tabNode);
       tabNode = next;
     }
-    wxNode *nextLayerNode = layerNode->GetNext();
+    wxTabLayerList::compatibility_iterator nextLayerNode = layerNode->GetNext();
     delete layer;
-    delete layerNode;
+    m_layers.Erase(layerNode);
     layerNode = nextLayerNode;
   }
 
@@ -737,7 +740,7 @@ void wxTabView::LayoutTabs(void)
   wxTabLayer *currentLayer = new wxTabLayer;
   m_layers.Append(currentLayer);
 
-  wxNode *node = controls.GetFirst();
+  wxList::compatibility_iterator node = controls.GetFirst();
   while (node)
   {
     wxTabControl *tabControl = (wxTabControl *)node->GetData();
@@ -811,15 +814,15 @@ void wxTabView::Draw(wxDC& dc)
     }
 
     // Draw layers in reverse order
-    wxNode *node = m_layers.GetLast();
+    wxTabLayerList::compatibility_iterator node = m_layers.GetLast();
     while (node)
     {
         wxTabLayer *layer = (wxTabLayer *)node->GetData();
-        wxNode *node2 = layer->GetFirst();
+        wxList::compatibility_iterator node2 = layer->GetFirst();
         while (node2)
         {
             wxTabControl *control = (wxTabControl *)node2->GetData();
-            control->OnDraw(dc, (node2->GetNext() == NULL));
+            control->OnDraw(dc, (!node2->GetNext()));
             node2 = node2->GetNext();
         }
 
@@ -885,19 +888,19 @@ bool wxTabView::OnEvent(wxMouseEvent& event)
 
   wxTabControl *hitControl = (wxTabControl *) NULL;
 
-  wxNode *node = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator node = m_layers.GetFirst();
   while (node)
   {
     wxTabLayer *layer = (wxTabLayer *)node->GetData();
-    wxNode *node2 = layer->GetFirst();
+    wxList::compatibility_iterator node2 = layer->GetFirst();
     while (node2)
     {
       wxTabControl *control = (wxTabControl *)node2->GetData();
       if (control->HitTest((int)x, (int)y))
       {
         hitControl = control;
-        node = (wxNode *) NULL;
-        node2 = (wxNode *) NULL;
+        node = wxTabLayerList::compatibility_iterator();
+        node2 = wxList::compatibility_iterator();
       }
       else
         node2 = node2->GetNext();
@@ -967,10 +970,10 @@ bool wxTabView::MoveSelectionTab(wxTabControl *control)
   {
     // Do a swap
     int col = 0;
-    wxNode *thisNode = FindTabNodeAndColumn(control, &col);
+    wxList::compatibility_iterator thisNode = FindTabNodeAndColumn(control, &col);
     if (!thisNode)
       return FALSE;
-    wxNode *otherNode = firstLayer->Item(col);
+    wxList::compatibility_iterator otherNode = firstLayer->Item(col);
     if (!otherNode)
       return FALSE;
 
@@ -1062,11 +1065,11 @@ void wxTabView::SetTabSelection(int sel, bool activateTool)
 // Find tab control for id
 wxTabControl *wxTabView::FindTabControlForId(int id) const
 {
-  wxNode *node1 = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator node1 = m_layers.GetFirst();
   while (node1)
   {
     wxTabLayer *layer = (wxTabLayer *)node1->GetData();
-    wxNode *node2 = layer->GetFirst();
+    wxList::compatibility_iterator node2 = layer->GetFirst();
     while (node2)
     {
       wxTabControl *control = (wxTabControl *)node2->GetData();
@@ -1082,25 +1085,25 @@ wxTabControl *wxTabView::FindTabControlForId(int id) const
 // Find tab control for layer, position (starting from zero)
 wxTabControl *wxTabView::FindTabControlForPosition(int layer, int position) const
 {
-  wxNode *node1 = m_layers.Item(layer);
+  wxTabLayerList::compatibility_iterator node1 = m_layers.Item(layer);
   if (!node1)
     return (wxTabControl *) NULL;
   wxTabLayer *tabLayer = (wxTabLayer *)node1->GetData();
-  wxNode *node2 = tabLayer->Item(position);
+  wxList::compatibility_iterator node2 = tabLayer->Item(position);
   if (!node2)
     return (wxTabControl *) NULL;
   return (wxTabControl *)node2->GetData();
 }
 
 // Find the node and the column at which this control is positioned.
-wxNode *wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
+wxList::compatibility_iterator wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
 {
-  wxNode *node1 = m_layers.GetFirst();
+  wxTabLayerList::compatibility_iterator node1 = m_layers.GetFirst();
   while (node1)
   {
     wxTabLayer *layer = (wxTabLayer *)node1->GetData();
     int c = 0;
-    wxNode *node2 = layer->GetFirst();
+    wxList::compatibility_iterator node2 = layer->GetFirst();
     while (node2)
     {
       wxTabControl *cnt = (wxTabControl *)node2->GetData();
@@ -1114,7 +1117,7 @@ wxNode *wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
     }
     node1 = node1->GetNext();
   }
-  return (wxNode *) NULL;
+  return wxList::compatibility_iterator();
 }
 
 int wxTabView::CalculateTabWidth(int noTabs, bool adjustView)
@@ -1214,7 +1217,8 @@ void wxTabbedPanel::OnPaint(wxPaintEvent& WXUNUSED(event) )
 
 IMPLEMENT_CLASS(wxPanelTabView, wxTabView)
 
-wxPanelTabView::wxPanelTabView(wxPanel *pan, long style): wxTabView(style), m_tabWindows(wxKEY_INTEGER)
+wxPanelTabView::wxPanelTabView(wxPanel *pan, long style)
+    : wxTabView(style)
 {
   m_panel = pan;
   m_currentWindow = (wxWindow *) NULL;
@@ -1252,24 +1256,22 @@ void wxPanelTabView::OnTabActivate(int activateId, int deactivateId)
 
 void wxPanelTabView::AddTabWindow(int id, wxWindow *window)
 {
-  m_tabWindows.Append((long)id, window);
+  wxASSERT(m_tabWindows.find(id) == m_tabWindows.end());
+  m_tabWindows[id] = window;
   window->Show(FALSE);
 }
 
 wxWindow *wxPanelTabView::GetTabWindow(int id) const
 {
-  wxNode *node = m_tabWindows.Find((long)id);
-  if (!node)
-    return (wxWindow *) NULL;
-  return (wxWindow *)node->GetData();
+  wxIntToWindowHashMap::const_iterator it = m_tabWindows.find(id);
+  return it == m_tabWindows.end() ? NULL : it->second;
 }
 
 void wxPanelTabView::ClearWindows(bool deleteWindows)
 {
   if (deleteWindows)
-    m_tabWindows.DeleteContents(TRUE);
-  m_tabWindows.Clear();
-  m_tabWindows.DeleteContents(FALSE);
+    WX_CLEAR_HASH_MAP(wxIntToWindowHashMap, m_tabWindows);
+  m_tabWindows.clear();
 }
 
 void wxPanelTabView::ShowWindowForTab(int id)
index fdc59712e6a9e37b92c2d24e388b0780d89595c0..f4ef797df6d32f63d25d5aa59ff0f35092cc47bf 100644 (file)
@@ -15,7 +15,7 @@
 
 #include "wx/timer.h"
 #include "wx/app.h"
-#include "wx/list.h"
+#include "wx/hashmap.h"
 
 #ifdef __VMS__
 #pragma message disable nosimpint
 
 #include "wx/motif/private.h"
 
-IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
+IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject);
 
-static wxList wxTimerList(wxKEY_INTEGER);
+WX_DECLARE_VOIDPTR_HASH_MAP(wxTimer*, wxTimerHashMap);
+
+static wxTimerHashMap s_timers;
 
 void wxTimerCallback (wxTimer * timer)
 {
   // Check to see if it's still on
-  if (!wxTimerList.Find((long)timer))
+  if (s_timers.find(timer) == s_timers.end())
     return;
 
   if (timer->m_id == 0)
@@ -59,8 +61,8 @@ void wxTimer::Init()
 
 wxTimer::~wxTimer()
 {
-    wxTimer::Stop();
-    wxTimerList.DeleteObject(this);
+    Stop();
+    s_timers.erase(this);
 }
 
 bool wxTimer::Start(int milliseconds, bool mode)
@@ -69,8 +71,8 @@ bool wxTimer::Start(int milliseconds, bool mode)
 
     (void)wxTimerBase::Start(milliseconds, mode);
 
-    if (!wxTimerList.Find((long)this))
-        wxTimerList.Append((long)this, this);
+    if (s_timers.find(this) == s_timers.end())
+        s_timers[this] = this;
 
     m_id = XtAppAddTimeOut((XtAppContext) wxTheApp->GetAppContext(),
                             m_milli,