/////////////////////////////////////////////////////////////////////////////
-// 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
// 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 <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)
wxTabControl::wxTabControl(wxTabView *v)
{
m_view = v;
- m_isSelected = FALSE;
+ m_isSelected = false;
m_offsetX = 0;
m_offsetY = 0;
m_width = 0;
// 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__
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);
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)
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()
{
- ClearTabs(TRUE);
+ ClearTabs(true);
}
// Automatically positions tabs
tabControl->SetRowPosition(tabLayer->GetCount());
tabControl->SetColPosition(layer);
- wxTabControl *lastTab = (wxTabControl *) NULL;
+ wxTabControl *lastTab = NULL;
if (lastTabNode)
lastTab = (wxTabControl *)lastTabNode->GetData();
// 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
layerNode = nextLayerNode;
}
- wxTabControl *lastTab = (wxTabControl *) NULL;
+ wxTabControl *lastTab = NULL;
wxTabLayer *currentLayer = new wxTabLayer;
m_layers.Append(currentLayer);
{
currentLayer = new wxTabLayer;
m_layers.Append(currentLayer);
- lastTab = (wxTabControl *) NULL;
+ lastTab = NULL;
}
}
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(
#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);
- wxTabControl *hitControl = (wxTabControl *) NULL;
+ wxTabControl *hitControl = NULL;
wxTabLayerList::compatibility_iterator node = m_layers.GetFirst();
while (node)
}
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)
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,
bool wxTabView::MoveSelectionTab(wxTabControl *control)
{
if (m_layers.GetCount() == 0)
- return FALSE;
+ return false;
wxTabLayer *firstLayer = (wxTabLayer *)m_layers.GetFirst()->GetData();
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();
thisNode->SetData(otherTab);
otherNode->SetData(control);
}
- return TRUE;
+ return true;
}
// Called when a tab is activated
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 )
int oldSel = m_tabSelection;
wxTabControl *control = FindTabControlForId(sel);
+ if (sel == 0) sel=control->GetId();
wxTabControl *oldControl = FindTabControlForId(m_tabSelection);
if (!OnTabPreActivate(sel, oldSel))
}
if (oldControl)
- oldControl->SetSelected(FALSE);
+ oldControl->SetSelected(false);
m_tabSelection = sel;
}
// 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();
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)
{
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();
}
long windowStyle, const wxString& name):
wxDialog(parent, id, title, pos, size, windowStyle, name)
{
- m_tabView = (wxTabView *) NULL;
+ m_tabView = NULL;
}
wxTabbedDialog::~wxTabbedDialog(void)
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)
: wxTabView(style)
{
m_panel = pan;
- m_currentWindow = (wxWindow *) NULL;
+ m_currentWindow = NULL;
if (m_panel->IsKindOf(CLASSINFO(wxTabbedDialog)))
((wxTabbedDialog *)m_panel)->SetTabView(this);
wxPanelTabView::~wxPanelTabView(void)
{
- ClearWindows(TRUE);
+ ClearWindows(true);
}
// Called when a tab is activated
wxWindow *newWindow = GetTabWindow(activateId);
if (oldWindow)
- oldWindow->Show(FALSE);
+ oldWindow->Show(false);
if (newWindow)
- newWindow->Show(TRUE);
+ newWindow->Show(true);
m_panel->Refresh();
}
{
wxASSERT(m_tabWindows.find(id) == m_tabWindows.end());
m_tabWindows[id] = window;
- window->Show(FALSE);
+ window->Show(false);
}
wxWindow *wxPanelTabView::GetTabWindow(int id) const
if (newWindow == m_currentWindow)
return;
if (m_currentWindow)
- m_currentWindow->Show(FALSE);
- newWindow->Show(TRUE);
+ m_currentWindow->Show(false);
+ newWindow->Show(true);
newWindow->Refresh();
}
-#endif // wxUSE_TAB_DIALOG