diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-09-04 14:14:55 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-09-28 08:48:43 +0100 |
commit | 6382768c8e2e2755ceeb5f04d6a1eb35a833383c (patch) | |
tree | bdc49fc78b93dd663633f7e340ef18400d7f8bbe /vcl | |
parent | fd7849d58de6c36eb7edd9d13b3f7c7da05fe235 (diff) |
support GtkEntry width-chars property
Change-Id: I5a3bdf6058b0d786923a9543a064bddcc84f001a
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/vcl/edit.hxx | 7 | ||||
-rw-r--r-- | vcl/source/control/edit.cxx | 22 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 11 |
3 files changed, 38 insertions, 2 deletions
diff --git a/vcl/inc/vcl/edit.hxx b/vcl/inc/vcl/edit.hxx index 947aeca5de13..20ed5b869ba9 100644 --- a/vcl/inc/vcl/edit.hxx +++ b/vcl/inc/vcl/edit.hxx @@ -76,8 +76,9 @@ private: XubString maRedoText; long mnXOffset; Selection maSelection; - sal_uInt16 mnAlign; + sal_uInt16 mnAlign; xub_StrLen mnMaxTextLen; + sal_Int32 mnMinWidthInChars; AutocompleteAction meAutocompleteAction; xub_Unicode mcEchoChar; sal_Bool mbModified:1, @@ -198,6 +199,9 @@ public: virtual void SetMaxTextLen( xub_StrLen nMaxLen = EDIT_NOLIMIT ); virtual xub_StrLen GetMaxTextLen() const { return mnMaxTextLen; } + void SetMaxWidthInChars(sal_Int32 nMinWidthInChars); + sal_Int32 GetMinWidthInChars() const { return mnMinWidthInChars; } + virtual void SetSelection( const Selection& rSelection ); virtual const Selection& GetSelection() const; @@ -249,6 +253,7 @@ public: virtual rtl::OUString GetSurroundingText() const; virtual Selection GetSurroundingTextSelection() const; virtual void take_properties(Window &rOther); + virtual bool set_property(const rtl::OString &rKey, const rtl::OString &rValue); // returns the minimum size a bordered Edit should have given the current // global style settings (needed by sc's inputwin.cxx) diff --git a/vcl/source/control/edit.cxx b/vcl/source/control/edit.cxx index 019cca649e95..0f54b2debce0 100644 --- a/vcl/source/control/edit.cxx +++ b/vcl/source/control/edit.cxx @@ -219,6 +219,24 @@ Edit::Edit( Window* pParent, const ResId& rResId ) : Show(); } +void Edit::SetMaxWidthInChars(sal_Int32 nMinWidthInChars) +{ + if (mnMinWidthInChars != nMinWidthInChars) + { + mnMinWidthInChars = nMinWidthInChars; + queue_resize(); + } +} + +bool Edit::set_property(const rtl::OString &rKey, const rtl::OString &rValue) +{ + if (rKey.equalsL(RTL_CONSTASCII_STRINGPARAM("width-chars"))) + SetMaxWidthInChars(rValue.toInt32()); + else + return Control::set_property(rKey, rValue); + return true; +} + void Edit::take_properties(Window &rOther) { if (!GetParent()) @@ -238,6 +256,7 @@ void Edit::take_properties(Window &rOther) maSelection = rOtherEdit.maSelection; mnAlign = rOtherEdit.mnAlign; mnMaxTextLen = rOtherEdit.mnMaxTextLen; + mnMinWidthInChars = rOtherEdit.mnMinWidthInChars; meAutocompleteAction = rOtherEdit.meAutocompleteAction; mcEchoChar = rOtherEdit.mcEchoChar; mbModified = rOtherEdit.mbModified; @@ -312,6 +331,7 @@ void Edit::ImplInitEditData() mnXOffset = 0; mnAlign = EDIT_ALIGN_LEFT; mnMaxTextLen = EDIT_NOLIMIT; + mnMinWidthInChars = 3; meAutocompleteAction = AUTOCOMPLETE_KEYINPUT; mbModified = sal_False; mbInternModified = sal_False; @@ -2873,7 +2893,7 @@ Size Edit::CalcMinimumSizeForText(const rtl::OUString &rString) const Size aSize ( GetTextWidth( rString ), GetTextHeight() ); // do not create edit fields in which one cannot enter anything // a default minimum width should exist for at least 3 characters - Size aMinSize ( CalcSize( 3 ) ); + Size aMinSize ( CalcSize( mnMinWidthInChars ) ); if( aSize.Width() < aMinSize.Width() ) aSize.Width() = aMinSize.Width(); // add some space between text entry and border diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index d85966fd464b..7eb5d442006b 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -304,6 +304,14 @@ namespace return eUnit; } + + void ensureDefaultWidthChars(VclBuilder::stringmap &rMap) + { + rtl::OString sWidthChars(RTL_CONSTASCII_STRINGPARAM("width-chars")); + VclBuilder::stringmap::iterator aFind = rMap.find(sWidthChars); + if (aFind == rMap.end()) + rMap[sWidthChars] = "25"; + } } bool VclBuilder::extractGroup(const rtl::OString &id, stringmap &rMap) @@ -469,7 +477,10 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, const pWindow = new FixedLine(pParent, WB_HORZ); } else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkEntry"))) + { pWindow = new Edit(pParent, WB_LEFT|WB_VCENTER|WB_BORDER|WB_3DLOOK); + ensureDefaultWidthChars(rMap); + } else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkNotebook"))) pWindow = new TabControl(pParent, WB_STDTABCONTROL|WB_3DLOOK); else if (name.equalsL(RTL_CONSTASCII_STRINGPARAM("GtkDrawingArea"))) |