m_isShown = FALSE;
m_isEnabled = TRUE;
- // no client data
- m_clientObject = (wxClientData *)NULL;
+ // no client data (yet)
m_clientData = NULL;
+ m_clientDataType = ClientData_None;
// the default event handler is just this window
m_eventHandler = this;
const wxPoint& WXUNUSED(pos),
const wxSize& WXUNUSED(size),
long style,
+ const wxValidator& validator,
const wxString& name)
{
// m_isWindow is set to TRUE in wxWindowBase::Init() as well as many other
SetName(name);
SetWindowStyleFlag(style);
SetParent(parent);
+ SetValidator(validator);
return TRUE;
}
int width, height;
GetSize(&width, &height);
- int new_x = -1,
- new_y = -1;
+ int xNew = -1,
+ yNew = -1;
if ( direction & wxHORIZONTAL )
- new_x = (widthParent - width)/2;
+ xNew = (widthParent - width)/2;
if ( direction & wxVERTICAL )
- new_y = (heightParent - height)/2;
+ yNew = (heightParent - height)/2;
- Move(new_x, new_y);
-}
-
-// Center TopLevel windows over thier parent instead of the whole screen
-void wxWindowBase::CentreOnParent(int direction)
-{
- wxPoint ppos;
- wxSize psze;
- wxSize wsze;
- wxWindow* parent = GetParent();
- int x, y;
+ // controls are always centered on their parent because it doesn't make
+ // sense to centre them on the screen
+ if ( (direction & wxCENTER_FRAME) || wxDynamicCast(this, wxControl) )
+ {
+ // adjust to the parents client area origin
+ wxPoint posParent = parent->ClientToScreen(wxPoint(0, 0));
- if (!parent || !IsTopLevel()) {
- Centre(direction);
- return;
+ xNew += posParent.x;
+ yNew += posParent.y;
}
- psze = parent->GetSize();
- ppos = parent->ClientToScreen(wxPoint(0,0));
- wsze = GetSize();
-
- x = y = -1;
-
- if (direction == wxBOTH || direction == wxHORIZONTAL)
- x = ppos.x + (psze.x - wsze.x)/2;
- if (direction == wxBOTH || direction == wxVERTICAL)
- y = ppos.y + (psze.y - wsze.y)/2;
-
- Move(x, y);
+ Move(xNew, yNew);
}
// fits the window around the children
return pt2;
}
+// ----------------------------------------------------------------------------
+// client data
+// ----------------------------------------------------------------------------
+
+void wxWindowBase::DoSetClientObject( wxClientData *data )
+{
+ wxASSERT_MSG( m_clientDataType != ClientData_Void,
+ _T("can't have both object and void client data") );
+
+ if ( m_clientObject )
+ delete m_clientObject;
+
+ m_clientObject = data;
+ m_clientDataType = ClientData_Object;
+}
+
+wxClientData *wxWindowBase::DoGetClientObject() const
+{
+ wxASSERT_MSG( m_clientDataType == ClientData_Object,
+ _T("this window doesn't have object client data") );
+
+ return m_clientObject;
+}
+
+void wxWindowBase::DoSetClientData( void *data )
+{
+ wxASSERT_MSG( m_clientDataType != ClientData_Object,
+ _T("can't have both object and void client data") );
+
+ m_clientData = data;
+ m_clientDataType = ClientData_Void;
+}
+
+void *wxWindowBase::DoGetClientData() const
+{
+ wxASSERT_MSG( m_clientDataType == ClientData_Void,
+ _T("this window doesn't have void client data") );
+
+ return m_clientData;
+}
+
// ----------------------------------------------------------------------------
// event handlers
// ----------------------------------------------------------------------------