blob: 96c49b45a1c5cc3735c9bc47ff2cd7c997fa619e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SFX_SIDEBAR_ENUM_CONTEXT_HXX
#define SFX_SIDEBAR_ENUM_CONTEXT_HXX
#include "sfx2/dllapi.h"
#include <rtl/ustring.hxx>
#include <vector>
namespace sfx2 { namespace sidebar {
class SFX2_DLLPUBLIC EnumContext
{
public:
enum Application
{
Application_Writer,
Application_WriterGlobal,
Application_WriterWeb,
Application_WriterXML,
Application_WriterForm,
Application_WriterReport,
Application_Calc,
Application_Draw,
Application_Impress,
// For your convenience to avoid duplicate code in the common
// case that Draw and Impress use identical context configurations.
Application_DrawImpress,
// Also for your convenience for the different variants of Writer documents.
Application_WriterVariants,
// Used only by deck or panel descriptors. Matches any
// application.
Application_Any,
// Use this only in special circumstances. One might be the
// wish to disable a deck or panel during debugging.
Application_None,
__LastApplicationEnum = Application_None
};
enum Context
{
Context_3DObject,
Context_Annotation,
Context_Auditing,
Context_Cell,
Context_Chart,
Context_Draw,
Context_DrawPage,
Context_DrawText,
Context_EditCell,
Context_Form,
Context_Frame,
Context_Graphic,
Context_HandoutPage,
Context_MasterPage,
Context_Media,
Context_MultiObject,
Context_NotesPage,
Context_OLE,
Context_OutlineText,
Context_Pivot,
Context_SlidesorterPage,
Context_Table,
Context_Text,
Context_TextObject,
// Default context of an application. Do we need this?
Context_Default,
// Used only by deck or panel descriptors. Matches any context.
Context_Any,
// Special context name that is only used when a deck would
// otherwise be empty.
Context_Empty,
Context_Unknown,
__LastContextEnum = Context_Unknown
};
EnumContext (void);
EnumContext (
const Application eApplication,
const Context eContext);
EnumContext (
const ::rtl::OUString& rsApplicationName,
const ::rtl::OUString& rsContextName);
/** Return a number that encodes both the application and context
enums.
Use the CombinedEnumContext macro in switch() statements and comparisons.
*/
sal_Int32 GetCombinedContext(void) const;
/** This variant of the GetCombinedContext() method treats some
application names as identical to each other. Replacements
made are:
Draw or Impress -> DrawImpress
Writer or WriterWeb -> WriterAndWeb
Use the Application_DrawImpress or Application_WriterAndWeb values in the CombinedEnumContext macro.
*/
sal_Int32 GetCombinedContext_DI(void) const;
const ::rtl::OUString& GetApplicationName (void) const;
Application GetApplication (void) const;
Application GetApplication_DI (void) const;
const ::rtl::OUString& GetContextName (void) const;
Context GetContext (void) const;
bool operator == (const EnumContext aOther);
bool operator != (const EnumContext aOther);
/** When two contexts are matched against each other then
application or context name may have the wildcard value 'any'.
In order to prefer matches without wildcards over matches with
wildcards we introduce a integer evaluation for matches.
*/
const static sal_Int32 NoMatch;
const static sal_Int32 OptimalMatch;
/** Return the numeric value that describes how good the match
between two contexts is.
Smaller values represent better matches.
*/
sal_Int32 EvaluateMatch (const EnumContext& rOther) const;
/** Return the best match against the given list of contexts.
*/
sal_Int32 EvaluateMatch (const ::std::vector<EnumContext>& rOthers) const;
static Application GetApplicationEnum (const ::rtl::OUString& rsApplicationName);
static const ::rtl::OUString& GetApplicationName (const Application eApplication);
static Context GetContextEnum (const ::rtl::OUString& rsContextName);
static const ::rtl::OUString& GetContextName (const Context eContext);
private:
Application meApplication;
Context meContext;
static void ProvideApplicationContainers (void);
static void ProvideContextContainers (void);
static void AddEntry (const ::rtl::OUString& rsName, const Application eApplication);
static void AddEntry (const ::rtl::OUString& rsName, const Context eContext);
};
#define CombinedEnumContext(a,e) ((static_cast<sal_uInt16>(::sfx2::sidebar::EnumContext::a)<<16)\
| static_cast<sal_uInt16>(::sfx2::sidebar::EnumContext::e))
} } // end of namespace sfx2::sidebar
#endif