]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/tabg.cpp
Fix broken and missing DataView interface items for Phoenix
[wxWidgets.git] / src / generic / tabg.cpp
index 75a10c14d5827c751726cc0ce2023ddc00e3045a..9f7f8e092b1ffdbe4619ec90f5a0cb9f2a3359ca 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        tabg.cpp
-// Purpose:     Generic tabbed dialogs
+// Name:        src/generic/tabg.cpp
+// Purpose:     Generic tabbed dialogs; used by wxMotif's wxNotebook
 // Author:      Julian Smart
 // Modified by:
 // Created:     01/02/97
@@ -9,34 +9,28 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "tabg.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
-#if wxUSE_TAB_DIALOG
-
 #ifndef WX_PRECOMP
     #include "wx/settings.h"
     #include "wx/intl.h"
     #include "wx/dcclient.h"
+    #include "wx/math.h"
 #endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdarg.h>
 
-#include "wx/math.h"
-#include "wx/tab.h"
+#include "wx/generic/tabg.h"
 #include "wx/listimpl.cpp"
 
-WX_DEFINE_LIST(wxTabLayerList);
+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)
@@ -89,7 +83,8 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
   // Draw grey background
   if (m_view->GetTabStyle() & wxTAB_STYLE_COLOUR_INTERIOR)
   {
-    dc.SetBrush(*m_view->GetBackgroundBrush());
+    if(m_view->GetBackgroundBrush())
+      dc.SetBrush(*m_view->GetBackgroundBrush());
 
     // Add 1 because the pen is transparent. Under Motif, may be different.
 #ifdef __WXMOTIF__
@@ -210,7 +205,7 @@ void wxTabControl::OnDraw(wxDC& dc, bool lastInRow)
   wxColour col(m_view->GetTextColour());
   dc.SetTextForeground(col);
   dc.SetBackgroundMode(wxTRANSPARENT);
-  long textWidth, textHeight;
+  wxCoord textWidth, textHeight;
   dc.GetTextExtent(GetLabel(), &textWidth, &textHeight);
 
   int textX = (int)(tabX + (GetWidth() - textWidth)/2.0);
@@ -527,15 +522,14 @@ wxTabView::wxTabView(long style)
   m_tabViewRect.x = 300;
   m_highlightColour = *wxWHITE;
   m_shadowColour = wxColour(128, 128, 128);
-  m_backgroundColour = *wxLIGHT_GREY;
+  // m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE);
   m_textColour = *wxBLACK;
   m_highlightPen = wxWHITE_PEN;
   m_shadowPen = wxGREY_PEN;
-  m_backgroundPen = wxLIGHT_GREY_PEN;
-  m_backgroundBrush = wxLIGHT_GREY_BRUSH;
+  // SetBackgroundColour(m_backgroundColour);
   m_tabFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
   m_tabSelectedFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
-  m_window = (wxWindow *) NULL;
+  m_window = NULL;
 }
 
 wxTabView::~wxTabView()
@@ -585,7 +579,7 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
   tabControl->SetRowPosition(tabLayer->GetCount());
   tabControl->SetColPosition(layer);
 
-  wxTabControl *lastTab = (wxTabControl *) NULL;
+  wxTabControl *lastTab = NULL;
   if (lastTabNode)
     lastTab = (wxTabControl *)lastTabNode->GetData();
 
@@ -735,7 +729,7 @@ void wxTabView::LayoutTabs(void)
     layerNode = nextLayerNode;
   }
 
-  wxTabControl *lastTab = (wxTabControl *) NULL;
+  wxTabControl *lastTab = NULL;
 
   wxTabLayer *currentLayer = new wxTabLayer;
   m_layers.Append(currentLayer);
@@ -757,7 +751,7 @@ void wxTabView::LayoutTabs(void)
      {
        currentLayer = new wxTabLayer;
        m_layers.Append(currentLayer);
-       lastTab = (wxTabControl *) NULL;
+       lastTab = NULL;
      }
     }
 
@@ -802,7 +796,8 @@ void wxTabView::Draw(wxDC& dc)
     if (GetTabStyle() & wxTAB_STYLE_COLOUR_INTERIOR)
     {
         dc.SetPen(*wxTRANSPARENT_PEN);
-        dc.SetBrush(*GetBackgroundBrush());
+        if(GetBackgroundBrush())
+            dc.SetBrush(*GetBackgroundBrush());
 
         // Add 1 because the pen is transparent. Under Motif, may be different.
         dc.DrawRectangle(
@@ -886,7 +881,7 @@ bool wxTabView::OnEvent(wxMouseEvent& event)
   wxCoord x, y;
   event.GetPosition(&x, &y);
 
-  wxTabControl *hitControl = (wxTabControl *) NULL;
+  wxTabControl *hitControl = NULL;
 
   wxTabLayerList::compatibility_iterator node = m_layers.GetFirst();
   while (node)
@@ -1014,22 +1009,26 @@ void wxTabView::OnTabActivate(int /*activateId*/, int /*deactivateId*/)
 void wxTabView::SetHighlightColour(const wxColour& col)
 {
   m_highlightColour = col;
-  m_highlightPen = wxThePenList->FindOrCreatePen(col, 1, wxSOLID);
+  m_highlightPen = wxThePenList->FindOrCreatePen(col);
 }
 
 void wxTabView::SetShadowColour(const wxColour& col)
 {
   m_shadowColour = col;
-  m_shadowPen = wxThePenList->FindOrCreatePen(col, 1, wxSOLID);
+  m_shadowPen = wxThePenList->FindOrCreatePen(col);
 }
 
 void wxTabView::SetBackgroundColour(const wxColour& col)
 {
   m_backgroundColour = col;
-  m_backgroundPen = wxThePenList->FindOrCreatePen(col, 1, wxSOLID);
-  m_backgroundBrush = wxTheBrushList->FindOrCreateBrush(col, wxSOLID);
+  m_backgroundPen = wxThePenList->FindOrCreatePen(col);
+  m_backgroundBrush = wxTheBrushList->FindOrCreateBrush(col);
 }
 
+// this may be called with sel = zero (which doesn't match any page)
+// when wxMotif deletes a page
+// so return the first tab...
+
 void wxTabView::SetTabSelection(int sel, bool activateTool)
 {
   if ( sel==m_tabSelection )
@@ -1037,6 +1036,7 @@ void wxTabView::SetTabSelection(int sel, bool activateTool)
 
   int oldSel = m_tabSelection;
   wxTabControl *control = FindTabControlForId(sel);
+  if (sel == 0) sel=control->GetId();
   wxTabControl *oldControl = FindTabControlForId(m_tabSelection);
 
   if (!OnTabPreActivate(sel, oldSel))
@@ -1063,6 +1063,8 @@ void wxTabView::SetTabSelection(int sel, bool activateTool)
 }
 
 // Find tab control for id
+// this may be called with zero (which doesn't match any page)
+// so return the first control...
 wxTabControl *wxTabView::FindTabControlForId(int id) const
 {
   wxTabLayerList::compatibility_iterator node1 = m_layers.GetFirst();
@@ -1073,13 +1075,13 @@ wxTabControl *wxTabView::FindTabControlForId(int id) const
     while (node2)
     {
       wxTabControl *control = (wxTabControl *)node2->GetData();
-      if (control->GetId() == id)
+      if (control->GetId() == id || id == 0)
         return control;
       node2 = node2->GetNext();
     }
     node1 = node1->GetNext();
   }
-  return (wxTabControl *) NULL;
+  return NULL;
 }
 
 // Find tab control for layer, position (starting from zero)
@@ -1087,11 +1089,11 @@ wxTabControl *wxTabView::FindTabControlForPosition(int layer, int position) cons
 {
   wxTabLayerList::compatibility_iterator node1 = m_layers.Item(layer);
   if (!node1)
-    return (wxTabControl *) NULL;
+    return NULL;
   wxTabLayer *tabLayer = (wxTabLayer *)node1->GetData();
   wxList::compatibility_iterator node2 = tabLayer->Item(position);
   if (!node2)
-    return (wxTabControl *) NULL;
+    return NULL;
   return (wxTabControl *)node2->GetData();
 }
 
@@ -1148,7 +1150,7 @@ wxTabbedDialog::wxTabbedDialog(wxWindow *parent, wxWindowID id,
     long windowStyle, const wxString& name):
    wxDialog(parent, id, title, pos, size, windowStyle, name)
 {
-  m_tabView = (wxTabView *) NULL;
+  m_tabView = NULL;
 }
 
 wxTabbedDialog::~wxTabbedDialog(void)
@@ -1190,7 +1192,7 @@ wxTabbedPanel::wxTabbedPanel(wxWindow *parent, wxWindowID id, const wxPoint& pos
    const wxSize& size, long windowStyle, const wxString& name):
    wxPanel(parent, id, pos, size, windowStyle, name)
 {
-  m_tabView = (wxTabView *) NULL;
+  m_tabView = NULL;
 }
 
 wxTabbedPanel::~wxTabbedPanel(void)
@@ -1221,11 +1223,11 @@ wxPanelTabView::wxPanelTabView(wxPanel *pan, long style)
     : wxTabView(style)
 {
   m_panel = pan;
-  m_currentWindow = (wxWindow *) NULL;
+  m_currentWindow = NULL;
 
-  if (m_panel->IsKindOf(CLASSINFO(wxTabbedDialog)))
+  if (m_panel->IsKindOf(wxCLASSINFO(wxTabbedDialog)))
     ((wxTabbedDialog *)m_panel)->SetTabView(this);
-  else if (m_panel->IsKindOf(CLASSINFO(wxTabbedPanel)))
+  else if (m_panel->IsKindOf(wxCLASSINFO(wxTabbedPanel)))
     ((wxTabbedPanel *)m_panel)->SetTabView(this);
 
   SetWindow(m_panel);
@@ -1285,4 +1287,3 @@ void wxPanelTabView::ShowWindowForTab(int id)
   newWindow->Refresh();
 }
 
-#endif // wxUSE_TAB_DIALOG