From 08e5319b03f80c8554a49c1ef4c9d2adaa8587ce Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Wed, 12 Feb 2003 18:20:23 +0000 Subject: [PATCH] Implemented wxToggleButton under Motif. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19195 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/tmake/filelist.txt | 1 + docs/changes.txt | 4 +++ docs/latex/wx/tglbtn.tex | 3 +- include/wx/chkconf.h | 4 --- include/wx/motif/checkbox.h | 15 +++++++++- include/wx/motif/tglbtn.h | 50 ++++++++++++++++++++++++++++++++++ include/wx/tglbtn.h | 4 +-- src/motif/checkbox.cpp | 46 ++++++++++++++++++++++++++++++- src/motif/files.lst | 1 + 9 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 include/wx/motif/tglbtn.h diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index adfc390ae1..06a1cbd867 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -1200,6 +1200,7 @@ statbmp.h MotifH statbox.h MotifH stattext.h MotifH textctrl.h MotifH +tglbtn.h MotifH timer.h MotifH toolbar.h MotifH toplevel.h MotifH diff --git a/docs/changes.txt b/docs/changes.txt index d258b295b5..2a9423d6fc 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -90,6 +90,10 @@ wxMotif does not support all the features other ports do); refer to wxFileDialog documentation for a detailed explanation - implemented wxWakeUpIdle +- for Motif 2.0, used the native combobox widget instead of the GPL'd + xmcombo; xmcombo is still used for Motif 1.x and Lesstif when compiled + with Motif 1.x compatibility +- implemented wxToggleButton OLD CHANGES =========== diff --git a/docs/latex/wx/tglbtn.tex b/docs/latex/wx/tglbtn.tex index d5a719b3f7..38665a8b8e 100644 --- a/docs/latex/wx/tglbtn.tex +++ b/docs/latex/wx/tglbtn.tex @@ -18,7 +18,8 @@ functionality but looks like a \helpref{wxButton}{wxbutton}. You can see wxToggleButton in action in the sixth page of the \helpref{controls}{samplecontrols} sample. -{\bf NB:} This class is only available under wxMSW and wxGTK currently. +{\bf NB:} This class is only available under wxMSW, wxGTK and wxMotif +currently. \wxheading{Derived from} diff --git a/include/wx/chkconf.h b/include/wx/chkconf.h index 433ff10f7a..1a83afe7fa 100644 --- a/include/wx/chkconf.h +++ b/include/wx/chkconf.h @@ -996,10 +996,6 @@ # undef wxUSE_TAB_DIALOG # define wxUSE_TAB_DIALOG 1 #endif -#if defined(__WXMOTIF__) && wxUSE_TOGGLEBTN -# undef wxUSE_TOGGLEBTN -# define wxUSE_TOGGLEBTN 0 -#endif /* wxMGL-specific dependencies */ #ifdef __WXMGL__ diff --git a/include/wx/motif/checkbox.h b/include/wx/motif/checkbox.h index 8032731221..9f9ca5851e 100644 --- a/include/wx/motif/checkbox.h +++ b/include/wx/motif/checkbox.h @@ -26,13 +26,15 @@ class WXDLLEXPORT wxCheckBox: public wxCheckBoxBase DECLARE_DYNAMIC_CLASS(wxCheckBox) public: - inline wxCheckBox() { } + inline wxCheckBox() { Init(); } inline wxCheckBox(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxCheckBoxNameStr) { + Init(); + Create(parent, id, label, pos, size, style, validator, name); } @@ -47,6 +49,17 @@ public: // Implementation virtual void ChangeBackgroundColour(); +private: + // common part of all constructors + void Init() + { + m_evtType = wxEVT_COMMAND_CHECKBOX_CLICKED; + } + + // public for the callback +public: + // either exEVT_COMMAND_CHECKBOX_CLICKED or ..._TOGGLEBUTTON_CLICKED + wxEventType m_evtType; }; #endif diff --git a/include/wx/motif/tglbtn.h b/include/wx/motif/tglbtn.h new file mode 100644 index 0000000000..c67edba376 --- /dev/null +++ b/include/wx/motif/tglbtn.h @@ -0,0 +1,50 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/motif/tglbtn.h +// Purpose: Declaration of the wxToggleButton class, which implements a +// toggle button under wxMotif. +// Author: Mattia Barbon +// Modified by: +// Created: 10.02.03 +// RCS-ID: $Id$ +// Copyright: (c) 2003 Mattia Barbon +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_TOGGLEBUTTON_H_ +#define _WX_TOGGLEBUTTON_H_ + +#include "wx/checkbox.h" + +class WXDLLEXPORT wxToggleButton : public wxCheckBox +{ +public: + wxToggleButton() { Init(); } + wxToggleButton( wxWindow* parent, wxWindowID id, const wxString& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& val = wxDefaultValidator, + const wxString& name = wxCheckBoxNameStr ) + { + Init(); + + Create( parent, id, label, pos, size, style, val, name ); + } + + bool Create( wxWindow* parent, wxWindowID id, const wxString& label, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& val = wxDefaultValidator, + const wxString &name = wxCheckBoxNameStr ); +private: + DECLARE_DYNAMIC_CLASS(wxToggleButton); + + // common part of all constructors + void Init() + { + m_evtType = wxEVT_COMMAND_TOGGLEBUTTON_CLICKED; + } +}; + +#endif // _WX_TOGGLEBUTTON_H_ diff --git a/include/wx/tglbtn.h b/include/wx/tglbtn.h index 964fa4a59e..98a2a7207c 100644 --- a/include/wx/tglbtn.h +++ b/include/wx/tglbtn.h @@ -30,9 +30,9 @@ END_DECLARE_EVENT_TYPES() #include "wx/msw/tglbtn.h" #elif defined(__WXGTK__) #include "wx/gtk/tglbtn.h" -/* # elif defined(__WXMOTIF__) -# include "wx/motif/tglbtn.h" + #include "wx/motif/tglbtn.h" +/* # elif defined(__WXMAC__) # include "wx/mac/tglbtn.h" # elif defined(__WXPM__) diff --git a/src/motif/checkbox.cpp b/src/motif/checkbox.cpp index ee64792d71..79ae861a60 100644 --- a/src/motif/checkbox.cpp +++ b/src/motif/checkbox.cpp @@ -20,6 +20,7 @@ #include "wx/defs.h" #include "wx/checkbox.h" +#include "wx/tglbtn.h" #include "wx/utils.h" #ifdef __VMS__ @@ -104,7 +105,7 @@ void wxCheckBoxCallback (Widget WXUNUSED(w), XtPointer clientData, if (item->InSetValue()) return; - wxCommandEvent event (wxEVT_COMMAND_CHECKBOX_CLICKED, item->GetId()); + wxCommandEvent event (item->m_evtType, item->GetId()); event.SetInt((int) item->GetValue ()); event.SetEventObject(item); item->ProcessCommand (event); @@ -130,3 +131,46 @@ void wxCheckBox::ChangeBackgroundColour() XmNselectColor, selectPixel, NULL); } + +/////////////////////////////////////////////////////////////////////////////// +// wxToggleButton +/////////////////////////////////////////////////////////////////////////////// + +#if wxUSE_TOGGLEBTN + +DEFINE_EVENT_TYPE(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED) +IMPLEMENT_DYNAMIC_CLASS(wxToggleButton, wxControl) + +bool wxToggleButton::Create( wxWindow* parent, wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& val, + const wxString &name ) +{ + if( !wxCheckBox::Create( parent, id, label, pos, size, style, val, name ) ) + return false; + + XtVaSetValues( (Widget)m_mainWidget, + XmNindicatorSize, 0, +#if XmVersion >= 2000 + XmNindicatorOn, XmINDICATOR_NONE, +#else + XmNindicatorOn, False, +#endif + XmNfillOnSelect, False, + XmNshadowThickness, 2, + XmNalignment, XmALIGNMENT_CENTER, + XmNmarginLeft, 0, + XmNmarginRight, 0, + NULL ); + + // set it again, because the XtVaSetValue above resets it + if( size.x != -1 || size.y != -1 ) + SetSize( size ); + + return true; +} + +#endif // wxUSE_TOGGLEBUTTON diff --git a/src/motif/files.lst b/src/motif/files.lst index 1714782348..756e55871e 100644 --- a/src/motif/files.lst +++ b/src/motif/files.lst @@ -565,6 +565,7 @@ ALL_HEADERS = \ motif/statbox.h \ motif/stattext.h \ motif/textctrl.h \ + motif/tglbtn.h \ motif/timer.h \ motif/toolbar.h \ motif/toplevel.h \ -- 2.45.2