1. PositionToXY() off-by-2 (!) bug corrected
2. controls sample dumps info about text control when F1 is pressed git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1507 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
2829d9e3e8
commit
6085b116d6
@ -57,6 +57,21 @@ class MyApp: public wxApp
|
||||
bool OnInit(void);
|
||||
};
|
||||
|
||||
// a text ctrl which allows to call different wxTextCtrl functions
|
||||
// interactively by pressing function keys in it
|
||||
class MyTextCtrl : public wxTextCtrl
|
||||
{
|
||||
public:
|
||||
MyTextCtrl(wxWindow *parent, wxWindowID id, const wxString &value,
|
||||
const wxPoint &pos, const wxSize &size, int style = 0)
|
||||
: wxTextCtrl(parent, id, value, pos, size, style) { }
|
||||
|
||||
void OnChar(wxKeyEvent& event);
|
||||
|
||||
private:
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
class MyPanel: public wxPanel
|
||||
{
|
||||
public:
|
||||
@ -92,8 +107,8 @@ class MyPanel: public wxPanel
|
||||
wxButton *m_fontButton;
|
||||
wxSpinButton *m_spinbutton;
|
||||
wxTextCtrl *m_spintext;
|
||||
wxTextCtrl *m_multitext;
|
||||
wxTextCtrl *m_textentry;
|
||||
MyTextCtrl *m_multitext;
|
||||
MyTextCtrl *m_textentry;
|
||||
wxCheckBox *m_checkbox;
|
||||
|
||||
wxTextCtrl *m_text;
|
||||
@ -159,6 +174,52 @@ bool MyApp::OnInit(void)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// MyTextCtrl
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
|
||||
EVT_CHAR(MyTextCtrl::OnChar)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
void MyTextCtrl::OnChar(wxKeyEvent& event)
|
||||
{
|
||||
switch ( event.KeyCode() )
|
||||
{
|
||||
case WXK_F1:
|
||||
// show current position and text length
|
||||
{
|
||||
long line, column, pos = GetInsertionPoint();
|
||||
PositionToXY(pos, &column, &line);
|
||||
|
||||
wxLogMessage("Current position: %ld\n"
|
||||
"Current line, column: (%ld, %ld)\n"
|
||||
"Number of lines: %ld\n"
|
||||
"Current line length: %ld\n"
|
||||
"Total text length: %ld",
|
||||
pos,
|
||||
line, column,
|
||||
GetNumberOfLines(),
|
||||
GetLineLength(line),
|
||||
GetLastPosition());
|
||||
}
|
||||
break;
|
||||
|
||||
case WXK_F2:
|
||||
// go to the end
|
||||
SetInsertionPointEnd();
|
||||
break;
|
||||
|
||||
case WXK_F3:
|
||||
// go to position 10
|
||||
SetInsertionPoint(10);
|
||||
break;
|
||||
|
||||
default:
|
||||
event.Skip();
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// MyPanel
|
||||
//----------------------------------------------------------------------
|
||||
@ -214,7 +275,6 @@ const int ID_SLIDER = 181;
|
||||
|
||||
const int ID_SPIN = 182;
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE(MyPanel, wxPanel)
|
||||
EVT_SIZE ( MyPanel::OnSize)
|
||||
EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK, MyPanel::OnPageChanged)
|
||||
@ -393,11 +453,12 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) :
|
||||
panel = new wxPanel(m_notebook);
|
||||
// panel->SetBackgroundColour("cadet blue");
|
||||
// panel->SetForegroundColour("blue");
|
||||
m_textentry = new wxTextCtrl( panel, ID_TEXT, "Write text here.", wxPoint(10,10), wxSize(320,28));
|
||||
m_textentry = new MyTextCtrl( panel, ID_TEXT, "Write text here.", wxPoint(10,10), wxSize(320,28));
|
||||
(*m_textentry) << " More text.";
|
||||
// m_textentry->SetBackgroundColour("wheat");
|
||||
m_multitext = new wxTextCtrl( panel, ID_TEXT, "And here.", wxPoint(10,50), wxSize(320,160), wxTE_MULTILINE );
|
||||
(*m_multitext) << " More text.";
|
||||
m_multitext = new MyTextCtrl( panel, ID_TEXT, "And here.", wxPoint(10,50), wxSize(320,160), wxTE_MULTILINE );
|
||||
(*m_multitext) << " More text."
|
||||
<< "\nPress Fn keys to test different wxTextCtrl functions";
|
||||
// m_multitext->SetBackgroundColour("wheat");
|
||||
(void)new wxStaticBox( panel, -1, "Move cursor to the end of:",
|
||||
wxPoint(345, 0), wxSize(160, 100) );
|
||||
|
@ -435,7 +435,7 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
|
||||
{
|
||||
wxString text = GetValue();
|
||||
|
||||
// cast to prevent warning. But pos really should've been unsigned.
|
||||
// cast to prevent warning. But pos really should've been unsigned.
|
||||
if( (unsigned long)pos > text.Len() )
|
||||
return FALSE;
|
||||
|
||||
@ -445,8 +445,8 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
|
||||
if (pos == 0)
|
||||
return TRUE;
|
||||
|
||||
const char* stop = text.c_str() + pos + 1;
|
||||
for ( const char *p = text.c_str(); p <= stop; p++ )
|
||||
const char* stop = text.c_str() + pos;
|
||||
for ( const char *p = text.c_str(); p < stop; p++ )
|
||||
{
|
||||
if (*p == '\n')
|
||||
{
|
||||
|
@ -435,7 +435,7 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
|
||||
{
|
||||
wxString text = GetValue();
|
||||
|
||||
// cast to prevent warning. But pos really should've been unsigned.
|
||||
// cast to prevent warning. But pos really should've been unsigned.
|
||||
if( (unsigned long)pos > text.Len() )
|
||||
return FALSE;
|
||||
|
||||
@ -445,8 +445,8 @@ long wxTextCtrl::PositionToXY(long pos, long *x, long *y ) const
|
||||
if (pos == 0)
|
||||
return TRUE;
|
||||
|
||||
const char* stop = text.c_str() + pos + 1;
|
||||
for ( const char *p = text.c_str(); p <= stop; p++ )
|
||||
const char* stop = text.c_str() + pos;
|
||||
for ( const char *p = text.c_str(); p < stop; p++ )
|
||||
{
|
||||
if (*p == '\n')
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user