]> git.saurik.com Git - wxWidgets.git/commitdiff
MSWGetDlgCode() behaviour changed to allow both TAB navigation in the
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 19 Jul 1998 20:45:51 +0000 (20:45 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 19 Jul 1998 20:45:51 +0000 (20:45 +0000)
dialogs, pressing Enter to activate default button and processing Enter
by the text control itself.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@309 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/textctrl.h
src/msw/textctrl.cpp

index d0976655ac6e4d8e0ae9a1361eef5aa671758e31..23e3e12f7c50a2a864628780782e94b4dc97c974 100644 (file)
@@ -44,105 +44,112 @@ class WXDLLEXPORT wxTextCtrl: public wxControl
 
 {
   DECLARE_DYNAMIC_CLASS(wxTextCtrl)
-
- protected:
-  wxString fileName;
- public:
-  wxTextCtrl(void);
+    
+public:
+  // creation
+  // --------
+  wxTextCtrl();
   inline wxTextCtrl(wxWindow *parent, wxWindowID id,
-           const wxString& value = wxEmptyString,
-           const wxPoint& pos = wxDefaultPosition,
-           const wxSize& size = wxDefaultSize, long style = 0,
-           const wxValidator& validator = wxDefaultValidator,
-           const wxString& name = wxTextCtrlNameStr)
+                    const wxString& value = wxEmptyString,
+                    const wxPoint& pos = wxDefaultPosition,
+                    const wxSize& size = wxDefaultSize, long style = 0,
+                    const wxValidator& validator = wxDefaultValidator,
+                    const wxString& name = wxTextCtrlNameStr)
 #ifndef NO_TEXT_WINDOW_STREAM
- :streambuf()
   :streambuf()
 #endif
   {
-      Create(parent, id, value, pos, size, style, validator, name);
+    Create(parent, id, value, pos, size, style, validator, name);
   }
-
+  
   bool Create(wxWindow *parent, wxWindowID id,
-           const wxString& value = wxEmptyString,
-           const wxPoint& pos = wxDefaultPosition,
-           const wxSize& size = wxDefaultSize, long style = 0,
-           const wxValidator& validator = wxDefaultValidator,
-           const wxString& name = wxTextCtrlNameStr);
-
-  virtual wxString GetValue(void) const ;
+              const wxString& value = wxEmptyString,
+              const wxPoint& pos = wxDefaultPosition,
+              const wxSize& size = wxDefaultSize, long style = 0,
+              const wxValidator& validator = wxDefaultValidator,
+              const wxString& name = wxTextCtrlNameStr);
+  
+  // accessors
+  // ---------
+  virtual wxString GetValue() const ;
   virtual void SetValue(const wxString& value);
-  virtual void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
 
-  // Clipboard operations
-  virtual void Copy(void);
-  virtual void Cut(void);
-  virtual void Paste(void);
+  virtual int GetLineLength(long lineNo) const;
+  virtual wxString GetLineText(long lineNo) const;
+  virtual int GetNumberOfLines() const;
 
+  // operations
+  // ----------
+  virtual void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
+  
+  // Clipboard operations
+  virtual void Copy();
+  virtual void Cut();
+  virtual void Paste();
+  
   virtual void SetInsertionPoint(long pos);
-  virtual void SetInsertionPointEnd(void);
-  virtual long GetInsertionPoint(void) const ;
-  virtual long GetLastPosition(void) const ;
+  virtual void SetInsertionPointEnd();
+  virtual long GetInsertionPoint() const ;
+  virtual long GetLastPosition() const ;
   virtual void Replace(long from, long to, const wxString& value);
   virtual void Remove(long from, long to);
   virtual void SetSelection(long from, long to);
-
-  virtual void Command(wxCommandEvent& event);
-
   virtual void SetEditable(bool editable);
-
+  
+  // streambuf implementation
 #ifndef NO_TEXT_WINDOW_STREAM
   int overflow(int i);
-  int sync(void);
-  int underflow(void);
+  int sync();
+  int underflow();
 #endif
-
-  void OnDropFiles(wxDropFilesEvent& event);
-
+  
   wxTextCtrl& operator<<(const wxString& s);
   wxTextCtrl& operator<<(int i);
   wxTextCtrl& operator<<(long i);
   wxTextCtrl& operator<<(float f);
   wxTextCtrl& operator<<(double d);
   wxTextCtrl& operator<<(const char c);
-
+  
   virtual bool LoadFile(const wxString& file);
   virtual bool SaveFile(const wxString& file);
   virtual void WriteText(const wxString& text);
-  virtual void DiscardEdits(void);
-  virtual bool IsModified(void) const;
-
+  virtual void DiscardEdits();
+  virtual bool IsModified() const;
+  
 #if WXWIN_COMPATIBILITY
-  inline bool Modified(void) const { return IsModified(); }
+  inline bool Modified() const { return IsModified(); }
 #endif
-
+  
   virtual long XYToPosition(long x, long y) const ;
   virtual void PositionToXY(long pos, long *x, long *y) const ;
   virtual void ShowPosition(long pos);
-  virtual int GetLineLength(long lineNo) const ;
-  virtual wxString GetLineText(long lineNo) const ;
-  virtual int GetNumberOfLines(void) const ;
-  virtual void Clear(void);
-
-  // Process special keys e.g. 'enter' and process as if it were a command, if required
-  void OnChar(wxKeyEvent& event);
-
+  virtual void Clear();
+  
+  // callbacks
+  // ---------
+  void OnDropFiles(wxDropFilesEvent& event);
+  void OnChar(wxKeyEvent& event); // Process 'enter' if required
   void OnEraseBackground(wxEraseEvent& event);
-
+  
   // Implementation
+  // --------------
+  virtual void Command(wxCommandEvent& event);
   virtual bool MSWCommand(WXUINT param, WXWORD id);
-  inline bool IsRich(void) { return m_isRich; }
+  inline bool IsRich() const { return m_isRich; }
   inline void SetRichEdit(bool isRich) { m_isRich = isRich; }
   virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
-                       WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
-
-  virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
-  virtual void AdoptAttributesFromHWND(void);
-  virtual void SetupColours(void);
-
+                              WXUINT message, WXWPARAM wParam,
+                              WXLPARAM lParam);
+  
+  virtual void AdoptAttributesFromHWND();
+  virtual void SetupColours();
+  virtual long MSWGetDlgCode();
+  
 protected:
-   bool      m_isRich; // Are we using rich text edit to implement this?
-
-DECLARE_EVENT_TABLE()
+  bool      m_isRich; // Are we using rich text edit to implement this?
+  wxString  fileName;
+  
+  DECLARE_EVENT_TABLE()
 };
 
 #endif
index 8e575ea3addaed226247f0501e8d8c991b36f0fd..723c594aea0cbcb1e31cc7ccd622e743fa8c767e 100644 (file)
@@ -921,16 +921,35 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
        {
                wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
                event.SetEventObject( this );
-               if ( !GetEventHandler()->ProcessEvent(event) )
-                       event.Skip();
+               if ( GetEventHandler()->ProcessEvent(event) )
+      return;
        }
-       else
-               event.Skip();
+  else if ( event.KeyCode() == WXK_TAB ) {
+    wxNavigationKeyEvent event;
+    event.SetDirection(!(::GetKeyState(VK_SHIFT) & 0x100));
+    event.SetWindowChange(FALSE);
+    event.SetEventObject(this);
+
+    if ( GetEventHandler()->ProcessEvent(event) )
+      return;
+  }
+
+  event.Skip();
 }
 
-long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
+long wxTextCtrl::MSWGetDlgCode()
 {
+  long lRc = DLGC_WANTCHARS | DLGC_WANTARROWS;
+  if ( m_windowStyle & wxPROCESS_ENTER ) {
+    lRc |= DLGC_WANTMESSAGE;
+  }
+
+  return lRc;
+}
+
 /*
+long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
+{
     switch (nMsg)
     {
       case WM_GETDLGCODE:
@@ -954,10 +973,10 @@ long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
     default:
         break;
     }
-*/
 
   return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
 }
+*/
 
 void wxTextCtrl::OnEraseBackground(wxEraseEvent& event)
 {
@@ -1016,44 +1035,42 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
       break;
   }
 */
-  wxEventType eventTyp = wxEVT_NULL;
   switch (param)
   {
     case EN_SETFOCUS:
-      eventTyp = wxEVENT_TYPE_SET_FOCUS;
-      break;
     case EN_KILLFOCUS:
-      eventTyp = wxEVENT_TYPE_KILL_FOCUS;
+      {
+        wxFocusEvent event(param == EN_KILLFOCUS ? wxEVT_KILL_FOCUS
+                                                 : wxEVT_SET_FOCUS,
+                           m_windowId);
+        event.SetEventObject( this );
+        ProcessEvent(event);
+      }
       break;
-    case EN_UPDATE:
-         break;
+
     case EN_CHANGE:
-      eventTyp = wxEVENT_TYPE_TEXT_COMMAND;
+      {
+        wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
+        wxString val(GetValue());
+        if ( !val.IsNull() )
+          event.m_commandString = WXSTRINGCAST val;
+        event.SetEventObject( this );
+        ProcessCommand(event);
+      }
       break;
+
+    // the other notification messages are not processed
+    case EN_UPDATE:
     case EN_ERRSPACE:
-      break;
     case EN_MAXTEXT:
-      break;
     case EN_HSCROLL:
-       break;
     case EN_VSCROLL:
-      break;
     default:
-      break;
+      return FALSE;
   }
-  if (eventTyp != 0)
-  {
-    wxCommandEvent event(eventTyp, m_windowId);
-       wxString val(GetValue());
-       if ( !val.IsNull() )
-      event.m_commandString = WXSTRINGCAST val;
-    event.SetEventObject( this );
-    ProcessCommand(event);
 
-    return TRUE;
-  }
-  else
-    return FALSE;
+  // processed
+  return TRUE;
 }