#include "wx/log.h"
#include "wx/timer.h"
+ #include "wx/bitmap.h"
#include "wx/button.h"
#include "wx/checkbox.h"
#include "wx/radiobox.h"
TextLines_Multi
};
+#ifdef __WXMSW__
+
+// textctrl kind values
+enum TextKind
+{
+ TextKind_Plain,
+ TextKind_Rich,
+ TextKind_Rich2
+};
+
+#endif // __WXMSW__
+
// default values for the controls
static const struct ControlValues
{
bool password;
bool wraplines;
bool readonly;
+#ifdef __WXMSW__
+ TextKind textKind;
+#endif // __WXMSW__
} DEFAULTS =
{
TextLines_Multi, // multiline
FALSE, // not password
TRUE, // do wrap lines
- FALSE // not readonly
+ FALSE, // not readonly
+#ifdef __WXMSW__
+ TextKind_Plain // plain EDIT control
+#endif // __WXMSW__
};
// ----------------------------------------------------------------------------
*m_chkWrapLines,
*m_chkReadonly;
+ // under MSW we test rich edit controls as well here
+#ifdef __WXMSW__
+ wxRadioBox *m_radioKind;
+#endif // __WXMSW__
+
// the textctrl itself and the sizer it is in
wxTextCtrl *m_text;
wxSizer *m_sizerText;
*m_textPosLast,
*m_textLineLast,
*m_textSelFrom,
- *m_textSelTo;
+ *m_textSelTo,
+ *m_textRange;
// and the data to show in them
long m_posCur,
private:
// any class wishing to process wxWindows events must use this macro
- DECLARE_EVENT_TABLE();
-
- DECLARE_WIDGETS_PAGE(TextWidgetsPage);
+ DECLARE_EVENT_TABLE()
+ DECLARE_WIDGETS_PAGE(TextWidgetsPage)
};
// ----------------------------------------------------------------------------
imaglist->Add(wxBitmap(text_xpm));
// init everything
+#ifdef __WXMSW__
+ m_radioKind =
+#endif // __WXMSW__
m_radioTextLines = (wxRadioBox *)NULL;
m_chkPassword =
m_textPosLast =
m_textLineLast =
m_textSelFrom =
- m_textSelTo = (wxTextCtrl *)NULL;
+ m_textSelTo =
+ m_textRange = (wxTextCtrl *)NULL;
+
m_sizerText = (wxSizer *)NULL;
m_posCur =
sizerLeft, _T("&Read-only mode")
);
+#ifdef __WXMSW__
+ static const wxString kinds[] =
+ {
+ _T("plain edit"),
+ _T("rich edit"),
+ _T("rich edit 2.0"),
+ };
+
+ m_radioKind = new wxRadioBox(this, -1, _T("Control &kind"),
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(kinds), kinds,
+ 1, wxRA_SPECIFY_COLS);
+
+ sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
+ sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5);
+#endif // __WXMSW__
+
wxButton *btn = new wxButton(this, TextPage_Reset, _T("&Reset"));
+ sizerLeft->Add(2, 2, 0, wxGROW | wxALL, 1); // spacer
sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
// middle pane
wxSizer *sizerMiddleUp = new wxStaticBoxSizer(box2, wxVERTICAL);
btn = new wxButton(this, TextPage_Set, _T("&Set text value"));
- sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
+ sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
btn = new wxButton(this, TextPage_Add, _T("&Append text"));
- sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
+ sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
btn = new wxButton(this, TextPage_Insert, _T("&Insert text"));
- sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
+ sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
btn = new wxButton(this, TextPage_Load, _T("&Load file"));
- sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
+ sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
btn = new wxButton(this, TextPage_Clear, _T("&Clear"));
- sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
+ sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
wxStaticBox *box4 = new wxStaticBox(this, -1, _T("&Info:"));
wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL);
),
0, wxALL, 5
);
+
+ m_textRange = new wxTextCtrl(this, -1, _T(""),
+ wxDefaultPosition, wxDefaultSize,
+ wxTE_READONLY);
+ sizerMiddleDown->Add
+ (
+ CreateTextWithLabelSizer
+ (
+ _T("Range 10..20:"),
+ m_textRange
+ ),
+ 0, wxALL, 5
+ );
+
wxSizer *sizerMiddle = new wxBoxSizer(wxVERTICAL);
sizerMiddle->Add(sizerMiddleUp, 0, wxGROW);
sizerMiddle->Add(sizerMiddleDown, 1, wxGROW | wxTOP, 5);
m_sizerText = new wxStaticBoxSizer(box3, wxHORIZONTAL);
Reset();
CreateText();
- m_sizerText->SetMinSize(250, 0);
+ m_sizerText->SetMinSize(150, 0);
// the 3 panes panes compose the upper part of the window
wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
m_chkPassword->SetValue(DEFAULTS.password);
m_chkWrapLines->SetValue(DEFAULTS.wraplines);
m_chkReadonly->SetValue(DEFAULTS.readonly);
+#ifdef __WXMSW__
+ m_radioKind->SetSelection(DEFAULTS.textKind);
+#endif // __WXMSW__
}
void TextWidgetsPage::CreateText()
switch ( m_radioTextLines->GetSelection() )
{
default:
- wxFAIL_MSG( _T("unexpected radio box selection") );
+ wxFAIL_MSG( _T("unexpected lines radio box selection") );
case TextLines_Single:
break;
if ( !m_chkWrapLines->GetValue() )
flags |= wxHSCROLL;
+#ifdef __WXMSW__
+ switch ( m_radioKind->GetSelection() )
+ {
+ default:
+ wxFAIL_MSG( _T("unexpected kind radio box selection") );
+
+ case TextKind_Plain:
+ break;
+
+ case TextKind_Rich:
+ flags |= wxTE_RICH;
+ break;
+
+ case TextKind_Rich2:
+ flags |= wxTE_RICH2;
+ break;
+ }
+#endif // __WXMSW__
+
wxString valueOld;
if ( m_text )
{
valueOld = m_text->GetValue();
- m_sizerText->Remove(m_text);
+ m_sizerText->Detach( m_text );
delete m_text;
}
else
valueOld,
wxDefaultPosition, wxDefaultSize,
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 )
m_selTo = selTo;
}
}
+
+ if ( m_textRange )
+ {
+ m_textRange->SetValue(m_text->GetRange(10, 20));
+ }
}
void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
void TextWidgetsPage::OnButtonSet(wxCommandEvent& WXUNUSED(event))
{
- m_text->SetValue(_T("Yellow submarine"));
+ m_text->SetValue(m_text->GetWindowStyle() & wxTE_MULTILINE
+ ? _T("Here,\nthere and\neverywhere")
+ : _T("Yellow submarine"));
+
m_text->SetFocus();
}
void TextWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
{
- m_text->AppendText(_T("here, there and everywhere"));
- m_text->SetFocus();
+ if ( m_text->GetWindowStyle() & wxTE_MULTILINE )
+ {
+ m_text->AppendText(_T("We all live in a\n"));
+ }
+
+ m_text->AppendText(_T("Yellow submarine"));
}
void TextWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event))
{
- m_text->WriteText(_T("is there anybody going to listen to my story"));
- m_text->SetFocus();
+ m_text->WriteText(_T("Is there anybody going to listen to my story"));
+ if ( m_text->GetWindowStyle() & wxTE_MULTILINE )
+ {
+ m_text->WriteText(_T("\nall about the girl who came to stay"));
+ }
}
void TextWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
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);
}
}
}
void TextWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
{
event.Enable( (m_radioTextLines->GetSelection() != DEFAULTS.textLines) ||
+#ifdef __WXMSW__
+ (m_radioKind->GetSelection() != DEFAULTS.textKind) ||
+#endif // __WXMSW__
(m_chkReadonly->GetValue() != DEFAULTS.readonly) ||
(m_chkPassword->GetValue() != DEFAULTS.password) ||
(m_chkWrapLines->GetValue() != DEFAULTS.wraplines) );