extras/source/glade/libreoffice-catalog.xml | 15 +++++++++++++++ sc/uiconfig/scalc/ui/sortoptionspage.ui | 3 ++- vcl/inc/vcl/combobox.hxx | 4 ++++ vcl/inc/vcl/lstbox.hxx | 4 ++++ vcl/source/control/combobox.cxx | 17 +++++++++++++++++ vcl/source/control/lstbox.cxx | 21 +++++++++++++++++++++ vcl/source/window/builder.cxx | 2 +- 7 files changed, 64 insertions(+), 2 deletions(-)
New commits: commit 6c68f2c8edb47d8165521ce97799092ab449a9b7 Author: Caolán McNamara <caol...@redhat.com> Date: Fri Feb 22 16:54:59 2013 +0000 wrap max-width-chars in a custom widget to avoid it getting dropped silently Change-Id: I7ccbd4b2e1aebc84a59bb9000e7322c8aa62ffd7 diff --git a/extras/source/glade/libreoffice-catalog.xml b/extras/source/glade/libreoffice-catalog.xml index 0612baa..93f4dc6 100644 --- a/extras/source/glade/libreoffice-catalog.xml +++ b/extras/source/glade/libreoffice-catalog.xml @@ -57,5 +57,20 @@ <glade-widget-class title="Table Container" name="svxcorelo-SvxSimpleTableContainer" generic-name="Simple Table Container" parent="GtkTreeView" icon-name="widget-gtk-treeview"/> + + <glade-widget-class title="VclComboBoxText" name="VclComboBoxText" + generic-name="ComboBoxText" parent="GtkComboBoxText" + icon-name="widget-gtk-comboboxtext"> + <properties> + <property save="True" query="False" id="max-width-chars" default="-1" name="Maximum Width in Characters"> + <parameter-spec> + <type>GParamInt</type> + <min>-1</min> + </parameter-spec> + <tooltip>The desired maximum width of the ComboBox, in characters</tooltip> + </property> + </properties> + </glade-widget-class> + </glade-widget-classes> </glade-catalog> diff --git a/sc/uiconfig/scalc/ui/sortoptionspage.ui b/sc/uiconfig/scalc/ui/sortoptionspage.ui index 2b0a9cc..0fc7eeb 100644 --- a/sc/uiconfig/scalc/ui/sortoptionspage.ui +++ b/sc/uiconfig/scalc/ui/sortoptionspage.ui @@ -164,7 +164,7 @@ </packing> </child> <child> - <object class="GtkComboBox" id="sortuserlb"> + <object class="VclComboBoxText" id="sortuserlb"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">20</property> diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 264bf92..facb2e5 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -1060,7 +1060,7 @@ Window *VclBuilder::makeObject(Window *pParent, const OString &name, const OStri } else if (name == "GtkLinkButton") pWindow = new FixedHyperlink(pParent, WB_CENTER|WB_VCENTER|WB_3DLOOK|WB_NOLABEL); - else if ((name == "GtkComboBox") || (name == "GtkComboBoxText")) + else if ((name == "GtkComboBox") || (name == "GtkComboBoxText") || (name == "VclComboBoxText")) { extractModel(id, rMap); if (extractEntry(rMap)) commit 7c760f34a00462d5904d0e2eed4132761c2e51c5 Author: Caolán McNamara <caol...@redhat.com> Date: Fri Feb 22 15:41:00 2013 +0000 Resolves: fdo#60764 sort options can grow too wide to fit on screen Change-Id: Id3aed9ef251f61710b43ceda1a28c6895e91872f diff --git a/sc/uiconfig/scalc/ui/sortoptionspage.ui b/sc/uiconfig/scalc/ui/sortoptionspage.ui index 805e0cc..2b0a9cc 100644 --- a/sc/uiconfig/scalc/ui/sortoptionspage.ui +++ b/sc/uiconfig/scalc/ui/sortoptionspage.ui @@ -168,6 +168,7 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">20</property> + <property name="max_width_chars">72</property> <accessibility> <relation type="labelled-by" target="sortuser"/> </accessibility> diff --git a/vcl/inc/vcl/combobox.hxx b/vcl/inc/vcl/combobox.hxx index 33a4382..1a73983 100644 --- a/vcl/inc/vcl/combobox.hxx +++ b/vcl/inc/vcl/combobox.hxx @@ -47,6 +47,7 @@ private: sal_Bool mbDDAutoSize : 1; sal_Bool mbSyntheticModify : 1; sal_Bool mbMatchCase : 1; + sal_Int32 m_nMaxWidthChars; Link maSelectHdl; Link maDoubleClickHdl; @@ -214,6 +215,9 @@ public: */ using Control::GetIndexForPoint; long GetIndexForPoint( const Point& rPoint, sal_uInt16& rPos ) const; + + sal_Int32 getMaxWidthChars() const { return m_nMaxWidthChars; } + void setMaxWidthChars(sal_Int32 nWidth); }; #endif // _COMBOBOX_HXX diff --git a/vcl/inc/vcl/lstbox.hxx b/vcl/inc/vcl/lstbox.hxx index 694f45c..74dc854 100644 --- a/vcl/inc/vcl/lstbox.hxx +++ b/vcl/inc/vcl/lstbox.hxx @@ -44,6 +44,7 @@ private: sal_uInt16 mnDDHeight; sal_uInt16 mnSaveValue; sal_Bool mbDDAutoSize; + sal_Int32 m_nMaxWidthChars; Link maSelectHdl; Link maDoubleClickHdl; sal_uInt16 mnLineCount; @@ -219,6 +220,9 @@ public: using Control::GetIndexForPoint; long GetIndexForPoint( const Point& rPoint, sal_uInt16& rPos ) const; + sal_Int32 getMaxWidthChars() const { return m_nMaxWidthChars; } + void setMaxWidthChars(sal_Int32 nWidth); + virtual bool set_property(const rtl::OString &rKey, const rtl::OString &rValue); }; diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 673001d..e74d024 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -110,6 +110,7 @@ void ComboBox::ImplInitComboBoxData() mbSyntheticModify = sal_False; mbMatchCase = sal_False; mcMultiSep = ';'; + m_nMaxWidthChars = -1; } // ----------------------------------------------------------------------- @@ -1063,6 +1064,13 @@ Size ComboBox::CalcMinimumSize() const aSz.Height() = Edit::CalcMinimumSizeForText(GetText()).Height(); aSz.Width() = mpImplLB->GetMaxEntryWidth(); + if (m_nMaxWidthChars != -1) + { + //MAP_APPFONT == 1/8th avg char + long nMaxWidth = LogicToPixel(Size(m_nMaxWidthChars * 8, 0), + MapMode(MAP_APPFONT)).Width(); + aSz.Width() = std::min(aSz.Width(), nMaxWidth); + } aSz.Width() += getMaxWidthScrollBarAndDownButton(); ComboBoxBounds aBounds(calcComboBoxDropDownComponentBounds( Size(0xFFFF, 0xFFFF), Size(0xFFFF, 0xFFFF))); @@ -1541,4 +1549,13 @@ ComboBox::ComboBoxBounds ComboBox::calcComboBoxDropDownComponentBounds(const Siz return aBounds; } +void ComboBox::setMaxWidthChars(sal_Int32 nWidth) +{ + if (nWidth != m_nMaxWidthChars) + { + m_nMaxWidthChars = nWidth; + queue_resize(); + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx index beb216d..d87c1b3 100644 --- a/vcl/source/control/lstbox.cxx +++ b/vcl/source/control/lstbox.cxx @@ -98,6 +98,7 @@ void ListBox::ImplInitListBoxData() mbDDAutoSize = sal_True; mnSaveValue = LISTBOX_ENTRY_NOTFOUND; mnLineCount = 0; + m_nMaxWidthChars = -1; } // ----------------------------------------------------------------------- @@ -1344,6 +1345,15 @@ Size ListBox::CalcSubEditSize() const aSz.Height() = mpImplLB->CalcSize( 1 ).Height(); // size to maxmimum entry width aSz.Width() = mpImplLB->GetMaxEntryWidth(); + + if (m_nMaxWidthChars != -1) + { + //MAP_APPFONT == 1/8th avg char + long nMaxWidth = LogicToPixel(Size(m_nMaxWidthChars * 8, 0), + MapMode(MAP_APPFONT)).Width(); + aSz.Width() = std::min(aSz.Width(), nMaxWidth); + } + // do not create ultrathin ListBoxes, it doesn't look good if( aSz.Width() < GetSettings().GetStyleSettings().GetScrollBarSize() ) aSz.Width() = GetSettings().GetStyleSettings().GetScrollBarSize(); @@ -1552,10 +1562,21 @@ const Wallpaper& ListBox::GetDisplayBackground() const return mpImplLB->GetDisplayBackground(); } +void ListBox::setMaxWidthChars(sal_Int32 nWidth) +{ + if (nWidth != m_nMaxWidthChars) + { + m_nMaxWidthChars = nWidth; + queue_resize(); + } +} + bool ListBox::set_property(const rtl::OString &rKey, const rtl::OString &rValue) { if (rKey == "active") SelectEntryPos(rValue.toInt32()); + else if (rKey == "max-width-chars") + setMaxWidthChars(rValue.toInt32()); else return Control::set_property(rKey, rValue); return true;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits