]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/tabg.cpp
select all text initially in the control (part of patch 649438)
[wxWidgets.git] / src / generic / tabg.cpp
index c46ff59cd3cb374d8fecd925d2bd9d9f9c891a19..d1b044d937946fc250e28bbc41521094b6eb0a6b 100644 (file)
 #pragma hdrstop
 #endif
 
+#if wxUSE_TAB_DIALOG
+
 #ifndef WX_PRECOMP
-#include "wx/wx.h"
+    #include "wx/settings.h"
+    #include "wx/intl.h"
+    #include "wx/dcclient.h"
 #endif
 
 #include <stdio.h>
@@ -149,7 +153,7 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
 
       int topY = m_view->GetViewRect().y - m_view->GetTopMargin();
 
-      int maxPositions = ((wxTabLayer *)m_view->GetLayers().Nth(0)->Data())->Number();
+      int maxPositions = ((wxTabLayer *)m_view->GetLayers().Item(0)->GetData())->GetCount();
 
       // Only down to the bottom of the tab, not to the top of the view
       if ( GetRowPosition() < (maxPositions - 1) )
@@ -333,7 +337,7 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
         // TAB is not selected - just draw TAB outline and RH edge
         // if the TAB is the last in the row
 
-        int maxPositions = ((wxTabLayer*)m_view->GetLayers().Nth(0)->Data())->Number();
+        int maxPositions = ((wxTabLayer*)m_view->GetLayers().Item(0)->GetData())->GetCount();
         wxTabControl* tabBelow = 0;
         wxTabControl* tabBelowRight = 0;
         if (GetColPosition() > 0)
@@ -526,8 +530,8 @@ wxTabView::wxTabView(long style)
   m_shadowPen = wxGREY_PEN;
   m_backgroundPen = wxLIGHT_GREY_PEN;
   m_backgroundBrush = wxLIGHT_GREY_BRUSH;
-  m_tabFont = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
-  m_tabSelectedFont = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+  m_tabFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+  m_tabSelectedFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
   m_window = (wxWindow *) NULL;
 }
 
@@ -543,7 +547,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.Last();
+  wxNode *node = m_layers.GetLast();
   if (!node)
   {
     wxTabLayer *newLayer = new wxTabLayer;
@@ -551,36 +555,36 @@ 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->Data();
-  wxNode *lastTabNode = tabLayer->Last();
+  wxTabLayer *tabLayer = (wxTabLayer *)node->GetData();
+  wxNode *lastTabNode = tabLayer->GetLast();
   if (lastTabNode)
   {
-    wxTabControl *lastTab = (wxTabControl *)lastTabNode->Data();
+    wxTabControl *lastTab = (wxTabControl *)lastTabNode->GetData();
     // Start another layer (row).
     // Tricky choice: can't just check if will be overlapping the edge, because
     // this happens anyway for 2nd and subsequent rows.
     // Should check this for 1st row, and then subsequent rows should not exceed 1st
     // in length.
-    if (((tabLayer == m_layers.First()->Data()) && ((lastTab->GetX() + 2*lastTab->GetWidth() + GetHorizontalTabSpacing())
+    if (((tabLayer == m_layers.GetFirst()->GetData()) && ((lastTab->GetX() + 2*lastTab->GetWidth() + GetHorizontalTabSpacing())
               > GetViewRect().width)) ||
-        ((tabLayer != m_layers.First()->Data()) && (tabLayer->Number() == ((wxTabLayer *)m_layers.First()->Data())->Number())))
+        ((tabLayer != m_layers.GetFirst()->GetData()) && (tabLayer->GetCount() == ((wxTabLayer *)m_layers.GetFirst()->GetData())->GetCount())))
     {
       tabLayer = new wxTabLayer;
       m_layers.Append(tabLayer);
       lastTabNode = (wxNode *) NULL;
     }
   }
-  int layer = m_layers.Number() - 1;
+  int layer = m_layers.GetCount() - 1;
 
   wxTabControl *tabControl = existingTab;
   if (!existingTab)
     tabControl = OnCreateTabControl();
-  tabControl->SetRowPosition(tabLayer->Number());
+  tabControl->SetRowPosition(tabLayer->GetCount());
   tabControl->SetColPosition(layer);
 
   wxTabControl *lastTab = (wxTabControl *) NULL;
   if (lastTabNode)
-    lastTab = (wxTabControl *)lastTabNode->Data();
+    lastTab = (wxTabControl *)lastTabNode->GetData();
 
   // Top of new tab
   int verticalOffset = (- GetTopMargin()) - ((layer+1)*GetTabHeight());
@@ -606,14 +610,14 @@ 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.First();
+  wxNode *layerNode = m_layers.GetFirst();
   while (layerNode)
   {
-    wxTabLayer *layer = (wxTabLayer *)layerNode->Data();
-    wxNode *tabNode = layer->First();
+    wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
+    wxNode *tabNode = layer->GetFirst();
     while (tabNode)
     {
-      wxTabControl *tab = (wxTabControl *)tabNode->Data();
+      wxTabControl *tab = (wxTabControl *)tabNode->GetData();
       if (tab->GetId() == id)
       {
         if (id == m_tabSelection)
@@ -626,9 +630,9 @@ bool wxTabView::RemoveTab(int id)
         LayoutTabs();
         return TRUE;
       }
-      tabNode = tabNode->Next();
+      tabNode = tabNode->GetNext();
     }
-    layerNode = layerNode->Next();
+    layerNode = layerNode->GetNext();
   }
   return FALSE;
 }
@@ -657,21 +661,21 @@ int wxTabView::GetTotalTabHeight()
 {
   int minY = 0;
 
-  wxNode *layerNode = m_layers.First();
+  wxNode *layerNode = m_layers.GetFirst();
   while (layerNode)
   {
-    wxTabLayer *layer = (wxTabLayer *)layerNode->Data();
-    wxNode *tabNode = layer->First();
+    wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
+    wxNode *tabNode = layer->GetFirst();
     while (tabNode)
     {
-      wxTabControl *tab = (wxTabControl *)tabNode->Data();
+      wxTabControl *tab = (wxTabControl *)tabNode->GetData();
 
       if (tab->GetY() < minY)
         minY = tab->GetY();
 
-      tabNode = tabNode->Next();
+      tabNode = tabNode->GetNext();
     }
-    layerNode = layerNode->Next();
+    layerNode = layerNode->GetNext();
   }
 
   return - minY;
@@ -679,26 +683,27 @@ int wxTabView::GetTotalTabHeight()
 
 void wxTabView::ClearTabs(bool deleteTabs)
 {
-  wxNode *layerNode = m_layers.First();
+  wxNode *layerNode = m_layers.GetFirst();
   while (layerNode)
   {
-    wxTabLayer *layer = (wxTabLayer *)layerNode->Data();
-    wxNode *tabNode = layer->First();
+    wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
+    wxNode *tabNode = layer->GetFirst();
     while (tabNode)
     {
-      wxTabControl *tab = (wxTabControl *)tabNode->Data();
+      wxTabControl *tab = (wxTabControl *)tabNode->GetData();
       if (deleteTabs)
         delete tab;
-      wxNode *next = tabNode->Next();
+      wxNode *next = tabNode->GetNext();
       delete tabNode;
       tabNode = next;
     }
-    wxNode *nextLayerNode = layerNode->Next();
+    wxNode *nextLayerNode = layerNode->GetNext();
     delete layer;
     delete layerNode;
     layerNode = nextLayerNode;
   }
   m_noTabs = 0;
+  m_tabSelection = -1;
 }
 
 
@@ -708,20 +713,20 @@ void wxTabView::LayoutTabs(void)
   // Make a list of the tab controls, deleting the wxTabLayers.
   wxList controls;
 
-  wxNode *layerNode = m_layers.First();
+  wxNode *layerNode = m_layers.GetFirst();
   while (layerNode)
   {
-    wxTabLayer *layer = (wxTabLayer *)layerNode->Data();
-    wxNode *tabNode = layer->First();
+    wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
+    wxNode *tabNode = layer->GetFirst();
     while (tabNode)
     {
-      wxTabControl *tab = (wxTabControl *)tabNode->Data();
+      wxTabControl *tab = (wxTabControl *)tabNode->GetData();
       controls.Append(tab);
-      wxNode *next = tabNode->Next();
+      wxNode *next = tabNode->GetNext();
       delete tabNode;
       tabNode = next;
     }
-    wxNode *nextLayerNode = layerNode->Next();
+    wxNode *nextLayerNode = layerNode->GetNext();
     delete layer;
     delete layerNode;
     layerNode = nextLayerNode;
@@ -732,10 +737,10 @@ void wxTabView::LayoutTabs(void)
   wxTabLayer *currentLayer = new wxTabLayer;
   m_layers.Append(currentLayer);
 
-  wxNode *node = controls.First();
+  wxNode *node = controls.GetFirst();
   while (node)
   {
-    wxTabControl *tabControl = (wxTabControl *)node->Data();
+    wxTabControl *tabControl = (wxTabControl *)node->GetData();
     if (lastTab)
     {
       // Start another layer (row).
@@ -743,9 +748,9 @@ void wxTabView::LayoutTabs(void)
       // this happens anyway for 2nd and subsequent rows.
       // Should check this for 1st row, and then subsequent rows should not exceed 1st
       // in length.
-      if (((currentLayer == m_layers.First()->Data()) && ((lastTab->GetX() + 2*lastTab->GetWidth() + GetHorizontalTabSpacing())
+      if (((currentLayer == m_layers.GetFirst()->GetData()) && ((lastTab->GetX() + 2*lastTab->GetWidth() + GetHorizontalTabSpacing())
                 > GetViewRect().width)) ||
-          ((currentLayer != m_layers.First()->Data()) && (currentLayer->Number() == ((wxTabLayer *)m_layers.First()->Data())->Number())))
+          ((currentLayer != m_layers.GetFirst()->GetData()) && (currentLayer->GetCount() == ((wxTabLayer *)m_layers.GetFirst()->GetData())->GetCount())))
      {
        currentLayer = new wxTabLayer;
        m_layers.Append(currentLayer);
@@ -753,9 +758,9 @@ void wxTabView::LayoutTabs(void)
      }
     }
 
-    int layer = m_layers.Number() - 1;
+    int layer = m_layers.GetCount() - 1;
 
-    tabControl->SetRowPosition(currentLayer->Number());
+    tabControl->SetRowPosition(currentLayer->GetCount());
     tabControl->SetColPosition(layer);
 
     // Top of new tab
@@ -773,7 +778,7 @@ void wxTabView::LayoutTabs(void)
     currentLayer->Append(tabControl);
     lastTab = tabControl;
 
-    node = node->Next();
+    node = node->GetNext();
   }
 
   // Move the selected tab to the bottom
@@ -806,19 +811,19 @@ void wxTabView::Draw(wxDC& dc)
     }
 
     // Draw layers in reverse order
-    wxNode *node = m_layers.Last();
+    wxNode *node = m_layers.GetLast();
     while (node)
     {
-        wxTabLayer *layer = (wxTabLayer *)node->Data();
-        wxNode *node2 = layer->First();
+        wxTabLayer *layer = (wxTabLayer *)node->GetData();
+        wxNode *node2 = layer->GetFirst();
         while (node2)
         {
-            wxTabControl *control = (wxTabControl *)node2->Data();
-            control->OnDraw(dc, (node2->Next() == NULL));
-            node2 = node2->Next();
+            wxTabControl *control = (wxTabControl *)node2->GetData();
+            control->OnDraw(dc, (node2->GetNext() == NULL));
+            node2 = node2->GetNext();
         }
 
-        node = node->Previous();
+        node = node->GetPrevious();
     }
 
 
@@ -875,19 +880,19 @@ bool wxTabView::OnEvent(wxMouseEvent& event)
   if (!event.LeftDown())
     return FALSE;
 
-  long x, y;
-  event.Position(&x, &y);
+  wxCoord x, y;
+  event.GetPosition(&x, &y);
 
   wxTabControl *hitControl = (wxTabControl *) NULL;
 
-  wxNode *node = m_layers.First();
+  wxNode *node = m_layers.GetFirst();
   while (node)
   {
-    wxTabLayer *layer = (wxTabLayer *)node->Data();
-    wxNode *node2 = layer->First();
+    wxTabLayer *layer = (wxTabLayer *)node->GetData();
+    wxNode *node2 = layer->GetFirst();
     while (node2)
     {
-      wxTabControl *control = (wxTabControl *)node2->Data();
+      wxTabControl *control = (wxTabControl *)node2->GetData();
       if (control->HitTest((int)x, (int)y))
       {
         hitControl = control;
@@ -895,11 +900,11 @@ bool wxTabView::OnEvent(wxMouseEvent& event)
         node2 = (wxNode *) NULL;
       }
       else
-        node2 = node2->Next();
+        node2 = node2->GetNext();
     }
 
     if (node)
-      node = node->Next();
+      node = node->GetNext();
   }
 
   if (!hitControl)
@@ -925,7 +930,7 @@ bool wxTabView::ChangeTab(wxTabControl *control)
   if (control == currentTab)
     return TRUE;
 
-  if (m_layers.Number() == 0)
+  if (m_layers.GetCount() == 0)
     return FALSE;
 
   if (!OnTabPreActivate(control->GetId(), oldTab))
@@ -951,10 +956,10 @@ bool wxTabView::ChangeTab(wxTabControl *control)
 // without calling app activation code
 bool wxTabView::MoveSelectionTab(wxTabControl *control)
 {
-  if (m_layers.Number() == 0)
+  if (m_layers.GetCount() == 0)
     return FALSE;
 
-  wxTabLayer *firstLayer = (wxTabLayer *)m_layers.First()->Data();
+  wxTabLayer *firstLayer = (wxTabLayer *)m_layers.GetFirst()->GetData();
 
   // Find what column this tab is at, so we can swap with the one at the bottom.
   // If we're on the bottom layer, then no need to swap.
@@ -965,7 +970,7 @@ bool wxTabView::MoveSelectionTab(wxTabControl *control)
     wxNode *thisNode = FindTabNodeAndColumn(control, &col);
     if (!thisNode)
       return FALSE;
-    wxNode *otherNode = firstLayer->Nth(col);
+    wxNode *otherNode = firstLayer->Item(col);
     if (!otherNode)
       return FALSE;
 
@@ -973,7 +978,7 @@ bool wxTabView::MoveSelectionTab(wxTabControl *control)
     if (otherNode == thisNode)
       return TRUE;
 
-    wxTabControl *otherTab = (wxTabControl *)otherNode->Data();
+    wxTabControl *otherTab = (wxTabControl *)otherNode->GetData();
 
     // We now have pointers to the tab to be changed to,
     // and the tab on the first layer. Swap tab structures and
@@ -1024,6 +1029,9 @@ void wxTabView::SetBackgroundColour(const wxColour& col)
 
 void wxTabView::SetTabSelection(int sel, bool activateTool)
 {
+  if ( sel==m_tabSelection )
+    return;
+
   int oldSel = m_tabSelection;
   wxTabControl *control = FindTabControlForId(sel);
   wxTabControl *oldControl = FindTabControlForId(m_tabSelection);
@@ -1054,19 +1062,19 @@ void wxTabView::SetTabSelection(int sel, bool activateTool)
 // Find tab control for id
 wxTabControl *wxTabView::FindTabControlForId(int id) const
 {
-  wxNode *node1 = m_layers.First();
+  wxNode *node1 = m_layers.GetFirst();
   while (node1)
   {
-    wxTabLayer *layer = (wxTabLayer *)node1->Data();
-    wxNode *node2 = layer->First();
+    wxTabLayer *layer = (wxTabLayer *)node1->GetData();
+    wxNode *node2 = layer->GetFirst();
     while (node2)
     {
-      wxTabControl *control = (wxTabControl *)node2->Data();
+      wxTabControl *control = (wxTabControl *)node2->GetData();
       if (control->GetId() == id)
         return control;
-      node2 = node2->Next();
+      node2 = node2->GetNext();
     }
-    node1 = node1->Next();
+    node1 = node1->GetNext();
   }
   return (wxTabControl *) NULL;
 }
@@ -1074,37 +1082,37 @@ 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.Nth(layer);
+  wxNode *node1 = m_layers.Item(layer);
   if (!node1)
     return (wxTabControl *) NULL;
-  wxTabLayer *tabLayer = (wxTabLayer *)node1->Data();
-  wxNode *node2 = tabLayer->Nth(position);
+  wxTabLayer *tabLayer = (wxTabLayer *)node1->GetData();
+  wxNode *node2 = tabLayer->Item(position);
   if (!node2)
     return (wxTabControl *) NULL;
-  return (wxTabControl *)node2->Data();
+  return (wxTabControl *)node2->GetData();
 }
 
 // Find the node and the column at which this control is positioned.
 wxNode *wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
 {
-  wxNode *node1 = m_layers.First();
+  wxNode *node1 = m_layers.GetFirst();
   while (node1)
   {
-    wxTabLayer *layer = (wxTabLayer *)node1->Data();
+    wxTabLayer *layer = (wxTabLayer *)node1->GetData();
     int c = 0;
-    wxNode *node2 = layer->First();
+    wxNode *node2 = layer->GetFirst();
     while (node2)
     {
-      wxTabControl *cnt = (wxTabControl *)node2->Data();
+      wxTabControl *cnt = (wxTabControl *)node2->GetData();
       if (cnt == control)
       {
         *col = c;
         return node2;
       }
-      node2 = node2->Next();
+      node2 = node2->GetNext();
       c ++;
     }
-    node1 = node1->Next();
+    node1 = node1->GetNext();
   }
   return (wxNode *) NULL;
 }
@@ -1253,7 +1261,7 @@ wxWindow *wxPanelTabView::GetTabWindow(int id) const
   wxNode *node = m_tabWindows.Find((long)id);
   if (!node)
     return (wxWindow *) NULL;
-  return (wxWindow *)node->Data();
+  return (wxWindow *)node->GetData();
 }
 
 void wxPanelTabView::ClearWindows(bool deleteWindows)
@@ -1275,3 +1283,4 @@ void wxPanelTabView::ShowWindowForTab(int id)
   newWindow->Refresh();
 }
 
+#endif // wxUSE_TAB_DIALOG