Skip to content
Snippets Groups Projects
Commit f830b56e authored by Paul McCarthy's avatar Paul McCarthy
Browse files

Fix to group logic - un-initialised group-level property values were

overwriting the values of newly added overlay display properties.
parent b81b2a92
No related branches found
No related tags found
No related merge requests found
......@@ -59,6 +59,7 @@ class OverlayGroup(props.HasProperties):
self.__displayCtx = displayCtx
self.__overlayList = overlayList
self.__hasBeenSet = {}
self.__name = '{}_{}'.format(type(self).__name__, id(self))
# Copy all of the properties listed
......@@ -80,6 +81,8 @@ class OverlayGroup(props.HasProperties):
for propName in propNames:
prop = copy.copy(getattr(cls, propName))
self.addProperty('{}_{}'.format(clsName, propName), prop)
self.__hasBeenSet[clsName, propName] = False
def __copy__(self):
......@@ -93,6 +96,9 @@ class OverlayGroup(props.HasProperties):
display = self.__displayCtx.getDisplay(overlay)
opts = display.getDisplayOpts()
log.debug('Adding overlay {} to group {}'.format(
overlay.name, self.__name))
self.__bindDisplayOpts(display)
self.__bindDisplayOpts(opts)
......@@ -108,11 +114,18 @@ class OverlayGroup(props.HasProperties):
display = self.__displayCtx.getDisplay(overlay)
opts = display.getDisplayOpts()
self.__bindDisplayOpts(display, True)
self.__bindDisplayOpts(opts, True)
log.debug('Removing overlay {} from group {}'.format(
overlay.name, self.__name))
self.__bindDisplayOpts(display, unbind=True)
self.__bindDisplayOpts(opts, unbind=True)
display.removeListener('overlayType', self.__name)
if len(self.overlays) == 0:
for key in self.__hasBeenSet.keys():
self.__hasBeenSet[key] = False
def __bindDisplayOpts(self, target, unbind=False):
......@@ -129,15 +142,28 @@ class OverlayGroup(props.HasProperties):
bindProps = OverlayGroup._groupBindings.get(target,
allhits=True,
bykey=True)
for clsName, propNames in bindProps.items():
for propName in propNames:
groupName = '{}_{}'.format(clsName, propName)
# If the group property has not yet
# taken on a value, initialise it
# to the property value being bound.
#
# We do this to avoid clobbering
# property values with un-initialised
# group property values.
#
if not self.__hasBeenSet[clsName, propName]:
setattr(self, groupName, getattr(target, propName))
if slave is self:
otherName = propName
propName = '{}_{}'.format(clsName, propName)
propName = groupName
else:
otherName = '{}_{}'.format(clsName, propName)
otherName = groupName
slave.bindProps(propName,
master,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment