[Libreoffice-commits] .: sc/inc sc/Library_sc.mk sc/source

Kohei Yoshida kohei at kemper.freedesktop.org
Fri Apr 13 08:59:59 PDT 2012


 sc/Library_sc.mk                        |    1 
 sc/inc/defaultsoptions.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/defaultsoptions.cxx |  209 ++++++++++++++++++++++++++++++++
 sc/source/core/tool/docoptio.cxx        |   78 -----------
 sc/source/ui/app/scmod.cxx              |   34 +++++
 sc/source/ui/inc/tpdefaults.hxx         |   15 --
 sc/source/ui/optdlg/tpdefaults.cxx      |   47 +++----
 sc/source/ui/view/tabvwsh4.cxx          |    6 
 12 files changed, 397 insertions(+), 134 deletions(-)

New commits:
commit be7cbf49c4fa586bd6ec96c2d278a317894f569c
Author: Albert Thuswaldner <albert.thuswaldner at gmail.com>
Date:   Thu Apr 12 21:20:58 2012 +0200

    Moved ScDefaultsOptions from ScDocOptions to separate class

diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk
index f640f05..ba6c340 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/defaultsoptions \
 	sc/source/core/tool/detdata  \
 	sc/source/core/tool/detfunc \
 	sc/source/core/tool/docoptio \
diff --git a/sc/inc/defaultsoptions.hxx b/sc/inc/defaultsoptions.hxx
new file mode 100644
index 0000000..a1e74f8
--- /dev/null
+++ b/sc/inc/defaultsoptions.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 at 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(const 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..52a8d7d 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 "defaultsoptions.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/defaultsoptions.cxx b/sc/source/core/tool/defaultsoptions.cxx
new file mode 100644
index 0000000..f582c10
--- /dev/null
+++ b/sc/source/core/tool/defaultsoptions.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 at 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 "defaultsoptions.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..c2eb404 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 "defaultsoptions.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,16 @@ void ScModule::ModifyOptions( const SfxItemSet& rOptSet )
     }
 
     //============================================
+    // DefaultsOptions
+    //============================================
+
+    if (rOptSet.HasItem(SID_SCDEFAULTSOPTIONS, &pItem))
+    {
+        const ScDefaultsOptions& rOpt = ((const ScTpDefaultsItem*)pItem)->GetDefaultsOptions();
+        SetDefaultsOptions( rOpt );
+    }
+
+    //============================================
     // FormulaOptions
     //============================================
 
@@ -1959,6 +1988,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 +2062,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..bc5b988 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 "defaultsoptions.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..4cf2624 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 "defaultsoptions.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();


More information about the Libreoffice-commits mailing list