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 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #include <sfx2/sidebar/EnumContext.hxx>
20 :
21 : #include <map>
22 :
23 : namespace sfx2 { namespace sidebar {
24 :
25 : namespace {
26 :
27 : typedef ::std::map<rtl::OUString,EnumContext::Application> ApplicationMap;
28 : typedef ::std::vector<rtl::OUString> ApplicationVector;
29 317 : static ApplicationMap maApplicationMap;
30 317 : static ApplicationVector maApplicationVector;
31 :
32 : typedef ::std::map<rtl::OUString,EnumContext::Context> ContextMap;
33 : typedef ::std::vector<rtl::OUString> ContextVector;
34 317 : static ContextMap maContextMap;
35 317 : static ContextVector maContextVector;
36 :
37 : }
38 :
39 : const sal_Int32 EnumContext::NoMatch = 4;
40 : const sal_Int32 EnumContext::OptimalMatch = 0; // Neither application nor context name is "any".
41 :
42 :
43 1476 : EnumContext::EnumContext (void)
44 : : meApplication(Application_None),
45 1476 : meContext(Context_Unknown)
46 : {
47 1476 : }
48 :
49 :
50 :
51 :
52 1516 : EnumContext::EnumContext (
53 : const Application eApplication,
54 : const Context eContext)
55 : : meApplication(eApplication),
56 1516 : meContext(eContext)
57 : {
58 1516 : }
59 :
60 :
61 :
62 :
63 5154 : EnumContext::EnumContext (
64 : const ::rtl::OUString& rsApplicationName,
65 : const ::rtl::OUString& rsContextName)
66 5154 : : meApplication(GetApplicationEnum(rsApplicationName)),
67 5154 : meContext(GetContextEnum(rsContextName))
68 : {
69 5154 : }
70 :
71 :
72 :
73 :
74 2628 : sal_Int32 EnumContext::GetCombinedContext_DI (void) const
75 : {
76 2628 : return CombinedEnumContext(GetApplication_DI(), meContext);
77 : }
78 :
79 :
80 :
81 :
82 3386 : EnumContext::Application EnumContext::GetApplication_DI (void) const
83 : {
84 3386 : switch (meApplication)
85 : {
86 : case Application_Draw:
87 : case Application_Impress:
88 0 : return Application_DrawImpress;
89 :
90 : case Application_Writer:
91 : case Application_WriterGlobal:
92 : case Application_WriterWeb:
93 : case Application_WriterXML:
94 : case Application_WriterForm:
95 : case Application_WriterReport:
96 3386 : return Application_WriterVariants;
97 :
98 : default:
99 0 : return meApplication;
100 : }
101 : }
102 :
103 :
104 :
105 :
106 0 : const ::rtl::OUString& EnumContext::GetApplicationName (void) const
107 : {
108 0 : return EnumContext::GetApplicationName(meApplication);
109 : }
110 :
111 :
112 :
113 :
114 0 : const ::rtl::OUString& EnumContext::GetContextName (void) const
115 : {
116 0 : return EnumContext::GetContextName(meContext);
117 : }
118 :
119 :
120 :
121 :
122 1516 : bool EnumContext::operator== (const EnumContext aOther)
123 : {
124 1516 : return meApplication==aOther.meApplication
125 1516 : && meContext==aOther.meContext;
126 : }
127 :
128 :
129 :
130 :
131 0 : bool EnumContext::operator!= (const EnumContext aOther)
132 : {
133 0 : return meApplication!=aOther.meApplication
134 0 : || meContext!=aOther.meContext;
135 : }
136 :
137 :
138 :
139 :
140 990 : void EnumContext::AddEntry (const ::rtl::OUString& rsName, const Application eApplication)
141 : {
142 990 : maApplicationMap[rsName] = eApplication;
143 : OSL_ASSERT(eApplication<=__LastApplicationEnum);
144 990 : if (maApplicationVector.size() <= size_t(eApplication))
145 0 : maApplicationVector.resize(eApplication+1);
146 990 : maApplicationVector[eApplication]=rsName;
147 990 : }
148 :
149 :
150 :
151 :
152 47622 : void EnumContext::ProvideApplicationContainers (void)
153 : {
154 47622 : if (maApplicationMap.empty())
155 : {
156 90 : maApplicationVector.resize(static_cast<size_t>(EnumContext::__LastApplicationEnum)+1);
157 90 : AddEntry(OUString("com.sun.star.text.TextDocument"), EnumContext::Application_Writer);
158 90 : AddEntry(OUString("com.sun.star.text.GlobalDocument"), EnumContext::Application_WriterGlobal);
159 90 : AddEntry(OUString("com.sun.star.text.WebDocument"), EnumContext::Application_WriterWeb);
160 90 : AddEntry(OUString("com.sun.star.xforms.XMLFormDocument"), EnumContext::Application_WriterXML);
161 90 : AddEntry(OUString("com.sun.star.sdb.FormDesign"), EnumContext::Application_WriterForm);
162 90 : AddEntry(OUString("com.sun.star.sdb.TextReportDesign"), EnumContext::Application_WriterReport);
163 90 : AddEntry(OUString("com.sun.star.sheet.SpreadsheetDocument"), EnumContext::Application_Calc);
164 90 : AddEntry(OUString("com.sun.star.drawing.DrawingDocument"), EnumContext::Application_Draw);
165 90 : AddEntry(OUString("com.sun.star.presentation.PresentationDocument"), EnumContext::Application_Impress);
166 :
167 90 : AddEntry(OUString("any"), EnumContext::Application_Any);
168 90 : AddEntry(OUString("none"), EnumContext::Application_None);
169 : }
170 47622 : }
171 :
172 :
173 :
174 :
175 16918 : EnumContext::Application EnumContext::GetApplicationEnum (const ::rtl::OUString& rsApplicationName)
176 : {
177 16918 : ProvideApplicationContainers();
178 :
179 : ApplicationMap::const_iterator iApplication(
180 16918 : maApplicationMap.find(rsApplicationName));
181 16918 : if (iApplication != maApplicationMap.end())
182 3748 : return iApplication->second;
183 : else
184 13170 : return EnumContext::Application_None;
185 : }
186 :
187 :
188 :
189 :
190 30704 : const ::rtl::OUString& EnumContext::GetApplicationName (const Application eApplication)
191 : {
192 30704 : ProvideApplicationContainers();
193 :
194 30704 : const sal_Int32 nIndex (eApplication);
195 30704 : if (nIndex<0 || nIndex>= __LastApplicationEnum)
196 9872 : return maApplicationVector[Application_None];
197 : else
198 20832 : return maApplicationVector[nIndex];
199 : }
200 :
201 :
202 :
203 :
204 4032 : void EnumContext::AddEntry (const ::rtl::OUString& rsName, const Context eApplication)
205 : {
206 4032 : maContextMap[rsName] = eApplication;
207 : OSL_ASSERT(eApplication<=__LastContextEnum);
208 4032 : if (maContextVector.size() <= size_t(eApplication))
209 0 : maContextVector.resize(eApplication+1);
210 4032 : maContextVector[eApplication] = rsName;
211 4032 : }
212 :
213 :
214 :
215 :
216 62826 : void EnumContext::ProvideContextContainers (void)
217 : {
218 62826 : if (maContextMap.empty())
219 : {
220 144 : maContextVector.resize(static_cast<size_t>(__LastContextEnum)+1);
221 144 : AddEntry(OUString("any"), Context_Any);
222 144 : AddEntry(OUString("default"), Context_Default);
223 144 : AddEntry(OUString("empty"), Context_Empty);
224 : #define AddContext(context) AddEntry(OUString(#context), Context_##context);
225 144 : AddContext(3DObject);
226 144 : AddContext(Annotation);
227 144 : AddContext(Auditing);
228 144 : AddContext(Cell);
229 144 : AddContext(Chart);
230 144 : AddContext(Chart);
231 144 : AddContext(Draw);
232 144 : AddContext(DrawPage);
233 144 : AddContext(DrawText);
234 144 : AddContext(EditCell);
235 144 : AddContext(Form);
236 144 : AddContext(Frame);
237 144 : AddContext(Graphic);
238 144 : AddContext(HandoutPage);
239 144 : AddContext(MasterPage);
240 144 : AddContext(Media);
241 144 : AddContext(MultiObject);
242 144 : AddContext(NotesPage);
243 144 : AddContext(OLE);
244 144 : AddContext(OutlineText);
245 144 : AddContext(Pivot);
246 144 : AddContext(SlidesorterPage);
247 144 : AddContext(Table);
248 144 : AddContext(Text);
249 144 : AddContext(TextObject);
250 : #undef AddContext
251 : }
252 62826 : }
253 :
254 :
255 :
256 :
257 22202 : EnumContext::Context EnumContext::GetContextEnum (const ::rtl::OUString& rsContextName)
258 : {
259 22202 : ProvideContextContainers();
260 :
261 : ContextMap::const_iterator iContext(
262 22202 : maContextMap.find(rsContextName));
263 22202 : if (iContext != maContextMap.end())
264 17414 : return iContext->second;
265 : else
266 4788 : return EnumContext::Context_Unknown;
267 : }
268 :
269 :
270 :
271 :
272 40624 : const ::rtl::OUString& EnumContext::GetContextName (const Context eContext)
273 : {
274 40624 : ProvideContextContainers();
275 :
276 40624 : const sal_Int32 nIndex (eContext);
277 40624 : if (nIndex<0 || nIndex>= __LastContextEnum)
278 4 : return maContextVector[Context_Unknown];
279 : else
280 40620 : return maContextVector[nIndex];
281 : }
282 :
283 :
284 951 : } } // end of namespace sfx2::sidebar
285 :
286 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|