cui/source/inc/cuitabarea.hxx | 20 ++ cui/source/tabpages/tphatch.cxx | 225 +++++++++++++++++++++++--------- cui/uiconfig/ui/hatchpage.ui | 30 ++-- sd/qa/uitest/impress_tests/tdf137729.py | 7 4 files changed, 205 insertions(+), 77 deletions(-)
New commits: commit 445c5237362dea1027c7af300b7d070a26d8f100 Author: Parth Raiyani <parth.raiy...@collabora.com> AuthorDate: Tue Aug 5 15:08:32 2025 +0530 Commit: Szymon Kłos <szymon.k...@collabora.com> CommitDate: Thu Aug 7 15:41:29 2025 +0200 Switch to IconView for hatch tab page for improved UI handling - Replaced ValueSet with IconView widget in hatch tab page - Updated hatchpage UI to include GtkIconView and GtkTreeStore for hatch - Added support to select and preview default when no item is selected - Always keep selected item and selection preview in sync - Updated relevant test case Change-Id: I7105fcac5e7195c6c2f4d51514ed241220586dfd Signed-off-by: Parth Raiyani <parth.raiy...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188240 Reviewed-by: Szymon Kłos <szymon.k...@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx index 24f308cf5703..fd489491199c 100644 --- a/cui/source/inc/cuitabarea.hxx +++ b/cui/source/inc/cuitabarea.hxx @@ -453,6 +453,8 @@ private: SfxItemSet& m_rXFSet; MapUnit m_ePoolUnit; + OUString sLastItemIdent; + Size aIconSize; SvxXRectPreview m_aCtlPreview; std::unique_ptr<weld::MetricSpinButton> m_xMtrDistance; @@ -462,14 +464,18 @@ private: std::unique_ptr<ColorListBox> m_xLbLineColor; std::unique_ptr<weld::CheckButton> m_xCbBackgroundColor; std::unique_ptr<ColorListBox> m_xLbBackgroundColor; - std::unique_ptr<SvxPresetListBox> m_xHatchLB; + std::unique_ptr<weld::IconView> m_xHatchLB; std::unique_ptr<weld::Button> m_xBtnAdd; std::unique_ptr<weld::Button> m_xBtnModify; std::unique_ptr<weld::CustomWeld> m_xHatchLBWin; std::unique_ptr<weld::CustomWeld> m_xCtlPreview; - DECL_LINK(ChangeHatchHdl, ValueSet*, void); + DECL_LINK(ChangeHatchHdl, weld::IconView&, void); void ChangeHatchHdl_Impl(); + DECL_LINK(MousePressHdl, const MouseEvent&, bool); + DECL_LINK(MenuSelectAsyncHdl, void*, void); + DECL_LINK(OnPopupEnd, const OUString&, void); + DECL_LINK(QueryTooltipHdl, const weld::TreeIter&, OUString); DECL_LINK( ModifiedEditHdl_Impl, weld::MetricSpinButton&, void ); DECL_LINK( ModifiedListBoxHdl_Impl, weld::ComboBox&, void ); DECL_LINK( ModifiedColorListBoxHdl_Impl, ColorListBox&, void ); @@ -479,11 +485,17 @@ private: void ModifiedHdl_Impl(void const *); DECL_LINK( ClickAddHdl_Impl, weld::Button&, void ); DECL_LINK( ClickModifyHdl_Impl, weld::Button&, void ); - DECL_LINK( ClickRenameHdl_Impl, SvxPresetListBox*, void ); - DECL_LINK( ClickDeleteHdl_Impl, SvxPresetListBox*, void ); sal_Int32 SearchHatchList(std::u16string_view rHatchName); + static VclPtr<VirtualDevice> GetVirtualDevice(BitmapEx aBitmap); + void FillPresetListBox(); + void ShowContextMenu(const Point& pPos); + void MenuSelect(const OUString& rIdent); + void HandleMenuSelect(std::u16string_view rIdent); + void ClickRenameHdl(); + void ClickDeleteHdl(); + public: SvxHatchTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs); virtual ~SvxHatchTabPage() override; diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx index 27e41070b6fa..3b9235fb61bd 100644 --- a/cui/source/tabpages/tphatch.cxx +++ b/cui/source/tabpages/tphatch.cxx @@ -42,6 +42,7 @@ #include <svx/svxids.hrc> #include <sal/log.hxx> #include <svtools/unitconv.hxx> +#include <comphelper/lok.hxx> using namespace com::sun::star; @@ -52,6 +53,7 @@ SvxHatchTabPage::SvxHatchTabPage(weld::Container* pPage, weld::DialogController* , m_pnColorListState(nullptr) , m_aXFillAttr(rInAttrs.GetPool()) , m_rXFSet(m_aXFillAttr.GetItemSet()) + , aIconSize(60, 64) , m_xMtrDistance(m_xBuilder->weld_metric_spin_button(u"distancemtr"_ustr, FieldUnit::MM)) , m_xMtrAngle(m_xBuilder->weld_metric_spin_button(u"anglemtr"_ustr, FieldUnit::DEGREE)) , m_xSliderAngle(m_xBuilder->weld_scale(u"angleslider"_ustr)) @@ -61,14 +63,12 @@ SvxHatchTabPage::SvxHatchTabPage(weld::Container* pPage, weld::DialogController* , m_xCbBackgroundColor(m_xBuilder->weld_check_button(u"backgroundcolor"_ustr)) , m_xLbBackgroundColor(new ColorListBox(m_xBuilder->weld_menu_button(u"backgroundcolorlb"_ustr), [this]{ return GetDialogController()->getDialog(); })) - , m_xHatchLB(new SvxPresetListBox(m_xBuilder->weld_scrolled_window(u"hatchpresetlistwin"_ustr, true))) + , m_xHatchLB(m_xBuilder->weld_icon_view(u"hatchpresetlist"_ustr)) , m_xBtnAdd(m_xBuilder->weld_button(u"add"_ustr)) , m_xBtnModify(m_xBuilder->weld_button(u"modify"_ustr)) - , m_xHatchLBWin(new weld::CustomWeld(*m_xBuilder, u"hatchpresetlist"_ustr, *m_xHatchLB)) , m_xCtlPreview(new weld::CustomWeld(*m_xBuilder, u"previewctl"_ustr, m_aCtlPreview)) { Size aSize = getDrawPreviewOptimalSize(m_aCtlPreview.GetDrawingArea()->get_ref_device()); - m_xHatchLBWin->set_size_request(aSize.Width(), aSize.Height()); m_xCtlPreview->set_size_request(aSize.Width(), aSize.Height()); // this page needs ExchangeSupport @@ -96,9 +96,9 @@ SvxHatchTabPage::SvxHatchTabPage(weld::Container* pPage, weld::DialogController* m_rXFSet.Put( XFillStyleItem(drawing::FillStyle_HATCH) ); m_rXFSet.Put( XFillHatchItem(OUString(), XHatch()) ); m_aCtlPreview.SetAttributes( m_aXFillAttr.GetItemSet() ); - m_xHatchLB->SetSelectHdl( LINK( this, SvxHatchTabPage, ChangeHatchHdl ) ); - m_xHatchLB->SetRenameHdl( LINK( this, SvxHatchTabPage, ClickRenameHdl_Impl ) ); - m_xHatchLB->SetDeleteHdl( LINK( this, SvxHatchTabPage, ClickDeleteHdl_Impl ) ); + m_xHatchLB->connect_selection_changed(LINK(this, SvxHatchTabPage, ChangeHatchHdl)); + m_xHatchLB->connect_mouse_press(LINK(this, SvxHatchTabPage, MousePressHdl)); + m_xHatchLB->connect_query_tooltip(LINK(this, SvxHatchTabPage, QueryTooltipHdl)); Link<weld::MetricSpinButton&,void> aLink = LINK( this, SvxHatchTabPage, ModifiedEditHdl_Impl ); Link<weld::ComboBox&,void> aLink2 = LINK( this, SvxHatchTabPage, ModifiedListBoxHdl_Impl ); @@ -114,15 +114,12 @@ SvxHatchTabPage::SvxHatchTabPage(weld::Container* pPage, weld::DialogController* m_xBtnAdd->connect_clicked( LINK( this, SvxHatchTabPage, ClickAddHdl_Impl ) ); m_xBtnModify->connect_clicked( LINK( this, SvxHatchTabPage, ClickModifyHdl_Impl ) ); - m_xHatchLB->SetStyle(WB_FLATVALUESET | WB_NO_DIRECTSELECT | WB_TABSTOP); - m_aCtlPreview.SetDrawMode(Application::GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR); } SvxHatchTabPage::~SvxHatchTabPage() { m_xCtlPreview.reset(); - m_xHatchLBWin.reset(); m_xHatchLB.reset(); m_xLbBackgroundColor.reset(); m_xLbLineColor.reset(); @@ -141,7 +138,36 @@ SvxHatchTabPage::~SvxHatchTabPage() void SvxHatchTabPage::Construct() { - m_xHatchLB->FillPresetListBox(*m_pHatchingList); + FillPresetListBox(); +} + + +void SvxHatchTabPage::FillPresetListBox() +{ + m_xHatchLB->clear(); + + m_xHatchLB->freeze(); + for (tools::Long nId = 0; nId < m_pHatchingList->Count(); nId++) + { + const OUString aString(m_pHatchingList->GetHatch(nId)->GetName()); + + OUString sId = OUString::number(nId); + BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview(nId, aIconSize); + VclPtr<VirtualDevice> aVDev = GetVirtualDevice(aBitmap); + + if (!m_xHatchLB->get_id(nId).isEmpty()) + { + m_xHatchLB->set_image(nId, aVDev); + m_xHatchLB->set_id(nId, sId); + m_xHatchLB->set_text(nId, aString); + } + else + { + m_xHatchLB->insert(-1, &aString, &sId, aVDev, nullptr); + } + } + + m_xHatchLB->thaw(); } void SvxHatchTabPage::ActivatePage( const SfxItemSet& rSet ) @@ -178,8 +204,7 @@ void SvxHatchTabPage::ActivatePage( const SfxItemSet& rSet ) sal_Int32 nPos = SearchHatchList( rSet.Get(XATTR_FILLHATCH).GetName() ); if( nPos != -1) { - sal_uInt16 nId = m_xHatchLB->GetItemId( static_cast<size_t>( nPos ) ); - m_xHatchLB->SelectItem( nId ); + m_xHatchLB->select( nPos ); } // colors could have been deleted ChangeHatchHdl_Impl(); @@ -237,11 +262,13 @@ bool SvxHatchTabPage::FillItemSet( SfxItemSet* rSet ) { std::unique_ptr<XHatch> pXHatch; OUString aString; - size_t nPos = m_xHatchLB->IsNoSelection() ? VALUESET_ITEM_NOTFOUND : m_xHatchLB->GetSelectItemPos(); - if( nPos != VALUESET_ITEM_NOTFOUND ) + OUString sId = m_xHatchLB->get_selected_id(); + sal_Int32 nPos = !sId.isEmpty() ? sId.toInt32() : -1; + + if( nPos != -1 ) { pXHatch.reset(new XHatch( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetHatch() )); - aString = m_xHatchLB->GetItemText( m_xHatchLB->GetSelectedItemId() ); + aString = m_pHatchingList->GetHatch(nPos)->GetName(); } // unidentified hatch has been passed else @@ -292,13 +319,11 @@ IMPL_LINK( SvxHatchTabPage, ModifiedListBoxHdl_Impl, weld::ComboBox&, rListBox, { ModifiedHdl_Impl(&rListBox); // hatch params have changed, it is no longer one of the presets - m_xHatchLB->SetNoSelection(); } IMPL_LINK( SvxHatchTabPage, ModifiedColorListBoxHdl_Impl, ColorListBox&, rListBox, void ) { ModifiedHdl_Impl(&rListBox); - m_xHatchLB->SetNoSelection(); } IMPL_LINK_NOARG( SvxHatchTabPage, ToggleHatchBackgroundColor_Impl, weld::Toggleable&, void ) @@ -329,13 +354,11 @@ IMPL_LINK_NOARG( SvxHatchTabPage, ModifiedBackgroundHdl_Impl, ColorListBox&, voi IMPL_LINK( SvxHatchTabPage, ModifiedEditHdl_Impl, weld::MetricSpinButton&, rEdit, void ) { ModifiedHdl_Impl(&rEdit); - m_xHatchLB->SetNoSelection(); } IMPL_LINK( SvxHatchTabPage, ModifiedSliderHdl_Impl, weld::Scale&, rSlider, void ) { ModifiedHdl_Impl(&rSlider); - m_xHatchLB->SetNoSelection(); } void SvxHatchTabPage::ModifiedHdl_Impl( void const * p ) @@ -357,7 +380,7 @@ void SvxHatchTabPage::ModifiedHdl_Impl( void const * p ) m_aCtlPreview.Invalidate(); } -IMPL_LINK_NOARG(SvxHatchTabPage, ChangeHatchHdl, ValueSet*, void) +IMPL_LINK_NOARG(SvxHatchTabPage, ChangeHatchHdl, weld::IconView&, void) { ChangeHatchHdl_Impl(); } @@ -365,9 +388,10 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ChangeHatchHdl, ValueSet*, void) void SvxHatchTabPage::ChangeHatchHdl_Impl() { std::unique_ptr<XHatch> pHatch; - size_t nPos = m_xHatchLB->GetSelectItemPos(); + OUString sId = m_xHatchLB->get_selected_id(); + sal_Int32 nPos = !sId.isEmpty() ? sId.toInt32() : -1; - if( nPos != VALUESET_ITEM_NOTFOUND ) + if( nPos != -1 ) pHatch.reset(new XHatch( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetHatch() )); else { @@ -380,12 +404,10 @@ void SvxHatchTabPage::ChangeHatchHdl_Impl() pHatch.reset(new XHatch( pFillHatchItem->GetHatchValue() )); } } - if( !pHatch ) + if(!pHatch && m_xHatchLB->n_children() > 0) { - sal_uInt16 nPosition = m_xHatchLB->GetItemId( 0 ); - m_xHatchLB->SelectItem( nPosition ); - if( nPosition != 0 ) - pHatch.reset( new XHatch( m_pHatchingList->GetHatch( 0 )->GetHatch() ) ); + m_xHatchLB->select(0); + pHatch.reset( new XHatch( m_pHatchingList->GetHatch( 0 )->GetHatch() ) ); } } if( pHatch ) @@ -461,12 +483,14 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickAddHdl_Impl, weld::Button&, void) m_pHatchingList->Insert(std::make_unique<XHatchEntry>(aXHatch, aName), nCount); - sal_Int32 nId = m_xHatchLB->GetItemId(nCount - 1); // calculate the last ID - BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview( nCount, m_xHatchLB->GetIconSize() ); - // Insert the new entry at the next ID - m_xHatchLB->InsertItem( nId + 1, Image(aBitmap), aName ); - m_xHatchLB->SelectItem( nId + 1 ); - m_xHatchLB->Resize(); + OUString sId = nCount > 0 ? m_xHatchLB->get_id( nCount - 1 ) : OUString(); + sal_Int32 nId = !sId.isEmpty() ? sId.toInt32() : -1; + BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview( nCount, aIconSize ); + VclPtr<VirtualDevice> pVDev = GetVirtualDevice(aBitmap); + + m_xHatchLB->insert( nId + 1, &aName, &sId, pVDev, nullptr); + FillPresetListBox(); + m_xHatchLB->select( nId + 1 ); m_nHatchingListState |= ChangeType::MODIFIED; @@ -475,10 +499,10 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickAddHdl_Impl, weld::Button&, void) IMPL_LINK_NOARG(SvxHatchTabPage, ClickModifyHdl_Impl, weld::Button&, void) { - sal_uInt16 nId = m_xHatchLB->GetSelectedItemId(); - size_t nPos = m_xHatchLB->GetSelectItemPos(); + OUString sId = m_xHatchLB->get_selected_id(); + sal_Int32 nPos = !sId.isEmpty() ? sId.toInt32() : -1; - if( nPos == VALUESET_ITEM_NOTFOUND ) + if ( nPos == -1 ) return; OUString aName( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetName() ); @@ -490,10 +514,13 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickModifyHdl_Impl, weld::Button&, void) m_pHatchingList->Replace(std::make_unique<XHatchEntry>(aXHatch, aName), nPos); - BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), m_xHatchLB->GetIconSize() ); - m_xHatchLB->RemoveItem( nId ); - m_xHatchLB->InsertItem( nId, Image(aBitmap), aName, static_cast<sal_uInt16>(nPos) ); - m_xHatchLB->SelectItem( nId ); + BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), aIconSize ); + VclPtr<VirtualDevice> pVDev = GetVirtualDevice(aBitmap); + + m_xHatchLB->remove( nPos ); + m_xHatchLB->insert( nPos, &aName, &sId, pVDev, nullptr); + FillPresetListBox(); + m_xHatchLB->select( nPos ); // save values for changes recognition (-> method) m_xMtrDistance->save_value(); @@ -505,12 +532,91 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickModifyHdl_Impl, weld::Button&, void) m_nHatchingListState |= ChangeType::MODIFIED; } -IMPL_LINK_NOARG(SvxHatchTabPage, ClickDeleteHdl_Impl, SvxPresetListBox*, void) +VclPtr<VirtualDevice> SvxHatchTabPage::GetVirtualDevice(BitmapEx aBitmap) +{ + VclPtr<VirtualDevice> pVDev = VclPtr<VirtualDevice>::Create(); + const Point aNull(0, 0); + if (pVDev->GetDPIScaleFactor() > 1) + aBitmap.Scale(pVDev->GetDPIScaleFactor(), pVDev->GetDPIScaleFactor()); + const Size aSize(aBitmap.GetSizePixel()); + pVDev->SetOutputSizePixel(aSize); + pVDev->DrawBitmapEx(aNull, aBitmap); + + return pVDev; +} + +IMPL_LINK(SvxHatchTabPage, QueryTooltipHdl, const weld::TreeIter&, rIter, OUString) { - const sal_uInt16 nId = m_xHatchLB->GetContextMenuItemId(); - const size_t nPos = m_xHatchLB->GetItemPos(nId); + OUString sId = m_xHatchLB->get_id(rIter); + sal_Int32 nId = !sId.isEmpty() ? sId.toInt32() : -1; - if( nPos == VALUESET_ITEM_NOTFOUND ) + if (nId >= 0) + { + return m_pHatchingList->GetHatch(nId)->GetName(); + } + return OUString(); +} + +IMPL_LINK(SvxHatchTabPage, MousePressHdl, const MouseEvent&, rMEvt, bool) +{ + if (!rMEvt.IsRight()) + return false; + + // Disable context menu for LibreOfficeKit mode + if (comphelper::LibreOfficeKit::isActive()) + return false; + + const Point& pPos = rMEvt.GetPosPixel(); + for (int i = 0; i < m_xHatchLB->n_children(); i++) + { + const ::tools::Rectangle aRect = m_xHatchLB->get_rect(i); + if (aRect.Contains(pPos)) + { + ShowContextMenu(pPos); + break; + } + } + return false; +} + +void SvxHatchTabPage::ShowContextMenu(const Point& pPos) +{ + ::tools::Rectangle aRect(pPos, Size(1, 1)); + std::unique_ptr<weld::Builder> xBuilder( + Application::CreateBuilder(m_xHatchLB.get(), u"svx/ui/presetmenu.ui"_ustr)); + std::unique_ptr<weld::Menu> xMenu(xBuilder->weld_menu(u"menu"_ustr)); + + xMenu->connect_activate(LINK(this, SvxHatchTabPage, OnPopupEnd)); + xMenu->popup_at_rect(m_xHatchLB.get(), aRect); +} + +IMPL_LINK(SvxHatchTabPage, OnPopupEnd, const OUString&, sCommand, void) +{ + sLastItemIdent = sCommand; + if (sLastItemIdent.isEmpty()) + return; + + Application::PostUserEvent(LINK(this, SvxHatchTabPage, MenuSelectAsyncHdl)); +} + +IMPL_LINK_NOARG(SvxHatchTabPage, MenuSelectAsyncHdl, void*, void) +{ + if (sLastItemIdent == u"rename") + { + ClickRenameHdl(); + } + else if (sLastItemIdent == u"delete") + { + ClickDeleteHdl(); + } +} + +void SvxHatchTabPage::ClickDeleteHdl() +{ + const OUString sId = m_xHatchLB->get_selected_id(); + const sal_Int32 nPos = !sId.isEmpty() ? sId.toInt32() : -1; + + if( nPos == -1 ) return; std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), u"cui/ui/querydeletehatchdialog.ui"_ustr)); @@ -518,27 +624,30 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickDeleteHdl_Impl, SvxPresetListBox*, void) if (xQueryBox->run() != RET_YES) return; - const bool bDeletingSelectedItem(nId == m_xHatchLB->GetSelectedItemId()); m_pHatchingList->Remove(nPos); - m_xHatchLB->RemoveItem( nId ); - if (bDeletingSelectedItem) - { - m_xHatchLB->SelectItem(m_xHatchLB->GetItemId(/*Position=*/0)); - m_aCtlPreview.Invalidate(); - } - m_xHatchLB->Resize(); + m_xHatchLB->remove( nPos ); + + FillPresetListBox(); + + sal_Int32 nNextId = nPos; + if (nPos >= m_xHatchLB->n_children()) + nNextId = m_xHatchLB->n_children() - 1; + + if(m_xHatchLB->n_children() > 0) + m_xHatchLB->select(nNextId); + m_aCtlPreview.Invalidate(); ChangeHatchHdl_Impl(); m_nHatchingListState |= ChangeType::MODIFIED; } -IMPL_LINK_NOARG(SvxHatchTabPage, ClickRenameHdl_Impl, SvxPresetListBox*, void ) +void SvxHatchTabPage::ClickRenameHdl() { - const sal_uInt16 nId = m_xHatchLB->GetContextMenuItemId(); - const size_t nPos = m_xHatchLB->GetItemPos(nId); + const OUString sId = m_xHatchLB->get_selected_id(); + const sal_Int32 nPos = !sId.isEmpty() ? sId.toInt32() : -1; - if( nPos == VALUESET_ITEM_NOTFOUND ) + if ( nPos == -1 ) return; OUString aDesc( CuiResId( RID_CUISTR_DESC_HATCH ) ); @@ -552,14 +661,14 @@ IMPL_LINK_NOARG(SvxHatchTabPage, ClickRenameHdl_Impl, SvxPresetListBox*, void ) { aName = pDlg->GetName(); sal_Int32 nHatchPos = SearchHatchList( aName ); - bool bValidHatchName = (nHatchPos == static_cast<sal_Int32>(nPos) ) || (nHatchPos == -1); + bool bValidHatchName = (nHatchPos == nPos ) || (nHatchPos == -1); if(bValidHatchName) { bLoop = false; m_pHatchingList->GetHatch(nPos)->SetName(aName); - m_xHatchLB->SetItemText(nId, aName); + m_xHatchLB->set_text(nPos, aName); m_nHatchingListState |= ChangeType::MODIFIED; } diff --git a/cui/uiconfig/ui/hatchpage.ui b/cui/uiconfig/ui/hatchpage.ui index 6bd05cd36025..fe06ef6e1c98 100644 --- a/cui/uiconfig/ui/hatchpage.ui +++ b/cui/uiconfig/ui/hatchpage.ui @@ -16,6 +16,14 @@ <property name="upper">99</property> <property name="step_increment">100</property> </object> + <object class="GtkTreeStore" id="liststore1"> + <columns> + <!-- column-name pixbuf --> + <column type="GdkPixbuf"/> + <!-- column-name id --> + <column type="gchararray"/> + </columns> + </object> <object class="GtkBox" id="HatchPage"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -43,20 +51,20 @@ <property name="can_focus">True</property> <property name="vexpand">True</property> <property name="hscrollbar_policy">never</property> - <property name="vscrollbar_policy">never</property> + <property name="vscrollbar_policy">always</property> <property name="shadow_type">in</property> <child> - <object class="GtkViewport"> + <object class="GtkIconView" id="hatchpresetlist"> <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkDrawingArea" id="hatchpresetlist"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_STRUCTURE_MASK</property> - <property name="vexpand">True</property> - </object> - </child> + <property name="item-padding">2</property> + <property name="can-focus">True</property> + <property name="hexpand">False</property> + <property name="vexpand">True</property> + <property name="model">liststore1</property> + <property name="pixbuf-column">0</property> + <property name="margin">6</property> + <property name="columns">3</property> + <property name="activate-on-single-click">True</property> </object> </child> </object> diff --git a/sd/qa/uitest/impress_tests/tdf137729.py b/sd/qa/uitest/impress_tests/tdf137729.py index 1769b0510452..80175b66ab22 100644 --- a/sd/qa/uitest/impress_tests/tdf137729.py +++ b/sd/qa/uitest/impress_tests/tdf137729.py @@ -38,14 +38,13 @@ class tdf137729(UITestCase): self.assertEqual( document.DrawPages[0].Background.FillHatch.Color, 0) self.assertEqual( - document.DrawPages[0].Background.FillHatch.Distance, 152) + document.DrawPages[0].Background.FillHatch.Distance, 102) self.assertEqual( document.DrawPages[0].Background.FillHatch.Angle, 0) - # Without the patch in place, this test would have failed with - # AssertionError: '' != 'hatch' + # FillHatchName to match the first(default) preset's name self.assertEqual( - document.DrawPages[0].Background.FillHatchName, 'hatch') + document.DrawPages[0].Background.FillHatchName, 'Black 0 Degrees') # vim: set shiftwidth=4 softtabstop=4 expandtab: