diff options
author | Rishabh Kumar <kris.kr296@gmail.com> | 2016-07-13 00:31:28 +0530 |
---|---|---|
committer | Katarina Behrens <Katarina.Behrens@cib.de> | 2016-07-14 09:12:23 +0000 |
commit | be95afad421230784f0ea1ec2054974c4359b9fa (patch) | |
tree | 4c23e83f1376f83db2d5a3228b4db5966ebc7f5d /cui | |
parent | f9ef86c7a1c10e16c4aa4988706047058ef7f167 (diff) |
[GSoC] Avoid reload of preset list in hatch tab
Change-Id: If2acb6df3c046de63b6b4069474e19fb87222a11
Reviewed-on: https://gerrit.libreoffice.org/27167
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
Diffstat (limited to 'cui')
-rw-r--r-- | cui/source/tabpages/tphatch.cxx | 83 |
1 files changed, 44 insertions, 39 deletions
diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx index 2c733ad5b6cf..81bb046a5bbd 100644 --- a/cui/source/tabpages/tphatch.cxx +++ b/cui/source/tabpages/tphatch.cxx @@ -209,7 +209,8 @@ void SvxHatchTabPage::ActivatePage( const SfxItemSet& rSet ) if( *m_pPageType == PT_HATCH && *m_pPos != LISTBOX_ENTRY_NOTFOUND ) { - m_pHatchLB->SelectItem( *m_pPos ); + sal_uInt16 nId = m_pHatchLB->GetItemId( static_cast<size_t>( *m_pPos ) ); + m_pHatchLB->SelectItem( nId ); } // colors could have been deleted ChangeHatchHdl_Impl(); @@ -292,9 +293,9 @@ long SvxHatchTabPage::CheckChanges_Impl() } } - sal_Int32 nPos = m_pHatchLB->GetSelectItemId(); - if( nPos != 0 ) - *m_pPos = nPos - 1; + size_t nPos = m_pHatchLB->GetSelectItemPos(); + if( nPos != VALUESET_ITEM_NOTFOUND ) + *m_pPos = static_cast<sal_Int32>(nPos); return 0L; } @@ -325,10 +326,10 @@ bool SvxHatchTabPage::FillItemSet( SfxItemSet* rSet ) std::unique_ptr<XHatch> pXHatch; OUString aString; - sal_Int32 nPos = m_pHatchLB->GetSelectItemId(); - if( nPos != 0 ) + size_t nPos = m_pHatchLB->GetSelectItemPos(); + if( nPos != VALUESET_ITEM_NOTFOUND ) { - pXHatch.reset(new XHatch( m_pHatchingList->GetHatch( nPos - 1 )->GetHatch() )); + pXHatch.reset(new XHatch( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetHatch() )); aString = m_pHatchLB->GetItemText( m_pHatchLB->GetSelectItemId() ); } // gradient has been (unidentifiedly) passed @@ -429,10 +430,10 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ChangeHatchHdl, ValueSet*, void) void SvxHatchTabPage::ChangeHatchHdl_Impl() { std::unique_ptr<XHatch> pHatch; - int nPos = m_pHatchLB->GetSelectItemId(); + size_t nPos = m_pHatchLB->GetSelectItemPos(); - if( nPos != 0 ) - pHatch.reset(new XHatch( m_pHatchingList->GetHatch( nPos - 1 )->GetHatch() )); + if( nPos != VALUESET_ITEM_NOTFOUND ) + pHatch.reset(new XHatch( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetHatch() )); else { const SfxPoolItem* pPoolItem = nullptr; @@ -446,10 +447,10 @@ void SvxHatchTabPage::ChangeHatchHdl_Impl() } if( !pHatch ) { - m_pHatchLB->SelectItem( 1 ); - nPos = m_pHatchLB->GetSelectItemId(); - if( nPos != 0 ) - pHatch.reset(new XHatch( m_pHatchingList->GetHatch( nPos - 1 )->GetHatch() )); + sal_uInt16 nPosition = m_pHatchLB->GetItemId( 0 ); + m_pHatchLB->SelectItem( nPosition ); + if( nPosition != 0 ) + pHatch.reset( new XHatch( m_pHatchingList->GetHatch( 0 )->GetHatch() ) ); } } if( pHatch ) @@ -542,9 +543,11 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickAddHdl_Impl, Button*, void) m_pHatchingList->Insert( pEntry, nCount ); - m_pHatchLB->Clear(); - m_pHatchLB->FillPresetListBox( *m_pHatchingList ); - m_pHatchLB->SelectItem( nCount + 1 ); + sal_Int32 nId = m_pHatchLB->GetItemId(nCount - 1); // calculate the last ID + Bitmap aBitmap = m_pHatchingList->GetBitmapForPreview( nCount, m_pHatchLB->GetIconSize() ); + // Insert the new entry at the next ID + m_pHatchLB->InsertItem( nId + 1, Image(aBitmap), aName ); + m_pHatchLB->SelectItem( nId + 1 ); *m_pnHatchingListState |= ChangeType::MODIFIED; @@ -554,11 +557,12 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickAddHdl_Impl, Button*, void) IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickModifyHdl_Impl, Button*, void) { - sal_Int32 nPos = m_pHatchLB->GetSelectItemId(); + sal_uInt16 nId = m_pHatchLB->GetSelectItemId(); + size_t nPos = m_pHatchLB->GetSelectItemPos(); - if( nPos != 0 ) + if( nPos != VALUESET_ITEM_NOTFOUND ) { - OUString aName( m_pHatchingList->GetHatch( nPos - 1 )->GetName() ); + OUString aName( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetName() ); XHatch aXHatch( m_pLbLineColor->GetSelectEntryColor(), (css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(), @@ -567,11 +571,12 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickModifyHdl_Impl, Button*, void) XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName ); - delete m_pHatchingList->Replace( pEntry, nPos - 1 ); + delete m_pHatchingList->Replace( pEntry, static_cast<sal_uInt16>(nPos) ); - m_pHatchLB->Clear(); - m_pHatchLB->FillPresetListBox( *m_pHatchingList ); - m_pHatchLB->SelectItem( nPos ); + Bitmap aBitmap = m_pHatchingList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), m_pHatchLB->GetIconSize() ); + m_pHatchLB->RemoveItem( nId ); + m_pHatchLB->InsertItem( nId, Image(aBitmap), aName, static_cast<sal_uInt16>(nPos) ); + m_pHatchLB->SelectItem( nId ); // save values for changes recognition (-> method) m_pMtrDistance->SaveValue(); @@ -586,18 +591,19 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickModifyHdl_Impl, Button*, void) IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickDeleteHdl_Impl, SvxPresetListBox*, void) { - sal_Int32 nPos = m_pHatchLB->GetSelectItemId(); + sal_uInt16 nId = m_pHatchLB->GetSelectItemId(); + size_t nPos = m_pHatchLB->GetSelectItemPos(); - if( nPos != 0 ) + if( nPos != VALUESET_ITEM_NOTFOUND ) { ScopedVclPtrInstance< MessageDialog > aQueryBox( GetParentDialog(),"AskDelHatchDialog","cui/ui/querydeletehatchdialog.ui"); if( aQueryBox->Execute() == RET_YES ) { - m_pHatchingList->Remove( nPos - 1 ); - m_pHatchLB->Clear(); - m_pHatchLB->FillPresetListBox( *m_pHatchingList ); - m_pHatchLB->SelectItem( 1 ); + m_pHatchingList->Remove( static_cast<sal_uInt16>(nPos) ); + m_pHatchLB->RemoveItem( nId ); + nId = m_pHatchLB->GetItemId(0); + m_pHatchLB->SelectItem( nId ); m_pCtlPreview->Invalidate(); @@ -610,12 +616,13 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickDeleteHdl_Impl, SvxPresetListBox*, v IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickRenameHdl_Impl, SvxPresetListBox*, void ) { - sal_Int32 nPos = m_pHatchLB->GetSelectItemId(); + sal_uInt16 nId = m_pHatchLB->GetSelectItemId(); + size_t nPos = m_pHatchLB->GetSelectItemPos(); - if( nPos != 0 ) + if( nPos != VALUESET_ITEM_NOTFOUND ) { OUString aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) ); - OUString aName( m_pHatchingList->GetHatch( nPos - 1 )->GetName() ); + OUString aName( m_pHatchingList->GetHatch( nPos )->GetName() ); SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); assert(pFact && "Dialog creation failed!"); @@ -627,18 +634,16 @@ IMPL_LINK_NOARG_TYPED(SvxHatchTabPage, ClickRenameHdl_Impl, SvxPresetListBox*, v { pDlg->GetName( aName ); sal_Int32 nHatchPos = SearchHatchList( aName ); - bool bValidHatchName = (nHatchPos == nPos - 1) || (nHatchPos == LISTBOX_ENTRY_NOTFOUND); + bool bValidHatchName = (nHatchPos == static_cast<sal_Int32>(nPos) ) || (nHatchPos == LISTBOX_ENTRY_NOTFOUND); if(bValidHatchName) { bLoop = false; - XHatchEntry* pEntry = m_pHatchingList->GetHatch( nPos - 1 ); + XHatchEntry* pEntry = m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) ); pEntry->SetName( aName ); - delete m_pHatchingList->Replace( pEntry, nPos - 1 ); - m_pHatchLB->Clear(); - m_pHatchLB->FillPresetListBox(*m_pHatchingList); - m_pHatchLB->SelectItem( nPos ); + m_pHatchLB->SetItemText(nId, aName); + m_pHatchLB->SelectItem( nId ); *m_pnHatchingListState |= ChangeType::MODIFIED; } |