xref: /AOO41X/main/sw/source/ui/cctrl/swlbox.cxx (revision 4d7c9de063a797b8b4f3d45e3561e82ad1f8ef1f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 
28 #include <tools/debug.hxx>
29 #include <unotools/charclass.hxx>
30 #include <swtypes.hxx>
31 #include <swlbox.hxx>
32 
33 using namespace nsSwComboBoxStyle;
34 
35 
SV_IMPL_PTRARR(SwEntryLst,SwBoxEntry *)36 SV_IMPL_PTRARR(SwEntryLst, SwBoxEntry*)
37 
38 /*--------------------------------------------------------------------
39      Beschreibung: Ein ListboxElement
40  --------------------------------------------------------------------*/
41 
42 
43 SwBoxEntry::SwBoxEntry() :
44     bModified(sal_False),
45     bNew(sal_False),
46     nId(LISTBOX_APPEND)
47 {
48 }
49 
50 
SwBoxEntry(const String & aNam,sal_uInt16 nIdx)51 SwBoxEntry::SwBoxEntry(const String& aNam, sal_uInt16 nIdx) :
52     bModified(sal_False),
53     bNew(sal_False),
54     aName(aNam),
55     nId(nIdx)
56 {
57 }
58 
59 
SwBoxEntry(const SwBoxEntry & rOld)60 SwBoxEntry::SwBoxEntry(const SwBoxEntry& rOld) :
61     bModified(rOld.bModified),
62     bNew(rOld.bNew),
63     aName(rOld.aName),
64     nId(rOld.nId)
65 {
66 
67 }
68 
69 
70 
SwComboBox(Window * pParent,const ResId & rId,sal_uInt16 nStyleBits)71 SwComboBox::SwComboBox(Window* pParent, const ResId& rId, sal_uInt16 nStyleBits ):
72     ComboBox(pParent, rId),
73     nStyle(nStyleBits)
74 {
75     // Verwaltung fuer die Stringlist aus der Resource aufbauen
76     sal_uInt16 nSize = GetEntryCount();
77     for( sal_uInt16 i=0; i < nSize; ++i )
78     {
79         const SwBoxEntry* pTmp = new SwBoxEntry(ComboBox::GetEntry(i), i);
80         aEntryLst.Insert(pTmp, aEntryLst.Count() );
81     }
82 }
83 
84 /*--------------------------------------------------------------------
85      Beschreibung: Basisklasse Dtor
86  --------------------------------------------------------------------*/
87 
88 
~SwComboBox()89 SwComboBox::~SwComboBox()
90 {
91 // das erledigen die Listen doch schon selbst im DTOR!
92 //  aEntryLst.DeleteAndDestroy(0,   aEntryLst.Count());
93 //  aDelEntryLst.DeleteAndDestroy(0, aDelEntryLst.Count());
94 }
95 
96 /*--------------------------------------------------------------------
97      Beschreibung: Eintrag in die ComboBox aufnehmen
98  --------------------------------------------------------------------*/
99 
100 
InsertEntry(const SwBoxEntry & rEntry)101 void SwComboBox::InsertEntry(const SwBoxEntry& rEntry)
102 {
103     InsertSorted(new SwBoxEntry(rEntry));
104 }
105 
106 /*--------------------------------------------------------------------
107      Beschreibung: Eintrag aus der Liste loeschen
108  --------------------------------------------------------------------*/
109 
110 
RemoveEntry(sal_uInt16 nPos)111 void SwComboBox::RemoveEntry(sal_uInt16 nPos)
112 {
113     if(nPos >= aEntryLst.Count())
114         return;
115 
116     // Altes Element austragen
117     SwBoxEntry* pEntry = aEntryLst[nPos];
118     aEntryLst.Remove(nPos, 1);
119     ComboBox::RemoveEntry(nPos);
120 
121     // keine neuen Eintraege in die Liste mit aufnehmen
122     if(pEntry->bNew)
123         return;
124 
125     // in DeleteListe eintragen
126     aDelEntryLst.C40_INSERT(SwBoxEntry, pEntry, aDelEntryLst.Count());
127 }
128 
129 
130 
131 /*--------------------------------------------------------------------
132      Beschreibung: Position by Name
133  --------------------------------------------------------------------*/
134 
GetEntryPos(const SwBoxEntry & rEntry) const135 sal_uInt16 SwComboBox::GetEntryPos(const SwBoxEntry& rEntry) const
136 {
137     return ComboBox::GetEntryPos(rEntry.aName);
138 }
139 
140 /*--------------------------------------------------------------------
141      Beschreibung: Rund um die Entries
142  --------------------------------------------------------------------*/
143 
144 
GetEntry(sal_uInt16 nPos) const145 const SwBoxEntry& SwComboBox::GetEntry(sal_uInt16 nPos) const
146 {
147     if(nPos < aEntryLst.Count())
148         return *aEntryLst[nPos];
149 
150     return aDefault;
151 }
152 
153 /*--------------------------------------------------------------------
154      Beschreibung: geloeschte Eintraege
155  --------------------------------------------------------------------*/
156 
157 
GetRemovedCount() const158 sal_uInt16 SwComboBox::GetRemovedCount() const
159 {
160     return aDelEntryLst.Count();
161 }
162 
163 
GetRemovedEntry(sal_uInt16 nPos) const164 const SwBoxEntry& SwComboBox::GetRemovedEntry(sal_uInt16 nPos) const
165 {
166     if(nPos < aDelEntryLst.Count())
167         return *aDelEntryLst[nPos];
168 
169     return aDefault;
170 }
171 
172 /*--------------------------------------------------------------------
173      Beschreibung: Sortiert einfuegen
174  --------------------------------------------------------------------*/
175 
176 
InsertSorted(SwBoxEntry * pEntry)177 void SwComboBox::InsertSorted(SwBoxEntry* pEntry)
178 {
179     ComboBox::InsertEntry(pEntry->aName);
180     sal_uInt16 nPos = ComboBox::GetEntryPos(pEntry->aName);
181     aEntryLst.C40_INSERT(SwBoxEntry, pEntry, nPos);
182 }
183 
184 
185 /*--------------------------------------------------------------------
186     Beschreibung: Je nach Option bestimmte Zeichen ausblenden
187  --------------------------------------------------------------------*/
188 
189 
KeyInput(const KeyEvent & rKEvt)190 void SwComboBox::KeyInput( const KeyEvent& rKEvt )
191 {
192     sal_uInt16 nChar = rKEvt.GetCharCode();
193 
194     if(nStyle & CBS_FILENAME)
195     {
196 #if defined UNX
197         if(nChar == '/' || nChar == ' ' )
198             return;
199 #else
200         if(nChar == ':' || nChar == '\\' || nChar == '.' || nChar == ' ')
201             return;
202 #endif
203     }
204     ComboBox::KeyInput(rKEvt);
205 }
206 
207 
208 
209 /*--------------------------------------------------------------------
210     Beschreibung: Text nach Option konvertieren
211  --------------------------------------------------------------------*/
212 
213 
GetText() const214 String SwComboBox::GetText() const
215 {
216     String aTxt( ComboBox::GetText() );
217 
218     if(nStyle & CBS_LOWER)
219         GetAppCharClass().toLower( aTxt );
220     else if( nStyle & CBS_UPPER )
221         GetAppCharClass().toUpper( aTxt );
222 
223     return aTxt;
224 }
225 
SetText(const XubString & rStr)226 void SwComboBox::SetText( const XubString& rStr )
227 {
228     ComboBox::SetText(rStr);
229     // MT: CallEventListeners stay protected for now. Probably not needed at all, as the implementation of VCLXAccessibelEdit/ComboBox should do it on text changed nowadays anyway. Verify.
230     // CallEventListeners( VCLEVENT_EDIT_MODIFY );
231 }
232