summaryrefslogtreecommitdiffstats
path: root/wizards/com/sun/star/wizards/ui/UnoDialog.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /wizards/com/sun/star/wizards/ui/UnoDialog.py
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wizards/com/sun/star/wizards/ui/UnoDialog.py')
-rw-r--r--wizards/com/sun/star/wizards/ui/UnoDialog.py254
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