1 ///////////////////////////////////////////////////////////////////////////// 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  13 #pragma implementation "checkbox.h" 
  17 #define XtDisplay XTDISPLAY 
  22 #include "wx/checkbox.h" 
  23 #include "wx/tglbtn.h" 
  27 #pragma message disable nosimpint 
  30 #include <Xm/LabelG.h> 
  31 #include <Xm/ToggleB.h> 
  32 #include <Xm/ToggleBG.h> 
  34 #pragma message enable nosimpint 
  37 #include "wx/motif/private.h" 
  39 void wxCheckBoxCallback (Widget w
, XtPointer clientData
, 
  42 IMPLEMENT_DYNAMIC_CLASS(wxCheckBox
, wxControl
) 
  44 // Single check box item 
  45 bool wxCheckBox::Create(wxWindow 
*parent
, wxWindowID id
, const wxString
& label
, 
  47                         const wxSize
& size
, long style
, 
  48                         const wxValidator
& validator
, 
  51     if( !wxControl::CreateControl( parent
, id
, pos
, size
, style
, validator
, 
  55     wxString 
label1(wxStripMenuCodes(label
)); 
  56     wxXmString 
text( label1 
); 
  58     Widget parentWidget 
= (Widget
) parent
->GetClientWidget(); 
  60     m_mainWidget 
= (WXWidget
) XtVaCreateManagedWidget ("toggle", 
  61         xmToggleButtonWidgetClass
, parentWidget
, 
  62         wxFont::GetFontTag(), m_font
.GetFontType(XtDisplay(parentWidget
)), 
  63         XmNlabelString
, text(), 
  64         XmNrecomputeSize
, False
, 
  67     XtAddCallback( (Widget
)m_mainWidget
, 
  68                    XmNvalueChangedCallback
, (XtCallbackProc
)wxCheckBoxCallback
, 
  71     XmToggleButtonSetState ((Widget
) m_mainWidget
, FALSE
, TRUE
); 
  73     AttachWidget( parent
, m_mainWidget
, (WXWidget
)NULL
, 
  74                   pos
.x
, pos
.y
, size
.x
, size
.y 
); 
  76     ChangeBackgroundColour(); 
  80 void wxCheckBox::SetValue(bool val
) 
  83     XmToggleButtonSetState ((Widget
) m_mainWidget
, (Boolean
) val
, TRUE
); 
  87 bool wxCheckBox::GetValue() const 
  89     return (XmToggleButtonGetState ((Widget
) m_mainWidget
) != 0); 
  92 void wxCheckBox::Command (wxCommandEvent 
& event
) 
  94     SetValue ((event
.GetInt() != 0)); 
  95     ProcessCommand (event
); 
  98 void wxCheckBoxCallback (Widget 
WXUNUSED(w
), XtPointer clientData
, 
  99                          XtPointer 
WXUNUSED(ptr
)) 
 101     wxCheckBox 
*item 
= (wxCheckBox 
*) clientData
; 
 103     if (item
->InSetValue()) 
 106     wxCommandEvent 
event (item
->m_evtType
, item
->GetId()); 
 107     event
.SetInt((int) item
->GetValue ()); 
 108     event
.SetEventObject(item
); 
 109     item
->ProcessCommand (event
); 
 112 void wxCheckBox::ChangeBackgroundColour() 
 114     wxComputeColours (XtDisplay((Widget
) m_mainWidget
), & m_backgroundColour
, 
 117     XtVaSetValues ((Widget
) m_mainWidget
, 
 118         XmNbackground
, g_itemColors
[wxBACK_INDEX
].pixel
, 
 119         XmNtopShadowColor
, g_itemColors
[wxTOPS_INDEX
].pixel
, 
 120         XmNbottomShadowColor
, g_itemColors
[wxBOTS_INDEX
].pixel
, 
 121         XmNforeground
, g_itemColors
[wxFORE_INDEX
].pixel
, 
 124     int selectPixel 
= wxBLACK
->AllocColour(XtDisplay((Widget
)m_mainWidget
)); 
 126     // Better to have the checkbox selection in black, or it's 
 127     // hard to determine what state it is in. 
 128     XtVaSetValues ((Widget
) m_mainWidget
, 
 129            XmNselectColor
, selectPixel
, 
 133 /////////////////////////////////////////////////////////////////////////////// 
 135 /////////////////////////////////////////////////////////////////////////////// 
 139 DEFINE_EVENT_TYPE(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED
) 
 140 IMPLEMENT_DYNAMIC_CLASS(wxToggleButton
, wxControl
) 
 142 bool wxToggleButton::Create( wxWindow
* parent
, wxWindowID id
, 
 143                              const wxString
& label
, 
 147                              const wxValidator
& val
, 
 148                              const wxString 
&name 
) 
 150     if( !wxCheckBox::Create( parent
, id
, label
, pos
, size
, style
, val
, name 
) ) 
 153     XtVaSetValues( (Widget
)m_mainWidget
, 
 155 #if XmVersion >= 2000 
 156                    XmNindicatorOn
, XmINDICATOR_NONE
, 
 158                    XmNindicatorOn
, False
, 
 160                    XmNfillOnSelect
, False
, 
 161                    XmNshadowThickness
, 2, 
 162                    XmNalignment
, XmALIGNMENT_CENTER
, 
 167     // set it again, because the XtVaSetValue above resets it 
 168     if( size
.x 
!= -1 || size
.y 
!= -1 ) 
 174 #endif // wxUSE_TOGGLEBUTTON