diff -r 69d0e91cf0fb -r b633598e2e67 PluginColorString.py --- a/PluginColorString.py Thu Dec 30 12:44:26 2021 +0100 +++ b/PluginColorString.py Wed Sep 21 11:10:49 2022 +0200 @@ -43,36 +43,37 @@ """ Class implementing the 'Color String' tool plug-in. """ + def __init__(self, ui): """ Constructor - + @param ui reference to the user interface object @type UserInterface """ super().__init__(ui) self.__ui = ui - + self.__translator = None self.__loadTranslator() - + self.__initMenu() - + self.__editors = {} self.__mainActions = [] - + def activate(self): """ Public method to activate this plugin. - + @return tuple of None and activation status @rtype tuple of (None, bool) """ global error - error = "" # clear previous error - + error = "" # clear previous error + self.__ui.showMenu.connect(self.__populateMenu) - + menu = self.__ui.getMenu("plugin_tools") if menu is not None: if not menu.isEmpty(): @@ -80,23 +81,21 @@ self.__mainActions.append(act) act = menu.addMenu(self.__menu) self.__mainActions.append(act) - - ericApp().getObject("ViewManager").editorOpenedEd.connect( - self.__editorOpened) - ericApp().getObject("ViewManager").editorClosedEd.connect( - self.__editorClosed) - + + ericApp().getObject("ViewManager").editorOpenedEd.connect(self.__editorOpened) + ericApp().getObject("ViewManager").editorClosedEd.connect(self.__editorClosed) + for editor in ericApp().getObject("ViewManager").getOpenEditors(): self.__editorOpened(editor) - + return None, True - + def deactivate(self): """ Public method to deactivate this plugin. """ self.__ui.showMenu.disconnect(self.__populateMenu) - + menu = self.__ui.getMenu("plugin_tools") if menu is not None: for act in self.__mainActions: @@ -104,10 +103,12 @@ self.__mainActions = [] ericApp().getObject("ViewManager").editorOpenedEd.disconnect( - self.__editorOpened) + self.__editorOpened + ) ericApp().getObject("ViewManager").editorClosedEd.disconnect( - self.__editorClosed) - + self.__editorClosed + ) + for editor, acts in self.__editors.items(): editor.showMenu.disconnect(self.__editorShowMenu) menu = editor.getMenu("Tools") @@ -115,7 +116,7 @@ for act in acts: menu.removeAction(act) self.__editors = {} - + def __loadTranslator(self): """ Private method to load the translation file. @@ -124,7 +125,8 @@ loc = self.__ui.getLocale() if loc and loc != "C": locale_dir = os.path.join( - os.path.dirname(__file__), "ColorString", "i18n") + os.path.dirname(__file__), "ColorString", "i18n" + ) translation = "colorstring_{0}".format(loc) translator = QTranslator(None) loaded = translator.load(translation, locale_dir) @@ -132,10 +134,12 @@ self.__translator = translator ericApp().installTranslator(self.__translator) else: - print("Warning: translation file '{0}' could not be" - " loaded.".format(translation)) + print( + "Warning: translation file '{0}' could not be" + " loaded.".format(translation) + ) print("Using default.") - + def __initMenu(self): """ Private method to initialize the menu. @@ -145,11 +149,11 @@ self.__menu.addAction(self.tr("Color Name"), self.__selectColorName) self.__menu.addAction(self.tr("RGBA Color"), self.__selectRgbaColor) self.__menu.setEnabled(False) - + def __populateMenu(self, name, menu): """ Private slot to populate the tools menu with our entry. - + @param name name of the menu @type str @param menu reference to the menu to be populated @@ -157,9 +161,9 @@ """ if name not in ["Tools", "PluginTools"]: return - + editor = ericApp().getObject("ViewManager").activeWindow() - + if name == "Tools": if not menu.isEmpty(): menu.addSeparator() @@ -167,11 +171,11 @@ act.setEnabled(editor is not None) elif name == "PluginTools" and self.__mainActions: self.__mainActions[-1].setEnabled(editor is not None) - + def __editorOpened(self, editor): """ Private slot called, when a new editor was opened. - + @param editor reference to the new editor @type Editor """ @@ -185,11 +189,11 @@ self.__menu.setEnabled(True) self.__editors[editor].append(act) editor.showMenu.connect(self.__editorShowMenu) - + def __editorClosed(self, editor): """ Private slot called, when an editor was closed. - + @param editor reference to the editor @type Editor """ @@ -197,12 +201,12 @@ del self.__editors[editor] if not self.__editors: self.__menu.setEnabled(False) - + def __editorShowMenu(self, menuName, menu, editor): """ Private slot called, when the the editor context menu or a submenu is about to be shown. - + @param menuName name of the menu to be shown @type str @param menu reference to the menu @@ -210,10 +214,7 @@ @param editor reference to the editor @type Editor """ - if ( - menuName == "Tools" and - self.__menu.menuAction() not in menu.actions() - ): + if menuName == "Tools" and self.__menu.menuAction() not in menu.actions(): # Re-add our menu self.__editors[editor] = [] if not menu.isEmpty(): @@ -221,22 +222,22 @@ self.__editors[editor].append(act) act = menu.addMenu(self.__menu) self.__editors[editor].append(act) - + def __isHexString(self, text): """ Private method to check, if a given text is a hex string. - + @param text text to check @type str @return flag indicating a hex string @rtype bool """ return all(c in "0123456789abcdefABCDEF" for c in text) - + def __isValidColor(self, name): """ Private method to check for a valid color name. - + @param name color name to check @type str @return flag indicating a valid color name @@ -245,7 +246,7 @@ if self.__isHexString(name) and len(name) in (3, 6, 8, 9, 12): return True return QColor.isValidColor(name) - + def __selectHexColor(self): """ Private slot implementing the hex color string selection. @@ -253,7 +254,7 @@ editor = ericApp().getObject("ViewManager").activeWindow() if editor is None: return - + if editor.hasSelectedText(): currColor = editor.selectedText() if not self.__isValidColor(currColor): @@ -262,10 +263,11 @@ self.tr("Color String"), self.tr( """<p>The selected string <b>{0}</b> is not a""" - """ valid color string. Aborting!</p>""") - .format(currColor)) + """ valid color string. Aborting!</p>""" + ).format(currColor), + ) return - + if currColor.startswith("#"): withHash = True elif self.__isHexString(currColor): @@ -278,10 +280,13 @@ withHash = True currColor = "" initColor = QColor() - + color = QColorDialog.getColor( - initColor, self.__ui, self.tr("Color String"), - QColorDialog.ColorDialogOption.ShowAlphaChannel) + initColor, + self.__ui, + self.tr("Color String"), + QColorDialog.ColorDialogOption.ShowAlphaChannel, + ) if color.isValid(): if color.alpha() == 255: nameFormat = QColor.NameFormat.HexRgb @@ -298,7 +303,7 @@ editor.insert(colorStr) editor.setCursorPosition(line, index + len(colorStr)) editor.endUndoAction() - + def __selectColorName(self): """ Private slot implementing the named color string selection. @@ -306,7 +311,7 @@ editor = ericApp().getObject("ViewManager").activeWindow() if editor is None: return - + if editor.hasSelectedText(): currColor = editor.selectedText() if currColor not in QColor.colorNames(): @@ -315,13 +320,15 @@ self.tr("Color String"), self.tr( """<p>The selected string <b>{0}</b> is not a""" - """ valid color name. Aborting!</p>""") - .format(currColor)) + """ valid color name. Aborting!</p>""" + ).format(currColor), + ) return else: currColor = "" - + from ColorString.ColorSelectionDialog import ColorSelectionDialog + dlg = ColorSelectionDialog(currColor, self.__ui) if dlg.exec() == QDialog.DialogCode.Accepted: colorStr = dlg.getColor() @@ -333,7 +340,7 @@ editor.insert(colorStr) editor.setCursorPosition(line, index + len(colorStr)) editor.endUndoAction() - + def __selectRgbaColor(self): """ Private slot implementing the RGBA color string selection. @@ -341,7 +348,7 @@ editor = ericApp().getObject("ViewManager").activeWindow() if editor is None: return - + if editor.hasSelectedText(): currColor = editor.selectedText() valid, rgba = self.__isValidRgbaColor(currColor) @@ -351,16 +358,20 @@ self.tr("Color String"), self.tr( """<p>The selected string <b>{0}</b> is not a""" - """ valid RGBA color string. Aborting!</p>""") - .format(currColor)) + """ valid RGBA color string. Aborting!</p>""" + ).format(currColor), + ) return initColor = QColor(*rgba) else: initColor = QColor() - + color = QColorDialog.getColor( - initColor, self.__ui, self.tr("Color String"), - QColorDialog.ColorDialogOption.ShowAlphaChannel) + initColor, + self.__ui, + self.tr("Color String"), + QColorDialog.ColorDialogOption.ShowAlphaChannel, + ) if color.isValid(): rgba = color.getRgb() if rgba[-1] == 255: @@ -375,11 +386,11 @@ editor.insert(colorStr) editor.setCursorPosition(line, index + len(colorStr)) editor.endUndoAction() - + def __isValidRgbaColor(self, color): """ Private method to check for a valid RGBA color. - + @param color color string to check @type str @return flag indicating a valid RGBA color (boolean) and a list with @@ -387,23 +398,24 @@ @rtype tuple of (bool, [int, int, int]) or (bool, [int, int, int, int]) """ rgba = [] - + parts = color.split(",") if len(parts) not in [3, 4]: return False, [] - + for part in parts: try: c = int(float(part)) if "." in part else int(part) except ValueError: return False, [] - + if c < 0 or c > 255: return False, [] - + rgba.append(c) - + return True, rgba + # # eflag: noqa = M801