void OnChar(wxKeyEvent& event);
void OnText(wxCommandEvent& event);
+ void OnTextEnter(wxCommandEvent& event);
void OnTextURL(wxTextUrlEvent& event);
void OnTextMaxLen(wxCommandEvent& event);
void DoMoveToEndOfText();
void DoMoveToEndOfEntry();
+ // return true if currently text control has any selection
+ bool HasSelection() const
+ {
+ long from, to;
+ GetFocusedText()->GetSelection(&from, &to);
+ return from != to;
+ }
+
MyTextCtrl *m_text;
MyTextCtrl *m_password;
MyTextCtrl *m_enter;
#endif // wxUSE_LOG
private:
- // get the currently focused text control or return the default one is no
- // text ctrl has focus
- wxTextCtrl *GetFocusedText(wxTextCtrl *textDef);
+ // get the currently focused text control or return the default one
+ // (m_multitext) is no text ctrl has focus -- in any case, returns
+ // something non NULL
+ wxTextCtrl *GetFocusedText() const;
};
class MyFrame: public wxFrame
#if wxUSE_CLIPBOARD
void OnPasteFromClipboard( wxCommandEvent& WXUNUSED(event) )
- { m_panel->DoPasteFromClipboard(); }
+ {
+ wxLogMessage(_T("Pasting text from clipboard."));
+ m_panel->DoPasteFromClipboard();
+ }
void OnCopyToClipboard( wxCommandEvent& WXUNUSED(event) )
- { m_panel->DoCopyToClipboard(); }
+ {
+ wxLogMessage(_T("Copying text to clipboard."));
+ m_panel->DoCopyToClipboard();
+ }
+
+ void OnUpdatePasteFromClipboard(wxUpdateUIEvent& event)
+ {
+ wxClipboardLocker lockClip;
+
+ event.Enable( wxTheClipboard->IsSupported(wxDF_TEXT) );
+ }
+
+ void OnUpdateCopyToClipboard(wxUpdateUIEvent& event)
+ {
+ event.Enable( m_panel->HasSelection() );
+ }
#endif // wxUSE_CLIPBOARD
void OnAddTextFreeze( wxCommandEvent& WXUNUSED(event) )
enum
{
- TEXT_QUIT = 100,
- TEXT_ABOUT,
- TEXT_LOAD,
+ TEXT_QUIT = wxID_EXIT,
+ TEXT_ABOUT = wxID_ABOUT,
+ TEXT_LOAD = 101,
TEXT_SAVE,
TEXT_CLEAR,
TEXT_RICH_TEXT_TEST,
{
// Create the main frame window
MyFrame *frame = new MyFrame((wxFrame *) NULL,
- _T("Text wxWidgets sample"), 50, 50, 700, 420);
+ _T("Text wxWidgets sample"), 50, 50, 700, 550);
frame->SetSizeHints( 500, 400 );
wxMenu *file_menu = new wxMenu;
#endif // wxUSE_TOOLTIPS
#if wxUSE_CLIPBOARD
+ // notice that we use non default accelerators on purpose here to compare
+ // their behaviour with the built in handling of standard Ctrl/Cmd-C/V
wxMenu *menuClipboard = new wxMenu;
- menuClipboard->Append(TEXT_CLIPBOARD_COPY, _T("&Copy\tCtrl-C"),
- _T("Copy the first line to the clipboard"));
- menuClipboard->Append(TEXT_CLIPBOARD_PASTE, _T("&Paste\tCtrl-V"),
+ menuClipboard->Append(TEXT_CLIPBOARD_COPY, _T("&Copy\tCtrl-Shift-C"),
+ _T("Copy the selection to the clipboard"));
+ menuClipboard->Append(TEXT_CLIPBOARD_PASTE, _T("&Paste\tCtrl-Shift-V"),
_T("Paste from clipboard to the text control"));
menu_bar->Append(menuClipboard, _T("&Clipboard"));
#endif // wxUSE_CLIPBOARD
EVT_CHAR(MyTextCtrl::OnChar)
EVT_TEXT(wxID_ANY, MyTextCtrl::OnText)
+ EVT_TEXT_ENTER(wxID_ANY, MyTextCtrl::OnTextEnter)
EVT_TEXT_URL(wxID_ANY, MyTextCtrl::OnTextURL)
EVT_TEXT_MAXLEN(wxID_ANY, MyTextCtrl::OnTextMaxLen)
case WXK_MENU: key = _T("MENU"); break;
case WXK_PAUSE: key = _T("PAUSE"); break;
case WXK_CAPITAL: key = _T("CAPITAL"); break;
- case WXK_PRIOR: key = _T("PRIOR"); break;
- case WXK_NEXT: key = _T("NEXT"); break;
case WXK_END: key = _T("END"); break;
case WXK_HOME: key = _T("HOME"); break;
case WXK_LEFT: key = _T("LEFT"); break;
case WXK_NUMPAD_UP: key = _T("NUMPAD_UP"); break;
case WXK_NUMPAD_RIGHT: key = _T("NUMPAD_RIGHT"); break;
case WXK_NUMPAD_DOWN: key = _T("NUMPAD_DOWN"); break;
- case WXK_NUMPAD_PRIOR: key = _T("NUMPAD_PRIOR"); break;
case WXK_NUMPAD_PAGEUP: key = _T("NUMPAD_PAGEUP"); break;
case WXK_NUMPAD_PAGEDOWN: key = _T("NUMPAD_PAGEDOWN"); break;
case WXK_NUMPAD_END: key = _T("NUMPAD_END"); break;
}
}
+void MyTextCtrl::OnTextEnter(wxCommandEvent& event)
+{
+ if ( !ms_logText )
+ return;
+
+ MyTextCtrl *win = (MyTextCtrl *)event.GetEventObject();
+ const wxChar *data = (const wxChar *)(win->GetClientData());
+ if ( data )
+ {
+ wxLogMessage(_T("Enter pressed in control '%s'"), data);
+ }
+ else
+ {
+ wxLogMessage(_T("Enter pressed in some control"));
+ }
+}
+
void MyTextCtrl::OnTextMaxLen(wxCommandEvent& WXUNUSED(event))
{
wxLogMessage(_T("You can't enter more characters into this control."));
m_horizontal->SetFont(wxFont(18, wxSWISS, wxNORMAL, wxNORMAL,
false, _T(""),
wxFONTENCODING_ISO8859_2));
- m_horizontal->AppendText(_T("®lu»ouèký kùò zbìsile èe¹tina «»"));
+ m_horizontal->AppendText(_T("\256lu\273ou\350k\375 k\371\362 zb\354sile \350e\271tina \253\273"));
break;
case '1':
m_horizontal->SetFont(wxFont(18, wxSWISS, wxNORMAL, wxNORMAL,
false, _T(""),
wxFONTENCODING_CP1251));
- m_horizontal->AppendText(_T("Ïðèâåò!"));
+ m_horizontal->AppendText(_T("\317\360\350\342\345\362!"));
break;
case '8':
#if wxUSE_UNICODE
m_horizontal->AppendText(L"\x0412\x0430\x0434\x0438\x043c \x0426");
#else
- m_horizontal->AppendText("ËÁÖÅÔÓÑ ÕÄÁÞÎÙÍ");
+ m_horizontal->AppendText("\313\301\326\305\324\323\321 \325\304\301\336\316\331\315");
#endif
}
}
}
m_multitext = new MyTextCtrl( this, wxID_ANY, _T("Multi line."),
- wxPoint(180,10), wxSize(240,70), wxTE_MULTILINE );
+ wxPoint(180,10), wxSize(200,70), wxTE_MULTILINE );
m_multitext->SetFont(*wxITALIC_FONT);
(*m_multitext) << _T(" Appended.");
m_multitext->SetInsertionPoint(0);
#endif
m_tab = new MyTextCtrl( this, 100, _T("Multiline, allow <TAB> processing."),
- wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE | wxTE_PROCESS_TAB );
+ wxPoint(180,90), wxSize(200,70), wxTE_MULTILINE | wxTE_PROCESS_TAB );
m_tab->SetClientData((void *)_T("tab"));
m_enter = new MyTextCtrl( this, 100, _T("Multiline, allow <ENTER> processing."),
- wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE);
+ wxPoint(180,170), wxSize(200,70), wxTE_MULTILINE);
m_enter->SetClientData((void *)_T("enter"));
m_textrich = new MyTextCtrl(this, wxID_ANY, _T("Allows more than 30Kb of text\n")
_T("(even under broken Win9x)\n")
_T("and a very very very very very ")
_T("very very very long line to test ")
- _T("wxHSCROLL style"),
- wxPoint(450, 10), wxSize(230, 230),
- wxTE_RICH | wxTE_MULTILINE);
+ _T("wxHSCROLL style\n")
+ _T("\nAnd here is a link in quotation marks to ")
+ _T("test wxTE_AUTO_URL: \"http://www.wxwidgets.org\""),
+ wxPoint(450, 10), wxSize(200, 230),
+ wxTE_RICH | wxTE_MULTILINE | wxTE_AUTO_URL);
m_textrich->SetStyle(0, 10, *wxRED);
m_textrich->SetStyle(10, 20, *wxBLUE);
m_textrich->SetStyle(30, 40,
SetSizer(topSizer);
}
-wxTextCtrl *MyPanel::GetFocusedText(wxTextCtrl *textDef)
+wxTextCtrl *MyPanel::GetFocusedText() const
{
wxWindow *win = FindFocus();
wxTextCtrl *text = win ? wxDynamicCast(win, wxTextCtrl) : NULL;
- return text ? text : textDef;
+ return text ? text : m_multitext;
}
#if wxUSE_CLIPBOARD
#if wxUSE_LOG
*m_log << _T("Successfully retrieved data from the clipboard.\n");
#endif // wxUSE_LOG
- *m_multitext << data.GetText() << _T("\n");
+ GetFocusedText()->AppendText(data.GetText());
}
else
{
// call has no effect under MSW.
wxTheClipboard->UsePrimarySelection();
- wxString text( m_multitext->GetLineText(0) );
+ wxString text( GetFocusedText()->GetStringSelection() );
if (text.IsEmpty())
{
void MyPanel::DoRemoveText()
{
- GetFocusedText(m_multitext)->Remove(0, 10);
+ GetFocusedText()->Remove(0, 10);
}
void MyPanel::DoReplaceText()
{
- GetFocusedText(m_multitext)->Replace(3, 8, _T("ABC"));
+ GetFocusedText()->Replace(3, 8, _T("ABC"));
}
void MyPanel::DoSelectText()
{
- GetFocusedText(m_multitext)->SetSelection(3, 8);
+ GetFocusedText()->SetSelection(3, 8);
}
//----------------------------------------------------------------------
#if wxUSE_CLIPBOARD
EVT_MENU(TEXT_CLIPBOARD_PASTE, MyFrame::OnPasteFromClipboard)
EVT_MENU(TEXT_CLIPBOARD_COPY, MyFrame::OnCopyToClipboard)
+
+ EVT_UPDATE_UI(TEXT_CLIPBOARD_PASTE, MyFrame::OnUpdatePasteFromClipboard)
+ EVT_UPDATE_UI(TEXT_CLIPBOARD_COPY, MyFrame::OnUpdateCopyToClipboard)
#endif // wxUSE_CLIPBOARD
EVT_MENU(TEXT_REMOVE, MyFrame::OnRemoveText)