/////////////////////////////////////////////////////////////////////////////
-// Program: wxWindows Widgets Sample
+// Program: wxWidgets Widgets Sample
// Name: textctrl.cpp
// Purpose: part of the widgets sample showing wxTextCtrl
// Author: Vadim Zeitlin
#include "wx/log.h"
#include "wx/timer.h"
+ #include "wx/bitmap.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/radiobox.h"
#include "widgets.h"
-#if 1
#include "icons/text.xpm"
// ----------------------------------------------------------------------------
} DEFAULTS =
{
TextLines_Multi, // multiline
- FALSE, // not password
- TRUE, // do wrap lines
- FALSE, // not readonly
+ false, // not password
+ true, // do wrap lines
+ false, // not readonly
#ifdef __WXMSW__
TextKind_Plain // plain EDIT control
#endif // __WXMSW__
m_selFrom,
m_selTo;
+ wxString m_range10_20;
+
private:
- // any class wishing to process wxWindows events must use this macro
+ // any class wishing to process wxWidgets events must use this macro
DECLARE_EVENT_TABLE()
DECLARE_WIDGETS_PAGE(TextWidgetsPage)
};
+// ----------------------------------------------------------------------------
+// WidgetsTextCtrl
+// ----------------------------------------------------------------------------
+
+class WidgetsTextCtrl : public wxTextCtrl
+{
+public:
+ WidgetsTextCtrl(wxWindow *parent,
+ wxWindowID id,
+ const wxString& value,
+ int flags)
+ : wxTextCtrl(parent, id, value, wxDefaultPosition, wxDefaultSize, flags)
+ {
+ }
+
+protected:
+ void OnRightClick(wxMouseEvent& event)
+ {
+ wxString where;
+ wxTextCoord x, y;
+ switch ( HitTest(event.GetPosition(), &x, &y) )
+ {
+ default:
+ wxFAIL_MSG( _T("unexpected HitTest() result") );
+ // fall through
+
+ case wxTE_HT_UNKNOWN:
+ x = y = -1;
+ where = _T("nowhere near");
+ break;
+
+ case wxTE_HT_BEFORE:
+ where = _T("before");
+ break;
+
+ case wxTE_HT_BELOW:
+ where = _T("below");
+ break;
+
+ case wxTE_HT_BEYOND:
+ where = _T("beyond");
+ break;
+
+ case wxTE_HT_ON_TEXT:
+ where = _T("at");
+ break;
+ }
+
+ wxLogMessage(_T("Mouse is %s (%ld, %ld)"), where.c_str(), x, y);
+
+ event.Skip();
+ }
+
+private:
+ DECLARE_EVENT_TABLE()
+};
+
// ----------------------------------------------------------------------------
// event tables
// ----------------------------------------------------------------------------
EVT_TEXT(TextPage_Textctrl, TextWidgetsPage::OnText)
EVT_TEXT_ENTER(TextPage_Textctrl, TextWidgetsPage::OnTextEnter)
- EVT_CHECKBOX(-1, TextWidgetsPage::OnCheckOrRadioBox)
- EVT_RADIOBOX(-1, TextWidgetsPage::OnCheckOrRadioBox)
+ EVT_CHECKBOX(wxID_ANY, TextWidgetsPage::OnCheckOrRadioBox)
+ EVT_RADIOBOX(wxID_ANY, TextWidgetsPage::OnCheckOrRadioBox)
+END_EVENT_TABLE()
+
+BEGIN_EVENT_TABLE(WidgetsTextCtrl, wxTextCtrl)
+ EVT_RIGHT_UP(WidgetsTextCtrl::OnRightClick)
END_EVENT_TABLE()
// ============================================================================
_T("multi line"),
};
- wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set textctrl parameters"));
- m_radioTextLines = new wxRadioBox(this, -1, _T("&Number of lines:"),
+ wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set textctrl parameters"));
+ m_radioTextLines = new wxRadioBox(this, wxID_ANY, _T("&Number of lines:"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(modes), modes,
1, wxRA_SPECIFY_COLS);
_T("rich edit 2.0"),
};
- m_radioKind = new wxRadioBox(this, -1, _T("Control &kind"),
+ m_radioKind = new wxRadioBox(this, wxID_ANY, _T("Control &kind"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(kinds), kinds,
1, wxRA_SPECIFY_COLS);
sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
// middle pane
- wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change contents:"));
+ wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Change contents:"));
wxSizer *sizerMiddleUp = new wxStaticBoxSizer(box2, wxVERTICAL);
btn = new wxButton(this, TextPage_Set, _T("&Set text value"));
btn = new wxButton(this, TextPage_Clear, _T("&Clear"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- wxStaticBox *box4 = new wxStaticBox(this, -1, _T("&Info:"));
+ wxStaticBox *box4 = new wxStaticBox(this, wxID_ANY, _T("&Info:"));
wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL);
m_textPosCur = CreateInfoText();
0, wxALL, 5
);
- m_textRange = new wxTextCtrl(this, -1, _T(""),
+ m_textRange = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
wxDefaultPosition, wxDefaultSize,
wxTE_READONLY);
sizerMiddleDown->Add
sizerMiddle->Add(sizerMiddleDown, 1, wxGROW | wxTOP, 5);
// right pane
- wxStaticBox *box3 = new wxStaticBox(this, -1, _T("&Text:"));
+ wxStaticBox *box3 = new wxStaticBox(this, wxID_ANY, _T("&Text:"));
m_sizerText = new wxStaticBoxSizer(box3, wxHORIZONTAL);
Reset();
CreateText();
sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
sizerTop->Add(m_sizerText, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
- SetAutoLayout(TRUE);
SetSizer(sizerTop);
sizerTop->Fit(this);
GetTextExtent(_T("9999999"), &s_maxWidth, NULL);
}
- wxTextCtrl *text = new wxTextCtrl(this, -1, _T(""),
+ wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
wxDefaultPosition,
wxSize(s_maxWidth, -1),
wxTE_READONLY);
wxTextCtrl *text2)
{
wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
- sizerRow->Add(new wxStaticText(this, -1, label), 0,
+ sizerRow->Add(new wxStaticText(this, wxID_ANY, label), 0,
wxALIGN_CENTRE_VERTICAL | wxRIGHT, 5);
sizerRow->Add(text, 0, wxALIGN_CENTRE_VERTICAL);
if ( text2 )
{
- sizerRow->Add(new wxStaticText(this, -1, label2), 0,
+ sizerRow->Add(new wxStaticText(this, wxID_ANY, label2), 0,
wxALIGN_CENTRE_VERTICAL | wxLEFT | wxRIGHT, 5);
sizerRow->Add(text2, 0, wxALIGN_CENTRE_VERTICAL);
}
case TextLines_Multi:
flags |= wxTE_MULTILINE;
- m_chkPassword->SetValue(FALSE);
+ m_chkPassword->SetValue(false);
break;
}
{
valueOld = m_text->GetValue();
- m_sizerText->Remove(m_text);
+ m_sizerText->Detach( m_text );
delete m_text;
}
else
valueOld = _T("Hello, Universe!");
}
- m_text = new wxTextCtrl(this, TextPage_Textctrl,
- valueOld,
- wxDefaultPosition, wxDefaultSize,
- flags);
+ m_text = new WidgetsTextCtrl(this, TextPage_Textctrl, valueOld, flags);
+
+ // cast to int needed to silence gcc warning about different enums
m_sizerText->Add(m_text, 1, wxALL |
- (flags & wxTE_MULTILINE ? wxGROW
+ (flags & wxTE_MULTILINE ? (int)wxGROW
: wxALIGN_TOP), 5);
m_sizerText->Layout();
}
if ( m_textLineLast )
{
m_textLineLast->SetValue(
- wxString::Format(_T("%ld"), m_text->GetNumberOfLines()));
+ wxString::Format(_T("%d"), m_text->GetNumberOfLines()) );
}
if ( m_textSelFrom && m_textSelTo )
if ( m_textRange )
{
- m_textRange->SetValue(m_text->GetRange(10, 20));
+ wxString range = m_text->GetRange(10, 20);
+ if ( range != m_range10_20 )
+ {
+ m_range10_20 = range;
+ m_textRange->SetValue(range);
+ }
}
}
else
{
long elapsed = sw.Time();
- wxLogMessage(_T("Loaded file '%s' in %u.%us"),
- filename.c_str(), elapsed / 1000, elapsed % 1000);
+ wxLogMessage(_T("Loaded file '%s' in %lu.%us"),
+ filename.c_str(), elapsed / 1000,
+ (unsigned int) elapsed % 1000);
}
}
}
(m_chkWrapLines->GetValue() != DEFAULTS.wraplines) );
}
-void TextWidgetsPage::OnText(wxCommandEvent& event)
+void TextWidgetsPage::OnText(wxCommandEvent& WXUNUSED(event))
{
// small hack to suppress the very first message: by then the logging is
// not yet redirected and so initial setting of the text value results in
// an annoying message box
- static bool s_firstTime = TRUE;
+ static bool s_firstTime = true;
if ( s_firstTime )
{
- s_firstTime = FALSE;
+ s_firstTime = false;
return;
}
wxLogMessage(_T("Text entered: '%s'"), event.GetString().c_str());
}
-void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
+void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
{
CreateText();
}
-#endif
+