Allow changing alignment styles after wxTextCtrl creation (wxOSX)

Update NSTextView/NSTextField alignment mode when wxTextCtrl alignment styles are changed with SetWindowStyleFlag().

Closes #17952.
This commit is contained in:
Andreas Falkenhahn
2017-09-25 15:38:24 +02:00
committed by Artur Wieczorek
parent cd1c3fab0c
commit ccc513bca9
7 changed files with 57 additions and 3 deletions

View File

@@ -241,6 +241,7 @@ wxOSX:
- Add support for wxTE_CHARWRAP style to wxTextCtrl.
- Fix selecting RGB bitmaps (with no alpha channel) into wxMemoryDC.
- Fix updating radio groups when menu item is inserted/removed from wxMenu.
- Allow changing alignment styles after wxTextCtrl creation (Andreas Falkenhahn).
Unix:

View File

@@ -69,6 +69,7 @@ public :
virtual void WriteText(const wxString& str) wxOVERRIDE ;
virtual bool HasOwnContextMenu() const wxOVERRIDE { return true; }
virtual bool SetHint(const wxString& hint) wxOVERRIDE;
virtual void SetJustification() wxOVERRIDE;
virtual void controlAction(WXWidget slf, void* _cmd, void *sender) wxOVERRIDE;
virtual bool becomeFirstResponder(WXWidget slf, void *_cmd) wxOVERRIDE;
@@ -125,6 +126,7 @@ public:
virtual void EnableAutomaticDashSubstitution(bool enable) wxOVERRIDE;
virtual wxSize GetBestSize() const wxOVERRIDE;
virtual void SetJustification() wxOVERRIDE;
virtual void controlTextDidChange() wxOVERRIDE;

View File

@@ -695,6 +695,7 @@ public :
virtual wxSize GetBestSize() const { return wxDefaultSize; }
virtual bool SetHint(const wxString& WXUNUSED(hint)) { return false; }
virtual void SetJustification();
private:
wxTextEntry * const m_entry;

View File

@@ -100,6 +100,7 @@ public:
virtual void Command(wxCommandEvent& event) wxOVERRIDE;
virtual bool AcceptsFocus() const wxOVERRIDE;
virtual void SetWindowStyleFlag(long style) wxOVERRIDE;
// callbacks
void OnDropFiles(wxDropFilesEvent& event);

View File

@@ -1004,9 +1004,10 @@ public:
@endStyleTable
Note that alignment styles (wxTE_LEFT, wxTE_CENTRE and wxTE_RIGHT) can be
changed dynamically after control creation on wxMSW and wxGTK. wxTE_READONLY,
wxTE_PASSWORD and wrapping styles can be dynamically changed under wxGTK but
not wxMSW. The other styles can be only set during control creation.
changed dynamically after control creation on wxMSW, wxGTK and wxOSX.
wxTE_READONLY, wxTE_PASSWORD and wrapping styles can be dynamically changed
under wxGTK but not wxMSW. The other styles can be only set during control
creation.
@section textctrl_text_format wxTextCtrl Text Format

View File

@@ -1142,6 +1142,23 @@ wxSize wxNSTextViewControl::GetBestSize() const
return wxSize(0,0);
}
void wxNSTextViewControl::SetJustification()
{
if ( !m_textView )
return;
NSTextAlignment align;
if ( m_wxPeer->HasFlag(wxTE_RIGHT) )
align = NSRightTextAlignment;
else if ( m_wxPeer->HasFlag(wxTE_CENTRE) )
align = NSCenterTextAlignment;
else // wxTE_LEFT == 0
align = NSLeftTextAlignment;
[m_textView setAlignment:align];
}
// wxNSTextFieldControl
wxNSTextFieldControl::wxNSTextFieldControl( wxTextCtrl *text, WXWidget w )
@@ -1425,6 +1442,23 @@ bool wxNSTextFieldControl::SetHint(const wxString& hint)
return true;
}
void wxNSTextFieldControl::SetJustification()
{
if ( !m_textField )
return;
NSTextAlignment align;
if ( m_wxPeer->HasFlag(wxTE_RIGHT) )
align = NSRightTextAlignment;
else if ( m_wxPeer->HasFlag(wxTE_CENTRE) )
align = NSCenterTextAlignment;
else // wxTE_LEFT == 0
align = NSLeftTextAlignment;
[m_textField setAlignment:align];
}
//
//
//

View File

@@ -482,6 +482,17 @@ void wxTextCtrl::Command(wxCommandEvent & event)
ProcessCommand(event);
}
void wxTextCtrl::SetWindowStyleFlag(long style)
{
long styleOld = GetWindowStyleFlag();
wxTextCtrlBase::SetWindowStyleFlag(style);
static const long flagsAlign = wxTE_LEFT | wxTE_CENTRE | wxTE_RIGHT;
if ( (style & flagsAlign) != (styleOld & flagsAlign) )
GetTextPeer()->SetJustification();
}
// ----------------------------------------------------------------------------
// standard handlers for standard edit menu events
// ----------------------------------------------------------------------------
@@ -774,4 +785,7 @@ int wxTextWidgetImpl::GetLineLength(long lineNo) const
return 0 ;
}
void wxTextWidgetImpl::SetJustification()
{
}
#endif // wxUSE_TEXTCTRL