[PATCH] Minor improvements and UX-advice related to fdo#46718 delete...
Joren De Cuyper (via Code Review)
gerrit at gerrit.libreoffice.org
Sat Mar 9 11:34:35 PST 2013
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.libreoffice at telenet.be>
More information about the LibreOffice
mailing list