cui/source/customize/cfg.cxx | 4 cui/source/inc/cuitabline.hxx | 36 +-- cui/source/tabpages/tplneend.cxx | 261 +++++++++++-------------- cui/uiconfig/ui/lineendstabpage.ui | 76 ++++--- include/svx/dlgctrl.hxx | 53 ++++- include/vcl/weld.hxx | 32 ++- sc/source/ui/miscdlgs/mvtabdlg.cxx | 2 sd/source/ui/dlg/PhotoAlbumDialog.cxx | 8 sd/source/ui/dlg/custsdlg.cxx | 2 sfx2/source/dialog/mgetempl.cxx | 2 svtools/source/control/ctrlbox.cxx | 4 svx/source/dialog/dlgctrl.cxx | 199 +++++++++++++++++++ sw/source/ui/frmdlg/column.cxx | 2 sw/source/uibase/misc/numberingtypelistbox.cxx | 2 sw/source/uibase/utlui/uitool.cxx | 2 vcl/source/app/salvtables.cxx | 29 +- vcl/unx/generic/print/prtsetup.cxx | 2 vcl/unx/gtk3/gtk3gtkinst.cxx | 52 +++- 18 files changed, 525 insertions(+), 243 deletions(-)
New commits: commit 64d764e02a848ed243409092d3fdcb4775db5153 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Sat Sep 29 14:06:42 2018 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Sun Sep 30 18:14:25 2018 +0200 weld SvxLineEndDefTabPage Change-Id: I3e947511bbffae4cd48388b17a8fb9a13d453bab Reviewed-on: https://gerrit.libreoffice.org/61139 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx index 1bd2d5d970e6..e83774355db8 100644 --- a/cui/source/customize/cfg.cxx +++ b/cui/source/customize/cfg.cxx @@ -1967,7 +1967,7 @@ IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, weld::Entry&, void) const int nNewMenuPos = m_xMenuListBox->find_id(m_sNewMenuEntryId); const int nOldSelection = m_xMenuListBox->get_selected_index(); m_xMenuListBox->remove(nNewMenuPos); - m_xMenuListBox->insert(nNewMenuPos, m_sNewMenuEntryId, pNewEntryData->GetName(), nullptr); + m_xMenuListBox->insert(nNewMenuPos, m_sNewMenuEntryId, pNewEntryData->GetName(), nullptr, nullptr); m_xMenuListBox->select(nOldSelection); } @@ -2005,7 +2005,7 @@ IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, weld::Button&, rButton, void ) OUString sId = m_xMenuListBox->get_id(nSourceEntry); OUString sEntry = m_xMenuListBox->get_text(nSourceEntry); m_xMenuListBox->remove(nSourceEntry); - m_xMenuListBox->insert(nTargetEntry, sId, sEntry, nullptr); + m_xMenuListBox->insert(nTargetEntry, sId, sEntry, nullptr, nullptr); m_xMenuListBox->select(nTargetEntry); UpdateButtonStates(); diff --git a/cui/source/inc/cuitabline.hxx b/cui/source/inc/cuitabline.hxx index 28cdf1b4be41..c7e2431830e6 100644 --- a/cui/source/inc/cuitabline.hxx +++ b/cui/source/inc/cuitabline.hxx @@ -326,15 +326,6 @@ class SvxLineEndDefTabPage : public SfxTabPage using TabPage::DeactivatePage; private: - VclPtr<Edit> m_pEdtName; - VclPtr<LineEndLB> m_pLbLineEnds; - VclPtr<PushButton> m_pBtnAdd; - VclPtr<PushButton> m_pBtnModify; - VclPtr<PushButton> m_pBtnDelete; - VclPtr<PushButton> m_pBtnLoad; - VclPtr<PushButton> m_pBtnSave; - VclPtr<SvxXLinePreview> m_pCtlPreview; - const SfxItemSet& rOutAttrs; const SdrObject* pPolyObj; @@ -348,17 +339,28 @@ private: sal_uInt16 nDlgType; sal_Int32* pPosLineEndLb; - DECL_LINK( ClickAddHdl_Impl, Button*, void ); - DECL_LINK( ClickModifyHdl_Impl, Button*, void ); - DECL_LINK( ClickDeleteHdl_Impl, Button*, void ); - DECL_LINK( ClickLoadHdl_Impl, Button*, void ); - DECL_LINK( ClickSaveHdl_Impl, Button*, void ); - DECL_LINK( SelectLineEndHdl_Impl, ListBox&, void ); - + XLinePreview m_aCtlPreview; + std::unique_ptr<weld::Entry> m_xEdtName; + std::unique_ptr<SvxLineEndLB> m_xLbLineEnds; + std::unique_ptr<weld::Button> m_xBtnAdd; + std::unique_ptr<weld::Button> m_xBtnModify; + std::unique_ptr<weld::Button> m_xBtnDelete; + std::unique_ptr<weld::Button> m_xBtnLoad; + std::unique_ptr<weld::Button> m_xBtnSave; + std::unique_ptr<weld::CustomWeld> m_xCtlPreview; + + DECL_LINK(ClickAddHdl_Impl, weld::Button&, void); + DECL_LINK(ClickModifyHdl_Impl, weld::Button&, void); + DECL_LINK(ClickDeleteHdl_Impl, weld::Button&, void); + DECL_LINK(ClickLoadHdl_Impl, weld::Button&, void); + DECL_LINK(ClickSaveHdl_Impl, weld::Button&, void); + DECL_LINK(SelectLineEndHdl_Impl, weld::ComboBox&, void); + + void SelectLineEndHdl_Impl(); void CheckChanges_Impl(); public: - SvxLineEndDefTabPage( vcl::Window* pParent, const SfxItemSet& rInAttrs ); + SvxLineEndDefTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs); virtual ~SvxLineEndDefTabPage() override; virtual void dispose() override; diff --git a/cui/source/tabpages/tplneend.cxx b/cui/source/tabpages/tplneend.cxx index 4f525e922563..4222266e3656 100644 --- a/cui/source/tabpages/tplneend.cxx +++ b/cui/source/tabpages/tplneend.cxx @@ -50,55 +50,44 @@ #define XOUT_WIDTH 150 -SvxLineEndDefTabPage::SvxLineEndDefTabPage -( - vcl::Window* pParent, - const SfxItemSet& rInAttrs -) : - - SfxTabPage( pParent - , "LineEndPage" - , "cui/ui/lineendstabpage.ui" - , &rInAttrs ), - rOutAttrs ( rInAttrs ), - pPolyObj ( nullptr ), - - aXLineAttr ( rInAttrs.GetPool() ), - rXLSet ( aXLineAttr.GetItemSet() ), - pnLineEndListState ( nullptr ), - pPageType ( nullptr ), - nDlgType ( 0 ), - pPosLineEndLb ( nullptr ) +SvxLineEndDefTabPage::SvxLineEndDefTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs) + : SfxTabPage(pParent , "cui/ui/lineendstabpage.ui", "LineEndPage", &rInAttrs) + , rOutAttrs(rInAttrs) + , pPolyObj(nullptr) + , aXLineAttr(rInAttrs.GetPool()) + , rXLSet(aXLineAttr.GetItemSet()) + , pnLineEndListState(nullptr) + , pPageType(nullptr) + , nDlgType(0) + , pPosLineEndLb(nullptr) + , m_xEdtName(m_xBuilder->weld_entry("EDT_NAME")) + , m_xLbLineEnds(new SvxLineEndLB(m_xBuilder->weld_combo_box("LB_LINEENDS"))) + , m_xBtnAdd(m_xBuilder->weld_button("BTN_ADD")) + , m_xBtnModify(m_xBuilder->weld_button("BTN_MODIFY")) + , m_xBtnDelete(m_xBuilder->weld_button("BTN_DELETE")) + , m_xBtnLoad(m_xBuilder->weld_button("BTN_LOAD")) + , m_xBtnSave(m_xBuilder->weld_button("BTN_SAVE")) + , m_xCtlPreview(new weld::CustomWeld(*m_xBuilder, "CTL_PREVIEW", m_aCtlPreview)) { - get(m_pEdtName,"EDT_NAME"); - get(m_pLbLineEnds,"LB_LINEENDS"); - get(m_pBtnAdd,"BTN_ADD"); - get(m_pBtnModify,"BTN_MODIFY"); - get(m_pBtnDelete,"BTN_DELETE"); - get(m_pBtnLoad,"BTN_LOAD"); - get(m_pBtnSave,"BTN_SAVE"); - get(m_pCtlPreview,"CTL_PREVIEW"); - // this page needs ExchangeSupport SetExchangeSupport(); rXLSet.Put( XLineStyleItem(css::drawing::LineStyle_SOLID) ); rXLSet.Put( XLineWidthItem(XOUT_WIDTH) ); rXLSet.Put( XLineColorItem( OUString(), COL_BLACK ) ); - rXLSet.Put( XLineStartWidthItem( m_pCtlPreview->GetOutputSize().Height() / 2 ) ); - rXLSet.Put( XLineEndWidthItem( m_pCtlPreview->GetOutputSize().Height() / 2 ) ); + rXLSet.Put( XLineStartWidthItem( m_aCtlPreview.GetOutputSize().Height() / 2 ) ); + rXLSet.Put( XLineEndWidthItem( m_aCtlPreview.GetOutputSize().Height() / 2 ) ); // #i34740# - m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet()); - - m_pBtnAdd->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickAddHdl_Impl ) ); - m_pBtnModify->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickModifyHdl_Impl ) ); - m_pBtnDelete->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickDeleteHdl_Impl ) ); - m_pBtnLoad->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickLoadHdl_Impl ) ); - m_pBtnSave->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickSaveHdl_Impl ) ); + m_aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet()); - m_pLbLineEnds->SetSelectHdl( LINK( this, SvxLineEndDefTabPage, SelectLineEndHdl_Impl ) ); + m_xBtnAdd->connect_clicked(LINK(this, SvxLineEndDefTabPage, ClickAddHdl_Impl)); + m_xBtnModify->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickModifyHdl_Impl)); + m_xBtnDelete->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickDeleteHdl_Impl)); + m_xBtnLoad->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickLoadHdl_Impl)); + m_xBtnSave->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickSaveHdl_Impl)); + m_xLbLineEnds->connect_changed(LINK(this, SvxLineEndDefTabPage, SelectLineEndHdl_Impl)); } SvxLineEndDefTabPage::~SvxLineEndDefTabPage() @@ -108,28 +97,21 @@ SvxLineEndDefTabPage::~SvxLineEndDefTabPage() void SvxLineEndDefTabPage::dispose() { - m_pEdtName.clear(); - m_pLbLineEnds.clear(); - m_pBtnAdd.clear(); - m_pBtnModify.clear(); - m_pBtnDelete.clear(); - m_pBtnLoad.clear(); - m_pBtnSave.clear(); - m_pCtlPreview.clear(); + m_xCtlPreview.reset(); + m_xLbLineEnds.reset(); SfxTabPage::dispose(); } void SvxLineEndDefTabPage::Resize() { - rXLSet.Put(XLineStartWidthItem(m_pCtlPreview->GetOutputSize().Height() / 2 )); - rXLSet.Put(XLineEndWidthItem(m_pCtlPreview->GetOutputSize().Height() / 2 )); + rXLSet.Put(XLineStartWidthItem(m_aCtlPreview.GetOutputSize().Height() / 2)); + rXLSet.Put(XLineEndWidthItem(m_aCtlPreview.GetOutputSize().Height() / 2)); SfxTabPage::Resize(); } - void SvxLineEndDefTabPage::Construct() { - m_pLbLineEnds->Fill( pLineEndList ); + m_xLbLineEnds->Fill( pLineEndList ); bool bCreateArrowPossible = true; @@ -150,10 +132,9 @@ void SvxLineEndDefTabPage::Construct() } if( !bCreateArrowPossible ) - m_pBtnAdd->Disable(); + m_xBtnAdd->set_sensitive(false); } - void SvxLineEndDefTabPage::ActivatePage( const SfxItemSet& ) { if( nDlgType == 0 ) // area dialog @@ -161,17 +142,17 @@ void SvxLineEndDefTabPage::ActivatePage( const SfxItemSet& ) // ActivatePage() is called before the dialog receives PageCreated() !!! if( pLineEndList.is() ) { - if( *pPosLineEndLb != LISTBOX_ENTRY_NOTFOUND ) + if( *pPosLineEndLb != -1) { - m_pLbLineEnds->SelectEntryPos( *pPosLineEndLb ); - SelectLineEndHdl_Impl( *m_pLbLineEnds ); + m_xLbLineEnds->set_active(*pPosLineEndLb); + SelectLineEndHdl_Impl(); } INetURLObject aURL( pLineEndList->GetPath() ); aURL.Append( pLineEndList->GetName() ); DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "invalid URL" ); *pPageType = PageType::Area; // 3 - *pPosLineEndLb = LISTBOX_ENTRY_NOTFOUND; + *pPosLineEndLb = -1; } } } @@ -190,23 +171,23 @@ DeactivateRC SvxLineEndDefTabPage::DeactivatePage( SfxItemSet* _pSet ) void SvxLineEndDefTabPage::CheckChanges_Impl() { - sal_Int32 nPos = m_pLbLineEnds->GetSelectedEntryPos(); + int nPos = m_xLbLineEnds->get_active(); - if ( nPos != LISTBOX_ENTRY_NOTFOUND ) + if (nPos != -1) { - OUString aString = m_pEdtName->GetText(); + OUString aString = m_xEdtName->get_text(); - if( aString != m_pLbLineEnds->GetSelectedEntry() ) + if( aString != m_xLbLineEnds->get_active_text() ) { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querychangelineenddialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querychangelineenddialog.ui")); std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskChangeLineEndDialog")); if (xQueryBox->run() == RET_YES) - ClickModifyHdl_Impl( nullptr ); + ClickModifyHdl_Impl(*m_xBtnModify); } } - nPos = m_pLbLineEnds->GetSelectedEntryPos(); + nPos = m_xLbLineEnds->get_active(); - if ( nPos != LISTBOX_ENTRY_NOTFOUND ) + if (nPos != -1) *pPosLineEndLb = nPos; } @@ -219,7 +200,7 @@ bool SvxLineEndDefTabPage::FillItemSet( SfxItemSet* rSet ) { CheckChanges_Impl(); - long nPos = m_pLbLineEnds->GetSelectedEntryPos(); + int nPos = m_xLbLineEnds->get_active(); const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos); rSet->Put( XLineStartItem( pEntry->GetName(), pEntry->GetLineEnd() ) ); @@ -229,68 +210,63 @@ bool SvxLineEndDefTabPage::FillItemSet( SfxItemSet* rSet ) return true; } - void SvxLineEndDefTabPage::Reset( const SfxItemSet* ) { - m_pLbLineEnds->SelectEntryPos( 0 ); + m_xLbLineEnds->set_active(0); // Update lineend if( pLineEndList->Count() > 0 ) { - int nPos = m_pLbLineEnds->GetSelectedEntryPos(); + int nPos = m_xLbLineEnds->get_active(); const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos); - m_pEdtName->SetText( m_pLbLineEnds->GetSelectedEntry() ); + m_xEdtName->set_text(m_xLbLineEnds->get_active_text()); rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) ); rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) ); // #i34740# - m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet()); - - m_pCtlPreview->Invalidate(); + m_aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet()); + m_aCtlPreview.Invalidate(); } // determine button state if( pLineEndList->Count() ) { - m_pBtnModify->Enable(); - m_pBtnDelete->Enable(); - m_pBtnSave->Enable(); + m_xBtnModify->set_sensitive(true); + m_xBtnDelete->set_sensitive(true); + m_xBtnSave->set_sensitive(true); } else { - m_pBtnModify->Disable(); - m_pBtnDelete->Disable(); - m_pBtnSave->Disable(); + m_xBtnModify->set_sensitive(false); + m_xBtnDelete->set_sensitive(false); + m_xBtnSave->set_sensitive(false); } } - -VclPtr<SfxTabPage> SvxLineEndDefTabPage::Create( TabPageParent pWindow, const SfxItemSet* rSet ) +VclPtr<SfxTabPage> SvxLineEndDefTabPage::Create(TabPageParent pParent, const SfxItemSet* rSet) { - return VclPtr<SvxLineEndDefTabPage>::Create( pWindow.pParent, *rSet ); + return VclPtr<SvxLineEndDefTabPage>::Create(pParent, *rSet ); } - -IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl, ListBox&, void) +void SvxLineEndDefTabPage::SelectLineEndHdl_Impl() { if( pLineEndList->Count() > 0 ) { - int nPos = m_pLbLineEnds->GetSelectedEntryPos(); + int nPos = m_xLbLineEnds->get_active(); const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos); - m_pEdtName->SetText( m_pLbLineEnds->GetSelectedEntry() ); + m_xEdtName->set_text(m_xLbLineEnds->get_active_text()); rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) ); rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) ); // #i34740# - m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet()); - - m_pCtlPreview->Invalidate(); + m_aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet()); + m_aCtlPreview.Invalidate(); // Is not set before, in order to only take the new style, // if there is an entry selected in the ListBox @@ -298,15 +274,18 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl, ListBox&, void) } } - -IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl, Button*, void) +IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl, weld::ComboBox&, void) { - sal_Int32 nPos = m_pLbLineEnds->GetSelectedEntryPos(); + SelectLineEndHdl_Impl(); +} - if( nPos != LISTBOX_ENTRY_NOTFOUND ) +IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl, weld::Button&, void) +{ + int nPos = m_xLbLineEnds->get_active(); + if (nPos != -1) { OUString aDesc(CuiResId(RID_SVXSTR_DESC_LINEEND)); - OUString aName( m_pEdtName->GetText() ); + OUString aName(m_xEdtName->get_text()); long nCount = pLineEndList->Count(); bool bDifferent = true; @@ -318,12 +297,12 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl, Button*, void) // if yes, repeat and demand a new name if ( !bDifferent ) { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/queryduplicatedialog.ui")); std::unique_ptr<weld::MessageDialog> xWarningBox(xBuilder->weld_message_dialog("DuplicateNameDialog")); xWarningBox->run(); SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetFrameWeld(), aName, aDesc)); + ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetDialogFrameWeld(), aName, aDesc)); bool bLoop = true; while( !bDifferent && bLoop && pDlg->Execute() == RET_OK ) @@ -354,10 +333,10 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl, Button*, void) // #123497# Need to replace the existing entry with a new one pLineEndList->Replace(o3tl::make_unique<XLineEndEntry>(pOldEntry->GetLineEnd(), aName), nPos); - m_pEdtName->SetText( aName ); + m_xEdtName->set_text(aName); - m_pLbLineEnds->Modify(*pLineEndList->GetLineEnd(nPos), nPos, pLineEndList->GetUiBitmap(nPos)); - m_pLbLineEnds->SelectEntryPos( nPos ); + m_xLbLineEnds->Modify(*pLineEndList->GetLineEnd(nPos), nPos, pLineEndList->GetUiBitmap(nPos)); + m_xLbLineEnds->set_active(nPos); // set flag for modified *pnLineEndListState |= ChangeType::MODIFIED; @@ -372,8 +351,7 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl, Button*, void) } } - -IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickAddHdl_Impl, Button*, void) +IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickAddHdl_Impl, weld::Button&, void) { if( pPolyObj ) { @@ -427,7 +405,7 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickAddHdl_Impl, Button*, void) } SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); - ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetFrameWeld(), aName, aDesc )); + ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetDialogFrameWeld(), aName, aDesc )); bool bLoop = true; while ( bLoop && pDlg->Execute() == RET_OK ) @@ -445,78 +423,76 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickAddHdl_Impl, Button*, void) { bLoop = false; - long nLineEndCount = pLineEndList->Count(); + auto nLineEndCount = pLineEndList->Count(); pLineEndList->Insert(o3tl::make_unique<XLineEndEntry>(aNewPolyPolygon, aName), nLineEndCount); // add to the ListBox - m_pLbLineEnds->Append(*pLineEndList->GetLineEnd(nLineEndCount), pLineEndList->GetUiBitmap(nLineEndCount)); - m_pLbLineEnds->SelectEntryPos( m_pLbLineEnds->GetEntryCount() - 1 ); + m_xLbLineEnds->Append(*pLineEndList->GetLineEnd(nLineEndCount), pLineEndList->GetUiBitmap(nLineEndCount)); + m_xLbLineEnds->set_active(m_xLbLineEnds->get_count() - 1); *pnLineEndListState |= ChangeType::MODIFIED; - SelectLineEndHdl_Impl( *m_pLbLineEnds ); + SelectLineEndHdl_Impl(); } else { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/queryduplicatedialog.ui")); std::unique_ptr<weld::MessageDialog> xWarningBox(xBuilder->weld_message_dialog("DuplicateNameDialog")); xWarningBox->run(); } } } else - m_pBtnAdd->Disable(); + m_xBtnAdd->set_sensitive(false); // determine button state if ( pLineEndList->Count() ) { - m_pBtnModify->Enable(); - m_pBtnDelete->Enable(); - m_pBtnSave->Enable(); + m_xBtnModify->set_sensitive(true); + m_xBtnDelete->set_sensitive(true); + m_xBtnSave->set_sensitive(true); } } - -IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickDeleteHdl_Impl, Button*, void) +IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickDeleteHdl_Impl, weld::Button&, void) { - sal_Int32 nPos = m_pLbLineEnds->GetSelectedEntryPos(); + int nPos = m_xLbLineEnds->get_active(); - if( nPos != LISTBOX_ENTRY_NOTFOUND ) + if (nPos != -1) { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querydeletelineenddialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querydeletelineenddialog.ui")); std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskDelLineEndDialog")); if (xQueryBox->run() == RET_YES) { pLineEndList->Remove(nPos); - m_pLbLineEnds->RemoveEntry( nPos ); - m_pLbLineEnds->SelectEntryPos( 0 ); + m_xLbLineEnds->remove(nPos); + m_xLbLineEnds->set_active(0); - SelectLineEndHdl_Impl( *m_pLbLineEnds ); + SelectLineEndHdl_Impl(); *pPageType = PageType::Area; // LineEnd shall not be taken over *pnLineEndListState |= ChangeType::MODIFIED; - m_pCtlPreview->Invalidate(); + m_aCtlPreview.Invalidate(); } } // determine button state if( !pLineEndList->Count() ) { - m_pBtnModify->Disable(); - m_pBtnDelete->Disable(); - m_pBtnSave->Disable(); + m_xBtnModify->set_sensitive(false); + m_xBtnDelete->set_sensitive(false); + m_xBtnSave->set_sensitive(false); } } - -IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl, Button*, void) +IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl, weld::Button&, void) { sal_uInt16 nReturn = RET_YES; if ( *pnLineEndListState & ChangeType::MODIFIED ) { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querysavelistdialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querysavelistdialog.ui")); std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("AskSaveList")); nReturn = xBox->run(); @@ -528,7 +504,7 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl, Button*, void) if ( nReturn != RET_CANCEL ) { ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, - FileDialogFlags::NONE, GetFrameWeld()); + FileDialogFlags::NONE, GetDialogFrameWeld()); OUString aStrFilterType( "*.soe" ); aDlg.AddFilter( aStrFilterType, aStrFilterType ); @@ -561,8 +537,8 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl, Button*, void) { pLineEndList = pLeList; static_cast<SvxLineTabDialog*>( GetParentDialog() )->SetNewLineEndList( pLineEndList ); - m_pLbLineEnds->Clear(); - m_pLbLineEnds->Fill( pLineEndList ); + m_xLbLineEnds->clear(); + m_xLbLineEnds->Fill( pLineEndList ); Reset( &rOutAttrs ); pLineEndList->SetName( aURL.getName() ); @@ -572,7 +548,7 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl, Button*, void) } else { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynoloadedfiledialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querynoloadedfiledialog.ui")); std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoLoadedFileDialog")); xBox->run(); } @@ -582,22 +558,21 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl, Button*, void) // determine button state if ( pLineEndList->Count() ) { - m_pBtnModify->Enable(); - m_pBtnDelete->Enable(); - m_pBtnSave->Enable(); + m_xBtnModify->set_sensitive(true); + m_xBtnDelete->set_sensitive(true); + m_xBtnSave->set_sensitive(true); } else { - m_pBtnModify->Disable(); - m_pBtnDelete->Disable(); - m_pBtnSave->Disable(); + m_xBtnModify->set_sensitive(false); + m_xBtnDelete->set_sensitive(false); + m_xBtnSave->set_sensitive(false); } } - -IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickSaveHdl_Impl, Button*, void) +IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickSaveHdl_Impl, weld::Button&, void) { - ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, FileDialogFlags::NONE, GetFrameWeld()); + ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, FileDialogFlags::NONE, GetDialogFrameWeld()); OUString aStrFilterType( "*.soe" ); aDlg.AddFilter( aStrFilterType, aStrFilterType ); @@ -640,7 +615,7 @@ IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickSaveHdl_Impl, Button*, void) } else { - std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynosavefiledialog.ui")); + std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querynosavefiledialog.ui")); std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoSaveFileDialog")); xBox->run(); } @@ -653,10 +628,10 @@ void SvxLineEndDefTabPage::DataChanged( const DataChangedEvent& rDCEvt ) if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) ) { - sal_Int32 nOldSelect = m_pLbLineEnds->GetSelectedEntryPos(); - m_pLbLineEnds->Clear(); - m_pLbLineEnds->Fill( pLineEndList ); - m_pLbLineEnds->SelectEntryPos( nOldSelect ); + auto nOldSelect = m_xLbLineEnds->get_active(); + m_xLbLineEnds->clear(); + m_xLbLineEnds->Fill(pLineEndList); + m_xLbLineEnds->set_active(nOldSelect); } } diff --git a/cui/uiconfig/ui/lineendstabpage.ui b/cui/uiconfig/ui/lineendstabpage.ui index 3668c1373b2e..81145b0285e3 100644 --- a/cui/uiconfig/ui/lineendstabpage.ui +++ b/cui/uiconfig/ui/lineendstabpage.ui @@ -1,7 +1,27 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.22.1 --> <interface domain="cui"> - <!-- interface-requires gtk+ 3.0 --> - <!-- interface-requires LibreOffice 1.0 --> + <requires lib="gtk+" version="3.0"/> + <object class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">res/sc05501.png</property> + </object> + <object class="GtkImage" id="image2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">res/sc05502.png</property> + </object> + <object class="GtkListStore" id="liststore4"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name id --> + <column type="gchararray"/> + <!-- column-name image --> + <column type="GdkPixbuf"/> + </columns> + </object> <object class="GtkFrame" id="LineEndPage"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -45,31 +65,27 @@ <object class="GtkLabel" id="FT_TITLE"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="lineendstabpage|FT_TITLE">_Title:</property> <property name="use_underline">True</property> <property name="mnemonic_widget">EDT_NAME</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="FT_LINE_END_STYLE"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="lineendstabpage|FT_LINE_END_STYLE">Arrow _style:</property> <property name="use_underline">True</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -83,21 +99,19 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> - <object class="svxlo-LineEndLB" id="LB_LINEENDS"> + <object class="GtkComboBox" id="LB_LINEENDS"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="halign">start</property> + <property name="model">liststore4</property> + <property name="id_column">1</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -106,14 +120,13 @@ <property name="can_focus">False</property> <property name="valign">end</property> <property name="vexpand">True</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="lineendstabpage|FI_TIP">Add a selected object to create new arrow styles.</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> </object> @@ -194,8 +207,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -212,8 +223,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> @@ -246,9 +255,24 @@ <property name="orientation">vertical</property> <property name="spacing">6</property> <child> - <object class="svxlo-SvxXLinePreview" id="CTL_PREVIEW"> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">never</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkViewport"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkDrawingArea" id="CTL_PREVIEW"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + </child> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -271,22 +295,12 @@ <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="lineendstabpage|label1">Organize Arrow Styles</property> + <property name="xalign">0</property> <attributes> <attribute name="weight" value="bold"/> </attributes> </object> </child> </object> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="pixbuf">res/sc05501.png</property> - </object> - <object class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="pixbuf">res/sc05502.png</property> - </object> </interface> diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx index 90c4fc6e8f6d..2061a211f312 100644 --- a/include/svx/dlgctrl.hxx +++ b/include/svx/dlgctrl.hxx @@ -268,7 +268,6 @@ public: void Modify(const XDashEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap ); }; - /************************************************************************/ class SAL_WARN_UNUSED SVX_DLLPUBLIC LineEndLB : public ListBox @@ -283,6 +282,27 @@ public: void Modify( const XLineEndEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap ); }; +class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxLineEndLB +{ +private: + std::unique_ptr<weld::ComboBox> m_xControl; + +public: + SvxLineEndLB(std::unique_ptr<weld::ComboBox> pControl); + + void Fill( const XLineEndListRef &pList, bool bStart = true ); + + void Append( const XLineEndEntry& rEntry, const BitmapEx& rBitmap ); + void Modify( const XLineEndEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap ); + + void clear() { m_xControl->clear(); } + void remove(int nPos) { m_xControl->remove(nPos); } + int get_active() const { return m_xControl->get_active(); } + void set_active(int nPos) { m_xControl->set_active(nPos); } + OUString get_active_text() const { return m_xControl->get_active_text(); } + void connect_changed(const Link<weld::ComboBox&, void>& rLink) { m_xControl->connect_changed(rLink); } + int get_count() const { return m_xControl->get_count(); } +}; class SdrObject; class SdrPathObj; @@ -353,6 +373,11 @@ public: mpBufferDevice->SetDrawMode(nDrawMode); } + Size GetOutputSize() const + { + return mpBufferDevice->PixelToLogic(GetOutputSizePixel()); + } + // dada read access SdrModel& getModel() const { @@ -398,6 +423,32 @@ public: virtual Size GetOptimalSize() const override; }; +class SAL_WARN_UNUSED SVX_DLLPUBLIC XLinePreview : public PreviewBase +{ +private: + SdrPathObj* mpLineObjA; + SdrPathObj* mpLineObjB; + SdrPathObj* mpLineObjC; + + Graphic* mpGraphic; + bool mbWithSymbol; + Size maSymbolSize; + +public: + XLinePreview(); + virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override; + virtual ~XLinePreview() override; + + void SetLineAttributes(const SfxItemSet& rItemSet); + + void ShowSymbol( bool b ) { mbWithSymbol = b; }; + void SetSymbol( Graphic* p, const Size& s ); + void ResizeSymbol( const Size& s ); + + virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override; + virtual void Resize() override; +}; + class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxXRectPreview : public PreviewBase { private: diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 1ca91e7b4fa9..ddfd104189e4 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -258,12 +258,20 @@ protected: public: virtual void insert_text(int pos, const OUString& rStr) = 0; void append_text(const OUString& rStr) { insert_text(-1, rStr); } - virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pImage) + virtual void insert(int pos, const OUString& rId, const OUString& rStr, + const OUString* pIconName, VirtualDevice* pImageSufface) = 0; - void append(const OUString& rId, const OUString& rStr) { insert(-1, rId, rStr, nullptr); } + void append(const OUString& rId, const OUString& rStr) + { + insert(-1, rId, rStr, nullptr, nullptr); + } void append(const OUString& rId, const OUString& rStr, const OUString& rImage) { - insert(-1, rId, rStr, &rImage); + insert(-1, rId, rStr, &rImage, nullptr); + } + void append(const OUString& rId, const OUString& rStr, VirtualDevice& rImage) + { + insert(-1, rId, rStr, nullptr, &rImage); } virtual int get_count() const = 0; @@ -318,13 +326,21 @@ protected: public: virtual void insert_text(const OUString& rText, int pos) = 0; - virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pImage) + virtual void insert(int pos, const OUString& rId, const OUString& rStr, + const OUString* pIconName, VirtualDevice* pImageSurface) = 0; void append_text(const OUString& rText) { insert_text(rText, -1); } - void append(const OUString& rId, const OUString& rStr) { insert(-1, rId, rStr, nullptr); } + void append(const OUString& rId, const OUString& rStr) + { + insert(-1, rId, rStr, nullptr, nullptr); + } void append(const OUString& rId, const OUString& rStr, const OUString& rImage) { - insert(-1, rId, rStr, &rImage); + insert(-1, rId, rStr, &rImage, nullptr); + } + void append(const OUString& rId, const OUString& rStr, VirtualDevice& rImage) + { + insert(-1, rId, rStr, nullptr, &rImage); } void connect_changed(const Link<TreeView&, void>& rLink) { m_aChangeHdl = rLink; } @@ -630,9 +646,9 @@ public: m_xTreeView->insert_text(rStr, pos); } virtual void insert(int pos, const OUString& rId, const OUString& rStr, - const OUString* pImage) override + const OUString* pIconName, VirtualDevice* pImageSurface) override { - m_xTreeView->insert(pos, rId, rStr, pImage); + m_xTreeView->insert(pos, rId, rStr, pIconName, pImageSurface); } virtual int get_count() const override { return m_xTreeView->n_children(); } diff --git a/sc/source/ui/miscdlgs/mvtabdlg.cxx b/sc/source/ui/miscdlgs/mvtabdlg.cxx index 9052f5dad7fe..95762ac114c5 100644 --- a/sc/source/ui/miscdlgs/mvtabdlg.cxx +++ b/sc/source/ui/miscdlgs/mvtabdlg.cxx @@ -220,7 +220,7 @@ void ScMoveTableDlg::InitDocListBox() aEntryName += msCurrentDoc; } - m_xLbDoc->insert(i, OUString::number(reinterpret_cast<sal_uInt64>(&pScSh->GetDocument())), aEntryName, nullptr); + m_xLbDoc->insert(i, OUString::number(reinterpret_cast<sal_uInt64>(&pScSh->GetDocument())), aEntryName, nullptr, nullptr); i++; } diff --git a/sd/source/ui/dlg/PhotoAlbumDialog.cxx b/sd/source/ui/dlg/PhotoAlbumDialog.cxx index 683264b1daa4..403876b7c3da 100644 --- a/sd/source/ui/dlg/PhotoAlbumDialog.cxx +++ b/sd/source/ui/dlg/PhotoAlbumDialog.cxx @@ -550,8 +550,8 @@ IMPL_LINK_NOARG(SdPhotoAlbumDialog, UpHdl, weld::Button&, void) m_xImagesLst->remove_text(sActEntry); m_xImagesLst->remove_text(sUpperEntry); - m_xImagesLst->insert(nActPos - 1, sAct, sActEntry, nullptr); - m_xImagesLst->insert(nActPos, sUpper, sUpperEntry, nullptr); + m_xImagesLst->insert(nActPos - 1, sAct, sActEntry, nullptr, nullptr); + m_xImagesLst->insert(nActPos, sUpper, sUpperEntry, nullptr, nullptr); m_xImagesLst->select(nActPos - 1); } @@ -573,8 +573,8 @@ IMPL_LINK_NOARG(SdPhotoAlbumDialog, DownHdl, weld::Button&, void) m_xImagesLst->remove_text(sActEntry); m_xImagesLst->remove_text(sDownEntry); - m_xImagesLst->insert(nActPos, sDown, sDownEntry, nullptr); - m_xImagesLst->insert(nActPos + 1, sAct, sActEntry, nullptr); + m_xImagesLst->insert(nActPos, sDown, sDownEntry, nullptr, nullptr); + m_xImagesLst->insert(nActPos + 1, sAct, sActEntry, nullptr, nullptr); m_xImagesLst->select(nActPos + 1); } diff --git a/sd/source/ui/dlg/custsdlg.cxx b/sd/source/ui/dlg/custsdlg.cxx index 3dfc611bbbb2..b7b384073666 100644 --- a/sd/source/ui/dlg/custsdlg.cxx +++ b/sd/source/ui/dlg/custsdlg.cxx @@ -378,7 +378,7 @@ void SdDefineCustomShowDlg::ClickButtonHdl2(void const * p) { OUString aStr = m_xLbPages->get_text(i); SdPage* pPage = rDoc.GetSdPage(i, PageKind::Standard); - m_xLbCustomPages->insert(nPosCP, OUString::number(reinterpret_cast<sal_uInt64>(pPage)), aStr, nullptr); + m_xLbCustomPages->insert(nPosCP, OUString::number(reinterpret_cast<sal_uInt64>(pPage)), aStr, nullptr, nullptr); m_xLbCustomPages->select(nPosCP != -1 ? nPosCP : m_xLbCustomPages->n_children() - 1); if (nPosCP != -1) diff --git a/sfx2/source/dialog/mgetempl.cxx b/sfx2/source/dialog/mgetempl.cxx index 4cef840d4ef6..4daa88b92713 100644 --- a/sfx2/source/dialog/mgetempl.cxx +++ b/sfx2/source/dialog/mgetempl.cxx @@ -200,7 +200,7 @@ SfxManageStyleSheetPage::SfxManageStyleSheetPage(TabPageParent pParent, const Sf rTupel.nFlags != SfxStyleSearchBits::AllVisible && rTupel.nFlags != SfxStyleSearchBits::All ) { - m_xFilterLb->insert(nIdx, OUString::number(i), rTupel.aName, nullptr); + m_xFilterLb->insert(nIdx, OUString::number(i), rTupel.aName, nullptr, nullptr); if ( ( rTupel.nFlags & nMask ) == nMask ) nStyleFilterIdx = nIdx; ++nIdx; diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx index 1ff8801d316a..a6dfa356f150 100644 --- a/svtools/source/control/ctrlbox.cxx +++ b/svtools/source/control/ctrlbox.cxx @@ -1682,7 +1682,7 @@ void SvtFontSizeBox::Fill( const FontMetric* pFontMetric, const FontList* pList OUString aSizeName = aFontSizeNames.GetIndexName( i ); sal_IntPtr nSize = aFontSizeNames.GetIndexSize( i ); OUString sId(OUString::number(-nSize)); // mark as special - m_xComboBox->insert(nPos, sId, aSizeName, nullptr); + m_xComboBox->insert(nPos, sId, aSizeName, nullptr, nullptr); nPos++; } } @@ -1696,7 +1696,7 @@ void SvtFontSizeBox::Fill( const FontMetric* pFontMetric, const FontList* pList if ( !aSizeName.isEmpty() ) { OUString sId(OUString::number(-(*pTempAry))); // mark as special - m_xComboBox->insert(nPos, sId, aSizeName, nullptr); + m_xComboBox->insert(nPos, sId, aSizeName, nullptr, nullptr); nPos++; } pTempAry++; diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx index 0750a5355853..f75661db088c 100644 --- a/svx/source/dialog/dlgctrl.cxx +++ b/svx/source/dialog/dlgctrl.cxx @@ -1176,6 +1176,73 @@ void LineEndLB::Modify( const XLineEndEntry& rEntry, sal_Int32 nPos, const Bitma } } +SvxLineEndLB::SvxLineEndLB(std::unique_ptr<weld::ComboBox> pControl) + : m_xControl(std::move(pControl)) +{ +} + +void SvxLineEndLB::Fill( const XLineEndListRef &pList, bool bStart ) +{ + if( !pList.is() ) + return; + + long nCount = pList->Count(); + ScopedVclPtrInstance< VirtualDevice > pVD; + m_xControl->freeze(); + + for( long i = 0; i < nCount; i++ ) + { + const XLineEndEntry* pEntry = pList->GetLineEnd(i); + const BitmapEx aBitmap = pList->GetUiBitmap( i ); + if( !aBitmap.IsEmpty() ) + { + const Size aBmpSize(aBitmap.GetSizePixel()); + pVD->SetOutputSizePixel(Size(aBmpSize.Width() / 2, aBmpSize.Height()), false); + pVD->DrawBitmapEx(bStart ? Point() : Point(aBmpSize.Width() / 2, 0), aBitmap); + m_xControl->append("", pEntry->GetName(), *pVD); + } + else + m_xControl->append_text(pEntry->GetName()); + } + + m_xControl->thaw(); +} + +void SvxLineEndLB::Append( const XLineEndEntry& rEntry, const BitmapEx& rBitmap ) +{ + if(!rBitmap.IsEmpty()) + { + ScopedVclPtrInstance< VirtualDevice > pVD; + + const Size aBmpSize(rBitmap.GetSizePixel()); + pVD->SetOutputSizePixel(Size(aBmpSize.Width() / 2, aBmpSize.Height() / 2), false); + pVD->DrawBitmapEx(Point(aBmpSize.Width() / 2, 0), rBitmap); + m_xControl->append("", rEntry.GetName(), *pVD); + } + else + { + m_xControl->append_text(rEntry.GetName()); + } +} + +void SvxLineEndLB::Modify( const XLineEndEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap ) +{ + m_xControl->remove(nPos); + + if(!rBitmap.IsEmpty()) + { + ScopedVclPtrInstance< VirtualDevice > pVD; + + const Size aBmpSize(rBitmap.GetSizePixel()); + pVD->SetOutputSizePixel(Size(aBmpSize.Width() / 2, aBmpSize.Height() / 2), false); + pVD->DrawBitmapEx(Point(aBmpSize.Width() / 2, 0), rBitmap); + m_xControl->insert(nPos, "", rEntry.GetName(), nullptr, pVD); + } + else + { + m_xControl->insert_text(nPos, rEntry.GetName()); + } +} void SvxPreviewBase::InitSettings(bool bForeground, bool bBackground) { @@ -1456,6 +1523,134 @@ void SvxXLinePreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rec LocalPostPaint(rRenderContext); } +void XLinePreview::Resize() +{ + PreviewBase::Resize(); + + const Size aOutputSize(GetOutputSize()); + const sal_Int32 nDistance(500); + const sal_Int32 nAvailableLength(aOutputSize.Width() - (4 * nDistance)); + + // create DrawObectA + const sal_Int32 aYPosA(aOutputSize.Height() / 2); + const basegfx::B2DPoint aPointA1( nDistance, aYPosA); + const basegfx::B2DPoint aPointA2( aPointA1.getX() + ((nAvailableLength * 14) / 20), aYPosA ); + basegfx::B2DPolygon aPolygonA; + aPolygonA.append(aPointA1); + aPolygonA.append(aPointA2); + mpLineObjA->SetPathPoly(basegfx::B2DPolyPolygon(aPolygonA)); + + // create DrawObectB + const sal_Int32 aYPosB1((aOutputSize.Height() * 3) / 4); + const sal_Int32 aYPosB2((aOutputSize.Height() * 1) / 4); + const basegfx::B2DPoint aPointB1( aPointA2.getX() + nDistance, aYPosB1); + const basegfx::B2DPoint aPointB2( aPointB1.getX() + ((nAvailableLength * 2) / 20), aYPosB2 ); + const basegfx::B2DPoint aPointB3( aPointB2.getX() + ((nAvailableLength * 2) / 20), aYPosB1 ); + basegfx::B2DPolygon aPolygonB; + aPolygonB.append(aPointB1); + aPolygonB.append(aPointB2); + aPolygonB.append(aPointB3); + mpLineObjB->SetPathPoly(basegfx::B2DPolyPolygon(aPolygonB)); + + // create DrawObectC + basegfx::B2DPolygon aPolygonC; + const basegfx::B2DPoint aPointC1( aPointB3.getX() + nDistance, aYPosB1); + const basegfx::B2DPoint aPointC2( aPointC1.getX() + ((nAvailableLength * 1) / 20), aYPosB2 ); + const basegfx::B2DPoint aPointC3( aPointC2.getX() + ((nAvailableLength * 1) / 20), aYPosB1 ); + aPolygonC.append(aPointC1); + aPolygonC.append(aPointC2); + aPolygonC.append(aPointC3); + mpLineObjC->SetPathPoly(basegfx::B2DPolyPolygon(aPolygonC)); +} + +XLinePreview::XLinePreview() + : mpLineObjA(nullptr) + , mpLineObjB(nullptr) + , mpLineObjC(nullptr) + , mpGraphic(nullptr) + , mbWithSymbol(false) +{ +} + +void XLinePreview::SetDrawingArea(weld::DrawingArea* pDrawingArea) +{ + PreviewBase::SetDrawingArea(pDrawingArea); + + mpLineObjA = new SdrPathObj(getModel(), OBJ_LINE); + mpLineObjB = new SdrPathObj(getModel(), OBJ_PLIN); + mpLineObjC = new SdrPathObj(getModel(), OBJ_PLIN); + + Resize(); + Invalidate(); +} + +XLinePreview::~XLinePreview() +{ + SdrObject *pFoo = mpLineObjA; + SdrObject::Free( pFoo ); + pFoo = mpLineObjB; + SdrObject::Free( pFoo ); + pFoo = mpLineObjC; + SdrObject::Free( pFoo ); +} + +void XLinePreview::SetSymbol(Graphic* p,const Size& s) +{ + mpGraphic = p; + maSymbolSize = s; +} + +void XLinePreview::ResizeSymbol(const Size& s) +{ + if ( s != maSymbolSize ) + { + maSymbolSize = s; + Invalidate(); + } +} + +void XLinePreview::SetLineAttributes(const SfxItemSet& rItemSet) +{ + // Set ItemSet at objects + mpLineObjA->SetMergedItemSet(rItemSet); + + // At line joints, do not use arrows + SfxItemSet aTempSet(rItemSet); + aTempSet.ClearItem(XATTR_LINESTART); + aTempSet.ClearItem(XATTR_LINEEND); + + mpLineObjB->SetMergedItemSet(aTempSet); + mpLineObjC->SetMergedItemSet(aTempSet); +} + +void XLinePreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) +{ + LocalPrePaint(rRenderContext); + + // paint objects to buffer device + sdr::contact::SdrObjectVector aObjectVector; + aObjectVector.push_back(mpLineObjA); + aObjectVector.push_back(mpLineObjB); + aObjectVector.push_back(mpLineObjC); + + sdr::contact::ObjectContactOfObjListPainter aPainter(getBufferDevice(), aObjectVector, nullptr); + sdr::contact::DisplayInfo aDisplayInfo; + + // do processing + aPainter.ProcessDisplay(aDisplayInfo); + + if ( mbWithSymbol && mpGraphic ) + { + const Size aOutputSize(GetOutputSize()); + Point aPos = Point( aOutputSize.Width() / 3, aOutputSize.Height() / 2 ); + aPos.AdjustX( -(maSymbolSize.Width() / 2) ); + aPos.AdjustY( -(maSymbolSize.Height() / 2) ); + mpGraphic->Draw(&getBufferDevice(), aPos, maSymbolSize); + } + + LocalPostPaint(rRenderContext); +} + SvxXShadowPreview::SvxXShadowPreview() : mpRectangleObject(nullptr) , mpRectangleShadow(nullptr) @@ -1565,6 +1760,10 @@ PreviewBase::PreviewBase() void PreviewBase::SetDrawingArea(weld::DrawingArea* pDrawingArea) { CustomWidgetController::SetDrawingArea(pDrawingArea); + Size aSize(getPreviewStripSize(pDrawingArea->get_ref_device())); + pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); + SetOutputSizePixel(aSize); + mpBufferDevice = VclPtr<VirtualDevice>::Create(pDrawingArea->get_ref_device()); mpBufferDevice->SetMapMode(MapMode(MapUnit::Map100thMM)); } diff --git a/sw/source/ui/frmdlg/column.cxx b/sw/source/ui/frmdlg/column.cxx index 4d270ba6b68e..177b2cd0284b 100644 --- a/sw/source/ui/frmdlg/column.cxx +++ b/sw/source/ui/frmdlg/column.cxx @@ -189,7 +189,7 @@ SwColumnDlg::SwColumnDlg(weld::Window* pParent, SwWrtShell& rSh) { const OUString sPageStr = pApplyToLB->get_text(nPagePos) + pPageDesc->GetName(); pApplyToLB->remove(nPagePos); - pApplyToLB->insert(nPagePos, OUString::number(LISTBOX_PAGE), sPageStr, nullptr); + pApplyToLB->insert(nPagePos, OUString::number(LISTBOX_PAGE), sPageStr, nullptr, nullptr); } else pApplyToLB->remove( nPagePos ); diff --git a/sw/source/uibase/misc/numberingtypelistbox.cxx b/sw/source/uibase/misc/numberingtypelistbox.cxx index f66f6a466b94..396546199d2c 100644 --- a/sw/source/uibase/misc/numberingtypelistbox.cxx +++ b/sw/source/uibase/misc/numberingtypelistbox.cxx @@ -113,7 +113,7 @@ void SwNumberingTypeListBox::Reload(SwInsertNumTypes nTypeFlags) } if (bInsert) { - m_xWidget->insert(nPos, OUString::number(nValue), SvxNumberingTypeTable::GetString(i), nullptr); + m_xWidget->insert(nPos, OUString::number(nValue), SvxNumberingTypeTable::GetString(i), nullptr, nullptr); } } if (nTypeFlags & SwInsertNumTypes::Extended) diff --git a/sw/source/uibase/utlui/uitool.cxx b/sw/source/uibase/utlui/uitool.cxx index de1621023946..506583559287 100644 --- a/sw/source/uibase/utlui/uitool.cxx +++ b/sw/source/uibase/utlui/uitool.cxx @@ -687,7 +687,7 @@ void InsertStringSorted(const OUString& rId, const OUString& rEntry, weld::Combo break; ++nOffset; } - rToFill.insert(nOffset, rId, rEntry, nullptr); + rToFill.insert(nOffset, rId, rEntry, nullptr, nullptr); } void FillCharStyleListBox(ListBox& rToFill, SwDocShell* pDocSh, bool bSorted, bool bWithDefault) diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index f329503f2e83..d70cae87ad36 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1610,6 +1610,11 @@ namespace } return Image(BitmapEx(rImage)); } + + Image createImage(VirtualDevice& rDevice) + { + return Image(BitmapEx(rDevice.GetBitmapEx(Point(), rDevice.GetOutputSizePixel()))); + } } class SalInstanceTreeView : public SalInstanceContainer, public virtual weld::TreeView @@ -1634,14 +1639,16 @@ public: m_xTreeView->InsertEntry(rText, pos == -1 ? LISTBOX_APPEND : pos); } - virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pImage) override + virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pIconName, VirtualDevice* pImageSurface) override { auto nInsertPos = pos == -1 ? COMBOBOX_APPEND : pos; sal_Int32 nInsertedAt; - if (!pImage) + if (!pIconName && !pImageSurface) nInsertedAt = m_xTreeView->InsertEntry(rStr, nInsertPos); + else if (pIconName) + nInsertedAt = m_xTreeView->InsertEntry(rStr, createImage(*pIconName), nInsertPos); else - nInsertedAt = m_xTreeView->InsertEntry(rStr, createImage(*pImage), nInsertPos); + nInsertedAt = m_xTreeView->InsertEntry(rStr, createImage(*pImageSurface), nInsertPos); m_xTreeView->SetEntryData(nInsertedAt, new OUString(rId)); } @@ -2316,14 +2323,16 @@ public: m_xComboBox->RemoveEntry(pos); } - virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pImage) override + virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pIconName, VirtualDevice* pImageSurface) override { auto nInsertPos = pos == -1 ? COMBOBOX_APPEND : pos; sal_Int32 nInsertedAt; - if (!pImage) + if (!pIconName && !pImageSurface) nInsertedAt = m_xComboBox->InsertEntry(rStr, nInsertPos); + else if (pIconName) + nInsertedAt = m_xComboBox->InsertEntry(rStr, createImage(*pIconName), nInsertPos); else - nInsertedAt = m_xComboBox->InsertEntry(rStr, createImage(*pImage), nInsertPos); + nInsertedAt = m_xComboBox->InsertEntry(rStr, createImage(*pImageSurface), nInsertPos); m_xComboBox->SetEntryData(nInsertedAt, new OUString(rId)); } @@ -2410,14 +2419,16 @@ public: m_xComboBox->RemoveEntryAt(pos); } - virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pImage) override + virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString* pIconName, VirtualDevice* pImageSurface) override { auto nInsertPos = pos == -1 ? COMBOBOX_APPEND : pos; sal_Int32 nInsertedAt; - if (!pImage) + if (!pIconName && !pImageSurface) nInsertedAt = m_xComboBox->InsertEntry(rStr, nInsertPos); + else if (pIconName) + nInsertedAt = m_xComboBox->InsertEntryWithImage(rStr, createImage(*pIconName), nInsertPos); else - nInsertedAt = m_xComboBox->InsertEntryWithImage(rStr, createImage(*pImage), nInsertPos); + nInsertedAt = m_xComboBox->InsertEntryWithImage(rStr, createImage(*pImageSurface), nInsertPos); m_xComboBox->SetEntryData(nInsertedAt, new OUString(rId)); } diff --git a/vcl/unx/generic/print/prtsetup.cxx b/vcl/unx/generic/print/prtsetup.cxx index 2a75f3051768..45efe3dc9feb 100644 --- a/vcl/unx/generic/print/prtsetup.cxx +++ b/vcl/unx/generic/print/prtsetup.cxx @@ -329,7 +329,7 @@ RTSDevicePage::RTSDevicePage(weld::Widget* pPage, RTSDialog* pParent) || int(bAutoIsPDF) == m_pParent->m_aJobData.m_nPDFDevice); OUString sStr = m_xLevelBox->get_text(0); - m_xLevelBox->insert(0, m_xLevelBox->get_id(0), sStr.replaceAll("%s", bAutoIsPDF ? m_xLevelBox->get_text(5) : m_xLevelBox->get_text(1)), nullptr); + m_xLevelBox->insert(0, m_xLevelBox->get_id(0), sStr.replaceAll("%s", bAutoIsPDF ? m_xLevelBox->get_text(5) : m_xLevelBox->get_text(1)), nullptr, nullptr); m_xLevelBox->remove(1); for (int i = 0; i < m_xLevelBox->get_count(); ++i) diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index f34dda68b30b..033c0be408f0 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -2778,6 +2778,14 @@ namespace OUString sUILang = Application::GetSettings().GetUILanguageTag().getBcp47(); return load_icon_by_name(rIconName, sIconTheme, sUILang); } + + GdkPixbuf* load_icon_from_surface(VirtualDevice& rDevice) + { + Size aSize(rDevice.GetOutputSizePixel()); + cairo_surface_t* surface = get_underlying_cairo_surface(rDevice); + return gdk_pixbuf_get_from_surface(surface, 0, 0, aSize.Width(), aSize.Height()); + } + } class GtkInstanceButton : public GtkInstanceContainer, public virtual weld::Button @@ -3181,13 +3189,11 @@ public: } if (pDevice) { - cairo_surface_t* surface = get_underlying_cairo_surface(*pDevice); if (gtk_check_version(3, 20, 0) == nullptr) gtk_image_set_from_surface(m_pImage, get_underlying_cairo_surface(*pDevice)); else { - Size aSize(pDevice->GetOutputSizePixel()); - GdkPixbuf* pixbuf = gdk_pixbuf_get_from_surface(surface, 0, 0, aSize.Width(), aSize.Height()); + GdkPixbuf* pixbuf = load_icon_from_surface(*pDevice); gtk_image_set_from_pixbuf(m_pImage, pixbuf); g_object_unref(pixbuf); } @@ -3646,11 +3652,11 @@ namespace return found; } - void insert_row(GtkListStore* pListStore, int pos, const OUString& rId, const OUString& rText, const OUString* pImage) + void insert_row(GtkListStore* pListStore, int pos, const OUString& rId, const OUString& rText, const OUString* pIconName, VirtualDevice* pDevice) { GtkTreeIter iter; gtk_list_store_insert(pListStore, &iter, pos); - if (!pImage) + if (!pIconName && !pDevice) { gtk_list_store_set(pListStore, &iter, 0, OUStringToOString(rText, RTL_TEXTENCODING_UTF8).getStr(), @@ -3661,21 +3667,29 @@ namespace { GdkPixbuf* pixbuf = nullptr; - if (pImage->lastIndexOf('.') != pImage->getLength() - 4) + if (pIconName) { - assert((*pImage == "dialog-warning" || *pImage == "dialog-error" || *pImage == "dialog-information") && "unknown stock image"); + if (pIconName->lastIndexOf('.') != pIconName->getLength() - 4) + { + assert((*pIconName== "dialog-warning" || *pIconName== "dialog-error" ||*pIconName== "dialog-information") && + "unknown stock image"); - GError *error = nullptr; - GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); - pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(*pImage, RTL_TEXTENCODING_UTF8).getStr(), - 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); + GError *error = nullptr; + GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); + pixbuf = gtk_icon_theme_load_icon(icon_theme, OUStringToOString(*pIconName, RTL_TEXTENCODING_UTF8).getStr(), + 16, GTK_ICON_LOOKUP_USE_BUILTIN, &error); + } + else + { + const AllSettings& rSettings = Application::GetSettings(); + pixbuf = load_icon_by_name(*pIconName, + rSettings.GetStyleSettings().DetermineIconTheme(), + rSettings.GetUILanguageTag().getBcp47()); + } } else { - const AllSettings& rSettings = Application::GetSettings(); - pixbuf = load_icon_by_name(*pImage, - rSettings.GetStyleSettings().DetermineIconTheme(), - rSettings.GetUILanguageTag().getBcp47()); + pixbuf = load_icon_from_surface(*pDevice); } gtk_list_store_set(pListStore, &iter, @@ -3754,10 +3768,10 @@ public: enable_notify_events(); } - virtual void insert(int pos, const OUString& rId, const OUString& rText, const OUString* pImage) override + virtual void insert(int pos, const OUString& rId, const OUString& rText, const OUString* pIconName, VirtualDevice* pImageSurface) override { disable_notify_events(); - insert_row(m_pListStore, pos, rId, rText, pImage); + insert_row(m_pListStore, pos, rId, rText, pIconName, pImageSurface); enable_notify_events(); } @@ -4876,10 +4890,10 @@ public: enable_notify_events(); } - virtual void insert(int pos, const OUString& rId, const OUString& rText, const OUString* pImage) override + virtual void insert(int pos, const OUString& rId, const OUString& rText, const OUString* pIconName, VirtualDevice* pImageSurface) override { disable_notify_events(); - insert_row(GTK_LIST_STORE(gtk_combo_box_get_model(m_pComboBox)), pos, rId, rText, pImage); + insert_row(GTK_LIST_STORE(gtk_combo_box_get_model(m_pComboBox)), pos, rId, rText, pIconName, pImageSurface); enable_notify_events(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits