#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"
// macros
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl)
IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox)
-#endif
// ============================================================================
// implementation
// 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,
- const wxValidator& validator,
- const wxString& name)
+} // 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(name);
- SetValidator(validator);
- if (parent) parent->AddChild(this);
+ SetName(rsName);
+#if wxUSE_VALIDATORS
+ SetValidator(rValidator);
+#endif
+ 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));
+
+ //
+ // 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 ( hCheckbox < RADIO_SIZE )
- hCheckbox = RADIO_SIZE;
+ 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
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,
- const wxValidator& validator,
- const wxString& name)
+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);
- if (parent) parent->AddChild(this);
+ SetName(rsName);
+#if wxUSE_VALIDATORS
+ SetValidator(rValidator);
+#endif
+ 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