def testDeSerializeFail(self): serializedValue: str = '150,bogus' dimensions: Dimensions = Dimensions.deSerialize(serializedValue) self.assertEqual(0, dimensions.width, 'Width incorrectly deserialized') self.assertEqual(0, dimensions.height, 'Height incorrectly deserialized')
def testStringRepresentation(self): dimensions: Dimensions = Dimensions(width=50, height=32) expectedRepr: str = '50,32' actualRepr: str = dimensions.__str__() self.assertEqual(expectedRepr, actualRepr, 'Did not convert to string correctly')
def __createLayoutSizeControls(self) -> DimensionsContainer: self._layoutSizeContainer: DimensionsContainer = DimensionsContainer(parent=self, displayText=_("Layout Width/Height"), minValue=0, maxValue=4096, valueChangedCallback=self.__onSizeChange) layoutWidth: int = self._preferences.orthogonalLayoutSize.width layoutHeight: int = self._preferences.orthogonalLayoutSize.height self._layoutSizeContainer.dimensions = Dimensions(width=layoutWidth, height=layoutHeight) return self._layoutSizeContainer
def __init__(self, parent: Window, displayText: str, valueChangedCallback: Callable, minValue: int = DEFAULT_MIN_VALUE, maxValue: int = DEFAULT_MAX_VALUE): """ Args: parent The parent window displayText: The text to display as the static box title valueChangedCallback: The method to call when the value changes; The method should expect the first parameter to be a Dimension argument that is the new value minValue: The minimum value for the width/height maxValue: The maximum value for the width/height """ self.logger: Logger = getLogger(__name__) self._callback: Callable = valueChangedCallback super().__init__(parent, displayText, self._onValueChanged, minValue, maxValue) self._dimensions: Dimensions = Dimensions()
def startupSize(self, newValue: Dimensions): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.STARTUP_SIZE, newValue.__str__()) self._preferencesCommon.saveConfig()
def startupSize(self) -> Dimensions: serializedDimensions: str = self._config.get( MainPreferences.MAIN_SECTION, MainPreferences.STARTUP_SIZE) return Dimensions.deSerialize(serializedDimensions)
class MainPreferences(BaseSubPreference): MAIN_SECTION: str = 'Main' USER_DIRECTORY: str = 'userPath' ORG_DIRECTORY: str = 'orgDirectory' LAST_DIRECTORY: str = 'LastDirectory' SHOW_TIPS_ON_STARTUP: str = 'Show_Tips_On_Startup' AUTO_RESIZE_SHAPE_ON_EDIT: str = 'Auto_Resize_Shape_On_Edit' SHOW_PARAMETERS: str = 'Show_Parameters' FULL_SCREEN: str = 'Full_Screen' CURRENT_TIP: str = 'Current_Tip' EDITOR: str = 'Editor' STARTUP_SIZE: str = 'startup_size' STARTUP_POSITION: str = 'startup_position' CENTER_DIAGRAM: str = 'center_diagram' CENTER_APP_ON_STARTUP: str = 'center_app_on_startup' # If 'False' honor startup_x, startup_y TOOL_BAR_ICON_SIZE: str = 'tool_bar_icon_size' MAIN_PREFERENCES: PREFS_NAME_VALUES = { USER_DIRECTORY: '.', ORG_DIRECTORY: '.', LAST_DIRECTORY: '.', SHOW_TIPS_ON_STARTUP: 'False', AUTO_RESIZE_SHAPE_ON_EDIT: 'True', SHOW_PARAMETERS: 'False', FULL_SCREEN: 'False', CURRENT_TIP: '0', EDITOR: 'brackets', STARTUP_SIZE: Dimensions(1024, 768).__str__(), STARTUP_POSITION: Position(5, 5).__str__(), CENTER_DIAGRAM: 'False', CENTER_APP_ON_STARTUP: 'True', TOOL_BAR_ICON_SIZE: ToolBarIconSize.SIZE_32.value } def init(self, *args, **kwds): self.logger: Logger = getLogger(__name__) BaseSubPreference.init(self, *args, **kwds) self._preferencesCommon: PreferencesCommon = PreferencesCommon( self._config) def addAnyMissingMainPreferences(self): try: if self._config.has_section(MainPreferences.MAIN_SECTION) is False: self._config.add_section(MainPreferences.MAIN_SECTION) for prefName in MainPreferences.MAIN_PREFERENCES.keys(): if self._config.has_option(MainPreferences.MAIN_SECTION, prefName) is False: self.__addMissingMainPreference( prefName, MainPreferences.MAIN_PREFERENCES[prefName]) except (ValueError, Exception) as e: self.logger.error(f"Error: {e}") @property def userDirectory(self) -> str: return self._config.get(MainPreferences.MAIN_SECTION, MainPreferences.USER_DIRECTORY) @userDirectory.setter def userDirectory(self, theNewValue: str): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.USER_DIRECTORY, theNewValue) self._preferencesCommon.saveConfig() @property def orgDirectory(self) -> str: return self._config.get(MainPreferences.MAIN_SECTION, MainPreferences.ORG_DIRECTORY) @orgDirectory.setter def orgDirectory(self, theNewValue: str): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.ORG_DIRECTORY, theNewValue) self._preferencesCommon.saveConfig() @property def lastOpenedDirectory(self) -> str: return self._config.get(MainPreferences.MAIN_SECTION, MainPreferences.LAST_DIRECTORY) @lastOpenedDirectory.setter def lastOpenedDirectory(self, theNewValue: str): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.LAST_DIRECTORY, theNewValue) self._preferencesCommon.saveConfig() @property def showTipsOnStartup(self) -> bool: return self._config.getboolean(MainPreferences.MAIN_SECTION, MainPreferences.SHOW_TIPS_ON_STARTUP) @showTipsOnStartup.setter def showTipsOnStartup(self, newValue: bool): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.SHOW_TIPS_ON_STARTUP, str(newValue)) self._preferencesCommon.saveConfig() @property def autoResizeShapesOnEdit(self) -> bool: return self._config.getboolean( MainPreferences.MAIN_SECTION, MainPreferences.AUTO_RESIZE_SHAPE_ON_EDIT) @autoResizeShapesOnEdit.setter def autoResizeShapesOnEdit(self, newValue: bool): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.AUTO_RESIZE_SHAPE_ON_EDIT, str(newValue)) self._preferencesCommon.saveConfig() @property def showParameters(self) -> bool: return self._config.getboolean(MainPreferences.MAIN_SECTION, MainPreferences.SHOW_PARAMETERS) @showParameters.setter def showParameters(self, theNewValue: bool): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.SHOW_PARAMETERS, str(theNewValue)) self._preferencesCommon.saveConfig() @property def fullScreen(self) -> bool: return self._config.getboolean(MainPreferences.MAIN_SECTION, MainPreferences.FULL_SCREEN) @fullScreen.setter def fullScreen(self, theNewValue: bool): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.FULL_SCREEN, str(theNewValue)) self._preferencesCommon.saveConfig() @property def currentTip(self) -> int: return self._config.getint(MainPreferences.MAIN_SECTION, MainPreferences.CURRENT_TIP) @currentTip.setter def currentTip(self, theNewValue: int): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.CURRENT_TIP, str(theNewValue)) self._preferencesCommon.saveConfig() @property def editor(self) -> str: return self._config.get(MainPreferences.MAIN_SECTION, MainPreferences.EDITOR) @editor.setter def editor(self, theNewValue: str): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.EDITOR, theNewValue) self._preferencesCommon.saveConfig() @property def startupSize(self) -> Dimensions: serializedDimensions: str = self._config.get( MainPreferences.MAIN_SECTION, MainPreferences.STARTUP_SIZE) return Dimensions.deSerialize(serializedDimensions) @startupSize.setter def startupSize(self, newValue: Dimensions): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.STARTUP_SIZE, newValue.__str__()) self._preferencesCommon.saveConfig() @property def centerDiagram(self): centerDiagram: bool = self._config.getboolean( MainPreferences.MAIN_SECTION, MainPreferences.CENTER_DIAGRAM) return centerDiagram @centerDiagram.setter def centerDiagram(self, theNewValue: bool): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.CENTER_DIAGRAM, str(theNewValue)) self._preferencesCommon.saveConfig() @property def centerAppOnStartUp(self) -> bool: centerApp: bool = self._config.getboolean( MainPreferences.MAIN_SECTION, MainPreferences.CENTER_APP_ON_STARTUP) return centerApp @centerAppOnStartUp.setter def centerAppOnStartUp(self, theNewValue: bool): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.CENTER_APP_ON_STARTUP, str(theNewValue)) self._preferencesCommon.saveConfig() @property def startupPosition(self) -> Position: serializedPosition: str = self._config.get( MainPreferences.MAIN_SECTION, MainPreferences.STARTUP_POSITION) return Position.deSerialize(serializedPosition) @startupPosition.setter def startupPosition(self, newValue: Position): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.STARTUP_POSITION, newValue.__str__()) self._preferencesCommon.saveConfig() @property def toolBarIconSize(self) -> ToolBarIconSize: enumStr: str = self._config.get(MainPreferences.MAIN_SECTION, MainPreferences.TOOL_BAR_ICON_SIZE) return ToolBarIconSize(enumStr) @toolBarIconSize.setter def toolBarIconSize(self, newSize: ToolBarIconSize): self._config.set(MainPreferences.MAIN_SECTION, MainPreferences.TOOL_BAR_ICON_SIZE, newSize.value) self._preferencesCommon.saveConfig() def __addMissingMainPreference(self, preferenceName, value: str): self._preferencesCommon.addMissingPreference( MainPreferences.MAIN_SECTION, preferenceName, value)
def textDimensions(self, newValue: Dimensions): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_DIMENSIONS, newValue.__str__()) self._preferencesCommon.saveConfig()
def textDimensions(self) -> Dimensions: serializedDimensions: str = self._config.get( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_DIMENSIONS) return Dimensions.deSerialize(serializedDimensions)
class ValuePreferences(BaseSubPreference): VALUE_PREFERENCES_SECTION: str = 'ValuePreferences' NOTE_TEXT: str = 'note_text' NOTE_DIMENSIONS: str = 'note_dimensions' TEXT_DIMENSIONS: str = 'text_dimensions' TEXT_BOLD: str = 'text_bold' TEXT_ITALICIZE: str = 'text_italicize' TEXT_FONT: str = 'text_font' TEXT_FONT_SIZE: str = 'text_font_size' CLASS_NAME: str = 'class_name' CLASS_DIMENSIONS: str = 'class_dimensions' DEFAULT_NAME_INTERFACE: str = 'default_name_interface' DEFAULT_NAME_USECASE: str = 'default_name_usecase' DEFAULT_NAME_ACTOR: str = 'default_name_actor' DEFAULT_NAME_METHOD: str = 'default_name_method' VALUE_PREFERENCES: PREFS_NAME_VALUES = { NOTE_TEXT: 'This is the note text', NOTE_DIMENSIONS: Dimensions(100, 50).__str__(), TEXT_DIMENSIONS: Dimensions(125, 50).__str__(), TEXT_BOLD: 'False', TEXT_ITALICIZE: 'False', TEXT_FONT: 'Swiss', TEXT_FONT_SIZE: '14', CLASS_NAME: 'ClassName', CLASS_DIMENSIONS: Dimensions(100, 100).__str__(), DEFAULT_NAME_INTERFACE: 'IClassInterface', DEFAULT_NAME_USECASE: 'UseCaseName', DEFAULT_NAME_ACTOR: 'ActorName', DEFAULT_NAME_METHOD: 'MethodName', } def init(self, *args, **kwds): self.logger: Logger = getLogger(__name__) BaseSubPreference.init(self, *args, **kwds) self._preferencesCommon: PreferencesCommon = PreferencesCommon( self._config) @property def noteText(self) -> str: return self._config.get(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.NOTE_TEXT) @noteText.setter def noteText(self, theNewValue: str): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.NOTE_TEXT, theNewValue) self._preferencesCommon.saveConfig() @property def noteDimensions(self) -> Dimensions: serializedDimensions: str = self._config.get( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.NOTE_DIMENSIONS) return Dimensions.deSerialize(serializedDimensions) @noteDimensions.setter def noteDimensions(self, newValue: Dimensions): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.NOTE_DIMENSIONS, newValue.__str__()) self._preferencesCommon.saveConfig() @property def textDimensions(self) -> Dimensions: serializedDimensions: str = self._config.get( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_DIMENSIONS) return Dimensions.deSerialize(serializedDimensions) @textDimensions.setter def textDimensions(self, newValue: Dimensions): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_DIMENSIONS, newValue.__str__()) self._preferencesCommon.saveConfig() @property def textBold(self) -> bool: return self._config.getboolean( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_BOLD) @textBold.setter def textBold(self, newValue: bool): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_BOLD, str(newValue)) self._preferencesCommon.saveConfig() @property def textItalicize(self) -> bool: return self._config.getboolean( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_ITALICIZE) @textItalicize.setter def textItalicize(self, newValue: bool): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_ITALICIZE, str(newValue)) self._preferencesCommon.saveConfig() @property def textFont(self) -> TextFontEnum: fontStr: str = self._config.get( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_FONT) fontEnum: TextFontEnum = TextFontEnum(fontStr) return fontEnum @textFont.setter def textFont(self, newValue: TextFontEnum): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_FONT, newValue.value) self._preferencesCommon.saveConfig() @property def textFontSize(self) -> int: return self._config.getint(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_FONT_SIZE) @textFontSize.setter def textFontSize(self, newValue: int): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.TEXT_FONT_SIZE, str(newValue)) self._preferencesCommon.saveConfig() @property def className(self) -> str: return self._config.get(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.CLASS_NAME) @className.setter def className(self, newValue: str): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.CLASS_NAME, str(newValue)) self._preferencesCommon.saveConfig() @property def classDimensions(self) -> Dimensions: serializedDimensions: str = self._config.get( ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.CLASS_DIMENSIONS) return Dimensions.deSerialize(serializedDimensions) @classDimensions.setter def classDimensions(self, newValue: Dimensions): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.CLASS_DIMENSIONS, newValue.__str__()) self._preferencesCommon.saveConfig() @property def interfaceName(self) -> str: return self._config.get(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_INTERFACE) @interfaceName.setter def interfaceName(self, newValue: str): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_INTERFACE, newValue) self._preferencesCommon.saveConfig() @property def useCaseName(self) -> str: return self._config.get(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_USECASE) @useCaseName.setter def useCaseName(self, newValue: str): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_USECASE, newValue) self._preferencesCommon.saveConfig() @property def actorName(self) -> str: return self._config.get(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_ACTOR) @actorName.setter def actorName(self, newValue: str): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_ACTOR, newValue) self._preferencesCommon.saveConfig() @property def methodName(self) -> str: return self._config.get(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_METHOD) @methodName.setter def methodName(self, newValue: str): self._config.set(ValuePreferences.VALUE_PREFERENCES_SECTION, ValuePreferences.DEFAULT_NAME_METHOD, newValue) self._preferencesCommon.saveConfig() def addMissingPreferences(self): try: if self._config.has_section( ValuePreferences.VALUE_PREFERENCES_SECTION) is False: self._config.add_section( ValuePreferences.VALUE_PREFERENCES_SECTION) for prefName in ValuePreferences.VALUE_PREFERENCES: if self._config.has_option( ValuePreferences.VALUE_PREFERENCES_SECTION, prefName) is False: self.__addMissingValuePreference( prefName, ValuePreferences.VALUE_PREFERENCES[prefName]) except (ValueError, Exception) as e: self.logger.error(f"Error: {e}") def __addMissingValuePreference(self, preferenceName, value): self._preferencesCommon.addMissingPreference( ValuePreferences.VALUE_PREFERENCES_SECTION, preferenceName, value)
def orthogonalLayoutSize(self) -> Dimensions: serializedDimensions: str = self._config.get( MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.ORTHOGONAL_LAYOUT_SIZE) return Dimensions.deSerialize(serializedDimensions)
class MiscellaneousPreferences(BaseSubPreference): MISCELLANEOUS_SECTION: str = 'Miscellaneous' DEFAULT_PDF_EXPORT_FILE_NAME: str = 'PyutExport' I18N: str = 'I18N' PDF_EXPORT_FILE_NAME: str = 'default_pdf_export_file_name' WX_IMAGE_FILENAME: str = 'wx_image_filename' ORTHOGONAL_LAYOUT_SIZE: str = 'orthogonal_layout_size' MISCELLANEOUS_PREFERENCES: PREFS_NAME_VALUES = { I18N: 'en', # TODO: I think this should be 'English' if I look at the preferences dialog `Close` code PDF_EXPORT_FILE_NAME: DEFAULT_PDF_EXPORT_FILE_NAME, WX_IMAGE_FILENAME: 'ImageDump', ORTHOGONAL_LAYOUT_SIZE: Dimensions(1000, 1000).__str__(), } def init(self, *args, **kwds): self.logger: Logger = getLogger(__name__) BaseSubPreference.init(self, *args, **kwds) self._preferencesCommon: PreferencesCommon = PreferencesCommon( self._config) def addAnyMissingPreferences(self): try: if self._config.has_section( MiscellaneousPreferences.MISCELLANEOUS_SECTION) is False: self._config.add_section( MiscellaneousPreferences.MISCELLANEOUS_SECTION) for prefName in MiscellaneousPreferences.MISCELLANEOUS_PREFERENCES.keys( ): if self._config.has_option( MiscellaneousPreferences.MISCELLANEOUS_SECTION, prefName) is False: self.__addMissingPreference( prefName, MiscellaneousPreferences. MISCELLANEOUS_PREFERENCES[prefName]) except (ValueError, Exception) as e: self.logger.error(f"Error: {e}") @property def i18n(self) -> str: return self._config.get(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.I18N) @i18n.setter def i18n(self, theNewValue: str): self._config.set(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.I18N, theNewValue) self._preferencesCommon.saveConfig() @property def pdfExportFileName(self) -> str: return self._config.get(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.PDF_EXPORT_FILE_NAME) @pdfExportFileName.setter def pdfExportFileName(self, newValue: str): self._config.set(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.PDF_EXPORT_FILE_NAME, newValue) self._preferencesCommon.saveConfig() @property def wxImageFileName(self) -> str: return self._config.get(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.WX_IMAGE_FILENAME) @wxImageFileName.setter def wxImageFileName(self, newValue: str): self._config.set(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.WX_IMAGE_FILENAME, newValue) self._preferencesCommon.saveConfig() @property def orthogonalLayoutSize(self) -> Dimensions: serializedDimensions: str = self._config.get( MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.ORTHOGONAL_LAYOUT_SIZE) return Dimensions.deSerialize(serializedDimensions) @orthogonalLayoutSize.setter def orthogonalLayoutSize(self, newValue: Dimensions): self._config.set(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.ORTHOGONAL_LAYOUT_SIZE, newValue.__str__()) self._preferencesCommon.saveConfig() def __addMissingPreference(self, preferenceName, value): self._preferencesCommon.addMissingPreference( MiscellaneousPreferences.MISCELLANEOUS_SECTION, preferenceName, value)
def orthogonalLayoutSize(self, newValue: Dimensions): self._config.set(MiscellaneousPreferences.MISCELLANEOUS_SECTION, MiscellaneousPreferences.ORTHOGONAL_LAYOUT_SIZE, newValue.__str__()) self._preferencesCommon.saveConfig()