[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