[PATCH libreoffice-4-0] fdo#61429: Stylist: save selection of "Hierarchical" entry

Michael Stahl (via Code Review) gerrit at gerrit.libreoffice.org
Tue Mar 26 04:57:35 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3056

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/56/3056/1

fdo#61429: Stylist: save selection of "Hierarchical" entry

This is unfortunately rather ugly because that one is "very special".

(cherry picked from commit 44dd8b838b8dfa74b895a870a68200cf4f3574e0)

Conflicts:
	sfx2/source/dialog/templdlg.cxx

Change-Id: Ie2bc9ce2690fbc742b4510e453ca1ef310614256
---
M sfx2/source/dialog/templdlg.cxx
M sfx2/source/inc/templdgi.hxx
M svl/inc/svl/style.hrc
3 files changed, 42 insertions(+), 15 deletions(-)



diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx
index a81c27d..94e8082 100644
--- a/sfx2/source/dialog/templdlg.cxx
+++ b/sfx2/source/dialog/templdlg.cxx
@@ -753,6 +753,7 @@
     bUpdateByExampleDisabled( sal_False ),
     bTreeDrag               ( sal_True ),
     bHierarchical           ( sal_False ),
+    m_bWantHierarchical     ( sal_False ),
     bBindingUpdate          ( sal_True )
 {
     aFmtLb.SetAccessibleName(SfxResId(STR_STYLE_ELEMTLIST).toString());
@@ -1278,8 +1279,10 @@
             }
 
             // if the tree view again, select family hierarchy
-            if(pTreeBox)
+            if (pTreeBox || m_bWantHierarchical)
+            {
                 aFilterLb.SelectEntry(SfxResId(STR_STYLE_FILTER_HIERARCHICAL).toString());
+            }
 
             // show maximum 14 entries
             aFilterLb.SetDropDownLineCount( MAX_FILTER_ENTRIES );
@@ -1287,12 +1290,21 @@
         }
         else
         {
-            if( nActFilter < aFilterLb.GetEntryCount() - 1)
-                aFilterLb.SelectEntryPos(nActFilter + 1);
-            else
+            if (m_bWantHierarchical)
             {
                 nActFilter = 0;
-                aFilterLb.SelectEntryPos(1);
+                aFilterLb.SelectEntry(SfxResId(
+                            STR_STYLE_FILTER_HIERARCHICAL).toString());
+            }
+            else
+            {
+                if (nActFilter < aFilterLb.GetEntryCount() - 1)
+                    aFilterLb.SelectEntryPos(nActFilter + 1);
+                else
+                {
+                    nActFilter = 0;
+                    aFilterLb.SelectEntryPos(1);
+                }
             }
         }
 
@@ -1635,7 +1647,6 @@
 
 
 //-------------------------------------------------------------------------
-
 // Other filters; can be switched by the users or as a result of new or
 // editing, if the current document has been assigned a different filter.
 void SfxCommonTemplateDialog_Impl::FilterSelect(
@@ -1646,14 +1657,7 @@
     if( nEntry != nActFilter || bForce )
     {
         nActFilter = nEntry;
-        SfxViewFrame *pViewFrame = pBindings->GetDispatcher_Impl()->GetFrame();
-        SfxObjectShell *pDocShell = pViewFrame->GetObjectShell();
-        if (pDocShell)
-        {
-            pDocShell->SetAutoStyleFilterIndex(nActFilter);
-            SaveFactoryStyleFilter( pDocShell, nActFilter );
-        }
-
+        SfxObjectShell *const pDocShell = SaveSelection();
         SfxStyleSheetBasePool *pOldStyleSheetPool = pStyleSheetPool;
         pStyleSheetPool = pDocShell? pDocShell->GetStyleSheetPool(): 0;
         if ( pOldStyleSheetPool != pStyleSheetPool )
@@ -1744,6 +1748,8 @@
         {
             // Turn on treeView
             bHierarchical=sal_True;
+            m_bWantHierarchical = sal_True;
+            SaveSelection(); // fdo#61429 store "hierarchical"
             const String aSelectEntry( GetSelectedEntry());
             aFmtLb.Hide();
 
@@ -1776,6 +1782,7 @@
         aFmtLb.Show();
         // If bHierarchical, then the family can have changed
         // minus one since hierarchical is inserted at the start
+        m_bWantHierarchical = sal_False; // before FilterSelect
         FilterSelect(pBox->GetSelectEntryPos() - 1, bHierarchical );
         bHierarchical=sal_False;
     }
@@ -1918,6 +1925,10 @@
     sal_Int32 nDefault = -1;
     nFilter = aFactoryProps.getUnpackedValueOrDefault( DEFINE_CONST_UNICODE("ooSetupFactoryStyleFilter"), nDefault );
 
+    m_bWantHierarchical =
+        (nFilter & SFXSTYLEBIT_HIERARCHY) ? sal_True : sal_False;
+    nFilter &= ~SFXSTYLEBIT_HIERARCHY; // clear it
+
     return nFilter;
 }
 
@@ -1928,10 +1939,23 @@
     OSL_ENSURE( i_pObjSh, "SfxCommonTemplateDialog_Impl::LoadFactoryStyleFilter(): no ObjectShell" );
     Sequence< PropertyValue > lProps(1);
     lProps[0].Name = DEFINE_CONST_UNICODE("ooSetupFactoryStyleFilter");
-    lProps[0].Value = makeAny( i_nFilter );;
+    lProps[0].Value = makeAny(
+            i_nFilter | (m_bWantHierarchical ? SFXSTYLEBIT_HIERARCHY : 0));
     xModuleManager->replaceByName( getModuleIdentifier( xModuleManager, i_pObjSh ), makeAny( lProps ) );
 }
 
+SfxObjectShell* SfxCommonTemplateDialog_Impl::SaveSelection()
+{
+    SfxViewFrame *const pViewFrame(pBindings->GetDispatcher_Impl()->GetFrame());
+    SfxObjectShell *const pDocShell(pViewFrame->GetObjectShell());
+    if (pDocShell)
+    {
+        pDocShell->SetAutoStyleFilterIndex(nActFilter);
+        SaveFactoryStyleFilter( pDocShell, nActFilter );
+    }
+    return pDocShell;
+}
+
 //-------------------------------------------------------------------------
 
 IMPL_LINK( SfxCommonTemplateDialog_Impl, DropHdl, StyleTreeListBox_Impl *, pBox )
diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx
index 2d92b71..c78ad47 100644
--- a/sfx2/source/inc/templdgi.hxx
+++ b/sfx2/source/inc/templdgi.hxx
@@ -165,6 +165,7 @@
                                 bUpdateByExampleDisabled:1,
                                 bTreeDrag               :1,
                                 bHierarchical           :1,
+                                m_bWantHierarchical     :1,
                                 bBindingUpdate          :1;
 
     DECL_LINK( FilterSelectHdl, ListBox * );
@@ -225,6 +226,7 @@
 
     sal_Int32           LoadFactoryStyleFilter( SfxObjectShell* i_pObjSh );
     void                SaveFactoryStyleFilter( SfxObjectShell* i_pObjSh, sal_Int32 i_nFilter );
+    SfxObjectShell *    SaveSelection();
 
 public:
     TYPEINFO();
diff --git a/svl/inc/svl/style.hrc b/svl/inc/svl/style.hrc
index d498840..e12feed 100644
--- a/svl/inc/svl/style.hrc
+++ b/svl/inc/svl/style.hrc
@@ -21,6 +21,7 @@
 
 #define SFXSTYLEBIT_AUTO        0x0000 // automatisch; Flags kommen von der Applikation
 #define SFXSTYLEBIT_HIDDEN      0x0200 // benutzte Vorlage (als Suchmaske)
+#define SFXSTYLEBIT_HIERARCHY   0x1000 // hierarchical view - just for dialog
 #define SFXSTYLEBIT_READONLY    0x2000 // benutzte Vorlage (als Suchmaske)
 #define SFXSTYLEBIT_USED        0x4000 // benutzte Vorlage (als Suchmaske)
 #define SFXSTYLEBIT_USERDEF     0x8000 // benutzerdefinierte Vorlage

-- 
To view, visit https://gerrit.libreoffice.org/3056
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie2bc9ce2690fbc742b4510e453ca1ef310614256
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Michael Stahl <mstahl at redhat.com>



More information about the LibreOffice mailing list