xref: /trunk/main/sw/source/ui/cctrl/swlbox.cxx (revision 4d7c9de0)
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