Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi Kohei,
Here is the other patch of re-factoring the options code, this time is
the defaults options which I moved from ScDocOptions into a separate
class.

This was the last major patch I had in mind for this part of the code.
/Albert
From 7211e99bd48018c78a96cdc817b1c3de515c3e83 Mon Sep 17 00:00:00 2001
From: Albert Thuswaldner <albert.thuswaldner@gmail.com>
Date: Thu, 12 Apr 2012 21:20:58 +0200
Subject: [PATCH] Moved ScDefaultsOptions from ScDocOptions to separate class

---
 sc/Library_sc.mk                    |    1 +
 sc/inc/defaultsopt.hxx              |  104 +++++++++++++++++
 sc/inc/docoptio.hxx                 |   17 +---
 sc/inc/sc.hrc                       |    1 +
 sc/inc/scmod.hxx                    |    5 +
 sc/source/core/data/document.cxx    |   14 +-
 sc/source/core/tool/defaultsopt.cxx |  209 +++++++++++++++++++++++++++++++++++
 sc/source/core/tool/docoptio.cxx    |   78 +-------------
 sc/source/ui/app/scmod.cxx          |   40 +++++++
 sc/source/ui/inc/tpdefaults.hxx     |   15 +--
 sc/source/ui/optdlg/tpdefaults.cxx  |   47 +++++----
 sc/source/ui/view/tabvwsh4.cxx      |    6 +-
 12 files changed, 403 insertions(+), 134 deletions(-)
 create mode 100644 sc/inc/defaultsopt.hxx
 create mode 100644 sc/source/core/tool/defaultsopt.cxx

diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index f640f05..d2c32cd 100644
--- a/sc/Library_sc.mk
+++ b/sc/Library_sc.mk
@@ -171,6 +171,7 @@ $(eval $(call gb_Library_add_exception_objects,sc,\
        sc/source/core/tool/consoli  \
        sc/source/core/tool/dbdata \
        sc/source/core/tool/ddelink \
+       sc/source/core/tool/defaultsopt \
        sc/source/core/tool/detdata  \
        sc/source/core/tool/detfunc \
        sc/source/core/tool/docoptio \
diff --git a/sc/inc/defaultsopt.hxx b/sc/inc/defaultsopt.hxx
new file mode 100644
index 0000000..6dec5b0
--- /dev/null
+++ b/sc/inc/defaultsopt.hxx
@@ -0,0 +1,104 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ *       Albert Thuswaldner <albert.thuswaldner@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2012 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#ifndef SC_DEFAULTSOPT_HXX
+#define SC_DEFAULTSOPT_HXX
+
+#include <svl/poolitem.hxx>
+#include <unotools/configitem.hxx>
+#include "formula/grammar.hxx"
+#include "scdllapi.h"
+#include "global.hxx"
+
+class SC_DLLPUBLIC ScDefaultsOptions
+{
+private:
+    SCTAB nInitTabCount;             // number of Tabs for new Spreadsheet doc
+    ::rtl::OUString aInitTabPrefix;  // The Tab prefix name in new Spreadsheet doc
+
+
+public:
+    ScDefaultsOptions();
+    ScDefaultsOptions( const ScDefaultsOptions& rCpy );
+    ~ScDefaultsOptions();
+
+    void SetDefaults();
+
+    SCTAB GetInitTabCount() const           { return nInitTabCount; }
+    void   SetInitTabCount( SCTAB nTabs) { nInitTabCount = nTabs; }
+    void   SetInitTabPrefix( ::rtl::OUString& aPrefix) { aInitTabPrefix = aPrefix; }
+    ::rtl::OUString GetInitTabPrefix() const { return aInitTabPrefix; }
+
+    ScDefaultsOptions&  operator=  ( const ScDefaultsOptions& rCpy );
+    bool                operator== ( const ScDefaultsOptions& rOpt ) const;
+    bool                operator!= ( const ScDefaultsOptions& rOpt ) const;
+
+};
+
+//==================================================================
+// item for the dialog / options page
+//==================================================================
+
+class SC_DLLPUBLIC ScTpDefaultsItem : public SfxPoolItem
+{
+public:
+    TYPEINFO();
+    ScTpDefaultsItem( sal_uInt16 nWhich,
+                   const ScDefaultsOptions& rOpt );
+    ScTpDefaultsItem( const ScTpDefaultsItem& rItem );
+    ~ScTpDefaultsItem();
+
+    virtual String          GetValueText() const;
+    virtual int             operator==( const SfxPoolItem& ) const;
+    virtual SfxPoolItem*    Clone( SfxItemPool *pPool = 0 ) const;
+
+    const ScDefaultsOptions& GetDefaultsOptions() const { return theOptions; }
+
+private:
+    ScDefaultsOptions theOptions;
+};
+
+//==================================================================
+// config item
+//==================================================================
+
+class ScDefaultsCfg : public ScDefaultsOptions, public utl::ConfigItem
+{
+    com::sun::star::uno::Sequence<rtl::OUString> GetPropertyNames();
+public:
+    ScDefaultsCfg();
+
+    void SetOptions( const ScDefaultsOptions& rNew );
+
+    virtual void Commit();
+    virtual void Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames );
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/inc/docoptio.hxx b/sc/inc/docoptio.hxx
index 78fd5e9..26cb910 100644
--- a/sc/inc/docoptio.hxx
+++ b/sc/inc/docoptio.hxx
@@ -40,11 +40,9 @@
 
 class SC_DLLPUBLIC ScDocOptions
 {
-    double fIterEps;                // epsilon value dazu
+    double fIterEps;                    // epsilon value dazu
     sal_uInt16 nIterCount;              // number
-    SCTAB nInitTabCount;            // number of Tabs for new Spreadsheet doc
-    ::rtl::OUString aInitTabPrefix;   // The Tab prefix name in new Spreadsheet doc
-    sal_uInt16 nPrecStandardFormat; // precision for standard format
+    sal_uInt16 nPrecStandardFormat;     // precision for standard format
     sal_uInt16 nDay;                    // Null date:
     sal_uInt16 nMonth;
     sal_uInt16 nYear;
@@ -74,10 +72,6 @@ public:
     void   SetIter( sal_Bool bVal )         { bIsIter = bVal; }
     sal_uInt16 GetIterCount() const         { return nIterCount; }
     void   SetIterCount( sal_uInt16 nCount) { nIterCount = nCount; }
-    SCTAB GetInitTabCount() const           { return nInitTabCount; }
-    void   SetInitTabCount( SCTAB nTabs) { nInitTabCount = nTabs; }
-    void   SetInitTabPrefix( ::rtl::OUString& aPrefix) { aInitTabPrefix = aPrefix; }
-    ::rtl::OUString GetInitTabPrefix() const                   { return aInitTabPrefix; }
     double GetIterEps() const           { return fIterEps; }
     void   SetIterEps( double fEps )    { fIterEps = fEps; }
 
@@ -113,8 +107,6 @@ inline const ScDocOptions& ScDocOptions::operator=( const ScDocOptions& rCpy )
     bIsIgnoreCase       = rCpy.bIsIgnoreCase;
     bIsIter             = rCpy.bIsIter;
     nIterCount          = rCpy.nIterCount;
-    nInitTabCount       = rCpy.nInitTabCount;
-    aInitTabPrefix      = rCpy.aInitTabPrefix;
     fIterEps            = rCpy.fIterEps;
     nPrecStandardFormat = rCpy.nPrecStandardFormat;
     nDay                = rCpy.nDay;
@@ -137,8 +129,6 @@ inline bool ScDocOptions::operator==( const ScDocOptions& rOpt ) const
                 rOpt.bIsIgnoreCase          == bIsIgnoreCase
             &&  rOpt.bIsIter                == bIsIter
             &&  rOpt.nIterCount             == nIterCount
-            &&  rOpt.nInitTabCount          == nInitTabCount
-            &&  rOpt.aInitTabPrefix         == aInitTabPrefix
             &&  rOpt.fIterEps               == fIterEps
             &&  rOpt.nPrecStandardFormat    == nPrecStandardFormat
             &&  rOpt.nDay                   == nDay
@@ -190,15 +180,12 @@ class ScDocCfg : public ScDocOptions
 {
     ScLinkConfigItem    aCalcItem;
     ScLinkConfigItem    aLayoutItem;
-    ScLinkConfigItem    aDefaultsItem;
 
     DECL_LINK( CalcCommitHdl, void* );
     DECL_LINK( LayoutCommitHdl, void* );
-    DECL_LINK( DefaultsCommitHdl, void* );
 
     com::sun::star::uno::Sequence<rtl::OUString> GetCalcPropertyNames();
     com::sun::star::uno::Sequence<rtl::OUString> GetLayoutPropertyNames();
-    com::sun::star::uno::Sequence<rtl::OUString> GetDefaultsPropertyNames();
 
 public:
             ScDocCfg();
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 6b7d568..f8b1875 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -118,6 +118,7 @@
 
 // Format options
 #define SID_SCFORMULAOPTIONS    (SC_VIEW_START + 20)
+#define SID_SCDEFAULTSOPTIONS   (SC_VIEW_START + 21)
 
 // slot-IDs for attributes
 
diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx
index 22171c8..4c36f30 100644
--- a/sc/inc/scmod.hxx
+++ b/sc/inc/scmod.hxx
@@ -60,12 +60,14 @@ class ScDocument;
 class ScViewCfg;
 class ScDocCfg;
 class ScAppCfg;
+class ScDefaultsCfg;
 class ScFormulaCfg;
 class ScInputCfg;
 class ScPrintCfg;
 class ScViewOptions;
 class ScDocOptions;
 class ScAppOptions;
+class ScDefaultsOptions;
 class ScFormulaOptions;
 class ScInputOptions;
 class ScPrintOptions;
@@ -106,6 +108,7 @@ class ScModule: public SfxModule, public SfxListener, utl::ConfigurationListener
     ScViewCfg*          pViewCfg;
     ScDocCfg*           pDocCfg;
     ScAppCfg*           pAppCfg;
+    ScDefaultsCfg*      pDefaultsCfg;
     ScFormulaCfg*       pFormulaCfg;
     ScInputCfg*         pInputCfg;
     ScPrintCfg*         pPrintCfg;
@@ -179,12 +182,14 @@ public:
     const ScViewOptions&    GetViewOptions  ();
 SC_DLLPUBLIC    const ScDocOptions&     GetDocOptions   ();
 SC_DLLPUBLIC    const ScAppOptions&     GetAppOptions   ();
+    const ScDefaultsOptions&   GetDefaultsOptions ();
     const ScFormulaOptions&   GetFormulaOptions ();
     const ScInputOptions&   GetInputOptions ();
 SC_DLLPUBLIC    const ScPrintOptions&   GetPrintOptions ();
     void                    SetViewOptions  ( const ScViewOptions& rOpt );
 SC_DLLPUBLIC    void                    SetDocOptions   ( const ScDocOptions& rOpt );
 SC_DLLPUBLIC    void                    SetAppOptions   ( const ScAppOptions& rOpt );
+    void                    SetDefaultsOptions ( const ScDefaultsOptions& rOpt );
     void                    SetFormulaOptions ( const ScFormulaOptions& rOpt );
     void                    SetInputOptions ( const ScInputOptions& rOpt );
     void                    SetPrintOptions ( const ScPrintOptions& rOpt );
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index ef2a8c4..f5c1412 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -95,7 +95,7 @@
 #include "tabprotection.hxx"
 #include "clipparam.hxx"
 #include "stlalgorithm.hxx"
-#include "docoptio.hxx"
+#include "defaultsopt.hxx"
 
 #include <map>
 #include <limits>
@@ -144,8 +144,8 @@ void ScDocument::MakeTable( SCTAB nTab,bool _bNeedsNameCheck )
     if ( ValidTab(nTab) && ( nTab >= static_cast<SCTAB>(maTabs.size()) ||!maTabs[nTab]) )
     {
         // Get Custom prefix
-        const ScDocOptions& rDocOpt = SC_MOD()->GetDocOptions();
-        rtl::OUString aString = rDocOpt.GetInitTabPrefix();
+        const ScDefaultsOptions& rOpt = SC_MOD()->GetDefaultsOptions();
+        rtl::OUString aString = rOpt.GetInitTabPrefix();
 
         aString += rtl::OUString::valueOf(static_cast<sal_Int32>(nTab+1));
         if ( _bNeedsNameCheck )
@@ -313,8 +313,8 @@ void ScDocument::CreateValidTabName(rtl::OUString& rName) const
         // Find new one
 
         // Get Custom prefix
-        const ScDocOptions& rDocOpt = SC_MOD()->GetDocOptions();
-        rtl::OUString aStrTable = rDocOpt.GetInitTabPrefix();
+        const ScDefaultsOptions& rOpt = SC_MOD()->GetDefaultsOptions();
+        rtl::OUString aStrTable = rOpt.GetInitTabPrefix();
 
         bool         bOk   = false;
 
@@ -361,8 +361,8 @@ void ScDocument::CreateValidTabNames(std::vector<rtl::OUString>& aNames, SCTAB n
     aNames.clear();//ensure that the vector is empty
 
     // Get Custom prefix
-    const ScDocOptions& rDocOpt = SC_MOD()->GetDocOptions();
-    rtl::OUString aStrTable = rDocOpt.GetInitTabPrefix();
+    const ScDefaultsOptions& rOpt = SC_MOD()->GetDefaultsOptions();
+    rtl::OUString aStrTable = rOpt.GetInitTabPrefix();
 
     rtl::OUStringBuffer rName;
     bool         bOk   = false;
diff --git a/sc/source/core/tool/defaultsopt.cxx b/sc/source/core/tool/defaultsopt.cxx
new file mode 100644
index 0000000..c32fc71
--- /dev/null
+++ b/sc/source/core/tool/defaultsopt.cxx
@@ -0,0 +1,209 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ *       Albert Thuswaldner <albert.thuswaldner@gmail.com>
+ * Portions created by the Initial Developer are Copyright (C) 2012 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+#include "defaultsopt.hxx"
+#include "miscuno.hxx"
+#include "global.hxx"
+#include "globstr.hrc"
+
+using namespace utl;
+using namespace com::sun::star::uno;
+using ::rtl::OUString;
+
+// -----------------------------------------------------------------------
+
+TYPEINIT1(ScTpDefaultsItem, SfxPoolItem);
+
+// -----------------------------------------------------------------------
+
+ScDefaultsOptions::ScDefaultsOptions()
+{
+    SetDefaults();
+}
+
+ScDefaultsOptions::ScDefaultsOptions( const ScDefaultsOptions& rCpy ) :
+    nInitTabCount( rCpy.nInitTabCount ),
+    aInitTabPrefix( rCpy.aInitTabPrefix )
+{
+}
+
+ScDefaultsOptions::~ScDefaultsOptions()
+{
+}
+
+void ScDefaultsOptions::SetDefaults()
+{
+    nInitTabCount  = 3;
+    aInitTabPrefix = ScGlobal::GetRscString(STR_TABLE_DEF); // Default Prefix "Sheet"
+}
+
+ScDefaultsOptions& ScDefaultsOptions::operator=( const ScDefaultsOptions& rCpy )
+{
+    nInitTabCount  = rCpy.nInitTabCount;
+    aInitTabPrefix = rCpy.aInitTabPrefix;
+
+    return *this;
+}
+
+bool ScDefaultsOptions::operator==( const ScDefaultsOptions& rOpt ) const
+{
+    return rOpt.nInitTabCount  == nInitTabCount
+        && rOpt.aInitTabPrefix == aInitTabPrefix;
+}
+
+bool ScDefaultsOptions::operator!=( const ScDefaultsOptions& rOpt ) const
+{
+    return !(operator==(rOpt));
+}
+
+// -----------------------------------------------------------------------
+
+
+ScTpDefaultsItem::ScTpDefaultsItem( sal_uInt16 nWhichP, const ScDefaultsOptions& rOpt ) :
+    SfxPoolItem ( nWhichP ),
+    theOptions  ( rOpt )
+{
+}
+
+ScTpDefaultsItem::ScTpDefaultsItem( const ScTpDefaultsItem& rItem ) :
+    SfxPoolItem ( rItem ),
+    theOptions  ( rItem.theOptions )
+{
+}
+
+ScTpDefaultsItem::~ScTpDefaultsItem()
+{
+}
+
+String ScTpDefaultsItem::GetValueText() const
+{
+    return String::CreateFromAscii( "ScTpDefaultsItem" );
+}
+
+int ScTpDefaultsItem::operator==( const SfxPoolItem& rItem ) const
+{
+    OSL_ENSURE( SfxPoolItem::operator==( rItem ), "unequal Which or Type" );
+
+    const ScTpDefaultsItem& rPItem = (const ScTpDefaultsItem&)rItem;
+    return ( theOptions == rPItem.theOptions );
+}
+
+SfxPoolItem* ScTpDefaultsItem::Clone( SfxItemPool * ) const
+{
+    return new ScTpDefaultsItem( *this );
+}
+
+// -----------------------------------------------------------------------
+
+#define CFGPATH_FORMULA          "Office.Calc/Defaults"
+
+#define SCDEFAULTSOPT_TAB_COUNT  0
+#define SCDEFAULTSOPT_TAB_PREFIX 1
+#define SCDEFAULTSOPT_COUNT      2
+
+Sequence<OUString> ScDefaultsCfg::GetPropertyNames()
+{
+    static const char* aPropNames[] =
+    {
+        "Sheet/SheetCount", // SCDEFAULTSOPT_TAB_COUNT
+        "Sheet/SheetPrefix" // SCDEFAULTSOPT_TAB_PREFIX
+    };
+    Sequence<OUString> aNames(SCDEFAULTSOPT_COUNT);
+    OUString* pNames = aNames.getArray();
+    for (int i = 0; i < SCDEFAULTSOPT_COUNT; ++i)
+        pNames[i] = OUString::createFromAscii(aPropNames[i]);
+
+    return aNames;
+}
+
+ScDefaultsCfg::ScDefaultsCfg() :
+    ConfigItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_FORMULA )) )
+{
+    sal_Int32 nIntVal = 0;
+    OUString aPrefix;
+
+    Sequence<OUString> aNames = GetPropertyNames();
+    Sequence<Any> aValues = GetProperties(aNames);
+    const Any* pValues = aValues.getConstArray();
+    OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
+    if(aValues.getLength() == aNames.getLength())
+    {
+        for(int nProp = 0; nProp < aNames.getLength(); nProp++)
+        {
+            OSL_ENSURE(pValues[nProp].hasValue(), "property value missing");
+            if(pValues[nProp].hasValue())
+            {
+                switch (nProp)
+                {
+                case SCDEFAULTSOPT_TAB_COUNT:
+                    if (pValues[nProp] >>= nIntVal)
+                        SetInitTabCount( static_cast<SCTAB>(nIntVal) );
+                    break;
+                case SCDEFAULTSOPT_TAB_PREFIX:
+                    if (pValues[nProp] >>= aPrefix)
+                        SetInitTabPrefix(aPrefix);
+                    break;
+                }
+            }
+        }
+    }
+}
+
+void ScDefaultsCfg::Commit()
+{
+    Sequence<OUString> aNames = GetPropertyNames();
+    Sequence<Any> aValues(aNames.getLength());
+    Any* pValues = aValues.getArray();
+
+    for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
+    {
+        switch(nProp)
+        {
+        case SCDEFAULTSOPT_TAB_COUNT:
+            pValues[nProp] <<= static_cast<sal_Int32>(GetInitTabCount());
+        break;
+        case SCDEFAULTSOPT_TAB_PREFIX:
+            pValues[nProp] <<= GetInitTabPrefix();
+        break;
+        }
+    }
+    PutProperties(aNames, aValues);
+}
+
+void ScDefaultsCfg::SetOptions( const ScDefaultsOptions& rNew )
+{
+    *(ScDefaultsOptions*)this = rNew;
+    SetModified();
+}
+
+void ScDefaultsCfg::Notify( const ::com::sun::star::uno::Sequence< OUString >& ) {}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/tool/docoptio.cxx b/sc/source/core/tool/docoptio.cxx
index e5d42b7..af4f648 100644
--- a/sc/source/core/tool/docoptio.cxx
+++ b/sc/source/core/tool/docoptio.cxx
@@ -84,8 +84,6 @@ ScDocOptions::ScDocOptions()
 ScDocOptions::ScDocOptions( const ScDocOptions& rCpy )
         :   fIterEps( rCpy.fIterEps ),
             nIterCount( rCpy.nIterCount ),
-            nInitTabCount( rCpy.nInitTabCount ),
-            aInitTabPrefix( rCpy.aInitTabPrefix ),
             nPrecStandardFormat( rCpy.nPrecStandardFormat ),
             nDay( rCpy.nDay ),
             nMonth( rCpy.nMonth ),
@@ -115,8 +113,6 @@ void ScDocOptions::ResetDocOptions()
     bIsIgnoreCase       = false;
     bIsIter             = false;
     nIterCount          = 100;
-    nInitTabCount       = 3;
-    aInitTabPrefix      = ScGlobal::GetRscString(STR_TABLE_DEF); // Default Prefix "Sheet"
     fIterEps            = 1.0E-3;
     nPrecStandardFormat = SvNumberFormatter::UNLIMITED_PRECISION;
     nDay                = 30;
@@ -207,12 +203,6 @@ SfxPoolItem* ScTpCalcItem::Clone( SfxItemPool * ) const
 #define SCDOCLAYOUTOPT_TABSTOP      0
 #define SCDOCLAYOUTOPT_COUNT        1
 
-#define CFGPATH_DEFAULTS    "Office.Calc/Defaults"
-#define SCDEFAULTSOPT_TAB_COUNT     0
-#define SCDEFAULTSOPT_TAB_PREFIX    1
-#define SCDEFAULTSOPT_COUNT         2
-
-
 Sequence<OUString> ScDocCfg::GetCalcPropertyNames()
 {
     static const char* aPropNames[] =
@@ -256,26 +246,9 @@ Sequence<OUString> ScDocCfg::GetLayoutPropertyNames()
     return aNames;
 }
 
-Sequence<OUString> ScDocCfg::GetDefaultsPropertyNames()
-{
-    static const char* aPropNames[] =
-    {
-        "Sheet/SheetCount",            // SCDEFAULTSOPT_TAB_COUNT
-        "Sheet/SheetPrefix"            // SCDEFAULTSOPT_TAB_PREFIX
-    };
-    Sequence<OUString> aNames(SCDEFAULTSOPT_COUNT);
-    OUString* pNames = aNames.getArray();
-    for (int i = 0; i < SCDEFAULTSOPT_COUNT; ++i)
-        pNames[i] = OUString::createFromAscii(aPropNames[i]);
-
-    return aNames;
-}
-
-
 ScDocCfg::ScDocCfg() :
     aCalcItem( OUString(RTL_CONSTASCII_USTRINGPARAM( CFGPATH_CALC )) ),
-    aLayoutItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_DOCLAYOUT))),
-    aDefaultsItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_DEFAULTS)))
+    aLayoutItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_DOCLAYOUT)))
 {
     sal_Int32 nIntVal = 0;
 
@@ -370,32 +343,6 @@ ScDocCfg::ScDocCfg() :
         }
     }
     aLayoutItem.SetCommitLink( LINK( this, ScDocCfg, LayoutCommitHdl ) );
-
-    aNames = GetDefaultsPropertyNames();
-    aValues = aDefaultsItem.GetProperties(aNames);
-    aDefaultsItem.EnableNotification(aNames);
-    pValues = aValues.getConstArray();
-    if (aValues.getLength() == aNames.getLength())
-    {
-        for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
-        {
-            switch (nProp)
-            {
-
-            case SCDEFAULTSOPT_TAB_COUNT:
-                nIntVal = 3; // 3 = 'Default'
-                if (pValues[nProp] >>= nIntVal)
-                    SetInitTabCount( static_cast<SCTAB>(nIntVal) );
-                break;
-            case SCDEFAULTSOPT_TAB_PREFIX:
-                OUString aPrefix;
-                if (pValues[nProp] >>= aPrefix)
-                    SetInitTabPrefix(aPrefix);
-                break;
-            }
-        }
-    }
-    aDefaultsItem.SetCommitLink( LINK(this, ScDocCfg, DefaultsCommitHdl) );
 }
 
 IMPL_LINK_NOARG(ScDocCfg, CalcCommitHdl)
@@ -477,35 +424,12 @@ IMPL_LINK_NOARG(ScDocCfg, LayoutCommitHdl)
     return 0;
 }
 
-IMPL_LINK_NOARG(ScDocCfg, DefaultsCommitHdl)
-{
-    Sequence<OUString> aNames = GetDefaultsPropertyNames();
-    Sequence<Any> aValues(aNames.getLength());
-    Any* pValues = aValues.getArray();
-
-    for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
-    {
-        switch(nProp)
-        {
-        case SCDEFAULTSOPT_TAB_COUNT:
-            pValues[nProp] <<= static_cast<sal_Int32>(GetInitTabCount());
-        break;
-        case SCDEFAULTSOPT_TAB_PREFIX:
-            pValues[nProp] <<= GetInitTabPrefix();
-        break;
-        }
-    }
-    aDefaultsItem.PutProperties(aNames, aValues);
-    return 0;
-}
-
 void ScDocCfg::SetOptions( const ScDocOptions& rNew )
 {
     *(ScDocOptions*)this = rNew;
 
     aCalcItem.SetModified();
     aLayoutItem.SetModified();
-    aDefaultsItem.SetModified();
 }
 
 
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index 4dec73a..3db7ca3 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -79,6 +79,7 @@
 #include "viewopti.hxx"
 #include "docoptio.hxx"
 #include "appoptio.hxx"
+#include "defaultsopt.hxx"
 #include "formulaopt.hxx"
 #include "inputopt.hxx"
 #include "printopt.hxx"
@@ -142,6 +143,7 @@ ScModule::ScModule( SfxObjectFactory* pFact ) :
     pViewCfg( NULL ),
     pDocCfg( NULL ),
     pAppCfg( NULL ),
+    pDefaultsCfg( NULL ),
     pFormulaCfg( NULL ),
     pInputCfg( NULL ),
     pPrintCfg( NULL ),
@@ -344,6 +346,7 @@ void ScModule::DeleteCfg()
     DELETEZ( pViewCfg ); // Speichern passiert vor Exit() automatisch
     DELETEZ( pDocCfg );
     DELETEZ( pAppCfg );
+    DELETEZ( pDefaultsCfg );
     DELETEZ( pFormulaCfg );
     DELETEZ( pInputCfg );
     DELETEZ( pPrintCfg );
@@ -852,6 +855,22 @@ const ScAppOptions& ScModule::GetAppOptions()
     return *pAppCfg;
 }
 
+void ScModule::SetDefaultsOptions( const ScDefaultsOptions& rOpt )
+{
+    if ( !pDefaultsCfg )
+        pDefaultsCfg = new ScDefaultsCfg;
+
+    pDefaultsCfg->SetOptions( rOpt );
+}
+
+const ScDefaultsOptions& ScModule::GetDefaultsOptions()
+{
+    if ( !pDefaultsCfg )
+        pDefaultsCfg = new ScDefaultsCfg;
+
+    return *pDefaultsCfg;
+}
+
 void ScModule::SetFormulaOptions( const ScFormulaOptions& rOpt )
 {
     if ( !pFormulaCfg )
@@ -1046,6 +1065,22 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
     }
 
     //============================================
+    // DefaultsOptions
+    //============================================
+
+    if (rOptSet.HasItem(SID_SCDEFAULTSOPTIONS, &pItem))
+    {
+        const ScDefaultsOptions& rOpt = ((const ScTpDefaultsItem*)pItem)->GetDefaultsOptions();
+        SetDefaultsOptions( rOpt );
+
+        // if ( pDocSh )
+        // {
+        //     pDocSh->SetFormulaOptions( rOpt );
+        //     pDocSh->SetDocumentModified();
+        // }
+    }
+
+    //============================================
     // FormulaOptions
     //============================================
 
@@ -1959,6 +1994,8 @@ SfxItemSet*  ScModule::CreateItemSet( sal_uInt16 nId )
                             SID_ATTR_DEFTABSTOP,    SID_ATTR_DEFTABSTOP,
                             // TP_COMPATIBILITY
                             SID_SC_OPT_KEY_BINDING_COMPAT, SID_SC_OPT_KEY_BINDING_COMPAT,
+                            // TP_DEFAULTS
+                            SID_SCDEFAULTSOPTIONS, SID_SCDEFAULTSOPTIONS,
                             // TP_FORMULA
                             SID_SCFORMULAOPTIONS, SID_SCFORMULAOPTIONS,
                             0 );
@@ -2031,6 +2068,9 @@ SfxItemSet*  ScModule::CreateItemSet( sal_uInt16 nId )
         pRet->Put( SfxUInt16Item( SID_SC_OPT_KEY_BINDING_COMPAT,
                                    rAppOpt.GetKeyBindingType() ) );
 
+        // TP_DEFAULTS
+        pRet->Put( ScTpDefaultsItem( SID_SCDEFAULTSOPTIONS, GetDefaultsOptions() ) );
+
         // TP_FORMULA
         pRet->Put( ScTpFormulaItem( SID_SCFORMULAOPTIONS, GetFormulaOptions() ) );
     }
diff --git a/sc/source/ui/inc/tpdefaults.hxx b/sc/source/ui/inc/tpdefaults.hxx
index ff71a25..8249cdf 100644
--- a/sc/source/ui/inc/tpdefaults.hxx
+++ b/sc/source/ui/inc/tpdefaults.hxx
@@ -33,23 +33,19 @@
 #include <vcl/fixed.hxx>
 #include <vcl/field.hxx>
 
-#include <boost/shared_ptr.hpp>
-
-class ScDocOptions;
-
 class ScTpDefaultsOptions : public SfxTabPage
 {
 public:
     using SfxTabPage::DeactivatePage;
 
-    static  SfxTabPage* Create (Window* pParent, const SfxItemSet& rCoreAttrs);
+    static  SfxTabPage* Create (Window* pParent, const SfxItemSet& rCoreSet);
 
-    virtual sal_Bool FillItemSet(SfxItemSet& rCoreAttrs);
-    virtual void Reset(const SfxItemSet& rCoreAttrs);
+    virtual sal_Bool FillItemSet(SfxItemSet& rCoreSet);
+    virtual void Reset(const SfxItemSet& rCoreSet);
     virtual int DeactivatePage(SfxItemSet* pSet = NULL);
 
 private:
-    explicit ScTpDefaultsOptions(Window* pParent, const SfxItemSet& rCoreAttrs);
+    explicit ScTpDefaultsOptions(Window* pParent, const SfxItemSet& rCoreSet);
     virtual ~ScTpDefaultsOptions();
 
     void CheckNumSheets();
@@ -69,9 +65,6 @@ private:
 
     // Stores old Sheet Prefix
     ::rtl::OUString maOldPrefixValue;
-
-    ::boost::shared_ptr<ScDocOptions> mpOldOptions;
-    ::boost::shared_ptr<ScDocOptions> mpNewOptions;
 };
 
 #endif
diff --git a/sc/source/ui/optdlg/tpdefaults.cxx b/sc/source/ui/optdlg/tpdefaults.cxx
index 73f046b..a237153 100644
--- a/sc/source/ui/optdlg/tpdefaults.cxx
+++ b/sc/source/ui/optdlg/tpdefaults.cxx
@@ -33,18 +33,16 @@
 #include "optdlg.hrc"
 #include "scresid.hxx"
 #include "scmod.hxx"
-#include "docoptio.hxx"
+#include "defaultsopt.hxx"
 #include "document.hxx"
-#include "global.hxx"
-#include "globstr.hrc"
 
 #define INIT_SHEETS_MIN 1
 #define INIT_SHEETS_MAX 1024
 
 using ::rtl::OUString;
 
-ScTpDefaultsOptions::ScTpDefaultsOptions(Window *pParent, const SfxItemSet &rCoreAttrs) :
-    SfxTabPage(pParent, ScResId(RID_SCPAGE_DEFAULTS), rCoreAttrs),
+ScTpDefaultsOptions::ScTpDefaultsOptions(Window *pParent, const SfxItemSet &rCoreSet) :
+    SfxTabPage(pParent, ScResId(RID_SCPAGE_DEFAULTS), rCoreSet),
     aFLInitSpreadSheet ( this, ScResId( FL_INIT_SPREADSHEET ) ),
     aFtNSheets         ( this, ScResId( FT_NSHEETS ) ),
     aEdNSheets         ( this, ScResId( ED_NSHEETS ) ),
@@ -53,11 +51,6 @@ ScTpDefaultsOptions::ScTpDefaultsOptions(Window *pParent, const SfxItemSet &rCor
 {
     FreeResource();
 
-    const ScTpCalcItem& rItem = static_cast<const ScTpCalcItem&>(
-        rCoreAttrs.Get(GetWhich(SID_SCDOCOPTIONS)));
-    mpOldOptions.reset(new ScDocOptions(rItem.GetDocOptions()));
-    mpNewOptions.reset(new ScDocOptions(rItem.GetDocOptions()));
-
     long nTxtW = aFtNSheets.GetCtrlTextWidth( aFtNSheets.GetText() );
     long nCtrlW = aFtNSheets.GetSizePixel().Width();
     if ( nTxtW >= nCtrlW )
@@ -83,27 +76,39 @@ SfxTabPage* ScTpDefaultsOptions::Create(Window *pParent, const SfxItemSet &rCore
     return new ScTpDefaultsOptions(pParent, rCoreAttrs);
 }
 
-sal_Bool ScTpDefaultsOptions::FillItemSet(SfxItemSet &rCoreAttrs)
+sal_Bool ScTpDefaultsOptions::FillItemSet(SfxItemSet &rCoreSet)
 {
+    sal_Bool bRet = false;
+    ScDefaultsOptions aOpt;
+
     SCTAB nTabCount = static_cast<SCTAB>(aEdNSheets.GetValue());
     OUString aSheetPrefix = aEdSheetPrefix.GetText();
 
-    mpNewOptions->SetInitTabCount( nTabCount );
-    mpNewOptions->SetInitTabPrefix( aSheetPrefix );
 
-    if (*mpNewOptions != *mpOldOptions)
+    if ( aEdNSheets.GetSavedValue() != aEdNSheets.GetText()
+         || static_cast<OUString>(aEdSheetPrefix.GetSavedValue()) != aSheetPrefix )
     {
-        rCoreAttrs.Put(ScTpCalcItem(GetWhich(SID_SCDOCOPTIONS), *mpNewOptions));
-        return sal_True;
+        aOpt.SetInitTabCount( nTabCount );
+        aOpt.SetInitTabPrefix( aSheetPrefix );
+
+        rCoreSet.Put( ScTpDefaultsItem( SID_SCDEFAULTSOPTIONS, aOpt ) );
+        bRet = true;
     }
-    else
-        return sal_False;
+    return bRet;
 }
 
-void ScTpDefaultsOptions::Reset(const SfxItemSet& /*rCoreAttrs*/)
+void ScTpDefaultsOptions::Reset(const SfxItemSet& rCoreSet )
 {
-    aEdNSheets.SetValue( static_cast<sal_uInt16>(mpOldOptions->GetInitTabCount()) );
-    aEdSheetPrefix.SetText( mpOldOptions->GetInitTabPrefix() );
+    ScDefaultsOptions aOpt;
+    const SfxPoolItem* pItem = NULL;
+
+    if(SFX_ITEM_SET == rCoreSet.GetItemState(SID_SCDEFAULTSOPTIONS, false , &pItem))
+        aOpt = ((const ScTpDefaultsItem*)pItem)->GetDefaultsOptions();
+
+    aEdNSheets.SetValue( static_cast<sal_uInt16>( aOpt.GetInitTabCount()) );
+    aEdSheetPrefix.SetText( aOpt.GetInitTabPrefix() );
+    aEdNSheets.SaveValue();
+    aEdSheetPrefix.SaveValue();
 }
 
 int ScTpDefaultsOptions::DeactivatePage(SfxItemSet* /*pSet*/)
diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx
index 9b6f1ce..5a5e603 100644
--- a/sc/source/ui/view/tabvwsh4.cxx
+++ b/sc/source/ui/view/tabvwsh4.cxx
@@ -91,7 +91,7 @@
 #include "navsett.hxx"
 #include "scabstdlg.hxx"
 #include "externalrefmgr.hxx"
-#include "docoptio.hxx"
+#include "defaultsopt.hxx"
 #include "markdata.hxx"
 #include "preview.hxx"
 
@@ -1608,8 +1608,8 @@ void ScTabViewShell::Construct( sal_uInt8 nForceDesignMode )
                 // Get the customized initial tab count...
 
                 // ... from option dialog.
-                const ScDocOptions& rDocOpt = SC_MOD()->GetDocOptions();
-                SCTAB nInitTabCount = rDocOpt.GetInitTabCount();
+                const ScDefaultsOptions& rOpt = SC_MOD()->GetDefaultsOptions();
+                SCTAB nInitTabCount = rOpt.GetInitTabCount();
 
                 // ... by VBA API.
                 const ScAppOptions& rAppOpt = SC_MOD()->GetAppOptions();
-- 
1.7.3.4


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.