Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include <com/sun/star/uno/Any.hxx>
11 : #include <com/sun/star/uno/Sequence.hxx>
12 : #include <osl/diagnose.h>
13 :
14 : #include "defaultsoptions.hxx"
15 : #include "miscuno.hxx"
16 : #include "global.hxx"
17 : #include "globstr.hrc"
18 :
19 : using namespace utl;
20 : using namespace com::sun::star::uno;
21 :
22 0 : TYPEINIT1(ScTpDefaultsItem, SfxPoolItem);
23 :
24 49 : ScDefaultsOptions::ScDefaultsOptions()
25 : {
26 49 : SetDefaults();
27 49 : }
28 :
29 0 : ScDefaultsOptions::ScDefaultsOptions( const ScDefaultsOptions& rCpy ) :
30 : nInitTabCount( rCpy.nInitTabCount ),
31 0 : aInitTabPrefix( rCpy.aInitTabPrefix )
32 : {
33 0 : }
34 :
35 16 : ScDefaultsOptions::~ScDefaultsOptions()
36 : {
37 16 : }
38 :
39 49 : void ScDefaultsOptions::SetDefaults()
40 : {
41 49 : nInitTabCount = 1;
42 49 : aInitTabPrefix = ScGlobal::GetRscString(STR_TABLE_DEF); // Default Prefix "Sheet"
43 49 : }
44 :
45 0 : ScDefaultsOptions& ScDefaultsOptions::operator=( const ScDefaultsOptions& rCpy )
46 : {
47 0 : nInitTabCount = rCpy.nInitTabCount;
48 0 : aInitTabPrefix = rCpy.aInitTabPrefix;
49 :
50 0 : return *this;
51 : }
52 :
53 0 : bool ScDefaultsOptions::operator==( const ScDefaultsOptions& rOpt ) const
54 : {
55 0 : return rOpt.nInitTabCount == nInitTabCount
56 0 : && rOpt.aInitTabPrefix == aInitTabPrefix;
57 : }
58 :
59 0 : bool ScDefaultsOptions::operator!=( const ScDefaultsOptions& rOpt ) const
60 : {
61 0 : return !(operator==(rOpt));
62 : }
63 :
64 0 : ScTpDefaultsItem::ScTpDefaultsItem( sal_uInt16 nWhichP, const ScDefaultsOptions& rOpt ) :
65 : SfxPoolItem ( nWhichP ),
66 0 : theOptions ( rOpt )
67 : {
68 0 : }
69 :
70 0 : ScTpDefaultsItem::ScTpDefaultsItem( const ScTpDefaultsItem& rItem ) :
71 : SfxPoolItem ( rItem ),
72 0 : theOptions ( rItem.theOptions )
73 : {
74 0 : }
75 :
76 0 : ScTpDefaultsItem::~ScTpDefaultsItem()
77 : {
78 0 : }
79 :
80 0 : bool ScTpDefaultsItem::operator==( const SfxPoolItem& rItem ) const
81 : {
82 : assert(SfxPoolItem::operator==(rItem));
83 :
84 0 : const ScTpDefaultsItem& rPItem = static_cast<const ScTpDefaultsItem&>(rItem);
85 0 : return ( theOptions == rPItem.theOptions );
86 : }
87 :
88 0 : SfxPoolItem* ScTpDefaultsItem::Clone( SfxItemPool * ) const
89 : {
90 0 : return new ScTpDefaultsItem( *this );
91 : }
92 :
93 : #define CFGPATH_FORMULA "Office.Calc/Defaults"
94 :
95 : #define SCDEFAULTSOPT_TAB_COUNT 0
96 : #define SCDEFAULTSOPT_TAB_PREFIX 1
97 : #define SCDEFAULTSOPT_COUNT 2
98 :
99 49 : Sequence<OUString> ScDefaultsCfg::GetPropertyNames()
100 : {
101 : static const char* aPropNames[] =
102 : {
103 : "Sheet/SheetCount", // SCDEFAULTSOPT_TAB_COUNT
104 : "Sheet/SheetPrefix" // SCDEFAULTSOPT_TAB_PREFIX
105 : };
106 49 : Sequence<OUString> aNames(SCDEFAULTSOPT_COUNT);
107 49 : OUString* pNames = aNames.getArray();
108 147 : for (int i = 0; i < SCDEFAULTSOPT_COUNT; ++i)
109 98 : pNames[i] = OUString::createFromAscii(aPropNames[i]);
110 :
111 49 : return aNames;
112 : }
113 :
114 49 : ScDefaultsCfg::ScDefaultsCfg() :
115 49 : ConfigItem( OUString( CFGPATH_FORMULA ) )
116 : {
117 49 : OUString aPrefix;
118 :
119 98 : Sequence<OUString> aNames = GetPropertyNames();
120 98 : Sequence<Any> aValues = GetProperties(aNames);
121 49 : const Any* pValues = aValues.getConstArray();
122 : OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
123 49 : if(aValues.getLength() == aNames.getLength())
124 : {
125 49 : sal_Int32 nIntVal = 0;
126 147 : for(int nProp = 0; nProp < aNames.getLength(); nProp++)
127 : {
128 98 : if(pValues[nProp].hasValue())
129 : {
130 49 : switch (nProp)
131 : {
132 : case SCDEFAULTSOPT_TAB_COUNT:
133 49 : if (pValues[nProp] >>= nIntVal)
134 49 : SetInitTabCount( static_cast<SCTAB>(nIntVal) );
135 49 : break;
136 : case SCDEFAULTSOPT_TAB_PREFIX:
137 0 : if (pValues[nProp] >>= aPrefix)
138 0 : SetInitTabPrefix(aPrefix);
139 0 : break;
140 : }
141 : }
142 : }
143 49 : }
144 49 : }
145 :
146 0 : void ScDefaultsCfg::ImplCommit()
147 : {
148 0 : Sequence<OUString> aNames = GetPropertyNames();
149 0 : Sequence<Any> aValues(aNames.getLength());
150 0 : Any* pValues = aValues.getArray();
151 :
152 0 : for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
153 : {
154 0 : switch(nProp)
155 : {
156 : case SCDEFAULTSOPT_TAB_COUNT:
157 0 : pValues[nProp] <<= static_cast<sal_Int32>(GetInitTabCount());
158 0 : break;
159 : case SCDEFAULTSOPT_TAB_PREFIX:
160 0 : pValues[nProp] <<= GetInitTabPrefix();
161 0 : break;
162 : }
163 : }
164 0 : PutProperties(aNames, aValues);
165 0 : }
166 :
167 0 : void ScDefaultsCfg::SetOptions( const ScDefaultsOptions& rNew )
168 : {
169 0 : *static_cast<ScDefaultsOptions*>(this) = rNew;
170 0 : SetModified();
171 0 : }
172 :
173 156 : void ScDefaultsCfg::Notify( const ::com::sun::star::uno::Sequence< OUString >& ) {}
174 :
175 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|