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:
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user