# # # 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