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 :
13 : #include "defaultsoptions.hxx"
14 : #include "miscuno.hxx"
15 : #include "global.hxx"
16 : #include "globstr.hrc"
17 :
18 : using namespace utl;
19 : using namespace com::sun::star::uno;
20 :
21 0 : TYPEINIT1(ScTpDefaultsItem, SfxPoolItem);
22 :
23 0 : ScDefaultsOptions::ScDefaultsOptions()
24 : {
25 0 : SetDefaults();
26 0 : }
27 :
28 0 : ScDefaultsOptions::ScDefaultsOptions( const ScDefaultsOptions& rCpy ) :
29 : nInitTabCount( rCpy.nInitTabCount ),
30 0 : aInitTabPrefix( rCpy.aInitTabPrefix )
31 : {
32 0 : }
33 :
34 0 : ScDefaultsOptions::~ScDefaultsOptions()
35 : {
36 0 : }
37 :
38 0 : void ScDefaultsOptions::SetDefaults()
39 : {
40 0 : nInitTabCount = 1;
41 0 : aInitTabPrefix = ScGlobal::GetRscString(STR_TABLE_DEF); // Default Prefix "Sheet"
42 0 : }
43 :
44 0 : ScDefaultsOptions& ScDefaultsOptions::operator=( const ScDefaultsOptions& rCpy )
45 : {
46 0 : nInitTabCount = rCpy.nInitTabCount;
47 0 : aInitTabPrefix = rCpy.aInitTabPrefix;
48 :
49 0 : return *this;
50 : }
51 :
52 0 : bool ScDefaultsOptions::operator==( const ScDefaultsOptions& rOpt ) const
53 : {
54 0 : return rOpt.nInitTabCount == nInitTabCount
55 0 : && rOpt.aInitTabPrefix == aInitTabPrefix;
56 : }
57 :
58 0 : bool ScDefaultsOptions::operator!=( const ScDefaultsOptions& rOpt ) const
59 : {
60 0 : return !(operator==(rOpt));
61 : }
62 :
63 0 : ScTpDefaultsItem::ScTpDefaultsItem( sal_uInt16 nWhichP, const ScDefaultsOptions& rOpt ) :
64 : SfxPoolItem ( nWhichP ),
65 0 : theOptions ( rOpt )
66 : {
67 0 : }
68 :
69 0 : ScTpDefaultsItem::ScTpDefaultsItem( const ScTpDefaultsItem& rItem ) :
70 : SfxPoolItem ( rItem ),
71 0 : theOptions ( rItem.theOptions )
72 : {
73 0 : }
74 :
75 0 : ScTpDefaultsItem::~ScTpDefaultsItem()
76 : {
77 0 : }
78 :
79 0 : OUString ScTpDefaultsItem::GetValueText() const
80 : {
81 0 : return OUString("ScTpDefaultsItem");
82 : }
83 :
84 0 : bool ScTpDefaultsItem::operator==( const SfxPoolItem& rItem ) const
85 : {
86 : OSL_ENSURE( SfxPoolItem::operator==( rItem ), "unequal Which or Type" );
87 :
88 0 : const ScTpDefaultsItem& rPItem = (const ScTpDefaultsItem&)rItem;
89 0 : return ( theOptions == rPItem.theOptions );
90 : }
91 :
92 0 : SfxPoolItem* ScTpDefaultsItem::Clone( SfxItemPool * ) const
93 : {
94 0 : return new ScTpDefaultsItem( *this );
95 : }
96 :
97 : #define CFGPATH_FORMULA "Office.Calc/Defaults"
98 :
99 : #define SCDEFAULTSOPT_TAB_COUNT 0
100 : #define SCDEFAULTSOPT_TAB_PREFIX 1
101 : #define SCDEFAULTSOPT_COUNT 2
102 :
103 0 : Sequence<OUString> ScDefaultsCfg::GetPropertyNames()
104 : {
105 : static const char* aPropNames[] =
106 : {
107 : "Sheet/SheetCount", // SCDEFAULTSOPT_TAB_COUNT
108 : "Sheet/SheetPrefix" // SCDEFAULTSOPT_TAB_PREFIX
109 : };
110 0 : Sequence<OUString> aNames(SCDEFAULTSOPT_COUNT);
111 0 : OUString* pNames = aNames.getArray();
112 0 : for (int i = 0; i < SCDEFAULTSOPT_COUNT; ++i)
113 0 : pNames[i] = OUString::createFromAscii(aPropNames[i]);
114 :
115 0 : return aNames;
116 : }
117 :
118 0 : ScDefaultsCfg::ScDefaultsCfg() :
119 0 : ConfigItem( OUString( CFGPATH_FORMULA ) )
120 : {
121 0 : OUString aPrefix;
122 :
123 0 : Sequence<OUString> aNames = GetPropertyNames();
124 0 : Sequence<Any> aValues = GetProperties(aNames);
125 0 : const Any* pValues = aValues.getConstArray();
126 : OSL_ENSURE(aValues.getLength() == aNames.getLength(), "GetProperties failed");
127 0 : if(aValues.getLength() == aNames.getLength())
128 : {
129 0 : sal_Int32 nIntVal = 0;
130 0 : for(int nProp = 0; nProp < aNames.getLength(); nProp++)
131 : {
132 0 : if(pValues[nProp].hasValue())
133 : {
134 0 : switch (nProp)
135 : {
136 : case SCDEFAULTSOPT_TAB_COUNT:
137 0 : if (pValues[nProp] >>= nIntVal)
138 0 : SetInitTabCount( static_cast<SCTAB>(nIntVal) );
139 0 : break;
140 : case SCDEFAULTSOPT_TAB_PREFIX:
141 0 : if (pValues[nProp] >>= aPrefix)
142 0 : SetInitTabPrefix(aPrefix);
143 0 : break;
144 : }
145 : }
146 : }
147 0 : }
148 0 : }
149 :
150 0 : void ScDefaultsCfg::Commit()
151 : {
152 0 : Sequence<OUString> aNames = GetPropertyNames();
153 0 : Sequence<Any> aValues(aNames.getLength());
154 0 : Any* pValues = aValues.getArray();
155 :
156 0 : for (int nProp = 0; nProp < aNames.getLength(); ++nProp)
157 : {
158 0 : switch(nProp)
159 : {
160 : case SCDEFAULTSOPT_TAB_COUNT:
161 0 : pValues[nProp] <<= static_cast<sal_Int32>(GetInitTabCount());
162 0 : break;
163 : case SCDEFAULTSOPT_TAB_PREFIX:
164 0 : pValues[nProp] <<= GetInitTabPrefix();
165 0 : break;
166 : }
167 : }
168 0 : PutProperties(aNames, aValues);
169 0 : }
170 :
171 0 : void ScDefaultsCfg::SetOptions( const ScDefaultsOptions& rNew )
172 : {
173 0 : *(ScDefaultsOptions*)this = rNew;
174 0 : SetModified();
175 0 : }
176 :
177 0 : void ScDefaultsCfg::Notify( const ::com::sun::star::uno::Sequence< OUString >& ) {}
178 :
179 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|