aboutsummaryrefslogtreecommitdiff
path: root/src/toolkit
diff options
context:
space:
mode:
authortassaron2017-08-19 18:32:12 -0400
committertassaron2017-08-19 18:32:12 -0400
commitc07f2426ceeada205fdacbfba66329179a74a1dc (patch)
treeff69455b1cec3cff36cf2c4edeae93cd8600649d /src/toolkit
parent87e762a8aa3fa97a3d43a18c59098b287bb95506 (diff)
fixed issues with undoing relative widgets
Diffstat (limited to 'src/toolkit')
-rw-r--r--src/toolkit/common.py47
1 files changed, 42 insertions, 5 deletions
diff --git a/src/toolkit/common.py b/src/toolkit/common.py
index 51ad023..74143e8 100644
--- a/src/toolkit/common.py
+++ b/src/toolkit/common.py
@@ -6,19 +6,53 @@ import string
import os
import sys
import subprocess
+import logging
+from copy import copy
from collections import OrderedDict
+log = logging.getLogger('AVP.Toolkit.Common')
+
+
class blockSignals:
- '''A context manager to temporarily block a Qt widget from updating'''
- def __init__(self, widget):
- self.widget = widget
+ '''
+ Context manager to temporarily block list of QtWidgets from updating,
+ and guarantee restoring the previous state afterwards.
+ '''
+ def __init__(self, widgets):
+ if type(widgets) is dict:
+ self.widgets = concatDictVals(widgets)
+ else:
+ self.widgets = (
+ widgets if hasattr(widgets, '__iter__')
+ else [widgets]
+ )
def __enter__(self):
- self.widget.blockSignals(True)
+ log.verbose('Blocking signals for %s' % ", ".join([
+ str(w.__class__.__name__) for w in self.widgets
+ ]))
+ self.oldStates = [w.signalsBlocked() for w in self.widgets]
+ for w in self.widgets:
+ w.blockSignals(True)
def __exit__(self, *args):
- self.widget.blockSignals(False)
+ log.verbose('Resetting blockSignals to %s' % sum(self.oldStates))
+ for w, state in zip(self.widgets, self.oldStates):
+ w.blockSignals(state)
+
+
+def concatDictVals(d):
+ '''Concatenates all values in given dict into one list.'''
+ key, value = d.popitem()
+ d[key] = value
+ final = copy(value)
+ if type(final) is not list:
+ final = [final]
+ final.extend([val for val in d.values()])
+ else:
+ value.extend([item for val in d.values() for item in val])
+ return final
def badName(name):
@@ -119,12 +153,14 @@ def connectWidget(widget, func):
elif type(widget) == QtWidgets.QComboBox:
widget.currentIndexChanged.connect(func)
else:
+ log.warning('Failed to connect %s ' % str(widget.__class__.__name__))
return False
return True
def setWidgetValue(widget, val):
'''Generic setValue method for use with any typical QtWidget'''
+ log.verbose('Setting %s to %s' % (str(widget.__class__.__name__), val))
if type(widget) == QtWidgets.QLineEdit:
widget.setText(val)
elif type(widget) == QtWidgets.QSpinBox \
@@ -135,6 +171,7 @@ def setWidgetValue(widget, val):
elif type(widget) == QtWidgets.QComboBox:
widget.setCurrentIndex(val)
else:
+ log.warning('Failed to set %s ' % str(widget.__class__.__name__))
return False
return True