Esempio n. 1
0
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. "
Esempio n. 2
0
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))