X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f38374d0d7aa865e9bbe8ee61b75b94ffcdfb220..91b4bd63177025704dd39679a2a7c4198eeb7909:/src/os2/checkbox.cpp?ds=sidebyside diff --git a/src/os2/checkbox.cpp b/src/os2/checkbox.cpp index c4a3b2f099..2c18c0eb22 100644 --- a/src/os2/checkbox.cpp +++ b/src/os2/checkbox.cpp @@ -15,6 +15,9 @@ #ifndef WX_PRECOMP #include "wx/checkbox.h" #include "wx/brush.h" + #include "wx/scrolwin.h" + #include "wx/dcscreen.h" + #include "wx/settings.h" #endif #include "wx/os2/private.h" @@ -23,10 +26,8 @@ // macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl) IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox) -#endif // ============================================================================ // implementation @@ -36,93 +37,167 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox) // wxCheckBox // ---------------------------------------------------------------------------- -bool wxCheckBox::OS2Command(WXUINT WXUNUSED(param), WXWORD WXUNUSED(id)) +bool wxCheckBox::OS2Command( + WXUINT WXUNUSED(uParam) +, WXWORD WXUNUSED(wId) +) { - wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId); - event.SetInt(GetValue()); - event.SetEventObject(this); - ProcessCommand(event); + wxCommandEvent rEvent( wxEVT_COMMAND_CHECKBOX_CLICKED + ,m_windowId + ); + rEvent.SetInt(GetValue()); + rEvent.SetEventObject(this); + ProcessCommand(rEvent); return TRUE; -} - -// Single check box item -bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, - const wxPoint& pos, - const wxSize& size, long style, +} // end of wxCheckBox::OS2Command + +bool wxCheckBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxString& rsLabel +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle #if wxUSE_VALIDATORS - const wxValidator& validator, +, const wxValidator& rValidator #endif - const wxString& name) +, const wxString& rsName +) { - SetName(name); + SetName(rsName); #if wxUSE_VALIDATORS - SetValidator(validator); + SetValidator(rValidator); #endif - if (parent) parent->AddChild(this); + if (pParent) + pParent->AddChild(this); - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; + SetBackgroundColour(pParent->GetBackgroundColour()); + SetForegroundColour(pParent->GetForegroundColour()); + m_windowStyle = lStyle; - m_windowStyle = style; + wxString sLabel = rsLabel; - wxString Label = label; - if (Label == wxT("")) - Label = wxT(" "); // Apparently needed or checkbox won't show + if (sLabel == wxT("")) + sLabel = wxT(" "); // Apparently needed or checkbox won't show - if ( id == -1 ) + if (vId == -1 ) m_windowId = NewControlId(); else - m_windowId = id; - - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; - - // TODO: create checkbox - + m_windowId = vId; + + int nX = rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; + long lSstyle = 0L; + + lSstyle = BS_AUTOCHECKBOX | + WS_TABSTOP | + WS_VISIBLE; + if (lStyle & wxCLIP_SIBLINGS ) + lSstyle |= WS_CLIPSIBLINGS; + + // + // If the parent is a scrolled window the controls must + // have this style or they will overlap the scrollbars + // + if (pParent) + if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) || + pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow))) + lSstyle |= WS_CLIPSIBLINGS; + + m_hWnd = (WXHWND)::WinCreateWindow ( GetHwndOf(pParent) + ,WC_BUTTON + ,rsLabel.c_str() + ,lSstyle + ,0, 0, 0, 0 + ,GetWinHwnd(pParent) + ,HWND_TOP + ,(HMENU)m_windowId + ,NULL + ,NULL + ); + + // // Subclass again for purposes of dialog editing mode + // SubclassWin(m_hWnd); - SetFont(parent->GetFont()); + LONG lColor = (LONG)m_backgroundColour.GetPixel(); - SetSize(x, y, width, height); + ::WinSetPresParam( m_hWnd + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); - return FALSE; -} + SetFont(*wxSMALL_FONT); -void wxCheckBox::SetLabel(const wxString& label) -{ - // TODO -} + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); + return TRUE; +} // end of wxCheckBox::Create -wxSize wxCheckBox::DoGetBestSize() +void wxCheckBox::SetLabel( + const wxString& rsLabel +) { - int wCheckbox, hCheckbox; + ::WinSetWindowText(GetHwnd(), rsLabel.c_str()); +} // end of wxCheckBox::SetLabel - wxString str = wxGetWindowText(GetHWND()); +wxSize wxCheckBox::DoGetBestSize() const +{ + static int nCheckSize = 0; - if ( !str.IsEmpty() ) + if (!nCheckSize) { - GetTextExtent(str, &wCheckbox, &hCheckbox); - wCheckbox += RADIO_SIZE; + wxScreenDC vDc; + + vDc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); - if ( hCheckbox < RADIO_SIZE ) - hCheckbox = RADIO_SIZE; + // + // The height of a standard button in the dialog units is 8, + // translate this to pixels (as one dialog unit is precisely equal to + // 8 character heights, it's just the char height) + // + nCheckSize = vDc.GetCharHeight(); + } + + int nWidthCheckbox; + int nHeightCheckbox; + wxString sStr = wxGetWindowText(GetHWND()); + + if (!sStr.IsEmpty()) + { + GetTextExtent( sStr + ,&nWidthCheckbox + ,&nHeightCheckbox + ); + nWidthCheckbox += nCheckSize + GetCharWidth(); + + if (nHeightCheckbox < nCheckSize) + nHeightCheckbox = nCheckSize; } else { - wCheckbox = RADIO_SIZE; - hCheckbox = RADIO_SIZE; + nWidthCheckbox = nCheckSize; + nHeightCheckbox = nCheckSize; } - return wxSize(wCheckbox, hCheckbox); -} + return wxSize( nWidthCheckbox + ,nHeightCheckbox + ); +} // end of wxCheckBox::DoGetBestSize -void wxCheckBox::SetValue(bool val) +void wxCheckBox::SetValue( + bool bValue +) { - // TODO -} + ::WinSendMsg(GetHwnd(), BM_SETCHECK, (MPARAM)bValue, 0); +} // end of wxCheckBox::SetValue #ifndef BST_CHECKED #define BST_CHECKED 0x0001 @@ -130,101 +205,82 @@ void wxCheckBox::SetValue(bool val) bool wxCheckBox::GetValue() const { - // TODO - return FALSE; -} + return((LONGFROMMR(::WinSendMsg(GetHwnd(), BM_QUERYCHECK, (MPARAM)0, (MPARAM)0)) == 1L)); +} // end of wxCheckBox::GetValue -WXHBRUSH wxCheckBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, - WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +void wxCheckBox::Command ( + wxCommandEvent& rEvent +) { - // TODO: - /* -#if wxUSE_CTL3D - if ( m_useCtl3D ) - { - HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam); - - return (WXHBRUSH) hbrush; - } -#endif - - if (GetParent()->GetTransparentBackground()) - SetBkMode((HDC) pDC, TRANSPARENT); - else - SetBkMode((HDC) pDC, OPAQUE); - - ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue())); - -*/ - - wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID); - - - // Note that this will be cleaned up in wxApp::OnIdle, if backgroundBrush - // has a zero usage count. -// backgroundBrush->RealizeResource(); - return (WXHBRUSH) backgroundBrush->GetResourceHandle(); -} - -void wxCheckBox::Command (wxCommandEvent & event) -{ - SetValue ((event.GetInt() != 0)); - ProcessCommand (event); -} + SetValue((rEvent.GetInt() != 0)); + ProcessCommand(rEvent); +} // end of wxCheckBox:: Command // ---------------------------------------------------------------------------- // wxBitmapCheckBox // ---------------------------------------------------------------------------- -bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *label, - const wxPoint& pos, - const wxSize& size, long style, +bool wxBitmapCheckBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxBitmap* pLabel +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle #if wxUSE_VALIDATORS - const wxValidator& validator, +, const wxValidator& rValidator #endif - const wxString& name) +, const wxString& rsName +) { - SetName(name); + SetName(rsName); #if wxUSE_VALIDATORS - SetValidator(validator); + SetValidator(rValidator); #endif - if (parent) parent->AddChild(this); + if (pParent) + pParent->AddChild(this); - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; - m_windowStyle = style; + SetBackgroundColour(pParent->GetBackgroundColour()) ; + SetForegroundColour(pParent->GetForegroundColour()) ; + m_windowStyle = lStyle; - if ( id == -1 ) + if (vId == -1) m_windowId = NewControlId(); else - m_windowId = id; + m_windowId = vId; - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; + int nX = rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; - checkWidth = -1 ; - checkHeight = -1 ; - long msStyle = CHECK_FLAGS; + m_nCheckWidth = -1 ; + m_nCheckHeight = -1 ; +// long msStyle = CHECK_FLAGS; - HWND wx_button = 0; // TODO: Create the bitmap checkbox + HWND hButton = 0; // TODO: Create the bitmap checkbox - m_hWnd = (WXHWND)wx_button; + m_hWnd = (WXHWND)hButton; + // // Subclass again for purposes of dialog editing mode - SubclassWin((WXHWND)wx_button); - - SetSize(x, y, width, height); + // + SubclassWin((WXHWND)hButton); -// TODO: ShowWindow(wx_button, SW_SHOW); + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); + ::WinShowWindow(hButton, TRUE); return TRUE; -} +} // end of wxBitmapCheckBox::Create -void wxBitmapCheckBox::SetLabel(const wxBitmap& bitmap) +void wxBitmapCheckBox::SetLabel( + const wxBitmap& rBitmap +) { wxFAIL_MSG(wxT("not implemented")); -} +} // end of wxBitmapCheckBox::SetLabel