diff options
author | Albert Thuswaldner <albert.thuswaldner@gmail.com> | 2011-06-13 15:54:06 -0400 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2011-06-13 16:08:16 -0400 |
commit | 50b5d6076d9dc40eb0c484843481b2bf804d71e4 (patch) | |
tree | 123a56ca8001ed23ff284c337874ae55a85f80de /sc/source | |
parent | 2206f826c017acedbf813f5ee368ff227cb91cf9 (diff) |
fdo#33293: Option to configure initial number of sheets in Calc.
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/tool/appoptio.cxx | 2 | ||||
-rw-r--r-- | sc/source/core/tool/docoptio.cxx | 66 | ||||
-rw-r--r-- | sc/source/ui/app/scmod.cxx | 10 | ||||
-rw-r--r-- | sc/source/ui/attrdlg/scdlgfact.cxx | 3 | ||||
-rw-r--r-- | sc/source/ui/inc/optdlg.hrc | 5 | ||||
-rw-r--r-- | sc/source/ui/inc/tpdefaults.hxx | 65 | ||||
-rw-r--r-- | sc/source/ui/optdlg/tpdefaults.cxx | 87 | ||||
-rw-r--r-- | sc/source/ui/src/optdlg.src | 32 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh4.cxx | 12 |
9 files changed, 275 insertions, 7 deletions
diff --git a/sc/source/core/tool/appoptio.cxx b/sc/source/core/tool/appoptio.cxx index 470882a14340..28a5639dc7da 100644 --- a/sc/source/core/tool/appoptio.cxx +++ b/sc/source/core/tool/appoptio.cxx @@ -85,7 +85,7 @@ ScAppOptions::~ScAppOptions() void ScAppOptions::SetDefaults() { // Set default tab count for new spreadsheet. - nTabCountInNewSpreadsheet = 3; + nTabCountInNewSpreadsheet = 0; if ( ScOptionsUtil::IsMetricSystem() ) eMetric = FUNIT_CM; // default for countries with metric system diff --git a/sc/source/core/tool/docoptio.cxx b/sc/source/core/tool/docoptio.cxx index 79347bfa42f3..c26186f2348e 100644 --- a/sc/source/core/tool/docoptio.cxx +++ b/sc/source/core/tool/docoptio.cxx @@ -91,6 +91,7 @@ ScDocOptions::ScDocOptions() ScDocOptions::ScDocOptions( const ScDocOptions& rCpy ) : fIterEps( rCpy.fIterEps ), nIterCount( rCpy.nIterCount ), + nInitTabCount( rCpy.nInitTabCount ), nPrecStandardFormat( rCpy.nPrecStandardFormat ), eKeyBindingType( rCpy.eKeyBindingType ), nDay( rCpy.nDay ), @@ -126,6 +127,7 @@ void ScDocOptions::ResetDocOptions() bIsIgnoreCase = false; bIsIter = false; nIterCount = 100; + nInitTabCount = 3; fIterEps = 1.0E-3; nPrecStandardFormat = SvNumberFormatter::UNLIMITED_PRECISION; eKeyBindingType = ScOptionsUtil::KEY_DEFAULT; @@ -290,6 +292,11 @@ SfxPoolItem* ScTpCalcItem::Clone( SfxItemPool * ) const #define SCCOMPATOPT_KEY_BINDING 0 #define SCCOMPATOPT_COUNT 1 +#define CFGPATH_DEFAULTS "Office.Calc/Defaults" +#define SCDEFAULTSOPT_TAB_COUNT 0 +#define SCDEFAULTSOPT_COUNT 1 + + Sequence<OUString> ScDocCfg::GetCalcPropertyNames() { static const char* aPropNames[] = @@ -365,11 +372,27 @@ Sequence<OUString> ScDocCfg::GetCompatPropertyNames() return aNames; } +Sequence<OUString> ScDocCfg::GetDefaultsPropertyNames() +{ + static const char* aPropNames[] = + { + "Other/TabCount" // SCDEFAULTSOPT_COUNT_TAB_COUNT + }; + 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 )) ), aFormulaItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_FORMULA))), aLayoutItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_DOCLAYOUT))), - aCompatItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_COMPAT))) + aCompatItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_COMPAT))), + aDefaultsItem(OUString(RTL_CONSTASCII_USTRINGPARAM(CFGPATH_DEFAULTS))) { sal_Int32 nIntVal = 0; @@ -559,6 +582,27 @@ ScDocCfg::ScDocCfg() : } } aCompatItem.SetCommitLink( LINK(this, ScDocCfg, CompatCommitHdl) ); + + 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; + } + } + } + aDefaultsItem.SetCommitLink( LINK(this, ScDocCfg, DefaultsCommitHdl) ); } IMPL_LINK( ScDocCfg, CalcCommitHdl, void *, EMPTYARG ) @@ -703,6 +747,25 @@ IMPL_LINK( ScDocCfg, CompatCommitHdl, void *, EMPTYARG ) return 0; } +IMPL_LINK( ScDocCfg, DefaultsCommitHdl, void *, EMPTYARG ) +{ + 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; + } + } + aDefaultsItem.PutProperties(aNames, aValues); + return 0; +} + void ScDocCfg::SetOptions( const ScDocOptions& rNew ) { *(ScDocOptions*)this = rNew; @@ -711,6 +774,7 @@ void ScDocCfg::SetOptions( const ScDocOptions& rNew ) aFormulaItem.SetModified(); aLayoutItem.SetModified(); aCompatItem.SetModified(); + aDefaultsItem.SetModified(); } diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx index 764b8d91f801..30ff5287c6c4 100644 --- a/sc/source/ui/app/scmod.cxx +++ b/sc/source/ui/app/scmod.cxx @@ -100,13 +100,13 @@ #include "dwfunctr.hxx" #include "formdata.hxx" #include "tpprint.hxx" +#include "tpdefaults.hxx" #include "transobj.hxx" #include "detfunc.hxx" #include "preview.hxx" #include <svx/xmlsecctrl.hxx> - #define ScModule #include "scslots.hxx" @@ -2047,6 +2047,14 @@ SfxTabPage* ScModule::CreateTabPage( sal_uInt16 nId, Window* pParent, const Sfx pRet = (*ScTpPrintOptionsCreate)( pParent, rSet); } break; + case RID_SC_TP_DEFAULTS: + { + ::CreateTabPage ScTpDefaultsOptionsCreate = pFact->GetTabPageCreatorFunc( RID_SCPAGE_DEFAULTS ); + if ( ScTpDefaultsOptionsCreate ) + pRet = (*ScTpDefaultsOptionsCreate)( pParent, rSet); + } + break; + case RID_OFA_TP_INTERNATIONAL: { SfxAbstractDialogFactory* pSfxFact = SfxAbstractDialogFactory::Create(); diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx index 2845212dbecc..10e1013cf1bf 100644 --- a/sc/source/ui/attrdlg/scdlgfact.cxx +++ b/sc/source/ui/attrdlg/scdlgfact.cxx @@ -83,6 +83,7 @@ #include "tpformula.hxx" #include "datafdlg.hxx" #include "tpcompatibility.hxx" +#include "tpdefaults.hxx" // ause #include "editutil.hxx" @@ -1608,6 +1609,8 @@ CreateTabPage ScAbstractDialogFactory_Impl::GetTabPageCreatorFunc( sal_uInt16 nI return ScTpFormulaOptions::Create; case RID_SCPAGE_COMPATIBILITY: return ScTpCompatOptions::Create; + case RID_SCPAGE_DEFAULTS: + return ScTpDefaultsOptions::Create; case RID_SCPAGE_PRINT : return ScTpPrintOptions::Create; //break; diff --git a/sc/source/ui/inc/optdlg.hrc b/sc/source/ui/inc/optdlg.hrc index 9ac8213cf621..b10452945220 100644 --- a/sc/source/ui/inc/optdlg.hrc +++ b/sc/source/ui/inc/optdlg.hrc @@ -194,3 +194,8 @@ #define FL_KEY_BINDINGS 1 #define FT_KEY_BINDINGS 2 #define LB_KEY_BINDINGS 3 + +// TP_DEFAULTS +#define FL_INIT_SPREADSHEET 1 +#define FT_NSHEETS 2 +#define ED_NSHEETS 3 diff --git a/sc/source/ui/inc/tpdefaults.hxx b/sc/source/ui/inc/tpdefaults.hxx new file mode 100644 index 000000000000..622a3105f5df --- /dev/null +++ b/sc/source/ui/inc/tpdefaults.hxx @@ -0,0 +1,65 @@ +/* -*- 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) 2011 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_TPDEFAULTS_HXX__ +#define __SC_TPDEFAULTS_HXX__ + +#include <sfx2/tabdlg.hxx> +#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); + + virtual sal_Bool FillItemSet(SfxItemSet& rCoreAttrs); + virtual void Reset(const SfxItemSet& rCoreAttrs); + virtual int DeactivatePage(SfxItemSet* pSet = NULL); + +private: + explicit ScTpDefaultsOptions(Window* pParent, const SfxItemSet& rCoreAttrs); + virtual ~ScTpDefaultsOptions(); + +private: + FixedLine aFLInitSpreadSheet; + FixedText aFtNSheets; + NumericField aEdNSheets; + + ::boost::shared_ptr<ScDocOptions> mpLocalOptions; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/optdlg/tpdefaults.cxx b/sc/source/ui/optdlg/tpdefaults.cxx new file mode 100644 index 000000000000..0e0f6acf7516 --- /dev/null +++ b/sc/source/ui/optdlg/tpdefaults.cxx @@ -0,0 +1,87 @@ +/* -*- 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) 2011 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. + */ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sc.hxx" + +#undef SC_DLLIMPLEMENTATION + +#include "tpdefaults.hxx" +#include "optdlg.hrc" +#include "scresid.hxx" +#include "scmod.hxx" +#include "docoptio.hxx" + +ScTpDefaultsOptions::ScTpDefaultsOptions(Window *pParent, const SfxItemSet &rCoreAttrs) : + SfxTabPage(pParent, ScResId(RID_SCPAGE_DEFAULTS), rCoreAttrs), + aFLInitSpreadSheet ( this, ScResId( FL_INIT_SPREADSHEET ) ), + aFtNSheets ( this, ScResId( FT_NSHEETS ) ), + aEdNSheets ( this, ScResId( ED_NSHEETS ) ) +{ + FreeResource(); + + const ScTpCalcItem& rItem = static_cast<const ScTpCalcItem&>( + rCoreAttrs.Get(GetWhich(SID_SCDOCOPTIONS))); + mpLocalOptions.reset(new ScDocOptions(rItem.GetDocOptions())); +} + +ScTpDefaultsOptions::~ScTpDefaultsOptions() +{ +} + +SfxTabPage* ScTpDefaultsOptions::Create(Window *pParent, const SfxItemSet &rCoreAttrs) +{ + return new ScTpDefaultsOptions(pParent, rCoreAttrs); +} + +sal_Bool ScTpDefaultsOptions::FillItemSet(SfxItemSet &rCoreAttrs) +{ + SCTAB nTabCount = static_cast<SCTAB>(aEdNSheets.GetValue()); + + if ( mpLocalOptions->GetInitTabCount() != nTabCount) + { + mpLocalOptions->SetInitTabCount( nTabCount ); + + rCoreAttrs.Put(ScTpCalcItem(GetWhich(SID_SCDOCOPTIONS), *mpLocalOptions)); + return sal_True; + } + else + return sal_False; +} + +void ScTpDefaultsOptions::Reset(const SfxItemSet &/*rCoreAttrs*/) +{ + aEdNSheets.SetValue( static_cast<sal_uInt16>(mpLocalOptions->GetInitTabCount()) ); +} + +int ScTpDefaultsOptions::DeactivatePage(SfxItemSet* /*pSet*/) +{ + return KEEP_PAGE; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/src/optdlg.src b/sc/source/ui/src/optdlg.src index 9adb7001ed7e..a6ea3b42ac7b 100644 --- a/sc/source/ui/src/optdlg.src +++ b/sc/source/ui/src/optdlg.src @@ -908,3 +908,35 @@ TabPage RID_SCPAGE_PRINT Text [ en-US ] = "~Print only selected sheets"; }; }; + +TabPage RID_SCPAGE_DEFAULTS +{ + HelpId = HID_SCPAGE_DEFAULTS ; + SVLook = TRUE ; + Hide = TRUE ; + Pos = MAP_APPFONT ( 0 , 0 ) ; + Size = MAP_APPFONT ( 260 , 185 ) ; + FixedLine FL_INIT_SPREADSHEET + { + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 248 , 8 ) ; + Text [ en-US ] = "New Spreadsheet"; + }; + FixedText FT_NSHEETS + { + Pos = MAP_APPFONT ( 12 , 32 ) ; + Size = MAP_APPFONT ( 120 , 8 ) ; + Text [ en-US ] = "Number of worksheets in new document"; + }; + NumericField ED_NSHEETS + { + HelpID = "sc:NumericField:RID_SCPAGE_CALC:ED_NSHEETS"; + Border = TRUE ; + Pos = MAP_APPFONT ( 130 , 30 ) ; + Size = MAP_APPFONT ( 25 , 12 ) ; + Minimum = 1 ; + Maximum = 32000 ; + Spin = TRUE ; + Repeat = TRUE ; + }; +}; diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index 6d512e38d3df..f26874465932 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -29,8 +29,6 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" - - // INCLUDE --------------------------------------------------------------- #include "scitems.hxx" @@ -97,6 +95,7 @@ #include "sc.hrc" #include "scabstdlg.hxx" #include "externalrefmgr.hxx" +#include "docoptio.hxx" void ActivateOlk( ScViewData* pViewData ); void DeActivateOlk( ScViewData* pViewData ); @@ -1596,8 +1595,13 @@ void ScTabViewShell::Construct( sal_uInt8 nForceDesignMode ) // append additional sheets (not for OLE object) if ( pDocSh->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED ) { - SCTAB nInitTabCount = 3; //! konfigurierbar !!! - // Get the customized initial tab count, we only can set the count by VBA API currently. + // Get the customized initial tab count... + + // ... from option dialog. + const ScDocOptions& rDocOpt = SC_MOD()->GetDocOptions(); + SCTAB nInitTabCount = rDocOpt.GetInitTabCount(); + + // ... by VBA API. const ScAppOptions& rAppOpt = SC_MOD()->GetAppOptions(); SCTAB nNewTabCount = rAppOpt.GetTabCountInNewSpreadsheet(); if ( nNewTabCount >= 1 && nNewTabCount <= MAXTAB ) |