From e00642794051b1d9b7b2665eee38567e9763558d Mon Sep 17 00:00:00 2001 From: ilgarlunin Date: Thu, 21 Nov 2019 19:34:20 +0300 Subject: [PATCH] rope config. hide watch widget if owning graph is not active --- .vscode/.ropeproject/config.py | 114 +++++++++++++++++++++++++++++++++ PyFlow/UI/Canvas/UIPinBase.py | 10 +-- 2 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 .vscode/.ropeproject/config.py diff --git a/.vscode/.ropeproject/config.py b/.vscode/.ropeproject/config.py new file mode 100644 index 000000000..dee2d1ae9 --- /dev/null +++ b/.vscode/.ropeproject/config.py @@ -0,0 +1,114 @@ +# The default ``config.py`` +# flake8: noqa + + +def set_prefs(prefs): + """This function is called before opening the project""" + + # Specify which files and folders to ignore in the project. + # Changes to ignored resources are not added to the history and + # VCSs. Also they are not returned in `Project.get_files()`. + # Note that ``?`` and ``*`` match all characters but slashes. + # '*.pyc': matches 'test.pyc' and 'pkg/test.pyc' + # 'mod*.pyc': matches 'test/mod1.pyc' but not 'mod/1.pyc' + # '.svn': matches 'pkg/.svn' and all of its children + # 'build/*.o': matches 'build/lib.o' but not 'build/sub/lib.o' + # 'build//*.o': matches 'build/lib.o' and 'build/sub/lib.o' + prefs['ignored_resources'] = ['*.pyc', '*~', '.ropeproject', + '.hg', '.svn', '_svn', '.git', '.tox'] + + # Specifies which files should be considered python files. It is + # useful when you have scripts inside your project. Only files + # ending with ``.py`` are considered to be python files by + # default. + # prefs['python_files'] = ['*.py'] + + # Custom source folders: By default rope searches the project + # for finding source folders (folders that should be searched + # for finding modules). You can add paths to that list. Note + # that rope guesses project source folders correctly most of the + # time; use this if you have any problems. + # The folders should be relative to project root and use '/' for + # separating folders regardless of the platform rope is running on. + # 'src/my_source_folder' for instance. + # prefs.add('source_folders', 'src') + + # You can extend python path for looking up modules + # prefs.add('python_path', '~/python/') + + # Should rope save object information or not. + prefs['save_objectdb'] = True + prefs['compress_objectdb'] = False + + # If `True`, rope analyzes each module when it is being saved. + prefs['automatic_soa'] = True + # The depth of calls to follow in static object analysis + prefs['soa_followed_calls'] = 0 + + # If `False` when running modules or unit tests "dynamic object + # analysis" is turned off. This makes them much faster. + prefs['perform_doa'] = True + + # Rope can check the validity of its object DB when running. + prefs['validate_objectdb'] = True + + # How many undos to hold? + prefs['max_history_items'] = 32 + + # Shows whether to save history across sessions. + prefs['save_history'] = True + prefs['compress_history'] = False + + # Set the number spaces used for indenting. According to + # :PEP:`8`, it is best to use 4 spaces. Since most of rope's + # unit-tests use 4 spaces it is more reliable, too. + prefs['indent_size'] = 4 + + # Builtin and c-extension modules that are allowed to be imported + # and inspected by rope. + prefs['extension_modules'] = [] + + # Add all standard c-extensions to extension_modules list. + prefs['import_dynload_stdmods'] = True + + # If `True` modules with syntax errors are considered to be empty. + # The default value is `False`; When `False` syntax errors raise + # `rope.base.exceptions.ModuleSyntaxError` exception. + prefs['ignore_syntax_errors'] = False + + # If `True`, rope ignores unresolvable imports. Otherwise, they + # appear in the importing namespace. + prefs['ignore_bad_imports'] = False + + # If `True`, rope will insert new module imports as + # `from import ` by default. + prefs['prefer_module_from_imports'] = False + + # If `True`, rope will transform a comma list of imports into + # multiple separate import statements when organizing + # imports. + prefs['split_imports'] = False + + # If `True`, rope will remove all top-level import statements and + # reinsert them at the top of the module when making changes. + prefs['pull_imports_to_top'] = True + + # If `True`, rope will sort imports alphabetically by module name instead + # of alphabetically by import statement, with from imports after normal + # imports. + prefs['sort_imports_alphabetically'] = False + + # Location of implementation of + # rope.base.oi.type_hinting.interfaces.ITypeHintingFactory In general + # case, you don't have to change this value, unless you're an rope expert. + # Change this value to inject you own implementations of interfaces + # listed in module rope.base.oi.type_hinting.providers.interfaces + # For example, you can add you own providers for Django Models, or disable + # the search type-hinting in a class hierarchy, etc. + prefs['type_hinting_factory'] = ( + 'rope.base.oi.type_hinting.factory.default_type_hinting_factory') + + +def project_opened(project): + """This function is called after opening the project""" + # Do whatever you like here! diff --git a/PyFlow/UI/Canvas/UIPinBase.py b/PyFlow/UI/Canvas/UIPinBase.py index 2eaeaa738..255440022 100644 --- a/PyFlow/UI/Canvas/UIPinBase.py +++ b/PyFlow/UI/Canvas/UIPinBase.py @@ -133,28 +133,30 @@ def toggleWatchValue(self): self.watchWidget = WatchItem() scene.addItem(self.watchWidget) self.watchWidget.setZValue(NodeDefaults().Z_LAYER + 1) - self.updateWatchWidgetPosition() + self.updateWatchWidget() self.updateWatchWidgetValue(self.currentData()) def path(self): return self._rawPin.path() - def updateWatchWidgetPosition(self): + def updateWatchWidget(self): if self.watchWidget is not None: scenePos = self.sceneBoundingRect().bottomLeft() if self.direction == PinDirection.Input else self.sceneBoundingRect().bottomRight() self.watchWidget.setPos(scenePos) + self.watchWidget.setVisible(self.owningNode().isVisible()) def updateWatchWidgetValue(self, *args, **kwargs): if self.watchWidget is not None: content = "Value: {0}".format(str(self.currentData())) + content += "\nStructure: {0}".format(self._rawPin.structureType.name) if self.isAny: content += "\nActive data type: {0}".format(self._rawPin.activeDataType) content += "\nSuper: {0}".format(self._rawPin.super) self.watchWidget.setPlainText(content) - self.updateWatchWidgetPosition() + self.updateWatchWidget() def heartBeat(self): - self.updateWatchWidgetPosition() + self.updateWatchWidget() def getInputWidgetVariant(self): return self._rawPin.getInputWidgetVariant()