/////////////////////////////////////////////////////////////////////////////
-// Name: checkbox.cpp
+// Name: src/os2/checkbox.cpp
// Purpose: wxCheckBox
// Author: David Webster
// Modified by:
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#include "wx/checkbox.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/os2/private.h"
// macros
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl)
IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox)
-#endif
+
+extern void wxAssociateWinWithHandle( HWND hWnd
+ ,wxWindowOS2* pWin
+ );
// ============================================================================
// 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);
- return TRUE;
-}
-
-// Single check box item
-bool wxCheckBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
- const wxPoint& pos,
- const wxSize& size, long style,
-#if wxUSE_VALIDATORS
- const wxValidator& validator,
-#endif
- const wxString& name)
+ 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,
+ const wxValidator& rValidator,
+ const wxString& rsName )
{
- SetName(name);
-#if wxUSE_VALIDATORS
- SetValidator(validator);
-#endif
- if (parent) parent->AddChild(this);
-
- SetBackgroundColour(parent->GetBackgroundColour()) ;
- SetForegroundColour(parent->GetForegroundColour()) ;
-
- m_windowStyle = style;
-
- wxString Label = label;
- if (Label == wxT(""))
- Label = wxT(" "); // Apparently needed or checkbox won't show
-
- if ( id == -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
-
- // Subclass again for purposes of dialog editing mode
- SubclassWin(m_hWnd);
-
- SetFont(parent->GetFont());
-
- SetSize(x, y, width, height);
-
- return FALSE;
-}
-
-void wxCheckBox::SetLabel(const wxString& label)
+ if (!CreateControl( pParent
+ ,vId
+ ,rPos
+ ,rSize
+ ,lStyle
+ ,rValidator
+ ,rsName
+ ))
+ return false;
+
+
+ long osStyle = BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE;
+
+ bool bOk = OS2CreateControl( wxT("BUTTON")
+ ,osStyle
+ ,rPos
+ ,rSize
+ ,rsLabel
+ ,0
+ );
+ m_backgroundColour = pParent->GetBackgroundColour();
+
+ LONG lColor = (LONG)m_backgroundColour.GetPixel();
+ ::WinSetPresParam( m_hWnd
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ wxAssociateWinWithHandle(m_hWnd, this);
+ return bOk;
+} // end of wxCheckBox::Create
+
+void wxCheckBox::SetLabel( const wxString& rsLabel )
{
- // TODO
-}
+ wxString sLabel=::wxPMTextToLabel(rsLabel);
+ ::WinSetWindowText(GetHwnd(), sLabel.c_str());
+} // end of wxCheckBox::SetLabel
-wxSize wxCheckBox::DoGetBestSize()
+wxSize wxCheckBox::DoGetBestSize() const
{
- int wCheckbox, hCheckbox;
-
- wxString str = wxGetWindowText(GetHWND());
-
- if ( !str.IsEmpty() )
+ // We should probably compute nCheckSize but it seems to be a constant
+ // independent of its label's font size and not made available by OS/2.
+ int nCheckSize = RADIO_SIZE;
+ int nWidthCheckbox;
+ int nHeightCheckbox;
+ wxString sStr = wxGetWindowText(GetHWND());
+
+ if (!sStr.empty())
{
- GetTextExtent(str, &wCheckbox, &hCheckbox);
- wCheckbox += RADIO_SIZE;
-
- if ( hCheckbox < RADIO_SIZE )
- hCheckbox = RADIO_SIZE;
+ GetTextExtent( sStr
+ ,&nWidthCheckbox
+ ,&nHeightCheckbox
+ );
+ nWidthCheckbox += nCheckSize;
+
+ 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;
-}
-
-WXHBRUSH wxCheckBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
- WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
-{
- // 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);
+ return((LONGFROMMR(::WinSendMsg(GetHwnd(), BM_QUERYCHECK, (MPARAM)0, (MPARAM)0)) == 1L));
+} // end of wxCheckBox::GetValue
- ::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)
+void wxCheckBox::Command ( wxCommandEvent& rEvent )
{
- 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,
-#if wxUSE_VALIDATORS
- const wxValidator& validator,
-#endif
- const wxString& name)
+bool wxBitmapCheckBox::Create( wxWindow* pParent,
+ wxWindowID vId,
+ const wxBitmap* WXUNUSED(pLabel),
+ const wxPoint& rPos,
+ const wxSize& rSize,
+ long lStyle,
+ const wxValidator& rValidator,
+ 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);
+ //
+ SubclassWin((WXHWND)hButton);
- SetSize(x, y, width, height);
+ SetSize( nX
+ ,nY
+ ,nWidth
+ ,nHeight
+ );
-// TODO: ShowWindow(wx_button, SW_SHOW);
+ ::WinShowWindow(hButton, TRUE);
+ return true;
+} // end of wxBitmapCheckBox::Create
- return TRUE;
-}
-
-void wxBitmapCheckBox::SetLabel(const wxBitmap& bitmap)
+void wxBitmapCheckBox::SetLabel( const wxBitmap& WXUNUSED(rBitmap) )
{
wxFAIL_MSG(wxT("not implemented"));
-}
-
+} // end of wxBitmapCheckBox::SetLabel