X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/836dded82b6493c406e149f2a339b2d36a472f5c..4b263e5ef358411a345dee9ffef3ba69c19be40e:/src/generic/tabg.cpp diff --git a/src/generic/tabg.cpp b/src/generic/tabg.cpp index 8ec1549f2b..7d4dbdf09b 100644 --- a/src/generic/tabg.cpp +++ b/src/generic/tabg.cpp @@ -1,42 +1,35 @@ ///////////////////////////////////////////////////////////////////////////// -// 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 -// RCS-ID: $Id$ // Copyright: (c) // 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 #include #include -#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 +82,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 +204,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,14 +521,14 @@ wxTabView::wxTabView(long style) m_tabViewRect.x = 300; m_highlightColour = *wxWHITE; m_shadowColour = wxColour(128, 128, 128); - m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); + // m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE); m_textColour = *wxBLACK; m_highlightPen = wxWHITE_PEN; m_shadowPen = wxGREY_PEN; - SetBackgroundColour(m_backgroundColour); + // 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() @@ -584,7 +578,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(); @@ -734,7 +728,7 @@ void wxTabView::LayoutTabs(void) layerNode = nextLayerNode; } - wxTabControl *lastTab = (wxTabControl *) NULL; + wxTabControl *lastTab = NULL; wxTabLayer *currentLayer = new wxTabLayer; m_layers.Append(currentLayer); @@ -756,7 +750,7 @@ void wxTabView::LayoutTabs(void) { currentLayer = new wxTabLayer; m_layers.Append(currentLayer); - lastTab = (wxTabControl *) NULL; + lastTab = NULL; } } @@ -801,7 +795,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( @@ -885,7 +880,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) @@ -1013,22 +1008,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 ) @@ -1036,6 +1035,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)) @@ -1062,6 +1062,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(); @@ -1072,13 +1074,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) @@ -1086,11 +1088,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(); } @@ -1147,7 +1149,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) @@ -1189,7 +1191,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) @@ -1220,11 +1222,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); @@ -1284,4 +1286,3 @@ void wxPanelTabView::ShowWindowForTab(int id) newWindow->Refresh(); } -#endif // wxUSE_TAB_DIALOG