xref: /core/vcl/source/window/EnumContext.cxx (revision 1160d5b29a9cdae5ec6126663e888b8e5c76aba4)
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 <vcl/EnumContext.hxx>
20 
21 #include <osl/diagnose.h>
22 #include <o3tl/enumarray.hxx>
23 
24 #include <map>
25 
26 namespace vcl {
27 
28 namespace {
29 
30 typedef ::std::map<OUString,EnumContext::Application> ApplicationMap;
31 
32 ApplicationMap maApplicationMap;
33 o3tl::enumarray<EnumContext::Application, OUString> maApplicationVector;
34 
35 typedef ::std::map<OUString,EnumContext::Context> ContextMap;
36 
37 ContextMap maContextMap;
38 o3tl::enumarray<EnumContext::Context, OUString> maContextVector;
39 
40 }
41 
42 const sal_Int32 EnumContext::NoMatch = 4;
43 
EnumContext()44 EnumContext::EnumContext()
45     : meApplication(Application::NONE),
46       meContext(Context::Unknown)
47 {
48 }
49 
EnumContext(const Application eApplication,const Context eContext)50 EnumContext::EnumContext (
51     const Application eApplication,
52     const Context eContext)
53     : meApplication(eApplication),
54       meContext(eContext)
55 {
56 }
57 
GetCombinedContext_DI() const58 sal_Int32 EnumContext::GetCombinedContext_DI() const
59 {
60     return CombinedEnumContext(GetApplication_DI(), meContext);
61 }
62 
GetApplication() const63 EnumContext::Application EnumContext::GetApplication() const
64 {
65      return meApplication;
66 }
67 
GetApplication_DI() const68 EnumContext::Application EnumContext::GetApplication_DI() const
69 {
70      switch (meApplication)
71      {
72          case Application::Draw:
73          case Application::Impress:
74             return Application::DrawImpress;
75 
76          case Application::Writer:
77          case Application::WriterGlobal:
78          case Application::WriterWeb:
79          case Application::WriterXML:
80          case Application::WriterForm:
81          case Application::WriterReport:
82              return Application::WriterVariants;
83 
84          default:
85              return meApplication;
86      }
87 }
88 
operator ==(const EnumContext & rOther) const89 bool EnumContext::operator== (const EnumContext& rOther) const
90 {
91     return meApplication==rOther.meApplication
92         && meContext==rOther.meContext;
93 }
94 
operator !=(const EnumContext & rOther) const95 bool EnumContext::operator!= (const EnumContext& rOther) const
96 {
97     return meApplication!=rOther.meApplication
98         || meContext!=rOther.meContext;
99 }
100 
AddEntry(const OUString & rsName,const Application eApplication)101 void EnumContext::AddEntry (const OUString& rsName, const Application eApplication)
102 {
103     maApplicationMap[rsName] = eApplication;
104     OSL_ASSERT(eApplication<=Application::LAST);
105     maApplicationVector[eApplication]=rsName;
106 }
107 
ProvideApplicationContainers()108 void EnumContext::ProvideApplicationContainers()
109 {
110     if (!maApplicationMap.empty())
111         return;
112 
113     AddEntry(u"com.sun.star.text.TextDocument"_ustr, EnumContext::Application::Writer);
114     AddEntry(u"com.sun.star.text.GlobalDocument"_ustr, EnumContext::Application::WriterGlobal);
115     AddEntry(u"com.sun.star.text.WebDocument"_ustr, EnumContext::Application::WriterWeb);
116     AddEntry(u"com.sun.star.xforms.XMLFormDocument"_ustr, EnumContext::Application::WriterXML);
117     AddEntry(u"com.sun.star.sdb.FormDesign"_ustr, EnumContext::Application::WriterForm);
118     AddEntry(u"com.sun.star.sdb.TextReportDesign"_ustr, EnumContext::Application::WriterReport);
119     AddEntry(u"com.sun.star.sheet.SpreadsheetDocument"_ustr, EnumContext::Application::Calc);
120     AddEntry(u"com.sun.star.chart2.ChartDocument"_ustr, EnumContext::Application::Chart);
121     AddEntry(u"com.sun.star.drawing.DrawingDocument"_ustr, EnumContext::Application::Draw);
122     AddEntry(u"com.sun.star.presentation.PresentationDocument"_ustr, EnumContext::Application::Impress);
123     AddEntry(u"com.sun.star.formula.FormulaProperties"_ustr, EnumContext::Application::Formula);
124     AddEntry(u"com.sun.star.sdb.OfficeDatabaseDocument"_ustr, EnumContext::Application::Base);
125     AddEntry(u"any"_ustr, EnumContext::Application::Any);
126     AddEntry(u"none"_ustr, EnumContext::Application::NONE);
127 
128 }
129 
GetApplicationEnum(const OUString & rsApplicationName)130 EnumContext::Application EnumContext::GetApplicationEnum (const OUString& rsApplicationName)
131 {
132     ProvideApplicationContainers();
133 
134     ApplicationMap::const_iterator iApplication(
135         maApplicationMap.find(rsApplicationName));
136     if (iApplication != maApplicationMap.end())
137         return iApplication->second;
138     else
139         return EnumContext::Application::NONE;
140 }
141 
GetApplicationName(const Application eApplication)142 const OUString& EnumContext::GetApplicationName (const Application eApplication)
143 {
144     ProvideApplicationContainers();
145     return maApplicationVector[eApplication];
146 }
147 
AddEntry(const OUString & rsName,const Context eContext)148 void EnumContext::AddEntry (const OUString& rsName, const Context eContext)
149 {
150     maContextMap[rsName] = eContext;
151     maContextVector[eContext] = rsName;
152 }
153 
ProvideContextContainers()154 void EnumContext::ProvideContextContainers()
155 {
156     if (!maContextMap.empty())
157         return;
158 
159     AddEntry(u"3DObject"_ustr, Context::ThreeDObject);
160     AddEntry(u"Annotation"_ustr, Context::Annotation);
161     AddEntry(u"Auditing"_ustr, Context::Auditing);
162     AddEntry(u"Axis"_ustr, Context::Axis);
163     AddEntry(u"Cell"_ustr, Context::Cell);
164     AddEntry(u"Chart"_ustr, Context::Chart);
165     AddEntry(u"ChartElements"_ustr, Context::ChartElements);
166     AddEntry(u"ChartLabel"_ustr, Context::ChartLabel);
167     AddEntry(u"ChartLegend"_ustr, Context::ChartLegend);
168     AddEntry(u"ChartTitle"_ustr, Context::ChartTitle);
169     AddEntry(u"Draw"_ustr, Context::Draw);
170     AddEntry(u"DrawFontwork"_ustr, Context::DrawFontwork);
171     AddEntry(u"DrawLine"_ustr, Context::DrawLine);
172     AddEntry(u"DrawPage"_ustr, Context::DrawPage);
173     AddEntry(u"DrawText"_ustr, Context::DrawText);
174     AddEntry(u"EditCell"_ustr, Context::EditCell);
175     AddEntry(u"ErrorBar"_ustr, Context::ErrorBar);
176     AddEntry(u"Form"_ustr, Context::Form);
177     AddEntry(u"Frame"_ustr, Context::Frame);
178     AddEntry(u"Graphic"_ustr, Context::Graphic);
179     AddEntry(u"Grid"_ustr, Context::Grid);
180     AddEntry(u"HandoutPage"_ustr, Context::HandoutPage);
181     AddEntry(u"MasterPage"_ustr, Context::MasterPage);
182     AddEntry(u"Math"_ustr, Context::Math);
183     AddEntry(u"Media"_ustr, Context::Media);
184     AddEntry(u"MultiObject"_ustr, Context::MultiObject);
185     AddEntry(u"NotesPage"_ustr, Context::NotesPage);
186     AddEntry(u"OLE"_ustr, Context::OLE);
187     AddEntry(u"OutlineText"_ustr, Context::OutlineText);
188     AddEntry(u"Pivot"_ustr, Context::Pivot);
189     AddEntry(u"Printpreview"_ustr, Context::Printpreview);
190     AddEntry(u"Series"_ustr, Context::Series);
191     AddEntry(u"SlidesorterPage"_ustr, Context::SlidesorterPage);
192     AddEntry(u"Table"_ustr, Context::Table);
193     AddEntry(u"Text"_ustr, Context::Text);
194     AddEntry(u"TextObject"_ustr, Context::TextObject);
195     AddEntry(u"Trendline"_ustr, Context::Trendline);
196     AddEntry(u"Sparkline"_ustr, Context::Sparkline);
197 
198     // other general contexts
199     AddEntry(u"any"_ustr, Context::Any);
200     AddEntry(u"default"_ustr, Context::Default);
201     AddEntry(u"empty"_ustr, Context::Empty);
202 }
203 
GetContextEnum(const OUString & rsContextName)204 EnumContext::Context EnumContext::GetContextEnum (const OUString& rsContextName)
205 {
206     ProvideContextContainers();
207 
208     ContextMap::const_iterator iContext( maContextMap.find(rsContextName) );
209     if (iContext != maContextMap.end())
210         return iContext->second;
211     else
212         return EnumContext::Context::Unknown;
213 }
214 
GetContextName(const Context eContext)215 const OUString& EnumContext::GetContextName (const Context eContext)
216 {
217     ProvideContextContainers();
218     return maContextVector[eContext];
219 }
220 
221 } // end of namespace vcl
222 
223 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
224