Hi, I have submitted a patch for review:
https://gerrit.libreoffice.org/2618 To pull it, you can do: git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/18/2618/1 Minor improvements and UX-advice related to fdo#46718 delete multi style UX advice see: http://lists.freedesktop.org/archives/libreoffice-ux-advise/2013-February/001816.html Summary: only show a dialog when the user is trying to delete an used style. Also warn him this change can only be partly undone (for now). Change-Id: Ib95143fcd4c7543f518e0d7fd4ff46a127efca2a --- M sfx2/source/dialog/dialog.src M sfx2/source/dialog/templdlg.cxx 2 files changed, 40 insertions(+), 53 deletions(-) diff --git a/sfx2/source/dialog/dialog.src b/sfx2/source/dialog/dialog.src index f23deb1..c430d1a 100644 --- a/sfx2/source/dialog/dialog.src +++ b/sfx2/source/dialog/dialog.src @@ -56,13 +56,9 @@ { Message [ en-US ] = "Name already exists as a default Style.\nPlease choose another name." ; }; -String STR_DELETE_STYLE -{ - Text [ en-US ] = "Do you really want to delete Style $1?" ; -}; String STR_DELETE_STYLE_USED { - Text [ en-US ] = "You are deleting an applied Style!\n" ; + Text [ en-US ] = "One or more of the selected styles is in use in this document.\nIf you delete these styles, text will revert to the parent style.\nThis operation may not be undone." ; }; Menu MN_CONTEXT_TEMPLDLG { diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx index 404f0c9..10ac8b6 100644 --- a/sfx2/source/dialog/templdlg.cxx +++ b/sfx2/source/dialog/templdlg.cxx @@ -1970,77 +1970,68 @@ { if ( IsInitialized() && HasSelectedStyle() ) { - sal_uLong SelectionCount = 0; - sal_Bool bChecked = 0; + bool aApprove = 0; // use to skip the dialog + bool bUsedStyle = 0; // one of the selected styles are used in the document? String aRet; - SelectionCount = aFmtLb.GetSelectionCount(); std::vector<SvTreeListEntry*> aList; - SvTreeListEntry* pEntry = aFmtLb.FirstSelected(); + const SfxStyleFamilyItem* pItem = GetFamilyItem_Impl(); while (pEntry) { aList.push_back( pEntry ); + // check the style is used or not + if (pTreeBox) + aRet = pTreeBox->GetEntryText( pEntry ); + else + aRet = aFmtLb.GetEntryText( pEntry ); + + const String aTemplName( aRet ); + SfxStyleSheetBase* pStyle = pStyleSheetPool->Find( aTemplName, pItem->GetFamily(), SFXSTYLEBIT_ALL ); + + if ( !bUsedStyle && pStyle->IsUsed() ) // pStyle is in use in the document? + bUsedStyle = 1; + pEntry = aFmtLb.NextSelected( pEntry ); - SelectionCount++; } std::vector<SvTreeListEntry*>::const_iterator it = aList.begin(), itEnd = aList.end(); for (; it != itEnd; ++it) { + // we only want to show the dialog once and if we want to delete a style in use (UX-advice) + if ( bUsedStyle && !aApprove ) + { + String aMsg = SfxResId(STR_DELETE_STYLE_USED).toString(); + #if defined UNX + QueryBox aBox( SFX_APP()->GetTopWindow(), WB_YES_NO | WB_DEF_NO, aMsg ); + #else + QueryBox aBox( GetWindow(), WB_YES_NO | WB_DEF_NO , aMsg ); + #endif + aApprove = aBox.Execute() == RET_YES; + if ( aApprove == 0 ) + break; + } + else + aApprove = 1; + if (pTreeBox) aRet = pTreeBox->GetEntryText( *it ); else aRet = aFmtLb.GetEntryText( *it ); + const String aTemplName( aRet ); + PrepareDeleteAction(); + bDontUpdate = sal_True; // To prevent the Treelistbox to shut down while deleting + Execute_Impl( SID_STYLE_DELETE, aTemplName, + String(), (sal_uInt16)GetFamilyItem_Impl()->GetFamily() ); - const SfxStyleFamilyItem* pItem = GetFamilyItem_Impl(); - - SfxStyleSheetBase* pStyle = pStyleSheetPool->Find( aTemplName, pItem->GetFamily(), SFXSTYLEBIT_ALL ); - - bool bUsedStyle = pStyle->IsUsed(); - bool approve; - - if ( bChecked == 0 ) + if ( pTreeBox ) { - String aMsg; - if ( bUsedStyle ) - aMsg = SfxResId(STR_DELETE_STYLE_USED).toString(); - aMsg += SfxResId(STR_DELETE_STYLE).toString(); - aMsg.SearchAndReplaceAscii( "$1", aTemplName ); - #if defined UNX - QueryBox aBox( SFX_APP()->GetTopWindow(), WB_YES_NO | WB_DEF_NO, aMsg ); - #else - QueryBox aBox( GetWindow(), WB_YES_NO | WB_DEF_NO , aMsg ); - #endif - if (SelectionCount > 1) //show only when there are multiple styles selected/to be deleted - aBox.SetDefaultCheckBoxText(); - approve = aBox.Execute() == RET_YES; - bChecked = aBox.GetCheckBoxState(); - if ( approve == 0 && bChecked == 1) - break; + pTreeBox->RemoveParentKeepChildren( *it ); + bDontUpdate = sal_False; } - else //if checkbox was selected previous time, don't ask again - approve = 1; - - if ( approve ) - { - PrepareDeleteAction(); - - bDontUpdate = sal_True; // To prevent the Treelistbox to shut down while deleting - - Execute_Impl( SID_STYLE_DELETE, aTemplName, - String(), (sal_uInt16)GetFamilyItem_Impl()->GetFamily() ); - - if ( pTreeBox ) - { - pTreeBox->RemoveParentKeepChildren( *it ); - bDontUpdate = sal_False; - } - } - --SelectionCount; } bDontUpdate = sal_False; //if everything is deleted set bDontUpdate back to false UpdateStyles_Impl(UPDATE_FAMILY_LIST); //and force-update the list -- To view, visit https://gerrit.libreoffice.org/2618 To unsubscribe, visit https://gerrit.libreoffice.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib95143fcd4c7543f518e0d7fd4ff46a127efca2a Gerrit-PatchSet: 1 Gerrit-Project: core Gerrit-Branch: master Gerrit-Owner: Joren De Cuyper <joren.libreoff...@telenet.be> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice