summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-10-18 22:07:56 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-10-18 22:07:56 +0100
commite20ebf2653bdd42e90ae97f1e77aa4591907b882 (patch)
tree4f6ae75f0fe59536ac1d509684e8d3db5d4f6db6 /vcl
parent9aa8e185d49cd694ac1e00771c1ef2c02cf08382 (diff)
support width-chars property for labels
Change-Id: Iba51f30a5e74d1e486bce10901ccb58f3488ce97
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/vcl/fixed.hxx3
-rw-r--r--vcl/source/control/fixed.cxx28
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;