X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..7d1f4c3ff01b09105c07d5e176a14428c834975e:/src/os2/checkbox.cpp diff --git a/src/os2/checkbox.cpp b/src/os2/checkbox.cpp index 258a9cc6c3..e2b20ca4d7 100644 --- a/src/os2/checkbox.cpp +++ b/src/os2/checkbox.cpp @@ -1,117 +1,282 @@ ///////////////////////////////////////////////////////////////////////////// // Name: checkbox.cpp // Purpose: wxCheckBox -// Author: AUTHOR +// Author: David Webster // Modified by: -// Created: 04/01/98 +// Created: 10/13/99 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) David Webster +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "checkbox.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#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/checkbox.h" +#include "wx/os2/private.h" + +// ---------------------------------------------------------------------------- +// macros +// ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl) IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox) -#endif -// Single check box item -bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, - const wxPoint& pos, - const wxSize& size, long style, - const wxValidator& validator, - const wxString& name) +// ============================================================================ +// implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxCheckBox +// ---------------------------------------------------------------------------- + +bool wxCheckBox::OS2Command( + WXUINT WXUNUSED(uParam) +, WXWORD WXUNUSED(wId) +) { - SetName(name); - SetValidator(validator); - m_windowStyle = style; + wxCommandEvent rEvent( wxEVT_COMMAND_CHECKBOX_CLICKED + ,m_windowId + ); + rEvent.SetInt(GetValue()); + rEvent.SetEventObject(this); + ProcessCommand(rEvent); + return TRUE; +} // 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& rValidator +#endif +, const wxString& rsName +) +{ + SetName(rsName); +#if wxUSE_VALIDATORS + SetValidator(rValidator); +#endif + if (pParent) + pParent->AddChild(this); - if (parent) parent->AddChild(this); + SetBackgroundColour(pParent->GetBackgroundColour()); + SetForegroundColour(pParent->GetForegroundColour()); + m_windowStyle = lStyle; - if ( id == -1 ) + wxString sLabel = rsLabel; + + if (sLabel == wxT("")) + sLabel = wxT(" "); // Apparently needed or checkbox won't show + + if (vId == -1 ) m_windowId = NewControlId(); else - m_windowId = id; + 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; + + 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 + ); - // TODO: create checkbox + // + // Subclass again for purposes of dialog editing mode + // + SubclassWin(m_hWnd); - return FALSE; -} + LONG lColor = (LONG)m_backgroundColour.GetPixel(); -void wxCheckBox::SetLabel(const wxString& label) + ::WinSetPresParam( m_hWnd + ,PP_BACKGROUNDCOLOR + ,sizeof(LONG) + ,(PVOID)&lColor + ); + + wxFont* pTextFont = new wxFont( 10 + ,wxMODERN + ,wxNORMAL + ,wxNORMAL + ); + SetFont(*pTextFont); + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); + delete pTextFont; + return TRUE; +} // end of wxCheckBox::Create + +void wxCheckBox::SetLabel( + const wxString& rsLabel +) { - // TODO -} + ::WinSetWindowText(GetHwnd(), rsLabel.c_str()); +} // end of wxCheckBox::SetLabel -void wxCheckBox::SetSize(int x, int y, int width, int height, int sizeFlags) +wxSize wxCheckBox::DoGetBestSize() const { - // TODO -} + static int nCheckSize = 0; + + if (!nCheckSize) + { + wxScreenDC vDc; + + vDc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); -void wxCheckBox::SetValue(bool val) + // + // 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 + { + nWidthCheckbox = nCheckSize; + nHeightCheckbox = nCheckSize; + } + + return wxSize( nWidthCheckbox + ,nHeightCheckbox + ); +} // end of wxCheckBox::DoGetBestSize + +void wxCheckBox::SetValue( + bool bValue +) { - // TODO -} + ::WinSendMsg(GetHwnd(), BM_SETCHECK, (MPARAM)bValue, 0); +} // end of wxCheckBox::SetValue + +#ifndef BST_CHECKED +#define BST_CHECKED 0x0001 +#endif bool wxCheckBox::GetValue() const { - // TODO - return FALSE; -} + return((LONGFROMMR(::WinSendMsg(GetHwnd(), BM_QUERYCHECK, (MPARAM)0, (MPARAM)0)) == 1L)); +} // end of wxCheckBox::GetValue -void wxCheckBox::Command (wxCommandEvent & event) +void wxCheckBox::Command ( + wxCommandEvent& rEvent +) { - SetValue ((event.GetInt() != 0)); - ProcessCommand (event); -} - -// Bitmap checkbox -bool wxBitmapCheckBox::Create(wxWindow *parent, wxWindowID id, const wxBitmap *label, - const wxPoint& pos, - const wxSize& size, long style, - const wxValidator& validator, - const wxString& name) + SetValue((rEvent.GetInt() != 0)); + ProcessCommand(rEvent); +} // end of wxCheckBox:: Command + +// ---------------------------------------------------------------------------- +// wxBitmapCheckBox +// ---------------------------------------------------------------------------- + +bool wxBitmapCheckBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxBitmap* pLabel +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle +#if wxUSE_VALIDATORS +, const wxValidator& rValidator +#endif +, const wxString& rsName +) { - SetName(name); - SetValidator(validator); - m_windowStyle = style; + SetName(rsName); +#if wxUSE_VALIDATORS + SetValidator(rValidator); +#endif + if (pParent) + pParent->AddChild(this); - if (parent) parent->AddChild(this); + 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; - // TODO: Create the bitmap checkbox + int nX = rPos.x; + int nY = rPos.y; + int nWidth = rSize.x; + int nHeight = rSize.y; - return FALSE; -} + m_nCheckWidth = -1 ; + m_nCheckHeight = -1 ; +// long msStyle = CHECK_FLAGS; -void wxBitmapCheckBox::SetLabel(const wxBitmap& bitmap) -{ - // TODO -} + HWND hButton = 0; // TODO: Create the bitmap checkbox -void wxBitmapCheckBox::SetSize(int x, int y, int width, int height, int sizeFlags) -{ - // TODO -} + m_hWnd = (WXHWND)hButton; -void wxBitmapCheckBox::SetValue(bool val) -{ - // TODO -} + // + // Subclass again for purposes of dialog editing mode + // + SubclassWin((WXHWND)hButton); -bool wxBitmapCheckBox::GetValue() const -{ - // TODOD - return FALSE; -} + SetSize( nX + ,nY + ,nWidth + ,nHeight + ); + ::WinShowWindow(hButton, TRUE); + return TRUE; +} // end of wxBitmapCheckBox::Create + +void wxBitmapCheckBox::SetLabel( + const wxBitmap& rBitmap +) +{ + wxFAIL_MSG(wxT("not implemented")); +} // end of wxBitmapCheckBox::SetLabel