Add presentation of text alignment in wxTextCtrl to widgets sample

Added an option to choose text alignment styles for wxTextCtrl presented
in the sample.
This commit is contained in:
Artur Wieczorek
2017-08-03 19:44:28 +02:00
parent 9229777535
commit 111ff4e618

View File

@@ -86,6 +86,14 @@ enum WrapStyle
WrapStyle_Max
};
// Alignment style radio box
enum AlignmentStyle
{
Align_Left,
Align_Center,
Align_Right,
};
#ifdef __WXMSW__
// textctrl kind values
@@ -111,6 +119,7 @@ static const struct ControlValues
bool noVertScrollbar;
WrapStyle wrapStyle;
AlignmentStyle alignmentStyle;
#ifdef __WXMSW__
TextKind textKind;
@@ -124,6 +133,7 @@ static const struct ControlValues
false, // not filename
false, // don't hide vertical scrollbar
WrapStyle_Word, // wrap on word boundaries
Align_Left, // leading-alignment
#ifdef __WXMSW__
TextKind_Plain // plain EDIT control
#endif // __WXMSW__
@@ -208,6 +218,9 @@ protected:
// and another one to choose the wrapping style
wxRadioBox *m_radioWrap;
// and yet another one to choose the alignment style
wxRadioBox *m_radioAlign;
// the checkboxes controlling text ctrl styles
wxCheckBox *m_chkPassword,
*m_chkReadonly,
@@ -370,6 +383,7 @@ TextWidgetsPage::TextWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
m_radioKind =
#endif // __WXMSW__
m_radioWrap =
m_radioAlign =
m_radioTextLines = (wxRadioBox *)NULL;
m_chkPassword =
@@ -449,6 +463,18 @@ void TextWidgetsPage::CreateContent()
1, wxRA_SPECIFY_COLS);
sizerLeft->Add(m_radioWrap, 0, wxGROW | wxALL, 5);
static const wxString halign[] =
{
wxS("left"),
wxS("centre"),
wxS("right"),
};
m_radioAlign = new wxRadioBox(this, wxID_ANY, wxS("&Text alignment"),
wxDefaultPosition, wxDefaultSize,
WXSIZEOF(halign), halign, 1);
sizerLeft->Add(m_radioAlign, 0, wxGROW | wxALL, 5);
#ifdef __WXMSW__
static const wxString kinds[] =
{
@@ -635,6 +661,7 @@ void TextWidgetsPage::Reset()
m_chkNoVertScrollbar->SetValue(DEFAULTS.noVertScrollbar);
m_radioWrap->SetSelection(DEFAULTS.wrapStyle);
m_radioAlign->SetSelection(DEFAULTS.alignmentStyle);
#ifdef __WXMSW__
m_radioKind->SetSelection(DEFAULTS.textKind);
@@ -690,6 +717,21 @@ void TextWidgetsPage::CreateText()
break;
}
switch ( m_radioAlign->GetSelection() )
{
case Align_Left:
flags |= wxTE_LEFT;
break;
case Align_Center:
flags |= wxTE_CENTER;
break;
case Align_Right:
flags |= wxTE_RIGHT;
break;
default:
wxFAIL_MSG( wxS("unexpected alignment style radio box selection") );
}
#ifdef __WXMSW__
switch ( m_radioKind->GetSelection() )
{
@@ -949,9 +991,47 @@ void TextWidgetsPage::OnTextPasted(wxClipboardTextEvent& event)
event.Skip();
}
void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event))
void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
{
CreateText();
#if defined(__WXMSW__) || defined(__WXGTK__)
// We should be able to change text alignment
// dynamically, without recreating the control.
if( event.GetEventObject() == m_radioAlign )
{
long flags = m_text->GetWindowStyle();
flags &= ~(wxTE_LEFT|wxTE_CENTER|wxTE_RIGHT);
switch ( event.GetSelection() )
{
case Align_Left:
flags |= wxTE_LEFT;
break;
case Align_Center:
flags |= wxTE_CENTER;
break;
case Align_Right:
flags |= wxTE_RIGHT;
break;
default:
wxFAIL_MSG( wxS("unexpected alignment style radio box selection") );
return;
}
m_text->SetWindowStyle(flags);
m_text->Refresh();
flags = m_text->GetWindowStyle();
wxLogMessage(wxString::Format("Text alignment: %s",
(flags & wxTE_RIGHT) ? "Right" :
(flags & wxTE_CENTER) ? "Center" : "Left"));
}
else
#else
wxUnusedVar(event);
#endif // WXMSW || WXGTK
{
CreateText();
}
}
void TextWidgetsPage::OnStreamRedirector(wxCommandEvent& WXUNUSED(event))