xref: /trunk/main/sfx2/source/sidebar/Context.cxx (revision 22de8995e98e3a56ca408d1c38158e9063b52d2e)
1*22de8995SAndre Fischer /**************************************************************
2*22de8995SAndre Fischer  *
3*22de8995SAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
4*22de8995SAndre Fischer  * or more contributor license agreements.  See the NOTICE file
5*22de8995SAndre Fischer  * distributed with this work for additional information
6*22de8995SAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
7*22de8995SAndre Fischer  * to you under the Apache License, Version 2.0 (the
8*22de8995SAndre Fischer  * "License"); you may not use this file except in compliance
9*22de8995SAndre Fischer  * with the License.  You may obtain a copy of the License at
10*22de8995SAndre Fischer  *
11*22de8995SAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
12*22de8995SAndre Fischer  *
13*22de8995SAndre Fischer  * Unless required by applicable law or agreed to in writing,
14*22de8995SAndre Fischer  * software distributed under the License is distributed on an
15*22de8995SAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*22de8995SAndre Fischer  * KIND, either express or implied.  See the License for the
17*22de8995SAndre Fischer  * specific language governing permissions and limitations
18*22de8995SAndre Fischer  * under the License.
19*22de8995SAndre Fischer  *
20*22de8995SAndre Fischer  *************************************************************/
21*22de8995SAndre Fischer 
22*22de8995SAndre Fischer #include "precompiled_sfx2.hxx"
23*22de8995SAndre Fischer 
24*22de8995SAndre Fischer #include "Context.hxx"
25*22de8995SAndre Fischer 
26*22de8995SAndre Fischer #define AnyApplicationName "any"
27*22de8995SAndre Fischer #define AnyContextName "any"
28*22de8995SAndre Fischer 
29*22de8995SAndre Fischer namespace sfx2 {
30*22de8995SAndre Fischer 
31*22de8995SAndre Fischer const sal_Int32 Context::NoMatch = 4;
32*22de8995SAndre Fischer const sal_Int32 Context::OptimalMatch = 0;  // Neither application nor context name is "any".
33*22de8995SAndre Fischer 
34*22de8995SAndre Fischer #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
35*22de8995SAndre Fischer 
36*22de8995SAndre Fischer Context::Context (void)
37*22de8995SAndre Fischer     : msApplication(A2S(AnyApplicationName)),
38*22de8995SAndre Fischer       msContext(A2S(AnyContextName))
39*22de8995SAndre Fischer {
40*22de8995SAndre Fischer }
41*22de8995SAndre Fischer 
42*22de8995SAndre Fischer 
43*22de8995SAndre Fischer 
44*22de8995SAndre Fischer 
45*22de8995SAndre Fischer Context::Context (
46*22de8995SAndre Fischer     const ::rtl::OUString& rsApplication,
47*22de8995SAndre Fischer     const ::rtl::OUString& rsContext)
48*22de8995SAndre Fischer     : msApplication(rsApplication),
49*22de8995SAndre Fischer       msContext(rsContext)
50*22de8995SAndre Fischer {
51*22de8995SAndre Fischer }
52*22de8995SAndre Fischer 
53*22de8995SAndre Fischer 
54*22de8995SAndre Fischer 
55*22de8995SAndre Fischer 
56*22de8995SAndre Fischer sal_Int32 Context::EvaluateMatch (
57*22de8995SAndre Fischer     const Context& rOther) const
58*22de8995SAndre Fischer {
59*22de8995SAndre Fischer     const bool bApplicationNameIsAny (rOther.msApplication.equalsAscii(AnyApplicationName));
60*22de8995SAndre Fischer     if (rOther.msApplication.equals(msApplication) || bApplicationNameIsAny)
61*22de8995SAndre Fischer     {
62*22de8995SAndre Fischer         // Application name matches.
63*22de8995SAndre Fischer         const bool bContextNameIsAny (rOther.msContext.equalsAscii(AnyContextName));
64*22de8995SAndre Fischer         if (rOther.msContext.equals(msContext) || bContextNameIsAny)
65*22de8995SAndre Fischer         {
66*22de8995SAndre Fischer             // Context name matches.
67*22de8995SAndre Fischer             return (bApplicationNameIsAny ? 1 : 0)
68*22de8995SAndre Fischer                 + (bContextNameIsAny ? 2 : 0);
69*22de8995SAndre Fischer         }
70*22de8995SAndre Fischer     }
71*22de8995SAndre Fischer     return NoMatch;
72*22de8995SAndre Fischer }
73*22de8995SAndre Fischer 
74*22de8995SAndre Fischer 
75*22de8995SAndre Fischer 
76*22de8995SAndre Fischer 
77*22de8995SAndre Fischer sal_Int32 Context::EvaluateMatch (const ::std::vector<Context>& rOthers) const
78*22de8995SAndre Fischer {
79*22de8995SAndre Fischer     sal_Int32 nBestMatch (NoMatch);
80*22de8995SAndre Fischer 
81*22de8995SAndre Fischer     for (::std::vector<Context>::const_iterator
82*22de8995SAndre Fischer              iContext(rOthers.begin()),
83*22de8995SAndre Fischer              iEnd(rOthers.end());
84*22de8995SAndre Fischer          iContext!=iEnd;
85*22de8995SAndre Fischer          ++iContext)
86*22de8995SAndre Fischer     {
87*22de8995SAndre Fischer         const sal_Int32 nMatch (EvaluateMatch(*iContext));
88*22de8995SAndre Fischer         if (nMatch < nBestMatch)
89*22de8995SAndre Fischer         {
90*22de8995SAndre Fischer             if (nMatch == OptimalMatch)
91*22de8995SAndre Fischer             {
92*22de8995SAndre Fischer                 // We will find no better match so stop searching.
93*22de8995SAndre Fischer                 return OptimalMatch;
94*22de8995SAndre Fischer             }
95*22de8995SAndre Fischer             nBestMatch = nMatch;
96*22de8995SAndre Fischer         }
97*22de8995SAndre Fischer     }
98*22de8995SAndre Fischer     return nBestMatch;
99*22de8995SAndre Fischer }
100*22de8995SAndre Fischer 
101*22de8995SAndre Fischer } // end of namespace sfx2
102