]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/checkbox.cpp
Stripped out miscellaneous Motif/Xt-specific code
[wxWidgets.git] / src / os2 / checkbox.cpp
index 258a9cc6c39bc0b89b2d57d92bd70dfe89eb7537..e2b20ca4d74bbafe047d7b525e1a7a179f252555 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 // 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