diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-10-18 22:07:56 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-10-18 22:07:56 +0100 |
commit | e20ebf2653bdd42e90ae97f1e77aa4591907b882 (patch) | |
tree | 4f6ae75f0fe59536ac1d509684e8d3db5d4f6db6 /vcl | |
parent | 9aa8e185d49cd694ac1e00771c1ef2c02cf08382 (diff) |
support width-chars property for labels
Change-Id: Iba51f30a5e74d1e486bce10901ccb58f3488ce97
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/vcl/fixed.hxx | 3 | ||||
-rw-r--r-- | vcl/source/control/fixed.cxx | 28 |
2 files changed, 29 insertions, 2 deletions
diff --git a/vcl/inc/vcl/fixed.hxx b/vcl/inc/vcl/fixed.hxx index 397e3cf0c507..1d6f1bf6df9a 100644 --- a/vcl/inc/vcl/fixed.hxx +++ b/vcl/inc/vcl/fixed.hxx @@ -45,6 +45,7 @@ class VCL_DLLPUBLIC FixedText : public Control { private: sal_Int32 m_nMaxWidthChars; + sal_Int32 m_nMinWidthChars; using Control::ImplInitSettings; using Window::ImplInit; @@ -75,6 +76,8 @@ public: void setMaxWidthChars(sal_Int32 nWidth); sal_Int32 getMaxWidthChars() const { return m_nMaxWidthChars; } + void setMinWidthChars(sal_Int32 nWidth); + sal_Int32 getMinWidthChars() const { return m_nMinWidthChars; } static Size CalcMinimumTextSize(Control const* pControl, long nMaxWidth = 0x7fffffff); static Size getTextDimensions(Control const *pControl, const OUString &rTxt, long nMaxWidth); Size CalcMinimumSize(long nMaxWidth = 0x7fffffff) const; diff --git a/vcl/source/control/fixed.cxx b/vcl/source/control/fixed.cxx index 9d35c1f45640..f330d8f9a810 100644 --- a/vcl/source/control/fixed.cxx +++ b/vcl/source/control/fixed.cxx @@ -33,7 +33,7 @@ #include "vcl/dialog.hxx" #include "vcl/event.hxx" #include "vcl/fixed.hxx" - +#include <comphelper/string.hxx> #include "controldata.hxx" #include "window.h" @@ -157,6 +157,7 @@ void FixedText::ImplInitSettings( sal_Bool bFont, FixedText::FixedText( Window* pParent, WinBits nStyle ) : Control(WINDOW_FIXEDTEXT) , m_nMaxWidthChars(-1) + , m_nMinWidthChars(-1) { ImplInit( pParent, nStyle ); } @@ -166,6 +167,7 @@ FixedText::FixedText( Window* pParent, WinBits nStyle ) FixedText::FixedText( Window* pParent, const ResId& rResId ) : Control(WINDOW_FIXEDTEXT) , m_nMaxWidthChars(-1) + , m_nMinWidthChars(-1) { rResId.SetRT( RSC_TEXT ); WinBits nStyle = ImplInitRes( rResId ); @@ -193,6 +195,7 @@ void FixedText::take_properties(Window &rOther) FixedText::FixedText( Window* pParent, const ResId& rResId, bool bDisableAccessibleLabelForRelation ) : Control( WINDOW_FIXEDTEXT ) , m_nMaxWidthChars(-1) + , m_nMinWidthChars(-1) { rResId.SetRT( RSC_TEXT ); WinBits nStyle = ImplInitRes( rResId ); @@ -446,7 +449,17 @@ Size FixedText::GetOptimalSize(WindowSizeType eType) const nMaxAvailWidth = getTextDimensions(this, rTxt.copy(0, m_nMaxWidthChars), 0x7fffffff).Width(); } - return CalcMinimumSize(nMaxAvailWidth); + Size aRet = CalcMinimumSize(nMaxAvailWidth); + if (m_nMinWidthChars != -1) + { + OUStringBuffer aBuf; + comphelper::string::padToLength(aBuf, m_nMinWidthChars, 'x'); + Size aMinAllowed = getTextDimensions(this, + aBuf.makeStringAndClear(), 0x7fffffff); + if (aMinAllowed.Width() > aRet.Width()) + aRet = aMinAllowed; + } + return aRet; } default: return Control::GetOptimalSize( eType ); @@ -470,10 +483,21 @@ void FixedText::setMaxWidthChars(sal_Int32 nWidth) } } +void FixedText::setMinWidthChars(sal_Int32 nWidth) +{ + if (nWidth != m_nMinWidthChars) + { + m_nMinWidthChars = nWidth; + queue_resize(); + } +} + bool FixedText::set_property(const rtl::OString &rKey, const rtl::OString &rValue) { if (rKey == "max-width-chars") setMaxWidthChars(rValue.toInt32()); + else if (rKey == "width-chars") + setMinWidthChars(rValue.toInt32()); else return Control::set_property(rKey, rValue); return true; |