wxMotif STL-ification.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22822 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -18,10 +18,11 @@
|
|||||||
|
|
||||||
#define WXTAB_VERSION 1.1
|
#define WXTAB_VERSION 1.1
|
||||||
|
|
||||||
#include "wx/hash.h"
|
#include "wx/hashmap.h"
|
||||||
#include "wx/string.h"
|
#include "wx/string.h"
|
||||||
#include "wx/dialog.h"
|
#include "wx/dialog.h"
|
||||||
#include "wx/panel.h"
|
#include "wx/panel.h"
|
||||||
|
#include "wx/list.h"
|
||||||
|
|
||||||
class WXDLLEXPORT wxTabView;
|
class WXDLLEXPORT wxTabView;
|
||||||
|
|
||||||
@@ -86,13 +87,14 @@ protected:
|
|||||||
|
|
||||||
class WXDLLEXPORT wxTabLayer: public wxList
|
class WXDLLEXPORT wxTabLayer: public wxList
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxTabLayer)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The wxTabView controls and draws the tabbed object
|
* The wxTabView controls and draws the tabbed object
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
WX_DECLARE_LIST(wxTabLayer, wxTabLayerList);
|
||||||
|
|
||||||
#define wxTAB_STYLE_DRAW_BOX 1 // Draws 3D boxes round tab layers
|
#define wxTAB_STYLE_DRAW_BOX 1 // Draws 3D boxes round tab layers
|
||||||
#define wxTAB_STYLE_COLOUR_INTERIOR 2 // Colours interior of tabs, otherwise draws outline
|
#define wxTAB_STYLE_COLOUR_INTERIOR 2 // Colours interior of tabs, otherwise draws outline
|
||||||
|
|
||||||
@@ -104,7 +106,7 @@ public:
|
|||||||
~wxTabView();
|
~wxTabView();
|
||||||
|
|
||||||
inline int GetNumberOfLayers() const { return m_layers.GetCount(); }
|
inline int GetNumberOfLayers() const { return m_layers.GetCount(); }
|
||||||
inline wxList& GetLayers() { return m_layers; }
|
inline wxList& GetLayers() { return (wxList&)m_layers; }
|
||||||
|
|
||||||
inline void SetWindow(wxWindow* wnd) { m_window = wnd; }
|
inline void SetWindow(wxWindow* wnd) { m_window = wnd; }
|
||||||
inline wxWindow* GetWindow(void) const { return m_window; }
|
inline wxWindow* GetWindow(void) const { return m_window; }
|
||||||
@@ -197,7 +199,7 @@ public:
|
|||||||
inline wxFont *GetSelectedTabFont() const { return (wxFont*) & m_tabSelectedFont; }
|
inline wxFont *GetSelectedTabFont() const { return (wxFont*) & m_tabSelectedFont; }
|
||||||
inline void SetSelectedTabFont(const wxFont& f) { m_tabSelectedFont = f; }
|
inline void SetSelectedTabFont(const wxFont& f) { m_tabSelectedFont = f; }
|
||||||
// Find the node and the column at which this control is positioned.
|
// Find the node and the column at which this control is positioned.
|
||||||
wxNode *FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
|
wxList::compatibility_iterator FindTabNodeAndColumn(wxTabControl *control, int *col) const ;
|
||||||
|
|
||||||
// Do the necessary to change to this tab
|
// Do the necessary to change to this tab
|
||||||
virtual bool ChangeTab(wxTabControl *control);
|
virtual bool ChangeTab(wxTabControl *control);
|
||||||
@@ -210,7 +212,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
// List of layers, from front to back.
|
// List of layers, from front to back.
|
||||||
wxList m_layers;
|
wxTabLayerList m_layers;
|
||||||
|
|
||||||
// Selected tab
|
// Selected tab
|
||||||
int m_tabSelection;
|
int m_tabSelection;
|
||||||
@@ -321,6 +323,9 @@ protected:
|
|||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
WX_DECLARE_HASH_MAP(int, wxWindow*, wxIntegerHash, wxIntegerEqual,
|
||||||
|
wxIntToWindowHashMap);
|
||||||
|
|
||||||
class WXDLLEXPORT wxPanelTabView: public wxTabView
|
class WXDLLEXPORT wxPanelTabView: public wxTabView
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxPanelTabView)
|
DECLARE_DYNAMIC_CLASS(wxPanelTabView)
|
||||||
@@ -338,12 +343,12 @@ public:
|
|||||||
inline wxWindow *GetCurrentWindow() const { return m_currentWindow; }
|
inline wxWindow *GetCurrentWindow() const { return m_currentWindow; }
|
||||||
|
|
||||||
void ShowWindowForTab(int id);
|
void ShowWindowForTab(int id);
|
||||||
inline wxList& GetWindows() const { return (wxList&) m_tabWindows; }
|
// inline wxList& GetWindows() const { return (wxList&) m_tabWindows; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// List of panels, one for each tab. Indexed
|
// List of panels, one for each tab. Indexed
|
||||||
// by tab ID.
|
// by tab ID.
|
||||||
wxList m_tabWindows;
|
wxIntToWindowHashMap m_tabWindows;
|
||||||
wxWindow* m_currentWindow;
|
wxWindow* m_currentWindow;
|
||||||
wxPanel* m_panel;
|
wxPanel* m_panel;
|
||||||
};
|
};
|
||||||
|
@@ -34,6 +34,9 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "wx/tab.h"
|
#include "wx/tab.h"
|
||||||
|
#include "wx/listimpl.cpp"
|
||||||
|
|
||||||
|
WX_DEFINE_LIST(wxTabLayerList);
|
||||||
|
|
||||||
// not defined: use old, square tab implementation (fills in tabs)
|
// not defined: use old, square tab implementation (fills in tabs)
|
||||||
// defined: use new, rounded tab implementation (doesn't colour in tabs)
|
// defined: use new, rounded tab implementation (doesn't colour in tabs)
|
||||||
@@ -41,7 +44,7 @@
|
|||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxTabControl, wxObject)
|
IMPLEMENT_DYNAMIC_CLASS(wxTabControl, wxObject)
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxTabLayer, wxList)
|
// IMPLEMENT_DYNAMIC_CLASS(wxTabLayer, wxList)
|
||||||
|
|
||||||
wxTabControl::wxTabControl(wxTabView *v)
|
wxTabControl::wxTabControl(wxTabView *v)
|
||||||
{
|
{
|
||||||
@@ -547,7 +550,7 @@ wxTabView::~wxTabView()
|
|||||||
wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *existingTab)
|
wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *existingTab)
|
||||||
{
|
{
|
||||||
// First, find which layer we should be adding to.
|
// First, find which layer we should be adding to.
|
||||||
wxNode *node = m_layers.GetLast();
|
wxTabLayerList::compatibility_iterator node = m_layers.GetLast();
|
||||||
if (!node)
|
if (!node)
|
||||||
{
|
{
|
||||||
wxTabLayer *newLayer = new wxTabLayer;
|
wxTabLayer *newLayer = new wxTabLayer;
|
||||||
@@ -556,7 +559,7 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
|
|||||||
// Check if adding another tab control would go off the
|
// Check if adding another tab control would go off the
|
||||||
// right-hand edge of the layer.
|
// right-hand edge of the layer.
|
||||||
wxTabLayer *tabLayer = (wxTabLayer *)node->GetData();
|
wxTabLayer *tabLayer = (wxTabLayer *)node->GetData();
|
||||||
wxNode *lastTabNode = tabLayer->GetLast();
|
wxList::compatibility_iterator lastTabNode = tabLayer->GetLast();
|
||||||
if (lastTabNode)
|
if (lastTabNode)
|
||||||
{
|
{
|
||||||
wxTabControl *lastTab = (wxTabControl *)lastTabNode->GetData();
|
wxTabControl *lastTab = (wxTabControl *)lastTabNode->GetData();
|
||||||
@@ -571,7 +574,7 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
|
|||||||
{
|
{
|
||||||
tabLayer = new wxTabLayer;
|
tabLayer = new wxTabLayer;
|
||||||
m_layers.Append(tabLayer);
|
m_layers.Append(tabLayer);
|
||||||
lastTabNode = (wxNode *) NULL;
|
lastTabNode = wxList::compatibility_iterator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int layer = m_layers.GetCount() - 1;
|
int layer = m_layers.GetCount() - 1;
|
||||||
@@ -610,11 +613,11 @@ wxTabControl *wxTabView::AddTab(int id, const wxString& label, wxTabControl *exi
|
|||||||
// Remove the tab without deleting the window
|
// Remove the tab without deleting the window
|
||||||
bool wxTabView::RemoveTab(int id)
|
bool wxTabView::RemoveTab(int id)
|
||||||
{
|
{
|
||||||
wxNode *layerNode = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
|
||||||
while (layerNode)
|
while (layerNode)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
||||||
wxNode *tabNode = layer->GetFirst();
|
wxList::compatibility_iterator tabNode = layer->GetFirst();
|
||||||
while (tabNode)
|
while (tabNode)
|
||||||
{
|
{
|
||||||
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
||||||
@@ -623,7 +626,7 @@ bool wxTabView::RemoveTab(int id)
|
|||||||
if (id == m_tabSelection)
|
if (id == m_tabSelection)
|
||||||
m_tabSelection = -1;
|
m_tabSelection = -1;
|
||||||
delete tab;
|
delete tab;
|
||||||
delete tabNode;
|
layer->Erase(tabNode);
|
||||||
m_noTabs --;
|
m_noTabs --;
|
||||||
|
|
||||||
// The layout has changed
|
// The layout has changed
|
||||||
@@ -661,11 +664,11 @@ int wxTabView::GetTotalTabHeight()
|
|||||||
{
|
{
|
||||||
int minY = 0;
|
int minY = 0;
|
||||||
|
|
||||||
wxNode *layerNode = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
|
||||||
while (layerNode)
|
while (layerNode)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
||||||
wxNode *tabNode = layer->GetFirst();
|
wxList::compatibility_iterator tabNode = layer->GetFirst();
|
||||||
while (tabNode)
|
while (tabNode)
|
||||||
{
|
{
|
||||||
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
||||||
@@ -683,23 +686,23 @@ int wxTabView::GetTotalTabHeight()
|
|||||||
|
|
||||||
void wxTabView::ClearTabs(bool deleteTabs)
|
void wxTabView::ClearTabs(bool deleteTabs)
|
||||||
{
|
{
|
||||||
wxNode *layerNode = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
|
||||||
while (layerNode)
|
while (layerNode)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
||||||
wxNode *tabNode = layer->GetFirst();
|
wxList::compatibility_iterator tabNode = layer->GetFirst();
|
||||||
while (tabNode)
|
while (tabNode)
|
||||||
{
|
{
|
||||||
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
||||||
if (deleteTabs)
|
if (deleteTabs)
|
||||||
delete tab;
|
delete tab;
|
||||||
wxNode *next = tabNode->GetNext();
|
wxList::compatibility_iterator next = tabNode->GetNext();
|
||||||
delete tabNode;
|
layer->Erase(tabNode);
|
||||||
tabNode = next;
|
tabNode = next;
|
||||||
}
|
}
|
||||||
wxNode *nextLayerNode = layerNode->GetNext();
|
wxTabLayerList::compatibility_iterator nextLayerNode = layerNode->GetNext();
|
||||||
delete layer;
|
delete layer;
|
||||||
delete layerNode;
|
m_layers.Erase(layerNode);
|
||||||
layerNode = nextLayerNode;
|
layerNode = nextLayerNode;
|
||||||
}
|
}
|
||||||
m_noTabs = 0;
|
m_noTabs = 0;
|
||||||
@@ -713,22 +716,22 @@ void wxTabView::LayoutTabs(void)
|
|||||||
// Make a list of the tab controls, deleting the wxTabLayers.
|
// Make a list of the tab controls, deleting the wxTabLayers.
|
||||||
wxList controls;
|
wxList controls;
|
||||||
|
|
||||||
wxNode *layerNode = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator layerNode = m_layers.GetFirst();
|
||||||
while (layerNode)
|
while (layerNode)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
wxTabLayer *layer = (wxTabLayer *)layerNode->GetData();
|
||||||
wxNode *tabNode = layer->GetFirst();
|
wxList::compatibility_iterator tabNode = layer->GetFirst();
|
||||||
while (tabNode)
|
while (tabNode)
|
||||||
{
|
{
|
||||||
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
wxTabControl *tab = (wxTabControl *)tabNode->GetData();
|
||||||
controls.Append(tab);
|
controls.Append(tab);
|
||||||
wxNode *next = tabNode->GetNext();
|
wxList::compatibility_iterator next = tabNode->GetNext();
|
||||||
delete tabNode;
|
layer->Erase(tabNode);
|
||||||
tabNode = next;
|
tabNode = next;
|
||||||
}
|
}
|
||||||
wxNode *nextLayerNode = layerNode->GetNext();
|
wxTabLayerList::compatibility_iterator nextLayerNode = layerNode->GetNext();
|
||||||
delete layer;
|
delete layer;
|
||||||
delete layerNode;
|
m_layers.Erase(layerNode);
|
||||||
layerNode = nextLayerNode;
|
layerNode = nextLayerNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -737,7 +740,7 @@ void wxTabView::LayoutTabs(void)
|
|||||||
wxTabLayer *currentLayer = new wxTabLayer;
|
wxTabLayer *currentLayer = new wxTabLayer;
|
||||||
m_layers.Append(currentLayer);
|
m_layers.Append(currentLayer);
|
||||||
|
|
||||||
wxNode *node = controls.GetFirst();
|
wxList::compatibility_iterator node = controls.GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxTabControl *tabControl = (wxTabControl *)node->GetData();
|
wxTabControl *tabControl = (wxTabControl *)node->GetData();
|
||||||
@@ -811,15 +814,15 @@ void wxTabView::Draw(wxDC& dc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Draw layers in reverse order
|
// Draw layers in reverse order
|
||||||
wxNode *node = m_layers.GetLast();
|
wxTabLayerList::compatibility_iterator node = m_layers.GetLast();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)node->GetData();
|
wxTabLayer *layer = (wxTabLayer *)node->GetData();
|
||||||
wxNode *node2 = layer->GetFirst();
|
wxList::compatibility_iterator node2 = layer->GetFirst();
|
||||||
while (node2)
|
while (node2)
|
||||||
{
|
{
|
||||||
wxTabControl *control = (wxTabControl *)node2->GetData();
|
wxTabControl *control = (wxTabControl *)node2->GetData();
|
||||||
control->OnDraw(dc, (node2->GetNext() == NULL));
|
control->OnDraw(dc, (!node2->GetNext()));
|
||||||
node2 = node2->GetNext();
|
node2 = node2->GetNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -885,19 +888,19 @@ bool wxTabView::OnEvent(wxMouseEvent& event)
|
|||||||
|
|
||||||
wxTabControl *hitControl = (wxTabControl *) NULL;
|
wxTabControl *hitControl = (wxTabControl *) NULL;
|
||||||
|
|
||||||
wxNode *node = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator node = m_layers.GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)node->GetData();
|
wxTabLayer *layer = (wxTabLayer *)node->GetData();
|
||||||
wxNode *node2 = layer->GetFirst();
|
wxList::compatibility_iterator node2 = layer->GetFirst();
|
||||||
while (node2)
|
while (node2)
|
||||||
{
|
{
|
||||||
wxTabControl *control = (wxTabControl *)node2->GetData();
|
wxTabControl *control = (wxTabControl *)node2->GetData();
|
||||||
if (control->HitTest((int)x, (int)y))
|
if (control->HitTest((int)x, (int)y))
|
||||||
{
|
{
|
||||||
hitControl = control;
|
hitControl = control;
|
||||||
node = (wxNode *) NULL;
|
node = wxTabLayerList::compatibility_iterator();
|
||||||
node2 = (wxNode *) NULL;
|
node2 = wxList::compatibility_iterator();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
node2 = node2->GetNext();
|
node2 = node2->GetNext();
|
||||||
@@ -967,10 +970,10 @@ bool wxTabView::MoveSelectionTab(wxTabControl *control)
|
|||||||
{
|
{
|
||||||
// Do a swap
|
// Do a swap
|
||||||
int col = 0;
|
int col = 0;
|
||||||
wxNode *thisNode = FindTabNodeAndColumn(control, &col);
|
wxList::compatibility_iterator thisNode = FindTabNodeAndColumn(control, &col);
|
||||||
if (!thisNode)
|
if (!thisNode)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
wxNode *otherNode = firstLayer->Item(col);
|
wxList::compatibility_iterator otherNode = firstLayer->Item(col);
|
||||||
if (!otherNode)
|
if (!otherNode)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@@ -1062,11 +1065,11 @@ void wxTabView::SetTabSelection(int sel, bool activateTool)
|
|||||||
// Find tab control for id
|
// Find tab control for id
|
||||||
wxTabControl *wxTabView::FindTabControlForId(int id) const
|
wxTabControl *wxTabView::FindTabControlForId(int id) const
|
||||||
{
|
{
|
||||||
wxNode *node1 = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator node1 = m_layers.GetFirst();
|
||||||
while (node1)
|
while (node1)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)node1->GetData();
|
wxTabLayer *layer = (wxTabLayer *)node1->GetData();
|
||||||
wxNode *node2 = layer->GetFirst();
|
wxList::compatibility_iterator node2 = layer->GetFirst();
|
||||||
while (node2)
|
while (node2)
|
||||||
{
|
{
|
||||||
wxTabControl *control = (wxTabControl *)node2->GetData();
|
wxTabControl *control = (wxTabControl *)node2->GetData();
|
||||||
@@ -1082,25 +1085,25 @@ wxTabControl *wxTabView::FindTabControlForId(int id) const
|
|||||||
// Find tab control for layer, position (starting from zero)
|
// Find tab control for layer, position (starting from zero)
|
||||||
wxTabControl *wxTabView::FindTabControlForPosition(int layer, int position) const
|
wxTabControl *wxTabView::FindTabControlForPosition(int layer, int position) const
|
||||||
{
|
{
|
||||||
wxNode *node1 = m_layers.Item(layer);
|
wxTabLayerList::compatibility_iterator node1 = m_layers.Item(layer);
|
||||||
if (!node1)
|
if (!node1)
|
||||||
return (wxTabControl *) NULL;
|
return (wxTabControl *) NULL;
|
||||||
wxTabLayer *tabLayer = (wxTabLayer *)node1->GetData();
|
wxTabLayer *tabLayer = (wxTabLayer *)node1->GetData();
|
||||||
wxNode *node2 = tabLayer->Item(position);
|
wxList::compatibility_iterator node2 = tabLayer->Item(position);
|
||||||
if (!node2)
|
if (!node2)
|
||||||
return (wxTabControl *) NULL;
|
return (wxTabControl *) NULL;
|
||||||
return (wxTabControl *)node2->GetData();
|
return (wxTabControl *)node2->GetData();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the node and the column at which this control is positioned.
|
// Find the node and the column at which this control is positioned.
|
||||||
wxNode *wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
|
wxList::compatibility_iterator wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
|
||||||
{
|
{
|
||||||
wxNode *node1 = m_layers.GetFirst();
|
wxTabLayerList::compatibility_iterator node1 = m_layers.GetFirst();
|
||||||
while (node1)
|
while (node1)
|
||||||
{
|
{
|
||||||
wxTabLayer *layer = (wxTabLayer *)node1->GetData();
|
wxTabLayer *layer = (wxTabLayer *)node1->GetData();
|
||||||
int c = 0;
|
int c = 0;
|
||||||
wxNode *node2 = layer->GetFirst();
|
wxList::compatibility_iterator node2 = layer->GetFirst();
|
||||||
while (node2)
|
while (node2)
|
||||||
{
|
{
|
||||||
wxTabControl *cnt = (wxTabControl *)node2->GetData();
|
wxTabControl *cnt = (wxTabControl *)node2->GetData();
|
||||||
@@ -1114,7 +1117,7 @@ wxNode *wxTabView::FindTabNodeAndColumn(wxTabControl *control, int *col) const
|
|||||||
}
|
}
|
||||||
node1 = node1->GetNext();
|
node1 = node1->GetNext();
|
||||||
}
|
}
|
||||||
return (wxNode *) NULL;
|
return wxList::compatibility_iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxTabView::CalculateTabWidth(int noTabs, bool adjustView)
|
int wxTabView::CalculateTabWidth(int noTabs, bool adjustView)
|
||||||
@@ -1214,7 +1217,8 @@ void wxTabbedPanel::OnPaint(wxPaintEvent& WXUNUSED(event) )
|
|||||||
|
|
||||||
IMPLEMENT_CLASS(wxPanelTabView, wxTabView)
|
IMPLEMENT_CLASS(wxPanelTabView, wxTabView)
|
||||||
|
|
||||||
wxPanelTabView::wxPanelTabView(wxPanel *pan, long style): wxTabView(style), m_tabWindows(wxKEY_INTEGER)
|
wxPanelTabView::wxPanelTabView(wxPanel *pan, long style)
|
||||||
|
: wxTabView(style)
|
||||||
{
|
{
|
||||||
m_panel = pan;
|
m_panel = pan;
|
||||||
m_currentWindow = (wxWindow *) NULL;
|
m_currentWindow = (wxWindow *) NULL;
|
||||||
@@ -1252,24 +1256,22 @@ void wxPanelTabView::OnTabActivate(int activateId, int deactivateId)
|
|||||||
|
|
||||||
void wxPanelTabView::AddTabWindow(int id, wxWindow *window)
|
void wxPanelTabView::AddTabWindow(int id, wxWindow *window)
|
||||||
{
|
{
|
||||||
m_tabWindows.Append((long)id, 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
|
wxWindow *wxPanelTabView::GetTabWindow(int id) const
|
||||||
{
|
{
|
||||||
wxNode *node = m_tabWindows.Find((long)id);
|
wxIntToWindowHashMap::const_iterator it = m_tabWindows.find(id);
|
||||||
if (!node)
|
return it == m_tabWindows.end() ? NULL : it->second;
|
||||||
return (wxWindow *) NULL;
|
|
||||||
return (wxWindow *)node->GetData();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxPanelTabView::ClearWindows(bool deleteWindows)
|
void wxPanelTabView::ClearWindows(bool deleteWindows)
|
||||||
{
|
{
|
||||||
if (deleteWindows)
|
if (deleteWindows)
|
||||||
m_tabWindows.DeleteContents(TRUE);
|
WX_CLEAR_HASH_MAP(wxIntToWindowHashMap, m_tabWindows);
|
||||||
m_tabWindows.Clear();
|
m_tabWindows.clear();
|
||||||
m_tabWindows.DeleteContents(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxPanelTabView::ShowWindowForTab(int id)
|
void wxPanelTabView::ShowWindowForTab(int id)
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
#include "wx/timer.h"
|
#include "wx/timer.h"
|
||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
#include "wx/list.h"
|
#include "wx/hashmap.h"
|
||||||
|
|
||||||
#ifdef __VMS__
|
#ifdef __VMS__
|
||||||
#pragma message disable nosimpint
|
#pragma message disable nosimpint
|
||||||
@@ -27,14 +27,16 @@
|
|||||||
|
|
||||||
#include "wx/motif/private.h"
|
#include "wx/motif/private.h"
|
||||||
|
|
||||||
IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
|
IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject);
|
||||||
|
|
||||||
static wxList wxTimerList(wxKEY_INTEGER);
|
WX_DECLARE_VOIDPTR_HASH_MAP(wxTimer*, wxTimerHashMap);
|
||||||
|
|
||||||
|
static wxTimerHashMap s_timers;
|
||||||
|
|
||||||
void wxTimerCallback (wxTimer * timer)
|
void wxTimerCallback (wxTimer * timer)
|
||||||
{
|
{
|
||||||
// Check to see if it's still on
|
// Check to see if it's still on
|
||||||
if (!wxTimerList.Find((long)timer))
|
if (s_timers.find(timer) == s_timers.end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (timer->m_id == 0)
|
if (timer->m_id == 0)
|
||||||
@@ -59,8 +61,8 @@ void wxTimer::Init()
|
|||||||
|
|
||||||
wxTimer::~wxTimer()
|
wxTimer::~wxTimer()
|
||||||
{
|
{
|
||||||
wxTimer::Stop();
|
Stop();
|
||||||
wxTimerList.DeleteObject(this);
|
s_timers.erase(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxTimer::Start(int milliseconds, bool mode)
|
bool wxTimer::Start(int milliseconds, bool mode)
|
||||||
@@ -69,8 +71,8 @@ bool wxTimer::Start(int milliseconds, bool mode)
|
|||||||
|
|
||||||
(void)wxTimerBase::Start(milliseconds, mode);
|
(void)wxTimerBase::Start(milliseconds, mode);
|
||||||
|
|
||||||
if (!wxTimerList.Find((long)this))
|
if (s_timers.find(this) == s_timers.end())
|
||||||
wxTimerList.Append((long)this, this);
|
s_timers[this] = this;
|
||||||
|
|
||||||
m_id = XtAppAddTimeOut((XtAppContext) wxTheApp->GetAppContext(),
|
m_id = XtAppAddTimeOut((XtAppContext) wxTheApp->GetAppContext(),
|
||||||
m_milli,
|
m_milli,
|
||||||
|
Reference in New Issue
Block a user