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