File: //lib64/libreoffice/program/wizards/common/Desktop.py
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# 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 .
#
import uno
import traceback
from com.sun.star.frame.FrameSearchFlag import ALL
from com.sun.star.util import URL
from com.sun.star.i18n.KParseTokens import ANY_LETTER_OR_NUMBER, ASC_UNDERSCORE
from com.sun.star.util import URL
class Desktop(object):
@classmethod
def getDesktop(self, xMSF):
xDesktop = None
if xMSF is not None:
try:
xDesktop = xMSF.createInstance( "com.sun.star.frame.Desktop")
except Exception:
traceback.print_exc()
else:
print ("Can't create a desktop. null pointer !")
return xDesktop
@classmethod
def getActiveFrame(self, xMSF):
xDesktop = self.getDesktop(xMSF)
return xDesktop.getActiveFrame()
@classmethod
def getDispatcher(self, xMSF, xFrame, _stargetframe, oURL):
try:
xDispatch = xFrame.queryDispatch(oURL, _stargetframe, ALL)
return xDispatch
except Exception:
traceback.print_exc()
return None
@classmethod
def connect(self, connectStr):
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve( connectStr )
orb = ctx.ServiceManager
return orb
@classmethod
def getIncrementSuffix(self, xElementContainer, sElementName):
bElementexists = True
i = 1
sIncSuffix = ""
BaseName = sElementName
while bElementexists:
try:
bElementexists = xElementContainer.hasByName(sElementName)
except:
bElementexists = xElementContainer.hasByHierarchicalName(
sElementName)
if bElementexists:
i += 1
sElementName = BaseName + str(i)
if i > 1:
sIncSuffix = str(i)
return sIncSuffix
@classmethod
def checkforfirstSpecialCharacter(self, _xMSF, _sString, _aLocale):
try:
nStartFlags = ANY_LETTER_OR_NUMBER + ASC_UNDERSCORE
ocharservice = _xMSF.createInstance(
"com.sun.star.i18n.CharacterClassification")
aResult = ocharservice.parsePredefinedToken(KParseType.IDENTNAME,
_sString, 0, _aLocale, nStartFlags, "", nStartFlags, " ")
return aResult.EndPos
except Exception:
traceback.print_exc()
return -1
@classmethod
def removeSpecialCharacters(self, _xMSF, _aLocale, _sname):
snewname = _sname
i = 0
while i < snewname.length():
i = Desktop.checkforfirstSpecialCharacter(_xMSF, snewname,
_aLocale)
if i < snewname.length():
sspecialchar = snewname.substring(i, i + 1)
snewname = JavaTools.replaceSubString(snewname, "",
sspecialchar)
return snewname
'''
Checks if the passed Element Name already exists in the ElementContainer.
If yes it appends a suffix to make it unique
@param xElementContainer
@param sElementName
@return a unique Name ready to be added to the container.
'''
@classmethod
def getUniqueName(self, xElementContainer, sElementName):
sIncSuffix = self.getIncrementSuffix(xElementContainer, sElementName)
return sElementName + sIncSuffix
@classmethod
def getDispatchURL(self, xMSF, _sURL):
try:
oTransformer = xMSF.createInstance("com.sun.star.util.URLTransformer")
oURL = URL()
oURL.Complete = _sURL
ok, oURL = oTransformer.parseStrict(oURL)
if (not ok):
return None
return oURL
except Exception:
traceback.print_exc()
return None