def load_items(self): self.trw_quality_rules.setUpdatesEnabled( False) # Don't render until we're ready self.trw_quality_rules.clear() font = QFont() font.setBold(True) for group, items in self.items_dict.items(): children = [] group_item = QTreeWidgetItem([group]) group_item.setData(0, Qt.BackgroundRole, QBrush(QColor(219, 219, 219, 255))) group_item.setData(0, Qt.FontRole, font) icon = QIcon(":/Asistente-LADM_COL/resources/images/{}.png".format( items['icon'])) group_item.setData(0, Qt.DecorationRole, icon) for rule in items['rules']: rule_item = QTreeWidgetItem([rule['text']]) rule_item.setData(0, Qt.UserRole, rule['id']) children.append(rule_item) group_item.addChildren(children) self.trw_quality_rules.addTopLevelItem(group_item) # Make group items non selectable and expanded for i in range(self.trw_quality_rules.topLevelItemCount()): self.trw_quality_rules.topLevelItem(i).setFlags( Qt.ItemIsEnabled) # Not selectable self.trw_quality_rules.topLevelItem(i).setExpanded(True) self.trw_quality_rules.setUpdatesEnabled(True) # Now render!
def __update_available_rules(self): self.trw_qrs.setUpdatesEnabled(False) # Don't render until we're ready # Grab some context data top_level_items_expanded_info = dict() for i in range(self.trw_qrs.topLevelItemCount()): top_level_items_expanded_info[self.trw_qrs.topLevelItem(i).text(0)] = self.trw_qrs.topLevelItem(i).isExpanded() # Save selection self.__update_selected_items() # Iterate qr types adding children self.trw_qrs.blockSignals(True) # We don't want to get itemSelectionChanged here self.trw_qrs.clear() self.trw_qrs.blockSignals(False) bold_font = QFont() bold_font.setBold(True) sorted_types = sorted(self.__controller.get_qrs_tree_data().keys()) for type_enum in sorted_types: children = [] type_item = QTreeWidgetItem([self.__controller.get_tr_string(type_enum)]) # Filter by search text list_qrs = self.__filter_by_search_text(type_enum, self.txt_search.text()) for qr in list_qrs: qr_item = QTreeWidgetItem([qr.name()]) qr_item.setData(0, Qt.UserRole, qr.id()) qr_item.setData(0, Qt.ToolTipRole, "{}\n{}".format(qr.name(), qr.id())) children.append(qr_item) if children: icon_name = self.__icon_names[type_enum.value] icon = QIcon(":/Asistente-LADM-COL/resources/images/{}".format(icon_name)) type_item.setData(0, Qt.DecorationRole, icon) type_item.setData(0, Qt.FontRole, bold_font) type_item.addChildren(children) self.trw_qrs.addTopLevelItem(type_item) # Set selection iterator = QTreeWidgetItemIterator(self.trw_qrs, QTreeWidgetItemIterator.Selectable) self.trw_qrs.blockSignals(True) # We don't want to get itemSelectionChanged here while iterator.value(): item = iterator.value() if item.data(0, Qt.UserRole) in self.__selected_items_list: item.setSelected(True) iterator += 1 self.trw_qrs.blockSignals(False) # Make type items non selectable # Set expand taking previous states into account for i in range(self.trw_qrs.topLevelItemCount()): self.trw_qrs.topLevelItem(i).setFlags(Qt.ItemIsEnabled) # Not selectable self.trw_qrs.topLevelItem(i).setExpanded(top_level_items_expanded_info.get(self.trw_qrs.topLevelItem(i).text(0), True)) self.trw_qrs.setUpdatesEnabled(True) # Now render!
def show_task_steps(self): self.trw_task_steps.clear() steps = self._task.get_steps() self.logger.debug( __name__, "Showing task steps in Task Panel. {} task steps found: {}.". format(len(steps), ", ".join([s.get_name() for s in steps]))) for i, step in enumerate(steps): children = [] step_item = QTreeWidgetItem([ QCoreApplication.translate("TaskPanelWidget", "Step {}").format(i + 1) ]) step_item.setData(0, Qt.BackgroundRole, QBrush(GRAY_COLOR)) step_item.setToolTip(0, step.get_name()) step_item.setCheckState( 0, Qt.Checked if step.get_status() else Qt.Unchecked) action_item = QTreeWidgetItem([step.get_name()]) action_item.setData(0, Qt.UserRole, step.get_id()) action_item.setIcon( 0, QIcon(":/Asistente-LADM-COL/resources/images/process.svg")) action_item.setToolTip(0, step.get_description()) step_item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable) children.append(action_item) step_item.addChildren(children) self.trw_task_steps.addTopLevelItem(step_item) for i in range(self.trw_task_steps.topLevelItemCount()): self.trw_task_steps.topLevelItem( i).setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsSelectable) self.trw_task_steps.topLevelItem(i).setExpanded(True)
def buildParentItem(self, dcollection, title, rootresource): ''' Builds tree widget items from a dictionary. ''' rtItem = QTreeWidgetItem() rtItem.setText(0, title) rtItem.setIcon(0, QIcon(rootresource)) topLevelItems = [] for k, v in dcollection.items(): parentItem = QTreeWidgetItem() if isinstance(v, dict): parentItem.setText(0, k) for kc, vc in v.items(): child = QTreeWidgetItem() child.setText(0, self._combine(kc, vc)) parentItem.addChild(child) else: parentItem.setText(0, self._combine(k, v)) topLevelItems.append(parentItem) rtItem.addChildren(topLevelItems) rtItem.setExpanded(True) return rtItem
def searchResultClicked(self, item): self.dlg.layerTree.clear() self.layersList = [] self.selected = None data = item.data(1) if not data: return for text in data.get("text"): #TODO: Do something better with language lang = text.get("lang") if lang == "FI": self.dlg.abstractBox.setText(text.get("abstractText")) links = data.get("downloadLinks") if links: for link in links: LOG("Download links") LOG(link) protocol = link.get("protocol") url = link.get("url") layers = getLayersForDownloadLink(protocol, url) if layers.get("type") == "NA": if link.get("url"): layers["link"] = link.get("url") else: layers["link"] = data.get("catalog").get("url") self.layersList.append(layers) #Add handling for wms and wmts. Try to make code more reusable treeItems = [] for index, layers in enumerate(self.layersList): nodeTitle = links[index].get("title") if not nodeTitle: nodeTitle = layers.get("url") if not nodeTitle: nodeTitle = layers.get("link") if not nodeTitle: continue treeItem = QTreeWidgetItem() type = layers.get("type") if type == "NA": if not nodeTitle: nodeTitle = layers.get("link") treeItem.setText(0, "LINK: " + nodeTitle) treeItem.setData(0, 1, { "layerName": nodeTitle, "index": index }) elif type != "ERROR": treeItem.setText(0, type + ": " + nodeTitle) treeItem.addChildren(listChildNodes(layers, index)) treeItems.append(treeItem) self.dlg.layerTree.addTopLevelItems(treeItems)
def display(self): ''' Initialize top-level items ''' if len(self.items) == 0: return self.tree.clear() # If there is only one item then set it as the root item if len(self.items) == 1: rootItem = self.items[0] # Set root font rtFont = rootItem.font(0) rtFont.setBold(True) rootItem.setFont(0, rtFont) # Add the tree item to the tree widget self.tree.addTopLevelItem(rootItem) rootItem.setExpanded(True) else: rootItem = QTreeWidgetItem(self.tree) rootItem.setText(0, self.title) rootItem.setIcon(0, QIcon(self.rootResource)) # Set root font rtFont = rootItem.font(0) rtFont.setBold(True) rootItem.setFont(0, rtFont) rootItem.addChildren(self.items) rootItem.setExpanded(True) # Force the horizontal scrollbar to show self.tree.header().setSectionResizeMode(QHeaderView.ResizeToContents)
def __update_available_rules(self): self.trw_qrs.setUpdatesEnabled(False) # Don't render until we're ready # Grab some context data top_level_items_expanded_info = dict() for i in range(self.trw_qrs.topLevelItemCount()): top_level_items_expanded_info[self.trw_qrs.topLevelItem(i).text( QR_COLUMN)] = self.trw_qrs.topLevelItem(i).isExpanded() # Save selection before clearing tree to restate it later (if needed) self.__update_selected_item() # Iterate qr types adding children self.trw_qrs.blockSignals( True) # We don't want to get itemSelectionChanged here self.trw_qrs.clear() self.trw_qrs.blockSignals(False) bold_font = QFont() bold_font.setBold(True) sorted_types = sorted( self.__controller.get_general_results_tree_data().keys()) for type_enum in sorted_types: children = [] type_item = QTreeWidgetItem( [self.__controller.get_tr_string(type_enum)]) # Filter by search text list_qrs = self.__filter_by_search_text(type_enum, self.txt_search.text()) for qr in list_qrs: qr_item = QTreeWidgetItem([qr.name(), '']) qr_item.setData(QR_COLUMN, Qt.UserRole, qr.id()) qr_item.setData(QR_COLUMN, Qt.ToolTipRole, "{}\n{}".format(qr.name(), qr.id())) # Let's listen some QR's relevant signals to update our view when needed self.__partial_connections.append([ qr, qr.progress_changed.connect( partial(self.__set_qr_progress, qr.id())) ]) self.__partial_connections.append([ qr, qr.validation_finished.connect( partial(self.__set_qr_validation_result, qr)) ]) children.append(qr_item) if children: icon_name = self.__icon_names[type_enum.value] icon = QIcon(":/Asistente-LADM-COL/resources/images/{}".format( icon_name)) type_item.setData(0, Qt.DecorationRole, icon) type_item.setData(0, Qt.FontRole, bold_font) type_item.addChildren(children) self.trw_qrs.addTopLevelItem(type_item) # After we've set the children, we can set custom item widgets self.__set_children_custom_widget(type_enum, type_item, list_qrs) else: type_item = None # Set selection self.trw_qrs.blockSignals( True) # We don't want to get itemSelectionChanged here item = self.__get_item_by_qr_key(self.__selected_item) if item: item.setSelected(True) self.trw_qrs.blockSignals(False) # Make type items non selectable # Set expand taking previous states into account for i in range(self.trw_qrs.topLevelItemCount()): self.trw_qrs.topLevelItem(i).setFlags( Qt.ItemIsEnabled) # Not selectable self.trw_qrs.topLevelItem(i).setExpanded( top_level_items_expanded_info.get( self.trw_qrs.topLevelItem(i).text(QR_COLUMN), True)) self.trw_qrs.setUpdatesEnabled(True) # Now render!
def update_available_layers(self): self.trw_layers.setUpdatesEnabled( False) # Don't render until we're ready # Grab some context data show_domains = self.chk_show_domains.isChecked() show_structures = self.chk_show_structures.isChecked() show_associations = self.chk_show_associations.isChecked() top_level_items_expanded_info = [] for i in range(self.trw_layers.topLevelItemCount()): top_level_items_expanded_info.append( self.trw_layers.topLevelItem(i).isExpanded()) # Save selection self.update_selected_items() # Iterate models adding children self.trw_layers.blockSignals( True) # We don't want to get itemSelectionChanged here self.trw_layers.clear() self.trw_layers.blockSignals(False) sorted_models = sorted(self.models_tree.keys()) for model in sorted_models: children = [] model_item = QTreeWidgetItem([model]) # Filter by search text list_tables = self.filter_tables_by_search_text( self.models_tree[model].keys(), self.txt_search_text.text()) sorted_tables = sorted(list_tables) for table in sorted_tables: current_table_info = self.models_tree[model][table] if current_table_info[QueryNames.KIND_SETTINGS_MODEL_BAKER] == ILI2DBNames.TABLE_PROP_DOMAIN and not show_domains \ or current_table_info[QueryNames.KIND_SETTINGS_MODEL_BAKER] == ILI2DBNames.TABLE_PROP_STRUCTURE and not show_structures \ or current_table_info[QueryNames.KIND_SETTINGS_MODEL_BAKER] == ILI2DBNames.TABLE_PROP_ASSOCIATION and not show_associations: continue table_item = QTreeWidgetItem([table]) table_item.setData(0, Qt.UserRole, self.models_tree[model][table]) geometry_type = QgsWkbTypes().geometryType( QgsWkbTypes().parseType(current_table_info[ QueryNames.GEOMETRY_TYPE_MODEL_BAKER]) ) if current_table_info[ QueryNames.GEOMETRY_TYPE_MODEL_BAKER] else None icon_name = self.icon_names[ 3 if geometry_type is None else geometry_type] # Is the layer already loaded in canvas? if self.app.core.get_ladm_layer_from_qgis( self._db, current_table_info[QueryNames.TABLE_NAME_MODEL_BAKER], EnumLayerRegistryType.IN_LAYER_TREE) is not None: table_item.setText( 0, table + QCoreApplication.translate( "LoadLayersDialog", " [already loaded]")) table_item.setData(0, Qt.ForegroundRole, QBrush(Qt.lightGray)) table_item.setFlags(Qt.ItemIsEnabled) # Not selectable else: # Laye not in QGIS Layer Tree if not current_table_info[ QueryNames. KIND_SETTINGS_MODEL_BAKER]: # This is a class font = QFont() font.setBold(True) table_item.setData(0, Qt.FontRole, font) if current_table_info[ QueryNames. KIND_SETTINGS_MODEL_BAKER] == ILI2DBNames.TABLE_PROP_DOMAIN: icon_name = self.icon_names[4] elif current_table_info[ QueryNames. KIND_SETTINGS_MODEL_BAKER] == ILI2DBNames.TABLE_PROP_STRUCTURE: if geometry_type is None: icon_name = self.icon_names[5] elif current_table_info[ QueryNames. KIND_SETTINGS_MODEL_BAKER] == ILI2DBNames.TABLE_PROP_ASSOCIATION: icon_name = self.icon_names[6] icon = QIcon(":/Asistente-LADM-COL/resources/images/{}".format( icon_name)) table_item.setData(0, Qt.DecorationRole, icon) children.append(table_item) model_item.addChildren(children) self.trw_layers.addTopLevelItem(model_item) # Set selection iterator = QTreeWidgetItemIterator(self.trw_layers, QTreeWidgetItemIterator.Selectable) self.trw_layers.blockSignals( True) # We don't want to get itemSelectionChanged here while iterator.value(): item = iterator.value() if item.text(0) in self.selected_items_dict: item.setSelected(True) iterator += 1 self.trw_layers.blockSignals(False) # Make model items non selectable # Set expand taking previous states into account for i in range(self.trw_layers.topLevelItemCount()): self.trw_layers.topLevelItem(i).setFlags( Qt.ItemIsEnabled) # Not selectable self.trw_layers.topLevelItem(i).setExpanded( top_level_items_expanded_info[i] if top_level_items_expanded_info else True) self.trw_layers.setUpdatesEnabled(True) # Now render!
def tree_widget_item(self): item = QTreeWidgetItem([self.name]) item.addChildren([child.tree_widget_item() for child in self.children]) item.setData(0, Qt.UserRole, deepcopy(self)) return item