diff --git a/docs/changes.txt b/docs/changes.txt index 7454ee6a6f..27e0213a4a 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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: diff --git a/include/wx/osx/cocoa/private/textimpl.h b/include/wx/osx/cocoa/private/textimpl.h index bc60710cd9..fa42e78341 100644 --- a/include/wx/osx/cocoa/private/textimpl.h +++ b/include/wx/osx/cocoa/private/textimpl.h @@ -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; diff --git a/include/wx/osx/core/private.h b/include/wx/osx/core/private.h index 46eb71004f..05b124f492 100644 --- a/include/wx/osx/core/private.h +++ b/include/wx/osx/core/private.h @@ -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; diff --git a/include/wx/osx/textctrl.h b/include/wx/osx/textctrl.h index 48577f7ba0..2512c753fb 100644 --- a/include/wx/osx/textctrl.h +++ b/include/wx/osx/textctrl.h @@ -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); diff --git a/interface/wx/textctrl.h b/interface/wx/textctrl.h index 3f7fb46e84..150a137ec3 100644 --- a/interface/wx/textctrl.h +++ b/interface/wx/textctrl.h @@ -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 diff --git a/src/osx/cocoa/textctrl.mm b/src/osx/cocoa/textctrl.mm index 104f1a2d71..ca7641d9c3 100644 --- a/src/osx/cocoa/textctrl.mm +++ b/src/osx/cocoa/textctrl.mm @@ -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]; +} + // // // diff --git a/src/osx/textctrl_osx.cpp b/src/osx/textctrl_osx.cpp index 8b60ba0fa0..1ef8afa420 100644 --- a/src/osx/textctrl_osx.cpp +++ b/src/osx/textctrl_osx.cpp @@ -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