diff options
author | Xisco Faulí <anistenis@gmail.com> | 2011-06-07 16:02:15 +0200 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2011-06-07 16:07:27 +0200 |
commit | b0df18dbd4c35e5a020320fcfe822c839b59fd7a (patch) | |
tree | 7cc4783093592823eb4603d08814c60199087bbd /wizards/com | |
parent | afc02928b4bab02bae965e467a4b913b81e9887a (diff) |
initial commit with migration of wizards to python
Diffstat (limited to 'wizards/com')
49 files changed, 7915 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/RemoteFaxWizard b/wizards/com/sun/star/wizards/RemoteFaxWizard new file mode 100644 index 000000000000..fa3eccf22533 --- /dev/null +++ b/wizards/com/sun/star/wizards/RemoteFaxWizard @@ -0,0 +1,6 @@ +#!/usr/bin/env python +from fax.FaxWizardDialogImpl import FaxWizardDialogImpl +import sys + +if __name__ == "__main__": + FaxWizardDialogImpl.main(sys.argv) diff --git a/wizards/com/sun/star/wizards/common/ConfigGroup.py b/wizards/com/sun/star/wizards/common/ConfigGroup.py new file mode 100644 index 000000000000..02ba16cb63c2 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/ConfigGroup.py @@ -0,0 +1,73 @@ +from ConfigNode import * +import traceback + +class ConfigGroup(ConfigNode): + + def writeConfiguration(self, configurationView, param): + for i in dir(self): + if i.startswith(param): + try: + self.writeField(i, configurationView, param) + except Exception, ex: + print "Error writing field:" + i + traceback.print_exc() + + def writeField(self, field, configView, prefix): + propertyName = field.getName().substring(prefix.length()) + fieldType = field.getType() + if ConfigNode.isAssignableFrom(fieldType): + childView = Configuration.addConfigNode(configView, propertyName) + child = field.get(this) + child.writeConfiguration(childView, prefix) + elif fieldType.isPrimitive(): + Configuration.set(convertValue(field), propertyName, configView) + elif isinstance(fieldType,str): + Configuration.set(field.get(this), propertyName, configView) + + ''' + convert the primitive type value of the + given Field object to the corresponding + Java Object value. + @param field + @return the value of the field as a Object. + @throws IllegalAccessException + ''' + + def convertValue(self, field): + if field.getType().equals(Boolean.TYPE): + return field.getBoolean(this) + + if field.getType().equals(Integer.TYPE): + return field.getInt(this) + + if field.getType().equals(Short.TYPE): + return field.getShort(this) + + if field.getType().equals(Float.TYPE): + return field.getFloat(this) + + if (field.getType().equals(Double.TYPE)): + return field.getDouble(this) + return None + #and good luck with it :-) ... + + def readConfiguration(self, configurationView, param): + for i in dir(self): + if i.startswith(param): + try: + self.readField( i, configurationView, param) + except Exception, ex: + print "Error reading field: " + i + traceback.print_exc() + + def readField(self, field, configView, prefix): + propertyName = field[len(prefix):] + child = getattr(self, field) + fieldType = type(child) + if type(ConfigNode) == fieldType: + child.setRoot(self.root) + child.readConfiguration(Configuration.getNode(propertyName, configView), prefix) + field.set(this, Configuration.getString(propertyName, configView)) + + def setRoot(self, newRoot): + self.root = newRoot diff --git a/wizards/com/sun/star/wizards/common/ConfigNode.py b/wizards/com/sun/star/wizards/common/ConfigNode.py new file mode 100644 index 000000000000..d97ac1b646c4 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/ConfigNode.py @@ -0,0 +1,15 @@ +from abc import ABCMeta, abstractmethod + +class ConfigNode(object): + + @abstractmethod + def readConfiguration(self, configurationView, param): + pass + + @abstractmethod + def writeConfiguration(self, configurationView, param): + pass + + @abstractmethod + def setRoot(self, root): + pass diff --git a/wizards/com/sun/star/wizards/common/Configuration.py b/wizards/com/sun/star/wizards/common/Configuration.py new file mode 100644 index 000000000000..adf7e8a7f6e4 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/Configuration.py @@ -0,0 +1,293 @@ +from PropertyNames import PropertyNames +from com.sun.star.uno import Exception as UnoException +from Helper import * +import traceback +import uno +''' +This class gives access to the OO configuration api. +It contains 4 get and 4 set convenience methods for getting and settings properties +in the configuration. <br/> +For the get methods, two parameters must be given: name and parent, where name is the +name of the property, parent is a HierarchyElement (::com::sun::star::configuration::HierarchyElement)<br/> +The get and set methods support hieryrchical property names like "options/gridX". <br/> +NOTE: not yet supported, but sometime later, +If you will ommit the "parent" parameter, then the "name" parameter must be in hierarchy form from +the root of the registry. +''' + +class Configuration(object): + + @classmethod + def getInt(self, name, parent): + o = getNode(name, parent) + if AnyConverter.isVoid(o): + return 0 + + return AnyConverter.toInt(o) + + @classmethod + def getShort(self, name, parent): + o = getNode(name, parent) + if AnyConverter.isVoid(o): + return 0 + + return AnyConverter.toShort(o) + + @classmethod + def getFloat(self, name, parent): + o = getNode(name, parent) + if AnyConverter.isVoid(o): + return 0 + + return AnyConverter.toFloat(o) + + @classmethod + def getDouble(self, name, parent): + o = getNode(name, parent) + if AnyConverter.isVoid(o): + return 0 + + return AnyConverter.toDouble(o) + + @classmethod + def getString(self, name, parent): + o = getNode(name, parent) + if AnyConverter.isVoid(o): + return "" + + return o + + @classmethod + def getBoolean(self, name, parent): + o = getNode(name, parent) + if AnyConverter.isVoid(o): + return False + + return AnyConverter.toBoolean(o) + + @classmethod + def getNode(self, name, parent): + return parent.getByName(name) + + @classmethod + def set(self, value, name, parent): + parent.setHierarchicalPropertyValue(name, value) + + ''' + @param name + @param parent + @return + @throws Exception + ''' + + @classmethod + def getConfigurationNode(self, name, parent): + return parent.getByName(name) + + @classmethod + def getConfigurationRoot(self, xmsf, sPath, updateable): + oConfigProvider = xmsf.createInstance("com.sun.star.configuration.ConfigurationProvider") + if updateable: + sView = "com.sun.star.configuration.ConfigurationUpdateAccess" + else: + sView = "com.sun.star.configuration.ConfigurationAccess" + + aPathArgument = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + aPathArgument.Name = "nodepath" + aPathArgument.Value = sPath + aModeArgument = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + if updateable: + aModeArgument.Name = "lazywrite" + aModeArgument.Value = False + + + return oConfigProvider.createInstanceWithArguments(sView,(aPathArgument,aModeArgument,)) + + @classmethod + def getChildrenNames(self, configView): + return configView.getElementNames() + + @classmethod + def getProductName(self, xMSF): + try: + oProdNameAccess = self.getConfigurationRoot(xMSF, "org.openoffice.Setup/Product", False) + ProductName = Helper.getUnoObjectbyName(oProdNameAccess, "ooName") + return ProductName + except UnoException: + traceback.print_exc() + return None + + @classmethod + def getOfficeLocaleString(self, xMSF): + sLocale = "" + try: + aLocLocale = Locale.Locale() + oMasterKey = self.getConfigurationRoot(xMSF, "org.openoffice.Setup/L10N/", False) + sLocale = (String) + Helper.getUnoObjectbyName(oMasterKey, "ooLocale") + except UnoException, exception: + traceback.print_exc() + + return sLocale + + @classmethod + def getOfficeLocale(self, xMSF): + aLocLocale = Locale.Locale() + sLocale = getOfficeLocaleString(xMSF) + sLocaleList = JavaTools.ArrayoutofString(sLocale, "-") + aLocLocale.Language = sLocaleList[0] + if sLocaleList.length > 1: + aLocLocale.Country = sLocaleList[1] + + return aLocLocale + + @classmethod + def getOfficeLinguistic(self, xMSF): + try: + oMasterKey = self.getConfigurationRoot(xMSF, "org.openoffice.Setup/L10N/", False) + sLinguistic = Helper.getUnoObjectbyName(oMasterKey, "ooLocale") + return sLinguistic + except UnoException, exception: + traceback.print_exc() + return None + + ''' + This method creates a new configuration node and adds it + to the given view. Note that if a node with the given name + already exists it will be completely removed from + the configuration. + @param configView + @param name + @return the new created configuration node. + @throws com.sun.star.lang.WrappedTargetException + @throws ElementExistException + @throws NoSuchElementException + @throws com.sun.star.uno.Exception + ''' + + @classmethod + def addConfigNode(self, configView, name): + if configView == None: + return configView.getByName(name) + else: + # the new element is the result ! + newNode = configView.createInstance() + # insert it - this also names the element + xNameContainer.insertByName(name, newNode) + return newNode + + @classmethod + def removeNode(self, configView, name): + + if configView.hasByName(name): + configView.removeByName(name) + + @classmethod + def commit(self, configView): + configView.commitChanges() + + @classmethod + def updateConfiguration(self, xmsf, path, name, node, param): + view = Configuration.self.getConfigurationRoot(xmsf, path, True) + addConfigNode(path, name) + node.writeConfiguration(view, param) + view.commitChanges() + + @classmethod + def removeNode(self, xmsf, path, name): + view = Configuration.self.getConfigurationRoot(xmsf, path, True) + removeNode(view, name) + view.commitChanges() + + @classmethod + def getNodeDisplayNames(self, _xNameAccessNode): + snames = None + return getNodeChildNames(_xNameAccessNode, PropertyNames.PROPERTY_NAME) + + @classmethod + def getNodeChildNames(self, xNameAccessNode, _schildname): + snames = None + try: + snames = xNameAccessNode.getElementNames() + sdisplaynames = range(snames.length) + i = 0 + while i < snames.length: + oContent = Helper.getUnoPropertyValue(xNameAccessNode.getByName(snames[i]), _schildname) + if not AnyConverter.isVoid(oContent): + sdisplaynames[i] = (String) + Helper.getUnoPropertyValue(xNameAccessNode.getByName(snames[i]), _schildname) + else: + sdisplaynames[i] = snames[i] + + i += 1 + return sdisplaynames + except UnoException, e: + traceback.print_exc() + return snames + + @classmethod + def getChildNodebyIndex(self, _xNameAccess, _index): + try: + snames = _xNameAccess.getElementNames() + oNode = _xNameAccess.getByName(snames[_index]) + return oNode + except UnoException, e: + traceback.print_exc() + return None + + @classmethod + def getChildNodebyName(self, _xNameAccessNode, _SubNodeName): + try: + if _xNameAccessNode.hasByName(_SubNodeName): + return _xNameAccessNode.getByName(_SubNodeName) + + except UnoException, e: + traceback.print_exc() + + return None + + @classmethod + def getChildNodebyDisplayName(self, _xNameAccessNode, _displayname): + snames = None + return getChildNodebyDisplayName(_xNameAccessNode, _displayname, PropertyNames.PROPERTY_NAME) + + @classmethod + def getChildNodebyDisplayName(self, _xNameAccessNode, _displayname, _nodename): + snames = None + try: + snames = _xNameAccessNode.getElementNames() + sdisplaynames = range(snames.length) + i = 0 + while i < snames.length: + curdisplayname = Helper.getUnoPropertyValue(_xNameAccessNode.getByName(snames[i]), _nodename) + if curdisplayname.equals(_displayname): + return _xNameAccessNode.getByName(snames[i]) + + i += 1 + except UnoException, e: + traceback.print_exc() + + return None + + @classmethod + def getChildNodebyDisplayName(self, _xMSF, _aLocale, _xNameAccessNode, _displayname, _nodename, _nmaxcharcount): + snames = None + try: + snames = _xNameAccessNode.getElementNames() + sdisplaynames = range(snames.length) + i = 0 + while i < snames.length: + curdisplayname = Helper.getUnoPropertyValue(_xNameAccessNode.getByName(snames[i]), _nodename) + if (_nmaxcharcount > 0) and (_nmaxcharcount < curdisplayname.length()): + curdisplayname = curdisplayname.substring(0, _nmaxcharcount) + + curdisplayname = Desktop.removeSpecialCharacters(_xMSF, _aLocale, curdisplayname) + if curdisplayname.equals(_displayname): + return _xNameAccessNode.getByName(snames[i]) + + i += 1 + except UnoException, e: + traceback.print_exc() + + return None + diff --git a/wizards/com/sun/star/wizards/common/DebugHelper.py b/wizards/com/sun/star/wizards/common/DebugHelper.py new file mode 100644 index 000000000000..75016033a533 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/DebugHelper.py @@ -0,0 +1,10 @@ +class DebugHelper(object): + + @classmethod + def exception(self, ex): + raise NotImplementedError + + @classmethod + def writeInfo(self, msg): + raise NotImplementedError + diff --git a/wizards/com/sun/star/wizards/common/Desktop.py b/wizards/com/sun/star/wizards/common/Desktop.py new file mode 100644 index 000000000000..a08f12c4f947 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/Desktop.py @@ -0,0 +1,293 @@ +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 NoValidPathException import * +from com.sun.star.uno import Exception as UnoException + + +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 UnoException, 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 getActiveTextDocument(self, _xMSF): + xComponent = getActiveComponent(_xMSF) + return xComponent #Text + + @classmethod + def getActiveSpreadsheetDocument(self, _xMSF): + xComponent = getActiveComponent(_xMSF) + return xComponent + + @classmethod + def getDispatcher(self, xMSF, xFrame, _stargetframe, oURL): + try: + oURLArray = range(1) + oURLArray[0] = oURL + xDispatch = xFrame.queryDispatch(oURLArray[0], _stargetframe, ALL) + return xDispatch + except UnoException, e: + e.printStackTrace(System.out) + + return None + + @classmethod + def getDispatchURL(self, xMSF, _sURL): + try: + oTransformer = xMSF.createInstance("com.sun.star.util.URLTransformer") + oURL = range(1) + oURL[0] = com.sun.star.util.URL.URL() + oURL[0].Complete = _sURL + xTransformer.parseStrict(oURL) + return oURL[0] + except UnoException, e: + e.printStackTrace(System.out) + + return None + + @classmethod + def dispatchURL(self, xMSF, sURL, xFrame, _stargetframe): + oURL = getDispatchURL(xMSF, sURL) + xDispatch = getDispatcher(xMSF, xFrame, _stargetframe, oURL) + dispatchURL(xDispatch, oURL) + + @classmethod + def dispatchURL(self, xMSF, sURL, xFrame): + dispatchURL(xMSF, sURL, xFrame, "") + + @classmethod + def dispatchURL(self, _xDispatch, oURL): + oArg = range(0) + _xDispatch.dispatch(oURL, oArg) + + @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 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 UnoException, e: + e.printStackTrace(System.out) + 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): + bElementexists = True + i = 1 + sIncSuffix = "" + BaseName = sElementName + while bElementexists == True: + bElementexists = xElementContainer.hasByName(sElementName) + if bElementexists == True: + i += 1 + sElementName = BaseName + str(i) + + if i > 1: + sIncSuffix = str(i) + + return sElementName + sIncSuffix + + ''' + Checks if the passed Element Name already exists in the list If yes it appends a + suffix to make it unique + @param _slist + @param _sElementName + @param _sSuffixSeparator + @return a unique Name not being in the passed list. + ''' + + @classmethod + def getUniqueNameList(self, _slist, _sElementName, _sSuffixSeparator): + a = 2 + scompname = _sElementName + bElementexists = True + if _slist == None: + return _sElementName + + if _slist.length == 0: + return _sElementName + + while bElementexists == True: + i = 0 + while i < _slist.length: + if JavaTools.FieldInList(_slist, scompname) == -1: + return scompname + + i += 1 + scompname = _sElementName + _sSuffixSeparator + (a + 1) + return "" + + ''' + @deprecated use Configuration.getConfigurationRoot() with the same parameters instead + @param xMSF + @param KeyName + @param bForUpdate + @return + ''' + + @classmethod + def getRegistryKeyContent(self, xMSF, KeyName, bForUpdate): + try: + aNodePath = range(1) + oConfigProvider = xMSF.createInstance("com.sun.star.configuration.ConfigurationProvider") + aNodePath[0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + aNodePath[0].Name = "nodepath" + aNodePath[0].Value = KeyName + if bForUpdate: + return oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationUpdateAccess", aNodePath) + else: + return oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", aNodePath) + + except UnoException, exception: + exception.printStackTrace(System.out) + return None + +class OfficePathRetriever: + + def OfficePathRetriever(self, xMSF): + try: + TemplatePath = FileAccess.getOfficePath(xMSF, "Template", "share", "/wizard") + UserTemplatePath = FileAccess.getOfficePath(xMSF, "Template", "user", "") + BitmapPath = FileAccess.combinePaths(xMSF, TemplatePath, "/../wizard/bitmap") + WorkPath = FileAccess.getOfficePath(xMSF, "Work", "", "") + except NoValidPathException, nopathexception: + pass + + @classmethod + def getTemplatePath(self, _xMSF): + sTemplatePath = "" + try: + sTemplatePath = FileAccess.getOfficePath(_xMSF, "Template", "share", "/wizard") + except NoValidPathException, nopathexception: + pass + return sTemplatePath + + @classmethod + def getUserTemplatePath(self, _xMSF): + sUserTemplatePath = "" + try: + sUserTemplatePath = FileAccess.getOfficePath(_xMSF, "Template", "user", "") + except NoValidPathException, nopathexception: + pass + return sUserTemplatePath + + @classmethod + def getBitmapPath(self, _xMSF): + sBitmapPath = "" + try: + sBitmapPath = FileAccess.combinePaths(_xMSF, getTemplatePath(_xMSF), "/../wizard/bitmap") + except NoValidPathException, nopathexception: + pass + + return sBitmapPath + + @classmethod + def getWorkPath(self, _xMSF): + sWorkPath = "" + try: + sWorkPath = FileAccess.getOfficePath(_xMSF, "Work", "", "") + + except NoValidPathException, nopathexception: + pass + + return sWorkPath + + @classmethod + def createStringSubstitution(self, xMSF): + xPathSubst = None + try: + xPathSubst = xMSF.createInstance("com.sun.star.util.PathSubstitution") + except com.sun.star.uno.Exception, e: + e.printStackTrace() + + if xPathSubst != None: + return xPathSubst + else: + return None + + '''This method searches (and hopefully finds...) a frame + with a componentWindow. + It does it in three phases: + 1. Check if the given desktop argument has a componentWindow. + If it is null, the myFrame argument is taken. + 2. Go up the tree of frames and search a frame with a component window. + 3. Get from the desktop all the components, and give the first one + which has a frame. + @param xMSF + @param myFrame + @param desktop + @return + @throws NoSuchElementException + @throws WrappedTargetException + ''' + + @classmethod + def findAFrame(self, xMSF, myFrame, desktop): + if desktop == None: + desktop = myFrame + #we go up in the tree... + + while desktop != None and desktop.getComponentWindow() == None: + desktop = desktop.findFrame("_parent", FrameSearchFlag.PARENT) + if desktop == None: + e = Desktop.getDesktop(xMSF).getComponents().createEnumeration() + while e.hasMoreElements(): + xModel = (e.nextElement()).getObject() + xFrame = xModel.getCurrentController().getFrame() + if xFrame != None and xFrame.getComponentWindow() != None: + return xFrame + + return desktop diff --git a/wizards/com/sun/star/wizards/common/FileAccess.py b/wizards/com/sun/star/wizards/common/FileAccess.py new file mode 100644 index 000000000000..95f8646b1927 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/FileAccess.py @@ -0,0 +1,789 @@ +import traceback +from NoValidPathException import * +from com.sun.star.ucb import CommandAbortedException +from com.sun.star.uno import Exception as UnoException +import types + +''' +This class delivers static convenience methods +to use with ucb SimpleFileAccess service. +You can also instanciate the class, to encapsulate +some functionality of SimpleFileAccess. The instance +keeps a reference to an XSimpleFileAccess and an +XFileIdentifierConverter, saves the permanent +overhead of quering for those interfaces, and delivers +conveneince methods for using them. +These Convenince methods include mainly Exception-handling. +''' + +class FileAccess(object): + ''' + @param xMSF + @param sPath + @param sAddPath + ''' + + @classmethod + def addOfficePath(self, xMSF, sPath, sAddPath): + xSimpleFileAccess = None + ResultPath = getOfficePath(xMSF, sPath, xSimpleFileAccess) + # As there are several conventions about the look of Url (e.g. with " " or with "%20") you cannot make a + # simple String comparison to find out, if a path is already in "ResultPath" + PathList = JavaTools.ArrayoutofString(ResultPath, ";") + MaxIndex = PathList.length - 1 + CompAddPath = JavaTools.replaceSubString(sAddPath, "", "/") + i = 0 + while i <= MaxIndex: + CurPath = JavaTools.convertfromURLNotation(PathList[i]) + CompCurPath = JavaTools.replaceSubString(CurPath, "", "/") + if CompCurPath.equals(CompAddPath): + return + + i += 1 + ResultPath += ";" + sAddPath + return + + @classmethod + def deleteLastSlashfromUrl(self, _sPath): + if _sPath.endswith("/"): + return _sPath[:-1] + else: + return _sPath + + ''' + Further information on arguments value see in OO Developer Guide, + chapter 6.2.7 + @param xMSF + @param sPath + @param xSimpleFileAccess + @return the respective path of the office application. A probable following "/" at the end is trimmed. + ''' + + @classmethod + def getOfficePath(self, xMSF, sPath, xSimpleFileAccess): + try: + ResultPath = "" + xInterface = xMSF.createInstance("com.sun.star.util.PathSettings") + ResultPath = str(Helper.getUnoPropertyValue(xInterface, sPath)) + ResultPath = self.deleteLastSlashfromUrl(ResultPath) + return ResultPath + except UnoException, exception: + traceback.print_exc() + return "" + + ''' + Further information on arguments value see in OO Developer Guide, + chapter 6.2.7 + @param xMSF + @param sPath + @param sType use "share" or "user". Set to "" if not needed eg for the WorkPath; + In the return Officepath a possible slash at the end is cut off + @param sSearchDir + @return + @throws NoValidPathException + ''' + + @classmethod + def getOfficePath2(self, xMSF, sPath, sType, sSearchDir): + #This method currently only works with sPath="Template" + bexists = False + try: + xPathInterface = xMSF.createInstance("com.sun.star.util.PathSettings") + ResultPath = "" + ReadPaths = () + xUcbInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + Template_writable = xPathInterface.getPropertyValue(sPath + "_writable") + Template_internal = xPathInterface.getPropertyValue(sPath + "_internal") + Template_user = xPathInterface.getPropertyValue(sPath + "_user") + if type(Template_internal) is not types.InstanceType: + if isinstance(Template_internal,tuple): + ReadPaths = ReadPaths + Template_internal + else: + ReadPaths = ReadPaths + (Template_internal,) + if type(Template_user) is not types.InstanceType: + if isinstance(Template_user,tuple): + ReadPaths = ReadPaths + Template_user + else: + ReadPaths = ReadPaths + (Template_internal,) + ReadPaths = ReadPaths + (Template_writable,) + if sType.lower() == "user": + ResultPath = Template_writable + bexists = True + else: + #find right path using the search sub path + for i in ReadPaths: + tmpPath = i + sSearchDir + if xUcbInterface.exists(tmpPath): + ResultPath = i + bexists = True + break + + ResultPath = self.deleteLastSlashfromUrl(ResultPath) + except UnoException, exception: + traceback.print_exc() + ResultPath = "" + + if not bexists: + raise NoValidPathException (xMSF, ""); + + return ResultPath + + @classmethod + def getOfficePaths(self, xMSF, _sPath, sType, sSearchDir): + #This method currently only works with sPath="Template" + aPathList = [] + Template_writable = "" + try: + xPathInterface = xMSF.createInstance("com.sun.star.util.PathSettings") + Template_writable = xPathInterface.getPropertyValue(_sPath + "_writable") + Template_internal = xPathInterface.getPropertyValue(_sPath + "_internal") + Template_user = xPathInterface.getPropertyValue(_sPath + "_user") + i = 0 + while i < len(Template_internal): + sPath = Template_internal[i] + if sPath.startsWith("vnd."): + # if there exists a language in the directory, we try to add the right language + sPathToExpand = sPath.substring("vnd.sun.star.Expand:".length()) + xExpander = Helper.getMacroExpander(xMSF) + sPath = xExpander.expandMacros(sPathToExpand) + + sPath = checkIfLanguagePathExists(xMSF, sPath) + aPathList.add(sPath) + i += 1 + i = 0 + while i < Template_user.length: + aPathList.add(Template_user[i]) + i += 1 + aPathList.add(Template_writable) + + except UnoException, exception: + traceback.print_exc() + return aPathList + + @classmethod + def checkIfLanguagePathExists(self, _xMSF, _sPath): + try: + defaults = _xMSF.createInstance("com.sun.star.text.Defaults") + aLocale = Helper.getUnoStructValue(defaults, "CharLocale") + if aLocale == None: + java.util.Locale.getDefault() + aLocale = com.sun.star.lang.Locale.Locale() + aLocale.Country = java.util.Locale.getDefault().getCountry() + aLocale.Language = java.util.Locale.getDefault().getLanguage() + aLocale.Variant = java.util.Locale.getDefault().getVariant() + + sLanguage = aLocale.Language + sCountry = aLocale.Country + sVariant = aLocale.Variant + # de-DE-Bayrisch + aLocaleAll = StringBuffer.StringBuffer() + aLocaleAll.append(sLanguage).append('-').append(sCountry).append('-').append(sVariant) + sPath = _sPath + "/" + aLocaleAll.toString() + xInterface = _xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + if xInterface.exists(sPath): + # de-DE + return sPath + + aLocaleLang_Country = StringBuffer.StringBuffer() + aLocaleLang_Country.append(sLanguage).append('-').append(sCountry) + sPath = _sPath + "/" + aLocaleLang_Country.toString() + if xInterface.exists(sPath): + # de + return sPath + + aLocaleLang = StringBuffer.StringBuffer() + aLocaleLang.append(sLanguage) + sPath = _sPath + "/" + aLocaleLang.toString() + if xInterface.exists(sPath): + # the absolute default is en-US or en + return sPath + + sPath = _sPath + "/en-US" + if xInterface.exists(sPath): + return sPath + + sPath = _sPath + "/en" + if xInterface.exists(sPath): + return sPath + + except com.sun.star.uno.Exception, e: + pass + + return _sPath + + @classmethod + def combinePaths2(self, xMSF, _aFirstPath, _sSecondPath): + i = 0 + while i < _aFirstPath.size(): + sOnePath = _aFirstPath.get(i) + sOnePath = addPath(sOnePath, _sSecondPath) + if isPathValid(xMSF, sOnePath): + _aFirstPath.add(i, sOnePath) + _aFirstPath.remove(i + 1) + else: + _aFirstPath.remove(i) + i -= 1 + + i += 1 + + @classmethod + def isPathValid(self, xMSF, _sPath): + bExists = False + try: + xUcbInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + bExists = xUcbInterface.exists(_sPath) + except Exception, exception: + traceback.print_exc() + + return bExists + + @classmethod + def combinePaths(self, xMSF, _sFirstPath, _sSecondPath): + bexists = False + ReturnPath = "" + try: + xUcbInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + ReturnPath = _sFirstPath + _sSecondPath + bexists = xUcbInterface.exists(ReturnPath) + except Exception, exception: + traceback.print_exc() + return "" + + if not bexists: + raise NoValidPathException (xMSF, ""); + + return ReturnPath + + @classmethod + def createSubDirectory(self, xMSF, xSimpleFileAccess, Path): + sNoDirCreation = "" + try: + oResource = Resource.Resource_unknown(xMSF, "ImportWizard", "imp") + if oResource != None: + sNoDirCreation = oResource.getResText(1050) + sMsgDirNotThere = oResource.getResText(1051) + sQueryForNewCreation = oResource.getResText(1052) + OSPath = JavaTools.convertfromURLNotation(Path) + sQueryMessage = JavaTools.replaceSubString(sMsgDirNotThere, OSPath, "%1") + sQueryMessage = sQueryMessage + (char) + 13 + sQueryForNewCreation + icreate = SystemDialog.showMessageBox(xMSF, "QueryBox", VclWindowPeerAttribute.YES_NO, sQueryMessage) + if icreate == 2: + xSimpleFileAccess.createFolder(Path) + return True + + return False + except CommandAbortedException, exception: + sMsgNoDir = JavaTools.replaceSubString(sNoDirCreation, Path, "%1") + SystemDialog.showMessageBox(xMSF, "ErrorBox", VclWindowPeerAttribute.OK, sMsgNoDir) + return False + except com.sun.star.uno.Exception, unoexception: + sMsgNoDir = JavaTools.replaceSubString(sNoDirCreation, Path, "%1") + SystemDialog.showMessageBox(xMSF, "ErrorBox", VclWindowPeerAttribute.OK, sMsgNoDir) + return False + + # checks if the root of a path exists. if the parameter xWindowPeer is not null then also the directory is + # created when it does not exists and the user + + @classmethod + def PathisValid(self, xMSF, Path, sMsgFilePathInvalid, baskbeforeOverwrite): + try: + SubDirPath = "" + bSubDirexists = True + NewPath = Path + xInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + if baskbeforeOverwrite: + if xInterface.exists(Path): + oResource = Resource.Resource_unknown(xMSF, "ImportWizard", "imp") + sFileexists = oResource.getResText(1053) + NewString = JavaTools.convertfromURLNotation(Path) + sFileexists = JavaTools.replaceSubString(sFileexists, NewString, "<1>") + sFileexists = JavaTools.replaceSubString(sFileexists, String.valueOf(13), "<CR>") + iLeave = SystemDialog.showMessageBox(xMSF, "QueryBox", VclWindowPeerAttribute.YES_NO, sFileexists) + if iLeave == 3: + return False + + DirArray = JavaTools.ArrayoutofString(Path, "/") + MaxIndex = DirArray.length - 1 + if MaxIndex > 0: + i = MaxIndex + while i >= 0: + SubDir = DirArray[i] + SubLen = SubDir.length() + NewLen = NewPath.length() + RestLen = NewLen - SubLen + if RestLen > 0: + NewPath = NewPath.substring(0, NewLen - SubLen - 1) + if i == MaxIndex: + SubDirPath = NewPath + + bexists = xSimpleFileAccess.exists(NewPath) + if bexists: + LowerCasePath = NewPath.toLowerCase() + bexists = (((LowerCasePath.equals("file:#/")) or (LowerCasePath.equals("file:#")) or (LowerCasePath.equals("file:/")) or (LowerCasePath.equals("file:"))) == False) + + if bexists: + if bSubDirexists == False: + bSubDiriscreated = createSubDirectory(xMSF, xSimpleFileAccess, SubDirPath) + return bSubDiriscreated + + return True + else: + bSubDirexists = False + + i -= 1 + + SystemDialog.showMessageBox(xMSF, "ErrorBox", VclWindowPeerAttribute.OK, sMsgFilePathInvalid) + return False + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + SystemDialog.showMessageBox(xMSF, "ErrorBox", VclWindowPeerAttribute.OK, sMsgFilePathInvalid) + return False + + ''' + searches a directory for files which start with a certain + prefix, and returns their URLs and document-titles. + @param xMSF + @param FilterName the prefix of the filename. a "-" is added to the prefix ! + @param FolderName the folder (URL) to look for files... + @return an array with two array members. The first one, with document titles, + the second with the corresponding URLs. + @deprecated please use the getFolderTitles() with ArrayList + ''' + + @classmethod + def getFolderTitles(self, xMSF, FilterName, FolderName): + LocLayoutFiles = [[2],[]] + try: + TitleVector = None + NameVector = None + xDocInterface = xMSF.createInstance("com.sun.star.document.DocumentProperties") + xInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + nameList = xInterface.getFolderContents(FolderName, False) + TitleVector = [] + NameVector = [len(nameList)] + if FilterName == None or FilterName == "": + FilterName = None + else: + FilterName = FilterName + "-" + fileName = "" + for i in nameList: + fileName = self.getFilename(i) + if FilterName == None or fileName.startswith(FilterName): + xDocInterface.loadFromMedium(i, tuple()) + NameVector.append(i) + TitleVector.append(xDocInterface.Title) + + LocLayoutFiles[1] = NameVector + LocLayoutFiles[0] = TitleVector + #COMMENTED + #JavaTools.bubblesortList(LocLayoutFiles) + except Exception, exception: + traceback.print_exc() + + return LocLayoutFiles + + ''' + We search in all given path for a given file + @param _sPath + @param _sPath2 + @return + ''' + + @classmethod + def addPath(self, _sPath, _sPath2): + if not _sPath.endsWith("/"): + _sPath += "/" + + if _sPath2.startsWith("/"): + _sPath2 = _sPath2.substring(1) + + sNewPath = _sPath + _sPath2 + return sNewPath + + @classmethod + def getPathFromList(self, xMSF, _aList, _sFile): + sFoundFile = "" + try: + xInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + i = 0 + while i < _aList.size(): + sPath = _aList.get(i) + sPath = addPath(sPath, _sFile) + if xInterface.exists(sPath): + sFoundFile = sPath + + i += 1 + except com.sun.star.uno.Exception, e: + pass + + return sFoundFile + + @classmethod + def getTitle(self, xMSF, _sFile): + sTitle = "" + try: + xDocInterface = xMSF.createInstance("com.sun.star.document.DocumentProperties") + noArgs = [] + xDocInterface.loadFromMedium(_sFile, noArgs) + sTitle = xDocInterface.getTitle() + except Exception, e: + traceback.print_exc() + + return sTitle + + @classmethod + def getFolderTitles2(self, xMSF, _sStartFilterName, FolderName, _sEndFilterName=""): + LocLayoutFiles = [[2],[]] + if FolderName.size() == 0: + raise NoValidPathException (None, "Path not given."); + + TitleVector = [] + URLVector = [] + xInterface = None + try: + xInterface = xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + except com.sun.star.uno.Exception, e: + traceback.print_exc() + raise NoValidPathException (None, "Internal error."); + + j = 0 + while j < FolderName.size(): + sFolderName = FolderName.get(j) + try: + nameList = xInterface.getFolderContents(sFolderName, False) + if _sStartFilterName == None or _sStartFilterName.equals(""): + _sStartFilterName = None + else: + _sStartFilterName = _sStartFilterName + "-" + + fileName = "" + i = 0 + while i < nameList.length: + fileName = self.getFilename(i) + if _sStartFilterName == None or fileName.startsWith(_sStartFilterName): + if _sEndFilterName.equals(""): + sTitle = getTitle(xMSF, nameList[i]) + elif fileName.endsWith(_sEndFilterName): + fileName = fileName.replaceAll(_sEndFilterName + "$", "") + sTitle = fileName + else: + # no or wrong (start|end) filter + continue + + URLVector.add(nameList[i]) + TitleVector.add(sTitle) + + i += 1 + except CommandAbortedException, exception: + traceback.print_exc() + except com.sun.star.uno.Exception, e: + pass + + j += 1 + LocNameList = [URLVector.size()] + LocTitleList = [TitleVector.size()] + # LLA: we have to check if this works + URLVector.toArray(LocNameList) + + TitleVector.toArray(LocTitleList) + + LocLayoutFiles[1] = LocNameList + LocLayoutFiles[0] = LocTitleList + + #COMMENTED + #JavaTools.bubblesortList(LocLayoutFiles); + return LocLayoutFiles + + def __init__(self, xmsf): + #get a simple file access... + self.fileAccess = xmsf.createInstance("com.sun.star.ucb.SimpleFileAccess") + #get the file identifier converter + self.filenameConverter = xmsf.createInstance("com.sun.star.ucb.FileContentProvider") + + def getURL(self, parentPath, childPath): + parent = self.filenameConverter.getSystemPathFromFileURL(parentPath) + f = File.File_unknown(parent, childPath) + r = self.filenameConverter.getFileURLFromSystemPath(parentPath, f.getAbsolutePath()) + return r + + def getURL(self, path): + f = File.File_unknown(path) + r = self.filenameConverter.getFileURLFromSystemPath(path, f.getAbsolutePath()) + return r + + def getPath(self, parentURL, childURL): + string = "" + if childURL is not None and childURL is not "": + string = "/" + childURL + return self.filenameConverter.getSystemPathFromFileURL(parentURL + string) + + ''' + @author rpiterman + @param filename + @return the extension of the given filename. + ''' + + @classmethod + def getExtension(self, filename): + p = filename.indexOf(".") + if p == -1: + return "" + else: + while p > -1: + filename = filename.substring(p + 1) + p = filename.indexOf(".") + + return filename + + ''' + @author rpiterman + @param s + @return + ''' + + def mkdir(self, s): + try: + self.fileAccess.createFolder(s) + return True + except CommandAbortedException, cax: + traceback.print_exc() + except com.sun.star.uno.Exception, ex: + traceback.print_exc() + + return False + + ''' + @author rpiterman + @param filename + @param def what to return in case of an exception + @return true if the given file exists or not. + if an exception accures, returns the def value. + ''' + + def exists(self, filename, defe): + try: + return self.fileAccess.exists(filename) + except CommandAbortedException, cax: + pass + except com.sun.star.uno.Exception, ex: + pass + + return defe + + ''' + @author rpiterman + @param filename + @return + ''' + + def isDirectory(self, filename): + try: + return self.fileAccess.isFolder(filename) + except CommandAbortedException, cax: + pass + except com.sun.star.uno.Exception, ex: + pass + + return False + + ''' + lists the files in a given directory + @author rpiterman + @param dir + @param includeFolders + @return + ''' + + def listFiles(self, dir, includeFolders): + try: + return self.fileAccess.getFolderContents(dir, includeFolders) + except CommandAbortedException, cax: + pass + except com.sun.star.uno.Exception, ex: + pass + + return range(0) + + ''' + @author rpiterman + @param file + @return + ''' + + def delete(self, file): + try: + self.fileAccess.kill(file) + return True + except CommandAbortedException, cax: + traceback.print_exc() + except com.sun.star.uno.Exception, ex: + traceback.print_exc() + + return False + + + ''' + return the filename out of a system-dependent path + @param path + @return + ''' + + @classmethod + def getPathFilename(self, path): + return self.getFilename(path, File.separator) + + ''' + @author rpiterman + @param path + @param pathSeparator + @return + ''' + + @classmethod + def getFilename(self, path, pathSeparator = "/"): + return path.split(pathSeparator)[-1] + + @classmethod + def getBasename(self, path, pathSeparator): + filename = self.getFilename(path, pathSeparator) + sExtension = getExtension(filename) + basename = filename.substring(0, filename.length() - (sExtension.length() + 1)) + return basename + + ''' + @author rpiterman + @param source + @param target + @return + ''' + + def copy(self, source, target): + try: + self.fileAccess.copy(source, target) + return True + except CommandAbortedException, cax: + pass + except com.sun.star.uno.Exception, ex: + pass + + return False + + def getLastModified(self, url): + try: + return self.fileAccess.getDateTimeModified(url) + except CommandAbortedException, cax: + pass + except com.sun.star.uno.Exception, ex: + pass + + return None + + ''' + @param url + @return the parent dir of the given url. + if the path points to file, gives the directory in which the file is. + ''' + + @classmethod + def getParentDir(self, url): + if url.endsWith("/"): + return getParentDir(url.substring(0, url.length() - 1)) + + pos = url.indexOf("/", pos + 1) + lastPos = 0 + while pos > -1: + lastPos = pos + pos = url.indexOf("/", pos + 1) + return url.substring(0, lastPos) + + def createNewDir(self, parentDir, name): + s = getNewFile(parentDir, name, "") + if mkdir(s): + return s + else: + return None + + def getNewFile(self, parentDir, name, extension): + i = 0 + tmp_do_var2 = True + while tmp_do_var2: + filename = filename(name, extension, (i + 1)) + u = getURL(parentDir, filename) + url = u + tmp_do_var2 = exists(url, True) + return url + + @classmethod + def filename(self, name, ext, i): + stringI = "" + stringExt = "" + if i is not 0: + stringI = str(i) + if ext is not "": + stringExt = "." + ext + + return name + stringI + StringExt + + def getSize(self, url): + try: + return self.fileAccess.getSize(url) + except Exception, ex: + return -1 + + @classmethod + def connectURLs(self, urlFolder, urlFilename): + stringFolder = "" + stringFileName = urlFilename + if not urlFolder.endsWith("/"): + stringFolder = "/" + if urlFilename.startsWith("/"): + stringFileName = urlFilename.substring(1) + return urlFolder + stringFolder + stringFileName + + @classmethod + def getDataFromTextFile(self, _xMSF, _filepath): + sFileData = None + try: + oDataVector = [] + oSimpleFileAccess = _xMSF.createInstance("com.sun.star.ucb.SimpleFileAccess") + if oSimpleFileAccess.exists(_filepath): + xInputStream = oSimpleFileAccess.openFileRead(_filepath) + oTextInputStream = _xMSF.createInstance("com.sun.star.io.TextInputStream") + oTextInputStream.setInputStream(xInputStream) + while not oTextInputStream.isEOF(): + oDataVector.addElement(oTextInputStream.readLine()) + oTextInputStream.closeInput() + sFileData = [oDataVector.size()] + oDataVector.toArray(sFileData) + + except Exception, e: + traceback.print_exc() + + return sFileData + + ''' + shortens a filename to a user displayable representation. + @param path + @param maxLength + @return + ''' + + @classmethod + def getShortFilename(self, path, maxLength): + firstPart = 0 + if path.length() > maxLength: + if path.startsWith("/"): + # unix + nextSlash = path.indexOf("/", 1) + 1 + firstPart = Math.min(nextSlash, (maxLength - 3) / 2) + else: + #windows + firstPart = Math.min(10, (maxLength - 3) / 2) + + s1 = path.substring(0, firstPart) + s2 = path.substring(path.length() - (maxLength - (3 + firstPart))) + return s1 + "..." + s2 + else: + return path + diff --git a/wizards/com/sun/star/wizards/common/HelpIds.py b/wizards/com/sun/star/wizards/common/HelpIds.py new file mode 100644 index 000000000000..ff939c3faf33 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/HelpIds.py @@ -0,0 +1,1013 @@ +class HelpIds: + array1 = [ + "HID:WIZARDS_HID0_WEBWIZARD", # HID:34200 + "HID:WIZARDS_HID0_HELP", # HID:34201 + "HID:WIZARDS_HID0_NEXT", # HID:34202 + "HID:WIZARDS_HID0_PREV", # HID:34203 + "HID:WIZARDS_HID0_CREATE", # HID:34204 + "HID:WIZARDS_HID0_CANCEL", # HID:34205 + "HID:WIZARDS_HID0_STATUS_DIALOG", # HID:34206 + "HID:WIZARDS_HID1_LST_SESSIONS", # HID:34207 + "", + "HID:WIZARDS_HID1_BTN_DEL_SES", # HID:34209 + "HID:WIZARDS_HID2_LST_DOCS", # HID:34210 + "HID:WIZARDS_HID2_BTN_ADD_DOC", # HID:34211 + "HID:WIZARDS_HID2_BTN_REM_DOC", # HID:34212 + "HID:WIZARDS_HID2_BTN_DOC_UP", # HID:34213 + "HID:WIZARDS_HID2_BTN_DOC_DOWN", # HID:34214 + "HID:WIZARDS_HID2_TXT_DOC_TITLE", # HID:34215 + "HID:WIZARDS_HID2_TXT_DOC_DESC", # HID:34216 + "HID:WIZARDS_HID2_TXT_DOC_AUTHOR", # HID:34217 + "HID:WIZARDS_HID2_LST_DOC_EXPORT", # HID:34218 + "HID:WIZARDS_HID2_STATUS_ADD_DOCS", # HID:34219 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG1", # HID:34220 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG2", # HID:34221 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG3", # HID:34222 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG4", # HID:34223 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG5", # HID:34224 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG6", # HID:34225 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG7", # HID:34226 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG8", # HID:34227 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG9", # HID:34228 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG10", # HID:34229 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG11", # HID:34230 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG12", # HID:34231 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG13", # HID:34232 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG14", # HID:34233 + "HID:WIZARDS_HID3_IL_LAYOUTS_IMG15", # HID:34234 + "HID:WIZARDS_HID4_CHK_DISPLAY_FILENAME", # HID:34235 + "HID:WIZARDS_HID4_CHK_DISPLAY_DESCRIPTION", # HID:34236 + "HID:WIZARDS_HID4_CHK_DISPLAY_AUTHOR", # HID:34237 + "HID:WIZARDS_HID4_CHK_DISPLAY_CR_DATE", # HID:34238 + "HID:WIZARDS_HID4_CHK_DISPLAY_UP_DATE", # HID:34239 + "HID:WIZARDS_HID4_CHK_DISPLAY_FORMAT", # HID:34240 + "HID:WIZARDS_HID4_CHK_DISPLAY_F_ICON", # HID:34241 + "HID:WIZARDS_HID4_CHK_DISPLAY_PAGES", # HID:34242 + "HID:WIZARDS_HID4_CHK_DISPLAY_SIZE", # HID:34243 + "HID:WIZARDS_HID4_GRP_OPTIMAIZE_640", # HID:34244 + "HID:WIZARDS_HID4_GRP_OPTIMAIZE_800", # HID:34245 + "HID:WIZARDS_HID4_GRP_OPTIMAIZE_1024", # HID:34246 + "HID:WIZARDS_HID5_LST_STYLES", # HID:34247 + "HID:WIZARDS_HID5_BTN_BACKGND", # HID:34248 + "HID:WIZARDS_HID5_BTN_ICONS", # HID:34249 + "HID:WIZARDS_HID6_TXT_SITE_TITLE", # HID:34250 + "", + "", + "HID:WIZARDS_HID6_TXT_SITE_DESC", # HID:34253 + "", + "HID:WIZARDS_HID6_DATE_SITE_CREATED", # HID:34255 + "HID:WIZARDS_HID6_DATE_SITE_UPDATED", # HID:34256 + "", + "HID:WIZARDS_HID6_TXT_SITE_EMAIL", # HID:34258 + "HID:WIZARDS_HID6_TXT_SITE_COPYRIGHT", # HID:34259 + "HID:WIZARDS_HID7_BTN_PREVIEW", # HID:34260 + "HID:WIZARDS_HID7_CHK_PUBLISH_LOCAL", # HID:34261 + "HID:WIZARDS_HID7_TXT_LOCAL", # HID:34262 + "HID:WIZARDS_HID7_BTN_LOCAL", # HID:34263 + "HID:WIZARDS_HID7_CHK_PUBLISH_ZIP", # HID:34264 + "HID:WIZARDS_HID7_TXT_ZIP", # HID:34265 + "HID:WIZARDS_HID7_BTN_ZIP", # HID:34266 + "HID:WIZARDS_HID7_CHK_PUBLISH_FTP", # HID:34267 + "HID:WIZARDS_HID7_TXT_FTP", # HID:34268 + "HID:WIZARDS_HID7_BTN_FTP", # HID:34269 + "HID:WIZARDS_HID7_CHK_SAVE", # HID:34270 + "HID:WIZARDS_HID7_TXT_SAVE", # HID:34271 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_BG", # HID:34290 + "HID:WIZARDS_HID_BG_BTN_OTHER", # HID:34291 + "HID:WIZARDS_HID_BG_BTN_NONE", # HID:34292 + "HID:WIZARDS_HID_BG_BTN_OK", # HID:34293 + "HID:WIZARDS_HID_BG_BTN_CANCEL", # HID:34294 + "HID:WIZARDS_HID_BG_BTN_BACK", # HID:34295 + "HID:WIZARDS_HID_BG_BTN_FW", # HID:34296 + "HID:WIZARDS_HID_BG_BTN_IMG1", # HID:34297 + "HID:WIZARDS_HID_BG_BTN_IMG2", # HID:34298 + "HID:WIZARDS_HID_BG_BTN_IMG3", # HID:34299 + "HID:WIZARDS_HID_BG_BTN_IMG4", # HID:34300 + "HID:WIZARDS_HID_BG_BTN_IMG5", # HID:34301 + "HID:WIZARDS_HID_BG_BTN_IMG6", # HID:34302 + "HID:WIZARDS_HID_BG_BTN_IMG7", # HID:34303 + "HID:WIZARDS_HID_BG_BTN_IMG8", # HID:34304 + "HID:WIZARDS_HID_BG_BTN_IMG9", # HID:34305 + "HID:WIZARDS_HID_BG_BTN_IMG10", # HID:34306 + "HID:WIZARDS_HID_BG_BTN_IMG11", # HID:34307 + "HID:WIZARDS_HID_BG_BTN_IMG12", # HID:34308 + "HID:WIZARDS_HID_BG_BTN_IMG13", # HID:34309 + "HID:WIZARDS_HID_BG_BTN_IMG14", # HID:34300 + "HID:WIZARDS_HID_BG_BTN_IMG15", # HID:34311 + "HID:WIZARDS_HID_BG_BTN_IMG16", # HID:34312 + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGREPORT_DIALOG", # HID:34320 + "", + "HID:WIZARDS_HID_DLGREPORT_0_CMDPREV", # HID:34322 + "HID:WIZARDS_HID_DLGREPORT_0_CMDNEXT", # HID:34323 + "HID:WIZARDS_HID_DLGREPORT_0_CMDFINISH", # HID:34324 + "HID:WIZARDS_HID_DLGREPORT_0_CMDCANCEL", # HID:34325 + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGREPORT_1_LBTABLES", # HID:34330 + "HID:WIZARDS_HID_DLGREPORT_1_FIELDSAVAILABLE", # HID:34331 + "HID:WIZARDS_HID_DLGREPORT_1_CMDMOVESELECTED", # HID:34332 + "HID:WIZARDS_HID_DLGREPORT_1_CMDMOVEALL", # HID:34333 + "HID:WIZARDS_HID_DLGREPORT_1_CMDREMOVESELECTED", # HID:34334 + "HID:WIZARDS_HID_DLGREPORT_1_CMDREMOVEALL", # HID:34335 + "HID:WIZARDS_HID_DLGREPORT_1_FIELDSSELECTED", # HID:34336 + "HID:WIZARDS_HID_DLGREPORT_1_CMDMOVEUP", # HID:34337 + "HID:WIZARDS_HID_DLGREPORT_1_CMDMOVEDOWN", # HID:34338 + "", + "HID:WIZARDS_HID_DLGREPORT_2_GROUPING", # HID:34340 + "HID:WIZARDS_HID_DLGREPORT_2_CMDGROUP", # HID:34341 + "HID:WIZARDS_HID_DLGREPORT_2_CMDUNGROUP", # HID:34342 + "HID:WIZARDS_HID_DLGREPORT_2_PREGROUPINGDEST", # HID:34343 + "HID:WIZARDS_HID_DLGREPORT_2_CMDMOVEUPGROUP", # HID:34344 + "HID:WIZARDS_HID_DLGREPORT_2_CMDMOVEDOWNGROUP", # HID:34345 + "HID:WIZARDS_HID_DLGREPORT_3_SORT1", # HID:34346 + "HID:WIZARDS_HID_DLGREPORT_3_OPTASCEND1", # HID:34347 + "HID:WIZARDS_HID_DLGREPORT_3_OPTDESCEND1", # HID:34348 + "HID:WIZARDS_HID_DLGREPORT_3_SORT2", # HID:34349 + "HID:WIZARDS_HID_DLGREPORT_3_OPTASCEND2", # HID:34350 + "HID:WIZARDS_HID_DLGREPORT_3_OPTDESCEND2", # HID:34351 + "HID:WIZARDS_HID_DLGREPORT_3_SORT3", # HID:34352 + "HID:WIZARDS_HID_DLGREPORT_3_OPTASCEND3", # HID:34353 + "HID:WIZARDS_HID_DLGREPORT_3_OPTDESCEND3", # HID:34354 + "HID:WIZARDS_HID_DLGREPORT_3_SORT4", # HID:34355 + "HID:WIZARDS_HID_DLGREPORT_3_OPTASCEND4", # HID:34356 + "HID:WIZARDS_HID_DLGREPORT_3_OPTDESCEND4", # HID:34357 + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGREPORT_4_TITLE", # HID:34362 + "HID:WIZARDS_HID_DLGREPORT_4_DATALAYOUT", # HID:34363 + "HID:WIZARDS_HID_DLGREPORT_4_PAGELAYOUT", # HID:34364 + "HID:WIZARDS_HID_DLGREPORT_4_LANDSCAPE", # HID:34365 + "HID:WIZARDS_HID_DLGREPORT_4_PORTRAIT", # HID:34366 + "", + "", + "", + "HID:WIZARDS_HID_DLGREPORT_5_OPTDYNTEMPLATE", # HID:34370 + "HID:WIZARDS_HID_DLGREPORT_5_OPTSTATDOCUMENT", # HID:34371 + "HID:WIZARDS_HID_DLGREPORT_5_TXTTEMPLATEPATH", # HID:34372 + "HID:WIZARDS_HID_DLGREPORT_5_CMDTEMPLATEPATH", # HID:34373 + "HID:WIZARDS_HID_DLGREPORT_5_OPTEDITTEMPLATE", # HID:34374 + "HID:WIZARDS_HID_DLGREPORT_5_OPTUSETEMPLATE", # HID:34375 + "HID:WIZARDS_HID_DLGREPORT_5_TXTDOCUMENTPATH", # HID:34376 + "HID:WIZARDS_HID_DLGREPORT_5_CMDDOCUMENTPATH", # HID:34377 + "HID:WIZARDS_HID_DLGREPORT_5_CHKLINKTODB", # HID:34378 + "", + "", + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_1", # HID:34381 + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_2", # HID:34382 + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_3", # HID:34383 + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_4", # HID:34384 + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_5", # HID:34385 + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_6", # HID:34386 + "HID:WIZARDS_HID_DLGREPORT_6_TXTTITLE_7", # HID:34387 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGFORM_DIALOG", # HID:34400 + "", + "HID:WIZARDS_HID_DLGFORM_CMDPREV", # HID:34402 + "HID:WIZARDS_HID_DLGFORM_CMDNEXT", # HID:34403 + "HID:WIZARDS_HID_DLGFORM_CMDFINISH", # HID:34404 + "HID:WIZARDS_HID_DLGFORM_CMDCANCEL", # HID:34405 + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGFORM_MASTER_LBTABLES", # HID:34411 + "HID:WIZARDS_HID_DLGFORM_MASTER_FIELDSAVAILABLE", # HID:34412 + "HID:WIZARDS_HID_DLGFORM_MASTER_CMDMOVESELECTED", # HID:34413 + "HID:WIZARDS_HID_DLGFORM_MASTER_CMDMOVEALL", # HID:34414 + "HID:WIZARDS_HID_DLGFORM_MASTER_CMDREMOVESELECTED", # HID:34415 + "HID:WIZARDS_HID_DLGFORM_MASTER_CMDREMOVEALL", # HID:34416 + "HID:WIZARDS_HID_DLGFORM_MASTER_FIELDSSELECTED", # HID:34417 + "HID:WIZARDS_HID_DLGFORM_MASTER_CMDMOVEUP", # HID:34418 + "HID:WIZARDS_HID_DLGFORM_MASTER_CMDMOVEDOWN", # HID:34419 + "", + "HID:WIZARDS_HID_DLGFORM_CHKCREATESUBFORM", # HID:34421 + "HID:WIZARDS_HID_DLGFORM_OPTONEXISTINGRELATION", # HID:34422 + "HID:WIZARDS_HID_DLGFORM_OPTSELECTMANUALLY", # HID:34423 + "HID:WIZARDS_HID_DLGFORM_lstRELATIONS", # HID:34424 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGFORM_SUB_LBTABLES", # HID:34431 + "HID:WIZARDS_HID_DLGFORM_SUB_FIELDSAVAILABLE", # HID:34432 + "HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVESELECTED", # HID:34433 + "HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVEALL", # HID:34434 + "HID:WIZARDS_HID_DLGFORM_SUB_CMDREMOVESELECTED", # HID:34435 + "HID:WIZARDS_HID_DLGFORM_SUB_CMDREMOVEALL", # HID:34436 + "HID:WIZARDS_HID_DLGFORM_SUB_FIELDSSELECTED", # HID:34437 + "HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVEUP", # HID:34438 + "HID:WIZARDS_HID_DLGFORM_SUB_CMDMOVEDOWN", # HID:34439 + "", + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTSLAVELINK1", # HID:34441 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTMASTERLINK1", # HID:34442 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTSLAVELINK2", # HID:34443 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTMASTERLINK2", # HID:34444 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTSLAVELINK3", # HID:34445 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTMASTERLINK3", # HID:34446 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTSLAVELINK4", # HID:34447 + "HID:WIZARDS_HID_DLGFORM_LINKER_LSTMASTERLINK4", # HID:34448 + "", + "", + "HID:WIZARDS_HID_DLGFORM_CMDALIGNLEFT", # HID:34451 + "HID:WIZARDS_HID_DLGFORM_CMDALIGNRIGHT", # HID:34452 + "HID:WIZARDS_HID_DLGFORM_CMDLEFTLABELED", # HID:34453 + "HID:WIZARDS_HID_DLGFORM_CMDTOPLABELED", # HID:34454 + "HID:WIZARDS_HID_DLGFORM_CMDTABLESTYLE", # HID:34455 + "HID:WIZARDS_HID_DLGFORM_CMDTOPJUSTIFIED", # HID:34456 + "HID:WIZARDS_HID_DLGFORM_CMDLEFTLABELED2", # HID:34457 + "HID:WIZARDS_HID_DLGFORM_CMDTOPLABELED2", # HID:34458 + "HID:WIZARDS_HID_DLGFORM_CMDTABLESTYLE2", # HID:34459 + "HID:WIZARDS_HID_DLGFORM_CMDTOPJUSTIFIED2", # HID:34460 + "HID:WIZARDS_HID_DLGFORM_OPTNEWDATAONLY", # HID:34461 + "HID:WIZARDS_HID_DLGFORM_OPTDISPLAYALLDATA", # HID:34462 + "HID:WIZARDS_HID_DLGFORM_CHKNOMODIFICATION", # HID:34463 + "HID:WIZARDS_HID_DLGFORM_CHKNODELETION", # HID:34464 + "HID:WIZARDS_HID_DLGFORM_CHKNOADDITION", # HID:34465 + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGFORM_LSTSTYLES", # HID:34471 + "HID:WIZARDS_HID_DLGFORM_CMDNOBORDER", # HID:34472 + "HID:WIZARDS_HID_DLGFORM_CMD3DBORDER", # HID:34473 + "HID:WIZARDS_HID_DLGFORM_CMDSIMPLEBORDER", # HID:34474 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGFORM_TXTPATH", # HID:34481 + "HID:WIZARDS_HID_DLGFORM_OPTWORKWITHFORM", # HID:34482 + "HID:WIZARDS_HID_DLGFORM_OPTMODIFYFORM", # HID:34483 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGNEWSLTR_DIALOG", # HID:34500 + "HID:WIZARDS_HID_DLGNEWSLTR_OPTSTANDARDLAYOUT", # HID:34501 + "HID:WIZARDS_HID_DLGNEWSLTR_OPTPARTYLAYOUT", # HID:34502 + "HID:WIZARDS_HID_DLGNEWSLTR_OPTBROCHURELAYOUT", # HID:34503 + "HID:WIZARDS_HID_DLGNEWSLTR_OPTSINGLESIDED", # HID:34504 + "HID:WIZARDS_HID_DLGNEWSLTR_OPTDOUBLESIDED", # HID:34505 + "HID:WIZARDS_HID_DLGNEWSLTR_CMDGOON", # HID:34506 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGDEPOT_DIALOG_SELLBUY", # HID:34520 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTSTOCKID_SELLBUY", # HID:34521 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTQUANTITY", # HID:34522 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTRATE", # HID:34523 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTDATE", # HID:34524 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTCOMMISSION", # HID:34525 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTFIX", # HID:34526 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTMINIMUM", # HID:34527 + "HID:WIZARDS_HID_DLGDEPOT_0_CMDCANCEL_SELLBUY", # HID:34528 + "HID:WIZARDS_HID_DLGDEPOT_0_CMDGOON_SELLBUY", # HID:34529 + "HID:WIZARDS_HID_DLGDEPOT_1_LSTSELLSTOCKS", # HID:34530 + "HID:WIZARDS_HID_DLGDEPOT_2_LSTBUYSTOCKS", # HID:34531 + "HID:WIZARDS_HID_DLGDEPOT_DIALOG_SPLIT", # HID:34532 + "HID:WIZARDS_HID_DLGDEPOT_0_LSTSTOCKNAMES", # HID:34533 + "HID:WIZARDS_HID_DLGDEPOT_0_TXTSTOCKID_SPLIT", # HID:34534 + "HID:WIZARDS_HID_DLGDEPOT_0_CMDCANCEL_SPLIT", # HID:34535 + "HID:WIZARDS_HID_DLGDEPOT_0_CMDGOON_SPLIT", # HID:34536 + "HID:WIZARDS_HID_DLGDEPOT_1_OPTPERSHARE", # HID:34537 + "HID:WIZARDS_HID_DLGDEPOT_1_OPTTOTAL", # HID:34538 + "HID:WIZARDS_HID_DLGDEPOT_1_TXTDIVIDEND", # HID:34539 + "HID:WIZARDS_HID_DLGDEPOT_2_TXTOLDRATE", # HID:34540 + "HID:WIZARDS_HID_DLGDEPOT_2_TXTNEWRATE", # HID:34541 + "HID:WIZARDS_HID_DLGDEPOT_2_TXTDATE", # HID:34542 + "HID:WIZARDS_HID_DLGDEPOT_3_TXTSTARTDATE", # HID:34543 + "HID:WIZARDS_HID_DLGDEPOT_3_TXTENDDATE", # HID:34544 + "HID:WIZARDS_HID_DLGDEPOT_3_OPTDAILY", # HID:34545 + "HID:WIZARDS_HID_DLGDEPOT_3_OPTWEEKLY", # HID:34546 + "HID:WIZARDS_HID_DLGDEPOT_DIALOG_HISTORY", # HID:34547 + "HID:WIZARDS_HID_DLGDEPOT_LSTMARKETS", # HID:34548 + "HID:WIZARDS_HID_DLGDEPOT_0_CMDCANCEL_HISTORY", # HID:34549 + "HID:WIZARDS_HID_DLGDEPOT_0_CMDGOON_HISTORY", # HID:34550 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGIMPORT_DIALOG", # HID:34570 + "HID:WIZARDS_HID_DLGIMPORT_0_CMDHELP", # HID:34571 + "HID:WIZARDS_HID_DLGIMPORT_0_CMDCANCEL", # HID:34572 + "HID:WIZARDS_HID_DLGIMPORT_0_CMDPREV", # HID:34573 + "HID:WIZARDS_HID_DLGIMPORT_0_CMDNEXT", # HID:34574 + "HID:WIZARDS_HID_DLGIMPORT_0_OPTSODOCUMENTS", # HID:34575 + "HID:WIZARDS_HID_DLGIMPORT_0_OPTMSDOCUMENTS", # HID:34576 + "HID:WIZARDS_HID_DLGIMPORT_0_CHKLOGFILE", # HID:34577 + "HID:WIZARDS_HID_DLGIMPORT_2_CHKWORD", # HID:34578 + "HID:WIZARDS_HID_DLGIMPORT_2_CHKEXCEL", # HID:34579 + "HID:WIZARDS_HID_DLGIMPORT_2_CHKPOWERPOINT", # HID:34580 + "HID:WIZARDS_HID_DLGIMPORT_2_CBTEMPLATE", # HID:34581 + "HID:WIZARDS_HID_DLGIMPORT_2_CBTEMPLATERECURSE", # HID:34582 + "HID:WIZARDS_HID_DLGIMPORT_2_LBTEMPLATEPATH", # HID:34583 + "HID:WIZARDS_HID_DLGIMPORT_2_EDTEMPLATEPATH", # HID:34584 + "HID:WIZARDS_HID_DLGIMPORT_2_CMDTEMPLATEPATHSELECT", # HID:34585 + "HID:WIZARDS_HID_DLGIMPORT_2_CBDOCUMENT", # HID:34586 + "HID:WIZARDS_HID_DLGIMPORT_2_CBDOCUMENTRECURSE", # HID:34587 + "HID:WIZARDS_HID_DLGIMPORT_2_LBDOCUMENTPATH", # HID:34588 + "HID:WIZARDS_HID_DLGIMPORT_2_EDDOCUMENTPATH", # HID:34589 + "HID:WIZARDS_HID_DLGIMPORT_2_CMDDOCUMENTPATHSELECT", # HID:34590 + "HID:WIZARDS_HID_DLGIMPORT_2_LBEXPORTDOCUMENTPATH", # HID:34591 + "HID:WIZARDS_HID_DLGIMPORT_2_EDEXPORTDOCUMENTPATH", # HID:34592 + "HID:WIZARDS_HID_DLGIMPORT_2_CMDEXPORTPATHSELECT", # HID:34593 + "", + "HID:WIZARDS_HID_DLGIMPORT_3_TBSUMMARY", # HID:34595 + "HID:WIZARDS_HID_DLGIMPORT_0_CHKWRITER", # HID:34596 + "HID:WIZARDS_HID_DLGIMPORT_0_CHKCALC", # HID:34597 + "HID:WIZARDS_HID_DLGIMPORT_0_CHKIMPRESS", # HID:34598 + "HID:WIZARDS_HID_DLGIMPORT_0_CHKMATHGLOBAL", # HID:34599 + "HID:WIZARDS_HID_DLGIMPORT_2_CMDTEMPLATEPATHSELECT2", # HID:34600 + "HID:WIZARDS_HID_DLGIMPORT_2_CMDDOCUMENTPATHSELECT2", # HID:34601 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGCORRESPONDENCE_DIALOG", # HID:34630 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_CANCEL", # HID:34631 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_OPTIONAGENDA1", # HID:34632 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_OPTIONAGENDA2", # HID:34633 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_AGENDAOKAY", # HID:34634 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_OPTIONLETTER1", # HID:34635 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_OPTIONLETTER2", # HID:34636 + "HID:WIZARDS_HID_DLGCORRESPONDENCE_LETTEROKAY", # HID:34637 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGSTYLES_DIALOG", # HID:34650 + "HID:WIZARDS_HID_DLGSTYLES_LISTBOX", # HID:34651 + "HID:WIZARDS_HID_DLGSTYLES_CANCEL", # HID:34652 + "HID:WIZARDS_HID_DLGSTYLES_OKAY", # HID:34653 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGCONVERT_DIALOG", # HID:34660 + "HID:WIZARDS_HID_DLGCONVERT_CHECKBOX1", # HID:34661 + "HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON1", # HID:34662 + "HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON2", # HID:34663 + "HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON3", # HID:34664 + "HID:WIZARDS_HID_DLGCONVERT_OPTIONBUTTON4", # HID:34665 + "HID:WIZARDS_HID_DLGCONVERT_LISTBOX1", # HID:34666 + "HID:WIZARDS_HID_DLGCONVERT_OBFILE", # HID:34667 + "HID:WIZARDS_HID_DLGCONVERT_OBDIR", # HID:34668 + "HID:WIZARDS_HID_DLGCONVERT_COMBOBOX1", # HID:34669 + "HID:WIZARDS_HID_DLGCONVERT_TBSOURCE", # HID:34670 + "HID:WIZARDS_HID_DLGCONVERT_CHECKRECURSIVE", # HID:34671 + "HID:WIZARDS_HID_DLGCONVERT_TBTARGET", # HID:34672 + "HID:WIZARDS_HID_DLGCONVERT_CBCANCEL", # HID:34673 + "HID:WIZARDS_HID_DLGCONVERT_CBHELP", # HID:34674 + "HID:WIZARDS_HID_DLGCONVERT_CBBACK", # HID:34675 + "HID:WIZARDS_HID_DLGCONVERT_CBGOON", # HID:34676 + "HID:WIZARDS_HID_DLGCONVERT_CBSOURCEOPEN", # HID:34677 + "HID:WIZARDS_HID_DLGCONVERT_CBTARGETOPEN", # HID:34678 + "HID:WIZARDS_HID_DLGCONVERT_CHKPROTECT", # HID:34679 + "HID:WIZARDS_HID_DLGCONVERT_CHKTEXTDOCUMENTS", # HID:34680 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGPASSWORD_CMDGOON", # HID:34690 + "HID:WIZARDS_HID_DLGPASSWORD_CMDCANCEL", # HID:34691 + "HID:WIZARDS_HID_DLGPASSWORD_CMDHELP", # HID:34692 + "HID:WIZARDS_HID_DLGPASSWORD_TXTPASSWORD", # HID:34693 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGHOLIDAYCAL_DIALOG", # HID:34700 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_PREVIEW", # HID:34701 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_OPYEAR", # HID:34702 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_OPMONTH", # HID:34703 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_EDYEAR", # HID:34704 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_EDMONTH", # HID:34705 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_SPINYEAR", # HID:34706 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_SPINMONTH", # HID:34707 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_1_CMBSTATE", # HID:34708 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_LBOWNDATA", # HID:34709 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_CMDINSERT", # HID:34710 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_CMDDELETE", # HID:34711 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_EDEVENT", # HID:34712 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_CHKEVENT", # HID:34713 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_EDEVENTDAY", # HID:34714 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_SPINEVENTDAY", # HID:34715 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_EDEVENTMONTH", # HID:34716 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_SPINEVENTMONTH", # HID:34717 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_EDEVENTYEAR", # HID:34718 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_2_SPINEVENTYEAR", # HID:34719 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_0_CMDOWNDATA", # HID:34720 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_0_CMDCANCEL", # HID:34721 + "HID:WIZARDS_HID_DLGHOLIDAYCAL_0_CMDOK" # HID:34722 + ] + array2 = ["HID:WIZARDS_HID_LTRWIZ_OPTBUSINESSLETTER", # HID:40769 + "HID:WIZARDS_HID_LTRWIZ_OPTPRIVOFFICIALLETTER", # HID:40770 + "HID:WIZARDS_HID_LTRWIZ_OPTPRIVATELETTER", # HID:40771 + "HID:WIZARDS_HID_LTRWIZ_LSTBUSINESSSTYLE", # HID:40772 + "HID:WIZARDS_HID_LTRWIZ_CHKBUSINESSPAPER", # HID:40773 + "HID:WIZARDS_HID_LTRWIZ_LSTPRIVOFFICIALSTYLE", # HID:40774 + "HID:WIZARDS_HID_LTRWIZ_LSTPRIVATESTYLE", # HID:40775 + "HID:WIZARDS_HID_LTRWIZ_CHKPAPERCOMPANYLOGO", # HID:40776 + "HID:WIZARDS_HID_LTRWIZ_NUMLOGOHEIGHT", # HID:40777 + "HID:WIZARDS_HID_LTRWIZ_NUMLOGOX", # HID:40778 + "HID:WIZARDS_HID_LTRWIZ_NUMLOGOWIDTH", # HID:40779 + "HID:WIZARDS_HID_LTRWIZ_NUMLOGOY", # HID:40780 + "HID:WIZARDS_HID_LTRWIZ_CHKPAPERCOMPANYADDRESS", # HID:40781 + "HID:WIZARDS_HID_LTRWIZ_NUMADDRESSHEIGHT", # HID:40782 + "HID:WIZARDS_HID_LTRWIZ_NUMADDRESSX", # HID:40783 + "HID:WIZARDS_HID_LTRWIZ_NUMADDRESSWIDTH", # HID:40784 + "HID:WIZARDS_HID_LTRWIZ_NUMADDRESSY", # HID:40785 + "HID:WIZARDS_HID_LTRWIZ_CHKCOMPANYRECEIVER", # HID:40786 + "HID:WIZARDS_HID_LTRWIZ_CHKPAPERFOOTER", # HID:40787 + "HID:WIZARDS_HID_LTRWIZ_NUMFOOTERHEIGHT", # HID:40788 + "HID:WIZARDS_HID_LTRWIZ_LSTLETTERNORM", # HID:40789 + "HID:WIZARDS_HID_LTRWIZ_CHKUSELOGO", # HID:40790 + "HID:WIZARDS_HID_LTRWIZ_CHKUSEADDRESSRECEIVER", # HID:40791 + "HID:WIZARDS_HID_LTRWIZ_CHKUSESIGNS", # HID:40792 + "HID:WIZARDS_HID_LTRWIZ_CHKUSESUBJECT", # HID:40793 + "HID:WIZARDS_HID_LTRWIZ_CHKUSESALUTATION", # HID:40794 + "HID:WIZARDS_HID_LTRWIZ_LSTSALUTATION", # HID:40795 + "HID:WIZARDS_HID_LTRWIZ_CHKUSEBENDMARKS", # HID:40796 + "HID:WIZARDS_HID_LTRWIZ_CHKUSEGREETING", # HID:40797 + "HID:WIZARDS_HID_LTRWIZ_LSTGREETING", # HID:40798 + "HID:WIZARDS_HID_LTRWIZ_CHKUSEFOOTER", # HID:40799 + "HID:WIZARDS_HID_LTRWIZ_OPTSENDERPLACEHOLDER", # HID:40800 + "HID:WIZARDS_HID_LTRWIZ_OPTSENDERDEFINE", # HID:40801 + "HID:WIZARDS_HID_LTRWIZ_TXTSENDERNAME", # HID:40802 + "HID:WIZARDS_HID_LTRWIZ_TXTSENDERSTREET", # HID:40803 + "HID:WIZARDS_HID_LTRWIZ_TXTSENDERPOSTCODE", # HID:40804 + "HID:WIZARDS_HID_LTRWIZ_TXTSENDERSTATE_TEXT", # HID:40805 + "HID:WIZARDS_HID_LTRWIZ_TXTSENDERCITY", # HID:40806 + "HID:WIZARDS_HID_LTRWIZ_OPTRECEIVERPLACEHOLDER", # HID:40807 + "HID:WIZARDS_HID_LTRWIZ_OPTRECEIVERDATABASE", # HID:40808 + "HID:WIZARDS_HID_LTRWIZ_TXTFOOTER", # HID:40809 + "HID:WIZARDS_HID_LTRWIZ_CHKFOOTERNEXTPAGES", # HID:40810 + "HID:WIZARDS_HID_LTRWIZ_CHKFOOTERPAGENUMBERS", # HID:40811 + "HID:WIZARDS_HID_LTRWIZ_TXTTEMPLATENAME", # HID:40812 + "HID:WIZARDS_HID_LTRWIZ_OPTCREATELETTER", # HID:40813 + "HID:WIZARDS_HID_LTRWIZ_OPTMAKECHANGES", # HID:40814 + "HID:WIZARDS_HID_LTRWIZ_TXTPATH", # HID:40815 + "HID:WIZARDS_HID_LTRWIZ_CMDPATH", # HID:40816 + "", + "", + "", + "HID:WIZARDS_HID_LTRWIZARD", # HID:40820 + "HID:WIZARDS_HID_LTRWIZARD_HELP", # HID:40821 + "HID:WIZARDS_HID_LTRWIZARD_BACK", # HID:40822 + "HID:WIZARDS_HID_LTRWIZARD_NEXT", # HID:40823 + "HID:WIZARDS_HID_LTRWIZARD_CREATE", # HID:40824 + "HID:WIZARDS_HID_LTRWIZARD_CANCEL", # HID:40825 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_LSTTABLES", # HID:40850 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFIELDS", # HID:40851 + "HID:WIZARDS_HID_QUERYWIZARD_CMDMOVESELECTED", # HID:40852 + "HID:WIZARDS_HID_QUERYWIZARD_CMDMOVEALL", # HID:40853 + "HID:WIZARDS_HID_QUERYWIZARD_CMDREMOVESELECTED", # HID:40854 + "HID:WIZARDS_HID_QUERYWIZARD_CMDREMOVEALL", # HID:40855 + "HID:WIZARDS_HID_QUERYWIZARD_LSTSELFIELDS", # HID:40856 + "HID:WIZARDS_HID_QUERYWIZARD_CMDMOVEUP", # HID:40857 + "HID:WIZARDS_HID_QUERYWIZARD_CMDMOVEDOWN", # HID:40858 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_SORT1", # HID:40865 + "HID:WIZARDS_HID_QUERYWIZARD_OPTASCEND1", # HID:40866 + "HID:WIZARDS_HID_QUERYWIZARD_OPTDESCEND1", # HID:40867 + "HID:WIZARDS_HID_QUERYWIZARD_SORT2", # HID:40868 + "HID:WIZARDS_HID_QUERYWIZARD_OPTASCEND2", # HID:40869 + "HID:WIZARDS_HID_QUERYWIZARD_OPTDESCEND2", # HID:40870 + "HID:WIZARDS_HID_QUERYWIZARD_SORT3", # HID:40871 + "HID:WIZARDS_HID_QUERYWIZARD_OPTASCEND3", # HID:40872 + "HID:WIZARDS_HID_QUERYWIZARD_OPTDESCEND3", # HID:40873 + "HID:WIZARDS_HID_QUERYWIZARD_SORT4", # HID:40874 + "HID:WIZARDS_HID_QUERYWIZARD_OPTASCEND4", # HID:40875 + "HID:WIZARDS_HID_QUERYWIZARD_OPTDESCEND4", # HID:40876 + "", + "HID:WIZARDS_HID_QUERYWIZARD_OPTMATCHALL", # HID:40878 + "HID:WIZARDS_HID_QUERYWIZARD_OPTMATCHANY", # HID:40879 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFIELDNAME_1", # HID:40880 + "HID:WIZARDS_HID_QUERYWIZARD_LSTOPERATOR_1", # HID:40881 + "HID:WIZARDS_HID_QUERYWIZARD_TXTVALUE_1", # HID:40882 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFIELDNAME_2", # HID:40883 + "HID:WIZARDS_HID_QUERYWIZARD_LSTOPERATOR_2", # HID:40884 + "HID:WIZARDS_HID_QUERYWIZARD_TXTVALUE_2", # HID:40885 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFIELDNAME_3", # HID:40886 + "HID:WIZARDS_HID_QUERYWIZARD_LSTOPERATOR_3", # HID:40887 + "HID:WIZARDS_HID_QUERYWIZARD_TXTVALUE_3", # HID:40888 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_OPTAGGREGATEDETAILQUERY", # HID:40895 + "HID:WIZARDS_HID_QUERYWIZARD_OPTAGGREGATESUMMARYQUERY", # HID:40896 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFUNCTION_1", # HID:40897 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFIELDS_1", # HID:40898 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFUNCTION_2", # HID:40899 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFIELDS_2", # HID:40900 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFUNCTION_3", # HID:40901 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFIELDS_3", # HID:40902 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFUNCTION_4", # HID:40903 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFIELDS_4", # HID:40904 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFUNCTION_5", # HID:40905 + "HID:WIZARDS_HID_QUERYWIZARD_LSTAGGREGATEFIELDS_5", # HID:40906 + "HID:WIZARDS_HID_QUERYWIZARD_BTNAGGREGATEPLUS", # HID:40907 + "HID:WIZARDS_HID_QUERYWIZARD_BTNAGGREGATEMINUS", # HID:40908 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTERFIELDS", # HID:40915 + "HID:WIZARDS_HID_QUERYWIZARD_CMDFILTERMOVESELECTED", # HID:40916 + "HID:WIZARDS_HID_QUERYWIZARD_CMDFILTERREMOVESELECTED", # HID:40917 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTERSELFIELDS", # HID:40918 + "HID:WIZARDS_HID_QUERYWIZARD_CMDFILTERMOVEUP", # HID:40919 + "HID:WIZARDS_HID_QUERYWIZARD_CMDFILTERMOVEDOWN", # HID:40920 + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_OPTGROUPMATCHALL", # HID:40923 + "HID:WIZARDS_HID_QUERYWIZARD_OPTGROUPMATCHANY", # HID:40924 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTERFIELDNAME_1", # HID:40925 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTEROPERATOR_1", # HID:40926 + "HID:WIZARDS_HID_QUERYWIZARD_TXTFILTERVALUE_1", # HID:40927 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTERFIELDNAME_2", # HID:40928 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTEROPERATOR_2", # HID:40929 + "HID:WIZARDS_HID_QUERYWIZARD_TXTFILTERVALUE_2", # HID:40930 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTERFIELDNAME_3", # HID:40931 + "HID:WIZARDS_HID_QUERYWIZARD_LSTFILTEROPERATOR_3", # HID:40932 + "HID:WIZARDS_HID_QUERYWIZARD_TXTFILTERVALUE_3", # HID:40933 + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_1", # HID:40940 + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_2", # HID:40941 + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_3", # HID:40942 + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_4", # HID:40943 + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_5", # HID:40944 + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_6", # HID:40945 + "HID:WIZARDS_HID_QUERYWIZARD_TXTTITLE_7", # HID:40946 + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD_TXTQUERYTITLE", # HID:40955 + "HID:WIZARDS_HID_QUERYWIZARD_OPTDISPLAYQUERY", # HID:40956 + "HID:WIZARDS_HID_QUERYWIZARD_OPTMODIFYQUERY", # HID:40957 + "HID:WIZARDS_HID_QUERYWIZARD_TXTSUMMARY", # HID:40958 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_QUERYWIZARD", # HID:40970 + "", + "HID:WIZARDS_HID_QUERYWIZARD_BACK", # HID:40972 + "HID:WIZARDS_HID_QUERYWIZARD_NEXT", # HID:40973 + "HID:WIZARDS_HID_QUERYWIZARD_CREATE", # HID:40974 + "HID:WIZARDS_HID_QUERYWIZARD_CANCEL", # HID:40975 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_IS", # HID:41000 + "", "HID:WIZARDS_HID_IS_BTN_NONE", # HID:41002 + "HID:WIZARDS_HID_IS_BTN_OK", # HID:41003 + "HID:WIZARDS_HID_IS_BTN_CANCEL", # HID:41004 + "HID:WIZARDS_HID_IS_BTN_IMG1", # HID:41005 + "HID:WIZARDS_HID_IS_BTN_IMG2", # HID:41006 + "HID:WIZARDS_HID_IS_BTN_IMG3", # HID:41007 + "HID:WIZARDS_HID_IS_BTN_IMG4", # HID:41008 + "HID:WIZARDS_HID_IS_BTN_IMG5", # HID:41009 + "HID:WIZARDS_HID_IS_BTN_IMG6", # HID:41010 + "HID:WIZARDS_HID_IS_BTN_IMG7", # HID:41011 + "HID:WIZARDS_HID_IS_BTN_IMG8", # HID:41012 + "HID:WIZARDS_HID_IS_BTN_IMG9", # HID:41013 + "HID:WIZARDS_HID_IS_BTN_IMG10", # HID:41014 + "HID:WIZARDS_HID_IS_BTN_IMG11", # HID:41015 + "HID:WIZARDS_HID_IS_BTN_IMG12", # HID:41016 + "HID:WIZARDS_HID_IS_BTN_IMG13", # HID:41017 + "HID:WIZARDS_HID_IS_BTN_IMG14", # HID:41018 + "HID:WIZARDS_HID_IS_BTN_IMG15", # HID:41019 + "HID:WIZARDS_HID_IS_BTN_IMG16", # HID:41020 + "HID:WIZARDS_HID_IS_BTN_IMG17", # HID:41021 + "HID:WIZARDS_HID_IS_BTN_IMG18", # HID:41022 + "HID:WIZARDS_HID_IS_BTN_IMG19", # HID:41023 + "HID:WIZARDS_HID_IS_BTN_IMG20", # HID:41024 + "HID:WIZARDS_HID_IS_BTN_IMG21", # HID:41025 + "HID:WIZARDS_HID_IS_BTN_IMG22", # HID:41026 + "HID:WIZARDS_HID_IS_BTN_IMG23", # HID:41027 + "HID:WIZARDS_HID_IS_BTN_IMG24", # HID:41028 + "HID:WIZARDS_HID_IS_BTN_IMG25", # HID:41029 + "HID:WIZARDS_HID_IS_BTN_IMG26", # HID:41030 + "HID:WIZARDS_HID_IS_BTN_IMG27", # HID:41031 + "HID:WIZARDS_HID_IS_BTN_IMG28", # HID:41032 + "HID:WIZARDS_HID_IS_BTN_IMG29", # HID:41033 + "HID:WIZARDS_HID_IS_BTN_IMG30", # HID:41034 + "HID:WIZARDS_HID_IS_BTN_IMG31", # HID:41035 + "HID:WIZARDS_HID_IS_BTN_IMG32", # HID:41036 + "", + "", + "", + "HID:WIZARDS_HID_FTP", # HID:41040 + "HID:WIZARDS_HID_FTP_SERVER", # HID:41041 + "HID:WIZARDS_HID_FTP_USERNAME", # HID:41042 + "HID:WIZARDS_HID_FTP_PASS", # HID:41043 + "HID:WIZARDS_HID_FTP_TEST", # HID:41044 + "HID:WIZARDS_HID_FTP_TXT_PATH", # HID:41045 + "HID:WIZARDS_HID_FTP_BTN_PATH", # HID:41046 + "HID:WIZARDS_HID_FTP_OK", # HID:41047 + "HID:WIZARDS_HID_FTP_CANCEL", # HID:41048 + "", + "", + "HID:WIZARDS_HID_AGWIZ", # HID:41051 + "HID:WIZARDS_HID_AGWIZ_HELP", # HID:41052 + "HID:WIZARDS_HID_AGWIZ_NEXT", # HID:41053 + "HID:WIZARDS_HID_AGWIZ_PREV", # HID:41054 + "HID:WIZARDS_HID_AGWIZ_CREATE", # HID:41055 + "HID:WIZARDS_HID_AGWIZ_CANCEL", # HID:41056 + "HID:WIZARDS_HID_AGWIZ_1_LIST_PAGEDESIGN", # HID:41057 + "HID:WIZARDS_HID_AGWIZ_1_CHK_MINUTES", # HID:41058 + "HID:WIZARDS_HID_AGWIZ_2_TXT_TIME", # HID:41059 + "HID:WIZARDS_HID_AGWIZ_2_TXT_DATE", # HID:41060 + "HID:WIZARDS_HID_AGWIZ_2_TXT_TITLE", # HID:41061 + "HID:WIZARDS_HID_AGWIZ_2_TXT_LOCATION", # HID:41062 + "HID:WIZARDS_HID_AGWIZ_3_CHK_MEETING_TYPE", # HID:41063 + "HID:WIZARDS_HID_AGWIZ_3_CHK_READ", # HID:41064 + "HID:WIZARDS_HID_AGWIZ_3_CHK_BRING", # HID:41065 + "HID:WIZARDS_HID_AGWIZ_3_CHK_NOTES", # HID:41066 + "HID:WIZARDS_HID_AGWIZ_4_CHK_CALLED_BY", # HID:41067 + "HID:WIZARDS_HID_AGWIZ_4_CHK_FACILITATOR", # HID:41068 + "HID:WIZARDS_HID_AGWIZ_4_CHK_NOTETAKER", # HID:41069 + "HID:WIZARDS_HID_AGWIZ_4_CHK_TIMEKEEPER", # HID:41070 + "HID:WIZARDS_HID_AGWIZ_4_CHK_ATTENDEES", # HID:41071 + "HID:WIZARDS_HID_AGWIZ_4_CHK_OBSERVERS", # HID:41072 + "HID:WIZARDS_HID_AGWIZ_4_CHK_RESOURCEPERSONS", # HID:41073 + "HID:WIZARDS_HID_AGWIZ_6_TXT_TEMPLATENAME", # HID:41074 + "HID:WIZARDS_HID_AGWIZ_6_TXT_TEMPLATEPATH", # HID:41075 + "HID:WIZARDS_HID_AGWIZ_6_BTN_TEMPLATEPATH", # HID:41076 + "HID:WIZARDS_HID_AGWIZ_6_OPT_CREATEAGENDA", # HID:41077 + "HID:WIZARDS_HID_AGWIZ_6_OPT_MAKECHANGES", # HID:41078 + "HID:WIZARDS_HID_AGWIZ_5_BTN_INSERT", # HID:41079 + "HID:WIZARDS_HID_AGWIZ_5_BTN_REMOVE", # HID:41080 + "HID:WIZARDS_HID_AGWIZ_5_BTN_UP", # HID:41081 + "HID:WIZARDS_HID_AGWIZ_5_BTN_DOWN", # HID:41082 + "HID:WIZARDS_HID_AGWIZ_5_SCROLL_BAR", # HID:41083 + "HID:WIZARDS_HID_AGWIZ_5_TXT_TOPIC_1", # HID:41084 + "HID:WIZARDS_HID_AGWIZ_5_TXT_RESPONSIBLE_1", # HID:41085 + "HID:WIZARDS_HID_AGWIZ_5_TXT_MINUTES_1", # HID:41086 + "HID:WIZARDS_HID_AGWIZ_5_TXT_TOPIC_2", # HID:41087 + "HID:WIZARDS_HID_AGWIZ_5_TXT_RESPONSIBLE_2", # HID:41088 + "HID:WIZARDS_HID_AGWIZ_5_TXT_MINUTES_2", # HID:41089 + "HID:WIZARDS_HID_AGWIZ_5_TXT_TOPIC_3", # HID:41090 + "HID:WIZARDS_HID_AGWIZ_5_TXT_RESPONSIBLE_3", # HID:41091 + "HID:WIZARDS_HID_AGWIZ_5_TXT_MINUTES_3", # HID:41092 + "HID:WIZARDS_HID_AGWIZ_5_TXT_TOPIC_4", # HID:41093 + "HID:WIZARDS_HID_AGWIZ_5_TXT_RESPONSIBLE_4", # HID:41094 + "HID:WIZARDS_HID_AGWIZ_5_TXT_MINUTES_4", # HID:41095 + "HID:WIZARDS_HID_AGWIZ_5_TXT_TOPIC_5", # HID:41096 + "HID:WIZARDS_HID_AGWIZ_5_TXT_RESPONSIBLE_5", # HID:41097 + "HID:WIZARDS_HID_AGWIZ_5_TXT_MINUTES_5", # HID:41098 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_FAXWIZ_OPTBUSINESSFAX", # HID:41120 + "HID:WIZARDS_HID_FAXWIZ_LSTBUSINESSSTYLE", # HID:41121 + "HID:WIZARDS_HID_FAXWIZ_OPTPRIVATEFAX", # HID:41122 + "HID:WIZARDS_HID_LSTPRIVATESTYLE", # HID:41123 + "HID:WIZARDS_HID_IMAGECONTROL3", # HID:41124 + "HID:WIZARDS_HID_CHKUSELOGO", # HID:41125 + "HID:WIZARDS_HID_CHKUSEDATE", # HID:41126 + "HID:WIZARDS_HID_CHKUSECOMMUNICATIONTYPE", # HID:41127 + "HID:WIZARDS_HID_LSTCOMMUNICATIONTYPE", # HID:41128 + "HID:WIZARDS_HID_CHKUSESUBJECT", # HID:41129 + "HID:WIZARDS_HID_CHKUSESALUTATION", # HID:41130 + "HID:WIZARDS_HID_LSTSALUTATION", # HID:41131 + "HID:WIZARDS_HID_CHKUSEGREETING", # HID:41132 + "HID:WIZARDS_HID_LSTGREETING", # HID:41133 + "HID:WIZARDS_HID_CHKUSEFOOTER", # HID:41134 + "HID:WIZARDS_HID_OPTSENDERPLACEHOLDER", # HID:41135 + "HID:WIZARDS_HID_OPTSENDERDEFINE", # HID:41136 + "HID:WIZARDS_HID_TXTSENDERNAME", # HID:41137 + "HID:WIZARDS_HID_TXTSENDERSTREET", # HID:41138 + "HID:WIZARDS_HID_TXTSENDERPOSTCODE", # HID:41139 + "HID:WIZARDS_HID_TXTSENDERSTATE", # HID:41140 + "HID:WIZARDS_HID_TXTSENDERCITY", # HID:41141 + "HID:WIZARDS_HID_TXTSENDERFAX", # HID:41142 + "HID:WIZARDS_HID_OPTRECEIVERPLACEHOLDER", # HID:41143 + "HID:WIZARDS_HID_OPTRECEIVERDATABASE", # HID:41144 + "HID:WIZARDS_HID_TXTFOOTER", # HID:41145 + "HID:WIZARDS_HID_CHKFOOTERNEXTPAGES", # HID:41146 + "HID:WIZARDS_HID_CHKFOOTERPAGENUMBERS", # HID:41147 + "HID:WIZARDS_HID_TXTTEMPLATENAME", # HID:41148 + "HID:WIZARDS_HID_FILETEMPLATEPATH", # HID:41149 + "HID:WIZARDS_HID_OPTCREATEFAX", # HID:41150 + "HID:WIZARDS_HID_OPTMAKECHANGES", # HID:41151 + "HID:WIZARDS_HID_IMAGECONTROL2", # HID:41152 + "HID:WIZARDS_HID_FAXWIZ_TXTPATH", # HID:41153 + "HID:WIZARDS_HID_FAXWIZ_CMDPATH", # HID:41154 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_FAXWIZARD", # HID:41180 + "HID:WIZARDS_HID_FAXWIZARD_HELP", # HID:41181 + "HID:WIZARDS_HID_FAXWIZARD_BACK", # HID:41182 + "HID:WIZARDS_HID_FAXWIZARD_NEXT", # HID:41183 + "HID:WIZARDS_HID_FAXWIZARD_CREATE", # HID:41184 + "HID:WIZARDS_HID_FAXWIZARD_CANCEL", # HID:41185 + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "HID:WIZARDS_HID_DLGTABLE_DIALOG", # HID:41200 + "", + "HID:WIZARDS_HID_DLGTABLE_CMDPREV", # HID:41202 + "HID:WIZARDS_HID_DLGTABLE_CMDNEXT", # HID:41203 + "HID:WIZARDS_HID_DLGTABLE_CMDFINISH", # HID:41204 + "HID:WIZARDS_HID_DLGTABLE_CMDCANCEL", # HID:41205 + "HID:WIZARDS_HID_DLGTABLE_OPTBUSINESS", # HID:41206 + "HID:WIZARDS_HID_DLGTABLE_OPTPRIVATE", # HID:41207 + "HID:WIZARDS_HID_DLGTABLE_LBTABLES", # HID:41208 + "HID:WIZARDS_HID_DLGTABLE_FIELDSAVAILABLE", # HID:41209 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVESELECTED", # HID:41210 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEALL", # HID:41211 + "HID:WIZARDS_HID_DLGTABLE_CMDREMOVESELECTED", # HID:41212 + "HID:WIZARDS_HID_DLGTABLE_CMDREMOVEALL", # HID:41213 + "HID:WIZARDS_HID_DLGTABLE_FIELDSSELECTED", # HID:41214 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEUP", # HID:41215 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEDOWN", # HID:41216 + "", + "", + "", + "HID:WIZARDS_HID_DLGTABLE_LB_SELFIELDNAMES", # HID:41220 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEFIELDUP", # HID:41221 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEFIELDDOWN", # HID:41222 + "HID:WIZARDS_HID_DLGTABLE_CMDMINUS", # HID:41223 + "HID:WIZARDS_HID_DLGTABLE_CMDPLUS", # HID:41224 + "HID:WIZARDS_HID_DLGTABLE_COLNAME", # HID:41225 + "HID:WIZARDS_HID_DLGTABLE_COLMODIFIER", # HID:41226 + "HID:WIZARDS_HID_DLGTABLE_CHK_USEPRIMEKEY", # HID:41227 + "HID:WIZARDS_HID_DLGTABLE_OPT_PK_AUTOMATIC", # HID:41228 + "HID:WIZARDS_HID_DLGTABLE_CK_PK_AUTOVALUE_AUTOMATIC", # HID:41229 + "HID:WIZARDS_HID_DLGTABLE_OPT_PK_SINGLE", # HID:41230 + "HID:WIZARDS_HID_DLGTABLE_LB_PK_FIELDNAME", # HID:41231 + "HID:WIZARDS_HID_DLGTABLE_CK_PK_AUTOVALUE", # HID:41232 + "HID:WIZARDS_HID_DLGTABLE_OPT_PK_SEVERAL", # HID:41233 + "HID:WIZARDS_HID_DLGTABLE_FIELDS_PK_AVAILABLE", # HID:41234 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVE_PK_SELECTED", # HID:41235 + "HID:WIZARDS_HID_DLGTABLE_CMDREMOVE_PK_SELECTED", # HID:41236 + "HID:WIZARDS_HID_DLGTABLE_FIELDS_PK_SELECTED", # HID:41237 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEUP_PK_SELECTED", # HID:41238 + "HID:WIZARDS_HID_DLGTABLE_CMDMOVEDOWN_PK_SELECTED", # HID:41239 + "HID:WIZARDS_HID_DLGTABLE_TXT_NAME", # HID:41240 + "HID:WIZARDS_HID_DLGTABLE_OPT_MODIFYTABLE", # HID:41241 + "HID:WIZARDS_HID_DLGTABLE_OPT_WORKWITHTABLE", # HID:41242 + "HID:WIZARDS_HID_DLGTABLE_OPT_STARTFORMWIZARD", # HID:41243 + "HID:WIZARDS_HID_DLGTABLE_LST_CATALOG", # HID:41244 + "HID:WIZARDS_HID_DLGTABLE_LST_SCHEMA" # HID:41245 + ] + + @classmethod + def getHelpIdString(self, nHelpId): + if nHelpId >= 34200 and nHelpId <= 34722: + return HelpIds.array1[nHelpId - 34200] + elif nHelpId >= 40769 and nHelpId <= 41245: + return HelpIds.array2[nHelpId - 40769] + else: + return None + diff --git a/wizards/com/sun/star/wizards/common/Helper.py b/wizards/com/sun/star/wizards/common/Helper.py new file mode 100644 index 000000000000..908aa78a1b2b --- /dev/null +++ b/wizards/com/sun/star/wizards/common/Helper.py @@ -0,0 +1,242 @@ +import uno +import locale +import traceback +from com.sun.star.uno import Exception as UnoException +from com.sun.star.uno import RuntimeException + +#TEMPORAL +import inspect + +class Helper(object): + + DAY_IN_MILLIS = (24 * 60 * 60 * 1000) + + def convertUnoDatetoInteger(self, DateValue): + oCal = java.util.Calendar.getInstance() + oCal.set(DateValue.Year, DateValue.Month, DateValue.Day) + dTime = oCal.getTime() + lTime = dTime.getTime() + lDate = lTime / (3600 * 24000) + return lDate + + @classmethod + def setUnoPropertyValue(self, xPSet, PropertyName, PropertyValue): + try: + if xPSet.getPropertySetInfo().hasPropertyByName(PropertyName): + #xPSet.setPropertyValue(PropertyName, PropertyValue) + uno.invoke(xPSet,"setPropertyValue", (PropertyName,PropertyValue)) + else: + selementnames = xPSet.getPropertySetInfo().getProperties() + raise ValueError("No Such Property: '" + PropertyName + "'"); + + except UnoException, exception: + print type(PropertyValue) + traceback.print_exc() + + @classmethod + def getUnoObjectbyName(self, xName, ElementName): + try: + if xName.hasByName(ElementName) == True: + return xName.getByName(ElementName) + else: + raise RuntimeException(); + + except UnoException, exception: + traceback.print_exc() + return None + + @classmethod + def getPropertyValue(self, CurPropertyValue, PropertyName): + MaxCount = len(CurPropertyValue) + i = 0 + while i < MaxCount: + if CurPropertyValue[i] is not None: + if CurPropertyValue[i].Name.equals(PropertyName): + return CurPropertyValue[i].Value + + i += 1 + raise RuntimeException() + + @classmethod + def getPropertyValuefromAny(self, CurPropertyValue, PropertyName): + try: + if CurPropertyValue is not None: + MaxCount = len(CurPropertyValue) + i = 0 + while i < MaxCount: + if CurPropertyValue[i] is not None: + aValue = CurPropertyValue[i] + if aValue is not None and aValue.Name.equals(PropertyName): + return aValue.Value + + i += 1 + return None + except UnoException, exception: + traceback.print_exc() + return None + + @classmethod + def getUnoPropertyValue(self, xPSet, PropertyName): + try: + if xPSet is not None: + oObject = xPSet.getPropertyValue(PropertyName) + if oObject is not None: + return oObject + return None + + except UnoException, exception: + traceback.print_exc() + return None + + @classmethod + def getUnoArrayPropertyValue(self, xPSet, PropertyName): + try: + if xPSet is not None: + oObject = xPSet.getPropertyValue(PropertyName) + if isinstance(oObject,list): + return getArrayValue(oObject) + + except UnoException, exception: + traceback.print_exc() + + return None + + @classmethod + def getUnoStructValue(self, xPSet, PropertyName): + try: + if xPSet is not None: + if xPSet.getPropertySetInfo().hasPropertyByName(PropertyName) == True: + oObject = xPSet.getPropertyValue(PropertyName) + return oObject + + return None + except UnoException, exception: + traceback.print_exc() + return None + + @classmethod + def setUnoPropertyValues(self, xMultiPSetLst, PropertyNames, PropertyValues): + try: + if xMultiPSetLst is not None: + uno.invoke(xMultiPSetLst, "setPropertyValues", (PropertyNames, PropertyValues)) + else: + i = 0 + while i < len(PropertyNames): + self.setUnoPropertyValue(xMultiPSetLst, PropertyNames[i], PropertyValues[i]) + i += 1 + + except Exception, e: + curframe = inspect.currentframe() + calframe = inspect.getouterframes(curframe, 2) + #print "caller name:", calframe[1][3] + traceback.print_exc() + + ''' + checks if the value of an object that represents an array is null. + check beforehand if the Object is really an array with "AnyConverter.IsArray(oObject) + @param oValue the paramter that has to represent an object + @return a null reference if the array is empty + ''' + + @classmethod + def getArrayValue(self, oValue): + try: + #VetoableChangeSupport Object + oPropList = list(oValue) + nlen = len(oPropList) + if nlen == 0: + return None + else: + return oPropList + + except UnoException, exception: + traceback.print_exc() + return None + + def getComponentContext(_xMSF): + # Get the path to the extension and try to add the path to the class loader + aHelper = PropertySetHelper(_xMSF); + aDefaultContext = aHelper.getPropertyValueAsObject("DefaultContext"); + return aDefaultContext; + + def getMacroExpander(_xMSF): + xComponentContext = self.getComponentContext(_xMSF); + aSingleton = xComponentContext.getValueByName("/singletons/com.sun.star.util.theMacroExpander"); + return aSingleton; + + class DateUtils(object): + + @classmethod + def DateUtils_XMultiServiceFactory_Object(self, xmsf, document): + tmp = DateUtils() + tmp.DateUtils_body_XMultiServiceFactory_Object(xmsf, document) + return tmp + + def DateUtils_body_XMultiServiceFactory_Object(self, xmsf, docMSF): + defaults = docMSF.createInstance("com.sun.star.text.Defaults") + l = Helper.getUnoStructValue(defaults, "CharLocale") + jl = locale.setlocale(l.Language, l.Country, l.Variant) + self.calendar = Calendar.getInstance(jl) + self.formatSupplier = document + formatSettings = self.formatSupplier.getNumberFormatSettings() + date = Helper.getUnoPropertyValue(formatSettings, "NullDate") + self.calendar.set(date.Year, date.Month - 1, date.Day) + self.docNullTime = getTimeInMillis() + self.formatter = NumberFormatter.createNumberFormatter(xmsf, self.formatSupplier) + + ''' + @param format a constant of the enumeration NumberFormatIndex + @return + ''' + + def getFormat(self, format): + return NumberFormatter.getNumberFormatterKey(self.formatSupplier, format) + + def getFormatter(self): + return self.formatter + + def getTimeInMillis(self): + dDate = self.calendar.getTime() + return dDate.getTime() + + ''' + @param date a VCL date in form of 20041231 + @return a document relative date + ''' + + def getDocumentDateAsDouble(self, date): + self.calendar.clear() + self.calendar.set(date / 10000, (date % 10000) / 100 - 1, date % 100) + date1 = getTimeInMillis() + ''' + docNullTime and date1 are in millis, but + I need a day... + ''' + + daysDiff = (date1 - self.docNullTime) / DAY_IN_MILLIS + 1 + return daysDiff + + def getDocumentDateAsDouble(self, date): + return getDocumentDateAsDouble(date.Year * 10000 + date.Month * 100 + date.Day) + + def getDocumentDateAsDouble(self, javaTimeInMillis): + self.calendar.clear() + JavaTools.setTimeInMillis(self.calendar, javaTimeInMillis) + date1 = getTimeInMillis() + + ''' + docNullTime and date1 are in millis, but + I need a day... + ''' + + daysDiff = (date1 - self.docNullTime) / DAY_IN_MILLIS + 1 + return daysDiff + + def format(self, formatIndex, date): + return self.formatter.convertNumberToString(formatIndex, getDocumentDateAsDouble(date)) + + def format(self, formatIndex, date): + return self.formatter.convertNumberToString(formatIndex, getDocumentDateAsDouble(date)) + + def format(self, formatIndex, javaTimeInMillis): + return self.formatter.convertNumberToString(formatIndex, getDocumentDateAsDouble(javaTimeInMillis)) diff --git a/wizards/com/sun/star/wizards/common/Listener.py b/wizards/com/sun/star/wizards/common/Listener.py new file mode 100644 index 000000000000..238f22cac1a9 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/Listener.py @@ -0,0 +1,111 @@ +#********************************************************************** +# +# Danny.OOo.Listeners.ListenerProcAdapters.py +# +# A module to easily work with OpenOffice.org. +# +#********************************************************************** +# Copyright (c) 2003-2004 Danny Brewer +# d29583@groovegarden.com +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See: http://www.gnu.org/licenses/lgpl.html +# +#********************************************************************** +# If you make changes, please append to the change log below. +# +# Change Log +# Danny Brewer Revised 2004-06-05-01 +# +#********************************************************************** + +# OOo's libraries +import uno +import unohelper + +#-------------------------------------------------- +# An ActionListener adapter. +# This object implements com.sun.star.awt.XActionListener. +# When actionPerformed is called, this will call an arbitrary +# python procedure, passing it... +# 1. the oActionEvent +# 2. any other parameters you specified to this object's constructor (as a tuple). +from com.sun.star.awt import XActionListener +class ActionListenerProcAdapter( unohelper.Base, XActionListener ): + def __init__( self, oProcToCall, tParams=() ): + self.oProcToCall = oProcToCall # a python procedure + self.tParams = tParams # a tuple + + # oActionEvent is a com.sun.star.awt.ActionEvent struct. + def actionPerformed( self, oActionEvent ): + if callable( self.oProcToCall ): + apply( self.oProcToCall, (oActionEvent,) + self.tParams ) + + +#-------------------------------------------------- +# An ItemListener adapter. +# This object implements com.sun.star.awt.XItemListener. +# When itemStateChanged is called, this will call an arbitrary +# python procedure, passing it... +# 1. the oItemEvent +# 2. any other parameters you specified to this object's constructor (as a tuple). +from com.sun.star.awt import XItemListener +class ItemListenerProcAdapter( unohelper.Base, XItemListener ): + def __init__( self, oProcToCall, tParams=() ): + self.oProcToCall = oProcToCall # a python procedure + self.tParams = tParams # a tuple + + # oItemEvent is a com.sun.star.awt.ItemEvent struct. + def itemStateChanged( self, oItemEvent ): + if callable( self.oProcToCall ): + apply( self.oProcToCall, (oItemEvent,) + self.tParams ) + + +#-------------------------------------------------- +# An TextListener adapter. +# This object implements com.sun.star.awt.XTextistener. +# When textChanged is called, this will call an arbitrary +# python procedure, passing it... +# 1. the oTextEvent +# 2. any other parameters you specified to this object's constructor (as a tuple). +from com.sun.star.awt import XTextListener +class TextListenerProcAdapter( unohelper.Base, XTextListener ): + def __init__( self, oProcToCall, tParams=() ): + self.oProcToCall = oProcToCall # a python procedure + self.tParams = tParams # a tuple + + # oTextEvent is a com.sun.star.awt.TextEvent struct. + def textChanged( self, oTextEvent ): + if callable( self.oProcToCall ): + apply( self.oProcToCall, (oTextEvent,) + self.tParams ) + +#-------------------------------------------------- +# An Window adapter. +# This object implements com.sun.star.awt.XWindowListener. +# When textChanged is called, this will call an arbitrary +# python procedure, passing it... +# 1. the oTextEvent +# 2. any other parameters you specified to this object's constructor (as a tuple). +from com.sun.star.awt import XWindowListener +class WindowListenerProcAdapter( unohelper.Base, XWindowListener ): + def __init__( self, oProcToCall, tParams=() ): + self.oProcToCall = oProcToCall # a python procedure + self.tParams = tParams # a tuple + + # oTextEvent is a com.sun.star.awt.TextEvent struct. + def windowResized(self, actionEvent): + if callable( self.oProcToCall ): + apply( self.oProcToCall, (actionEvent,) + self.tParams ) diff --git a/wizards/com/sun/star/wizards/common/NoValidPathException.py b/wizards/com/sun/star/wizards/common/NoValidPathException.py new file mode 100644 index 000000000000..96902883e5af --- /dev/null +++ b/wizards/com/sun/star/wizards/common/NoValidPathException.py @@ -0,0 +1,9 @@ +class NoValidPathException(Exception): + + def __init__(self, xMSF, _sText): + super(NoValidPathException,self).__init__(_sText) + # TODO: NEVER open a dialog in an exception + from SystemDialog import SystemDialog + if xMSF: + SystemDialog.showErrorBox(xMSF, "dbwizres", "dbw", 521) #OfficePathnotavailable + diff --git a/wizards/com/sun/star/wizards/common/PropertyNames.py b/wizards/com/sun/star/wizards/common/PropertyNames.py new file mode 100644 index 000000000000..c1dde18522f3 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/PropertyNames.py @@ -0,0 +1,15 @@ +class PropertyNames: + PROPERTY_ENABLED = "Enabled" + PROPERTY_HEIGHT = "Height" + PROPERTY_HELPURL = "HelpURL" + PROPERTY_POSITION_X = "PositionX" + PROPERTY_POSITION_Y = "PositionY" + PROPERTY_LABEL = "Label" + PROPERTY_MULTILINE = "MultiLine" + PROPERTY_NAME = "Name" + PROPERTY_STEP = "Step" + PROPERTY_WIDTH = "Width" + PROPERTY_TABINDEX = "TabIndex" + PROPERTY_STATE = "State" + PROPERTY_IMAGEURL = "ImageURL" + diff --git a/wizards/com/sun/star/wizards/common/PropertySetHelper.py b/wizards/com/sun/star/wizards/common/PropertySetHelper.py new file mode 100644 index 000000000000..4960b5380e1c --- /dev/null +++ b/wizards/com/sun/star/wizards/common/PropertySetHelper.py @@ -0,0 +1,242 @@ +from DebugHelper import * + +class PropertySetHelper(object): + + @classmethod + def __init__(self, _aObj): + if not _aObj: + return + + self.m_xPropertySet = _aObj + + def getHashMap(self): + if self.m_aHashMap == None: + self.m_aHashMap = HashMap < String, Object >.Object() + + return self.m_aHashMap + + ''' + set a property, don't throw any exceptions, they will only write down as a hint in the helper debug output + @param _sName name of the property to set + @param _aValue property value as object + ''' + + def setPropertyValueDontThrow(self, _sName, _aValue): + try: + setPropertyValue(_sName, _aValue) + except Exception, e: + DebugHelper.writeInfo("Don't throw the exception with property name(" + _sName + " ) : " + e.getMessage()) + + ''' + set a property, + @param _sName name of the property to set + @param _aValue property value as object + @throws java.lang.Exception + ''' + + def setPropertyValue(self, _sName, _aValue): + if self.m_xPropertySet != None: + try: + self.m_xPropertySet.setPropertyValue(_sName, _aValue) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + DebugHelper.exception(e) + except com.sun.star.beans.PropertyVetoException, e: + DebugHelper.writeInfo(e.getMessage()) + DebugHelper.exception(e) + except ValueError, e: + DebugHelper.writeInfo(e.getMessage()) + DebugHelper.exception(e) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + DebugHelper.exception(e) + + else: + // DebugHelper.writeInfo("PropertySetHelper.setProperty() can't get XPropertySet"); + getHashMap().put(_sName, _aValue) + + ''' + get a property and convert it to a int value + @param _sName the string name of the property + @param _nDefault if an error occur, return this value + @return the int value of the property + ''' + + def getPropertyValueAsInteger(self, _sName, _nDefault): + aObject = None + nValue = _nDefault + if self.m_xPropertySet != None: + try: + aObject = self.m_xPropertySet.getPropertyValue(_sName) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + + if aObject != None: + try: + nValue = NumericalHelper.toInt(aObject) + except ValueError, e: + DebugHelper.writeInfo("can't convert a object to integer.") + + return nValue + + ''' + get a property and convert it to a short value + @param _sName the string name of the property + @param _nDefault if an error occur, return this value + @return the int value of the property + ''' + + def getPropertyValueAsShort(self, _sName, _nDefault): + aObject = None + nValue = _nDefault + if self.m_xPropertySet != None: + try: + aObject = self.m_xPropertySet.getPropertyValue(_sName) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + + if aObject != None: + try: + nValue = NumericalHelper.toShort(aObject) + except ValueError, e: + DebugHelper.writeInfo("can't convert a object to short.") + + return nValue + + ''' + get a property and convert it to a double value + @param _sName the string name of the property + @param _nDefault if an error occur, return this value + @return the int value of the property + ''' + + def getPropertyValueAsDouble(self, _sName, _nDefault): + aObject = None + nValue = _nDefault + if self.m_xPropertySet != None: + try: + aObject = self.m_xPropertySet.getPropertyValue(_sName) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + + if aObject == None: + if getHashMap().containsKey(_sName): + aObject = getHashMap().get(_sName) + + if aObject != None: + try: + nValue = NumericalHelper.toDouble(aObject) + except ValueError, e: + DebugHelper.writeInfo("can't convert a object to integer.") + + return nValue + + ''' + get a property and convert it to a boolean value + @param _sName the string name of the property + @param _bDefault if an error occur, return this value + @return the boolean value of the property + ''' + + def getPropertyValueAsBoolean(self, _sName, _bDefault): + aObject = None + bValue = _bDefault + if self.m_xPropertySet != None: + try: + aObject = self.m_xPropertySet.getPropertyValue(_sName) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + DebugHelper.writeInfo("UnknownPropertyException caught: Name:=" + _sName) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + + if aObject != None: + try: + bValue = NumericalHelper.toBoolean(aObject) + except ValueError, e: + DebugHelper.writeInfo("can't convert a object to boolean.") + + return bValue + + ''' + get a property and convert it to a string value + @param _sName the string name of the property + @param _sDefault if an error occur, return this value + @return the string value of the property + ''' + + def getPropertyValueAsString(self, _sName, _sDefault): + aObject = None + sValue = _sDefault + if self.m_xPropertySet != None: + try: + aObject = self.m_xPropertySet.getPropertyValue(_sName) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + + if aObject != None: + try: + sValue = AnyConverter.toString(aObject) + except ValueError, e: + DebugHelper.writeInfo("can't convert a object to string.") + + return sValue + + ''' + get a property and don't convert it + @param _sName the string name of the property + @return the object value of the property without any conversion + ''' + + def getPropertyValueAsObject(self, _sName): + aObject = None + if self.m_xPropertySet != None: + try: + aObject = self.m_xPropertySet.getPropertyValue(_sName) + except com.sun.star.beans.UnknownPropertyException, e: + DebugHelper.writeInfo(e.getMessage()) + except com.sun.star.lang.WrappedTargetException, e: + DebugHelper.writeInfo(e.getMessage()) + + return aObject + + ''' + Debug helper, to show all properties which are available in the given object. + @param _xObj the object of which the properties should shown + ''' + + @classmethod + def showProperties(self, _xObj): + aHelper = PropertySetHelper.PropertySetHelper_unknown(_xObj) + aHelper.showProperties() + + ''' + Debug helper, to show all properties which are available in the current object. + ''' + + def showProperties(self): + sName = "" + if self.m_xPropertySet != None: + XServiceInfo xServiceInfo = (XServiceInfo) + UnoRuntime.queryInterface(XServiceInfo.class, self.m_xPropertySet) + if xServiceInfo != None: + sName = xServiceInfo.getImplementationName() + + xInfo = self.m_xPropertySet.getPropertySetInfo() + aAllProperties = xInfo.getProperties() + DebugHelper.writeInfo("Show all properties of Implementation of :'" + sName + "'") + i = 0 + while i < aAllProperties.length: + DebugHelper.writeInfo(" - " + aAllProperties[i].Name) + i += 1 + else: + DebugHelper.writeInfo("The given object don't support XPropertySet interface.") + diff --git a/wizards/com/sun/star/wizards/common/Resource.java.orig b/wizards/com/sun/star/wizards/common/Resource.java.orig new file mode 100644 index 000000000000..c7eb3e483db7 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/Resource.java.orig @@ -0,0 +1,140 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package com.sun.star.wizards.common; + +import com.sun.star.beans.PropertyValue; +import com.sun.star.container.XIndexAccess; +import com.sun.star.container.XNameAccess; +import com.sun.star.lang.IllegalArgumentException; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.script.XInvocation; +import com.sun.star.beans.PropertyValue; +import com.sun.star.uno.XInterface; +import com.sun.star.uno.UnoRuntime; + +public class Resource +{ + + XMultiServiceFactory xMSF; + String Module; + XIndexAccess xStringIndexAccess; + XIndexAccess xStringListIndexAccess; + + /** Creates a new instance of Resource + * @param _xMSF + * @param _Unit + * @param _Module + */ + public Resource(XMultiServiceFactory _xMSF, String _Unit /* unused */, String _Module) + { + this.xMSF = _xMSF; + this.Module = _Module; + try + { + Object[] aArgs = new Object[1]; + aArgs[0] = this.Module; + XInterface xResource = (XInterface) xMSF.createInstanceWithArguments( + "org.libreoffice.resource.ResourceIndexAccess", + aArgs); + if (xResource == null) + throw new Exception("could not initialize ResourceIndexAccess"); + XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface( + XNameAccess.class, + xResource); + if (xNameAccess == null) + throw new Exception("ResourceIndexAccess is no XNameAccess"); + this.xStringIndexAccess = (XIndexAccess)UnoRuntime.queryInterface( + XIndexAccess.class, + xNameAccess.getByName("String")); + this.xStringListIndexAccess = (XIndexAccess)UnoRuntime.queryInterface( + XIndexAccess.class, + xNameAccess.getByName("StringList")); + if(this.xStringListIndexAccess == null) + throw new Exception("could not initialize xStringListIndexAccess"); + if(this.xStringIndexAccess == null) + throw new Exception("could not initialize xStringIndexAccess"); + } + catch (Exception exception) + { + exception.printStackTrace(); + showCommonResourceError(xMSF); + } + } + + public String getResText(int nID) + { + try + { + return (String)this.xStringIndexAccess.getByIndex(nID); + } + catch (Exception exception) + { + exception.printStackTrace(); + throw new java.lang.IllegalArgumentException("Resource with ID not " + String.valueOf(nID) + "not found"); + } + } + + public PropertyValue[] getStringList(int nID) + { + try + { + return (PropertyValue[])this.xStringListIndexAccess.getByIndex(nID); + } + catch (Exception exception) + { + exception.printStackTrace(); + throw new java.lang.IllegalArgumentException("Resource with ID not " + String.valueOf(nID) + "not found"); + } + } + + public String[] getResArray(int nID, int iCount) + { + try + { + String[] ResArray = new String[iCount]; + for (int i = 0; i < iCount; i++) + { + ResArray[i] = getResText(nID + i); + } + return ResArray; + } + catch (Exception exception) + { + exception.printStackTrace(System.out); + throw new java.lang.IllegalArgumentException("Resource with ID not" + String.valueOf(nID) + "not found"); + } + } + + public static void showCommonResourceError(XMultiServiceFactory xMSF) + { + String ProductName = Configuration.getProductName(xMSF); + String sError = "The files required could not be found.\nPlease start the %PRODUCTNAME Setup and choose 'Repair'."; + sError = JavaTools.replaceSubString(sError, ProductName, "%PRODUCTNAME"); + SystemDialog.showMessageBox(xMSF, "ErrorBox", com.sun.star.awt.VclWindowPeerAttribute.OK, sError); + } +} diff --git a/wizards/com/sun/star/wizards/common/Resource.py b/wizards/com/sun/star/wizards/common/Resource.py new file mode 100644 index 000000000000..e6b37999255c --- /dev/null +++ b/wizards/com/sun/star/wizards/common/Resource.py @@ -0,0 +1,66 @@ +from com.sun.star.awt.VclWindowPeerAttribute import OK +import traceback + +class Resource(object): + ''' + Creates a new instance of Resource + @param _xMSF + @param _Unit + @param _Module + ''' + + @classmethod + def __init__(self, _xMSF, _Module): + self.xMSF = _xMSF + self.Module = _Module + try: + xResource = self.xMSF.createInstanceWithArguments("org.libreoffice.resource.ResourceIndexAccess", (self.Module,)) + if xResource is None: + raise Exception ("could not initialize ResourceIndexAccess") + + self.xStringIndexAccess = xResource.getByName("String") + self.xStringListIndexAccess = xResource.getByName("StringList") + + if self.xStringListIndexAccess is None: + raise Exception ("could not initialize xStringListIndexAccess") + + if self.xStringIndexAccess is None: + raise Exception ("could not initialize xStringIndexAccess") + + except Exception, exception: + traceback.print_exc() + self.showCommonResourceError(self.xMSF) + + def getResText(self, nID): + try: + return self.xStringIndexAccess.getByIndex(nID) + except Exception, exception: + traceback.print_exc() + raise ValueError("Resource with ID not " + str(nID) + " not found"); + + def getStringList(self, nID): + try: + return self.xStringListIndexAccess.getByIndex(nID) + except Exception, exception: + traceback.print_exc() + raise ValueError("Resource with ID not " + str(nID) + " not found"); + + def getResArray(self, nID, iCount): + try: + ResArray = range(iCount) + i = 0 + while i < iCount: + ResArray[i] = getResText(nID + i) + i += 1 + return ResArray + except Exception, exception: + traceback.print_exc() + raise ValueError("Resource with ID not" + str(nID) + " not found"); + + + def showCommonResourceError(self, xMSF): + ProductName = Configuration.getProductName(xMSF) + sError = "The files required could not be found.\nPlease start the %PRODUCTNAME Setup and choose 'Repair'." + sError = JavaTools.replaceSubString(sError, ProductName, "%PRODUCTNAME") + SystemDialog.showMessageBox(xMSF, "ErrorBox", OK, sError) + diff --git a/wizards/com/sun/star/wizards/common/SystemDialog.py b/wizards/com/sun/star/wizards/common/SystemDialog.py new file mode 100644 index 000000000000..b88aadfafaa6 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/SystemDialog.py @@ -0,0 +1,237 @@ +import uno +import traceback +from Configuration import Configuration +from Resource import Resource +from Desktop import Desktop + +from com.sun.star.ui.dialogs.TemplateDescription import FILESAVE_AUTOEXTENSION, FILEOPEN_SIMPLE +from com.sun.star.ui.dialogs.ExtendedFilePickerElementIds import CHECKBOX_AUTOEXTENSION +from com.sun.star.awt import WindowDescriptor +from com.sun.star.awt.WindowClass import MODALTOP +from com.sun.star.uno import Exception as UnoException +from com.sun.star.lang import IllegalArgumentException +from com.sun.star.awt.VclWindowPeerAttribute import OK + + +class SystemDialog(object): + + ''' + @param xMSF + @param ServiceName + @param type according to com.sun.star.ui.dialogs.TemplateDescription + ''' + + def __init__(self, xMSF, ServiceName, Type): + try: + self.xMSF = xMSF + self.systemDialog = xMSF.createInstance(ServiceName) + self.xStringSubstitution = self.createStringSubstitution(xMSF) + listAny = [uno.Any("short",Type)] + if self.systemDialog != None: + self.systemDialog.initialize(listAny) + + except UnoException, exception: + traceback.print_exc() + + def createStoreDialog(self, xmsf): + return SystemDialog(xmsf, "com.sun.star.ui.dialogs.FilePicker", FILESAVE_AUTOEXTENSION) + + def createOpenDialog(self, xmsf): + return SystemDialog(xmsf, "com.sun.star.ui.dialogs.FilePicker", FILEOPEN_SIMPLE) + + def createFolderDialog(self, xmsf): + return SystemDialog(xmsf, "com.sun.star.ui.dialogs.FolderPicker", 0) + + def createOfficeFolderDialog(self, xmsf): + return SystemDialog(xmsf, "com.sun.star.ui.dialogs.OfficeFolderPicker", 0) + + def subst(self, path): + try: + s = self.xStringSubstitution.substituteVariables(path, False) + return s + except Exception, ex: + traceback.print_exc() + return path + + ''' + ATTENTION a BUG : TFILESAVE_AUTOEXTENSIONhe extension calculated + here gives the last 3 chars of the filename - what + if the extension is of 4 or more chars? + @param DisplayDirectory + @param DefaultName + @param sDocuType + @return + ''' + + def callStoreDialog(self, DisplayDirectory, DefaultName, sDocuType): + sExtension = DefaultName.substring(DefaultName.length() - 3, DefaultName.length()) + addFilterToDialog(sExtension, sDocuType, True) + return callStoreDialog(DisplayDirectory, DefaultName) + + ''' + @param displayDir + @param defaultName + given url to a local path. + @return + ''' + + def callStoreDialog(self, displayDir, defaultName): + self.sStorePath = None + try: + self.systemDialog.setValue(CHECKBOX_AUTOEXTENSION, 0, True) + self.systemDialog.setDefaultName(defaultName) + self.systemDialog.setDisplayDirectory(subst(displayDir)) + if execute(self.systemDialog): + sPathList = self.systemDialog.getFiles() + self.sStorePath = sPathList[0] + + except UnoException, exception: + traceback.print_exc() + + return self.sStorePath + + def callFolderDialog(self, title, description, displayDir): + try: + self.systemDialog.setDisplayDirectoryxPropertyValue(subst(displayDir)) + except IllegalArgumentException, iae: + traceback.print_exc() + raise AttributeError(iae.getMessage()); + + self.systemDialog.setTitle(title) + self.systemDialog.setDescription(description) + if execute(self.systemDialog): + return self.systemDialog.getDirectory() + else: + return None + + def execute(self, execDialog): + return execDialog.execute() == 1 + + def callOpenDialog(self, multiSelect, displayDirectory): + try: + self.systemDialog.setMultiSelectionMode(multiSelect) + self.systemDialog.setDisplayDirectory(subst(displayDirectory)) + if execute(self.systemDialog): + return self.systemDialog.getFiles() + + except UnoException, exception: + traceback.print_exc() + + return None + + def addFilterToDialog(self, sExtension, filterName, setToDefault): + try: + #get the localized filtername + uiName = getFilterUIName(filterName) + pattern = "*." + sExtension + #add the filter + addFilter(uiName, pattern, setToDefault) + except Exception, exception: + traceback.print_exc() + + def addFilter(self, uiName, pattern, setToDefault): + try: + self.systemDialog.appendFilter(uiName, pattern) + if setToDefault: + self.systemDialog.setCurrentFilter(uiName) + + except Exception, ex: + traceback.print_exc() + + ''' + converts the name returned from getFilterUIName_(...) so the + product name is correct. + @param filterName + @return + ''' + + def getFilterUIName(self, filterName): + prodName = Configuration.getProductName(self.xMSF) + s = [[getFilterUIName_(filterName)]] + s[0][0] = JavaTools.replaceSubString(s[0][0], prodName, "%productname%") + return s[0][0] + + ''' + note the result should go through conversion of the product name. + @param filterName + @return the UI localized name of the given filter name. + ''' + + def getFilterUIName_(self, filterName): + try: + oFactory = self.xMSF.createInstance("com.sun.star.document.FilterFactory") + oObject = Helper.getUnoObjectbyName(oFactory, filterName) + xPropertyValue = list(oObject) + MaxCount = xPropertyValue.length + i = 0 + while i < MaxCount: + aValue = xPropertyValue[i] + if aValue != None and aValue.Name.equals("UIName"): + return str(aValue.Value) + + i += 1 + raise NullPointerException ("UIName property not found for Filter " + filterName); + except UnoException, exception: + traceback.print_exc() + return None + + @classmethod + def showErrorBox(self, xMSF, ResName, ResPrefix, ResID,AddTag=None, AddString=None): + ProductName = Configuration.getProductName(xMSF) + oResource = Resource(xMSF, ResPrefix) + sErrorMessage = oResource.getResText(ResID) + sErrorMessage = sErrorMessage.replace( ProductName, "%PRODUCTNAME") + sErrorMessage = sErrorMessage.replace(str(13), "<BR>") + if AddTag and AddString: + sErrorMessage = sErrorMessage.replace( AddString, AddTag) + return self.showMessageBox(xMSF, "ErrorBox", OK, sErrorMessage) + + ''' + example: + (xMSF, "ErrorBox", com.sun.star.awt.VclWindowPeerAttribute.OK, "message") + + @param windowServiceName one of the following strings: + "ErrorBox", "WarningBox", "MessBox", "InfoBox", "QueryBox". + There are other values possible, look + under src/toolkit/source/awt/vcltoolkit.cxx + @param windowAttribute see com.sun.star.awt.VclWindowPeerAttribute + @return 0 = cancel, 1 = ok, 2 = yes, 3 = no(I'm not sure here) + other values check for yourself ;-) + ''' + @classmethod + def showMessageBox(self, xMSF, windowServiceName, windowAttribute, MessageText, peer=None): + + if MessageText is None: + return 0 + + iMessage = 0 + try: + # If the peer is null we try to get one from the desktop... + if peer is None: + xFrame = Desktop.getActiveFrame(xMSF) + peer = xFrame.getComponentWindow() + + xToolkit = xMSF.createInstance("com.sun.star.awt.Toolkit") + oDescriptor = WindowDescriptor() + oDescriptor.WindowServiceName = windowServiceName + oDescriptor.Parent = peer + oDescriptor.Type = MODALTOP + oDescriptor.WindowAttributes = windowAttribute + xMsgPeer = xToolkit.createWindow(oDescriptor) + xMsgPeer.setMessageText(MessageText) + iMessage = xMsgPeer.execute() + xMsgPeer.dispose() + except Exception: + traceback.print_exc() + + return iMessage + + @classmethod + def createStringSubstitution(self, xMSF): + xPathSubst = None + try: + xPathSubst = xMSF.createInstance("com.sun.star.util.PathSubstitution") + return xPathSubst + except UnoException, e: + traceback.print_exc() + return None diff --git a/wizards/com/sun/star/wizards/common/__init__.py b/wizards/com/sun/star/wizards/common/__init__.py new file mode 100644 index 000000000000..1e42b88e42ec --- /dev/null +++ b/wizards/com/sun/star/wizards/common/__init__.py @@ -0,0 +1 @@ +"""Common""" diff --git a/wizards/com/sun/star/wizards/common/prova.py b/wizards/com/sun/star/wizards/common/prova.py new file mode 100644 index 000000000000..1219ba9aff7b --- /dev/null +++ b/wizards/com/sun/star/wizards/common/prova.py @@ -0,0 +1,7 @@ +from PropertyNames import PropertyNames + +class prova: + + def Imprimir(self): + print PropertyNames.PROPERTY_STEP + diff --git a/wizards/com/sun/star/wizards/document/OfficeDocument.py b/wizards/com/sun/star/wizards/document/OfficeDocument.py new file mode 100644 index 000000000000..5692d90f47c6 --- /dev/null +++ b/wizards/com/sun/star/wizards/document/OfficeDocument.py @@ -0,0 +1,240 @@ +from com.sun.star.awt.WindowClass import TOP +import traceback +import uno + +class OfficeDocument(object): + '''Creates a new instance of OfficeDocument ''' + + def __init__(self, _xMSF): + self.xMSF = _xMSF + + @classmethod + def attachEventCall(self, xComponent, EventName, EventType, EventURL): + try: + oEventProperties = range(2) + oEventProperties[0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + oEventProperties[0].Name = "EventType" + oEventProperties[0].Value = EventType + # "Service", "StarBasic" + oEventProperties[1] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + oEventProperties[1].Name = "Script" #"URL"; + oEventProperties[1].Value = EventURL + uno.invoke(xComponent.getEvents(), "replaceByName", (EventName, uno.Any( \ + "[]com.sun.star.beans.PropertyValue", tuple(oEventProperties)))) + except Exception, exception: + traceback.print_exc() + + def dispose(self, xMSF, xComponent): + try: + if xComponent != None: + xFrame = xComponent.getCurrentController().getFrame() + if xComponent.isModified(): + xComponent.setModified(False) + + Desktop.dispatchURL(xMSF, ".uno:CloseDoc", xFrame) + + except PropertyVetoException, exception: + traceback.print_exc() + + ''' + Create a new office document, attached to the given frame. + @param desktop + @param frame + @param sDocumentType e.g. swriter, scalc, ( simpress, scalc : not tested) + @return the document Component (implements XComponent) object ( XTextDocument, or XSpreadsheedDocument ) + ''' + + def createNewDocument(self, frame, sDocumentType, preview, readonly): + loadValues = range(2) + loadValues[0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[0].Name = "ReadOnly" + if readonly: + loadValues[0].Value = True + else: + loadValues[0].Value = False + + loadValues[1] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[1].Name = "Preview" + if preview: + loadValues[1].Value = True + else: + loadValues[1].Value = False + + sURL = "private:factory/" + sDocumentType + try: + + xComponent = frame.loadComponentFromURL(sURL, "_self", 0, loadValues) + + except Exception, exception: + traceback.print_exc() + + return xComponent + + def createNewFrame(self, xMSF, listener): + return createNewFrame(xMSF, listener, "_blank") + + def createNewFrame(self, xMSF, listener, FrameName): + xFrame = None + if FrameName.equalsIgnoreCase("WIZARD_LIVE_PREVIEW"): + xFrame = createNewPreviewFrame(xMSF, listener) + else: + xF = Desktop.getDesktop(xMSF) + xFrame = xF.findFrame(FrameName, 0) + if listener != None: + xFF = xF.getFrames() + xFF.remove(xFrame) + xF.addTerminateListener(listener) + + return xFrame + + def createNewPreviewFrame(self, xMSF, listener): + xToolkit = None + try: + xToolkit = xMSF.createInstance("com.sun.star.awt.Toolkit") + except Exception, e: + # TODO Auto-generated catch block + traceback.print_exc() + + #describe the window and its properties + aDescriptor = WindowDescriptor.WindowDescriptor() + aDescriptor.Type = TOP + aDescriptor.WindowServiceName = "window" + aDescriptor.ParentIndex = -1 + aDescriptor.Parent = None + aDescriptor.Bounds = Rectangle.Rectangle_unknown(10, 10, 640, 480) + aDescriptor.WindowAttributes = WindowAttribute.BORDER | WindowAttribute.MOVEABLE | WindowAttribute.SIZEABLE | VclWindowPeerAttribute.CLIPCHILDREN + #create a new blank container window + xPeer = None + try: + xPeer = xToolkit.createWindow(aDescriptor) + except IllegalArgumentException, e: + # TODO Auto-generated catch block + traceback.print_exc() + + #define some further properties of the frame window + #if it's needed .-) + #xPeer->setBackground(...); + #create new empty frame and set window on it + xFrame = None + try: + xFrame = xMSF.createInstance("com.sun.star.frame.Frame") + except Exception, e: + # TODO Auto-generated catch block + traceback.print_exc() + + xFrame.initialize(xPeer) + #from now this frame is useable ... + #and not part of the desktop tree. + #You are alone with him .-) + if listener != None: + Desktop.getDesktop(xMSF).addTerminateListener(listener) + + return xFrame + + @classmethod + def load(self, xInterface, sURL, sFrame, xValues): + xComponent = None + try: + xComponent = xInterface.loadComponentFromURL(sURL, sFrame, 0, tuple(xValues)) + except Exception, exception: + traceback.print_exc() + + return xComponent + + @classmethod + def store(self, xMSF, xComponent, StorePath, FilterName, bStoreToUrl): + try: + if FilterName.length() > 0: + oStoreProperties = range(2) + oStoreProperties[0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + oStoreProperties[0].Name = "FilterName" + oStoreProperties[0].Value = FilterName + oStoreProperties[1] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + oStoreProperties[1].Name = "InteractionHandler" + oStoreProperties[1].Value = xMSF.createInstance("com.sun.star.comp.uui.UUIInteractionHandler") + else: + oStoreProperties = range(0) + + if bStoreToUrl == True: + xComponent.storeToURL(StorePath, oStoreProperties) + else: + xStoreable.storeAsURL(StorePath, oStoreProperties) + + return True + except Exception, exception: + traceback.print_exc() + return False + + def close(self, xComponent): + bState = False + if xComponent != None: + try: + xComponent.close(True) + bState = True + except com.sun.star.util.CloseVetoException, exCloseVeto: + print "could not close doc" + bState = False + + else: + xComponent.dispose() + bState = True + + return bState + + def ArraytoCellRange(self, datalist, oTable, xpos, ypos): + try: + rowcount = datalist.length + if rowcount > 0: + colcount = datalist[0].length + if colcount > 0: + xNewRange = oTable.getCellRangeByPosition(xpos, ypos, (colcount + xpos) - 1, (rowcount + ypos) - 1) + xNewRange.setDataArray(datalist) + + except Exception, e: + traceback.print_exc() + + def getFileMediaDecriptor(self, xmsf, url): + typeDetect = xmsf.createInstance("com.sun.star.document.TypeDetection") + mediaDescr = range(1) + mediaDescr[0][0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + mediaDescr[0][0].Name = "URL" + mediaDescr[0][0].Value = url + Type = typeDetect.queryTypeByDescriptor(mediaDescr, True) + if Type.equals(""): + return None + else: + return typeDetect.getByName(type) + + def getTypeMediaDescriptor(self, xmsf, type): + typeDetect = xmsf.createInstance("com.sun.star.document.TypeDetection") + return typeDetect.getByName(type) + + ''' + returns the count of slides in a presentation, + or the count of pages in a draw document. + @param model a presentation or a draw document + @return the number of slides/pages in the given document. + ''' + + def getSlideCount(self, model): + return model.getDrawPages().getCount() + + def getDocumentProperties(self, document): + return document.getDocumentProperties() + + def showMessageBox(self, xMSF, windowServiceName, windowAttribute, MessageText): + + return SystemDialog.showMessageBox(xMSF, windowServiceName, windowAttribute, MessageText) + + def getWindowPeer(self): + return self.xWindowPeer + + ''' + @param windowPeer The xWindowPeer to set. + Should be called as soon as a Windowpeer of a wizard dialog is available + The windowpeer is needed to call a Messagebox + ''' + + def setWindowPeer(self, windowPeer): + self.xWindowPeer = windowPeer + diff --git a/wizards/com/sun/star/wizards/fax/CGFax.py b/wizards/com/sun/star/wizards/fax/CGFax.py new file mode 100644 index 000000000000..24b5ae067c7d --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/CGFax.py @@ -0,0 +1,31 @@ +from common.ConfigGroup import * + +class CGFax(ConfigGroup): + + def __init__(self): + + self.cp_Style = int() + self.cp_PrintCompanyLogo = bool() + self.cp_PrintDate = bool() + self.cp_PrintSubjectLine = bool() + self.cp_PrintSalutation = bool() + self.cp_PrintCommunicationType = bool() + self.cp_PrintGreeting = bool() + self.cp_PrintFooter = bool() + self.cp_CommunicationType = str() + self.cp_Salutation = str() + self.cp_Greeting = str() + self.cp_SenderAddressType = int() + self.cp_SenderCompanyName = str() + self.cp_SenderStreet = str() + self.cp_SenderPostCode = str() + self.cp_SenderState = str() + self.cp_SenderCity = str() + self.cp_SenderFax = str() + self.cp_ReceiverAddressType = int() + self.cp_Footer = str() + self.cp_FooterOnlySecondPage = bool() + self.cp_FooterPageNumbers = bool() + self.cp_CreationType = int() + self.cp_TemplateName = str() + self.cp_TemplatePath = str() diff --git a/wizards/com/sun/star/wizards/fax/CGFaxWizard.py b/wizards/com/sun/star/wizards/fax/CGFaxWizard.py new file mode 100644 index 000000000000..a6729e4a5486 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/CGFaxWizard.py @@ -0,0 +1,10 @@ +from common.ConfigGroup import * +from CGFax import CGFax + +class CGFaxWizard(ConfigGroup): + + def __init__(self): + self.cp_FaxType = int() + self.cp_BusinessFax = CGFax() + self.cp_PrivateFax = CGFax() + diff --git a/wizards/com/sun/star/wizards/fax/CallWizard.py b/wizards/com/sun/star/wizards/fax/CallWizard.py new file mode 100644 index 000000000000..2bd940d82ec4 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/CallWizard.py @@ -0,0 +1,144 @@ +import traceback + +class CallWizard(object): + + ''' + Gives a factory for creating the service. This method is called by the + <code>JavaLoader</code> + <p></p> + @param stringImplementationName The implementation name of the component. + @param xMSF The service manager, who gives access to every known service. + @param xregistrykey Makes structural information (except regarding tree + structures) of a single registry key accessible. + @return Returns a <code>XSingleServiceFactory</code> for creating the component. + @see com.sun.star.comp.loader.JavaLoader# + ''' + + @classmethod + def __getServiceFactory(self, stringImplementationName, xMSF, xregistrykey): + xsingleservicefactory = None + if stringImplementationName.equals(WizardImplementation.getName()): + xsingleservicefactory = FactoryHelper.getServiceFactory(WizardImplementation, WizardImplementation.__serviceName, xMSF, xregistrykey) + + return xsingleservicefactory + + ''' + This class implements the component. At least the interfaces XServiceInfo, + XTypeProvider, and XInitialization should be provided by the service. + ''' + + class WizardImplementation: + __serviceName = "com.sun.star.wizards.fax.CallWizard" + #private XMultiServiceFactory xmultiservicefactory + + ''' + The constructor of the inner class has a XMultiServiceFactory parameter. + @param xmultiservicefactoryInitialization A special service factory could be + introduced while initializing. + ''' + + @classmethod + def WizardImplementation_XMultiServiceFactory(self, xmultiservicefactoryInitialization): + tmp = WizardImplementation() + tmp.WizardImplementation_body_XMultiServiceFactory(xmultiservicefactoryInitialization) + return tmp + + def WizardImplementation_body_XMultiServiceFactory(self, xmultiservicefactoryInitialization): + self.xmultiservicefactory = xmultiservicefactoryInitialization + if self.xmultiservicefactory != None: + pass + + ''' + Execute Wizard + @param str only valid parameter is 'start' at the moment. + ''' + + def trigger(self, str): + if str.equalsIgnoreCase("start"): + lw = FaxWizardDialogImpl.FaxWizardDialogImpl_unknown(self.xmultiservicefactory) + if not FaxWizardDialogImpl.running: + lw.startWizard(self.xmultiservicefactory, None) + + ''' + The service name, that must be used to get an instance of this service. + The service manager, that gives access to all registered services. + This method is a member of the interface for initializing an object directly + after its creation. + @param object This array of arbitrary objects will be passed to the component + after its creation. + @throws com.sun.star.uno.Exception Every exception will not be handled, but + will be passed to the caller. + ''' + + def initialize(self, object): + pass + + ''' + This method returns an array of all supported service names. + @return Array of supported service names. + ''' + + def getSupportedServiceNames(self): + stringSupportedServiceNames = range(1) + stringSupportedServiceNames[0] = self.__class__.__serviceName + return (stringSupportedServiceNames) + + ''' + This method returns true, if the given service will be supported by the + component. + @param stringService Service name. + @return True, if the given service name will be supported. + ''' + + def supportsService(self, stringService): + booleanSupportsService = False + if stringService.equals(self.__class__.__serviceName): + booleanSupportsService = True + + return (booleanSupportsService) + + ''' + This method returns an array of bytes, that can be used to unambiguously + distinguish between two sets of types, e.g. to realise hashing functionality + when the object is introspected. Two objects that return the same ID also + have to return the same set of types in getTypes(). If an unique + implementation Id cannot be provided this method has to return an empty + sequence. Important: If the object aggregates other objects the ID has to be + unique for the whole combination of objects. + @return Array of bytes, in order to distinguish between two sets. + ''' + + def getImplementationId(self): + byteReturn = [] + try: + byteReturn = ("" + self.hashCode()).getBytes() + except Exception, exception: + traceback.print_exc() + + return (byteReturn) + + ''' + Return the class name of the component. + @return Class name of the component. + ''' + + def getImplementationName(self): + return (WizardImplementation.getName()) + + ''' + Provides a sequence of all types (usually interface types) provided by the + object. + @return Sequence of all types (usually interface types) provided by the + service. + ''' + + def getTypes(self): + typeReturn = [] + try: + #COMMENTED + #typeReturn = [new Type (XPropertyAccess.class), new Type (XJob.class), new Type (XJobExecutor.class), new Type (XTypeProvider.class), new Type (XServiceInfo.class), new Type (XInitialization.class)] + except Exception, exception: + traceback.print_exc() + + return (typeReturn) + diff --git a/wizards/com/sun/star/wizards/fax/FaxDocument.py b/wizards/com/sun/star/wizards/fax/FaxDocument.py new file mode 100644 index 000000000000..25db248c8b01 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/FaxDocument.py @@ -0,0 +1,109 @@ +import uno +from text.TextDocument import * +from com.sun.star.uno import Exception as UnoException +from text.TextSectionHandler import TextSectionHandler +from text.TextFieldHandler import TextFieldHandler +from common.Configuration import Configuration +from common.PropertyNames import PropertyNames + +from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK +from com.sun.star.style.ParagraphAdjust import CENTER +from com.sun.star.text.PageNumberType import CURRENT +from com.sun.star.style.NumberingType import ARABIC + +class FaxDocument(TextDocument): + + def __init__(self, xMSF, listener): + super(FaxDocument,self).__init__(xMSF, listener, "WIZARD_LIVE_PREVIEW") + self.keepLogoFrame = True + self.keepTypeFrame = True + + def switchElement(self, sElement, bState): + try: + mySectionHandler = TextSectionHandler(self.xMSF, self.xTextDocument) + oSection = mySectionHandler.xTextDocument.getTextSections().getByName(sElement) + Helper.setUnoPropertyValue(oSection, "IsVisible", bState) + except UnoException, exception: + traceback.print_exc() + + def updateDateFields(self): + FH = TextFieldHandler(self.xTextDocument, self.xTextDocument) + FH.updateDateFields() + + def switchFooter(self, sPageStyle, bState, bPageNumber, sText): + if self.xTextDocument != None: + self.xTextDocument.lockControllers() + try: + + xPageStyleCollection = self.xTextDocument.getStyleFamilies().getByName("PageStyles") + xPageStyle = xPageStyleCollection.getByName(sPageStyle) + + if bState: + xPageStyle.setPropertyValue("FooterIsOn", True) + xFooterText = propertySet.getPropertyValue("FooterText") + xFooterText.setString(sText) + + if bPageNumber: + #Adding the Page Number + myCursor = xFooterText.Text.createTextCursor() + myCursor.gotoEnd(False) + xFooterText.insertControlCharacter(myCursor, PARAGRAPH_BREAK, False) + myCursor.setPropertyValue("ParaAdjust", CENTER ) + + xPageNumberField = xMSFDoc.createInstance("com.sun.star.text.TextField.PageNumber") + xPageNumberField.setPropertyValue("NumberingType", uno.Any("short",ARABIC)) + xPageNumberField.setPropertyValue("SubType", CURRENT) + xFooterText.insertTextContent(xFooterText.getEnd(), xPageNumberField, False) + + else: + Helper.setUnoPropertyValue(xPageStyle, "FooterIsOn", False) + + self.xTextDocument.unlockControllers() + except UnoException, exception: + traceback.print_exc() + + def hasElement(self, sElement): + if self.xTextDocument != None: + mySectionHandler = TextSectionHandler(self.xMSF, self.xTextDocument) + return mySectionHandler.hasTextSectionByName(sElement) + else: + return False + + def switchUserField(self, sFieldName, sNewContent, bState): + myFieldHandler = TextFieldHandler(self.xMSF, self.xTextDocument) + if bState: + myFieldHandler.changeUserFieldContent(sFieldName, sNewContent) + else: + myFieldHandler.changeUserFieldContent(sFieldName, "") + + def fillSenderWithUserData(self): + try: + myFieldHandler = TextFieldHandler(self.xTextDocument, self.xTextDocument) + oUserDataAccess = Configuration.getConfigurationRoot(self.xMSF, "org.openoffice.UserProfile/Data", False) + myFieldHandler.changeUserFieldContent("Company", Helper.getUnoObjectbyName(oUserDataAccess, "o")) + myFieldHandler.changeUserFieldContent("Street", Helper.getUnoObjectbyName(oUserDataAccess, "street")) + myFieldHandler.changeUserFieldContent("PostCode", Helper.getUnoObjectbyName(oUserDataAccess, "postalcode")) + myFieldHandler.changeUserFieldContent(PropertyNames.PROPERTY_STATE, Helper.getUnoObjectbyName(oUserDataAccess, "st")) + myFieldHandler.changeUserFieldContent("City", Helper.getUnoObjectbyName(oUserDataAccess, "l")) + myFieldHandler.changeUserFieldContent("Fax", Helper.getUnoObjectbyName(oUserDataAccess, "facsimiletelephonenumber")) + except UnoException, exception: + traceback.print_exc() + + def killEmptyUserFields(self): + myFieldHandler = TextFieldHandler(self.xMSF, self.xTextDocument) + myFieldHandler.removeUserFieldByContent("") + + def killEmptyFrames(self): + try: + if not self.keepLogoFrame: + xTF = TextFrameHandler.getFrameByName("Company Logo", self.xTextDocument) + if xTF != None: + xTF.dispose() + + if not self.keepTypeFrame: + xTF = TextFrameHandler.getFrameByName("Communication Type", self.xTextDocument) + if xTF != None: + xTF.dispose() + + except UnoException, e: + traceback.print_exc() diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py new file mode 100644 index 000000000000..9ff238354e63 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialog.py @@ -0,0 +1,101 @@ +from ui.WizardDialog import * +from FaxWizardDialogResources import FaxWizardDialogResources +from FaxWizardDialogConst import * +from com.sun.star.awt.FontUnderline import SINGLE + +class FaxWizardDialog(WizardDialog): + #Image Control + #Fixed Line + #File Control + #Image Control + #Font Descriptors as Class members. + #Resources Object + + def __init__(self, xmsf): + super(FaxWizardDialog,self).__init__(xmsf, HIDMAIN ) + + #Load Resources + self.resources = FaxWizardDialogResources(xmsf) + + #set dialog properties... + Helper.setUnoPropertyValues(self.xDialogModel, + ("Closeable", PropertyNames.PROPERTY_HEIGHT, "Moveable", PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, "Title", PropertyNames.PROPERTY_WIDTH), + (True, 210, True, 104, 52, 1, uno.Any("short",1), self.resources.resFaxWizardDialog_title, 310)) + + self.fontDescriptor1 = uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor2 = uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor4 = uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + self.fontDescriptor5 = uno.createUnoStruct('com.sun.star.awt.FontDescriptor') + #Set member- FontDescriptors... + self.fontDescriptor1.Weight = 150 + self.fontDescriptor1.Underline = SINGLE + self.fontDescriptor2.Weight = 100 + self.fontDescriptor4.Weight = 100 + self.fontDescriptor5.Weight = 150 + + #build components + + def buildStep1(self): + self.optBusinessFax = self.insertRadioButton("optBusinessFax", OPTBUSINESSFAX_ITEM_CHANGED,(PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTBUSINESSFAX_HID, self.resources.resoptBusinessFax_value, 97, 28, 1, uno.Any("short",1), 184)) + self.lstBusinessStyle = self.insertListBox("lstBusinessStyle", LSTBUSINESSSTYLE_ACTION_PERFORMED, LSTBUSINESSSTYLE_ITEM_CHANGED, ("Dropdown", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (True, 12, LSTBUSINESSSTYLE_HID, 180, 40, 1, uno.Any("short",3), 74)) + self.optPrivateFax = self.insertRadioButton("optPrivateFax", OPTPRIVATEFAX_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTPRIVATEFAX_HID, self.resources.resoptPrivateFax_value, 97, 81, 1, uno.Any("short",2), 184)) + self.lstPrivateStyle = self.insertListBox("lstPrivateStyle", LSTPRIVATESTYLE_ACTION_PERFORMED, LSTPRIVATESTYLE_ITEM_CHANGED, ("Dropdown", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (True, 12, LSTPRIVATESTYLE_HID, 180, 95, 1, uno.Any("short",4), 74)) + self.lblBusinessStyle = self.insertLabel("lblBusinessStyle", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblBusinessStyle_value, 110, 42, 1, uno.Any("short",32), 60)) + + self.lblTitle1 = self.insertLabel("lblTitle1", ("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (self.fontDescriptor5, 16, self.resources.reslblTitle1_value, True, 91, 8, 1, uno.Any("short",37), 212)) + self.lblPrivateStyle = self.insertLabel("lblPrivateStyle", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblPrivateStyle_value, 110, 95, 1, uno.Any("short",50), 60)) + self.lblIntroduction = self.insertLabel("lblIntroduction", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (39, self.resources.reslblIntroduction_value, True, 104, 145, 1, uno.Any("short",55), 199)) + self.ImageControl3 = self.insertInfoImage(92, 145, 1) + def buildStep2(self): + self.chkUseLogo = self.insertCheckBox("chkUseLogo", CHKUSELOGO_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSELOGO_HID, self.resources.reschkUseLogo_value, 97, 28, uno.Any("short",0), 2, uno.Any("short",5), 212)) + self.chkUseDate = self.insertCheckBox("chkUseDate", CHKUSEDATE_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSEDATE_HID, self.resources.reschkUseDate_value, 97, 43, uno.Any("short",0), 2,uno.Any("short",6), 212)) + self.chkUseCommunicationType = self.insertCheckBox("chkUseCommunicationType", CHKUSECOMMUNICATIONTYPE_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSECOMMUNICATIONTYPE_HID, self.resources.reschkUseCommunicationType_value, 97, 57, uno.Any("short",0), 2, uno.Any("short",07), 100)) + self.lstCommunicationType = self.insertComboBox("lstCommunicationType", LSTCOMMUNICATIONTYPE_ACTION_PERFORMED, LSTCOMMUNICATIONTYPE_ITEM_CHANGED, LSTCOMMUNICATIONTYPE_TEXT_CHANGED, ("Dropdown", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (True, 12, LSTCOMMUNICATIONTYPE_HID, 105, 68, 2, uno.Any("short",8), 174)) + self.chkUseSubject = self.insertCheckBox("chkUseSubject", CHKUSESUBJECT_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSESUBJECT_HID, self.resources.reschkUseSubject_value, 97, 87, uno.Any("short",0), 2, uno.Any("short",9), 212)) + self.chkUseSalutation = self.insertCheckBox("chkUseSalutation", CHKUSESALUTATION_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSESALUTATION_HID, self.resources.reschkUseSalutation_value, 97, 102, uno.Any("short",0), 2, uno.Any("short",10), 100)) + self.lstSalutation = self.insertComboBox("lstSalutation", LSTSALUTATION_ACTION_PERFORMED, LSTSALUTATION_ITEM_CHANGED, LSTSALUTATION_TEXT_CHANGED, ("Dropdown", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (True, 12, LSTSALUTATION_HID, 105, 113, 2, uno.Any("short",11), 174)) + self.chkUseGreeting = self.insertCheckBox("chkUseGreeting", CHKUSEGREETING_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSEGREETING_HID, self.resources.reschkUseGreeting_value, 97, 132, uno.Any("short",0), 2, uno.Any("short",12), 100)) + self.lstGreeting = self.insertComboBox("lstGreeting", LSTGREETING_ACTION_PERFORMED, LSTGREETING_ITEM_CHANGED, LSTGREETING_TEXT_CHANGED, ("Dropdown", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (True, 12, LSTGREETING_HID, 105, 143, 2,uno.Any("short",13), 174)) + self.chkUseFooter = self.insertCheckBox("chkUseFooter", CHKUSEFOOTER_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKUSEFOOTER_HID, self.resources.reschkUseFooter_value, 97, 163, uno.Any("short",0), 2, uno.Any("short",14), 212)) + self.lblTitle3 = self.insertLabel("lblTitle3", ("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (self.fontDescriptor5, 16, self.resources.reslblTitle3_value, True, 91, 8, 2, uno.Any("short",59), 212)) + + def buildStep3(self): + self.optSenderPlaceholder = self.insertRadioButton("optSenderPlaceholder", OPTSENDERPLACEHOLDER_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTSENDERPLACEHOLDER_HID, self.resources.resoptSenderPlaceholder_value, 104, 42, 3, uno.Any("short",15), 149)) + self.optSenderDefine = self.insertRadioButton("optSenderDefine", OPTSENDERDEFINE_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTSENDERDEFINE_HID, self.resources.resoptSenderDefine_value, 104, 54, 3, uno.Any("short",16), 149)) + self.txtSenderName = self.insertTextField("txtSenderName", TXTSENDERNAME_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (12, TXTSENDERNAME_HID, 182, 67, 3, uno.Any("short",17), 119)) + self.txtSenderStreet = self.insertTextField("txtSenderStreet", TXTSENDERSTREET_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (12, TXTSENDERSTREET_HID, 182, 81, 3, uno.Any("short",18), 119)) + self.txtSenderPostCode = self.insertTextField("txtSenderPostCode", TXTSENDERPOSTCODE_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (12, TXTSENDERPOSTCODE_HID, 182, 95, 3, uno.Any("short",19), 25)) + self.txtSenderState = self.insertTextField("txtSenderState", TXTSENDERSTATE_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (12, TXTSENDERSTATE_HID, 211, 95, 3, uno.Any("short",20), 21)) + self.txtSenderCity = self.insertTextField("txtSenderCity", TXTSENDERCITY_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (12, TXTSENDERCITY_HID, 236, 95, 3, uno.Any("short",21), 65)) + self.txtSenderFax = self.insertTextField("txtSenderFax", TXTSENDERFAX_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (12, TXTSENDERFAX_HID, 182, 109, 3, uno.Any("short",22), 119)) + self.optReceiverPlaceholder = self.insertRadioButton("optReceiverPlaceholder", OPTRECEIVERPLACEHOLDER_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTRECEIVERPLACEHOLDER_HID, self.resources.resoptReceiverPlaceholder_value, 104, 148, 3, uno.Any("short",23), 200)) + self.optReceiverDatabase = self.insertRadioButton("optReceiverDatabase", OPTRECEIVERDATABASE_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTRECEIVERDATABASE_HID, self.resources.resoptReceiverDatabase_value, 104, 160, 3, uno.Any("short",24), 200)) + self.lblSenderAddress = self.insertLabel("lblSenderAddress", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblSenderAddress_value, 97, 28, 3, uno.Any("short",46), 136)) + self.FixedLine2 = self.insertFixedLine("FixedLine2", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (5, 90, 126, 3, uno.Any("short",51), 212)) + self.lblSenderName = self.insertLabel("lblSenderName", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblSenderName_value, 113, 69, 3, uno.Any("short",52), 68)) + self.lblSenderStreet = self.insertLabel("lblSenderStreet", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblSenderStreet_value, 113, 82, 3, uno.Any("short",53), 68)) + self.lblPostCodeCity = self.insertLabel("lblPostCodeCity", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblPostCodeCity_value, 113, 97, 3, uno.Any("short",54), 68)) + self.lblTitle4 = self.insertLabel("lblTitle4", ("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (self.fontDescriptor5, 16, self.resources.reslblTitle4_value, True, 91, 8, 3, uno.Any("short",60), 212)) + self.Label1 = self.insertLabel("lblSenderFax", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.resLabel1_value, 113, 111, 3, uno.Any("short",68), 68)) + self.Label2 = self.insertLabel("Label2", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.resLabel2_value, 97, 137, 3, uno.Any("short",69), 136)) + + def buildStep4(self): + self.txtFooter = self.insertTextField("txtFooter", TXTFOOTER_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (47, TXTFOOTER_HID, True, 97, 40, 4, uno.Any("short",25), 203)) + self.chkFooterNextPages = self.insertCheckBox("chkFooterNextPages", CHKFOOTERNEXTPAGES_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKFOOTERNEXTPAGES_HID, self.resources.reschkFooterNextPages_value, 97, 92, uno.Any("short",0), 4, uno.Any("short",26), 202)) + self.chkFooterPageNumbers = self.insertCheckBox("chkFooterPageNumbers", CHKFOOTERPAGENUMBERS_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STATE, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, CHKFOOTERPAGENUMBERS_HID, self.resources.reschkFooterPageNumbers_value, 97, 106, uno.Any("short",0), 4, uno.Any("short",27), 201)) + self.lblFooter = self.insertLabel("lblFooter", ("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (self.fontDescriptor4, 8, self.resources.reslblFooter_value, 97, 28, 4, uno.Any("short",33), 116)) + self.lblTitle5 = self.insertLabel("lblTitle5", ("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (self.fontDescriptor5, 16, self.resources.reslblTitle5_value, True, 91, 8, 4, uno.Any("short",61), 212)) + + def buildStep5(self): + self.txtTemplateName = self.insertTextField("txtTemplateName", TXTTEMPLATENAME_TEXT_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, "Text", PropertyNames.PROPERTY_WIDTH), (12, TXTTEMPLATENAME_HID, 202, 56, 5, uno.Any("short",28), self.resources.restxtTemplateName_value, 100)) + + self.optCreateFax = self.insertRadioButton("optCreateFax", OPTCREATEFAX_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTCREATEFAX_HID, self.resources.resoptCreateFax_value, 104, 111, 5, uno.Any("short",30), 198)) + self.optMakeChanges = self.insertRadioButton("optMakeChanges", OPTMAKECHANGES_ITEM_CHANGED, (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, OPTMAKECHANGES_HID, self.resources.resoptMakeChanges_value, 104, 123, 5, uno.Any("short",31), 198)) + self.lblFinalExplanation1 = self.insertLabel("lblFinalExplanation1", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (28, self.resources.reslblFinalExplanation1_value, True, 97, 28, 5, uno.Any("short",34), 205)) + self.lblProceed = self.insertLabel("lblProceed", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblProceed_value, 97, 100, 5, uno.Any("short",35), 204)) + self.lblFinalExplanation2 = self.insertLabel("lblFinalExplanation2", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (33, self.resources.reslblFinalExplanation2_value, True, 104, 145, 5, uno.Any("short",36), 199)) + self.ImageControl2 = self.insertImage("ImageControl2", ("Border", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_IMAGEURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "ScaleImage", PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (uno.Any("short",0), 10, "private:resource/dbu/image/19205", 92, 145, False, 5, uno.Any("short",47), 10)) + self.lblTemplateName = self.insertLabel("lblTemplateName", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (8, self.resources.reslblTemplateName_value, 97, 58, 5, uno.Any("short",57), 101)) + + self.lblTitle6 = self.insertLabel("lblTitle6", ("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH), (self.fontDescriptor5, 16, self.resources.reslblTitle6_value, True, 91, 8, 5, uno.Any("short",62), 212)) + diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialogConst.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialogConst.py new file mode 100644 index 000000000000..05a5ba7372d6 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialogConst.py @@ -0,0 +1,83 @@ +from common.HelpIds import HelpIds + + +OPTBUSINESSFAX_ITEM_CHANGED = "optBusinessFaxItemChanged" +LSTBUSINESSSTYLE_ACTION_PERFORMED = None # "lstBusinessStyleActionPerformed" +LSTBUSINESSSTYLE_ITEM_CHANGED = "lstBusinessStyleItemChanged" +OPTPRIVATEFAX_ITEM_CHANGED = "optPrivateFaxItemChanged" +LSTPRIVATESTYLE_ACTION_PERFORMED = None # "lstPrivateStyleActionPerformed" +LSTPRIVATESTYLE_ITEM_CHANGED = "lstPrivateStyleItemChanged" +CHKUSELOGO_ITEM_CHANGED = "chkUseLogoItemChanged" +CHKUSEDATE_ITEM_CHANGED = "chkUseDateItemChanged" +CHKUSECOMMUNICATIONTYPE_ITEM_CHANGED = "chkUseCommunicationItemChanged" +LSTCOMMUNICATIONTYPE_ACTION_PERFORMED = None # "lstCommunicationActionPerformed" +LSTCOMMUNICATIONTYPE_ITEM_CHANGED = "lstCommunicationItemChanged" +LSTCOMMUNICATIONTYPE_TEXT_CHANGED = "lstCommunicationTextChanged" +CHKUSESUBJECT_ITEM_CHANGED = "chkUseSubjectItemChanged" +CHKUSESALUTATION_ITEM_CHANGED = "chkUseSalutationItemChanged" +LSTSALUTATION_ACTION_PERFORMED = None # "lstSalutationActionPerformed" +LSTSALUTATION_ITEM_CHANGED = "lstSalutationItemChanged" +LSTSALUTATION_TEXT_CHANGED = "lstSalutationTextChanged" +CHKUSEGREETING_ITEM_CHANGED = "chkUseGreetingItemChanged" +LSTGREETING_ACTION_PERFORMED = None # "lstGreetingActionPerformed" +LSTGREETING_ITEM_CHANGED = "lstGreetingItemChanged" +LSTGREETING_TEXT_CHANGED = "lstGreetingTextChanged" +CHKUSEFOOTER_ITEM_CHANGED = "chkUseFooterItemChanged" +OPTSENDERPLACEHOLDER_ITEM_CHANGED = "optSenderPlaceholderItemChanged" +OPTSENDERDEFINE_ITEM_CHANGED = "optSenderDefineItemChanged" +TXTSENDERNAME_TEXT_CHANGED = "txtSenderNameTextChanged" +TXTSENDERSTREET_TEXT_CHANGED = "txtSenderStreetTextChanged" +TXTSENDERPOSTCODE_TEXT_CHANGED = "txtSenderPostCodeTextChanged" +TXTSENDERSTATE_TEXT_CHANGED = "txtSenderStateTextChanged" +TXTSENDERCITY_TEXT_CHANGED = "txtSenderCityTextChanged" +TXTSENDERFAX_TEXT_CHANGED = "txtSenderFaxTextChanged" +OPTRECEIVERPLACEHOLDER_ITEM_CHANGED = "optReceiverPlaceholderItemChanged" +OPTRECEIVERDATABASE_ITEM_CHANGED = "optReceiverDatabaseItemChanged" +TXTFOOTER_TEXT_CHANGED = "txtFooterTextChanged" +CHKFOOTERNEXTPAGES_ITEM_CHANGED = "chkFooterNextPagesItemChanged" +CHKFOOTERPAGENUMBERS_ITEM_CHANGED = "chkFooterPageNumbersItemChanged" +TXTTEMPLATENAME_TEXT_CHANGED = "txtTemplateNameTextChanged" +FILETEMPLATEPATH_TEXT_CHANGED = None # "fileTemplatePathTextChanged" +OPTCREATEFAX_ITEM_CHANGED = "optCreateFaxItemChanged" +OPTMAKECHANGES_ITEM_CHANGED = "optMakeChangesItemChanged" +imageURLImageControl2 = None #"images/ImageControl2" +imageURLImageControl3 = None #"images/ImageControl3" + +#Help IDs + +HID = 41119 #TODO enter first hid here +HIDMAIN = 41180 +OPTBUSINESSFAX_HID = HelpIds.getHelpIdString(HID + 1) +LSTBUSINESSSTYLE_HID = HelpIds.getHelpIdString(HID + 2) +OPTPRIVATEFAX_HID = HelpIds.getHelpIdString(HID + 3) +LSTPRIVATESTYLE_HID = HelpIds.getHelpIdString(HID + 4) +IMAGECONTROL3_HID = HelpIds.getHelpIdString(HID + 5) +CHKUSELOGO_HID = HelpIds.getHelpIdString(HID + 6) +CHKUSEDATE_HID = HelpIds.getHelpIdString(HID + 7) +CHKUSECOMMUNICATIONTYPE_HID = HelpIds.getHelpIdString(HID + 8) +LSTCOMMUNICATIONTYPE_HID = HelpIds.getHelpIdString(HID + 9) +CHKUSESUBJECT_HID = HelpIds.getHelpIdString(HID + 10) +CHKUSESALUTATION_HID = HelpIds.getHelpIdString(HID + 11) +LSTSALUTATION_HID = HelpIds.getHelpIdString(HID + 12) +CHKUSEGREETING_HID = HelpIds.getHelpIdString(HID + 13) +LSTGREETING_HID = HelpIds.getHelpIdString(HID + 14) +CHKUSEFOOTER_HID = HelpIds.getHelpIdString(HID + 15) +OPTSENDERPLACEHOLDER_HID = HelpIds.getHelpIdString(HID + 16) +OPTSENDERDEFINE_HID = HelpIds.getHelpIdString(HID + 17) +TXTSENDERNAME_HID = HelpIds.getHelpIdString(HID + 18) +TXTSENDERSTREET_HID = HelpIds.getHelpIdString(HID + 19) +TXTSENDERPOSTCODE_HID = HelpIds.getHelpIdString(HID + 20) +TXTSENDERSTATE_HID = HelpIds.getHelpIdString(HID + 21) +TXTSENDERCITY_HID = HelpIds.getHelpIdString(HID + 22) +TXTSENDERFAX_HID = HelpIds.getHelpIdString(HID + 23) +OPTRECEIVERPLACEHOLDER_HID = HelpIds.getHelpIdString(HID + 24) +OPTRECEIVERDATABASE_HID = HelpIds.getHelpIdString(HID + 25) +TXTFOOTER_HID = HelpIds.getHelpIdString(HID + 26) +CHKFOOTERNEXTPAGES_HID = HelpIds.getHelpIdString(HID + 27) +CHKFOOTERPAGENUMBERS_HID = HelpIds.getHelpIdString(HID + 28) +TXTTEMPLATENAME_HID = HelpIds.getHelpIdString(HID + 29) +FILETEMPLATEPATH_HID = HelpIds.getHelpIdString(HID + 30) +OPTCREATEFAX_HID = HelpIds.getHelpIdString(HID + 31) +OPTMAKECHANGES_HID = HelpIds.getHelpIdString(HID + 32) +IMAGECONTROL2_HID = HelpIds.getHelpIdString(HID + 33) + diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py new file mode 100644 index 000000000000..b1500b02200c --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialogImpl.py @@ -0,0 +1,539 @@ +from FaxWizardDialog import * +from CGFaxWizard import * +from FaxDocument import * +from ui.PathSelection import * +from common.FileAccess import * +from ui.event.UnoDataAware import * +from ui.event.RadioDataAware import * +from ui.XPathSelectionListener import XPathSelectionListener +from common.Configuration import * +from document.OfficeDocument import OfficeDocument +from text.TextFieldHandler import TextFieldHandler + +from common.NoValidPathException import * +from com.sun.star.uno import RuntimeException +from com.sun.star.util import CloseVetoException + +from com.sun.star.view.DocumentZoomType import OPTIMAL +from com.sun.star.document.UpdateDocMode import FULL_UPDATE +from com.sun.star.document.MacroExecMode import ALWAYS_EXECUTE + +class FaxWizardDialogImpl(FaxWizardDialog): + + def leaveStep(self, nOldStep, nNewStep): + pass + + def enterStep(self, nOldStep, nNewStep): + pass + + RM_TYPESTYLE = 1 + RM_ELEMENTS = 2 + RM_SENDERRECEIVER = 3 + RM_FOOTER = 4 + RM_FINALSETTINGS = 5 + + + def __init__(self, xmsf): + super(FaxWizardDialogImpl,self).__init__(xmsf) + self.mainDA = [] + self.faxDA = [] + self.bSaveSuccess = False + self.__filenameChanged = False + self.UserTemplatePath = "" + self.sTemplatePath = "" + + @classmethod + def main(self, args): + #only being called when starting wizard remotely + try: + ConnectStr = "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" + xLocMSF = Desktop.connect(ConnectStr) + lw = FaxWizardDialogImpl(xLocMSF) + print + print "lw.startWizard" + print + lw.startWizard(xLocMSF, None) + except RuntimeException, e: + # TODO Auto-generated catch block + traceback.print_exc() + except UnoException, e: + # TODO Auto-generated catch blocksetMaxStep + traceback.print_exc() + except Exception, e: + # TODO Auto-generated catch blocksetMaxStep + traceback.print_exc() + + def startWizard(self, xMSF, CurPropertyValue): + self.running = True + try: + #Number of steps on WizardDialog: + self.setMaxStep(5) + + #instatiate The Document Frame for the Preview + self.myFaxDoc = FaxDocument(xMSF, self) + + #create the dialog: + self.drawNaviBar() + self.buildStep1() + self.buildStep2() + self.buildStep3() + self.buildStep4() + self.buildStep5() + + self.initializeSalutation() + self.initializeGreeting() + self.initializeCommunication() + self.__initializePaths() + + #special Control fFrameor setting the save Path: + self.insertPathSelectionControl() + + #load the last used settings from the registry and apply listeners to the controls: + self.initConfiguration() + + self.initializeTemplates(xMSF) + + #update the dialog UI according to the loaded Configuration + self.__updateUI() + if self.myPathSelection.xSaveTextBox.getText().lower() == "": + self.myPathSelection.initializePath() + + self.xContainerWindow = self.myFaxDoc.xFrame.getContainerWindow() + self.createWindowPeer(self.xContainerWindow); + + #add the Roadmap to the dialog: + self.insertRoadmap() + + #load the last used document and apply last used settings: + #TODO: + self.setConfiguration() + + #If the configuration does not define Greeting/Salutation/CommunicationType yet choose a default + self.__setDefaultForGreetingAndSalutationAndCommunication() + + #disable funtionality that is not supported by the template: + self.initializeElements() + + #disable the document, so that the user cannot change anything: + self.myFaxDoc.xFrame.getComponentWindow().setEnable(False) + + self.executeDialogFromComponent(self.myFaxDoc.xFrame) + self.removeTerminateListener() + self.closeDocument() + self.running = False + except UnoException, exception: + self.removeTerminateListener() + traceback.print_exc() + self.running = False + return + + def cancelWizard(self): + xDialog.endExecute() + self.running = False + + def finishWizard(self): + switchToStep(getCurrentStep(), getMaxStep()) + self.myFaxDoc.setWizardTemplateDocInfo(self.resources.resFaxWizardDialog_title, self.resources.resTemplateDescription) + try: + fileAccess = FileAccess(xMSF) + self.sPath = self.myPathSelection.getSelectedPath() + if self.sPath.equals(""): + self.myPathSelection.triggerPathPicker() + self.sPath = self.myPathSelection.getSelectedPath() + + self.sPath = fileAccess.getURL(self.sPath) + #first, if the filename was not changed, thus + #it is coming from a saved session, check if the + # file exists and warn the user. + if not self.__filenameChanged: + if fileAccess.exists(self.sPath, True): + answer = SystemDialog.showMessageBox(xMSF, xControl.getPeer(), "MessBox", VclWindowPeerAttribute.YES_NO + VclWindowPeerAttribute.DEF_NO, self.resources.resOverwriteWarning) + if (answer == 3): # user said: no, do not overwrite.... + return False + + + self.myFaxDoc.setWizardTemplateDocInfo(self.resources.resFaxWizardDialog_title, self.resources.resTemplateDescription) + self.myFaxDoc.killEmptyUserFields() + self.myFaxDoc.keepLogoFrame = (self.chkUseLogo.getState() != 0); + self.myFaxDoc.keepTypeFrame = (self.chkUseCommunicationType.getState() != 0); + self.myFaxDoc.killEmptyFrames() + self.bSaveSuccess = OfficeDocument.store(xMSF, self.xTextDocument, self.sPath, "writer8_template", False) + if self.bSaveSuccess: + saveConfiguration() + xIH = xMSF.createInstance("com.sun.star.comp.uui.UUIInteractionHandler") + loadValues = range(3) + loadValues[0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[0].Name = "AsTemplate"; + loadValues[0].Value = True; + loadValues[1] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[1].Name = "MacroExecutionMode"; + loadValues[1].Value = uno.Any("short",ALWAYS_EXECUTE) + loadValues[2] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[2].Name = "UpdateDocMode"; + loadValues[2].Value = uno.Any("short",FULL_UPDATE) + loadValues[3] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[3].Name = "InteractionHandler" + loadValues[3].Value = xIH + if self.bEditTemplate: + loadValues[0].Value = False + else: + loadValues[0].Value = True + + oDoc = OfficeDocument.load(Desktop.getDesktop(xMSF), self.sPath, "_default", loadValues) + myViewHandler = oDoc.getCurrentController().getViewSettings() + myViewHandler.setPropertyValue("ZoomType", uno.Any("short",OPTIMAL)); + else: + pass + #TODO: Error Handling + + except UnoException, e: + traceback.print_exc() + finally: + xDialog.endExecute() + self.running = False + + return True + + def closeDocument(self): + try: + self.myFaxDoc.xFrame.close(False) + except CloseVetoException, e: + traceback.print_exc() + + def insertRoadmap(self): + self.addRoadmap() + i = 0 + i = self.insertRoadmapItem(0, True, self.resources.RoadmapLabels[FaxWizardDialogImpl.RM_TYPESTYLE - 1], FaxWizardDialogImpl.RM_TYPESTYLE) + i = self.insertRoadmapItem(i, True, self.resources.RoadmapLabels[FaxWizardDialogImpl.RM_ELEMENTS - 1], FaxWizardDialogImpl.RM_ELEMENTS) + i = self.insertRoadmapItem(i, True, self.resources.RoadmapLabels[FaxWizardDialogImpl.RM_SENDERRECEIVER - 1], FaxWizardDialogImpl.RM_SENDERRECEIVER) + i = self.insertRoadmapItem(i, False, self.resources.RoadmapLabels[FaxWizardDialogImpl.RM_FOOTER - 1], FaxWizardDialogImpl.RM_FOOTER) + i = self.insertRoadmapItem(i, True, self.resources.RoadmapLabels[FaxWizardDialogImpl.RM_FINALSETTINGS - 1], FaxWizardDialogImpl.RM_FINALSETTINGS) + self.setRoadmapInteractive(True) + self.setRoadmapComplete(True) + self.setCurrentRoadmapItemID(1) + + class __myPathSelectionListener(XPathSelectionListener): + + def validatePath(self): + if self.myPathSelection.usedPathPicker: + self.__filenameChanged = True + + self.myPathSelection.usedPathPicker = False + + def insertPathSelectionControl(self): + self.myPathSelection = PathSelection(self.xMSF, self, PathSelection.TransferMode.SAVE, PathSelection.DialogTypes.FILE) + self.myPathSelection.insert(5, 97, 70, 205, 45, self.resources.reslblTemplatePath_value, True, HelpIds.getHelpIdString(HID + 34), HelpIds.getHelpIdString(HID + 35)) + self.myPathSelection.sDefaultDirectory = self.UserTemplatePath + self.myPathSelection.sDefaultName = "myFaxTemplate.ott" + self.myPathSelection.sDefaultFilter = "writer8_template" + self.myPathSelection.addSelectionListener(self.__myPathSelectionListener()) + + def __updateUI(self): + UnoDataAware.updateUIs(self.mainDA) + UnoDataAware.updateUIs(self.faxDA) + + def __initializePaths(self): + try: + self.sTemplatePath = FileAccess.getOfficePath2(self.xMSF, "Template", "share", "/wizard") + self.UserTemplatePath = FileAccess.getOfficePath2(self.xMSF, "Template", "user", "") + self.sBitmapPath = FileAccess.combinePaths(self.xMSF, self.sTemplatePath, "/../wizard/bitmap") + except NoValidPathException, e: + traceback.print_exc() + + def initializeTemplates(self, xMSF): + try: + self.sFaxPath = FileAccess.combinePaths(xMSF,self.sTemplatePath, "/wizard/fax") + self.sWorkPath = FileAccess.getOfficePath2(xMSF, "Work", "", "") + self.BusinessFiles = FileAccess.getFolderTitles(xMSF, "bus", self.sFaxPath) + self.PrivateFiles = FileAccess.getFolderTitles(xMSF, "pri", self.sFaxPath) + + self.setControlProperty("lstBusinessStyle", "StringItemList", self.BusinessFiles[0]) + self.setControlProperty("lstPrivateStyle", "StringItemList", self.PrivateFiles[0]) + self.setControlProperty("lstBusinessStyle", "SelectedItems", [0]) + self.setControlProperty("lstPrivateStyle", "SelectedItems" , [0]) + return True + except NoValidPathException, e: + # TODO Auto-generated catch block + traceback.print_exc() + return False + + def initializeElements(self): + self.setControlProperty("chkUseLogo", PropertyNames.PROPERTY_ENABLED, self.myFaxDoc.hasElement("Company Logo")) + self.setControlProperty("chkUseSubject", PropertyNames.PROPERTY_ENABLED,self.myFaxDoc.hasElement("Subject Line")) + self.setControlProperty("chkUseDate", PropertyNames.PROPERTY_ENABLED,self.myFaxDoc.hasElement("Date")) + self.myFaxDoc.updateDateFields() + + def initializeSalutation(self): + self.setControlProperty("lstSalutation", "StringItemList", self.resources.SalutationLabels) + + def initializeGreeting(self): + self.setControlProperty("lstGreeting", "StringItemList", self.resources.GreetingLabels) + + def initializeCommunication(self): + self.setControlProperty("lstCommunicationType", "StringItemList", self.resources.CommunicationLabels) + + def __setDefaultForGreetingAndSalutationAndCommunication(self): + if self.lstSalutation.getText() == "": + self.lstSalutation.setText(self.resources.SalutationLabels[0]) + + if self.lstGreeting.getText() == "": + self.lstGreeting.setText(self.resources.GreetingLabels[0]) + + if self.lstCommunicationType.getText() == "": + self.lstCommunicationType.setText(self.resources.CommunicationLabels[0]) + + def initConfiguration(self): + try: + self.myConfig = CGFaxWizard() + root = Configuration.getConfigurationRoot(self.xMSF, "/org.openoffice.Office.Writer/Wizards/Fax", False) + self.myConfig.readConfiguration(root, "cp_") + self.mainDA.append(RadioDataAware.attachRadioButtons(self.myConfig, "cp_FaxType", (self.optBusinessFax, self.optPrivateFax), None, True)) + self.mainDA.append(UnoDataAware.attachListBox(self.myConfig.cp_BusinessFax, "cp_Style", self.lstBusinessStyle, None, True)) + self.mainDA.append(UnoDataAware.attachListBox(self.myConfig.cp_PrivateFax, "cp_Style", self.lstPrivateStyle, None, True)) + cgl = self.myConfig.cp_BusinessFax + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintCompanyLogo", self.chkUseLogo, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintSubjectLine", self.chkUseSubject, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintSalutation", self.chkUseSalutation, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintDate", self.chkUseDate, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintCommunicationType", self.chkUseCommunicationType, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintGreeting", self.chkUseGreeting, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_PrintFooter", self.chkUseFooter, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_Salutation", self.lstSalutation, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_Greeting", self.lstGreeting, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_CommunicationType", self.lstCommunicationType, None, True)) + self.faxDA.append(RadioDataAware.attachRadioButtons(cgl, "cp_SenderAddressType", (self.optSenderDefine, self.optSenderPlaceholder), None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_SenderCompanyName", self.txtSenderName, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_SenderStreet", self.txtSenderStreet, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_SenderPostCode", self.txtSenderPostCode, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_SenderState", self.txtSenderState, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_SenderCity", self.txtSenderCity, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_SenderFax", self.txtSenderFax, None, True)) + self.faxDA.append(RadioDataAware.attachRadioButtons(cgl, "cp_ReceiverAddressType", (self.optReceiverDatabase, self.optReceiverPlaceholder), None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_Footer", self.txtFooter, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_FooterOnlySecondPage", self.chkFooterNextPages, None, True)) + self.faxDA.append(UnoDataAware.attachCheckBox(cgl, "cp_FooterPageNumbers", self.chkFooterPageNumbers, None, True)) + self.faxDA.append(RadioDataAware.attachRadioButtons(cgl, "cp_CreationType", (self.optCreateFax, self.optMakeChanges), None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_TemplateName", self.txtTemplateName, None, True)) + self.faxDA.append(UnoDataAware.attachEditControl(cgl, "cp_TemplatePath", self.myPathSelection.xSaveTextBox, None, True)) + except UnoException, exception: + traceback.print_exc() + + def saveConfiguration(self): + try: + root = Configuration.getConfigurationRoot(xMSF, "/org.openoffice.Office.Writer/Wizards/Fax", True) + self.myConfig.writeConfiguration(root, "cp_") + Configuration.commit(root) + except UnoException, e: + traceback.print_exc() + + def setConfiguration(self): + #set correct Configuration tree: + if self.optBusinessFax.getState(): + self.optBusinessFaxItemChanged() + if self.optPrivateFax.getState(): + self.optPrivateFaxItemChanged() + + def optBusinessFaxItemChanged(self): + DataAware.setDataObjects(self.faxDA, self.myConfig.cp_BusinessFax, True) + self.setControlProperty("lblBusinessStyle", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("lstBusinessStyle", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("lblPrivateStyle", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("lstPrivateStyle", PropertyNames.PROPERTY_ENABLED, False) + self.lstBusinessStyleItemChanged() + self.__enableSenderReceiver() + self.__setPossibleFooter(True) + def lstBusinessStyleItemChanged(self): + self.xTextDocument = self.myFaxDoc.loadAsPreview(self.BusinessFiles[1][self.lstBusinessStyle.getSelectedItemPos()], False) + self.initializeElements() + self.setElements() + + def optPrivateFaxItemChanged(self): + DataAware.setDataObjects(self.faxDA, self.myConfig.cp_PrivateFax, True) + self.setControlProperty("lblBusinessStyle", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("lstBusinessStyle", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("lblPrivateStyle", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("lstPrivateStyle", PropertyNames.PROPERTY_ENABLED, True) + self.lstPrivateStyleItemChanged() + self.__disableSenderReceiver() + self.__setPossibleFooter(False) + + def lstPrivateStyleItemChanged(self): + self.xTextDocument = self.myFaxDoc.loadAsPreview(self.PrivateFiles[1][self.lstPrivateStyle.getSelectedItemPos()], False) + self.initializeElements() + self.setElements() + + def txtTemplateNameTextChanged(self): + xDocProps = self.xTextDocument.getDocumentProperties() + xDocProps.Title = self.txtTemplateName.getText() + + def optSenderPlaceholderItemChanged(self): + self.setControlProperty("lblSenderName", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("lblSenderStreet", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("lblPostCodeCity", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("lblSenderFax", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("txtSenderName", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("txtSenderStreet", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("txtSenderPostCode", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("txtSenderState", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("txtSenderCity", PropertyNames.PROPERTY_ENABLED, False) + self.setControlProperty("txtSenderFax", PropertyNames.PROPERTY_ENABLED, False) + self.myFaxDoc.fillSenderWithUserData() + + def optSenderDefineItemChanged(self): + self.setControlProperty("lblSenderName", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("lblSenderStreet", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("lblPostCodeCity", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("lblSenderFax", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("txtSenderName", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("txtSenderStreet", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("txtSenderPostCode", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("txtSenderState", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("txtSenderCity", PropertyNames.PROPERTY_ENABLED, True) + self.setControlProperty("txtSenderFax", PropertyNames.PROPERTY_ENABLED, True) + self.txtSenderNameTextChanged() + self.txtSenderStreetTextChanged() + self.txtSenderPostCodeTextChanged() + self.txtSenderStateTextChanged() + self.txtSenderCityTextChanged() + self.txtSenderFaxTextChanged() + + def optReceiverPlaceholderItemChanged(self): + OfficeDocument.attachEventCall(self.xTextDocument, "OnNew", "StarBasic", "macro:#/Template.Correspondence.Placeholder()") + + def optReceiverDatabaseItemChanged(self): + OfficeDocument.attachEventCall(self.xTextDocument, "OnNew", "StarBasic", "macro:#/Template.Correspondence.Database()") + + def optCreateFaxItemChanged(self): + self.bEditTemplate = False + + def optMakeChangesItemChanged(self): + self.bEditTemplate = True + + def txtSenderNameTextChanged(self): + myFieldHandler = TextFieldHandler(self.myFaxDoc.xMSF, self.xTextDocument) + myFieldHandler.changeUserFieldContent("Company", self.txtSenderName.getText()) + + def txtSenderStreetTextChanged(self): + myFieldHandler = TextFieldHandler(self.myFaxDoc.xMSF, self.xTextDocument) + myFieldHandler.changeUserFieldContent("Street", self.txtSenderStreet.getText()) + + def txtSenderCityTextChanged(self): + myFieldHandler = TextFieldHandler(self.myFaxDoc.xMSF, self.xTextDocument) + myFieldHandler.changeUserFieldContent("City", self.txtSenderCity.getText()) + + def txtSenderPostCodeTextChanged(self): + myFieldHandler = TextFieldHandler(self.myFaxDoc.xMSF, self.xTextDocument) + myFieldHandler.changeUserFieldContent("PostCode", self.txtSenderPostCode.getText()) + + def txtSenderStateTextChanged(self): + myFieldHandler = TextFieldHandler(self.myFaxDoc.xMSF, self.xTextDocument) + myFieldHandler.changeUserFieldContent(PropertyNames.PROPERTY_STATE, self.txtSenderState.getText()) + + def txtSenderFaxTextChanged(self): + myFieldHandler = TextFieldHandler(self.myFaxDoc.xMSF, self.xTextDocument) + myFieldHandler.changeUserFieldContent("Fax", self.txtSenderFax.getText()) + + #switch Elements on/off ------------------------------------------------------- + + def setElements(self): + #UI relevant: + if self.optSenderDefine.getState(): + self.optSenderDefineItemChanged() + + if self.optSenderPlaceholder.getState(): + self.optSenderPlaceholderItemChanged() + + self.chkUseLogoItemChanged() + self.chkUseSubjectItemChanged() + self.chkUseSalutationItemChanged() + self.chkUseGreetingItemChanged() + self.chkUseCommunicationItemChanged() + self.chkUseDateItemChanged() + self.chkUseFooterItemChanged() + self.txtTemplateNameTextChanged() + #not UI relevant: + if self.optReceiverDatabase.getState(): + self.optReceiverDatabaseItemChanged() + + if self.optReceiverPlaceholder.getState(): + self.optReceiverPlaceholderItemChanged() + + if self.optCreateFax.getState(): + self.optCreateFaxItemChanged() + + if self.optMakeChanges.getState(): + self.optMakeChangesItemChanged() + + def chkUseLogoItemChanged(self): + if self.myFaxDoc.hasElement("Company Logo"): + self.myFaxDoc.switchElement("Company Logo", (self.chkUseLogo.getState() != 0)) + + def chkUseSubjectItemChanged(self): + if self.myFaxDoc.hasElement("Subject Line"): + self.myFaxDoc.switchElement("Subject Line", (self.chkUseSubject.getState() != 0)) + + def chkUseDateItemChanged(self): + if self.myFaxDoc.hasElement("Date"): + self.myFaxDoc.switchElement("Date", (self.chkUseDate.getState() != 0)) + + def chkUseFooterItemChanged(self): + try: + bFooterPossible = (self.chkUseFooter.getState() != 0) and bool(getControlProperty("chkUseFooter", PropertyNames.PROPERTY_ENABLED)) + if self.chkFooterNextPages.getState() != 0: + self.myFaxDoc.switchFooter("First Page", False, (self.chkFooterPageNumbers.getState() != 0), self.txtFooter.getText()) + self.myFaxDoc.switchFooter("Standard", bFooterPossible, (self.chkFooterPageNumbers.getState() != 0), self.txtFooter.getText()) + else: + self.myFaxDoc.switchFooter("First Page", bFooterPossible, (self.chkFooterPageNumbers.getState() != 0), self.txtFooter.getText()) + self.myFaxDoc.switchFooter("Standard", bFooterPossible, (self.chkFooterPageNumbers.getState() != 0), self.txtFooter.getText()) + + #enable/disable roadmap item for footer page + BPaperItem = self.getRoadmapItemByID(FaxWizardDialogImpl.RM_FOOTER) + Helper.setUnoPropertyValue(BPaperItem, PropertyNames.PROPERTY_ENABLED, bFooterPossible) + except UnoException, exception: + traceback.print_exc() + + def chkFooterNextPagesItemChanged(self): + chkUseFooterItemChanged() + + def chkFooterPageNumbersItemChanged(self): + chkUseFooterItemChanged() + + def txtFooterTextChanged(self): + chkUseFooterItemChanged() + + def chkUseSalutationItemChanged(self): + self.myFaxDoc.switchUserField("Salutation", self.lstSalutation.getText(), (self.chkUseSalutation.getState() != 0)) + self.setControlProperty("lstSalutation", PropertyNames.PROPERTY_ENABLED, self.chkUseSalutation.getState() != 0) + + def lstSalutationItemChanged(self): + self.myFaxDoc.switchUserField("Salutation", self.lstSalutation.getText(), (self.chkUseSalutation.getState() != 0)) + + def chkUseCommunicationItemChanged(self): + self.myFaxDoc.switchUserField("CommunicationType", self.lstCommunicationType.getText(), (self.chkUseCommunicationType.getState() != 0)) + self.setControlProperty("lstCommunicationType", PropertyNames.PROPERTY_ENABLED, self.chkUseCommunicationType.getState() != 0) + + def lstCommunicationItemChanged(self): + self.myFaxDoc.switchUserField("CommunicationType", self.lstCommunicationType.getText(), (self.chkUseCommunicationType.getState() != 0)) + + def chkUseGreetingItemChanged(self): + self.myFaxDoc.switchUserField("Greeting", self.lstGreeting.getText(), (self.chkUseGreeting.getState() != 0)) + self.setControlProperty("lstGreeting", PropertyNames.PROPERTY_ENABLED, (self.chkUseGreeting.getState() != 0)) + + def lstGreetingItemChanged(self): + self.myFaxDoc.switchUserField("Greeting", self.lstGreeting.getText(), (self.chkUseGreeting.getState() != 0)) + + def __setPossibleFooter(self, bState): + self.setControlProperty("chkUseFooter", PropertyNames.PROPERTY_ENABLED, bState) + if not bState: + self.chkUseFooter.setState(0) + + self.chkUseFooterItemChanged() + + def __enableSenderReceiver(self): + BPaperItem = self.getRoadmapItemByID(FaxWizardDialogImpl.RM_SENDERRECEIVER) + Helper.setUnoPropertyValue(BPaperItem, PropertyNames.PROPERTY_ENABLED, True) + + def __disableSenderReceiver(self): + BPaperItem = self.getRoadmapItemByID(FaxWizardDialogImpl.RM_SENDERRECEIVER) + Helper.setUnoPropertyValue(BPaperItem, PropertyNames.PROPERTY_ENABLED, False) + diff --git a/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py b/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py new file mode 100644 index 000000000000..dcb474ed6242 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/FaxWizardDialogResources.py @@ -0,0 +1,96 @@ +from common.Resource import Resource + +class FaxWizardDialogResources(Resource): + UNIT_NAME = "dbwizres" + MODULE_NAME = "dbw" + RID_FAXWIZARDDIALOG_START = 3200 + RID_FAXWIZARDCOMMUNICATION_START = 3270 + RID_FAXWIZARDGREETING_START = 3280 + RID_FAXWIZARDSALUTATION_START = 3290 + RID_FAXWIZARDROADMAP_START = 3300 + RID_RID_COMMON_START = 500 + + + def __init__(self, xmsf): + super(FaxWizardDialogResources,self).__init__(xmsf, FaxWizardDialogResources.MODULE_NAME) + self.RoadmapLabels = () + self.SalutationLabels = () + self.GreetingLabels = () + self.CommunicationLabels = () + + #Delete the String, uncomment the self.getResText method + + + self.resFaxWizardDialog_title = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 1) + self.resLabel9_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 2) + self.resoptBusinessFax_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 3) + self.resoptPrivateFax_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 4) + self.reschkUseLogo_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 5) + self.reschkUseSubject_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 6) + self.reschkUseSalutation_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 7) + self.reschkUseGreeting_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 8) + self.reschkUseFooter_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 9) + self.resoptSenderPlaceholder_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 10) + self.resoptSenderDefine_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 11) + self.restxtTemplateName_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 12) + self.resoptCreateFax_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 13) + self.resoptMakeChanges_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 14) + self.reslblBusinessStyle_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 15) + self.reslblPrivateStyle_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 16) + self.reslblIntroduction_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 17) + self.reslblSenderAddress_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 18) + self.reslblSenderName_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 19) + self.reslblSenderStreet_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 20) + self.reslblPostCodeCity_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 21) + self.reslblFooter_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 22) + self.reslblFinalExplanation1_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 23) + self.reslblFinalExplanation2_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 24) + self.reslblTemplateName_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 25) + self.reslblTemplatePath_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 26) + self.reslblProceed_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 27) + self.reslblTitle1_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 28) + self.reslblTitle3_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 29) + self.reslblTitle4_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 30) + self.reslblTitle5_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 31) + self.reslblTitle6_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 32) + self.reschkFooterNextPages_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 33) + self.reschkFooterPageNumbers_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 34) + self.reschkUseDate_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 35) + self.reschkUseCommunicationType_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 36) + self.resLabel1_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 37) + self.resoptReceiverPlaceholder_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 38) + self.resoptReceiverDatabase_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 39) + self.resLabel2_value = self.getResText(FaxWizardDialogResources.RID_FAXWIZARDDIALOG_START + 40) + self.loadRoadmapResources() + self.loadSalutationResources() + self.loadGreetingResources() + self.loadCommunicationResources() + self.loadCommonResources() + + def loadCommonResources(self): + self.resOverwriteWarning = self.getResText(FaxWizardDialogResources.RID_RID_COMMON_START + 19) + self.resTemplateDescription = self.getResText(FaxWizardDialogResources.RID_RID_COMMON_START + 20) + + def loadRoadmapResources(self): + i = 1 + while i < 6: + self.RoadmapLabels = self.RoadmapLabels + ((self.getResText(FaxWizardDialogResources.RID_FAXWIZARDROADMAP_START + i)),) + i += 1 + + def loadSalutationResources(self): + i = 1 + while i < 5: + self.SalutationLabels = self.SalutationLabels + ((self.getResText(FaxWizardDialogResources.RID_FAXWIZARDSALUTATION_START + i)),) + i += 1 + + def loadGreetingResources(self): + i = 1 + while i < 5: + self.GreetingLabels = self.GreetingLabels + ((self.getResText(FaxWizardDialogResources.RID_FAXWIZARDGREETING_START + i)),) + i += 1 + + def loadCommunicationResources(self): + i = 1 + while i < 4: + self.CommunicationLabels = self.CommunicationLabels+ ((self.getResText(FaxWizardDialogResources.RID_FAXWIZARDCOMMUNICATION_START + i)),) + i += 1 diff --git a/wizards/com/sun/star/wizards/fax/__init__.py b/wizards/com/sun/star/wizards/fax/__init__.py new file mode 100644 index 000000000000..ff5ad269ba10 --- /dev/null +++ b/wizards/com/sun/star/wizards/fax/__init__.py @@ -0,0 +1 @@ +"""fax """ diff --git a/wizards/com/sun/star/wizards/text/TextDocument.py b/wizards/com/sun/star/wizards/text/TextDocument.py new file mode 100644 index 000000000000..1da169d49ea9 --- /dev/null +++ b/wizards/com/sun/star/wizards/text/TextDocument.py @@ -0,0 +1,243 @@ +import uno +from common.Desktop import Desktop +from com.sun.star.view.DocumentZoomType import ENTIRE_PAGE +from com.sun.star.beans.PropertyState import DIRECT_VALUE +from common.Helper import Helper +from document.OfficeDocument import OfficeDocument +import traceback +from text.ViewHandler import ViewHandler +from text.TextFieldHandler import TextFieldHandler + +class TextDocument(object): + + def __init__(self, xMSF,listener=None,bShowStatusIndicator=None, + FrameName=None,_sPreviewURL=None,_moduleIdentifier=None, + _textDocument=None, xArgs=None): + + self.xMSF = xMSF + self.xTextDocument = None + + if listener: + if FrameName: + '''creates an instance of TextDocument and creates a named frame. + No document is actually loaded into this frame.''' + self.xFrame = OfficeDocument.createNewFrame(xMSF, listener, FrameName); + return + + elif _sPreviewURL: + '''creates an instance of TextDocument by loading a given URL as preview''' + self.xFrame = OfficeDocument.createNewFrame(xMSF, listener) + self.xTextDocument = self.loadAsPreview(_sPreviewURL, True) + + elif xArgs: + '''creates an instance of TextDocument and creates a frame and loads a document''' + self.xDesktop = Desktop.getDesktop(xMSF); + self.xFrame = OfficeDocument.createNewFrame(xMSF, listener); + self.xTextDocument = OfficeDocument.load(xFrame, URL, "_self", xArgs); + self.xWindowPeer = xFrame.getComponentWindow() + self.m_xDocProps = self.xTextDocument.getDocumentProperties(); + CharLocale = Helper.getUnoStructValue( self.xTextDocument, "CharLocale"); + return + + else: + '''creates an instance of TextDocument from the desktop's current frame''' + self.xDesktop = Desktop.getDesktop(xMSF); + self.xFrame = self.xDesktop.getActiveFrame() + self.xTextDocument = self.xFrame.getController().getModel() + + elif _moduleIdentifier: + try: + '''create the empty document, and set its module identifier''' + self.xTextDocument = xMSF.createInstance("com.sun.star.text.TextDocument") + self.xTextDocument.initNew() + self.xTextDocument.setIdentifier(_moduleIdentifier.getIdentifier()) + # load the document into a blank frame + xDesktop = Desktop.getDesktop(xMSF) + loadArgs = range(1) + loadArgs[0] = "Model" + loadArgs[0] = -1 + loadArgs[0] = self.xTextDocument + loadArgs[0] = DIRECT_VALUE + xDesktop.loadComponentFromURL("private:object", "_blank", 0, loadArgs) + # remember some things for later usage + self.xFrame = self.xTextDocument.getCurrentController().getFrame() + except Exception, e: + traceback.print_exc() + + elif _textDocument: + '''creates an instance of TextDocument from a given XTextDocument''' + self.xFrame = _textDocument.getCurrentController().getFrame() + self.xTextDocument = _textDocument + if bShowStatusIndicator: + self.showStatusIndicator() + self.init() + + def init(self): + self.xWindowPeer = self.xFrame.getComponentWindow() + self.m_xDocProps = self.xTextDocument.getDocumentProperties() + self.CharLocale = Helper.getUnoStructValue(self.xTextDocument, "CharLocale") + self.xText = self.xTextDocument.getText() + + def showStatusIndicator(self): + self.xProgressBar = self.xFrame.createStatusIndicator() + self.xProgressBar.start("", 100) + self.xProgressBar.setValue(5) + + def loadAsPreview(self, sDefaultTemplate, asTemplate): + loadValues = range(3) + # open document in the Preview mode + loadValues[0] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[0].Name = "ReadOnly" + loadValues[0].Value = True + loadValues[1] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[1].Name = "AsTemplate" + if asTemplate: + loadValues[1].Value = True + else: + loadValues[1].Value = False + + loadValues[2] = uno.createUnoStruct('com.sun.star.beans.PropertyValue') + loadValues[2].Name = "Preview" + loadValues[2].Value = True + #set the preview document to non-modified mode in order to avoid the 'do u want to save' box + if self.xTextDocument is not None: + try: + self.xTextDocument.setModified(False) + except PropertyVetoException, e1: + traceback.print_exc() + self.xTextDocument = OfficeDocument.load(self.xFrame, sDefaultTemplate, "_self", loadValues) + self.DocSize = self.getPageSize() + myViewHandler = ViewHandler(self.xTextDocument, self.xTextDocument) + try: + myViewHandler.setViewSetting("ZoomType", uno.Any("short",ENTIRE_PAGE)) + except Exception, e: + traceback.print_exc() + myFieldHandler = TextFieldHandler(self.xMSF, self.xTextDocument) + myFieldHandler.updateDocInfoFields() + return self.xTextDocument + + def getPageSize(self): + try: + xNameAccess = self.xTextDocument.getStyleFamilies() + xPageStyleCollection = xNameAccess.getByName("PageStyles") + xPageStyle = xPageStyleCollection.getByName("First Page") + return Helper.getUnoPropertyValue(xPageStyle, "Size") + except Exception, exception: + traceback.print_exc() + return None + + #creates an instance of TextDocument and creates a frame and loads a document + + def createTextCursor(self, oCursorContainer): + xTextCursor = oCursorContainer.createTextCursor() + return xTextCursor + + # Todo: This method is unsecure because the last index is not necessarily the last section + # Todo: This Routine should be modified, because I cannot rely on the last Table in the document to be the last in the TextTables sequence + # to make it really safe you must acquire the Tablenames before the insertion and after the insertion of the new Table. By comparing the + # two sequences of tablenames you can find out the tablename of the last inserted Table + # Todo: This method is unsecure because the last index is not necessarily the last section + + def getCharWidth(self, ScaleString): + iScale = 200 + self.xTextDocument.lockControllers() + iScaleLen = ScaleString.length() + xTextCursor = createTextCursor(self.xTextDocument.getText()) + xTextCursor.gotoStart(False) + com.sun.star.wizards.common.Helper.setUnoPropertyValue(xTextCursor, "PageDescName", "First Page") + xTextCursor.setString(ScaleString) + xViewCursor = self.xTextDocument.getCurrentController() + xTextViewCursor = xViewCursor.getViewCursor() + xTextViewCursor.gotoStart(False) + iFirstPos = xTextViewCursor.getPosition().X + xTextViewCursor.gotoEnd(False) + iLastPos = xTextViewCursor.getPosition().X + iScale = (iLastPos - iFirstPos) / iScaleLen + xTextCursor.gotoStart(False) + xTextCursor.gotoEnd(True) + xTextCursor.setString("") + unlockallControllers() + return iScale + + def unlockallControllers(self): + while self.xTextDocument.hasControllersLocked() == True: + self.xTextDocument.unlockControllers() + + def refresh(self): + self.xTextDocument.refresh() + + ''' + This method sets the Author of a Wizard-generated template correctly + and adds a explanatory sentence to the template description. + @param WizardName The name of the Wizard. + @param TemplateDescription The old Description which is being appended with another sentence. + @return void. + ''' + + def setWizardTemplateDocInfo(self, WizardName, TemplateDescription): + try: + xNA = Configuration.getConfigurationRoot(self.xMSF, "/org.openoffice.UserProfile/Data", False) + gn = xNA.getByName("givenname") + sn = xNA.getByName("sn") + fullname = str(gn) + " " + str(sn) + cal = GregorianCalendar.GregorianCalendar() + year = cal.get(Calendar.YEAR) + month = cal.get(Calendar.MONTH) + day = cal.get(Calendar.DAY_OF_MONTH) + currentDate = DateTime.DateTime() + currentDate.Day = day + currentDate.Month = month + currentDate.Year = year + du = DateUtils(self.xMSF, self.xTextDocument) + ff = du.getFormat(NumberFormatIndex.DATE_SYS_DDMMYY) + myDate = du.format(ff, currentDate) + xDocProps2 = self.xTextDocument.getDocumentProperties() + xDocProps2.setAuthor(fullname) + xDocProps2.setModifiedBy(fullname) + description = xDocProps2.getDescription() + description = description + " " + TemplateDescription + description = JavaTools.replaceSubString(description, WizardName, "<wizard_name>") + description = JavaTools.replaceSubString(description, myDate, "<current_date>") + xDocProps2.setDescription(description) + except NoSuchElementException, e: + # TODO Auto-generated catch block + traceback.print_exc() + except WrappedTargetException, e: + # TODO Auto-generated catch block + traceback.print_exc() + except Exception, e: + # TODO Auto-generated catch block + traceback.print_exc() + + ''' + removes an arbitrary Object which supports the 'XTextContent' interface + @param oTextContent + @return + ''' + + def removeTextContent(self, oTextContent): + try: + self.xText.removeTextContent(oxTextContent) + return True + except NoSuchElementException, e: + traceback.print_exc() + return False + + ''' + Apparently there is no other way to get the + page count of a text document other than using a cursor and + making it jump to the last page... + @param model the document model. + @return the page count of the document. + ''' + + def getPageCount(self, model): + xController = model.getCurrentController() + xPC = xController.getViewCursor() + xPC.jumpToLastPage() + return xPC.getPage() + + ''' + Possible Values for "OptionString" are: "LoadCellStyles", "LoadTextStyles", "LoadFrameStyles", + "LoadPageStyles", "LoadNumberingStyles", "OverwriteStyles" + ''' diff --git a/wizards/com/sun/star/wizards/text/TextFieldHandler.py b/wizards/com/sun/star/wizards/text/TextFieldHandler.py new file mode 100644 index 000000000000..c318de0876c4 --- /dev/null +++ b/wizards/com/sun/star/wizards/text/TextFieldHandler.py @@ -0,0 +1,169 @@ +import traceback +import time +from com.sun.star.util import DateTime +from common.PropertyNames import PropertyNames +import unicodedata + +class TextFieldHandler(object): + ''' + Creates a new instance of TextFieldHandler + @param xMSF + @param xTextDocument + ''' + + def __init__(self, xMSF, xTextDocument): + self.xMSFDoc = xMSF + self.xTextFieldsSupplier = xTextDocument + + def refreshTextFields(self): + xUp = self.xTextFieldsSupplier.getTextFields() + xUp.refresh() + + def getUserFieldContent(self, xTextCursor): + try: + xTextRange = xTextCursor.getEnd() + oTextField = Helper.getUnoPropertyValue(xTextRange, "TextField") + if com.sun.star.uno.AnyConverter.isVoid(oTextField): + return "" + else: + xMaster = oTextField.getTextFieldMaster() + UserFieldContent = xMaster.getPropertyValue("Content") + return UserFieldContent + + except Exception, exception: + traceback.print_exc() + + return "" + + def insertUserField(self, xTextCursor, FieldName, FieldTitle): + try: + xField = self.xMSFDoc.createInstance("com.sun.star.text.TextField.User") + + if self.xTextFieldsSupplier.getTextFieldMasters().hasByName("com.sun.star.text.FieldMaster.User." + FieldName): + oMaster = self.xTextFieldsSupplier.getTextFieldMasters().getByName( \ + "com.sun.star.text.FieldMaster.User." + FieldName) + oMaster.dispose() + + xPSet = createUserField(FieldName, FieldTitle) + xField.attachTextFieldMaster(xPSet) + xTextCursor.getText().insertTextContent(xTextCursor, xField, False) + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + + def createUserField(self, FieldName, FieldTitle): + xPSet = self.xMSFDoc.createInstance("com.sun.star.text.FieldMaster.User") + xPSet.setPropertyValue(PropertyNames.PROPERTY_NAME, FieldName) + xPSet.setPropertyValue("Content", FieldTitle) + return xPSet + + def __getTextFieldsByProperty(self, _PropertyName, _aPropertyValue, _TypeName): + try: + xDependentVector = [] + if self.xTextFieldsSupplier.getTextFields().hasElements(): + xEnum = self.xTextFieldsSupplier.getTextFields().createEnumeration() + while xEnum.hasMoreElements(): + oTextField = xEnum.nextElement() + xPropertySet = oTextField.getTextFieldMaster() + if xPropertySet.getPropertySetInfo().hasPropertyByName(_PropertyName): + oValue = xPropertySet.getPropertyValue(_PropertyName) + if isinstance(oValue,unicode): + if _TypeName == "String": + sValue = unicodedata.normalize('NFKD', oValue).encode('ascii','ignore') + if sValue == _aPropertyValue: + xDependentVector.append(oTextField) + #COMMENTED + '''elif AnyConverter.isShort(oValue): + if _TypeName.equals("Short"): + iShortParam = (_aPropertyValue).shortValue() + ishortValue = AnyConverter.toShort(oValue) + if ishortValue == iShortParam: + xDependentVector.append(oTextField) ''' + + if len(xDependentVector) > 0: + return xDependentVector + + except Exception, e: + #TODO Auto-generated catch block + traceback.print_exc() + + return None + + def changeUserFieldContent(self, _FieldName, _FieldContent): + try: + xDependentTextFields = self.__getTextFieldsByProperty(PropertyNames.PROPERTY_NAME, _FieldName, "String") + if xDependentTextFields != None: + for i in xDependentTextFields: + i.getTextFieldMaster().setPropertyValue("Content", _FieldContent) + self.refreshTextFields() + + except Exception, e: + traceback.print_exc() + + def updateDocInfoFields(self): + try: + xEnum = self.xTextFieldsSupplier.getTextFields().createEnumeration() + while xEnum.hasMoreElements(): + oTextField = xEnum.nextElement() + if oTextField.supportsService("com.sun.star.text.TextField.ExtendedUser"): + oTextField.update() + + if oTextField.supportsService("com.sun.star.text.TextField.User"): + oTextField.update() + + except Exception, e: + traceback.print_exc() + + def updateDateFields(self): + try: + xEnum = self.xTextFieldsSupplier.getTextFields().createEnumeration() + now = time.localtime(time.time()) + dt = DateTime() + dt.Day = time.strftime("%d", now) + dt.Year = time.strftime("%Y", now) + dt.Month = time.strftime("%m", now) + dt.Month += 1 + while xEnum.hasMoreElements(): + oTextField = xEnum.nextElement() + if oTextField.supportsService("com.sun.star.text.TextField.DateTime"): + oTextField.setPropertyValue("IsFixed", False) + oTextField.setPropertyValue("DateTimeValue", dt) + + except Exception, e: + traceback.print_exc() + + def fixDateFields(self, _bSetFixed): + try: + xEnum = self.xTextFieldsSupplier.getTextFields().createEnumeration() + while xEnum.hasMoreElements(): + oTextField = xEnum.nextElement() + if oTextField.supportsService("com.sun.star.text.TextField.DateTime"): + oTextField.setPropertyValue("IsFixed", _bSetFixed) + + except Exception, e: + traceback.print_exc() + + def removeUserFieldByContent(self, _FieldContent): + try: + xDependentTextFields = self.__getTextFieldsByProperty("Content", _FieldContent, "String") + if xDependentTextFields != None: + i = 0 + while i < xDependentTextFields.length: + xDependentTextFields[i].dispose() + i += 1 + + except Exception, e: + traceback.print_exc() + + def changeExtendedUserFieldContent(self, UserDataPart, _FieldContent): + try: + xDependentTextFields = self.__getTextFieldsByProperty("UserDataType", uno.Any("short",UserDataPart), "Short") + if xDependentTextFields != None: + i = 0 + while i < xDependentTextFields.length: + xDependentTextFields[i].getTextFieldMaster().setPropertyValue("Content", _FieldContent) + i += 1 + + self.refreshTextFields() + except Exception, e: + traceback.print_exc() + diff --git a/wizards/com/sun/star/wizards/text/TextSectionHandler.py b/wizards/com/sun/star/wizards/text/TextSectionHandler.py new file mode 100644 index 000000000000..f1c40ea563d7 --- /dev/null +++ b/wizards/com/sun/star/wizards/text/TextSectionHandler.py @@ -0,0 +1,121 @@ +import traceback + +class TextSectionHandler(object): + '''Creates a new instance of TextSectionHandler''' + def __init__(self, xMSF, xTextDocument): + self.xMSFDoc = xMSF + self.xTextDocument = xTextDocument + self.xText = xTextDocument.getText() + + def removeTextSectionbyName(self, SectionName): + try: + xAllTextSections = self.xTextDocument.getTextSections() + if xAllTextSections.hasByName(SectionName) == True: + oTextSection = self.xTextDocument.getTextSections().getByName(SectionName) + removeTextSection(oTextSection) + + except Exception, exception: + traceback.print_exc() + + def hasTextSectionByName(self, SectionName): + xAllTextSections = self.xTextDocument.getTextSections() + return xAllTextSections.hasByName(SectionName) + + def removeLastTextSection(self): + try: + xAllTextSections = self.xTextDocument.getTextSections() + oTextSection = xAllTextSections.getByIndex(xAllTextSections.getCount() - 1) + removeTextSection(oTextSection) + except Exception, exception: + traceback.print_exc() + + def removeTextSection(self, _oTextSection): + try: + self.xText.removeTextContent(_oTextSection) + except Exception, exception: + traceback.print_exc() + + def removeInvisibleTextSections(self): + try: + xAllTextSections = self.xTextDocument.getTextSections() + TextSectionCount = xAllTextSections.getCount() + i = TextSectionCount - 1 + while i >= 0: + xTextContentTextSection = xAllTextSections.getByIndex(i) + bRemoveTextSection = (not AnyConverter.toBoolean(xTextContentTextSection.getPropertyValue("IsVisible"))) + if bRemoveTextSection: + self.xText.removeTextContent(xTextContentTextSection) + + i -= 1 + except Exception, exception: + traceback.print_exc() + + def removeAllTextSections(self): + try: + TextSectionCount = self.xTextDocument.getTextSections().getCount() + i = TextSectionCount - 1 + while i >= 0: + xTextContentTextSection = xAllTextSections.getByIndex(i) + self.xText.removeTextContent(xTextContentTextSection) + i -= 1 + except Exception, exception: + traceback.print_exc() + + def breakLinkofTextSections(self): + try: + iSectionCount = self.xTextDocument.getTextSections().getCount() + oSectionLink = SectionFileLink.SectionFileLink() + oSectionLink.FileURL = "" + i = 0 + while i < iSectionCount: + oTextSection = xAllTextSections.getByIndex(i) + Helper.setUnoPropertyValues(oTextSection, ["FileLink", "LinkRegion"], [oSectionLink, ""]) + i += 1 + except Exception, exception: + traceback.print_exc() + + def breakLinkOfTextSection(self, oTextSection): + oSectionLink = SectionFileLink.SectionFileLink() + oSectionLink.FileURL = "" + Helper.setUnoPropertyValues(oTextSection, ["FileLink", "LinkRegion"],[oSectionLink, ""]) + + def linkSectiontoTemplate(self, TemplateName, SectionName): + try: + oTextSection = self.xTextDocument.getTextSections().getByName(SectionName) + linkSectiontoTemplate(oTextSection, TemplateName, SectionName) + except Exception, e: + traceback.print_exc() + + def linkSectiontoTemplate(self, oTextSection, TemplateName, SectionName): + oSectionLink = SectionFileLink.SectionFileLink() + oSectionLink.FileURL = TemplateName + Helper.setUnoPropertyValues(oTextSection, ["FileLink", "LinkRegion"],[oSectionLink, SectionName]) + NewSectionName = oTextSection.getName() + if NewSectionName.compareTo(SectionName) != 0: + oTextSection.setName(SectionName) + + def insertTextSection(self, GroupName, TemplateName, _bAddParagraph): + try: + if _bAddParagraph: + xTextCursor = self.xText.createTextCursor() + self.xText.insertControlCharacter(xTextCursor, ControlCharacter.PARAGRAPH_BREAK, False) + xTextCursor.collapseToEnd() + + xSecondTextCursor = self.xText.createTextCursor() + xSecondTextCursor.gotoEnd(False) + insertTextSection(GroupName, TemplateName, xSecondTextCursor) + except IllegalArgumentException, e: + traceback.print_exc() + + def insertTextSection(self, sectionName, templateName, position): + try: + if self.xTextDocument.getTextSections().hasByName(sectionName) == True: + xTextSection = self.xTextDocument.getTextSections().getByName(sectionName) + else: + xTextSection = self.xMSFDoc.createInstance("com.sun.star.text.TextSection") + position.getText().insertTextContent(position, xTextSection, False) + + linkSectiontoTemplate(xTextSection, templateName, sectionName) + except Exception, exception: + traceback.print_exc() + diff --git a/wizards/com/sun/star/wizards/text/ViewHandler.py b/wizards/com/sun/star/wizards/text/ViewHandler.py new file mode 100644 index 000000000000..73462f871d3d --- /dev/null +++ b/wizards/com/sun/star/wizards/text/ViewHandler.py @@ -0,0 +1,38 @@ +import uno + +class ViewHandler(object): + '''Creates a new instance of View ''' + + def __init__ (self, xMSF, xTextDocument): + self.xMSFDoc = xMSF + self.xTextDocument = xTextDocument + self.xTextViewCursorSupplier = self.xTextDocument.getCurrentController() + + def selectFirstPage(self, oTextTableHandler): + try: + xPageCursor = self.xTextViewCursorSupplier.getViewCursor() + xPageCursor.jumpToFirstPage() + xPageCursor.jumpToStartOfPage() + Helper.setUnoPropertyValue(xPageCursor, "PageDescName", "First Page") + oPageStyles = self.xTextDocument.getStyleFamilies().getByName("PageStyles") + oPageStyle = oPageStyles.getByName("First Page") + xAllTextTables = oTextTableHandler.xTextTablesSupplier.getTextTables() + xTextTable = xAllTextTables.getByIndex(0) + xRange = xTextTable.getAnchor().getText() + xPageCursor.gotoRange(xRange, False) + if not com.sun.star.uno.AnyConverter.isVoid(XTextRange): + xViewTextCursor.gotoRange(xHeaderRange, False) + xViewTextCursor.collapseToStart() + else: + print "No Headertext available" + + except com.sun.star.uno.Exception, exception: + exception.printStackTrace(System.out) + + def setViewSetting(self, Setting, Value): + uno.invoke(self.xTextViewCursorSupplier.getViewSettings(),"setPropertyValue",(Setting, Value)) + + def collapseViewCursorToStart(self): + xTextViewCursor = self.xTextViewCursorSupplier.getViewCursor() + xTextViewCursor.collapseToStart() + diff --git a/wizards/com/sun/star/wizards/ui/PathSelection.py b/wizards/com/sun/star/wizards/ui/PathSelection.py new file mode 100644 index 000000000000..a1bdc9511e51 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/PathSelection.py @@ -0,0 +1,78 @@ +import traceback +import uno +from common.PropertyNames import * +from common.FileAccess import * +from com.sun.star.uno import Exception as UnoException + +class PathSelection(object): + + class DialogTypes(object): + FOLDER = 0 + FILE = 1 + + class TransferMode(object): + SAVE = 0 + LOAD = 1 + + def __init__(self, xMSF, CurUnoDialog, TransferMode, DialogType): + self.CurUnoDialog = CurUnoDialog + self.xMSF = xMSF + self.iDialogType = DialogType + self.iTransferMode = TransferMode + self.sDefaultDirectory = "" + self.sDefaultName = "" + self.sDefaultFilter = "" + self.usedPathPicker = False + self.CMDSELECTPATH = 1 + self.TXTSAVEPATH = 1 + + def insert(self, DialogStep, XPos, YPos, Width, CurTabIndex, LabelText, Enabled, TxtHelpURL, BtnHelpURL): + self.CurUnoDialog.insertControlModel("com.sun.star.awt.UnoControlFixedTextModel", "lblSaveAs", [PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH], [Enabled, 8, LabelText, XPos, YPos, DialogStep, uno.Any("short",CurTabIndex), Width]) + self.xSaveTextBox = self.CurUnoDialog.insertTextField("txtSavePath", "callXPathSelectionListener", [PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH], [Enabled, 12, TxtHelpURL, XPos, YPos + 10, DialogStep, uno.Any("short",(CurTabIndex + 1)), Width - 26], self) + + self.CurUnoDialog.setControlProperty("txtSavePath", PropertyNames.PROPERTY_ENABLED, False ) + self.CurUnoDialog.insertButton("cmdSelectPath", "triggerPathPicker", [PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH], [Enabled, 14, BtnHelpURL, "...",XPos + Width - 16, YPos + 9, DialogStep, uno.Any("short",(CurTabIndex + 2)), 16], self) + + def addSelectionListener(self, xAction): + self.xAction = xAction + + def getSelectedPath(self): + return self.xSaveTextBox.getText() + + def initializePath(self): + try: + myFA = FileAccess(self.xMSF) + self.xSaveTextBox.setText(myFA.getPath(self.sDefaultDirectory + "/" + self.sDefaultName, None)) + except UnoException, e: + traceback.print_exc() + + def triggerPathPicker(self): + try: + if iTransferMode == TransferMode.SAVE: + if iDialogType == DialogTypes.FOLDER: + #TODO: write code for picking a folder for saving + return + elif iDialogType == DialogTypes.FILE: + usedPathPicker = True + myFilePickerDialog = SystemDialog.createStoreDialog(xMSF) + myFilePickerDialog.callStoreDialog(sDefaultDirectory, sDefaultName, sDefaultFilter); + sStorePath = myFilePickerDialog.sStorePath; + if sStorePath: + myFA = FileAccess(xMSF); + xSaveTextBox.setText(myFA.getPath(sStorePath, None)); + sDefaultDirectory = FileAccess.getParentDir(sStorePath); + sDefaultName = myFA.getFilename(sStorePath); + return + elif iTransferMode == TransferMode.LOAD: + if iDialogType == DialogTypes.FOLDER: + #TODO: write code for picking a folder for loading + return + elif iDialogType == DialogTypes.FILE: + #TODO: write code for picking a file for loading + return + except UnoException, e: + traceback.print_exc() + + def callXPathSelectionListener(self): + if self.xAction != None: + self.xAction.validatePath() diff --git a/wizards/com/sun/star/wizards/ui/PeerConfig.py b/wizards/com/sun/star/wizards/ui/PeerConfig.py new file mode 100644 index 000000000000..b062846823db --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/PeerConfig.py @@ -0,0 +1,145 @@ +import traceback +from common.Helper import * + +''' +To change the template for this generated type comment go to +Window>Preferences>Java>Code Generation>Code and Comments +''' + +class PeerConfig(object): + + def __init__(self, _oUnoDialog): + self.oUnoDialog = _oUnoDialog + #self.oUnoDialog.xUnoDialog.addWindowListener(self) + self.m_aPeerTasks = [] + self.aControlTasks = [] + self.aImageUrlTasks = [] + self.oUnoDialog = None + + class PeerTask(object): + + def __init__(self,_xControl, propNames_, propValues_): + self.propnames = propNames_ + self.propvalues = propValues_ + self.xControl = _xControl + + class ControlTask(object): + + def __init__(self, _oModel, _propName, _propValue): + self.propname = _propName + self.propvalue = _propValue + self.oModel = _oModel + + class ImageUrlTask(object): + + def __init__(self, _oModel , _oResource, _oHCResource): + self.oResource = _oResource + self.oHCResource = _oHCResource + self.oModel = _oModel + + def windowShown(self, arg0): + try: + i = 0 + while i < self.m_aPeerTasks.size(): + aPeerTask = self.m_aPeerTasks.elementAt(i) + xVclWindowPeer = aPeerTask.xControl.getPeer() + n = 0 + while n < aPeerTask.propnames.length: + xVclWindowPeer.setProperty(aPeerTask.propnames[n], aPeerTask.propvalues[n]) + n += 1 + i += 1 + i = 0 + while i < self.aControlTasks.size(): + aControlTask = self.aControlTasks.elementAt(i) + Helper.setUnoPropertyValue(aControlTask.oModel, aControlTask.propname, aControlTask.propvalue) + i += 1 + i = 0 + while i < self.aImageUrlTasks.size(): + aImageUrlTask = self.aImageUrlTasks.elementAt(i) + sImageUrl = "" + if isinstance(aImageUrlTask.oResource,int): + sImageUrl = self.oUnoDialog.getWizardImageUrl((aImageUrlTask.oResource).intValue(), (aImageUrlTask.oHCResource).intValue()) + elif isinstance(aImageUrlTask.oResource,str): + sImageUrl = self.oUnoDialog.getImageUrl((aImageUrlTask.oResource), (aImageUrlTask.oHCResource)) + + if not sImageUrl.equals(""): + Helper.setUnoPropertyValue(aImageUrlTask.oModel, PropertyNames.PROPERTY_IMAGEURL, sImageUrl) + + i += 1 + except RuntimeException, re: + traceback.print_exc + raise re; + + ''' + @param oAPIControl an API control that the interface XControl can be derived from + @param _saccessname + ''' + + def setAccessibleName(self, oAPIControl, _saccessname): + setPeerProperties(oAPIControl, ("AccessibleName"), (_saccessname)) + + def setAccessibleName(self, _xControl, _saccessname): + setPeerProperties(_xControl, ("AccessibleName"), (_saccessname)) + + ''' + @param oAPIControl an API control that the interface XControl can be derived from + @param _propnames + @param _propvalues + ''' + + def setPeerProperties(self, oAPIControl, _propnames, _propvalues): + setPeerProperties(oAPIControl, _propnames, _propvalues) + + def setPeerProperties(self, _xControl, propnames, propvalues): + oPeerTask = PeerTask(_xControl, propnames, propvalues) + self.m_aPeerTasks.append(oPeerTask) + + ''' + assigns an arbitrary property to a control as soon as the peer is created + Note: The property 'ImageUrl' should better be assigned with 'setImageurl(...)', to consider the High Contrast Mode + @param _ocontrolmodel + @param _spropname + @param _propvalue + ''' + + def setControlProperty(self, _ocontrolmodel, _spropname, _propvalue): + oControlTask = self.ControlTask.ControlTask_unknown(_ocontrolmodel, _spropname, _propvalue) + self.aControlTasks.append(oControlTask) + + ''' + Assigns an image to the property 'ImageUrl' of a dialog control. The image id must be assigned in a resource file + within the wizards project + wizards project + @param _ocontrolmodel + @param _nResId + @param _nhcResId + ''' + + def setImageUrl(self, _ocontrolmodel, _nResId, _nhcResId): + oImageUrlTask = ImageUrlTask(_ocontrolmodel,_nResId, _nhcResId) + self.aImageUrlTasks.append(oImageUrlTask) + + ''' + Assigns an image to the property 'ImageUrl' of a dialog control. The image ids that the Resource urls point to + may be assigned in a Resource file outside the wizards project + @param _ocontrolmodel + @param _sResourceUrl + @param _sHCResourceUrl + ''' + + def setImageUrl(self, _ocontrolmodel, _sResourceUrl, _sHCResourceUrl): + oImageUrlTask = ImageUrlTask(_ocontrolmodel, _sResourceUrl, _sHCResourceUrl) + self.aImageUrlTasks.append(oImageUrlTask) + + ''' + Assigns an image to the property 'ImageUrl' of a dialog control. The image id must be assigned in a resource file + within the wizards project + wizards project + @param _ocontrolmodel + @param _oResource + @param _oHCResource + ''' + + def setImageUrl(self, _ocontrolmodel, _oResource, _oHCResource): + oImageUrlTask = self.ImageUrlTask(_ocontrolmodel, _oResource, _oHCResource) + self.aImageUrlTasks.append(oImageUrlTask) diff --git a/wizards/com/sun/star/wizards/ui/UIConsts.py b/wizards/com/sun/star/wizards/ui/UIConsts.py new file mode 100644 index 000000000000..f64ddedaf492 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/UIConsts.py @@ -0,0 +1,66 @@ +''' +To change the template for this generated type comment go to +Window>Preferences>Java>Code Generation>Code and Comments +''' +class UIConsts(): + + RID_COMMON = 500 + RID_DB_COMMON = 1000 + RID_FORM = 2200 + RID_QUERY = 2300 + RID_REPORT = 2400 + RID_TABLE = 2500 + RID_IMG_REPORT = 1000 + RID_IMG_FORM = 1100 + RID_IMG_WEB = 1200 + INVISIBLESTEP = 99 + INFOIMAGEURL = "private:resource/dbu/image/19205" + INFOIMAGEURL_HC = "private:resource/dbu/image/19230" + ''' + The tabindex of the navigation buttons in a wizard must be assigned a very + high tabindex because on every step their taborder must appear at the end + ''' + SOFIRSTWIZARDNAVITABINDEX = 30000 + INTEGER_8 = 8 + INTEGER_12 = 12 + INTEGER_14 = 14 + INTEGER_16 = 16 + INTEGER_40 = 40 + INTEGER_50 = 50 + + #Steps of the QueryWizard + + SOFIELDSELECTIONPAGE = 1 + SOSORTINGPAGE = 2 + SOFILTERPAGE = 3 + SOAGGREGATEPAGE = 4 + SOGROUPSELECTIONPAGE = 5 + SOGROUPFILTERPAGE = 6 + SOTITLESPAGE = 7 + SOSUMMARYPAGE = 8 + INTEGERS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + + class CONTROLTYPE(): + + BUTTON = 1 + IMAGECONTROL = 2 + LISTBOX = 3 + COMBOBOX = 4 + CHECKBOX = 5 + RADIOBUTTON = 6 + DATEFIELD = 7 + EDITCONTROL = 8 + FILECONTROL = 9 + FIXEDLINE = 10 + FIXEDTEXT = 11 + FORMATTEDFIELD = 12 + GROUPBOX = 13 + HYPERTEXT = 14 + NUMERICFIELD = 15 + PATTERNFIELD = 16 + PROGRESSBAR = 17 + ROADMAP = 18 + SCROLLBAR = 19 + TIMEFIELD = 20 + CURRENCYFIELD = 21 + UNKNOWN = -1 diff --git a/wizards/com/sun/star/wizards/ui/UnoDialog.py b/wizards/com/sun/star/wizards/ui/UnoDialog.py new file mode 100644 index 000000000000..87a1a5d24c71 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/UnoDialog.py @@ -0,0 +1,648 @@ +import uno +import traceback +from common.PropertyNames import PropertyNames +from com.sun.star.awt import Rectangle +from common.Helper import Helper +from PeerConfig import PeerConfig +from common.Listener import * +from com.sun.star.awt import Rectangle +from com.sun.star.awt.PosSize import POS + +class UnoDialog(object): + + def __init__(self, xMSF, PropertyNames, PropertyValues): + try: + self.xMSF = xMSF + self.ControlList = {} + self.xDialogModel = xMSF.createInstance("com.sun.star.awt.UnoControlDialogModel") + self.xDialogModel.setPropertyValues(PropertyNames, PropertyValues) + self.xUnoDialog = xMSF.createInstance("com.sun.star.awt.UnoControlDialog") + self.xUnoDialog.setModel(self.xDialogModel) + self.BisHighContrastModeActivated = None + self.m_oPeerConfig = None + self.xWindowPeer = None + except UnoException, e: + traceback.print_exc() + + def getControlKey(self, EventObject, ControlList): + xControlModel = EventObject.getModel() + try: + sName = xControlModel.getPropertyValue(PropertyNames.PROPERTY_NAME) + iKey = ControlList.get(sName).intValue() + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + iKey = 2000 + + return iKey + + def createPeerConfiguration(self): + self.m_oPeerConfig = PeerConfig(self) + + def getPeerConfiguration(self): + if self.m_oPeerConfig == None: + self.createPeerConfiguration() + return self.m_oPeerConfig + + def setControlProperty(self, ControlName, PropertyName, PropertyValue): + try: + if PropertyValue is not None: + if self.xDialogModel.hasByName(ControlName) == False: + return + xPSet = self.xDialogModel.getByName(ControlName) + if isinstance(PropertyValue,bool): + xPSet.setPropertyValue(PropertyName, PropertyValue) + else: + if isinstance(PropertyValue,list): + methodname = "[]short" + PropertyValue = tuple(PropertyValue) + elif isinstance(PropertyValue,tuple): + methodname = "[]string" + else: + PropertyValue = (PropertyValue,) + methodname = "[]string" + uno.invoke(xPSet, "setPropertyValue", (PropertyName, uno.Any( \ + methodname, PropertyValue))) + + except Exception, exception: + traceback.print_exc() + + def transform( self, struct , propName, value ): + myinv = self.inv.createInstanceWithArguments( (struct,) ) + access = self.insp.inspect( myinv ) + method = access.getMethod( "setValue" , -1 ) + uno.invoke( method, "invoke", ( myinv, ( propName , value ) )) + method = access.getMethod( "getMaterial" , -1 ) + ret,dummy = method.invoke(myinv,() ) + return ret + + def getResource(self): + return self.m_oResource + + def setControlProperties(self, ControlName, PropertyNames, PropertyValues): + self.setControlProperty(ControlName, PropertyNames, PropertyValues) + + def getControlProperty(self, ControlName, PropertyName): + try: + xPSet = self.xDialogModel().getByName(ControlName) + oPropValuezxPSet.getPropertyValue(PropertyName) + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + return None + + + def printControlProperties(self, ControlName): + try: + xControlModel = self.xDialogModel().getByName(ControlName) + allProps = xControlModel.getPropertySetInfo().getProperties() + i = 0 + while i < allProps.length: + sName = allProps[i].Name + i += 1 + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + + def getMAPConversionFactor(self, ControlName): + xControl2 = self.xUnoDialog.getControl(ControlName) + aSize = xControl2.getSize() + dblMAPWidth = ((Helper.getUnoPropertyValue(xControl2.getModel(), PropertyNames.PROPERTY_WIDTH)).intValue()) + dblFactor = (((aSize.Width)) / dblMAPWidth) + return dblFactor + + def getpreferredLabelSize(self, LabelName, sLabel): + xControl2 = self.xUnoDialog.getControl(LabelName) + OldText = xControl2.getText() + xControl2.setText(sLabel) + aSize = xControl2.getPreferredSize() + xControl2.setText(OldText) + return aSize + + def removeSelectedItems(self, xListBox): + SelList = xListBox.getSelectedItemsPos() + Sellen = SelList.length + i = Sellen - 1 + while i >= 0: + xListBox.removeItems(SelList[i], 1) + i -= 1 + + def getListBoxItemCount(self, _xListBox): + # This function may look ugly, but this is the only way to check the count + # of values in the model,which is always right. + # the control is only a view and could be right or not. + fieldnames = Helper.getUnoPropertyValue(getModel(_xListBox), "StringItemList") + return fieldnames.length + + def getSelectedItemPos(self, _xListBox): + ipos = Helper.getUnoPropertyValue(getModel(_xListBox), "SelectedItems") + return ipos[0] + + def isListBoxSelected(self, _xListBox): + ipos = Helper.getUnoPropertyValue(getModel(_xListBox), "SelectedItems") + return ipos.length > 0 + + def addSingleItemtoListbox(self, xListBox, ListItem, iSelIndex): + xListBox.addItem(ListItem, xListBox.getItemCount()) + if iSelIndex != -1: + xListBox.selectItemPos(iSelIndex, True) + + def insertLabel(self, sName, sPropNames, oPropValues): + try: + oFixedText = self.insertControlModel("com.sun.star.awt.UnoControlFixedTextModel", sName, sPropNames, oPropValues) + oFixedText.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + oLabel = self.xUnoDialog.getControl(sName) + return oLabel + except Exception, ex: + traceback.print_exc() + return None + + def insertButton(self, sName, iControlKey, xActionListener, sProperties, sValues): + oButtonModel = self.insertControlModel("com.sun.star.awt.UnoControlButtonModel", sName, sProperties, sValues) + xPSet.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xButton = self.xUnoDialog.getControl(sName) + if xActionListener != None: + xButton.addActionListener(ActionListenerProcAdapter(xActionListener)) + + ControlKey = iControlKey + if self.ControlList != None: + self.ControlList.put(sName, ControlKey) + + return xButton + + def insertCheckBox(self, sName, iControlKey, xItemListener, sProperties, sValues): + oButtonModel = self.insertControlModel("com.sun.star.awt.UnoControlCheckBoxModel", sName, sProperties, sValues) + oButtonModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xCheckBox = self.xUnoDialog.getControl(sName) + if xItemListener != None: + xCheckBox.addItemListener(ItemListenerProcAdapter(xItemListener)) + + ControlKey = iControlKey + if self.ControlList != None: + self.ControlList.put(sName, ControlKey) + + def insertNumericField(self, sName, iControlKey, xTextListener, sProperties, sValues): + oNumericFieldModel = self.insertControlModel("com.sun.star.awt.UnoControlNumericFieldModel", sName, sProperties, sValues) + oNumericFieldModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xNumericField = self.xUnoDialog.getControl(sName) + if xTextListener != None: + xNumericField.addTextListener(TextListenerProcAdapter(xTextListener)) + + ControlKey = iControlKey + if self.ControlList != None: + self.ControlList.put(sName, ControlKey) + + def insertScrollBar(self, sName, iControlKey, xAdjustmentListener, sProperties, sValues): + try: + oScrollModel = self.insertControlModel("com.sun.star.awt.UnoControlScrollBarModel", sName, sProperties, sValues) + oScrollModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xScrollBar = self.xUnoDialog.getControl(sName) + if xAdjustmentListener != None: + xScrollBar.addAdjustmentListener(xAdjustmentListener) + + ControlKey = iControlKey + if self.ControlList != None: + self.ControlList.put(sName, ControlKey) + + return xScrollBar + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + return None + + def insertTextField(self, sName, iControlKey, xTextListener, sProperties, sValues): + xTextBox = insertEditField("com.sun.star.awt.UnoControlEditModel", sName, iControlKey, xTextListener, sProperties, sValues) + return xTextBox + + def insertFormattedField(self, sName, iControlKey, xTextListener, sProperties, sValues): + xTextBox = insertEditField("com.sun.star.awt.UnoControlFormattedFieldModel", sName, iControlKey, xTextListener, sProperties, sValues) + return xTextBox + + def insertEditField(self, ServiceName, sName, iControlKey, xTextListener, sProperties, sValues): + try: + xTextModel = self.insertControlModel(ServiceName, sName, sProperties, sValues) + xTextModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xTextBox = self.xUnoDialog.getControl(sName) + if xTextListener != None: + xTextBox.addTextListener(TextListenerProcAdapter(xTextListener)) + + ControlKey = iControlKey + self.ControlList.put(sName, ControlKey) + return xTextBox + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + return None + + def insertListBox(self, sName, iControlKey, xActionListener, xItemListener, sProperties, sValues): + xListBoxModel = self.insertControlModel("com.sun.star.awt.UnoControlListBoxModel", sName, sProperties, sValues) + xListBoxModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xListBox = self.xUnoDialog.getControl(sName) + if xItemListener != None: + xListBox.addItemListener(ItemListenerProcAdapter(xItemListener)) + + if xActionListener != None: + xListBox.addActionListener(ActionListenerProcAdapter(xActionListener)) + + ControlKey = iControlKey + self.ControlList.put(sName, ControlKey) + return xListBox + + def insertComboBox(self, sName, iControlKey, xActionListener, xTextListener, xItemListener, sProperties, sValues): + xComboBoxModel = self.insertControlModel("com.sun.star.awt.UnoControlComboBoxModel", sName, sProperties, sValues) + xComboBoxModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xComboBox = self.xUnoDialog.getControl(sName) + if xItemListener != None: + xComboBox.addItemListener(ItemListenerProcAdapter(xItemListener)) + + if xTextListener != None: + xComboBox.addTextListener(TextListenerProcAdapter(xTextListener)) + + if xActionListener != None: + xComboBox.addActionListener(ActionListenerProcAdapter(xActionListener)) + + ControlKey = iControlKey + self.ControlList.put(sName, ControlKey) + return xComboBox + + def insertRadioButton(self, sName, iControlKey, xItemListener, sProperties, sValues): + try: + xRadioButton = insertRadioButton(sName, iControlKey, sProperties, sValues) + if xItemListener != None: + xRadioButton.addItemListener(ItemListenerProcAdapter(xItemListener)) + + return xRadioButton + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + return None + + def insertRadioButton(self, sName, iControlKey, xActionListener, sProperties, sValues): + try: + xButton = insertRadioButton(sName, iControlKey, sProperties, sValues) + if xActionListener != None: + xButton.addActionListener(ActionListenerProcAdapter(xActionListener)) + + return xButton + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + return None + + def insertRadioButton(self, sName, iControlKey, sProperties, sValues): + xRadioButton = insertRadioButton(sName, sProperties, sValues) + ControlKey = iControlKey + self.ControlList.put(sName, ControlKey) + return xRadioButton + + def insertRadioButton(self, sName, sProperties, sValues): + try: + oRadioButtonModel = self.insertControlModel("com.sun.star.awt.UnoControlRadioButtonModel", sName, sProperties, sValues) + oRadioButtonModel.setPropertyValue(PropertyNames.PROPERTY_NAME, sName) + xRadioButton = self.xUnoDialog.getControl(sName) + return xRadioButton + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + return None + ''' + The problem with setting the visibility of controls is that changing the current step + of a dialog will automatically make all controls visible. The PropertyNames.PROPERTY_STEP property always wins against + the property "visible". Therfor a control meant to be invisible is placed on a step far far away. + @param the name of the control + @param iStep change the step if you want to make the control invisible + ''' + + def setControlVisible(self, controlname, iStep): + try: + iCurStep = int(getControlProperty(controlname, PropertyNames.PROPERTY_STEP)) + setControlProperty(controlname, PropertyNames.PROPERTY_STEP, iStep) + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + + ''' + The problem with setting the visibility of controls is that changing the current step + of a dialog will automatically make all controls visible. The PropertyNames.PROPERTY_STEP property always wins against + the property "visible". Therfor a control meant to be invisible is placed on a step far far away. + Afterwards the step property of the dialog has to be set with "repaintDialogStep". As the performance + of that method is very bad it should be used only once for all controls + @param controlname the name of the control + @param bIsVisible sets the control visible or invisible + ''' + + def setControlVisible(self, controlname, bIsVisible): + try: + iCurControlStep = int(getControlProperty(controlname, PropertyNames.PROPERTY_STEP)) + iCurDialogStep = int(Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_STEP)) + if bIsVisible: + setControlProperty(controlname, PropertyNames.PROPERTY_STEP, iCurDialogStep) + else: + setControlProperty(controlname, PropertyNames.PROPERTY_STEP, UIConsts.INVISIBLESTEP) + + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + + # repaints the currentDialogStep + + + def repaintDialogStep(self): + try: + ncurstep = int(Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_STEP)) + Helper.setUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_STEP, 99) + Helper.setUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_STEP, ncurstep) + except com.sun.star.uno.Exception, exception: + traceback.print_exc() + + def insertControlModel(self, ServiceName, sName, sProperties, sValues): + try: + xControlModel = self.xDialogModel.createInstance(ServiceName) + Helper.setUnoPropertyValues(xControlModel, sProperties, sValues) + self.xDialogModel.insertByName(sName, xControlModel) + return xControlModel + except Exception, exception: + traceback.print_exc() + return None + + def setFocus(self, ControlName): + oFocusControl = self.xUnoDialog.getControl(ControlName) + oFocusControl.setFocus() + + def combineListboxList(self, sFirstEntry, MainList): + try: + FirstList = [sFirstEntry] + ResultList = [MainList.length + 1] + System.arraycopy(FirstList, 0, ResultList, 0, 1) + System.arraycopy(MainList, 0, ResultList, 1, MainList.length) + return ResultList + except java.lang.Exception, jexception: + traceback.print_exc() + return None + + def selectListBoxItem(self, xListBox, iFieldsSelIndex): + if iFieldsSelIndex > -1: + FieldCount = xListBox.getItemCount() + if FieldCount > 0: + if iFieldsSelIndex < FieldCount: + xListBox.selectItemPos(iFieldsSelIndex, True) + else: + xListBox.selectItemPos((short)(iFieldsSelIndex - 1), True) + + # deselects a Listbox. MultipleMode is not supported + + def deselectListBox(self, _xBasisListBox): + oListBoxModel = getModel(_xBasisListBox) + sList = Helper.getUnoPropertyValue(oListBoxModel, "StringItemList") + Helper.setUnoPropertyValue(oListBoxModel, "StringItemList", [[],[]]) + Helper.setUnoPropertyValue(oListBoxModel, "StringItemList", sList) + + def calculateDialogPosition(self, FramePosSize): + # Todo: check if it would be useful or possible to create a dialog peer, that can be used for the messageboxes to + # maintain modality when they pop up. + CurPosSize = self.xUnoDialog.getPosSize() + WindowHeight = FramePosSize.Height + WindowWidth = FramePosSize.Width + DialogWidth = CurPosSize.Width + DialogHeight = CurPosSize.Height + iXPos = ((WindowWidth / 2) - (DialogWidth / 2)) + iYPos = ((WindowHeight / 2) - (DialogHeight / 2)) + self.xUnoDialog.setPosSize(iXPos, iYPos, DialogWidth, DialogHeight, POS) + + ''' + @param FramePosSize + @return 0 for cancel, 1 for ok + @throws com.sun.star.uno.Exception + ''' + + def executeDialog(self, FramePosSize): + if self.xUnoDialog.getPeer() == None: + raise AttributeError("Please create a peer, using your own frame"); + + self.calculateDialogPosition(FramePosSize) + + if self.xWindowPeer == None: + self.createWindowPeer() + + self.BisHighContrastModeActivated = self.isHighContrastModeActivated() + return self.xUnoDialog.execute() + + def setVisible(self, parent): + self.calculateDialogPosition(parent.xWindow.getPosSize()) + if self.xWindowPeer == None: + self.createWindowPeer() + + self.xUnoDialog.setVisible(True) + + ''' + @param parent + @return 0 for cancel, 1 for ok + @throws com.sun.star.uno.Exception + ''' + + def executeDialogFromParent(self, parent): + return self.executeDialog(parent.xWindow.getPosSize()) + + ''' + @param XComponent + @return 0 for cancel, 1 for ok + @throws com.sun.star.uno.Exception + ''' + + def executeDialogFromComponent(self, xComponent): + if xComponent != None: + w = xComponent.getComponentWindow() + if w != None: + return self.executeDialog(w.getPosSize()) + + return self.executeDialog( Rectangle (0, 0, 640, 400)) + + def setAutoMnemonic(self, ControlName, bValue): + self.xUnoDialog = self.xUnoDialog.getControl(ControlName) + xVclWindowPedsfer = self.xUnoDialog.getPeer() + self.xContainerWindow.setProperty("AutoMnemonics", bValue) + + def modifyFontWeight(self, ControlName, FontWeight): + oFontDesc = FontDescriptor.FontDescriptor() + oFontDesc.Weight = FontWeight + setControlProperty(ControlName, "FontDescriptor", oFontDesc) + + ''' + create a peer for this + dialog, using the given + peer as a parent. + @param parentPeer + @return + @throws java.lang.Exception + ''' + + def createWindowPeer(self, parentPeer=None): + self.xUnoDialog.setVisible(False) + xToolkit = self.xMSF.createInstance("com.sun.star.awt.Toolkit") + if parentPeer == None: + parentPeer = xToolkit.getDesktopWindow() + + self.xUnoDialog.createPeer(xToolkit, parentPeer) + self.xWindowPeer = self.xUnoDialog.getPeer() + return self.xUnoDialog.getPeer() + + # deletes the first entry when this is equal to "DelEntryName" + # returns true when a new item is selected + + def deletefirstListboxEntry(self, ListBoxName, DelEntryName): + xListBox = self.xUnoDialog.getControl(ListBoxName) + FirstItem = xListBox.getItem(0) + if FirstItem.equals(DelEntryName): + SelPos = xListBox.getSelectedItemPos() + xListBox.removeItems(0, 1) + if SelPos > 0: + setControlProperty(ListBoxName, "SelectedItems", [SelPos]) + xListBox.selectItemPos((short)(SelPos - 1), True) + + def setPeerProperty(self, ControlName, PropertyName, PropertyValue): + xControl = self.xUnoDialog.getControl(ControlName) + xVclWindowPeer = self.xControl.getPeer() + self.xContainerWindow.setProperty(PropertyName, PropertyValue) + + @classmethod + def getModel(self, control): + return control.getModel() + + @classmethod + def setEnabled(self, control, enabled): + setEnabled(control, enabled) + + @classmethod + def setEnabled(self, control, enabled): + Helper.setUnoPropertyValue(getModel(control), PropertyNames.PROPERTY_ENABLED, enabled) + + ''' + @author bc93774 + @param oControlModel the model of a control + @return the LabelType according to UIConsts.CONTROLTYPE + ''' + + @classmethod + def getControlModelType(self, oControlModel): + if oControlModel.supportsService("com.sun.star.awt.UnoControlFixedTextModel"): + return UIConsts.CONTROLTYPE.FIXEDTEXT + elif oControlModel.supportsService("com.sun.star.awt.UnoControlButtonModel"): + return UIConsts.CONTROLTYPE.BUTTON + elif oControlModel.supportsService("com.sun.star.awt.UnoControlCurrencyFieldModel"): + return UIConsts.CONTROLTYPE.CURRENCYFIELD + elif oControlModel.supportsService("com.sun.star.awt.UnoControlDateFieldModel"): + return UIConsts.CONTROLTYPE.DATEFIELD + elif oControlModel.supportsService("com.sun.star.awt.UnoControlFixedLineModel"): + return UIConsts.CONTROLTYPE.FIXEDLINE + elif oControlModel.supportsService("com.sun.star.awt.UnoControlFormattedFieldModel"): + return UIConsts.CONTROLTYPE.FORMATTEDFIELD + elif oControlModel.supportsService("com.sun.star.awt.UnoControlRoadmapModel"): + return UIConsts.CONTROLTYPE.ROADMAP + elif oControlModel.supportsService("com.sun.star.awt.UnoControlNumericFieldModel"): + return UIConsts.CONTROLTYPE.NUMERICFIELD + elif oControlModel.supportsService("com.sun.star.awt.UnoControlPatternFieldModel"): + return UIConsts.CONTROLTYPE.PATTERNFIELD + elif oControlModel.supportsService("com.sun.star.awt.UnoControlHyperTextModel"): + return UIConsts.CONTROLTYPE.HYPERTEXT + elif oControlModel.supportsService("com.sun.star.awt.UnoControlProgressBarModel"): + return UIConsts.CONTROLTYPE.PROGRESSBAR + elif oControlModel.supportsService("com.sun.star.awt.UnoControlTimeFieldModel"): + return UIConsts.CONTROLTYPE.TIMEFIELD + elif oControlModel.supportsService("com.sun.star.awt.UnoControlImageControlModel"): + return UIConsts.CONTROLTYPE.IMAGECONTROL + elif oControlModel.supportsService("com.sun.star.awt.UnoControlRadioButtonModel"): + return UIConsts.CONTROLTYPE.RADIOBUTTON + elif oControlModel.supportsService("com.sun.star.awt.UnoControlCheckBoxModel"): + return UIConsts.CONTROLTYPE.CHECKBOX + elif oControlModel.supportsService("com.sun.star.awt.UnoControlEditModel"): + return UIConsts.CONTROLTYPE.EDITCONTROL + elif oControlModel.supportsService("com.sun.star.awt.UnoControlComboBoxModel"): + return UIConsts.CONTROLTYPE.COMBOBOX + else: + if (oControlModel.supportsService("com.sun.star.awt.UnoControlListBoxModel")): + return UIConsts.CONTROLTYPE.LISTBOX + else: + return UIConsts.CONTROLTYPE.UNKNOWN + + ''' + @author bc93774 + @param oControlModel + @return the name of the property that contains the value of a controlmodel + ''' + + @classmethod + def getDisplayProperty(self, oControlModel): + itype = getControlModelType(oControlModel) + return getDisplayProperty(itype) + + ''' + @param itype The type of the control conforming to UIConst.ControlType + @return the name of the property that contains the value of a controlmodel + ''' + + ''' + @classmethod + def getDisplayProperty(self, itype): + # String propertyname = ""; + tmp_switch_var1 = itype + if 1: + pass + else: + return "" + ''' + + def addResourceHandler(self, _Unit, _Module): + self.m_oResource = Resource.Resource_unknown(self.xMSF, _Unit, _Module) + + def setInitialTabindex(self, _istep): + return (short)(_istep * 100) + + def isHighContrastModeActivated(self): + if self.xContainerWindow != None: + if self.BisHighContrastModeActivated == None: + try: + nUIColor = int(self.xContainerWindow.getProperty("DisplayBackgroundColor")) + except IllegalArgumentException, e: + traceback.print_exc() + return False + + #TODO: The following methods could be wrapped in an own class implementation + nRed = self.getRedColorShare(nUIColor) + nGreen = self.getGreenColorShare(nUIColor) + nBlue = self.getBlueColorShare(nUIColor) + nLuminance = ((nBlue * 28 + nGreen * 151 + nRed * 77) / 256) + bisactivated = (nLuminance <= 25) + self.BisHighContrastModeActivated = bisactivated + return bisactivated + else: + return self.BisHighContrastModeActivated.booleanValue() + + else: + return False + + def getRedColorShare(self, _nColor): + nRed = _nColor / 65536 + nRedModulo = _nColor % 65536 + nGreen = (int)(nRedModulo / 256) + nGreenModulo = (nRedModulo % 256) + nBlue = nGreenModulo + return nRed + + def getGreenColorShare(self, _nColor): + nRed = _nColor / 65536 + nRedModulo = _nColor % 65536 + nGreen = (int)(nRedModulo / 256) + return nGreen + + def getBlueColorShare(self, _nColor): + nRed = _nColor / 65536 + nRedModulo = _nColor % 65536 + nGreen = (int)(nRedModulo / 256) + nGreenModulo = (nRedModulo % 256) + nBlue = nGreenModulo + return nBlue + + def getWizardImageUrl(self, _nResId, _nHCResId): + if isHighContrastModeActivated(): + return "private:resource/wzi/image/" + _nHCResId + else: + return "private:resource/wzi/image/" + _nResId + + def getImageUrl(self, _surl, _shcurl): + if isHighContrastModeActivated(): + return _shcurl + else: + return _surl + + def getListBoxLineCount(self): + return 20 diff --git a/wizards/com/sun/star/wizards/ui/UnoDialog2.py b/wizards/com/sun/star/wizards/ui/UnoDialog2.py new file mode 100644 index 000000000000..8c2d805a3ab6 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/UnoDialog2.py @@ -0,0 +1,192 @@ +from UnoDialog import * +from ui.event.CommonListener import * +from common.Desktop import Desktop +from UIConsts import * + +''' +This class contains convenience methods for inserting components to a dialog. +It was created for use with the automatic conversion of Basic XML Dialog +description files to a Java class which builds the same dialog through the UNO API.<br/> +It uses an Event-Listener method, which calls a method through reflection +wenn an event on a component is trigered. +see the classes AbstractListener, CommonListener, MethodInvocation for details. +''' + +class UnoDialog2(UnoDialog): + + ''' + Override this method to return another listener. + @return + ''' + + def __init__(self, xmsf): + super(UnoDialog2,self).__init__(xmsf,(), ()) + self.guiEventListener = CommonListener() + + def insertButton(self, sName, actionPerformed, sPropNames, oPropValues, eventTarget=None): + xButton = self.insertControlModel2("com.sun.star.awt.UnoControlButtonModel", sName, sPropNames, oPropValues) + if actionPerformed != None: + xButton.addActionListener(ActionListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_ACTION_PERFORMED, actionPerformed, eventTarget) + + return xButton + + def insertImageButton(self, sName, actionPerformed, sPropNames, oPropValues): + xButton = self.insertControlModel2("com.sun.star.awt.UnoControlButtonModel", sName, sPropNames, oPropValues) + if actionPerformed != None: + xButton.addActionListener(ActionListenerProcAdapter(actionPerformed)) + + return xButton + + def insertCheckBox(self, sName, itemChanged, sPropNames, oPropValues, eventTarget=None): + xCheckBox = self.insertControlModel2("com.sun.star.awt.UnoControlCheckBoxModel", sName, sPropNames, oPropValues) + if itemChanged != None: + if eventTarget is None: + eventTarget = self + xCheckBox.addItemListener(ItemListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_ITEM_CHANGED, itemChanged, eventTarget) + + return xCheckBox + + def insertComboBox(self, sName, actionPerformed, itemChanged, textChanged, sPropNames, oPropValues, eventTarget=None): + xComboBox = self.insertControlModel2("com.sun.star.awt.UnoControlComboBoxModel", sName, sPropNames, oPropValues) + if eventTarget is None: + eventTarget = self + if actionPerformed != None: + xComboBox.addActionListener(self.guiEventListener) + self.guiEventListener.add(sName, EVENT_ACTION_PERFORMED, actionPerformed, eventTarget) + + if itemChanged != None: + xComboBox.addItemListener(ItemListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_ITEM_CHANGED, itemChanged, eventTarget) + + if textChanged != None: + xComboBox.addTextListener(TextListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_TEXT_CHANGED, textChanged, eventTarget) + + return xComboBox + + def insertListBox(self, sName, actionPerformed, itemChanged, sPropNames, oPropValues, eventTarget=None): + xListBox = self.insertControlModel2("com.sun.star.awt.UnoControlListBoxModel", + sName, sPropNames, oPropValues) + + if eventTarget is None: + eventTarget = self + + if actionPerformed != None: + xListBox.addActionListener(self.guiEventListener) + self.guiEventListener.add(sName, EVENT_ACTION_PERFORMED, actionPerformed, eventTarget) + + if itemChanged != None: + xListBox.addItemListener(ItemListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_ITEM_CHANGED, itemChanged, eventTarget) + + return xListBox + + def insertRadioButton(self, sName, itemChanged, sPropNames, oPropValues, eventTarget=None): + xRadioButton = self.insertControlModel2("com.sun.star.awt.UnoControlRadioButtonModel", + sName, sPropNames, oPropValues) + if itemChanged != None: + if eventTarget is None: + eventTarget = self + xRadioButton.addItemListener(ItemListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_ITEM_CHANGED, itemChanged, eventTarget) + + return xRadioButton + + def insertTitledBox(self, sName, sPropNames, oPropValues): + oTitledBox = self.insertControlModel2("com.sun.star.awt.UnoControlGroupBoxModel", sName, sPropNames, oPropValues) + return oTitledBox + + def insertTextField(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, + "com.sun.star.awt.UnoControlEditModel", sPropNames, oPropValues) + + def insertImage(self, sName, sPropNames, oPropValues): + return self.insertControlModel2("com.sun.star.awt.UnoControlImageControlModel", sName, sPropNames, oPropValues) + + def insertInfoImage(self, _posx, _posy, _iStep): + xImgControl = self.insertImage(Desktop.getUniqueName(self.xDialogModel, "imgHint"),("Border", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_IMAGEURL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "ScaleImage", PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_WIDTH),(uno.Any("short",0), 10, UIConsts.INFOIMAGEURL, _posx, _posy, False, _iStep, 10)) + self.getPeerConfiguration().setImageUrl(self.getModel(xImgControl), UIConsts.INFOIMAGEURL, UIConsts.INFOIMAGEURL_HC) + return xImgControl + + ''' + This method is used for creating Edit, Currency, Date, Formatted, Pattern, File + and Time edit components. + ''' + + def insertEditField(self, sName, sTextChanged, eventTarget, sModelClass, sPropNames, oPropValues): + xField = self.insertControlModel2(sModelClass, sName, sPropNames, oPropValues) + if sTextChanged != None: + if eventTarget is None: + eventTarget = self + xField.addTextListener(TextListenerProcAdapter(self.guiEventListener)) + self.guiEventListener.add(sName, EVENT_TEXT_CHANGED, sTextChanged, eventTarget) + + return xField + + def insertFileControl(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlFileControlModel", sPropNames, oPropValues) + + def insertCurrencyField(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlCurrencyFieldModel", sPropNames, oPropValues) + + def insertDateField(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlDateFieldModel", sPropNames, oPropValues) + + def insertNumericField(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlNumericFieldModel", sPropNames, oPropValues) + + def insertTimeField(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlTimeFieldModel", sPropNames, oPropValues) + + def insertPatternField(self, sName, sTextChanged, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlPatternFieldModel", sPropNames, oPropValues) + + def insertFormattedField(self, sName, sTextChanged, sPropNames, oPropValues, eventTarget=None): + return self.insertEditField(sName, sTextChanged, eventTarget, "com.sun.star.awt.UnoControlFormattedFieldModel", sPropNames, oPropValues) + + def insertFixedLine(self, sName, sPropNames, oPropValues): + oLine = self.insertControlModel2("com.sun.star.awt.UnoControlFixedLineModel", sName, sPropNames, oPropValues) + return oLine + + def insertScrollBar(self, sName, sPropNames, oPropValues): + oScrollBar = self.insertControlModel2("com.sun.star.awt.UnoControlScrollBarModel", sName, sPropNames, oPropValues) + return oScrollBar + + def insertProgressBar(self, sName, sPropNames, oPropValues): + oProgressBar = self.insertControlModel2("com.sun.star.awt.UnoControlProgressBarModel", sName, sPropNames, oPropValues) + return oProgressBar + + def insertGroupBox(self, sName, sPropNames, oPropValues): + oGroupBox = self.insertControlModel2("com.sun.star.awt.UnoControlGroupBoxModel", sName, sPropNames, oPropValues) + return oGroupBox + + def insertControlModel2(self, serviceName, componentName, sPropNames, oPropValues): + try: + xControlModel = self.insertControlModel(serviceName, componentName, (), ()) + Helper.setUnoPropertyValues(xControlModel, sPropNames, oPropValues) + Helper.setUnoPropertyValue(xControlModel, PropertyNames.PROPERTY_NAME, componentName) + except Exception, ex: + traceback.print_exc() + + aObj = self.xUnoDialog.getControl(componentName) + return aObj + + def setControlPropertiesDebug(self, model, names, values): + i = 0 + while i < names.length: + print " Settings: ", names[i] + Helper.setUnoPropertyValue(model, names[i], values[i]) + i += 1 + + def translateURL(self, relativeURL): + return "" + + def getControlModel(self, unoControl): + obj = unoControl.getModel() + return obj + + def showMessageBox(self, windowServiceName, windowAttribute, MessageText): + return SystemDialog.showMessageBox(xMSF, self.xControl.getPeer(), windowServiceName, windowAttribute, MessageText) + diff --git a/wizards/com/sun/star/wizards/ui/WizardDialog.py b/wizards/com/sun/star/wizards/ui/WizardDialog.py new file mode 100644 index 000000000000..6dbdf53cea5e --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/WizardDialog.py @@ -0,0 +1,422 @@ +from UnoDialog2 import * +from common.Resource import Resource +from abc import ABCMeta, abstractmethod +from com.sun.star.lang import NoSuchMethodException +from com.sun.star.uno import Exception as UnoException +from com.sun.star.lang import IllegalArgumentException +from com.sun.star.frame import TerminationVetoException +from common.HelpIds import * +from com.sun.star.awt.PushButtonType import HELP, STANDARD +from event.MethodInvocation import * +from event.EventNames import EVENT_ITEM_CHANGED + +class WizardDialog(UnoDialog2): + + __metaclass__ = ABCMeta + __NEXT_ACTION_PERFORMED = "gotoNextAvailableStep" + __BACK_ACTION_PERFORMED = "gotoPreviousAvailableStep" + __FINISH_ACTION_PERFORMED = "finishWizard_1" + __CANCEL_ACTION_PERFORMED = "cancelWizard_1" + __HELP_ACTION_PERFORMED = "callHelp" + ''' + Creates a new instance of WizardDialog + the hid is used as following : + "HID:(hid)" - the dialog + "HID:(hid+1) - the help button + "HID:(hid+2)" - the back button + "HID:(hid+3)" - the next button + "HID:(hid+4)" - the create button + "HID:(hid+5)" - the cancel button + @param xMSF + @param hid_ + ''' + + def __init__(self, xMSF, hid_): + super(WizardDialog,self).__init__(xMSF) + self.__hid = hid_ + self.__iButtonWidth = 50 + self.__nNewStep = 1 + self.__nOldStep = 1 + self.__nMaxStep = 1 + self.__bTerminateListenermustberemoved = True + self.__oWizardResource = Resource(xMSF, "dbw") + self.sMsgEndAutopilot = self.__oWizardResource.getResText(UIConsts.RID_DB_COMMON + 33) + #self.vetos = VetoableChangeSupport.VetoableChangeSupport_unknown(this) + + def getResource(self): + return self.__oWizardResource + + def activate(self): + try: + if self.xUnoDialog != None: + self.xUnoDialog.toFront() + + except UnoException, ex: + pass + # do nothing; + + def setMaxStep(self, i): + self.__nMaxStep = i + + def getMaxStep(self): + return self.__nMaxStep + + def setOldStep(self, i): + self.__nOldStep = i + + def getOldStep(self): + return self.__nOldStep + + def setNewStep(self, i): + self.__nNewStep = i + + def getNewStep(self): + return self.__nNewStep + + #@see java.beans.VetoableChangeListener#vetoableChange(java.beans.PropertyChangeEvent) + + + def vetoableChange(self, arg0): + self.__nNewStep = self.__nOldStep + + def itemStateChanged(self, itemEvent): + try: + self.__nNewStep = itemEvent.ItemId + self.__nOldStep = int(Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_STEP)) + if self.__nNewStep != self.__nOldStep: + switchToStep() + + except IllegalArgumentException, exception: + traceback.print_exc() + + def setRoadmapInteractive(self, _bInteractive): + Helper.setUnoPropertyValue(self.oRoadmap, "Activated", _bInteractive) + + def setRoadmapComplete(self, bComplete): + Helper.setUnoPropertyValue(self.oRoadmap, "Complete", bComplete) + + def isRoadmapComplete(self): + try: + return bool(Helper.getUnoPropertyValue(self.oRoadmap, "Complete")) + except IllegalArgumentException, exception: + traceback.print_exc() + return False + + def setCurrentRoadmapItemID(self, ID): + if self.oRoadmap != None: + nCurItemID = self.getCurrentRoadmapItemID() + if nCurItemID != ID: + Helper.setUnoPropertyValue(self.oRoadmap, "CurrentItemID", uno.Any("short",ID)) + + def getCurrentRoadmapItemID(self): + try: + return int(Helper.getUnoPropertyValue(self.oRoadmap, "CurrentItemID")) + except UnoException, exception: + traceback.print_exc() + return -1 + + def addRoadmap(self): + try: + iDialogHeight = Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_HEIGHT) + # the roadmap control has got no real TabIndex ever + # that is not correct, but changing this would need time, so it is used + # without TabIndex as before + self.oRoadmap = self.insertControlModel("com.sun.star.awt.UnoControlRoadmapModel", "rdmNavi", (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, "Tabstop", PropertyNames.PROPERTY_WIDTH),((iDialogHeight - 26), 0, 0, 0, 0, True, uno.Any("short",85))) + self.oRoadmap.setPropertyValue(PropertyNames.PROPERTY_NAME, "rdmNavi") + + mi = MethodInvocation("itemStateChanged", self) + self.guiEventListener.add("rdmNavi", EVENT_ITEM_CHANGED, mi) + self.xRoadmapControl = self.xUnoDialog.getControl("rdmNavi") + self.xRoadmapControl.addItemListener(ItemListenerProcAdapter(self.guiEventListener)) + + Helper.setUnoPropertyValue(self.oRoadmap, "Text", self.__oWizardResource.getResText(UIConsts.RID_COMMON + 16)) + except NoSuchMethodException, ex: + Resource.showCommonResourceError(xMSF) + except UnoException, jexception: + traceback.print_exc() + + def setRMItemLabels(self, _oResource, StartResID): + self.sRMItemLabels = _oResource.getResArray(StartResID, self.__nMaxStep) + + def getRMItemLabels(self): + return self.sRMItemLabels + + def insertRoadmapItem(self, _Index, _bEnabled, _LabelID, _CurItemID): + return insertRoadmapItem(_Index, _bEnabled, self.sRMItemLabels(_LabelID), _CurItemID) + + def insertRoadmapItem(self, Index, _bEnabled, _sLabel, _CurItemID): + try: + oRoadmapItem = self.oRoadmap.createInstance() + Helper.setUnoPropertyValue(oRoadmapItem, PropertyNames.PROPERTY_LABEL, _sLabel) + Helper.setUnoPropertyValue(oRoadmapItem, PropertyNames.PROPERTY_ENABLED, _bEnabled) + Helper.setUnoPropertyValue(oRoadmapItem, "ID", _CurItemID) + self.oRoadmap.insertByIndex(Index, oRoadmapItem) + NextIndex = Index + 1 + return NextIndex + except UnoException, exception: + traceback.print_exc() + return -1 + + def getRMItemCount(self): + return self.oRoadmap.getCount() + + def getRoadmapItemByID(self, _ID): + try: + i = 0 + while i < self.oRoadmap.getCount(): + CurRoadmapItem = self.oRoadmap.getByIndex(i) + CurID = int(Helper.getUnoPropertyValue(CurRoadmapItem, "ID")) + if CurID == _ID: + return CurRoadmapItem + + i += 1 + return None + except UnoException, exception: + traceback.print_exc() + return None + + def switchToStep(self,_nOldStep=None, _nNewStep=None): + if _nOldStep and _nNewStep: + self.__nOldStep = _nOldStep + self.__nNewStep = _nNewStep + + leaveStep(self.__nOldStep, self.__nNewStep) + if self.__nNewStep != self.__nOldStep: + if self.__nNewStep == self.__nMaxStep: + setControlProperty("btnWizardNext", "DefaultButton", False) + setControlProperty("btnWizardFinish", "DefaultButton", True) + else: + setControlProperty("btnWizardNext", "DefaultButton", True) + setControlProperty("btnWizardFinish", "DefaultButton", False) + + changeToStep(self.__nNewStep) + enterStep(self.__nOldStep, self.__nNewStep) + return True + + return False + + @abstractmethod + def leaveStep(self, nOldStep, nNewStep): + pass + + @abstractmethod + def enterStep(self, nOldStep, nNewStep): + pass + + def changeToStep(self, nNewStep): + Helper.setUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_STEP, nNewStep) + setCurrentRoadmapItemID((short)(nNewStep)) + enableNextButton(getNextAvailableStep() > 0) + enableBackButton(nNewStep != 1) + + + def iscompleted(self, _ndialogpage): + return False + + + def ismodified(self, _ndialogpage): + return False + + def drawNaviBar(self): + try: + curtabindex = UIConsts.SOFIRSTWIZARDNAVITABINDEX + iButtonWidth = self.__iButtonWidth + iButtonHeight = 14 + iCurStep = 0 + iDialogHeight = Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_HEIGHT) + iDialogWidth = Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_WIDTH) + iHelpPosX = 8 + iBtnPosY = iDialogHeight - iButtonHeight - 6 + iCancelPosX = iDialogWidth - self.__iButtonWidth - 6 + iFinishPosX = iCancelPosX - 6 - self.__iButtonWidth + iNextPosX = iFinishPosX - 6 - self.__iButtonWidth + iBackPosX = iNextPosX - 3 - self.__iButtonWidth + self.insertControlModel("com.sun.star.awt.UnoControlFixedLineModel", "lnNaviSep", (PropertyNames.PROPERTY_HEIGHT, "Orientation", PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_WIDTH), (1, 0, 0, iDialogHeight - 26, iCurStep, iDialogWidth)) + self.insertControlModel("com.sun.star.awt.UnoControlFixedLineModel", "lnRoadSep",(PropertyNames.PROPERTY_HEIGHT, "Orientation", PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_WIDTH),(iBtnPosY - 6, 1, 85, 0, iCurStep, 1)) + propNames = (PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "PushButtonType", PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH) + Helper.setUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_HELPURL, HelpIds.getHelpIdString(self.__hid)) + self.insertButton("btnWizardHelp", WizardDialog.__HELP_ACTION_PERFORMED,(PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "PushButtonType", PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH),(True, iButtonHeight, self.__oWizardResource.getResText(UIConsts.RID_COMMON + 15), iHelpPosX, iBtnPosY, uno.Any("short",HELP), iCurStep, uno.Any("short",(curtabindex + 1)), iButtonWidth)) + self.insertButton("btnWizardBack", WizardDialog.__BACK_ACTION_PERFORMED, propNames,(False, iButtonHeight, HelpIds.getHelpIdString(self.__hid + 2), self.__oWizardResource.getResText(UIConsts.RID_COMMON + 13), iBackPosX, iBtnPosY, uno.Any("short",STANDARD), iCurStep, uno.Any("short",(curtabindex + 1)), iButtonWidth)) + self.insertButton("btnWizardNext", WizardDialog.__NEXT_ACTION_PERFORMED, propNames,(True, iButtonHeight, HelpIds.getHelpIdString(self.__hid + 3), self.__oWizardResource.getResText(UIConsts.RID_COMMON + 14), iNextPosX, iBtnPosY, uno.Any("short",STANDARD), iCurStep, uno.Any("short",(curtabindex + 1)), iButtonWidth)) + self.insertButton("btnWizardFinish", WizardDialog.__FINISH_ACTION_PERFORMED, propNames,(True, iButtonHeight, HelpIds.getHelpIdString(self.__hid + 4), self.__oWizardResource.getResText(UIConsts.RID_COMMON + 12), iFinishPosX, iBtnPosY, uno.Any("short",STANDARD), iCurStep, uno.Any("short",(curtabindex + 1)), iButtonWidth)) + self.insertButton("btnWizardCancel", WizardDialog.__CANCEL_ACTION_PERFORMED, propNames,(True, iButtonHeight, HelpIds.getHelpIdString(self.__hid + 5), self.__oWizardResource.getResText(UIConsts.RID_COMMON + 11), iCancelPosX, iBtnPosY, uno.Any("short",STANDARD), iCurStep, uno.Any("short",(curtabindex + 1)), iButtonWidth)) + self.setControlProperty("btnWizardNext", "DefaultButton", True) + # add a window listener, to know + # if the user used "escape" key to + # close the dialog. + windowHidden = MethodInvocation("windowHidden", self) + self.xUnoDialog.addWindowListener(WindowListenerProcAdapter(self.guiEventListener)) + dialogName = Helper.getUnoPropertyValue(self.xDialogModel, PropertyNames.PROPERTY_NAME) + self.guiEventListener.add(dialogName, EVENT_ACTION_PERFORMED, windowHidden) + except Exception, exception: + traceback.print_exc() + + def insertRoadMapItems(self, items, steps, enabled): + i = 0 + while i < items.length: + insertRoadmapItem(i, enabled(i), items(i), steps(i)) + i += 1 + + def setStepEnabled(self, _nStep, bEnabled, enableNextButton): + setStepEnabled(_nStep, bEnabled) + if getNextAvailableStep() > 0: + enableNextButton(bEnabled) + + def enableNavigationButtons(self, _bEnableBack, _bEnableNext, _bEnableFinish): + enableBackButton(_bEnableBack) + enableNextButton(_bEnableNext) + enableFinishButton(_bEnableFinish) + + def enableBackButton(self, enabled): + setControlProperty("btnWizardBack", PropertyNames.PROPERTY_ENABLED, enabled) + + def enableNextButton(self, enabled): + setControlProperty("btnWizardNext", PropertyNames.PROPERTY_ENABLED, enabled) + + def enableFinishButton(self, enabled): + setControlProperty("btnWizardFinish", PropertyNames.PROPERTY_ENABLED, enabled) + + def setStepEnabled(self, _nStep, bEnabled): + xRoadmapItem = getRoadmapItemByID(_nStep) + if xRoadmapItem != None: + Helper.setUnoPropertyValue(xRoadmapItem, PropertyNames.PROPERTY_ENABLED, bEnabled) + + def enablefromStep(self, _iStep, _bDoEnable): + if _iStep <= self.__nMaxStep: + i = _iStep + while i <= self.__nMaxStep: + setStepEnabled(i, _bDoEnable) + i += 1 + enableFinishButton(_bDoEnable) + if not _bDoEnable: + enableNextButton(_iStep > getCurrentStep() + 1) + else: + enableNextButton(not (getCurrentStep() == self.__nMaxStep)) + + def isStepEnabled(self, _nStep): + try: + xRoadmapItem = getRoadmapItemByID(_nStep) + # Todo: In this case an exception should be thrown + if (xRoadmapItem == None): + return False + + bIsEnabled = bool(Helper.getUnoPropertyValue(xRoadmapItem, PropertyNames.PROPERTY_ENABLED)) + return bIsEnabled + except UnoException, exception: + traceback.print_exc() + return False + + def gotoPreviousAvailableStep(self): + if self.__nNewStep > 1: + self.__nOldStep = self.__nNewStep + self.__nNewStep -= 1 + while self.__nNewStep > 0: + bIsEnabled = isStepEnabled(self.__nNewStep) + if bIsEnabled: + break; + + self.__nNewStep -= 1 + # Exception??? + if (self.__nNewStep == 0): + self.__nNewStep = self.__nOldStep + switchToStep() + + #TODO discuss with rp + + def getNextAvailableStep(self): + if isRoadmapComplete(): + i = self.__nNewStep + 1 + while i <= self.__nMaxStep: + if isStepEnabled(i): + return i + + i += 1 + + return -1 + + def gotoNextAvailableStep(self): + self.__nOldStep = self.__nNewStep + self.__nNewStep = getNextAvailableStep() + if self.__nNewStep > -1: + switchToStep() + + @abstractmethod + def finishWizard(self): + pass + + #This function will call if the finish button is pressed on the UI. + + def finishWizard_1(self): + enableFinishButton(False) + success = False + try: + success = finishWizard() + finally: + if not success: + enableFinishButton(True) + + if success: + removeTerminateListener() + + def getMaximalStep(self): + return self.__nMaxStep + + def getCurrentStep(self): + try: + return int(Helper.getUnoPropertyValue(self.MSFDialogModel, PropertyNames.PROPERTY_STEP)) + except UnoException, exception: + traceback.print_exc() + return -1 + + def setCurrentStep(self, _nNewstep): + self.__nNewStep = _nNewstep + changeToStep(self.__nNewStep) + + def setRightPaneHeaders(self, _oResource, StartResID, _nMaxStep): + self.sRightPaneHeaders = _oResource.getResArray(StartResID, _nMaxStep) + setRightPaneHeaders(self.sRightPaneHeaders) + + def setRightPaneHeaders(self, _sRightPaneHeaders): + self.__nMaxStep = _sRightPaneHeaders.length + self.sRightPaneHeaders = _sRightPaneHeaders + oFontDesc = FontDescriptor.FontDescriptor() + oFontDesc.Weight = com.sun.star.awt.FontWeight.BOLD + i = 0 + while i < self.sRightPaneHeaders.length: + insertLabel("lblQueryTitle" + String.valueOf(i),("FontDescriptor", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_MULTILINE, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH),(oFontDesc, 16, self.sRightPaneHeaders(i), True, 91, 8, i + 1, uno.Any("short",12), 212)) + i += 1 + + def cancelWizard(self): + #can be overwritten by extending class + xDialog.endExecute() + + def removeTerminateListener(self): + if self.__bTerminateListenermustberemoved: + #COMMENTED + #Desktop.getDesktop(self.xMSF).removeTerminateListener( \ + # ActionListenerProcAdapter(self)) + self.__bTerminateListenermustberemoved = False + + ''' + called by the cancel button and + by the window hidden event. + if this method was not called before, + perform a cancel. + ''' + + def cancelWizard_1(self): + cancelWizard() + removeTerminateListener() + + def windowHidden(self): + cancelWizard_1() + + def notifyTermination(self, arg0): + cancelWizard_1() + + def queryTermination(self, arg0): + activate() + raise TerminationVetoException (); + + def disposing(self, arg0): + cancelWizard_1() diff --git a/wizards/com/sun/star/wizards/ui/XPathSelectionListener.py b/wizards/com/sun/star/wizards/ui/XPathSelectionListener.py new file mode 100644 index 000000000000..1f065209d2ea --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/XPathSelectionListener.py @@ -0,0 +1,7 @@ +from abc import ABCMeta, abstractmethod + +class XPathSelectionListener(object): + + @abstractmethod + def validatePath(self): + pass diff --git a/wizards/com/sun/star/wizards/ui/__init__.py b/wizards/com/sun/star/wizards/ui/__init__.py new file mode 100644 index 000000000000..51429ce86cfb --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/__init__.py @@ -0,0 +1 @@ +"""UI""" diff --git a/wizards/com/sun/star/wizards/ui/event/AbstractListener.py b/wizards/com/sun/star/wizards/ui/event/AbstractListener.py new file mode 100644 index 000000000000..a3337c66d13f --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/AbstractListener.py @@ -0,0 +1,67 @@ +from MethodInvocation import MethodInvocation +import traceback +''' +This class is a base class for listener classes. +It uses a hashtable to map between a ComponentName, EventName and a MethodInvokation Object. +To use this class do the following:<br/> +<list> +<li>Write a subclass which implements the needed Listener(s).</li> +in the even methods, use invoke(...). +<li>When instanciating the component, register the subclass as the event listener.</li> +<li>Write the methods which should be performed when the event occures.</li> +<li>call the "add" method, to define a component-event-action mapping.</li> +</list> +@author rpiterman +''' + +class AbstractListener(object): + '''Creates a new instance of AbstractListener''' + + mHashtable = {} + + def add(self, componentName, eventName, mi, target=None): + try: + if target is not None: + mi = MethodInvocation(mi, target) + AbstractListener.mHashtable[componentName + eventName] = mi + except Exception, e: + traceback.print_exc() + + + def get(self, componentName, eventName): + return AbstractListener.mHashtable[componentName + eventName] + + @classmethod + def invoke(self, componentName, eventName, param): + try: + mi = self.get(componentName, eventName) + if mi != None: + return mi.invoke(param) + else: + return None + + except InvocationTargetException, ite: + print "=======================================================" + print "=== Note: An Exception was thrown which should have ===" + print "=== caused a crash. I caught it. Please report this ===" + print "=== to libreoffice.org ===" + print "=======================================================" + traceback.print_exc() + except IllegalAccessException, iae: + traceback.print_exc() + except Exception, ex: + print "=======================================================" + print "=== Note: An Exception was thrown which should have ===" + print "=== caused a crash. I Catched it. Please report this ==" + print "=== to libreoffice.org ==" + print "=======================================================" + traceback.print_exc() + + return None + + ''' + Rerurns the property "name" of the Object which is the source of the event. + ''' + def getEventSourceName(self, eventObject): + return Helper.getUnoPropertyValue(eventObject.Source.getModel(), PropertyNames.PROPERTY_NAME) + diff --git a/wizards/com/sun/star/wizards/ui/event/CommonListener.py b/wizards/com/sun/star/wizards/ui/event/CommonListener.py new file mode 100644 index 000000000000..570be2557c75 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/CommonListener.py @@ -0,0 +1,73 @@ +''' +import com.sun.star.awt.*; + +import com.sun.star.lang.EventObject; +''' +from AbstractListener import AbstractListener +from EventNames import * + +class CommonListener(AbstractListener): + + def __init__(self): + pass + + '''Implementation of com.sun.star.awt.XActionListener''' + def actionPerformed(self, actionEvent): + self.invoke(self.getEventSourceName(actionEvent), EVENT_ACTION_PERFORMED, actionEvent) + + '''Implementation of com.sun.star.awt.XItemListener''' + def itemStateChanged(self, itemEvent): + self.invoke(self.getEventSourceName(itemEvent), EVENT_ITEM_CHANGED, itemEvent) + + '''Implementation of com.sun.star.awt.XTextListener''' + def textChanged(self, textEvent): + self.invoke(self.getEventSourceName(textEvent), EVENT_TEXT_CHANGED, textEvent) + + '''@see com.sun.star.awt.XWindowListener#windowResized(com.sun.star.awt.WindowEvent)''' + def windowResized(self, event): + self.invoke(self.getEventSourceName(event), EVENT_WINDOW_RESIZED, event) + + '''@see com.sun.star.awt.XWindowListener#windowMoved(com.sun.star.awt.WindowEvent)''' + def windowMoved(self, event): + self.invoke(self.getEventSourceName(event), EVENT_WINDOW_MOVED, event) + + '''@see com.sun.star.awt.XWindowListener#windowShown(com.sun.star.lang.EventObject)''' + def windowShown(self, event): + self.invoke(self.getEventSourceName(event), EVENT_WINDOW_SHOWN, event) + + '''@see com.sun.star.awt.XWindowListener#windowHidden(com.sun.star.lang.EventObject)''' + def windowHidden(self, event): + self.invoke(self.getEventSourceName(event), EVENT_WINDOW_HIDDEN, event) + + '''@see com.sun.star.awt.XMouseListener#mousePressed(com.sun.star.awt.MouseEvent)''' + def mousePressed(self, event): + self.invoke(self.getEventSourceName(event), EVENT_MOUSE_PRESSED, event) + + '''@see com.sun.star.awt.XMouseListener#mouseReleased(com.sun.star.awt.MouseEvent)''' + def mouseReleased(self, event): + self.invoke(self.getEventSourceName(event), EVENT_KEY_RELEASED, event) + + '''@see com.sun.star.awt.XMouseListener#mouseEntered(com.sun.star.awt.MouseEvent)''' + def mouseEntered(self, event): + self.invoke(self.getEventSourceName(event), EVENT_MOUSE_ENTERED, event) + + '''@see com.sun.star.awt.XMouseListener#mouseExited(com.sun.star.awt.MouseEvent)''' + def mouseExited(self, event): + self.invoke(self.getEventSourceName(event), EVENT_MOUSE_EXITED, event) + + '''@see com.sun.star.awt.XFocusListener#focusGained(com.sun.star.awt.FocusEvent)''' + def focusGained(self, event): + self.invoke(self.getEventSourceName(event), EVENT_FOCUS_GAINED, event) + + '''@see com.sun.star.awt.XFocusListener#focusLost(com.sun.star.awt.FocusEvent)''' + def focusLost(self, event): + self.invoke(self.getEventSourceName(event), EVENT_FOCUS_LOST, event) + + '''@see com.sun.star.awt.XKeyListener#keyPressed(com.sun.star.awt.KeyEvent)''' + def keyPressed(self, event): + self.invoke(c(event), EVENT_KEY_PRESSED, event) + + '''@see com.sun.star.awt.XKeyListener#keyReleased(com.sun.star.awt.KeyEvent)''' + def keyReleased(self, event): + self.invoke(self.getEventSourceName(event), EVENT_KEY_RELEASED, event) + diff --git a/wizards/com/sun/star/wizards/ui/event/DataAware.py b/wizards/com/sun/star/wizards/ui/event/DataAware.py new file mode 100644 index 000000000000..dfd62438b5ac --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/DataAware.py @@ -0,0 +1,291 @@ +from common.PropertyNames import * +from abc import ABCMeta, abstractmethod +import traceback + +#TEMPORAL +import inspect + +''' +@author rpiterman +DataAware objects are used to live-synchronize UI and DataModel/DataObject. +It is used as listener on UI events, to keep the DataObject up to date. +This class, as a base abstract class, sets a frame of functionality, +delegating the data Object get/set methods to a Value object, +and leaving the UI get/set methods abstract. +Note that event listenning is *not* a part of this model. +the updateData() or updateUI() methods should be porogramatically called. +in child classes, the updateData() will be binded to UI event calls. +<br><br> +This class holds references to a Data Object and a Value object. +The Value object "knows" how to get and set a value from the +Data Object. +''' + +class DataAware(object): + __metaclass__ = ABCMeta + + ''' + creates a DataAware object for the given data object and Value object. + @param dataObject_ + @param value_ + ''' + + def __init__(self, dataObject_, value_): + self._dataObject = dataObject_ + self._value = value_ + + ''' + Sets the given value to the data object. + this method delegates the job to the + Value object, but can be overwritten if + another kind of Data is needed. + @param newValue the new value to set to the DataObject. + ''' + + def setToData(self, newValue): + self._value.set(newValue, self._dataObject) + + ''' + gets the current value from the data obejct. + this method delegates the job to + the value object. + @return the current value of the data object. + ''' + + def getFromData(self): + return self._value.get(self._dataObject) + + ''' + sets the given value to the UI control + @param newValue the value to set to the ui control. + ''' + @abstractmethod + def setToUI (self,newValue): + pass + + ''' + gets the current value from the UI control. + @return the current value from the UI control. + ''' + + @abstractmethod + def getFromUI (self): + pass + + ''' + updates the UI control according to the + current state of the data object. + ''' + + def updateUI(self): + data = self.getFromData() + ui = self.getFromUI() + if data != ui: + try: + self.setToUI(data) + except Exception, ex: + traceback.print_exc() + #TODO tell user... + + ''' + updates the DataObject according to + the current state of the UI control. + ''' + + def updateData(self): + data = self.getFromData() + ui = self.getFromUI() + if not equals(data, ui): + setToData(ui) + + class Listener(object): + @abstractmethod + def eventPerformed (self, event): + pass + + ''' + compares the two given objects. + This method is null safe and returns true also if both are null... + If both are arrays, treats them as array of short and compares them. + @param a first object to compare + @param b second object to compare. + @return true if both are null or both are equal. + ''' + + def equals(self, a, b): + if not a and not b : + return True + + if not a or not b: + return False + + if a.getClass().isArray(): + if b.getClass().isArray(): + return Arrays.equals(a, b) + else: + return False + + return a.equals(b) + + ''' + given a collection containing DataAware objects, + calls updateUI() on each memebr of the collection. + @param dataAwares a collection containing DataAware objects. + ''' + @classmethod + def updateUIs(self, dataAwares): + for i in dataAwares: + i.updateUI() + + ''' + Given a collection containing DataAware objects, + sets the given DataObject to each DataAware object + in the given collection + @param dataAwares a collection of DataAware objects. + @param dataObject new data object to set to the DataAware objects in the given collection. + @param updateUI if true, calls updateUI() on each DataAware object. + ''' + + def setDataObject(self, dataObject, updateUI): + if dataObject != None and not (type(self._value) is not type(dataObject)): + raise ClassCastException ("can not cast new DataObject to original Class"); + self._dataObject = dataObject + if updateUI: + self.updateUI() + + ''' + Given a collection containing DataAware objects, + sets the given DataObject to each DataAware object + in the given collection + @param dataAwares a collection of DataAware objects. + @param dataObject new data object to set to the DataAware objects in the given collection. + @param updateUI if true, calls updateUI() on each DataAware object. + ''' + + @classmethod + def setDataObjects(self, dataAwares, dataObject, updateUI): + for i in dataAwares: + i.setDataObject(dataObject, updateUI); + + ''' + Value objects read and write a value from and + to an object. Typically using reflection and JavaBeans properties + or directly using memeber reflection API. + DataAware delegates the handling of the DataObject + to a Value object. + 2 implementations currently exist: PropertyValue, + using JavaBeans properties reflection, and DataAwareFields classes + which implement different memeber types. + ''' + class Value (object): + + '''gets a value from the given object. + @param target the object to get the value from. + @return the value from the given object. + ''' + @abstractmethod + def Get (self, target): + pass + + ''' + sets a value to the given object. + @param value the value to set to the object. + @param target the object to set the value to. + ''' + @abstractmethod + def Set (self, value, target): + pass + + ''' + checks if this Value object can handle + the given object type as a target. + @param type the type of a target to check + @return true if the given class is acceptible for + the Value object. False if not. + ''' + @abstractmethod + def isAssifrom(self, Type): + pass + + ''' + implementation of Value, handling JavaBeans properties through + reflection. + This Object gets and sets a value a specific + (JavaBean-style) property on a given object. + @author rp143992 + ''' + class PropertyValue(Value): + + __EMPTY_ARRAY = range(0) + + ''' + creates a PropertyValue for the property with + the given name, of the given JavaBean object. + @param propertyName the property to access. Must be a Cup letter (e.g. PropertyNames.PROPERTY_NAME for getName() and setName("..."). ) + @param propertyOwner the object which "own" or "contains" the property. + ''' + + def __init__(self, propertyName, propertyOwner): + self.getMethod = createGetMethod(propertyName, propertyOwner) + self.setMethod = createSetMethod(propertyName, propertyOwner, self.getMethod.getReturnType()) + + ''' + called from the constructor, and creates a get method reflection object + for the given property and object. + @param propName the property name0 + @param obj the object which contains the property. + @return the get method reflection object. + ''' + + def createGetMethod(self, propName, obj): + m = None + try: + #try to get a "get" method. + m = obj.getClass().getMethod("get" + propName, self.__class__.__EMPTY_ARRAY) + except NoSuchMethodException, ex1: + raise IllegalArgumentException ("get" + propName + "() method does not exist on " + obj.getClass().getName()); + + return m + + def Get(self, target): + try: + return self.getMethod.invoke(target, self.__class__.__EMPTY_ARRAY) + except IllegalAccessException, ex1: + ex1.printStackTrace() + except InvocationTargetException, ex2: + ex2.printStackTrace() + except NullPointerException, npe: + if isinstance(self.getMethod.getReturnType(),str): + return "" + + if isinstance(self.getMethod.getReturnType(),int ): + return 0 + + if isinstance(self.getMethod.getReturnType(),tuple): + return 0 + + if isinstance(self.getMethod.getReturnType(),list ): + return [] + + return None + + def createSetMethod(self, propName, obj, paramClass): + m = None + try: + m = obj.getClass().getMethod("set" + propName, [paramClass]) + except NoSuchMethodException, ex1: + raise IllegalArgumentException ("set" + propName + "(" + self.getMethod.getReturnType().getName() + ") method does not exist on " + obj.getClass().getName()); + + return m + + def Set(self, value, target): + try: + self.setMethod.invoke(target, [value]) + except IllegalAccessException, ex1: + ex1.printStackTrace() + except InvocationTargetException, ex2: + ex2.printStackTrace() + + def isAssignable(self, type): + return self.getMethod.getDeclaringClass().isAssignableFrom(type) and self.setMethod.getDeclaringClass().isAssignableFrom(type) + diff --git a/wizards/com/sun/star/wizards/ui/event/DataAwareFields.java b/wizards/com/sun/star/wizards/ui/event/DataAwareFields.java index 119b2b6e1e51..7a6b19ce6d7f 100644 --- a/wizards/com/sun/star/wizards/ui/event/DataAwareFields.java +++ b/wizards/com/sun/star/wizards/ui/event/DataAwareFields.java @@ -318,6 +318,7 @@ public class DataAwareFields { if (s == null || s.equals("")) { + System.out.println(Any.VOID); return Any.VOID; } else @@ -329,6 +330,7 @@ public class DataAwareFields { if (s == null || s.equals("")) { + System.out.println(Any.VOID); return Any.VOID; } else diff --git a/wizards/com/sun/star/wizards/ui/event/DataAwareFields.py b/wizards/com/sun/star/wizards/ui/event/DataAwareFields.py new file mode 100644 index 000000000000..efa017f55755 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/DataAwareFields.py @@ -0,0 +1,158 @@ +import traceback +from DataAware import * +import uno +''' +This class is a factory for Value objects for different types of +memebers. +Other than some Value implementations classes this class contains static +type conversion methods and factory methods. + +@see com.sun.star.wizards.ui.event.DataAware.Value +''' + +class DataAwareFields(object): + TRUE = "true" + FALSE = "false" + ''' + returns a Value Object which sets and gets values + and converting them to other types, according to the "value" argument. + + @param owner + @param fieldname + @param value + @return + @throws NoSuchFieldException + ''' + + @classmethod + def getFieldValueFor(self, owner, fieldname, value): + try: + f = getattr(owner, fieldname) + if isinstance(f,bool): + return self.__BooleanFieldValue(fieldname, value) + elif isinstance(f,str): + return self.__ConvertedStringValue(fieldname, value) + elif isinstance(f,int): + return self.__IntFieldValue(fieldname, value) + else: + return SimpleFieldValue(f) + + except AttributeError, ex: + traceback.print_exc() + return None + + '''__ConvertedStringValue + an abstract implementation of DataAware.Value to access + object memebers (fields) usign reflection. + ''' + class __FieldValue(DataAware.Value): + __metaclass__ = ABCMeta + + def __init__(self, field_): + self.field = field_ + + def isAssignable(self, type_): + return self.field.getDeclaringClass().isAssignableFrom(type_) + + class __BooleanFieldValue(__FieldValue): + + def __init__(self, f, convertTo_): + super(type(self),self).__init__(f) + self.convertTo = convertTo_ + + def get(self, target): + try: + b = getattr(target, self.field) + + if isinstance(self.convertTo,bool): + if b: + return True + else: + return False + elif isinstance(self.convertTo,int): + return int(b) + elif isinstance(self.convertTo,str): + return str(b) + elif self.convertTo.type == uno.Any("short",0).type: + return uno.Any("short",b) + else: + raise AttributeError("Cannot convert boolean value to given type (" + str(type(self.convertTo)) + ")."); + + except Exception, ex: + traceback.print_exc() + return None + + def set(self, value, target): + try: + self.field.setBoolean(target, toBoolean(value)) + except Exception, ex: + traceback.print_exc() + + class __IntFieldValue(__FieldValue): + + def __init__(self, f, convertTo_): + super(type(self),self).__init__(f) + self.convertTo = convertTo_ + + def get(self, target): + try: + i = getattr(target, self.field) + if isinstance(self.convertTo,bool): + if i: + return True + else: + return False + elif isinstance(self.convertTo, int): + return int(i) + elif isinstance(self.convertTo,str): + return str(i) + else: + raise AttributeError("Cannot convert int value to given type (" + str(type(self.convertTo)) + ")."); + + except Exception, ex: + traceback.print_exc() + #traceback.print_exc__ConvertedStringValue() + return None + + def set(self, value, target): + try: + self.field.setInt(target, toDouble(value)) + except Exception, ex: + traceback.print_exc() + + class __ConvertedStringValue(__FieldValue): + + def __init__(self, f, convertTo_): + super(type(self),self).__init__(f) + self.convertTo = convertTo_ + + def get(self, target): + try: + s = getattr(target, self.field) + if isinstance(self.convertTo,bool): + if s != None and not s == "" and s == "true": + return True + else: + return False + elif isinstance(self.convertTo,str): + if s == None or s == "": + pass + else: + return s + else: + raise AttributeError("Cannot convert int value to given type (" \ + + str(type(self.convertTo)) + ")." ) + + except Exception, ex: + traceback.print_exc() + return None + + def set(self, value, target): + try: + string_aux = "" + #if value is not None or not isinstance(value,uno.Any()): + # string_aux = str(value) + + self.field.set(target, string_aux) + except Exception, ex: + traceback.print_exc() diff --git a/wizards/com/sun/star/wizards/ui/event/EventNames.py b/wizards/com/sun/star/wizards/ui/event/EventNames.py new file mode 100644 index 000000000000..49845ceb11db --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/EventNames.py @@ -0,0 +1,15 @@ +EVENT_ACTION_PERFORMED = "APR" +EVENT_ITEM_CHANGED = "ICH" +EVENT_TEXT_CHANGED = "TCH" #window events (XWindow) +EVENT_WINDOW_RESIZED = "WRE" +EVENT_WINDOW_MOVED = "WMO" +EVENT_WINDOW_SHOWN = "WSH" +EVENT_WINDOW_HIDDEN = "WHI" #focus events (XWindow) +EVENT_FOCUS_GAINED = "FGA" +EVENT_FOCUS_LOST = "FLO" #keyboard events +EVENT_KEY_PRESSED = "KPR" +EVENT_KEY_RELEASED = "KRE" #mouse events +EVENT_MOUSE_PRESSED = "MPR" +EVENT_MOUSE_RELEASED = "MRE" +EVENT_MOUSE_ENTERED = "MEN" +EVENT_MOUSE_EXITED = "MEX" diff --git a/wizards/com/sun/star/wizards/ui/event/MethodInvocation.py b/wizards/com/sun/star/wizards/ui/event/MethodInvocation.py new file mode 100644 index 000000000000..0a662d2f2075 --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/MethodInvocation.py @@ -0,0 +1,34 @@ +'''import java.lang.reflect.InvocationTargetException; + +import java.lang.reflect.Method; + +import com.sun.star.wizards.common.PropertyNames; +''' + +'''Encapsulate a Method invocation. +In the constructor one defines a method, a target object and an optional +Parameter. +Then one calls "invoke", with or without a parameter. <br/> +Limitations: I do not check anything myself. If the param is not ok, from the +wrong type, or the mothod doesnot exist on the given object. +You can trick this class howmuch you want: it will all throw exceptions +on the java level. i throw no error warnings or my own excceptions... +''' + +class MethodInvocation(object): + + EMPTY_ARRAY = () + + '''Creates a new instance of MethodInvokation''' + def __init__(self, method, obj, paramClass=None): + self.mMethod = method + self.mObject = obj + self.mWithParam = not (paramClass==None) + + '''Returns the result of calling the method on the object, or null, if no result. ''' + + def invoke(self, param=None): + if self.mWithParam: + return self.mMethod.invoke(self.mObject, (param)) + else: + return self.mMethod.invoke(self.mObject, EMPTY_ARRAY) diff --git a/wizards/com/sun/star/wizards/ui/event/RadioDataAware.py b/wizards/com/sun/star/wizards/ui/event/RadioDataAware.py new file mode 100644 index 000000000000..1c33e4d0b9ed --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/RadioDataAware.py @@ -0,0 +1,45 @@ +from DataAware import * +from DataAwareFields import * +from UnoDataAware import * +import time +''' +@author rpiterman +To change the template for this generated type comment go to +Window>Preferences>Java>Code Generation>Code and Comments +''' + +class RadioDataAware(DataAware): + + def __init__(self, data, value, radioButs): + super(RadioDataAware,self).__init__(data, value) + self.radioButtons = radioButs + + def setToUI(self, value): + selected = int(value) + if selected == -1: + i = 0 + while i < self.radioButtons.length: + self.radioButtons[i].setState(False) + i += 1 + else: + self.radioButtons[selected].setState(True) + + def getFromUI(self): + for i in self.radioButtons: + if i.getState(): + return i + + return -1 + + @classmethod + def attachRadioButtons(self, data, dataProp, buttons, listener, field): + if field: + aux = DataAwareFields.getFieldValueFor(data, dataProp, 0) + else: + aux = DataAware.PropertyValue (dataProp, data) + + da = RadioDataAware(data, aux , buttons) + xil = UnoDataAware.ItemListener(da, listener) + for i in da.radioButtons: + i.addItemListener(xil) + return da diff --git a/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py b/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py new file mode 100644 index 000000000000..65d22bf6181e --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/event/UnoDataAware.py @@ -0,0 +1,184 @@ +from DataAware import * +import unohelper +from com.sun.star.awt import XItemListener +from com.sun.star.awt import XTextListener +from DataAwareFields import * +from common.Helper import * + +''' +@author rpiterman +This class suppoprts imple cases where a UI control can +be directly synchronized with a data property. +Such controls are: the different text controls +(synchronizing the "Text" , "Value", "Date", "Time" property), +Checkbox controls, Dropdown listbox controls (synchronizing the +SelectedItems[] property. +For those controls, static convenience methods are offered, to simplify use. +''' + +class UnoDataAware(DataAware): + + def __init__(self, dataObject, value, unoObject_, unoPropName_): + super(UnoDataAware,self).__init__(dataObject, value) + self.unoControl = unoObject_ + self.unoModel = self.getModel(self.unoControl) + self.unoPropName = unoPropName_ + self.disableObjects = range(0) + self.inverse = False + + def setInverse(self, i): + self.inverse = i + + def enableControls(self, value): + b = getBoolean(value) + if self.inverse: + if b.booleanValue(): + b = False + else: + b = True + + i = 0 + while i < self.disableObjects.length: + setEnabled(self.disableObjects[i], b) + i += 1 + + def setToUI(self, value): + Helper.setUnoPropertyValue(self.unoModel, self.unoPropName, value) + + def stringof(self, value): + if value.getClass().isArray(): + sb = StringBuffer.StringBuffer_unknown("[") + i = 0 + while i < (value).length: + sb.append((value)[i]).append(" , ") + i += 1 + sb.append("]") + return sb.toString() + else: + return value.toString() + + ''' + Try to get from an arbitrary object a boolean value. + Null returns False; + A Boolean object returns itself. + An Array returns true if it not empty. + An Empty String returns False. + everything else returns a True. + @param value + @return + ''' + + def getBoolean(self, value): + if value == None: + return False + + if isinstance(value, bool): + return value + elif value.getClass().isArray(): + if value.length != 0: + return True + else: + return False + elif value.equals(""): + return False + elif isinstance(value, int): + if value == 0: + return True + else: + return False + else: + return True + + def disableControls(self, controls): + self.disableObjects = controls + + def getFromUI(self): + return Helper.getUnoPropertyValue(self.unoModel, self.unoPropName) + + @classmethod + def __attachTextControl(self, data, prop, unoText, listener, unoProperty, field, value): + if field: + aux = DataAwareFields.getFieldValueFor(data, prop, value) + else: + aux = DataAware.PropertyValue (prop, data) + uda = UnoDataAware(data, aux, unoText, unoProperty) + unoText.addTextListener(self.TextListener(uda,listener)) + return uda + + class TextListener(unohelper.Base, XTextListener): + + def __init__(self, uda,listener): + self.uda = uda + self.listener = listener + + def textChanged(te): + self.uda.updateData() + if self.listener: + self.listener.eventPerformed(te) + + def disposing(self,eo): + pass + + @classmethod + def attachEditControl(self, data, prop, unoControl, listener, field): + return self.__attachTextControl(data, prop, unoControl, listener, "Text", field, "") + + @classmethod + def attachDateControl(self, data, prop, unoControl, listener, field): + return self.__attachTextControl(data, prop, unoControl, listener, "Date", field, 0) + + def attachTimeControl(self, data, prop, unoControl, listener, field): + return self.__attachTextControl(data, prop, unoControl, listener, "Time", field, 0) + + def attachNumericControl(self, data, prop, unoControl, listener, field): + return self.__attachTextControl(data, prop, unoControl, listener, "Value", field, float(0)) + + @classmethod + def attachCheckBox(self, data, prop, checkBox, listener, field): + if field: + aux = DataAwareFields.getFieldValueFor(data, prop, uno.Any("short",0)) + else: + aux = DataAware.PropertyValue (prop, data) + uda = UnoDataAware(data, aux , checkBox, PropertyNames.PROPERTY_STATE) + checkBox.addItemListener(self.ItemListener(uda, listener)) + return uda + + class ItemListener(unohelper.Base, XItemListener): + + def __init__(self, da, listener): + self.da = da + self.listener = listener + + def itemStateChanged(self, ie): + self.da.updateData() + if self.listener != None: + self.listener.eventPerformed(ie) + + def disposing(self, eo): + pass + + def attachLabel(self, data, prop, label, listener, field): + if field: + aux = DataAwareFields.getFieldValueFor(data, prop, "") + else: + aux = DataAware.PropertyValue (prop, data) + return UnoDataAware(data, aux, label, PropertyNames.PROPERTY_LABEL) + + @classmethod + def attachListBox(self, data, prop, listBox, listener, field): + if field: + aux = DataAwareFields.getFieldValueFor(data, prop, 0) + else: + aux = DataAware.PropertyValue (prop, data) + uda = UnoDataAware(data, aux, listBox, "SelectedItems") + listBox.addItemListener(self.ItemListener(uda,listener)) + return uda + + def getModel(self, control): + return control.getModel() + + def setEnabled(self, control, enabled): + setEnabled(control, enabled) + + def setEnabled(self, control, enabled): + Helper.setUnoPropertyValue(getModel(control), PropertyNames.PROPERTY_ENABLED, enabled) |