#endif
#include "wx/sizer.h"
+#include "wx/ioswrap.h"
#include "widgets.h"
// control ids
enum
{
- TextPage_Reset = 100,
+ TextPage_Reset = wxID_HIGHEST,
TextPage_Set,
TextPage_Add,
bool password;
bool readonly;
+ bool processEnter;
+ bool filename;
WrapStyle wrapStyle;
TextLines_Multi, // multiline
false, // not password
false, // not readonly
+ true, // do process enter
+ false, // not filename
WrapStyle_Word, // wrap on word boundaries
#ifdef __WXMSW__
TextKind_Plain // plain EDIT control
{
public:
// ctor(s) and dtor
- TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist);
+ TextWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist);
virtual ~TextWidgetsPage(){};
virtual wxControl *GetWidget() const { return m_text; }
+ virtual wxTextEntryBase *GetTextEntry() const { return m_text; }
+ virtual void RecreateWidget() { CreateText(); }
+
+ // lazy creation of the content
+ virtual void CreateContent();
protected:
// create an info text contorl
// the checkboxes controlling text ctrl styles
wxCheckBox *m_chkPassword,
- *m_chkReadonly;
+ *m_chkReadonly,
+ *m_chkProcessEnter,
+ *m_chkFilename;
// under MSW we test rich edit controls as well here
#ifdef __WXMSW__
switch ( HitTest(event.GetPosition(), &x, &y) )
{
default:
- wxFAIL_MSG( _T("unexpected HitTest() result") );
+ wxFAIL_MSG( wxT("unexpected HitTest() result") );
// fall through
case wxTE_HT_UNKNOWN:
x = y = -1;
- where = _T("nowhere near");
+ where = wxT("nowhere near");
break;
case wxTE_HT_BEFORE:
- where = _T("before");
+ where = wxT("before");
break;
case wxTE_HT_BELOW:
- where = _T("below");
+ where = wxT("below");
break;
case wxTE_HT_BEYOND:
- where = _T("beyond");
+ where = wxT("beyond");
break;
case wxTE_HT_ON_TEXT:
- where = _T("at");
+ where = wxT("at");
break;
}
- wxLogMessage(_T("Mouse is %s (%ld, %ld)"), where.c_str(), x, y);
+ wxLogMessage(wxT("Mouse is %s (%ld, %ld)"), where.c_str(), x, y);
event.Skip();
}
// implementation
// ============================================================================
-IMPLEMENT_WIDGETS_PAGE(TextWidgetsPage, _T("Text"));
+#if defined(__WXX11__)
+ #define FAMILY_CTRLS NATIVE_CTRLS
+#elif defined(__WXUNIVERSAL__)
+ #define FAMILY_CTRLS UNIVERSAL_CTRLS
+#else
+ #define FAMILY_CTRLS NATIVE_CTRLS
+#endif
+
+IMPLEMENT_WIDGETS_PAGE(TextWidgetsPage, wxT("Text"),
+ FAMILY_CTRLS | EDITABLE_CTRLS
+ );
// ----------------------------------------------------------------------------
// TextWidgetsPage creation
// ----------------------------------------------------------------------------
-TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist)
- : WidgetsPage(book)
+TextWidgetsPage::TextWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
+ : WidgetsPage(book, imaglist, text_xpm)
{
- imaglist->Add(wxBitmap(text_xpm));
-
// init everything
#ifdef __WXMSW__
m_radioKind =
m_radioTextLines = (wxRadioBox *)NULL;
m_chkPassword =
- m_chkReadonly = (wxCheckBox *)NULL;
+ m_chkReadonly =
+ m_chkProcessEnter =
+ m_chkFilename = (wxCheckBox *)NULL;
m_text =
m_textPosCur =
m_posLast =
m_selFrom =
m_selTo = -2; // not -1 which means "no selection"
+}
+void TextWidgetsPage::CreateContent()
+{
// left pane
static const wxString modes[] =
{
- _T("single line"),
- _T("multi line"),
+ wxT("single line"),
+ wxT("multi line"),
};
- wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set textctrl parameters"));
- m_radioTextLines = new wxRadioBox(this, wxID_ANY, _T("&Number of lines:"),
+ wxStaticBox *box = new wxStaticBox(this, wxID_ANY, wxT("&Set textctrl parameters"));
+ m_radioTextLines = new wxRadioBox(this, wxID_ANY, wxT("&Number of lines:"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(modes), modes,
1, wxRA_SPECIFY_COLS);
sizerLeft->AddSpacer(5);
m_chkPassword = CreateCheckBoxAndAddToSizer(
- sizerLeft, _T("&Password control"), TextPage_Password
+ sizerLeft, wxT("&Password control"), TextPage_Password
);
m_chkReadonly = CreateCheckBoxAndAddToSizer(
- sizerLeft, _T("&Read-only mode")
+ sizerLeft, wxT("&Read-only mode")
+ );
+ m_chkProcessEnter = CreateCheckBoxAndAddToSizer(
+ sizerLeft, wxT("Process &Enter")
);
+ m_chkFilename = CreateCheckBoxAndAddToSizer(
+ sizerLeft, wxT("&Filename control")
+ );
+ m_chkFilename->Disable(); // not implemented yet
sizerLeft->AddSpacer(5);
static const wxString wrap[] =
{
- _T("no wrap"),
- _T("word wrap"),
- _T("char wrap"),
- _T("best wrap"),
+ wxT("no wrap"),
+ wxT("word wrap"),
+ wxT("char wrap"),
+ wxT("best wrap"),
};
- m_radioWrap = new wxRadioBox(this, wxID_ANY, _T("&Wrap style:"),
+ m_radioWrap = new wxRadioBox(this, wxID_ANY, wxT("&Wrap style:"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(wrap), wrap,
1, wxRA_SPECIFY_COLS);
#ifdef __WXMSW__
static const wxString kinds[] =
{
- _T("plain edit"),
- _T("rich edit"),
- _T("rich edit 2.0"),
+ wxT("plain edit"),
+ wxT("rich edit"),
+ wxT("rich edit 2.0"),
};
- m_radioKind = new wxRadioBox(this, wxID_ANY, _T("Control &kind"),
+ m_radioKind = new wxRadioBox(this, wxID_ANY, wxT("Control &kind"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(kinds), kinds,
1, wxRA_SPECIFY_COLS);
sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5);
#endif // __WXMSW__
- wxButton *btn = new wxButton(this, TextPage_Reset, _T("&Reset"));
+ wxButton *btn = new wxButton(this, TextPage_Reset, wxT("&Reset"));
sizerLeft->Add(2, 2, 0, wxGROW | wxALL, 1); // spacer
sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
// middle pane
- wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Change contents:"));
+ wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, wxT("&Change contents:"));
wxSizer *sizerMiddleUp = new wxStaticBoxSizer(box2, wxVERTICAL);
- btn = new wxButton(this, TextPage_Set, _T("&Set text value"));
+ btn = new wxButton(this, TextPage_Set, wxT("&Set text value"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- btn = new wxButton(this, TextPage_Add, _T("&Append text"));
+ btn = new wxButton(this, TextPage_Add, wxT("&Append text"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- btn = new wxButton(this, TextPage_Insert, _T("&Insert text"));
+ btn = new wxButton(this, TextPage_Insert, wxT("&Insert text"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- btn = new wxButton(this, TextPage_Load, _T("&Load file"));
+ btn = new wxButton(this, TextPage_Load, wxT("&Load file"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- btn = new wxButton(this, TextPage_Clear, _T("&Clear"));
+ btn = new wxButton(this, TextPage_Clear, wxT("&Clear"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- btn = new wxButton(this, TextPage_StreamRedirector, _T("St&ream redirection"));
+ btn = new wxButton(this, TextPage_StreamRedirector, wxT("St&ream redirection"));
sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1);
- wxStaticBox *box4 = new wxStaticBox(this, wxID_ANY, _T("&Info:"));
+ wxStaticBox *box4 = new wxStaticBox(this, wxID_ANY, wxT("&Info:"));
wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL);
m_textPosCur = CreateInfoText();
wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
sizerRow->Add(CreateTextWithLabelSizer
(
- _T("Current pos:"),
+ wxT("Current pos:"),
m_textPosCur
),
0, wxRIGHT, 5);
sizerRow->Add(CreateTextWithLabelSizer
(
- _T("Col:"),
+ wxT("Col:"),
m_textColCur
),
0, wxLEFT | wxRIGHT, 5);
sizerRow->Add(CreateTextWithLabelSizer
(
- _T("Row:"),
+ wxT("Row:"),
m_textRowCur
),
0, wxLEFT, 5);
(
CreateTextWithLabelSizer
(
- _T("Number of lines:"),
+ wxT("Number of lines:"),
m_textLineLast,
- _T("Last position:"),
+ wxT("Last position:"),
m_textPosLast
),
0, wxALL, 5
(
CreateTextWithLabelSizer
(
- _T("Selection: from"),
+ wxT("Selection: from"),
m_textSelFrom,
- _T("to"),
+ wxT("to"),
m_textSelTo
),
0, wxALL, 5
(
CreateTextWithLabelSizer
(
- _T("Range 10..20:"),
+ wxT("Range 10..20:"),
m_textRange
),
0, wxALL, 5
sizerMiddle->Add(sizerMiddleDown, 1, wxGROW | wxTOP, 5);
// right pane
- wxStaticBox *box3 = new wxStaticBox(this, wxID_ANY, _T("&Text:"));
+ wxStaticBox *box3 = new wxStaticBox(this, wxID_ANY, wxT("&Text:"));
m_sizerText = new wxStaticBoxSizer(box3, wxHORIZONTAL);
Reset();
CreateText();
sizerTop->Add(m_sizerText, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
SetSizer(sizerTop);
-
- sizerTop->Fit(this);
}
// ----------------------------------------------------------------------------
if ( !s_maxWidth )
{
// calc it once only
- GetTextExtent(_T("9999999"), &s_maxWidth, NULL);
+ GetTextExtent(wxT("9999999"), &s_maxWidth, NULL);
}
wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
wxDefaultPosition,
- wxSize(s_maxWidth, -1),
+ wxSize(s_maxWidth, wxDefaultCoord),
wxTE_READONLY);
return text;
}
m_chkPassword->SetValue(DEFAULTS.password);
m_chkReadonly->SetValue(DEFAULTS.readonly);
+ m_chkProcessEnter->SetValue(DEFAULTS.processEnter);
+ m_chkFilename->SetValue(DEFAULTS.filename);
m_radioWrap->SetSelection(DEFAULTS.wrapStyle);
void TextWidgetsPage::CreateText()
{
- int flags = 0;
+ int flags = ms_defaultFlags;
switch ( m_radioTextLines->GetSelection() )
{
default:
- wxFAIL_MSG( _T("unexpected lines radio box selection") );
+ wxFAIL_MSG( wxT("unexpected lines radio box selection") );
case TextLines_Single:
break;
flags |= wxTE_PASSWORD;
if ( m_chkReadonly->GetValue() )
flags |= wxTE_READONLY;
+ if ( m_chkProcessEnter->GetValue() )
+ flags |= wxTE_PROCESS_ENTER;
switch ( m_radioWrap->GetSelection() )
{
default:
- wxFAIL_MSG( _T("unexpected wrap style radio box selection") );
+ wxFAIL_MSG( wxT("unexpected wrap style radio box selection") );
case WrapStyle_None:
flags |= wxTE_DONTWRAP; // same as wxHSCROLL
break;
case WrapStyle_Char:
- flags |= wxTE_LINEWRAP;
+ flags |= wxTE_CHARWRAP;
break;
case WrapStyle_Best:
switch ( m_radioKind->GetSelection() )
{
default:
- wxFAIL_MSG( _T("unexpected kind radio box selection") );
+ wxFAIL_MSG( wxT("unexpected kind radio box selection") );
case TextKind_Plain:
break;
}
else
{
- valueOld = _T("Hello, Universe!");
+ valueOld = wxT("Hello, Universe!");
}
m_text = new WidgetsTextCtrl(this, TextPage_Textctrl, valueOld, flags);
+#if 0
+ if ( m_chkFilename->GetValue() )
+ ;
+#endif // TODO
+
// cast to int needed to silence gcc warning about different enums
m_sizerText->Add(m_text, 1, wxALL |
(flags & wxTE_MULTILINE ? (int)wxGROW
if ( m_textLineLast )
{
m_textLineLast->SetValue(
- wxString::Format(_T("%d"), m_text->GetNumberOfLines()) );
+ wxString::Format(wxT("%d"), m_text->GetNumberOfLines()) );
}
if ( m_textSelFrom && m_textSelTo )
void TextWidgetsPage::OnButtonSet(wxCommandEvent& WXUNUSED(event))
{
m_text->SetValue(m_text->GetWindowStyle() & wxTE_MULTILINE
- ? _T("Here,\nthere and\neverywhere")
- : _T("Yellow submarine"));
+ ? wxT("Here,\nthere and\neverywhere")
+ : wxT("Yellow submarine"));
m_text->SetFocus();
}
{
if ( m_text->GetWindowStyle() & wxTE_MULTILINE )
{
- m_text->AppendText(_T("We all live in a\n"));
+ m_text->AppendText(wxT("We all live in a\n"));
}
- m_text->AppendText(_T("Yellow submarine"));
+ m_text->AppendText(wxT("Yellow submarine"));
}
void TextWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event))
{
- m_text->WriteText(_T("Is there anybody going to listen to my story"));
+ m_text->WriteText(wxT("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"));
+ m_text->WriteText(wxT("\nall about the girl who came to stay"));
}
}
{
// search for the file in several dirs where it's likely to be
wxPathList pathlist;
- pathlist.Add(_T("."));
- pathlist.Add(_T(".."));
- pathlist.Add(_T("../../../samples/widgets"));
+ pathlist.Add(wxT("."));
+ pathlist.Add(wxT(".."));
+ pathlist.Add(wxT("../../../samples/widgets"));
- wxString filename = pathlist.FindValidPath(_T("textctrl.cpp"));
+ wxString filename = pathlist.FindValidPath(wxT("textctrl.cpp"));
if ( !filename )
{
- wxLogError(_T("File textctrl.cpp not found."));
+ wxLogError(wxT("File textctrl.cpp not found."));
}
else // load it
{
if ( !m_text->LoadFile(filename) )
{
// this is not supposed to happen ...
- wxLogError(_T("Error loading file."));
+ wxLogError(wxT("Error loading file."));
}
else
{
long elapsed = sw.Time();
- wxLogMessage(_T("Loaded file '%s' in %lu.%us"),
+ wxLogMessage(wxT("Loaded file '%s' in %lu.%us"),
filename.c_str(), elapsed / 1000,
(unsigned int) elapsed % 1000);
}
#ifdef __WXMSW__
(m_radioKind->GetSelection() != DEFAULTS.textKind) ||
#endif // __WXMSW__
- (m_chkReadonly->GetValue() != DEFAULTS.readonly) ||
(m_chkPassword->GetValue() != DEFAULTS.password) ||
+ (m_chkReadonly->GetValue() != DEFAULTS.readonly) ||
+ (m_chkProcessEnter->GetValue() != DEFAULTS.processEnter) ||
+ (m_chkFilename->GetValue() != DEFAULTS.filename) ||
(m_radioWrap->GetSelection() != DEFAULTS.wrapStyle) );
}
return;
}
- wxLogMessage(_T("Text ctrl value changed"));
+ wxLogMessage(wxT("Text ctrl value changed"));
}
void TextWidgetsPage::OnTextEnter(wxCommandEvent& event)
{
- wxLogMessage(_T("Text entered: '%s'"), event.GetString().c_str());
+ wxLogMessage(wxT("Text entered: '%s'"), event.GetString().c_str());
event.Skip();
}
void TextWidgetsPage::OnStreamRedirector(wxCommandEvent& WXUNUSED(event))
{
-// Note, NO_TEXT_WINDOW_STREAM is private flag of wxWidgets header
-// it's simpler to check it rather than duplicate whole
-#ifdef NO_TEXT_WINDOW_STREAM
- wxMessageBox(_T("This wxWidgets build does not support wxStreamToTextRedirector"));
-#else
+#if wxHAS_TEXT_WINDOW_STREAM
wxStreamToTextRedirector redirect(m_text);
- wxString str( _T("Outputed to cout, appears in wxTextCtrl!") );
- cout << str << endl;
+ wxString str( wxT("Outputed to cout, appears in wxTextCtrl!") );
+ wxSTD cout << str << wxSTD endl;
+#else
+ wxMessageBox(wxT("This wxWidgets build does not support wxStreamToTextRedirector"));
#endif
}