]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/control.cpp
latest CW additions
[wxWidgets.git] / src / motif / control.cpp
index aa0baba9eba3ffa8e1eb090a9cb62975f5cc8c8a..91758e606a0ad9635dcab455f4b0deb031b7bb94 100644 (file)
@@ -14,6 +14,9 @@
 #endif
 
 #include "wx/control.h"
+#include "wx/utils.h"
+
+#include <Xm/Xm.h>
 
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow)
@@ -28,6 +31,7 @@ wxControl::wxControl()
     m_backgroundColour = *wxWHITE;
     m_foregroundColour = *wxBLACK;
     m_callback = 0;
+    m_inSetValue = FALSE;
 }
 
 wxControl::~wxControl()
@@ -44,52 +48,83 @@ wxControl::~wxControl()
 
 void wxControl::SetLabel(const wxString& label)
 {
-    // TODO
+    Widget widget = (Widget) GetLabelWidget() ;
+    if (!widget)
+        return;
+    
+    wxStripMenuCodes((char*) (const char*) label, wxBuffer);
+    
+    XmString text = XmStringCreateSimple (wxBuffer);
+    XtVaSetValues (widget,
+        XmNlabelString, text,
+        XmNlabelType, XmSTRING,
+        NULL);
+    XmStringFree (text);
 }
 
 wxString wxControl::GetLabel() const
 {
-    // TODO
-    return wxString("");
+    Widget widget = (Widget) GetLabelWidget() ;
+    if (!widget)
+        return wxEmptyString;
+    
+    XmString text;
+    char *s;
+    XtVaGetValues (widget,
+        XmNlabelString, &text,
+        NULL);
+    
+    if (XmStringGetLtoR (text, XmSTRING_DEFAULT_CHARSET, &s))
+    {
+        wxString str(s);
+        XtFree (s);
+        XmStringFree(text);
+        return str;
+    }
+    else
+    {
+      //        XmStringFree(text);
+        return wxEmptyString;
+    }
 }
 
 void wxControl::ProcessCommand (wxCommandEvent & event)
 {
-  // Tries:
-  // 1) A callback function (to become obsolete)
-  // 2) OnCommand, starting at this window and working up parent hierarchy
-  // 3) OnCommand then calls ProcessEvent to search the event tables.
-  if (m_callback)
+    // Tries:
+    // 1) A callback function (to become obsolete)
+    // 2) OnCommand, starting at this window and working up parent hierarchy
+    // 3) OnCommand then calls ProcessEvent to search the event tables.
+    if (m_callback)
     {
-      (void) (*(m_callback)) (*this, event);
+        (void) (*(m_callback)) (*this, event);
     }
     else
     {
-      GetEventHandler()->OnCommand(*this, event);
+        GetEventHandler()->OnCommand(*this, event);
     }
 }
 
 void wxControl::Centre (int direction)
 {
-  int x, y, width, height, panel_width, panel_height, new_x, new_y;
-
-  wxWindow *parent = (wxWindow *) GetParent ();
-  if (!parent)
-    return;
-
-  parent->GetClientSize (&panel_width, &panel_height);
-  GetSize (&width, &height);
-  GetPosition (&x, &y);
-
-  new_x = x;
-  new_y = y;
-
-  if (direction & wxHORIZONTAL)
-    new_x = (int) ((panel_width - width) / 2);
-
-  if (direction & wxVERTICAL)
-    new_y = (int) ((panel_height - height) / 2);
-
-  SetSize (new_x, new_y, width, height);
+    int x, y, width, height, panel_width, panel_height, new_x, new_y;
+    
+    wxWindow *parent = (wxWindow *) GetParent ();
+    if (!parent)
+        return;
+    
+    parent->GetClientSize (&panel_width, &panel_height);
+    GetSize (&width, &height);
+    GetPosition (&x, &y);
+    
+    new_x = x;
+    new_y = y;
+    
+    if (direction & wxHORIZONTAL)
+        new_x = (int) ((panel_width - width) / 2);
+    
+    if (direction & wxVERTICAL)
+        new_y = (int) ((panel_height - height) / 2);
+    
+    SetSize (new_x, new_y, width, height);
 }