def parseConfiguration(self, label_class, label_config): attrs = label_config['attributes'] # Add prototype item for insertion self._class_items[label_class] = AnnotationModelItem({ 'class': label_class }) # Create attribute handler widgets or update their values for attr, vals in attrs.items(): if attr in self._attribute_handlers: self._attribute_handlers[attr].updateValues(vals) else: handler = self._handler_factory.create(attr, vals) if handler is None: self._class_items[label_class][attr] = vals else: self._attribute_handlers[attr] = handler for attr in attrs: if attr in self._attribute_handlers: self._class_items[label_class].update(self._attribute_handlers[attr].defaults())
def addButton(self, buttonConfig): # LOG.info("addLabelClass with buttonConfig {} ...".format(buttonConfig)) # Check label configuration if 'attributes' not in buttonConfig: raise ImproperlyConfigured("Label with no 'attributes' dict found") inserter_creator_method = buttonConfig['inserter'] inserted_item_creator_method = buttonConfig['item'] attrs = buttonConfig['attributes'] # LOG.info("buttonConfig['attributes'] {} type {} ...".format(buttonConfig['attributes'], type(buttonConfig['attributes']))) if config.METADATA_LABELCLASS_TOKEN not in attrs: raise ImproperlyConfigured( "Labels must have an attribute config.METADATA_LABELCLASS_TOKEN" ) label_class = attrs[config.METADATA_LABELCLASS_TOKEN] # LOG.info("buttonConfig['attributes'][config.METADATA_LABELCLASS_TOKEN] {} type {} ...".format(attrs[config.METADATA_LABELCLASS_TOKEN], type(attrs[config.METADATA_LABELCLASS_TOKEN]))) if label_class in self._inserters_modelitems: raise ImproperlyConfigured( "Label with class '%s' defined more than once" % label_class) # Add INSERTER button displaytext = attrs['displaytext'] buttonName = label_class button = QPushButton(displaytext, self) optionInfo = attrs.get('optioninfo', None) # print "button {}: option {}".format(buttonName, optionInfo) buttonOptionsWidget = None buttonDisplayColor = None tmp = [ o.get(default_config.METADATA_DISPLAYCOLOR_TOKEN, None) for o in optionInfo['option'] if o.get(config.METADATA_IS_DEFAULT_TOKEN, False) ][0] if optionInfo else None buttonDisplayColor = tmp if tmp else optionInfo['option'][0].get( default_config.METADATA_DISPLAYCOLOR_TOKEN, None) if optionInfo else attrs.get( default_config.METADATA_DISPLAYCOLOR_TOKEN, None) # LOG.info(u"buttonConfig['attributes'] = {}, displaytext = {}, displayColor = {}".format(attrs, displaytext, buttonDisplayColor)) # ==== zx add @ 20161114 to display button with color configured by user ==== txtColor = None if buttonDisplayColor is not None: qtColor, hexColor = utils.getColorDesc(buttonDisplayColor) rgba = utils.hexColorStrToRGBA(hexColor) distance = math.sqrt((rgba[0] - 255)**2 + (rgba[1] - 255)**2 + (rgba[2] - 255)**2) txtColor = '#000000' if distance > config.GUI_COLOR_TAG_TEXT_BLACKWHITE_TOGGLE_THRESHOLD else '#ffffff' buttonDisplayColor = hexColor[0:8] # LOG.info(u"buttonDisplayColor = {} txtColor = {}, qtColor = {} hexColor = {}".format(buttonDisplayColor, txtColor, qtColor, hexColor )) # print (u"buttonDisplayColor = {} txtColor = {}, qtColor = {} hexColor = {}".format(buttonDisplayColor, txtColor, qtColor, hexColor )) # print "button {} buttonDisplayColor {} ...".format(buttonName, buttonDisplayColor) utils.set_qobj_stylesheet( button, 'QPushButton', widgetBackgroundColor=None, widgetTextColor=None, widgetBackgroundColorWhenChecked=buttonDisplayColor, widgetTextColorWhenChecked=txtColor) # ========================== zx add end ============================ button.clicked.connect(bind(self.onClassButtonPressed, label_class)) # Add hotkey if 'hotkey' in buttonConfig: hotkey = QShortcut(QKeySequence(buttonConfig['hotkey']), self) hotkey.activated.connect(button.click) self._class_shortcuts[label_class] = hotkey # print "{} is set hotkey {} {}".format(label_class, buttonConfig['hotkey'], hotkey) if optionInfo: optionListName = optionInfo['name'] optionListText = optionInfo['displaytext'] option = optionInfo['option'] buttonOptionsWidget = AttachedCheckboxGroupWidget( buttonName, optionListName, optionListText, True, option, self._optionsCheckboxStateChangedSignal, parent=None) isDefaultOption = False for o in option: new_class = o.get('tag', None) if new_class: # Add prototype mdoelItem for insertion mi = {config.METADATA_LABELCLASS_TOKEN: new_class} mi['displaytext'] = o.get('displaytext', new_class) self._inserters_modelitems[ new_class] = AnnotationModelItem(mi) self._inserters_guiitems[new_class] = ( inserter_creator_method, inserted_item_creator_method) # print "addButton.....self._inserters_guiitems[{}] = {}".format(new_class, (inserter_creator_method, inserted_item_creator_method)) for key, val in o.iteritems(): if key != 'tag': self._inserters_modelitems[new_class][key] = val else: attrs = buttonConfig['attributes'] # Add prototype mdoelItem for insertion mi = {config.METADATA_LABELCLASS_TOKEN: label_class} mi['displaytext'] = attrs.get('displaytext', label_class) self._inserters_modelitems[label_class] = AnnotationModelItem(mi) self._inserters_guiitems[label_class] = ( inserter_creator_method, inserted_item_creator_method) # update their values for key, val in attrs.iteritems(): self._inserters_modelitems[label_class][key] = val # LOG.info("self._inserters_modelitems[{}][{}] = {}".format(label_class, key, val)) self._widgets_dict[label_class] = [button, buttonOptionsWidget] # print "self._widgets_dict [ {} ] = {}".format(label_class, button) button.setCheckable(True) utils.set_qobj_stylesheet( self._widgets_dict[label_class][0], 'QPushButton', widgetBackgroundColor=None, widgetTextColor=None, widgetBackgroundColorWhenChecked=buttonDisplayColor, widgetTextColorWhenChecked=txtColor) if buttonOptionsWidget: # self._layout.addWidget(button) self._inserterButtonGroup_layout.addWidget(button) self._layout.addWidget(buttonOptionsWidget) else: self._inserterButtonGroup_layout.addWidget(button)