X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f03fc89fff2d6e823e7d4d14fbe14822ad6777b1..19de4eecd5d48c18bfdc040e763f69a6d8168599:/src/generic/tabg.cpp diff --git a/src/generic/tabg.cpp b/src/generic/tabg.cpp index c46ff59cd3..d1b044d937 100644 --- a/src/generic/tabg.cpp +++ b/src/generic/tabg.cpp @@ -20,8 +20,12 @@ #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 @@ -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