X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..3201a1046ba71ba8e5ef2ed694fde34d12f743f3:/src/generic/tabg.cpp?ds=sidebyside diff --git a/src/generic/tabg.cpp b/src/generic/tabg.cpp index 6c6ffa0120..365b1c78f6 100644 --- a/src/generic/tabg.cpp +++ b/src/generic/tabg.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: tabg.cpp +// Name: src/generic/tabg.cpp // Purpose: Generic tabbed dialogs // Author: Julian Smart // Modified by: @@ -9,15 +9,11 @@ // 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 @@ -26,17 +22,17 @@ #include "wx/settings.h" #include "wx/intl.h" #include "wx/dcclient.h" + #include "wx/math.h" #endif #include #include #include -#include #include "wx/tab.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) @@ -49,7 +45,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxTabControl, wxObject) wxTabControl::wxTabControl(wxTabView *v) { m_view = v; - m_isSelected = FALSE; + m_isSelected = false; m_offsetX = 0; m_offsetY = 0; m_width = 0; @@ -89,7 +85,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 +207,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); @@ -502,9 +499,9 @@ bool wxTabControl::HitTest(int x, int y) const int tabY2 = tabY1 + GetHeight(); if (x >= tabX1 && y >= tabY1 && x <= tabX2 && y <= tabY2) - return TRUE; + return true; else - return FALSE; + return false; } IMPLEMENT_DYNAMIC_CLASS(wxTabView, wxObject) @@ -527,12 +524,11 @@ 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; @@ -540,7 +536,7 @@ wxTabView::wxTabView(long style) wxTabView::~wxTabView() { - ClearTabs(TRUE); + ClearTabs(true); } // Automatically positions tabs @@ -631,22 +627,22 @@ bool wxTabView::RemoveTab(int id) // The layout has changed LayoutTabs(); - return TRUE; + return true; } tabNode = tabNode->GetNext(); } layerNode = layerNode->GetNext(); } - return FALSE; + return false; } bool wxTabView::SetTabText(int id, const wxString& label) { wxTabControl* control = FindTabControlForId(id); if (!control) - return FALSE; + return false; control->SetLabel(label); - return TRUE; + return true; } wxString wxTabView::GetTabText(int id) const @@ -802,7 +798,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( @@ -877,11 +874,11 @@ void wxTabView::Draw(wxDC& dc) #endif } -// Process mouse event, return FALSE if we didn't process it +// Process mouse event, return false if we didn't process it bool wxTabView::OnEvent(wxMouseEvent& event) { if (!event.LeftDown()) - return FALSE; + return false; wxCoord x, y; event.GetPosition(&x, &y); @@ -911,16 +908,16 @@ bool wxTabView::OnEvent(wxMouseEvent& event) } if (!hitControl) - return FALSE; + return false; wxTabControl *currentTab = FindTabControlForId(m_tabSelection); if (hitControl == currentTab) - return FALSE; + return false; ChangeTab(hitControl); - return TRUE; + return true; } bool wxTabView::ChangeTab(wxTabControl *control) @@ -931,28 +928,28 @@ bool wxTabView::ChangeTab(wxTabControl *control) oldTab = currentTab->GetId(); if (control == currentTab) - return TRUE; + return true; if (m_layers.GetCount() == 0) - return FALSE; + return false; if (!OnTabPreActivate(control->GetId(), oldTab)) - return FALSE; + return false; // Move the tab to the bottom MoveSelectionTab(control); if (currentTab) - currentTab->SetSelected(FALSE); + currentTab->SetSelected(false); - control->SetSelected(TRUE); + control->SetSelected(true); m_tabSelection = control->GetId(); OnTabActivate(control->GetId(), oldTab); // Leave window refresh for the implementing window - return TRUE; + return true; } // Move the selected tab to the bottom layer, if necessary, @@ -960,7 +957,7 @@ bool wxTabView::ChangeTab(wxTabControl *control) bool wxTabView::MoveSelectionTab(wxTabControl *control) { if (m_layers.GetCount() == 0) - return FALSE; + return false; wxTabLayer *firstLayer = (wxTabLayer *)m_layers.GetFirst()->GetData(); @@ -972,14 +969,14 @@ bool wxTabView::MoveSelectionTab(wxTabControl *control) int col = 0; wxList::compatibility_iterator thisNode = FindTabNodeAndColumn(control, &col); if (!thisNode) - return FALSE; + return false; wxList::compatibility_iterator otherNode = firstLayer->Item(col); if (!otherNode) - return FALSE; + return false; // If this is already in the bottom layer, return now if (otherNode == thisNode) - return TRUE; + return true; wxTabControl *otherTab = (wxTabControl *)otherNode->GetData(); @@ -1003,7 +1000,7 @@ bool wxTabView::MoveSelectionTab(wxTabControl *control) thisNode->SetData(otherTab); otherNode->SetData(control); } - return TRUE; + return true; } // Called when a tab is activated @@ -1014,22 +1011,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 +1038,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)) @@ -1051,7 +1053,7 @@ void wxTabView::SetTabSelection(int sel, bool activateTool) } if (oldControl) - oldControl->SetSelected(FALSE); + oldControl->SetSelected(false); m_tabSelection = sel; @@ -1063,6 +1065,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,7 +1077,7 @@ 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(); } @@ -1233,7 +1237,7 @@ wxPanelTabView::wxPanelTabView(wxPanel *pan, long style) wxPanelTabView::~wxPanelTabView(void) { - ClearWindows(TRUE); + ClearWindows(true); } // Called when a tab is activated @@ -1246,9 +1250,9 @@ void wxPanelTabView::OnTabActivate(int activateId, int deactivateId) wxWindow *newWindow = GetTabWindow(activateId); if (oldWindow) - oldWindow->Show(FALSE); + oldWindow->Show(false); if (newWindow) - newWindow->Show(TRUE); + newWindow->Show(true); m_panel->Refresh(); } @@ -1258,7 +1262,7 @@ void wxPanelTabView::AddTabWindow(int id, wxWindow *window) { wxASSERT(m_tabWindows.find(id) == m_tabWindows.end()); m_tabWindows[id] = window; - window->Show(FALSE); + window->Show(false); } wxWindow *wxPanelTabView::GetTabWindow(int id) const @@ -1280,8 +1284,8 @@ void wxPanelTabView::ShowWindowForTab(int id) if (newWindow == m_currentWindow) return; if (m_currentWindow) - m_currentWindow->Show(FALSE); - newWindow->Show(TRUE); + m_currentWindow->Show(false); + newWindow->Show(true); newWindow->Refresh(); }