class MetadadoSNIMar(QWidget): def __init__(self, parent, scope=None, xml_doc=None, md=None): super(MetadadoSNIMar, self).__init__(parent) if scope is None: self.scope = SCOPES.get_code_representation(md.hierarchy) else: self.scope = scope self.current_index = 0 self.widgetStalker = {} if platform.system() != "Linux": font = QFont() font.setFamily(u"Segoe UI Symbol") self.setFont(font) self.sidelist = QListWidget(self) self.sidelist.setMinimumWidth(150) self.sidelist.setMaximumWidth(150) self.sidelist.setWordWrap(True) self.sidelist.setTextElideMode(Qt.ElideNone) self.sidelist.setIconSize(QSize(25, 25)) self.sidelist.clicked.connect(self.list_clicked) index = 0 if self.scope == SCOPES.SERVICES: tabs = cons.TABLIST_SERVICES else: tabs = cons.TABLIST_CDG_SERIES for tab_element in tabs: bufWidget = QListWidgetItem( qgui.QIcon(':/resourcesFolder/icons/' + tab_element[1]), tab_element[0]) self.widgetStalker[tab_element[2]] = { "widget": bufWidget, "missingFields": set(), "incompleteEntries": set() } bufWidget.setSizeHint(QSize(150, 50)) if platform.system() != "Linux": font = QFont() font.setFamily(u"Segoe UI Symbol") bufWidget.setFont(font) self.sidelist.insertItem(index, bufWidget) index += 1 self.widgetstack = QStackedWidget(self) # Setup metadata stuff self.xml_doc = xml_doc self.is_new_file = True if xml_doc is None else False self.md = md self.codelist = self.parent().codelists self.helps = self.parent().helps self.orgs = self.parent().orgs f = open( os.path.join(pluginDirectory('EditorMetadadosMarswInforbiomares'), 'resourcesFolder/stylesheet.qtcss')) self.sytlesheet = f.read() for btn in self.findChildren(QPushButton): btn.setStyleSheet(self.sytlesheet) btn.setFocusPolicy(Qt.NoFocus) self.reference_systems_list = self.parent().reference_systems tab_list = [] # Setup snimarEditorController self.identification = snimarEditorController.IdentificationWidget( self, self.scope) tab_list.append(self.identification) if self.scope == SCOPES.SERVICES: self.operations = snimarEditorController.ServiceOperationsWidget( self) tab_list.append(self.operations) self.keywords = snimarEditorController.KeywordsWidget(self, self.scope) tab_list.append(self.keywords) self.geographicinfo = snimarEditorController.GeographicInfoWidget( self, self.scope) tab_list.append(self.geographicinfo) self.temporalinfo = snimarEditorController.TemporalInfoWidget( self, self.scope) tab_list.append(self.temporalinfo) self.quality = snimarEditorController.QualityWidget(self, self.scope) tab_list.append(self.quality) self.restrictions = snimarEditorController.RestrictionsWidget( self, self.scope) tab_list.append(self.restrictions) self.distribution = snimarEditorController.DistributionWidget( self, self.scope) tab_list.append(self.distribution) self.metadata = snimarEditorController.MetadataWidget(self) tab_list.append(self.metadata) self.setupUi() if not self.is_new_file: # Setup data self.identification.set_data(self.md) if self.scope == SCOPES.SERVICES: self.operations.set_data(md) self.temporalinfo.set_data(self.md) self.keywords.set_data(self.md) self.metadata.set_data(self.md) self.distribution.set_data(self.md) self.restrictions.set_data(self.md) self.quality.set_data(self.md) self.geographicinfo.set_data(self.md) def setupUi(self): self.widgetstack.addWidget(self.identification) if self.scope == SCOPES.SERVICES: self.widgetstack.addWidget(self.operations) self.widgetstack.addWidget(self.keywords) self.widgetstack.addWidget(self.geographicinfo) self.widgetstack.addWidget(self.temporalinfo) self.widgetstack.addWidget(self.quality) self.widgetstack.addWidget(self.restrictions) self.widgetstack.addWidget(self.distribution) self.widgetstack.addWidget(self.metadata) self.grid = QGridLayout(self) self.grid.addWidget(self.sidelist, 0, 0, 1, 1) self.grid.addWidget(self.widgetstack, 0, 1, 1, 1) self.setLayout(self.grid) self.widgetstack.setCurrentIndex(0) @qcore.pyqtSlot() def list_clicked(self): index = self.sidelist.currentRow() if index != self.current_index: self.widgetstack.setCurrentIndex(index) self.current_index = index def get_tab_data(self, md): if self.scope != SCOPES.SERVICES: md.identification = snimarProfileModel.MD_DataIdentification() else: md.serviceidentification = snimarProfileModel.SV_ServiceIdentification( ) self.identification.get_data(md) if self.scope == SCOPES.SERVICES: self.operations.get_data(md) self.keywords.get_data(md) self.geographicinfo.get_data(md) self.temporalinfo.get_data(md) self.quality.get_data(md) self.restrictions.get_data(md) self.distribution.get_data(md) self.metadata.get_data(md) # ------------------------------------------------------------------------ # Validation STUFF # ------------------------------------------------------------------------ def is_doc_Snimar_Valid(self): for x in list(self.widgetStalker.values()): if len(x["missingFields"]) > 0 or len(x["incompleteEntries"]) > 0: return False return True def register_mandatory_missingfield(self, widgetName, fieldName): self.widgetStalker[widgetName]["missingFields"].add( fieldName.replace(u'\u26a0', '').strip()) self.widgetStalker[widgetName]["widget"].setToolTip( self.genToolTip(widgetName)) self.widgetStalker[widgetName]["widget"].setForeground( QColor(cons.ERROR_COLOR)) self.widgetStalker[widgetName]["widget"].setText( self.widgetStalker[widgetName]["widget"].text().replace( u'\u26a0', '') + u'\u26a0') def unregister_mandatory_missingfield(self, widgetName, fieldName): self.widgetStalker[widgetName]["missingFields"].discard(fieldName) if len(self.widgetStalker[widgetName] ["incompleteEntries"]) != 0 or len( self.widgetStalker[widgetName]["missingFields"]) != 0: self.widgetStalker[widgetName]["widget"].setText( self.widgetStalker[widgetName]["widget"].text().replace( u'\u26a0', '') + u'\u26a0') else: self.widgetStalker[widgetName]["widget"].setForeground( QColor("black")) self.widgetStalker[widgetName]["widget"].setText( self.widgetStalker[widgetName]["widget"].text().replace( u'\u26a0', '')) self.widgetStalker[widgetName]["widget"].setToolTip( self.genToolTip(widgetName)) def register_incomplete_entries(self, widgetName, fieldName): self.widgetStalker[widgetName]["incompleteEntries"].add( fieldName.replace(u'\u26a0', '').strip()) self.widgetStalker[widgetName]["widget"].setToolTip( self.genToolTip(widgetName)) self.widgetStalker[widgetName]["widget"].setForeground( QColor(cons.ERROR_COLOR)) self.widgetStalker[widgetName]["widget"].setText( self.widgetStalker[widgetName]["widget"].text().replace( u'\u26a0', '') + u'\u26a0') def unregister_incomplete_entries(self, widgetName, fieldName): self.widgetStalker[widgetName]["incompleteEntries"].discard(fieldName) if len(self.widgetStalker[widgetName] ["incompleteEntries"]) != 0 or len( self.widgetStalker[widgetName]["missingFields"]) != 0: self.widgetStalker[widgetName]["widget"].setText( self.widgetStalker[widgetName]["widget"].text().replace( u'\u26a0', '') + u'\u26a0') else: self.widgetStalker[widgetName]["widget"].setForeground( QColor("black")) self.widgetStalker[widgetName]["widget"].setText( self.widgetStalker[widgetName]["widget"].text().replace( u'\u26a0', '')) self.widgetStalker[widgetName]["widget"].setToolTip( self.genToolTip(widgetName)) def genToolTip(self, widgetName): tooltip = "" if len(self.widgetStalker[widgetName]["missingFields"]) > 0: tooltip += u"Campos Obrigatórios\nem falta:\n-" + "\n-".join( self.widgetStalker[widgetName]["missingFields"]) if len(self.widgetStalker[widgetName]["missingFields"]) > 0 and len( self.widgetStalker[widgetName]["incompleteEntries"]) > 0: tooltip += u"\n---------------------\n" if len(self.widgetStalker[widgetName]["incompleteEntries"]) > 0: tooltip += u"Campos Incompletos\Incorrectos:\n-" + "\n-".join( self.widgetStalker[widgetName]["incompleteEntries"]) tooltip += u"\n---------------------\n" return tooltip + u"\nA Conformidade diz respeito\n" \ u"as obrigações de formato " \ u"\ne completude do documento.\n" \ u"A validade do conteúdo é da\n" \ u"inteira responsabilidade\n" \ u"do utilizador. "
class TagsDialog(QDialog): def __init__(self, dockwidget, parent, params): QDialog.__init__(self, parent) main_lay = QVBoxLayout(self) self.dockwidget = dockwidget self.params = params self.setWindowTitle('Tags editor') # Top frame self.fra_top = QFrame() fra_top_lay = QVBoxLayout(self.fra_top) self.lst_main = QListWidget(self) self.btn_add = QPushButton('Add tag') self.btn_add.clicked.connect(self.add_tag) self.btn_remove = QPushButton('Remove tag') self.btn_remove.clicked.connect(self.remove_tag) fra_top_lay.addWidget(self.lst_main) fra_top_lay.addWidget(self.btn_add) fra_top_lay.addWidget(self.btn_remove) # Bottom frame self.fra_bottom = QFrame() fra_bottom_lay = QHBoxLayout(self.fra_bottom) btb_main = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) btb_main.accepted.connect(self.ok) btb_main.rejected.connect(self.reject) fra_bottom_lay.addWidget(btb_main) # Main main_lay.addWidget(self.fra_top) main_lay.addWidget(self.fra_bottom) self.initialize() def initialize(self): for tag_name in self.params.tag_names: self.lst_main.insertItem(self.lst_main.count(), QListWidgetItem(tag_name, self.lst_main)) def ok(self): tag_names = [] for r in range(self.lst_main.count()): tag_names.append(self.lst_main.item(r).text()) self.params.tag_names = tag_names self.setVisible(False) def reject(self): self.setVisible(False) def add_tag(self): tag_name_dialog = TagNameDialog(self.dockwidget, self) tag_name_dialog.exec_() tag_name = tag_name_dialog.get_tag_name() if tag_name is not None: current_row = self.lst_main.currentRow() if current_row is None: current_row = self.lst_main.count() self.lst_main.insertItem(current_row, QListWidgetItem(tag_name, self.lst_main)) def remove_tag(self): sel_items = self.lst_main.selectedItems() for sel_item in sel_items: self.lst_main.takeItem(self.lst_main.row(sel_item))