1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19*efeef26fSAndrew Rist *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <flddropdown.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #ifndef INCLUDED_ALGORITHM
30cdf0e10cSrcweir #include <algorithm>
31cdf0e10cSrcweir #define INCLUDED_ALGORITHM
32cdf0e10cSrcweir #endif
33cdf0e10cSrcweir #include <svl/poolitem.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir #ifndef _UNOFLDMID_H
36cdf0e10cSrcweir #include <unofldmid.h>
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #include <unoprnms.hxx>
39cdf0e10cSrcweir
40cdf0e10cSrcweir using namespace com::sun::star;
41cdf0e10cSrcweir
42cdf0e10cSrcweir using rtl::OUString;
43cdf0e10cSrcweir using std::vector;
44cdf0e10cSrcweir
45cdf0e10cSrcweir static String aEmptyString;
46cdf0e10cSrcweir
SwDropDownFieldType()47cdf0e10cSrcweir SwDropDownFieldType::SwDropDownFieldType()
48cdf0e10cSrcweir : SwFieldType(RES_DROPDOWN)
49cdf0e10cSrcweir {
50cdf0e10cSrcweir }
51cdf0e10cSrcweir
~SwDropDownFieldType()52cdf0e10cSrcweir SwDropDownFieldType::~SwDropDownFieldType()
53cdf0e10cSrcweir {
54cdf0e10cSrcweir }
55cdf0e10cSrcweir
Copy() const56cdf0e10cSrcweir SwFieldType * SwDropDownFieldType::Copy() const
57cdf0e10cSrcweir {
58cdf0e10cSrcweir return new SwDropDownFieldType;
59cdf0e10cSrcweir }
60cdf0e10cSrcweir
SwDropDownField(SwFieldType * pTyp)61cdf0e10cSrcweir SwDropDownField::SwDropDownField(SwFieldType * pTyp)
62cdf0e10cSrcweir : SwField(pTyp, 0, LANGUAGE_SYSTEM)
63cdf0e10cSrcweir {
64cdf0e10cSrcweir }
65cdf0e10cSrcweir
SwDropDownField(const SwDropDownField & rSrc)66cdf0e10cSrcweir SwDropDownField::SwDropDownField(const SwDropDownField & rSrc)
67cdf0e10cSrcweir : SwField(rSrc.GetTyp(), rSrc.GetFormat(), rSrc.GetLanguage()),
68cdf0e10cSrcweir aValues(rSrc.aValues), aSelectedItem(rSrc.aSelectedItem),
69cdf0e10cSrcweir aName(rSrc.aName), aHelp(rSrc.aHelp), aToolTip(rSrc.aToolTip)
70cdf0e10cSrcweir {
71cdf0e10cSrcweir }
72cdf0e10cSrcweir
~SwDropDownField()73cdf0e10cSrcweir SwDropDownField::~SwDropDownField()
74cdf0e10cSrcweir {
75cdf0e10cSrcweir }
76cdf0e10cSrcweir
Expand() const77cdf0e10cSrcweir String SwDropDownField::Expand() const
78cdf0e10cSrcweir {
79cdf0e10cSrcweir String sSelect = GetSelectedItem();
80cdf0e10cSrcweir if(!sSelect.Len())
81cdf0e10cSrcweir {
82cdf0e10cSrcweir vector<String>::const_iterator aIt = aValues.begin();
83cdf0e10cSrcweir if ( aIt != aValues.end())
84cdf0e10cSrcweir sSelect = *aIt;
85cdf0e10cSrcweir }
86cdf0e10cSrcweir //if still no list value is available a default text of 10 spaces is to be set
87cdf0e10cSrcweir if(!sSelect.Len())
88cdf0e10cSrcweir sSelect.AppendAscii ( RTL_CONSTASCII_STRINGPARAM (" "));
89cdf0e10cSrcweir return sSelect;
90cdf0e10cSrcweir }
91cdf0e10cSrcweir
Copy() const92cdf0e10cSrcweir SwField * SwDropDownField::Copy() const
93cdf0e10cSrcweir {
94cdf0e10cSrcweir return new SwDropDownField(*this);
95cdf0e10cSrcweir }
96cdf0e10cSrcweir
GetPar1() const97cdf0e10cSrcweir const String & SwDropDownField::GetPar1() const
98cdf0e10cSrcweir {
99cdf0e10cSrcweir return GetSelectedItem();
100cdf0e10cSrcweir }
101cdf0e10cSrcweir
GetPar2() const102cdf0e10cSrcweir String SwDropDownField::GetPar2() const
103cdf0e10cSrcweir {
104cdf0e10cSrcweir return GetName();
105cdf0e10cSrcweir }
106cdf0e10cSrcweir
SetPar1(const String & rStr)107cdf0e10cSrcweir void SwDropDownField::SetPar1(const String & rStr)
108cdf0e10cSrcweir {
109cdf0e10cSrcweir SetSelectedItem(rStr);
110cdf0e10cSrcweir }
111cdf0e10cSrcweir
SetPar2(const String & rName)112cdf0e10cSrcweir void SwDropDownField::SetPar2(const String & rName)
113cdf0e10cSrcweir {
114cdf0e10cSrcweir SetName(rName);
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
SetItems(const vector<String> & rItems)117cdf0e10cSrcweir void SwDropDownField::SetItems(const vector<String> & rItems)
118cdf0e10cSrcweir {
119cdf0e10cSrcweir aValues = rItems;
120cdf0e10cSrcweir aSelectedItem = aEmptyString;
121cdf0e10cSrcweir }
122cdf0e10cSrcweir
SetItems(const uno::Sequence<OUString> & rItems)123cdf0e10cSrcweir void SwDropDownField::SetItems(const uno::Sequence<OUString> & rItems)
124cdf0e10cSrcweir {
125cdf0e10cSrcweir aValues.clear();
126cdf0e10cSrcweir
127cdf0e10cSrcweir sal_Int32 aCount = rItems.getLength();
128cdf0e10cSrcweir for (int i = 0; i < aCount; i++)
129cdf0e10cSrcweir aValues.push_back(rItems[i]);
130cdf0e10cSrcweir
131cdf0e10cSrcweir aSelectedItem = aEmptyString;
132cdf0e10cSrcweir }
133cdf0e10cSrcweir
GetItemSequence() const134cdf0e10cSrcweir uno::Sequence<OUString> SwDropDownField::GetItemSequence() const
135cdf0e10cSrcweir {
136cdf0e10cSrcweir uno::Sequence<OUString> aSeq( aValues.size() );
137cdf0e10cSrcweir OUString* pSeq = aSeq.getArray();
138cdf0e10cSrcweir int i = 0;
139cdf0e10cSrcweir vector<String>::const_iterator aIt;
140cdf0e10cSrcweir
141cdf0e10cSrcweir for (aIt = aValues.begin(); aIt != aValues.end(); aIt++)
142cdf0e10cSrcweir {
143cdf0e10cSrcweir pSeq[i] = rtl::OUString(*aIt);
144cdf0e10cSrcweir
145cdf0e10cSrcweir i++;
146cdf0e10cSrcweir }
147cdf0e10cSrcweir
148cdf0e10cSrcweir return aSeq;
149cdf0e10cSrcweir }
150cdf0e10cSrcweir
GetSelectedItem() const151cdf0e10cSrcweir const String & SwDropDownField::GetSelectedItem() const
152cdf0e10cSrcweir {
153cdf0e10cSrcweir return aSelectedItem;
154cdf0e10cSrcweir }
155cdf0e10cSrcweir
GetName() const156cdf0e10cSrcweir const String & SwDropDownField::GetName() const
157cdf0e10cSrcweir {
158cdf0e10cSrcweir return aName;
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
GetHelp() const161cdf0e10cSrcweir const String & SwDropDownField::GetHelp() const
162cdf0e10cSrcweir {
163cdf0e10cSrcweir return aHelp;
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
GetToolTip() const166cdf0e10cSrcweir const String & SwDropDownField::GetToolTip() const
167cdf0e10cSrcweir {
168cdf0e10cSrcweir return aToolTip;
169cdf0e10cSrcweir }
170cdf0e10cSrcweir
SetSelectedItem(const String & rItem)171cdf0e10cSrcweir sal_Bool SwDropDownField::SetSelectedItem(const String & rItem)
172cdf0e10cSrcweir {
173cdf0e10cSrcweir vector<String>::const_iterator aIt =
174cdf0e10cSrcweir std::find(aValues.begin(), aValues.end(), rItem);
175cdf0e10cSrcweir
176cdf0e10cSrcweir if (aIt != aValues.end())
177cdf0e10cSrcweir aSelectedItem = *aIt;
178cdf0e10cSrcweir else
179cdf0e10cSrcweir aSelectedItem = String();
180cdf0e10cSrcweir
181cdf0e10cSrcweir return (aIt != aValues.end());
182cdf0e10cSrcweir }
183cdf0e10cSrcweir
SetName(const String & rName)184cdf0e10cSrcweir void SwDropDownField::SetName(const String & rName)
185cdf0e10cSrcweir {
186cdf0e10cSrcweir aName = rName;
187cdf0e10cSrcweir }
188cdf0e10cSrcweir
SetHelp(const String & rHelp)189cdf0e10cSrcweir void SwDropDownField::SetHelp(const String & rHelp)
190cdf0e10cSrcweir {
191cdf0e10cSrcweir aHelp = rHelp;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
SetToolTip(const String & rToolTip)194cdf0e10cSrcweir void SwDropDownField::SetToolTip(const String & rToolTip)
195cdf0e10cSrcweir {
196cdf0e10cSrcweir aToolTip = rToolTip;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir
QueryValue(::uno::Any & rVal,sal_uInt16 nWhich) const199cdf0e10cSrcweir sal_Bool SwDropDownField::QueryValue(::uno::Any &rVal, sal_uInt16 nWhich) const
200cdf0e10cSrcweir {
201cdf0e10cSrcweir nWhich &= ~CONVERT_TWIPS;
202cdf0e10cSrcweir switch( nWhich )
203cdf0e10cSrcweir {
204cdf0e10cSrcweir case FIELD_PROP_PAR1:
205cdf0e10cSrcweir rVal <<= rtl::OUString(GetSelectedItem());
206cdf0e10cSrcweir break;
207cdf0e10cSrcweir case FIELD_PROP_PAR2:
208cdf0e10cSrcweir rVal <<= rtl::OUString(GetName());
209cdf0e10cSrcweir break;
210cdf0e10cSrcweir case FIELD_PROP_PAR3:
211cdf0e10cSrcweir rVal <<= rtl::OUString(GetHelp());
212cdf0e10cSrcweir break;
213cdf0e10cSrcweir case FIELD_PROP_PAR4:
214cdf0e10cSrcweir rVal <<= rtl::OUString(GetToolTip());
215cdf0e10cSrcweir break;
216cdf0e10cSrcweir case FIELD_PROP_STRINGS:
217cdf0e10cSrcweir rVal <<= GetItemSequence();
218cdf0e10cSrcweir
219cdf0e10cSrcweir break;
220cdf0e10cSrcweir
221cdf0e10cSrcweir default:
222cdf0e10cSrcweir DBG_ERROR("illegal property");
223cdf0e10cSrcweir }
224cdf0e10cSrcweir return sal_True;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir
PutValue(const uno::Any & rVal,sal_uInt16 nWhich)227cdf0e10cSrcweir sal_Bool SwDropDownField::PutValue(const uno::Any &rVal,
228cdf0e10cSrcweir sal_uInt16 nWhich)
229cdf0e10cSrcweir {
230cdf0e10cSrcweir switch( nWhich )
231cdf0e10cSrcweir {
232cdf0e10cSrcweir case FIELD_PROP_PAR1:
233cdf0e10cSrcweir {
234cdf0e10cSrcweir String aTmpStr;
235cdf0e10cSrcweir ::GetString( rVal, aTmpStr );
236cdf0e10cSrcweir
237cdf0e10cSrcweir SetSelectedItem(aTmpStr);
238cdf0e10cSrcweir }
239cdf0e10cSrcweir break;
240cdf0e10cSrcweir
241cdf0e10cSrcweir case FIELD_PROP_PAR2:
242cdf0e10cSrcweir {
243cdf0e10cSrcweir String aTmpStr;
244cdf0e10cSrcweir ::GetString( rVal, aTmpStr );
245cdf0e10cSrcweir
246cdf0e10cSrcweir SetName(aTmpStr);
247cdf0e10cSrcweir }
248cdf0e10cSrcweir break;
249cdf0e10cSrcweir
250cdf0e10cSrcweir case FIELD_PROP_PAR3:
251cdf0e10cSrcweir {
252cdf0e10cSrcweir String aTmpStr;
253cdf0e10cSrcweir ::GetString( rVal, aTmpStr );
254cdf0e10cSrcweir
255cdf0e10cSrcweir SetHelp(aTmpStr);
256cdf0e10cSrcweir }
257cdf0e10cSrcweir break;
258cdf0e10cSrcweir
259cdf0e10cSrcweir case FIELD_PROP_PAR4:
260cdf0e10cSrcweir {
261cdf0e10cSrcweir String aTmpStr;
262cdf0e10cSrcweir ::GetString( rVal, aTmpStr );
263cdf0e10cSrcweir
264cdf0e10cSrcweir SetToolTip(aTmpStr);
265cdf0e10cSrcweir }
266cdf0e10cSrcweir break;
267cdf0e10cSrcweir
268cdf0e10cSrcweir case FIELD_PROP_STRINGS:
269cdf0e10cSrcweir {
270cdf0e10cSrcweir uno::Sequence<OUString> aSeq;
271cdf0e10cSrcweir rVal >>= aSeq;
272cdf0e10cSrcweir SetItems(aSeq);
273cdf0e10cSrcweir }
274cdf0e10cSrcweir break;
275cdf0e10cSrcweir
276cdf0e10cSrcweir default:
277cdf0e10cSrcweir DBG_ERROR("illegal property");
278cdf0e10cSrcweir }
279cdf0e10cSrcweir return sal_True;
280cdf0e10cSrcweir }
281