]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/textctrl.cpp
Added #include wx/dcclient.h for Vadims changes to work without pc headers
[wxWidgets.git] / src / motif / textctrl.cpp
index b84167773a1ba0647c6845b8be9455a04b227c98..9668a888a848b800b03c8ea20c74bfd714609319 100644 (file)
@@ -57,6 +57,19 @@ static void wxTextWindowActivateProc(Widget w, XtPointer clientData, XmAnyCallba
     BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
         EVT_DROP_FILES(wxTextCtrl::OnDropFiles)
         EVT_CHAR(wxTextCtrl::OnChar)
+
+    EVT_MENU(wxID_CUT, wxTextCtrl::OnCut)
+    EVT_MENU(wxID_COPY, wxTextCtrl::OnCopy)
+    EVT_MENU(wxID_PASTE, wxTextCtrl::OnPaste)
+    EVT_MENU(wxID_UNDO, wxTextCtrl::OnUndo)
+    EVT_MENU(wxID_REDO, wxTextCtrl::OnRedo)
+
+    EVT_UPDATE_UI(wxID_CUT, wxTextCtrl::OnUpdateCut)
+    EVT_UPDATE_UI(wxID_COPY, wxTextCtrl::OnUpdateCopy)
+    EVT_UPDATE_UI(wxID_PASTE, wxTextCtrl::OnUpdatePaste)
+    EVT_UPDATE_UI(wxID_UNDO, wxTextCtrl::OnUpdateUndo)
+    EVT_UPDATE_UI(wxID_REDO, wxTextCtrl::OnUpdateRedo)
+
     END_EVENT_TABLE()
 #endif
 
@@ -172,7 +185,7 @@ bool wxTextCtrl::Create(wxWindow *parent,
     XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this);
 
     // font
-    m_windowFont = parent->GetFont();
+    m_font = parent->GetFont();
     ChangeFont(FALSE);
 
     SetCanAddEventHandler(TRUE);
@@ -245,6 +258,67 @@ void wxTextCtrl::Paste()
     XmTextPaste((Widget) m_mainWidget);
 }
 
+bool wxTextCtrl::CanCopy() const
+{
+    // Can copy if there's a selection
+    long from, to;
+    GetSelection(& from, & to);
+    return (from != to) ;
+}
+
+bool wxTextCtrl::CanCut() const
+{
+    // Can cut if there's a selection
+    long from, to;
+    GetSelection(& from, & to);
+    return (from != to) ;
+}
+
+bool wxTextCtrl::CanPaste() const
+{
+    return IsEditable() ;
+}
+
+// Undo/redo
+void wxTextCtrl::Undo()
+{
+    // Not possible in Motif
+}
+
+void wxTextCtrl::Redo()
+{
+    // Not possible in Motif
+}
+
+bool wxTextCtrl::CanUndo() const
+{
+    // No Undo in Motif
+    return FALSE;
+}
+
+bool wxTextCtrl::CanRedo() const
+{
+    // No Redo in Motif
+    return FALSE;
+}
+
+// If the return values from and to are the same, there is no
+// selection.
+void wxTextCtrl::GetSelection(long* from, long* to) const
+{
+    XmTextPosition left, right;
+
+    XmTextGetSelectionPosition((Widget) m_mainWidget, & left, & right);
+
+    *from = (long) left;
+    *to = (long) right;
+}
+
+bool wxTextCtrl::IsEditable() const
+{
+    return (XmTextGetEditable((Widget) m_mainWidget) != 0);
+}
+
 void wxTextCtrl::SetEditable(bool editable)
 {
     XmTextSetEditable((Widget) m_mainWidget, (Boolean) editable);
@@ -403,7 +477,6 @@ bool wxTextCtrl::IsModified() const
 // Makes 'unmodified'
 void wxTextCtrl::DiscardEdits()
 {
-    XmTextSetString ((Widget) m_mainWidget, "");
     m_modified = FALSE;
 }
 
@@ -934,3 +1007,52 @@ static void wxTextWindowActivateProc(Widget w, XtPointer clientData,
     tw->ProcessCommand(event);
 }
 
+void wxTextCtrl::OnCut(wxCommandEvent& WXUNUSED(event))
+{
+    Cut();
+}
+
+void wxTextCtrl::OnCopy(wxCommandEvent& WXUNUSED(event))
+{
+    Copy();
+}
+
+void wxTextCtrl::OnPaste(wxCommandEvent& WXUNUSED(event))
+{
+    Paste();
+}
+
+void wxTextCtrl::OnUndo(wxCommandEvent& WXUNUSED(event))
+{
+    Undo();
+}
+
+void wxTextCtrl::OnRedo(wxCommandEvent& WXUNUSED(event))
+{
+    Redo();
+}
+
+void wxTextCtrl::OnUpdateCut(wxUpdateUIEvent& event)
+{
+    event.Enable( CanCut() );
+}
+
+void wxTextCtrl::OnUpdateCopy(wxUpdateUIEvent& event)
+{
+    event.Enable( CanCopy() );
+}
+
+void wxTextCtrl::OnUpdatePaste(wxUpdateUIEvent& event)
+{
+    event.Enable( CanPaste() );
+}
+
+void wxTextCtrl::OnUpdateUndo(wxUpdateUIEvent& event)
+{
+    event.Enable( CanUndo() );
+}
+
+void wxTextCtrl::OnUpdateRedo(wxUpdateUIEvent& event)
+{
+    event.Enable( CanRedo() );
+}