xref: /trunk/main/sw/source/core/fields/flddropdown.cxx (revision efeef26f)
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