dc.GetTextExtent(GetLabel(), &textWidth, &textHeight);
int textX = (int)(tabX + (GetWidth() - textWidth)/2.0);
+ if (textX < (tabX + 2))
+ textX = (tabX + 2);
+
+ dc.SetClippingRegion(tabX, tabY, GetWidth(), GetHeight());
dc.DrawText(GetLabel(), textX, textY);
+ dc.DestroyClippingRegion();
if (m_isSelected)
{
return tabControl;
}
+
+// Remove the tab without deleting the window
+bool wxTabView::RemoveTab(int id)
+{
+ wxNode *layerNode = m_layers.First();
+ while (layerNode)
+ {
+ wxTabLayer *layer = (wxTabLayer *)layerNode->Data();
+ wxNode *tabNode = layer->First();
+ while (tabNode)
+ {
+ wxTabControl *tab = (wxTabControl *)tabNode->Data();
+ if (tab->GetId() == id)
+ {
+ if (id == m_tabSelection)
+ m_tabSelection = -1;
+ delete tab;
+ delete tabNode;
+ m_noTabs --;
+
+ // The layout has changed
+ Layout();
+ return TRUE;
+ }
+ tabNode = tabNode->Next();
+ }
+ layerNode = layerNode->Next();
+ }
+ return FALSE;
+}
+
+bool wxTabView::SetTabText(int id, const wxString& label)
+{
+ wxTabControl* control = FindTabControlForId(id);
+ if (!control)
+ return FALSE;
+ control->SetLabel(label);
+ return TRUE;
+}
+
+wxString wxTabView::GetTabText(int id) const
+{
+ wxTabControl* control = FindTabControlForId(id);
+ if (!control)
+ return wxEmptyString;
+ else
+ return control->GetLabel();
+}
// Returns the total height of the tabs component -- this may be several
// times the height of a tab, if there are several tab layers (rows).
delete layerNode;
layerNode = nextLayerNode;
}
+ m_noTabs = 0;
}
// Draw all tabs
void wxTabView::Draw(wxDC& dc)
{
+ // Don't draw anything if there are no tabs.
+ if (GetNumberOfTabs() == 0)
+ return;
+
// Draw top margin area (beneath tabs and above view area)
if (GetTabStyle() & wxTAB_STYLE_COLOUR_INTERIOR)
{
#ifndef wxUSE_NEW_METHOD
if (GetTabStyle() & wxTAB_STYLE_DRAW_BOX)
{
- dc.SetPen(GetShadowPen());
+ dc.SetPen(* GetShadowPen());
// Draw bottom line
dc.DrawLine(
(GetViewRect().y + GetViewRect().height)
);
- dc.SetPen(wxBLACK_PEN);
+ dc.SetPen(* wxBLACK_PEN);
// Draw bottom line
dc.DrawLine(
{
int oldSel = m_tabSelection;
wxTabControl *control = FindTabControlForId(sel);
+ wxTabControl *oldControl = FindTabControlForId(m_tabSelection);
if (!OnTabPreActivate(sel, oldSel))
return;
if (control)
- control->SetSelected((sel != 0)); // TODO ??
- else
+ control->SetSelected((sel != -1)); // TODO ??
+ else if (sel != -1)
{
- wxMessageBox(_("Could not find tab for id"), _("Error"), wxOK);
+ wxFAIL_MSG(_("Could not find tab for id"));
return;
}
+
+ if (oldControl)
+ oldControl->SetSelected(FALSE);
m_tabSelection = sel;
- MoveSelectionTab(control);
+
+ if (control)
+ MoveSelectionTab(control);
if (activateTool)
OnTabActivate(sel, oldSel);