/////////////////////////////////////////////////////////////////////////////
// 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