X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f0a126fe7ad375110956325f8bdc3d3162f222c0..82baa5e4f1992b701e183544c935bcb424503f5b:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index c513eb07c9..312867d1a4 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -51,23 +51,66 @@ // ---------------------------------------------------------------------------- #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") -WX_BEGIN_PROPERTIES_TABLE(wxSpinCtrl) - WX_PROPERTY( ValueString , wxString , SetValue , GetValue , ) ; - WX_PROPERTY( Value , int , SetValue, GetValue, 0 ) - WX_PROPERTY( Min , int , SetMin, GetMin, 0 ) - WX_PROPERTY( Max , int , SetMax, GetMax, 0 ) +wxBEGIN_PROPERTIES_TABLE(wxSpinCtrl) + wxEVENT_RANGE_PROPERTY( Spin , wxEVT_SCROLL_TOP , wxEVT_SCROLL_ENDSCROLL , 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 */ -WX_END_PROPERTIES_TABLE() +wxEND_PROPERTIES_TABLE() -WX_BEGIN_HANDLERS_TABLE(wxSpinCtrl) -WX_END_HANDLERS_TABLE() +wxBEGIN_HANDLERS_TABLE(wxSpinCtrl) +wxEND_HANDLERS_TABLE() -WX_CONSTRUCTOR_6( wxSpinCtrl , wxWindow* , Parent , wxWindowID , Id , wxString , ValueString , wxPoint , Position , wxSize , Size , long , WindowStyle ) +wxCONSTRUCTOR_6( wxSpinCtrl , wxWindow* , Parent , wxWindowID , Id , wxString , ValueString , wxPoint , Position , wxSize , Size , long , WindowStyle ) #else IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl) #endif @@ -106,7 +149,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, WPARAM wParam, LPARAM lParam) { - wxSpinCtrl *spin = (wxSpinCtrl *)::GetWindowLong(hwnd, GWL_USERDATA); + wxSpinCtrl *spin = (wxSpinCtrl *)wxGetWindowUserData(hwnd); // forward some messages (the key and focus ones only so far) to // the spin ctrl @@ -115,7 +158,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, case WM_SETFOCUS: // if the focus comes from the spin control itself, don't set it // back to it -- we don't want to go into an infinite loop - if ( wParam == spin->GetHWND() ) + if ( (WXHWND)wParam == spin->GetHWND() ) break; //else: fall through @@ -127,7 +170,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, spin->MSWWindowProc(message, wParam, lParam); // The control may have been deleted at this point, so check. - if (!(::IsWindow(hwnd) && ((wxSpinCtrl *)::GetWindowLong(hwnd, GWL_USERDATA)) == spin)) + if ( !::IsWindow(hwnd) || wxGetWindowUserData(hwnd) != spin ) return 0; break; @@ -143,8 +186,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, /* static */ wxSpinCtrl *wxSpinCtrl::GetSpinForTextCtrl(WXHWND hwndBuddy) { - wxSpinCtrl *spin = (wxSpinCtrl *)::GetWindowLong((HWND)hwndBuddy, - GWL_USERDATA); + wxSpinCtrl *spin = (wxSpinCtrl *)wxGetWindowUserData((HWND)hwndBuddy); int i = ms_allSpins.Index(spin); @@ -254,7 +296,11 @@ bool wxSpinCtrl::Create(wxWindow *parent, style |= wxSP_VERTICAL; if ( (style & wxBORDER_MASK) == wxBORDER_DEFAULT ) +#ifdef __WXWINCE__ + style |= wxBORDER_SIMPLE; +#else style |= wxBORDER_SUNKEN; +#endif SetWindowStyle(style); @@ -320,9 +366,9 @@ bool wxSpinCtrl::Create(wxWindow *parent, SetValue(initial); // subclass the text ctrl to be able to intercept some events - m_wndProcBuddy = (WXFARPROC)::GetWindowLong(GetBuddyHwnd(), GWL_WNDPROC); - ::SetWindowLong(GetBuddyHwnd(), GWL_USERDATA, (LONG)this); - ::SetWindowLong(GetBuddyHwnd(), GWL_WNDPROC, (LONG)wxBuddyTextWndProc); + wxSetWindowUserData(GetBuddyHwnd(), this); + m_wndProcBuddy = (WXFARPROC)wxSetWindowProc(GetBuddyHwnd(), + wxBuddyTextWndProc); // should have the same font as the other controls SetFont(GetParent()->GetFont()); @@ -395,7 +441,7 @@ int wxSpinCtrl::GetValue() const void wxSpinCtrl::SetSelection(long from, long to) { - // if from and to are both -1, it means (in wxWindows) that all text should + // if from and to are both -1, it means (in wxWidgets) that all text should // be selected - translate into Windows convention if ( (from == -1) && (to == -1) ) { @@ -483,7 +529,12 @@ wxSize wxSpinCtrl::DoGetBestSize() const wxGetCharSize(GetHWND(), NULL, &y, &GetFont()); y = EDIT_HEIGHT_FROM_CHAR_HEIGHT(y); - if ( sizeBtn.y < y ) + // JACS: we should always use the height calculated + // from above, because otherwise we'll get a spin control + // that's too big. So never use the height calculated + // from wxSpinButton::DoGetBestSize(). + + // if ( sizeBtn.y < y ) { // make the text tall enough sizeBtn.y = y;