X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bc73fe96a2ba3e72338de7579f4b27c9f11a2fc3..90fae9d2cfd82625c8c8279660237514470bc31a:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index bf6bd96755..19e302e6d4 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -48,71 +48,6 @@ // macros // ---------------------------------------------------------------------------- -#if wxUSE_EXTENDED_RTTI -WX_DEFINE_FLAGS( wxSpinCtrlStyle ) - -wxBEGIN_FLAGS( wxSpinCtrlStyle ) - // new style border flags, we put them first to - // use them for streaming out - wxFLAGS_MEMBER(wxBORDER_SIMPLE) - wxFLAGS_MEMBER(wxBORDER_SUNKEN) - wxFLAGS_MEMBER(wxBORDER_DOUBLE) - wxFLAGS_MEMBER(wxBORDER_RAISED) - wxFLAGS_MEMBER(wxBORDER_STATIC) - wxFLAGS_MEMBER(wxBORDER_NONE) - - // old style border flags - wxFLAGS_MEMBER(wxSIMPLE_BORDER) - wxFLAGS_MEMBER(wxSUNKEN_BORDER) - wxFLAGS_MEMBER(wxDOUBLE_BORDER) - wxFLAGS_MEMBER(wxRAISED_BORDER) - wxFLAGS_MEMBER(wxSTATIC_BORDER) - wxFLAGS_MEMBER(wxBORDER) - - // standard window styles - wxFLAGS_MEMBER(wxTAB_TRAVERSAL) - wxFLAGS_MEMBER(wxCLIP_CHILDREN) - wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW) - wxFLAGS_MEMBER(wxWANTS_CHARS) - wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE) - wxFLAGS_MEMBER(wxALWAYS_SHOW_SB ) - wxFLAGS_MEMBER(wxVSCROLL) - wxFLAGS_MEMBER(wxHSCROLL) - - wxFLAGS_MEMBER(wxSP_HORIZONTAL) - wxFLAGS_MEMBER(wxSP_VERTICAL) - wxFLAGS_MEMBER(wxSP_ARROW_KEYS) - wxFLAGS_MEMBER(wxSP_WRAP) - -wxEND_FLAGS( wxSpinCtrlStyle ) - -IMPLEMENT_DYNAMIC_CLASS_XTI(wxSpinCtrl, wxControl,"wx/spinbut.h") - -wxBEGIN_PROPERTIES_TABLE(wxSpinCtrl) - wxEVENT_RANGE_PROPERTY( Spin , wxEVT_SCROLL_TOP , wxEVT_SCROLL_CHANGED , wxSpinEvent ) - wxEVENT_PROPERTY( Updated , wxEVT_COMMAND_SPINCTRL_UPDATED , wxCommandEvent ) - wxEVENT_PROPERTY( TextUpdated , wxEVT_COMMAND_TEXT_UPDATED , wxCommandEvent ) - wxEVENT_PROPERTY( TextEnter , wxEVT_COMMAND_TEXT_ENTER , wxCommandEvent ) - - wxPROPERTY( ValueString , wxString , SetValue , GetValue , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) ; - wxPROPERTY( Value , int , SetValue, GetValue, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY( Min , int , SetMin, GetMin, 0, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) - wxPROPERTY( Max , int , SetMax, GetMax, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY_FLAGS( WindowStyle , wxSpinCtrlStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style -/* - TODO PROPERTIES - style wxSP_ARROW_KEYS -*/ -wxEND_PROPERTIES_TABLE() - -wxBEGIN_HANDLERS_TABLE(wxSpinCtrl) -wxEND_HANDLERS_TABLE() - -wxCONSTRUCTOR_6( wxSpinCtrl , wxWindow* , Parent , wxWindowID , Id , wxString , ValueString , wxPoint , Position , wxSize , Size , long , WindowStyle ) -#else -IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl) -#endif - BEGIN_EVENT_TABLE(wxSpinCtrl, wxSpinButton) EVT_CHAR(wxSpinCtrl::OnChar) EVT_SET_FOCUS(wxSpinCtrl::OnSetFocus) @@ -594,16 +529,15 @@ bool wxSpinCtrl::Reparent(wxWindowBase *newParent) // window normally, but we recreate the updown control and reassign its // buddy. + // Get the position before changing the parent as it would be offset after + // changing it. + const wxRect rect = GetRect(); + if ( !wxWindowBase::Reparent(newParent) ) return false; newParent->GetChildren().DeleteObject(this); - // preserve the old values - const wxSize size = GetSize(); - int value = GetValue(); - const wxRect btnRect = wxRectFromRECT(wxGetWindowRect(GetHwnd())); - // destroy the old spin button after detaching it from this wxWindow object // (notice that m_hWnd will be reset by UnsubclassWin() so save it first) const HWND hwndOld = GetHwnd(); @@ -615,13 +549,17 @@ bool wxSpinCtrl::Reparent(wxWindowBase *newParent) // create and initialize the new one if ( !wxSpinButton::Create(GetParent(), GetId(), - btnRect.GetPosition(), btnRect.GetSize(), + rect.GetPosition(), rect.GetSize(), GetWindowStyle(), GetName()) ) return false; - SetValue(value); + // reapply our values to wxSpinButton + wxSpinButton::SetValue(GetValue()); SetRange(m_min, m_max); - SetInitialSize(size); + + // also set the size again with wxSIZE_ALLOW_MINUS_ONE flag: this is + // necessary if our original position used -1 for either x or y + SetSize(rect, wxSIZE_ALLOW_MINUS_ONE); // associate it with the buddy control again ::SetParent(GetBuddyHwnd(), GetHwndOf(GetParent()));