Пример #1
0
    def refreshAnnotations(self):
        for annotation in self.getAnnotations():
            if annotation not in self.annotations:
                self.annotations.append(annotation)
                self.annotationsName.append('Annotation')
        i = 0
        to_del = []
        for annotation in self.annotations:
            if annotation not in self.getAnnotations():
                to_del.append(i)
            i += 1
        i = 0
        for index in to_del:
            self.annotations.pop(index)
            self.annotationsName.pop(index)
        self.annotationList.clearSelection()
        self.annotationList.clear()

        # argh
        for annotation in self.annotations:
            item = QListWidgetItem(self.annotationsName[i])
            if annotation.isVisible():
                item.setCheckState(Qt.Checked)
            else:
                item.setCheckState(Qt.Unchecked)
            item.setFlags(item.flags() | Qt.ItemIsEditable)
            self.annotationList.addItem(item)
            i += 1
Пример #2
0
    def update(self, subject):
        action, key = subject

        if action == "add":
            movie = self._moviemodel.data()[-1]
            item = QListWidgetItem(movie.to_string())
            item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
            self.addItem(item)
            self.item_to_movie[item] = movie
            self.movie_to_item[movie] = item

        if action == "remove":
            item = self.movie_to_item[key]
            self.takeItem(self.row(item))
            self.item_to_movie.pop(item)
            self.movie_to_item.pop(key)

        if action == "update":
            item = self.movie_to_item[key]
            item.setText(key.to_string())
            if key.has_been_saved():
                if key.has_changed():
                    key.set_saved(False)
            self.apply_item_style(key, item)
            if item in self.selectedItems():
                self.emit(QtCore.SIGNAL(\
                "currentItemChanged(QListWidgetItem *,QListWidgetItem *)"),
                          item, item)

        if action == "clear":
            item = self.movie_to_item[key]
            item.setText(key.get_title())
            key.set_modified(False)
            key.set_saved(False)
            self.apply_item_style(key, item)
 def load_data_list(self):
     folder_path = Path(CONF.data_root) / \
                 CONF.current_survey / "Seismics"
     for name in get_data_files(folder_path):
         new_item = QListWidgetItem(name, self.data_list_Widget)
         new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
         new_item.setCheckState(Qt.Unchecked)
 def populate_well_listWidget(self):
     survey_file = CONF.survey_dir / '.survey'
     if survey_file.exists():
         for name in get_data_files(CONF.well_dir):
             new_item = QListWidgetItem(name, self.wells_listWidget)
             new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
             new_item.setCheckState(Qt.Unchecked)
Пример #5
0
 def __init__(self, rawImageLayer, objectImageLayer, featureTableNames, imagePerObject=True, \
              imagePerTime = True, parent=None):
     QDialog.__init__(self, parent)
     self.setWindowTitle("Export to Knime")
     ui_class, widget_class = uic.loadUiType(os.path.split(__file__)[0] + "/exportToKnimeDialog.ui")
     self.ui = ui_class()
     self.ui.setupUi(self)
     itemRaw = QListWidgetItem(rawImageLayer.name)
     self.ui.rawList.addItem(itemRaw)
     itemObjects = QListWidgetItem(objectImageLayer.name)
     self.ui.objectList.addItem(itemObjects)
     self.imagePerObject = imagePerObject
     self.imagePerTime = imagePerTime
     #FIXME: assume for now tht the feature table is a dict
     try: 
         for plugin, feature_dict in featureTableNames.iteritems():
             print plugin
             for feature_name in feature_dict.keys():
                 print "adding feature:", feature_name
                 item = QListWidgetItem(feature_name)
                 item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
                 item.setCheckState(Qt.Unchecked)
                 self.ui.featureList.addItem(item)
                 
     except:
         print "hahaha, doesn't work!"
Пример #6
0
    def update(self, subject):
        action, key = subject

        if action == "add":
            movie = self._moviemodel.data()[-1]
            item = QListWidgetItem(movie.to_string())
            item.setFlags(item.flags() | QtCore.Qt.ItemIsEditable)
            self.addItem(item)
            self.item_to_movie[item] = movie
            self.movie_to_item[movie] = item

        if action == "remove":
            item = self.movie_to_item[key]
            self.takeItem(self.row(item))
            self.item_to_movie.pop(item)
            self.movie_to_item.pop(key)

        if action == "update":
            item = self.movie_to_item[key]
            item.setText(key.to_string())
            if key.has_been_saved():
                if key.has_changed():
                    key.set_saved(False)
            self.apply_item_style(key, item)
            if item in self.selectedItems():
                self.emit(QtCore.SIGNAL("currentItemChanged(QListWidgetItem *,QListWidgetItem *)"), item, item)

        if action == "clear":
            item = self.movie_to_item[key]
            item.setText(key.get_title())
            key.set_modified(False)
            key.set_saved(False)
            self.apply_item_style(key, item)
Пример #7
0
    def __init__(self, rawImageLayer, objectImageLayer, featureTableNames, imagePerObject=True, \
                 imagePerTime = True, parent=None):
        QDialog.__init__(self, parent)
        self.setWindowTitle("Export to Knime")
        ui_class, widget_class = uic.loadUiType(
            os.path.split(__file__)[0] + "/exportToKnimeDialog.ui")
        self.ui = ui_class()
        self.ui.setupUi(self)
        itemRaw = QListWidgetItem(rawImageLayer.name)
        self.ui.rawList.addItem(itemRaw)
        itemObjects = QListWidgetItem(objectImageLayer.name)
        self.ui.objectList.addItem(itemObjects)
        self.imagePerObject = imagePerObject
        self.imagePerTime = imagePerTime
        #FIXME: assume for now tht the feature table is a dict
        try:
            for plugin, feature_dict in featureTableNames.iteritems():
                print plugin
                for feature_name in feature_dict.keys():
                    print "adding feature:", feature_name
                    item = QListWidgetItem(feature_name)
                    item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
                    item.setCheckState(Qt.Unchecked)
                    self.ui.featureList.addItem(item)

        except:
            print "hahaha, doesn't work!"
Пример #8
0
    def set_widgets(self):
        """Set widgets on the Field tab."""
        self.clear_further_steps()
        purpose = self.parent.step_kw_purpose.selected_purpose()
        subcategory = self.parent.step_kw_subcategory.selected_subcategory()
        unit = self.parent.step_kw_unit.selected_unit()
        if purpose == layer_purpose_aggregation:
            question_text = field_question_aggregation
        elif self.parent.step_kw_layermode.\
                selected_layermode() == layer_mode_continuous and unit:
            subcategory_unit_relation = get_question_text(
                '%s_%s_question' % (subcategory['key'], unit['key']))
            if 'MISSING' in subcategory_unit_relation:
                subcategory_unit_relation = self.tr(
                    '{subcategory} in {unit} unit').format(
                    subcategory=subcategory['name'].lower(),
                    unit=unit['plural_name'])
            question_text = field_question_subcategory_unit % (
                purpose['name'],
                subcategory['name'],
                unit['name'],
                subcategory_unit_relation)
        else:
            question_text = field_question_subcategory_classified % (
                subcategory['name'])
        self.lblSelectField.setText(question_text)
        self.lstFields.clear()
        default_item = None
        for field in self.parent.layer.dataProvider().fields():
            field_name = field.name()
            item = QListWidgetItem(field_name, self.lstFields)
            item.setData(QtCore.Qt.UserRole, field_name)
            # Select the item if it match the unit's default_attribute
            if unit and 'default_attribute' in unit \
                    and field_name == unit['default_attribute']:
                default_item = item
            # For continuous data, gray out id, gid, fid and text fields
            if self.parent.step_kw_layermode.\
                    selected_layermode() == layer_mode_continuous and unit:
                field_type = field.type()
                if field_type > 9 or re.match(
                        '.{0,2}id$', field_name, re.I):
                    item.setFlags(item.flags() & ~QtCore.Qt.ItemIsEnabled)
        if default_item:
            self.lstFields.setCurrentItem(default_item)
        self.lblDescribeField.clear()

        # Set values based on existing keywords (if already assigned)
        field_keyword = self.parent.field_keyword_for_the_layer()
        inasafe_field = self.parent.get_existing_keyword('inasafe_fields')
        if inasafe_field:
            field = inasafe_field.get(field_keyword)
            if field:
                fields = []
                for index in xrange(self.lstFields.count()):
                    fields.append(str(self.lstFields.item(index).text()))
                if field in fields:
                    self.lstFields.setCurrentRow(fields.index(field))
            self.auto_select_one_item(self.lstFields)
Пример #9
0
 def load_data_list(self):
     for name in get_data_files(
             Path(CONF.data_root, CONF.current_survey, "Seismics")):
         # only initialize this way can it be set checkable
         new_item = QListWidgetItem(name,
                                    self.control_widget.data_listWidget)
         new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
         new_item.setCheckState(Qt.Unchecked)
Пример #10
0
 def provide(self, search):
     if search.startswith('define ') and search != 'define ':
         item = QListWidgetItem(
             subprocess.check_output('dict {}; exit 0'.format(search[7:]),
                                     stderr=subprocess.STDOUT, shell=True))
         item.setFlags(item.flags() & ~Qt.ItemIsSelectable)
         yield item
         yield True
     yield False
Пример #11
0
 def update_well_listWidget(self):
     survey_file = CONF.survey_dir / '.survey'
     if survey_file.exists():
         dnames = get_data_files(CONF.well_dir)
         # self.well_listWidget.addItems(dnames)
         for name in dnames:
             new_item = QListWidgetItem(name, self.well_listWidget)
             new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
             new_item.setCheckState(Qt.Unchecked)
Пример #12
0
 def load_instrument(self, instrument):
     self.clear_instrument()
     
     self.instrument = instrument
     
     # base info
     self.instrument_name.setText(self.instrument.name)
     self.instrument_short_name.setText(self.instrument.short_name)
     self.byte_order.setCurrentIndex(self.byte_order.findText(self.instrument.byte_order))
     
     # connection
     self.conn_type.setCurrentIndex(self.conn_type.findText(self.instrument.connection.type))
     self.load_connection()
     
     # packet format
     for i, field in enumerate(self.instrument.packet_format.rx_format):
         combo_box = getattr(self, 'pf_rx_format_{0}'.format(i))
         combo_box.setCurrentIndex(combo_box.findText(field))
     
     for i, field in enumerate(self.instrument.packet_format.tx_format):
         combo_box = getattr(self, 'pf_tx_format_{0}'.format(i))
         combo_box.setCurrentIndex(combo_box.findText(field))
     
     for start_byte in self.instrument.packet_format.start_bytes:
         item = QListWidgetItem(hex(start_byte))
         item.setFlags(item.flags() | Qt.ItemIsEditable)
         self.pf_start_bytes.addItem(item)
     
     for end_byte in self.instrument.packet_format.end_bytes:
         item = QListWidgetItem(hex(end_byte))
         item.setFlags(item.flags() | Qt.ItemIsEditable)
         self.pf_end_bytes.addItem(item)
     
     # rx packets
     for num in self.instrument.rx_packets:
         self.rx_packets_list.addItem(str(num))
     if self.rx_packets_list.count():
         self.rx_packets_list.setCurrentItem(self.rx_packets_list.item(0))
     
     # tx packets
     for num in self.instrument.tx_packets:
         self.tx_packets_list.addItem(str(num))
     if self.tx_packets_list.count():
         self.tx_packets_list.setCurrentItem(self.tx_packets_list.item(0))
Пример #13
0
    def getNewCompo(self, w, cView):
        """Function that finds new composer to be added to the list."""

        nameCompo = cView.composerWindow().windowTitle()
        if not w.findItems(nameCompo, Qt.MatchExactly):
            item = QListWidgetItem()
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
            item.setText(nameCompo)
            w.addItem(item)
 def populate_log_listWidget(self):
     self.logs_listWidget.clear()
     well = ppp.Well(
         str(CONF.well_dir /
             ".{}".format(self.well_comboBox.currentText())))
     # self.logs_listWidget.addItems(well.logs)
     for name in well.logs:
         new_item = QListWidgetItem(name, self.logs_listWidget)
         new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
         new_item.setCheckState(Qt.Unchecked)
Пример #15
0
    def handleItemChecked(self):
        well_names = []
        for idx in range(self.well_listWidget.count()):
            item = self.well_listWidget.item(idx)
            if item.checkState() == Qt.Checked:
                well_names.append(item.text())
        # first well
        if well_names:
            vlog_list = []
            obp_log_list = []
            nct_list = []
            n_list = []
            first_well = ppp.Well(str(CONF.well_dir / ".{}".format(well_names[0])))
            for log in first_well.logs:
                if "Velocity" in log:
                    vlog_list.append(log)
                if "Overburden" in log:
                    obp_log_list.append(log)
            # for key in first_well.params.keys():
            #     if "nct" in key:
            #         nct_list.append(key)
            #     if "eaton" in key:
            #         n_list.append(key)
            pres_list = ["DST", "MDT", "EMW", "loading", "unloading", "MP"]
            for w_name in well_names:
                well = ppp.Well(str(CONF.well_dir / ".{}".format(w_name)))
                for log in vlog_list:
                    if log not in well.logs:
                        vlog_list.remove(log)
                for log in obp_log_list:
                    if log not in well.logs:
                        obp_log_list.remove(log)
                key_to_remove = []
                for key in pres_list:
                    if key not in well.params.keys():
                        key_to_remove.append(key)
                for key in key_to_remove:
                    pres_list.remove(key)

            self.velocity_comboBox.clear()
            self.velocity_comboBox.addItems(vlog_list)
            self.obp_comboBox.clear()
            self.obp_comboBox.addItems(obp_log_list)
            # self.nct_comboBox.clear()
            # self.nct_comboBox.addItems(nct_list)
            # self.n_comboBox.clear()
            # self.n_comboBox.addItems(n_list)

            self.pres_listWidget.clear()
            for name in pres_list:
                new_item = QListWidgetItem(name, self.pres_listWidget)
                new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
                new_item.setCheckState(Qt.Unchecked)
        else:
            self.pres_listWidget.clear()
Пример #16
0
    def initExtList(self):
        extset=set(self.parent().settings.extensions)
        #for easier performance in checking
        for ext in self.parent().settings.extensions:
            item = QListWidgetItem(ext, self.mdExts)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Checked)

        for ext in self.parent().settings.faulty_exts:
            item = QListWidgetItem(ext, self.mdExts)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setBackground(QBrush(QColor('red')))
            item.setForeground(QBrush(QColor('black')))
            item.setCheckState(Qt.Checked)

        for ext in allMDExtensions():
            if ext in extset: continue
            item = QListWidgetItem(ext, self.mdExts)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
Пример #17
0
 def on_pf_add_start_byte_clicked(self):
     (text, ok) = QInputDialog.getText(\
         self,
         self.trUtf8("Start byte"),
         self.trUtf8("Insert start byte in hex form:"),
         QLineEdit.Normal,
         self.trUtf8("0x00"))
     if ok and text: # TODO: check hex form with regexp
         item = QListWidgetItem(str(text))
         item.setFlags(item.flags() | Qt.ItemIsEditable)
         self.pf_start_bytes.addItem(item)
 def refresh_list(self):
     self._input.clear()
     if not self._parameter.ordering == InputListParameter.NotOrdered:
         self._value_cache.sort()
     if self._parameter.ordering == InputListParameter.DescendingOrder:
         self._value_cache.reverse()
     for opt in self._value_cache:
         item = QListWidgetItem()
         item.setText(str(opt))
         item.setFlags(item.flags() | Qt.ItemIsEditable)
         self._input.addItem(item)
 def _load_labels(self):
     self.LabelsListWidget.clear()
     if self.selected_provider:
         labels = self.selected_provider.get_labels()
         for label in labels:
             icon = utils.colored_icon(label['color'])
             item = QListWidgetItem(icon, label['name'], self.LabelsListWidget)
             item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
             item.setCheckState(Qt.Unchecked)
             self.LabelsListWidget.addItem(item)
         self.LabelsListWidget.sortItems()
Пример #20
0
    def initExtList(self):
        extset = set(self.parent().settings.extensions)
        #for easier performance in checking
        for ext in self.parent().settings.extensions:
            item = QListWidgetItem(ext, self.mdExts)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Checked)

        for ext in self.parent().settings.faulty_exts:
            item = QListWidgetItem(ext, self.mdExts)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setBackground(QBrush(QColor('red')))
            item.setForeground(QBrush(QColor('black')))
            item.setCheckState(Qt.Checked)

        for ext in allMDExtensions():
            if ext in extset: continue
            item = QListWidgetItem(ext, self.mdExts)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
Пример #21
0
 def refresh_list(self):
     self._input.clear()
     if not self._parameter.ordering == InputListParameter.NotOrdered:
         self._value_cache.sort()
     if self._parameter.ordering == InputListParameter.DescendingOrder:
         self._value_cache.reverse()
     for opt in self._value_cache:
         item = QListWidgetItem()
         item.setText(str(opt))
         item.setFlags(item.flags() | Qt.ItemIsEditable)
         self._input.addItem(item)
Пример #22
0
 def update_horizon_listWidget(self):
     self.horizon_listWidget.clear()
     well_name = self.well_comboBox.currentText()
     well = ppp.Well(str(CONF.well_dir / ".{}".format(well_name)))
     try:
         horizons = well.params['horizon'].keys()
         for name in horizons:
             new_item = QListWidgetItem(name, self.horizon_listWidget)
             new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
             new_item.setCheckState(Qt.Unchecked)
     except KeyError as e:
         print(e.message)
Пример #23
0
    def insertCheckableItem(self, index, label, state, isBonus=False):
        """
		Fügt einen Eintrag an der angegebenen Indexposition ein.
		"""

        item = QListWidgetItem()
        item.setText(label)
        item.setCheckState(state)
        if isBonus:
            item.setData(Qt.ForegroundRole, QColor(Config.COLOR_BONUS))
            item.setFlags(item.flags() & Qt.ItemIsUserCheckable)
        self.insertItem(index, item)
Пример #24
0
    def set_widgets(self):
        """Set widgets on the Field tab."""
        self.clear_further_steps()
        purpose = self.parent.step_kw_purpose.selected_purpose()
        subcategory = self.parent.step_kw_subcategory.selected_subcategory()
        unit = self.parent.step_kw_unit.selected_unit()
        if purpose == layer_purpose_aggregation:
            question_text = field_question_aggregation
        elif self.parent.step_kw_layermode.\
                selected_layermode() == layer_mode_continuous and unit:
            # unique values, continuous or categorical data
            subcategory_unit_relation = get_question_text(
                '%s_%s_question' % (subcategory['key'], unit['key']))
            question_text = field_question_subcategory_unit % (
                purpose['name'],
                subcategory['name'],
                unit['name'],
                subcategory_unit_relation)
        else:
            question_text = field_question_subcategory_classified % (
                subcategory['name'])
        self.lblSelectField.setText(question_text)
        self.lstFields.clear()
        default_item = None
        for field in self.parent.layer.dataProvider().fields():
            field_name = field.name()
            item = QListWidgetItem(field_name, self.lstFields)
            item.setData(QtCore.Qt.UserRole, field_name)
            # Select the item if it match the unit's default_attribute
            if unit and 'default_attribute' in unit \
                    and field_name == unit['default_attribute']:
                default_item = item
            # For continuous data, gray out id, gid, fid and text fields
            if self.parent.step_kw_layermode.\
                    selected_layermode() == layer_mode_continuous and unit:
                field_type = field.type()
                if field_type > 9 or re.match(
                        '.{0,2}id$', field_name, re.I):
                    item.setFlags(item.flags() & ~QtCore.Qt.ItemIsEnabled)
        if default_item:
            self.lstFields.setCurrentItem(default_item)
        self.lblDescribeField.clear()

        # Set values based on existing keywords (if already assigned)
        field_keyword = self.parent.field_keyword_for_the_layer()
        field = self.parent.get_existing_keyword(field_keyword)
        if field:
            fields = []
            for index in xrange(self.lstFields.count()):
                fields.append(str(self.lstFields.item(index).text()))
            if field in fields:
                self.lstFields.setCurrentRow(fields.index(field))
        self.auto_select_one_item(self.lstFields)
Пример #25
0
 def showAttr(self):
     self.dlg.attributeList.clear()
     current = self.dlg.fileListWidget.currentItem()
     attributes = current.attributes
     for attr in attributes:
         item = QListWidgetItem(attr[0], self.dlg.attributeList)
         item.setFlags(item.flags() & ~Qt.ItemIsSelectable)
         if attr[1] == 0:
             item.setCheckState(Qt.Unchecked)
         else:
             item.setCheckState(Qt.Checked)
         self.dlg.attributeList.addItem(item)
Пример #26
0
    def __init__(self, parameter, parent=None):
        """Constructor

        .. versionadded:: 2.2

        :param parameter: A ListParameter object.
        :type parameter: ListParameter

        """
        super(ListParameterWidget, self).__init__(parameter, parent)

        self._input = QListWidget()

        self._input.setSelectionMode(QAbstractItemView.MultiSelection)

        if self._parameter.maximum_item_count != \
                self._parameter.minimum_item_count:
            tool_tip = 'Select between %d and %d items' % (
                self._parameter.minimum_item_count,
                self._parameter.maximum_item_count)
        else:
            tool_tip = 'Select exactly %d items' % (
                self._parameter.maximum_item_count)

        self._input.setToolTip(tool_tip)

        for opt in self._parameter.options_list:
            item = QListWidgetItem()
            item.setFlags(item.flags() | Qt.ItemIsEditable)
            item.setText(str(opt))
            self._input.addItem(item)
            if opt in self._parameter.value:
                item.setSelected(True)

        self.inner_input_layout.addWidget(self._input)

        # override self._input_layout arrangement to make the label at the top
        # reset the layout
        self.input_layout.setParent(None)
        self.help_layout.setParent(None)

        self.label.setParent(None)
        self.inner_input_layout.setParent(None)

        self.input_layout = QVBoxLayout()
        self.input_layout.setSpacing(0)

        # put element into layout
        self.input_layout.addWidget(self.label)
        self.input_layout.addLayout(self.inner_input_layout)

        self.main_layout.addLayout(self.input_layout)
        self.main_layout.addLayout(self.help_layout)
Пример #27
0
    def __init__(self, parameter, parent=None):
        """Constructor

        .. versionadded:: 2.2

        :param parameter: A ListParameter object.
        :type parameter: ListParameter

        """
        super(ListParameterWidget, self).__init__(parameter, parent)

        self._input = QListWidget()

        self._input.setSelectionMode(QAbstractItemView.MultiSelection)

        if self._parameter.maximum_item_count != \
                self._parameter.minimum_item_count:
            tool_tip = 'Select between %d and %d items' % (
                self._parameter.minimum_item_count,
                self._parameter.maximum_item_count)
        else:
            tool_tip = 'Select exactly %d items' % (
                       self._parameter.maximum_item_count)

        self._input.setToolTip(tool_tip)

        for opt in self._parameter.options_list:
            item = QListWidgetItem()
            item.setFlags(item.flags() | Qt.ItemIsEditable)
            item.setText(str(opt))
            self._input.addItem(item)
            if opt in self._parameter.value:
                item.setSelected(True)

        self._inner_input_layout.addWidget(self._input)

        # override self._input_layout arrangement to make the label at the top
        # reset the layout
        self._input_layout.setParent(None)
        self._help_layout.setParent(None)

        self._label.setParent(None)
        self._inner_input_layout.setParent(None)

        self._input_layout = QVBoxLayout()
        self._input_layout.setSpacing(0)

        # put element into layout
        self._input_layout.addWidget(self._label)
        self._input_layout.addLayout(self._inner_input_layout)

        self._main_layout.addLayout(self._input_layout)
        self._main_layout.addLayout(self._help_layout)
Пример #28
0
 def create_plugin_view(self, showAll = True):
     for p_name, p_info in self.p_info.iteritems():
         item = QListWidgetItem(p_info["name"], self.ui.pluginView)
         item.setToolTip(p_name)
         item.setCheckState(Qt.Checked if p_info["activated"] else Qt.Unchecked)
         if p_info["forced"]:
             item.setForeground(Qt.gray)
             flags = item.flags()
             flags &= ~Qt.ItemIsUserCheckable
             item.setFlags(flags)
         
         item.setHidden(not showAll and p_info["forced"])
         self.ui.pluginView.addItem(item)
Пример #29
0
 def updateOrder(self):
     self.listbox.clear()
     self.macros = self.loadMacros()
     cparser = PuddleConfig()
     to_check = cparser.get('actions', 'checked', [])
     for i, m in sorted(self.macros.items()):
         func_name = m.name
         item = QListWidgetItem(func_name)
         item.setFlags(item.flags() | Qt.ItemIsEditable)
         if func_name in to_check:
             item.setCheckState(Qt.Checked)
         else:
             item.setCheckState(Qt.Unchecked)
         self.listbox.addItem(item)
Пример #30
0
        def addListItem(self, component, title, valid=True, checked=True):
            item = QListWidgetItem(title)
            item.component = component
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            if valid:
                pass
            else:
                item.setForeground(QColor('gray'))

            if checked:
                item.setCheckState(Qt.Checked)
            else:
                item.setCheckState(Qt.Unchecked)

            self.components_list.addItem(item)
    def loadComposers(self):
        self.lstComposers.clear()

        self.composers = {
            c.composerWindow().windowTitle(): c
            for c in self.iface.activeComposers()
        }
        if len(self.composers) > 0:
            self.lstComposers.addItems(self.composers.keys())
            self.lstComposers.sortItems()
        else:
            item = QListWidgetItem(self.tr("No composers found"))
            item.setFlags(item.flags() ^ Qt.ItemIsEnabled)
            self.lstComposers.addItem(item)
        self.toggleButtons()
Пример #32
0
    def add_item(self, text, edit_item=False, select_item=False):
        item = QListWidgetItem(text)
        item.setFlags(item.flags() | Qt.ItemIsEditable)

        self.list_items.addItem(item)

        if edit_item:
            self.list_items.setCurrentItem(item)
            self.list_items.setFocus()
            self.list_items.editItem(item)
        elif select_item:
            self.list_items.setCurrentItem(item)
            self.list_items.setFocus()

        self.update_ui_state()
Пример #33
0
    def add_new_item(self, name, project, is_new=False, is_valid=True):
        item = QListWidgetItem(self.moduleList, QListWidgetItem.UserType)
        item.setData(QListWidgetItem.UserType, project)
        item.setSizeHint(QSize(150, 150))
        if not is_valid:
            item.setFlags(item.flags() & ~Qt.ItemIsEnabled)

        projectwidget = ProjectWidget(self.moduleList, project, is_new=is_new)
        projectwidget.install_project.connect(self.projectInstall.emit)
        projectwidget.update_project.connect(self.projectUpdate.emit)
        projectwidget.setEnabled(is_valid)

        self.moduleList.addItem(item)
        self.moduleList.setItemWidget(item, projectwidget)

        self.projectitems[name] = item
Пример #34
0
    def update_pres_listWidget(self):
        pres_list = ["DST", "MDT", "EMW", "loading", "unloading", "MP"]
        well_name = self.well_comboBox.currentText()
        well = ppp.Well(str(CONF.well_dir / ".{}".format(well_name)))
        key_to_remove = []
        for key in pres_list:
            if key not in well.params.keys():
                key_to_remove.append(key)
        for key in key_to_remove:
            pres_list.remove(key)

        self.pres_listWidget.clear()
        for name in pres_list:
            new_item = QListWidgetItem(name, self.pres_listWidget)
            new_item.setFlags(new_item.flags() | Qt.ItemIsUserCheckable)
            new_item.setCheckState(Qt.Unchecked)
Пример #35
0
    def add_new_item(self, name, project, is_new=False, is_valid=True):
        item = QListWidgetItem(self.moduleList, QListWidgetItem.UserType)
        item.setData(QListWidgetItem.UserType, project)
        item.setSizeHint(QSize(150, 150))
        if not is_valid:
            item.setFlags(item.flags() & ~Qt.ItemIsEnabled)

        projectwidget = ProjectWidget(self.moduleList, project, is_new=is_new)
        projectwidget.install_project.connect(self.projectInstall.emit)
        projectwidget.update_project.connect(self.projectUpdate.emit)
        projectwidget.setEnabled(is_valid)

        self.moduleList.addItem(item)
        self.moduleList.setItemWidget(item, projectwidget)

        self.projectitems[name] = item
Пример #36
0
    def populateElements(self, selectedElement=None, edit=False):
        selected = None
        self.ui.elementListWidget.clear()

        slist = [(self.elements[key].name, key)
                 for key in self.elements.keys()]
        slist.sort()

        for name, el in slist:
            item = QListWidgetItem(QString("%s" % name))
            item.setData(Qt.UserRole, QVariant(self.elements[el].id))
            item.setFlags(item.flags() | Qt.ItemIsEditable)
            dirty = False
            if hasattr(self.elements[el], "isDirty") \
                    and self.elements[el].isDirty():
                dirty = True
            if self.elements[el].instance is not None:
                if hasattr(self.elements[el].instance, "isDirty") \
                        and self.elements[el].instance.isDirty():
                    dirty = True
            if dirty:
                item.setForeground(Qt.red)
            else:
                item.setForeground(Qt.black)

            self.ui.elementListWidget.addItem(item)
            if selectedElement is not None \
                    and selectedElement == self.elements[el].id:
                selected = item

            if self.elements[el].instance is not None \
                    and self.elements[el].instance.dialog is not None:
                try:
                    if dirty:
                        self.elements[el].instance.dialog.\
                            setWindowTitle("%s [%s]*" % (name, self.clName))
                    else:
                        self.elements[el].instance.dialog.\
                            setWindowTitle("%s [%s]" % (name, self.clName))
                except:
                    self.elements[el].instance.dialog = None

        if selected is not None:
            selected.setSelected(True)
            self.ui.elementListWidget.setCurrentItem(selected)
            if edit:
                self.ui.elementListWidget.editItem(selected)
Пример #37
0
    def modelChanged(self):
        self._list.clear()

        items = self._model.getList()

        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)

            if self._model.isValueSelected(item):
                list_item.setCheckState(Qt.Checked)
            else:
                list_item.setCheckState(Qt.Unchecked)

            self._list.addItem(list_item)

        self.filterList(self._search_box.filter())
Пример #38
0
    def modelChanged(self):
        self.list.clear()

        items = self.model.getList()

        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)

            if self.model.isValueSelected(item):
                list_item.setCheckState(Qt.Checked)
            else:
                list_item.setCheckState(Qt.Unchecked)

            self.list.addItem(list_item)

        self.filterList(self.search_box.filter())
Пример #39
0
    def __init__(self, fieldNames):
        QDialog.__init__(self)

        self.ui = Ui_FieldChooser()
        self.ui.setupUi(self)

        self.items = []
        self.ui.fieldList.clear()
        for fieldName in fieldNames:
            item = QListWidgetItem()
            item.setText(fieldName)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
            self.ui.fieldList.addItem(item)
            self.items.append(item)

        QObject.connect(self.ui.unselectAll, SIGNAL("clicked()"),
                        self.unselectAll)
        QObject.connect(self.ui.selectAll, SIGNAL("clicked()"), self.selectAll)
Пример #40
0
    def __init__(self, fieldNames):
        QDialog.__init__(self)

        self.ui = Ui_FieldChooser()
        self.ui.setupUi(self)

        self.items = []
        self.ui.fieldList.clear()
        for fieldName in fieldNames:
            item = QListWidgetItem()
            item.setText(fieldName)
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
            self.ui.fieldList.addItem(item)
            self.items.append(item)

        QObject.connect(self.ui.unselectAll,
                SIGNAL("clicked()"), self.unselectAll)
        QObject.connect(self.ui.selectAll,
                SIGNAL("clicked()"), self.selectAll)
 def __add_gstke(self, filter):
     QApplication.setOverrideCursor(Qt.WaitCursor)
     try:
         self.ui.LST_GSTKE.clear()
         #show them sorted
         for gst, props in sorted(self.gstke.iteritems()):
             item = None
             if gst == 'EXCEPTION':
                 item = QListWidgetItem(props)
             else:
                 if filter in gst:
                     item = QListWidgetItem(gst)
                     item.setData(Qt.UserRole, props)
                     if props != 'FEHLER':
                         item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
                         #important! won't work otherwise
                         item.setCheckState(Qt.Unchecked)
             if not item is None:
                 self.ui.LST_GSTKE.addItem(item)
     finally:
         QApplication.restoreOverrideCursor()
    def showAttributes(self):
        """ List unique values of the selected field from source layer and show them in widget"""
        if not self.checkExistingVector():
            return
        listAttr = []
        self.dlg.valuesList.clear()
        lyr = myLayers[self.dlg.srcLayer.currentIndex()]

        for feature in lyr.getFeatures():
            # attrs = feature.attributes()
            attr = feature.attributes()[self.dlg.fltField.currentIndex()]
            if attr not in listAttr:
                listAttr.append(attr)
        listAttr.sort()

        for value in listAttr:
            value = str(value)
            item = QListWidgetItem()
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
            item.setText(value)
            self.dlg.valuesList.addItem(item)
 def __add_gstke(self, filter):
     QApplication.setOverrideCursor(Qt.WaitCursor)
     try:
         self.ui.LST_GSTKE.clear()
         #show them sorted
         for gst, props in sorted(self.gstke.iteritems()):
             item = None
             if gst == 'EXCEPTION':
                 item = QListWidgetItem(props)
             else:
                 if filter in gst:
                     item = QListWidgetItem(gst)
                     item.setData(Qt.UserRole, props)
                     if props != 'FEHLER':
                         item.setFlags(item.flags()
                                       | Qt.ItemIsUserCheckable)
                         #important! won't work otherwise
                         item.setCheckState(Qt.Unchecked)
             if not item is None:
                 self.ui.LST_GSTKE.addItem(item)
     finally:
         QApplication.restoreOverrideCursor()
Пример #44
0
    def showAttributes(self):
        """ List unique values of the selected field from source layer and show them in widget"""
        if not self.checkExistingVector():
            return
        listAttr = []
        self.dlg.valuesList.clear()
        lyr = myLayers[self.dlg.srcLayer.currentIndex()]
        
        for feature in lyr.getFeatures():
            # attrs = feature.attributes()
            attr = feature.attributes()[self.dlg.fltField.currentIndex()]
            if attr not in listAttr:
                listAttr.append(attr)
        listAttr.sort()

        for value in listAttr:
            value = str(value)
            item = QListWidgetItem()
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
            item.setCheckState(Qt.Unchecked)
            item.setText(value)
            self.dlg.valuesList.addItem(item)
Пример #45
0
 def provide(self, search):
     if not search.startswith('='):
         yield False
     if search.startswith('=='):
         if self.sympy is None:
             try:
                 import sympy
             except ImportError:
                 logging.warn('"sympy" not found.')
                 yield QListWidgetItem('"sympy" not found.')
                 yield True
             self.sympy = sympy
         locals_ = {name: getattr(self.sympy, name) for name in
                    (attribute for attribute in dir(self.sympy)
                     if not attribute.startswith('_'))}
         for variable in ('x', 'y', 'z'):
             locals_[variable] = self.sympy.var(variable)
         prettify = self.sympy_prettify
     else:
         locals_ = {name: getattr(math, name) for name in
                    (attribute for attribute in dir(math)
                     if not attribute.startswith('_'))}
         for builtin in MATH_BUILTINS:
             locals_[builtin] = getattr(__builtins__, builtin)
         prettify = str
     try:
         locals_['ans'] = self.ans
         self.ans = eval(search.lstrip('='), {'__builtins__': None},
                         locals_)
         item = QListWidgetItem(prettify(self.ans))
         item.setFlags(item.flags() & ~Qt.ItemIsSelectable)
         item.setFont(QFont(config_options['monospace font']))
         yield item
     except Exception as err:
         yield QListWidgetItem(str(err))
     yield True
Пример #46
0
 def add_item_list(self):
     item = QListWidgetItem("item", self.ui.itemsList)
     item.setFlags(item.flags() | Qt.ItemIsEditable)
     self.ui.itemsList.addItem(item)
Пример #47
0
class QWMS:
    """QGIS Plugin Implementation."""
    def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(self.plugin_dir, 'i18n',
                                   'QWMS_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Create the dialog (after translation) and keep reference, window on top
        self.dlg = QWMSDialog(self.iface.mainWindow())

        # Declare instance attributes
        self.actions = []
        self.menu = self.tr(u'&QWMS')
        # TODO: We are going to let the user set this up in a future iteration
        self.toolbar = self.iface.addToolBar(u'QWMS')
        self.toolbar.setObjectName(u'QWMS')

    # noinspection PyMethodMayBeStatic
    def tr(self, message):
        """Get the translation for a string using Qt translation API.

        We implement this ourselves since we do not inherit QObject.

        :param message: String for translation.
        :type message: str, QString

        :returns: Translated version of message.
        :rtype: QString
        """
        # noinspection PyTypeChecker,PyArgumentList,PyCallByClass
        return QCoreApplication.translate('QWMS', message)

    def add_action(self,
                   icon_path,
                   text,
                   callback,
                   enabled_flag=True,
                   add_to_menu=True,
                   add_to_toolbar=True,
                   status_tip=None,
                   whats_this=None,
                   parent=None):
        """Add a toolbar icon to the toolbar.

        :param icon_path: Path to the icon for this action. Can be a resource
            path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
        :type icon_path: str

        :param text: Text that should be shown in menu items for this action.
        :type text: str

        :param callback: Function to be called when the action is triggered.
        :type callback: function

        :param enabled_flag: A flag indicating if the action should be enabled
            by default. Defaults to True.
        :type enabled_flag: bool

        :param add_to_menu: Flag indicating whether the action should also
            be added to the menu. Defaults to True.
        :type add_to_menu: bool

        :param add_to_toolbar: Flag indicating whether the action should also
            be added to the toolbar. Defaults to True.
        :type add_to_toolbar: bool

        :param status_tip: Optional text to show in a popup when mouse pointer
            hovers over the action.
        :type status_tip: str

        :param parent: Parent widget for the new action. Defaults None.
        :type parent: QWidget

        :param whats_this: Optional text to show in the status bar when the
            mouse pointer hovers over the action.

        :returns: The action that was created. Note that the action is also
            added to self.actions list.
        :rtype: QAction
        """

        icon = QIcon(icon_path)
        action = QAction(icon, text, parent)
        action.triggered.connect(callback)
        action.setEnabled(enabled_flag)

        if status_tip is not None:
            action.setStatusTip(status_tip)

        if whats_this is not None:
            action.setWhatsThis(whats_this)

        if add_to_toolbar:
            self.toolbar.addAction(action)

        if add_to_menu:
            self.iface.addPluginToMenu(self.menu, action)

        self.actions.append(action)

        return action

    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""

        icon_path = ':/plugins/QWMS/icon.png'
        self.add_action(icon_path,
                        text=self.tr(u'Get WMS'),
                        callback=self.run,
                        parent=self.iface.mainWindow())

    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""
        for action in self.actions:
            self.iface.removePluginMenu(self.tr(u'&QWMS'), action)
            self.iface.removeToolBarIcon(action)
        # remove the toolbar
        del self.toolbar

    def approveChoice(self, i):
        """Returns index of WMS service"""
        self.dlg.textEdit.clear()
        self.selectedWMSIndex = self.dlg.comboBox.currentIndex()
        return self.selectedWMSIndex

    def selectedChoice(self):
        """Gets layers of selected WMS"""

        ## Execute GetCapabilities
        if self.dlg.comboBox.currentIndex() == len(wmsList):  # if GDOS
            url_to_wms_getcaps = wms_getcap_gdos
        else:
            service = wmsLinks[self.dlg.comboBox.currentIndex()]  # else
            url_to_wms_getcaps = wms_getcap_geop % (service)

        ## Read the XML
        try:
            tree = ET.parse(urllib2.urlopen(url_to_wms_getcaps))
        except:
            self.dlg.textEdit.setPlainText('Server error')
        root = tree.getroot()

        self.layerDict = {}  # User-friendly names
        self.layerDictURL = {}  # Names that URL parses

        ## Choose proper path and get available layers to dict
        ## depending on XML structure
        layerID = 0

        if root.findall(xmlStructureURL_3):
            for layer in root.findall(xmlStructureURL_3):
                if layer.tag == layerTagTitle:
                    self.layerDict[layerID - 1] = (layer.text)
                if layer.tag == layerTagName:
                    self.layerDictURL[layerID] = (layer.text)
                layerID += 1
        else:
            if root.findall(xmlStructureURL_2):
                for layer in root.findall(xmlStructureURL_2):
                    if layer.tag == layerTagTitle:
                        self.layerDict[layerID - 1] = (layer.text)
                    if layer.tag == layerTagName:
                        self.layerDictURL[layerID] = (layer.text)
                        layerID += 1
            else:
                if root.findall(xmlStructureURL_1):
                    for layer in root.findall(xmlStructureURL_1):
                        if layer.tag == layerTagTitle:
                            self.layerDict[layerID - 1] = (layer.text)
                        if layer.tag == layerTagName:
                            self.layerDictURL[layerID] = (layer.text)
                            layerID += 1
                else:
                    if root.findall(xmlStructureURL_4):
                        for layer in root.findall(xmlStructureURL_4):
                            if layer.tag == layerTagTitle:
                                self.layerDict[layerID - 1] = (layer.text)
                            if layer.tag == layerTagName:
                                self.layerDictURL[layerID] = (layer.text)
                            layerID += 1
                    else:
                        self.iface.messageBar().pushMessage(
                            "Error",
                            "Unknown metadata structure",
                            level=QgsMessageBar.WARNING,
                            duration=3)

        ## Gets available layers and adds them as checkboxes
        self.dlg.listWidget.clear()
        self.dlg.listWidget.setVisible(True)
        for key, value in self.layerDict.iteritems():
            self.layerToSelect = QListWidgetItem()
            self.layerToSelect.setText(value)
            self.layerToSelect.setFlags(self.layerToSelect.flags()
                                        | QtCore.Qt.ItemIsUserCheckable)
            if len(self.layerDict) <= 1:  # if only one layer available
                self.layerToSelect.setCheckState(QtCore.Qt.Checked)
                self.dlg.listWidget.addItem(self.layerToSelect)
                self.dlg.listWidget.setEnabled(False)
            else:  # if more than one available
                self.layerToSelect.setCheckState(QtCore.Qt.Unchecked)
                self.dlg.listWidget.addItem(self.layerToSelect)
                self.dlg.listWidget.setEnabled(True)
                self.dlg.pushButton_3.setEnabled(True)
        self.dlg.pushButton_2.setEnabled(True)
        return

    def iterate(self):
        """Checks which layers have been selected and returns them"""
        self.items = []
        self.countChecked = 0
        for index in xrange(self.dlg.listWidget.count()):
            if self.dlg.listWidget.item(
                    index).checkState() == QtCore.Qt.Checked:
                self.countChecked += 1
                self.items.append(self.dlg.listWidget.item(index).text())

        ## Get IDs of chosen layers to query it from listDictURL dict
        self.keysIDs = []
        self.keysURL = []
        self.indexStyles = []
        for i in self.items:
            for key, value in self.layerDict.iteritems():
                if i == value:
                    self.keysIDs.append(key)

        ## Create 'styles' part of WMS URL depending on number of layers chosen
        for i in self.keysIDs:
            for key, value in self.layerDictURL.iteritems():
                if i == key:
                    self.keysURL.append(value)
                    self.indexStyles.append(wms_styles)
        return self.items

    def textBox(self):
        """Shows URL to be queried in the text box"""
        ## Gets current EPSG
        canvas = self.iface.mapCanvas()
        currentEPSG = canvas.mapRenderer().destinationCrs().authid()
        if currentEPSG not in availableEPSG:
            currentEPSG = 'EPSG:4326'

        ## Get part of WMS URL corresponding to selected service
        if self.dlg.comboBox.currentIndex() == len(wmsList):
            wms_url = wms_url_gdos
        else:
            service = wmsLinks[self.dlg.comboBox.currentIndex()]
            wms_url = wms_url_geop % (service)

        self.iterate()

        ## If more than one layer selected
        if self.countChecked > 1:
            for selectedLayer in self.keysURL:
                indexLayers = '&layers='.join(self.keysURL)
                indexStyles = '&'.join(self.indexStyles)

            self.urlWithParams = wms_separator.join(
                (wms_url, wms_format, wms_layers + indexLayers, indexStyles,
                 wms_crs + currentEPSG))

        ## If one layer selected
        elif self.countChecked == 1:
            for selectedLayer in self.keysURL:
                indexLayers = self.keysURL[0]

            self.urlWithParams = wms_separator.join(
                (wms_url, wms_format, wms_layers + indexLayers, wms_styles,
                 wms_crs + currentEPSG))
        else:
            self.urlWithParams = 'Error'

        ## Insert URL to be queried in TextBox
        self.dlg.textEdit.setPlainText(self.urlWithParams)

        return self.urlWithParams

    def selectAllNone(self):
        """Selects or deselects all layers in checkbox list"""
        if self.dlg.listWidget.item(0).checkState() == QtCore.Qt.Unchecked:
            for index in xrange(self.dlg.listWidget.count()):
                self.dlg.listWidget.item(index).setCheckState(
                    QtCore.Qt.Checked)
        else:
            for index in xrange(self.dlg.listWidget.count()):
                self.dlg.listWidget.item(index).setCheckState(
                    QtCore.Qt.Unchecked)

    def run(self):
        """ Run the plugin """
        self.dlg.pushButton_2.setEnabled(False)
        self.dlg.pushButton_3.setEnabled(False)
        ## Show the dialog
        self.dlg.show()

        ## Add services to the list:
        if self.dlg.comboBox.count() == 0:
            self.dlg.comboBox.addItems(wmsList)
            self.dlg.comboBox.insertSeparator(39)

        ## Refreshes window after changing service
        self.dlg.comboBox.currentIndexChanged.connect(self.approveChoice)

        ## Get layers of selected service
        self.dlg.pushButton.clicked.connect(self.selectedChoice)

        ## Select all/none layers
        self.dlg.pushButton_3.clicked.connect(self.selectAllNone)

        ## Get WMS address to be queried
        self.dlg.pushButton_2.clicked.connect(self.textBox)

        ## Run the dialog event loop
        result = self.dlg.exec_()

        ## After pressing OK do
        if result:
            if self.dlg.textEdit.toPlainText() == '':
                self.textBox()  # If Get WMS URL is not clicked

            finalURL = self.dlg.textEdit.toPlainText()
            if finalURL != 'Error':
                ## Add layer(s)
                if self.dlg.comboBox.currentIndex() == len(wmsList):  # if GDOS
                    rlayer = QgsRasterLayer(finalURL, wmsList[39], 'wms')
                else:
                    rlayer = QgsRasterLayer(
                        finalURL, wmsList[self.dlg.comboBox.currentIndex()],
                        'wms')

                if not rlayer.isValid():
                    self.iface.messageBar().pushMessage(
                        "Error",
                        "Layer failed to load",
                        level=QgsMessageBar.WARNING,
                        duration=3)
                else:
                    QgsMapLayerRegistry.instance().addMapLayer(rlayer)
            else:
                self.iface.messageBar().pushMessage(
                    "Error",
                    "Error in querying available layers",
                    level=QgsMessageBar.WARNING,
                    duration=3)
Пример #48
0
class QWMS:
    """QGIS Plugin Implementation."""

    def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(
            self.plugin_dir,
            'i18n',
            'QWMS_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Create the dialog (after translation) and keep reference, window on top
        self.dlg = QWMSDialog(self.iface.mainWindow())

        # Declare instance attributes
        self.actions = []
        self.menu = self.tr(u'&QWMS')
        # TODO: We are going to let the user set this up in a future iteration
        self.toolbar = self.iface.addToolBar(u'QWMS')
        self.toolbar.setObjectName(u'QWMS')

    # noinspection PyMethodMayBeStatic
    def tr(self, message):
        """Get the translation for a string using Qt translation API.

        We implement this ourselves since we do not inherit QObject.

        :param message: String for translation.
        :type message: str, QString

        :returns: Translated version of message.
        :rtype: QString
        """
        # noinspection PyTypeChecker,PyArgumentList,PyCallByClass
        return QCoreApplication.translate('QWMS', message)


    def add_action(
        self,
        icon_path,
        text,
        callback,
        enabled_flag=True,
        add_to_menu=True,
        add_to_toolbar=True,
        status_tip=None,
        whats_this=None,
        parent=None):
        """Add a toolbar icon to the toolbar.

        :param icon_path: Path to the icon for this action. Can be a resource
            path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
        :type icon_path: str

        :param text: Text that should be shown in menu items for this action.
        :type text: str

        :param callback: Function to be called when the action is triggered.
        :type callback: function

        :param enabled_flag: A flag indicating if the action should be enabled
            by default. Defaults to True.
        :type enabled_flag: bool

        :param add_to_menu: Flag indicating whether the action should also
            be added to the menu. Defaults to True.
        :type add_to_menu: bool

        :param add_to_toolbar: Flag indicating whether the action should also
            be added to the toolbar. Defaults to True.
        :type add_to_toolbar: bool

        :param status_tip: Optional text to show in a popup when mouse pointer
            hovers over the action.
        :type status_tip: str

        :param parent: Parent widget for the new action. Defaults None.
        :type parent: QWidget

        :param whats_this: Optional text to show in the status bar when the
            mouse pointer hovers over the action.

        :returns: The action that was created. Note that the action is also
            added to self.actions list.
        :rtype: QAction
        """

        icon = QIcon(icon_path)
        action = QAction(icon, text, parent)
        action.triggered.connect(callback)
        action.setEnabled(enabled_flag)

        if status_tip is not None:
            action.setStatusTip(status_tip)

        if whats_this is not None:
            action.setWhatsThis(whats_this)

        if add_to_toolbar:
            self.toolbar.addAction(action)

        if add_to_menu:
            self.iface.addPluginToMenu(
                self.menu,
                action)

        self.actions.append(action)

        return action

    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""

        icon_path = ':/plugins/QWMS/icon.png'
        self.add_action(
            icon_path,
            text=self.tr(u'Get WMS'),
            callback=self.run,
            parent=self.iface.mainWindow())


    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""
        for action in self.actions:
            self.iface.removePluginMenu(
                self.tr(u'&QWMS'),
                action)
            self.iface.removeToolBarIcon(action)
        # remove the toolbar
        del self.toolbar

    def approveChoice(self, i):
        """Returns index of WMS service"""
        self.dlg.textEdit.clear()
        self.selectedWMSIndex = self.dlg.comboBox.currentIndex()
        return self.selectedWMSIndex       

    def selectedChoice(self):
        """Gets layers of selected WMS"""
        
        ## Execute GetCapabilities
        if self.dlg.comboBox.currentIndex() == len(wmsList): # if GDOS
            url_to_wms_getcaps = wms_getcap_gdos
        else:            
            service = wmsLinks[self.dlg.comboBox.currentIndex()] # else
            url_to_wms_getcaps = wms_getcap_geop % (service)

        ## Read the XML
        try:
            tree = ET.parse(urllib2.urlopen(url_to_wms_getcaps))
        except: 
            self.dlg.textEdit.setPlainText('Server error')
        root = tree.getroot()

        self.layerDict = {} # User-friendly names
        self.layerDictURL = {} # Names that URL parses

        ## Choose proper path and get available layers to dict
        ## depending on XML structure
        layerID = 0 
     
        if root.findall(xmlStructureURL_3):
            for layer in root.findall(xmlStructureURL_3):
                if layer.tag == layerTagTitle:
                    self.layerDict[layerID-1] = (layer.text)
                if layer.tag == layerTagName:
                    self.layerDictURL[layerID] = (layer.text)
                layerID += 1            
        else: 
            if root.findall(xmlStructureURL_2):
                for layer in root.findall(xmlStructureURL_2):
                    if layer.tag == layerTagTitle:
                        self.layerDict[layerID-1] = (layer.text)
                    if layer.tag == layerTagName:
                        self.layerDictURL[layerID] = (layer.text)
                        layerID += 1            
            else:
                if root.findall(xmlStructureURL_1):
                    for layer in root.findall(xmlStructureURL_1):
                        if layer.tag == layerTagTitle:
                            self.layerDict[layerID-1] = (layer.text)
                        if layer.tag == layerTagName:
                            self.layerDictURL[layerID] = (layer.text)
                            layerID += 1
                else:
                    if root.findall(xmlStructureURL_4):
                        for layer in root.findall(xmlStructureURL_4):
                            if layer.tag == layerTagTitle:
                                self.layerDict[layerID-1] = (layer.text)
                            if layer.tag == layerTagName:
                                self.layerDictURL[layerID] = (layer.text)
                            layerID += 1       
                    else:
                        self.iface.messageBar().pushMessage("Error", "Unknown metadata structure", level=QgsMessageBar.WARNING, duration=3)
            
        ## Gets available layers and adds them as checkboxes
        self.dlg.listWidget.clear()
        self.dlg.listWidget.setVisible(True)  
        for key, value in self.layerDict.iteritems():
            self.layerToSelect = QListWidgetItem()
            self.layerToSelect.setText(value)
            self.layerToSelect.setFlags(self.layerToSelect.flags() | QtCore.Qt.ItemIsUserCheckable)
            if len(self.layerDict) <= 1: # if only one layer available
                self.layerToSelect.setCheckState(QtCore.Qt.Checked)
                self.dlg.listWidget.addItem(self.layerToSelect)
                self.dlg.listWidget.setEnabled(False)    
            else: # if more than one available
                self.layerToSelect.setCheckState(QtCore.Qt.Unchecked)
                self.dlg.listWidget.addItem(self.layerToSelect)
                self.dlg.listWidget.setEnabled(True) 
                self.dlg.pushButton_3.setEnabled(True)          
        self.dlg.pushButton_2.setEnabled(True)
        return

    def iterate(self):
        """Checks which layers have been selected and returns them"""
        self.items = []
        self.countChecked = 0
        for index in xrange(self.dlg.listWidget.count()):
            if self.dlg.listWidget.item(index).checkState() == QtCore.Qt.Checked:
                self.countChecked += 1
                self.items.append(self.dlg.listWidget.item(index).text())

        ## Get IDs of chosen layers to query it from listDictURL dict
        self.keysIDs = []
        self.keysURL = []
        self.indexStyles = []
        for i in self.items:
            for key, value in self.layerDict.iteritems():
                if i == value:
                    self.keysIDs.append(key)

        ## Create 'styles' part of WMS URL depending on number of layers chosen
        for i in self.keysIDs:
            for key, value in self.layerDictURL.iteritems():
                if i == key:
                    self.keysURL.append(value)
                    self.indexStyles.append(wms_styles)
        return self.items

    def textBox(self):
        """Shows URL to be queried in the text box"""
        ## Gets current EPSG
        canvas = self.iface.mapCanvas()
        currentEPSG = canvas.mapRenderer().destinationCrs().authid()
        if currentEPSG not in availableEPSG:
            currentEPSG = 'EPSG:4326'

        ## Get part of WMS URL corresponding to selected service
        if self.dlg.comboBox.currentIndex() == len(wmsList):
            wms_url = wms_url_gdos
        else:            
            service = wmsLinks[self.dlg.comboBox.currentIndex()]
            wms_url = wms_url_geop % (service)

        self.iterate()

        ## If more than one layer selected
        if self.countChecked > 1:
            for selectedLayer in self.keysURL:
                indexLayers = '&layers='.join(self.keysURL)
                indexStyles = '&'.join(self.indexStyles)

            self.urlWithParams = wms_separator.join((wms_url,
                                                wms_format,
                                                wms_layers
                                                 + indexLayers,
                                                indexStyles,
                                                wms_crs
                                                + currentEPSG))

        ## If one layer selected
        elif self.countChecked == 1:
            for selectedLayer in self.keysURL:
                indexLayers = self.keysURL[0]

            self.urlWithParams = wms_separator.join((wms_url,
                                    wms_format,
                                    wms_layers
                                     + indexLayers,
                                    wms_styles,
                                    wms_crs
                                    + currentEPSG))
        else:
            self.urlWithParams = 'Error'

        ## Insert URL to be queried in TextBox
        self.dlg.textEdit.setPlainText(self.urlWithParams)

        return self.urlWithParams

    def selectAllNone(self):
        """Selects or deselects all layers in checkbox list"""
        if self.dlg.listWidget.item(0).checkState() == QtCore.Qt.Unchecked:
            for index in xrange(self.dlg.listWidget.count()):
                self.dlg.listWidget.item(index).setCheckState(QtCore.Qt.Checked)
        else:
            for index in xrange(self.dlg.listWidget.count()):
                self.dlg.listWidget.item(index).setCheckState(QtCore.Qt.Unchecked)

    def run(self):      
        """ Run the plugin """        
        self.dlg.pushButton_2.setEnabled(False)
        self.dlg.pushButton_3.setEnabled(False)
        ## Show the dialog
        self.dlg.show()

        ## Add services to the list:
        if self.dlg.comboBox.count() == 0:
            self.dlg.comboBox.addItems(wmsList)
            self.dlg.comboBox.insertSeparator(39)

        ## Refreshes window after changing service
        self.dlg.comboBox.currentIndexChanged.connect(self.approveChoice)

        ## Get layers of selected service
        self.dlg.pushButton.clicked.connect(self.selectedChoice)

        ## Select all/none layers
        self.dlg.pushButton_3.clicked.connect(self.selectAllNone)

        ## Get WMS address to be queried
        self.dlg.pushButton_2.clicked.connect(self.textBox)

        ## Run the dialog event loop
        result = self.dlg.exec_()       

        ## After pressing OK do
        if result:      
            if self.dlg.textEdit.toPlainText() == '':
                self.textBox() # If Get WMS URL is not clicked

            finalURL = self.dlg.textEdit.toPlainText()
            if finalURL != 'Error':
            ## Add layer(s)
                if self.dlg.comboBox.currentIndex() == len(wmsList): # if GDOS
                    rlayer = QgsRasterLayer(finalURL, wmsList[39], 'wms')
                else:            
                    rlayer = QgsRasterLayer(finalURL, wmsList[self.dlg.comboBox.currentIndex()], 'wms')

                if not rlayer.isValid():
                     self.iface.messageBar().pushMessage("Error", "Layer failed to load", level=QgsMessageBar.WARNING, duration=3)
                else:
                    QgsMapLayerRegistry.instance().addMapLayer(rlayer)
            else:
                self.iface.messageBar().pushMessage("Error", "Error in querying available layers", level=QgsMessageBar.WARNING, duration=3)
Пример #49
0
 def addEditableItem(self, item):
     # Don't iterate over each character when a single item is passed:
     newItem = QListWidgetItem(item)
     newItem.setData(Qt.UserRole, item)
     newItem.setFlags(newItem.flags() | Qt.ItemIsEditable)
     self.classesListWidget.addItem(newItem)
Пример #50
0
 def add_to_list(self, name, directory):
     repo = QListWidgetItem(QIcon(dirname(main_window.__file__)+'/icons/Git-Icon-Black.png'), name, self.ui.listWidget)
     repo.setStatusTip(directory)
     repo.setData(Qt.UserRole, directory)
     repo.setFlags(repo.flags() | Qt.ItemIsEditable)