diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/ui/UnoDialog.py')
-rw-r--r-- | wizards/com/sun/star/wizards/ui/UnoDialog.py | 254 |
1 files changed, 254 insertions, 0 deletions
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 000000000..37376f1ee --- /dev/null +++ b/wizards/com/sun/star/wizards/ui/UnoDialog.py @@ -0,0 +1,254 @@ +# +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +import uno +import traceback +from .PeerConfig import PeerConfig +from .UIConsts import UIConsts +from ..common.PropertyNames import PropertyNames + +from com.sun.star.awt import Rectangle +from com.sun.star.awt.PosSize import POS + +class UnoDialog(object): + + createDict = False + dictProperties = None + BisHighContrastModeActivated = None + xVclWindowPeer = None + + def __init__(self, xMSF, PropertyNames, PropertyValues): + try: + self.xMSF = xMSF + self.ControlList = {} + self.xDialogModel = xMSF.createInstance( + "com.sun.star.awt.UnoControlDialogModel") + self.xUnoDialog = xMSF.createInstance( + "com.sun.star.awt.UnoControlDialog") + self.xUnoDialog.setModel(self.xDialogModel) + self.m_oPeerConfig = None + self.xWindowPeer = None + except Exception: + traceback.print_exc() + + # repaints the currentDialogStep + def repaintDialogStep(self): + try: + ncurstep = int(self.xDialogModel.Step) + self.xDialogModel.Step = 99 + self.xDialogModel.Step = ncurstep + except Exception: + traceback.print_exc() + + def insertControlModel(self, serviceName, componentName, sPropNames, oPropValues): + try: + xControlModel = self.xDialogModel.createInstance(serviceName) + uno.invoke(xControlModel, "setPropertyValues", + (sPropNames, oPropValues)) + self.xDialogModel.insertByName(componentName, xControlModel) + xControlModel.Name = componentName + except Exception: + traceback.print_exc() + + aObj = self.xUnoDialog.getControl(componentName) + return aObj + + def setFocus(self, ControlName): + oFocusControl = self.xUnoDialog.getControl(ControlName) + oFocusControl.setFocus() + + 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() is None: + raise AttributeError( + "Please create a peer, using your own frame") + + self.calculateDialogPosition(FramePosSize) + + if self.xWindowPeer is None: + self.createWindowPeer() + + self.xVclWindowPeer = self.xWindowPeer + self.BisHighContrastModeActivated = self.isHighContrastModeActivated() + return self.xUnoDialog.execute() + + def setVisible(self, parent): + self.calculateDialogPosition(parent.xUnoDialog.getPosSize()) + if self.xWindowPeer == None: + self.createWindowPeer() + + self.xUnoDialog.setVisible(True) + + ''' + @param XComponent + @return 0 for cancel, 1 for ok + @throws com.sun.star.uno.Exception + ''' + + def executeDialogFromComponent(self, xComponent): + if xComponent is not None: + w = xComponent.ComponentWindow + if w is not None: + return self.executeDialog(w.PosSize) + + return self.executeDialog( Rectangle (0, 0, 640, 400)) + + ''' + 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 is None: + parentPeer = xToolkit.getDesktopWindow() + + self.xUnoDialog.createPeer(xToolkit, parentPeer) + self.xWindowPeer = self.xUnoDialog.getPeer() + return self.xUnoDialog.getPeer() + + @classmethod + def setEnabled(self, control, enabled): + control.Model.Enabled = enabled + + @classmethod + def getModel(self, control): + return control.getModel() + + @classmethod + def getDisplayProperty(self, xServiceInfo): + if xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlFixedTextModel"): + return PropertyNames.PROPERTY_LABEL + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlButtonModel"): + return PropertyNames.PROPERTY_LABEL + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlCurrencyFieldModel"): + return "Value" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlDateFieldModel"): + return "Date" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlFixedLineModel"): + return PropertyNames.PROPERTY_LABEL + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlFormattedFieldModel"): + return "EffectiveValue" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlNumericFieldModel"): + return "Value" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlPatternFieldModel"): + return "Text" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlProgressBarModel"): + return "ProgressValue" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlTimeFieldModel"): + return "Time" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlImageControlModel"): + return PropertyNames.PROPERTY_IMAGEURL + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlRadioButtonModel"): + return PropertyNames.PROPERTY_STATE + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlCheckBoxModel"): + return PropertyNames.PROPERTY_STATE + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlEditModel"): + return "Text" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlComboBoxModel"): + return "Text" + elif xServiceInfo.supportsService( + "com.sun.star.awt.UnoControlListBoxModel"): + return "SelectedItems" + else: + return "" + + def isHighContrastModeActivated(self): + if (self.xVclWindowPeer is not None): + if (self.BisHighContrastModeActivated is None): + nUIColor = 0 + try: + nUIColor = self.xVclWindowPeer.getProperty("DisplayBackgroundColor") + except Exception: + 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 = bool(bisactivated) + return bisactivated; + else: + return self.BisHighContrastModeActivated + else: + return False + + + def getRedColorShare(self, _nColor): + nRed = _nColor / 65536 + nRedModulo = _nColor % 65536 + nGreen = nRedModulo / 256 + nGreenModulo = (nRedModulo % 256) + nBlue = nGreenModulo + return nRed + + def getGreenColorShare(self, _nColor): + nRed = _nColor / 65536 + nRedModulo = _nColor % 65536 + nGreen = nRedModulo / 256 + return nGreen + + def getBlueColorShare(self, _nColor): + nRed = _nColor / 65536 + nRedModulo = _nColor % 65536 + nGreen = nRedModulo / 256 + nGreenModulo = (nRedModulo % 256) + nBlue = nGreenModulo + return nBlue |