MSWGetDlgCode() behaviour changed to allow both TAB navigation in the

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
This commit is contained in:
Vadim Zeitlin
1998-07-19 20:45:51 +00:00
parent a93ca20183
commit ae29de8326
2 changed files with 123 additions and 99 deletions

View File

@@ -44,105 +44,112 @@ class WXDLLEXPORT wxTextCtrl: public wxControl
{ {
DECLARE_DYNAMIC_CLASS(wxTextCtrl) DECLARE_DYNAMIC_CLASS(wxTextCtrl)
protected: public:
wxString fileName; // creation
public: // --------
wxTextCtrl(void); wxTextCtrl();
inline wxTextCtrl(wxWindow *parent, wxWindowID id, inline wxTextCtrl(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString, const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0, const wxSize& size = wxDefaultSize, long style = 0,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxTextCtrlNameStr) const wxString& name = wxTextCtrlNameStr)
#ifndef NO_TEXT_WINDOW_STREAM #ifndef NO_TEXT_WINDOW_STREAM
:streambuf() :streambuf()
#endif #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, bool Create(wxWindow *parent, wxWindowID id,
const wxString& value = wxEmptyString, const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0, const wxSize& size = wxDefaultSize, long style = 0,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxTextCtrlNameStr); const wxString& name = wxTextCtrlNameStr);
virtual wxString GetValue(void) const ; // accessors
// ---------
virtual wxString GetValue() const ;
virtual void SetValue(const wxString& value); virtual void SetValue(const wxString& value);
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); virtual void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
// Clipboard operations // Clipboard operations
virtual void Copy(void); virtual void Copy();
virtual void Cut(void); virtual void Cut();
virtual void Paste(void); virtual void Paste();
virtual void SetInsertionPoint(long pos); virtual void SetInsertionPoint(long pos);
virtual void SetInsertionPointEnd(void); virtual void SetInsertionPointEnd();
virtual long GetInsertionPoint(void) const ; virtual long GetInsertionPoint() const ;
virtual long GetLastPosition(void) const ; virtual long GetLastPosition() const ;
virtual void Replace(long from, long to, const wxString& value); virtual void Replace(long from, long to, const wxString& value);
virtual void Remove(long from, long to); virtual void Remove(long from, long to);
virtual void SetSelection(long from, long to); virtual void SetSelection(long from, long to);
virtual void Command(wxCommandEvent& event);
virtual void SetEditable(bool editable); virtual void SetEditable(bool editable);
// streambuf implementation
#ifndef NO_TEXT_WINDOW_STREAM #ifndef NO_TEXT_WINDOW_STREAM
int overflow(int i); int overflow(int i);
int sync(void); int sync();
int underflow(void); int underflow();
#endif #endif
void OnDropFiles(wxDropFilesEvent& event);
wxTextCtrl& operator<<(const wxString& s); wxTextCtrl& operator<<(const wxString& s);
wxTextCtrl& operator<<(int i); wxTextCtrl& operator<<(int i);
wxTextCtrl& operator<<(long i); wxTextCtrl& operator<<(long i);
wxTextCtrl& operator<<(float f); wxTextCtrl& operator<<(float f);
wxTextCtrl& operator<<(double d); wxTextCtrl& operator<<(double d);
wxTextCtrl& operator<<(const char c); wxTextCtrl& operator<<(const char c);
virtual bool LoadFile(const wxString& file); virtual bool LoadFile(const wxString& file);
virtual bool SaveFile(const wxString& file); virtual bool SaveFile(const wxString& file);
virtual void WriteText(const wxString& text); virtual void WriteText(const wxString& text);
virtual void DiscardEdits(void); virtual void DiscardEdits();
virtual bool IsModified(void) const; virtual bool IsModified() const;
#if WXWIN_COMPATIBILITY #if WXWIN_COMPATIBILITY
inline bool Modified(void) const { return IsModified(); } inline bool Modified() const { return IsModified(); }
#endif #endif
virtual long XYToPosition(long x, long y) const ; virtual long XYToPosition(long x, long y) const ;
virtual void PositionToXY(long pos, long *x, long *y) const ; virtual void PositionToXY(long pos, long *x, long *y) const ;
virtual void ShowPosition(long pos); virtual void ShowPosition(long pos);
virtual int GetLineLength(long lineNo) const ; virtual void Clear();
virtual wxString GetLineText(long lineNo) const ;
virtual int GetNumberOfLines(void) const ; // callbacks
virtual void Clear(void); // ---------
void OnDropFiles(wxDropFilesEvent& event);
// Process special keys e.g. 'enter' and process as if it were a command, if required void OnChar(wxKeyEvent& event); // Process 'enter' if required
void OnChar(wxKeyEvent& event);
void OnEraseBackground(wxEraseEvent& event); void OnEraseBackground(wxEraseEvent& event);
// Implementation // Implementation
// --------------
virtual void Command(wxCommandEvent& event);
virtual bool MSWCommand(WXUINT param, WXWORD id); 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; } inline void SetRichEdit(bool isRich) { m_isRich = isRich; }
virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
WXUINT message, WXWPARAM wParam, WXLPARAM lParam); WXUINT message, WXWPARAM wParam,
WXLPARAM lParam);
virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
virtual void AdoptAttributesFromHWND(void); virtual void AdoptAttributesFromHWND();
virtual void SetupColours(void); virtual void SetupColours();
virtual long MSWGetDlgCode();
protected: protected:
bool m_isRich; // Are we using rich text edit to implement this? bool m_isRich; // Are we using rich text edit to implement this?
wxString fileName;
DECLARE_EVENT_TABLE()
DECLARE_EVENT_TABLE()
}; };
#endif #endif

View File

@@ -921,16 +921,35 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
{ {
wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, m_windowId);
event.SetEventObject( this ); event.SetEventObject( this );
if ( !GetEventHandler()->ProcessEvent(event) ) if ( GetEventHandler()->ProcessEvent(event) )
event.Skip(); return;
} }
else else if ( event.KeyCode() == WXK_TAB ) {
event.Skip(); wxNavigationKeyEvent event;
event.SetDirection(!(::GetKeyState(VK_SHIFT) & 0x100));
event.SetWindowChange(FALSE);
event.SetEventObject(this);
if ( GetEventHandler()->ProcessEvent(event) )
return;
}
event.Skip();
} }
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) long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{ {
/*
switch (nMsg) switch (nMsg)
{ {
case WM_GETDLGCODE: case WM_GETDLGCODE:
@@ -954,10 +973,10 @@ long wxTextCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
default: default:
break; break;
} }
*/
return wxWindow::MSWWindowProc(nMsg, wParam, lParam); return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
} }
*/
void wxTextCtrl::OnEraseBackground(wxEraseEvent& event) void wxTextCtrl::OnEraseBackground(wxEraseEvent& event)
{ {
@@ -1016,44 +1035,42 @@ bool wxTextCtrl::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
break; break;
} }
*/ */
wxEventType eventTyp = wxEVT_NULL;
switch (param) switch (param)
{ {
case EN_SETFOCUS: case EN_SETFOCUS:
eventTyp = wxEVENT_TYPE_SET_FOCUS;
break;
case EN_KILLFOCUS: 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; break;
case EN_UPDATE:
break;
case EN_CHANGE:
eventTyp = wxEVENT_TYPE_TEXT_COMMAND;
break;
case EN_ERRSPACE:
break;
case EN_MAXTEXT:
break;
case EN_HSCROLL:
break;
case EN_VSCROLL:
break;
default:
break;
}
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; case EN_CHANGE:
{
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:
case EN_MAXTEXT:
case EN_HSCROLL:
case EN_VSCROLL:
default:
return FALSE;
} }
else
return FALSE; // processed
return TRUE;
} }