# # 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, PARENT 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 getActiveComponent(self, _xMSF): xFrame = self.getActiveFrame(_xMSF) return xFrame.getController().getModel() @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