From 08e5319b03f80c8554a49c1ef4c9d2adaa8587ce Mon Sep 17 00:00:00 2001
From: Mattia Barbon <mbarbon@cpan.org>
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

