def test_tables_columns_no_dbconnection_supplied(self):
        """  """
        tables_columns = db_utils.tables_columns()
        for tablename in ['obs_points', 'w_levels', 'w_qual_lab', 'w_lvls_last_geom']:
            assert tablename in tables_columns
            assert 'obsid' in tables_columns[tablename]

        for tablename in ['geometry_columns', 'spatial_ref_sys']:
            assert tablename not in tables_columns
    def __init__(self, parent, midv_settings):
        self.iface = parent

        self.ms = midv_settings
        qgis.PyQt.QtWidgets.QDialog.__init__(self, parent)
        self.setAttribute(qgis.PyQt.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)  # Required by Qt4 to initialize the UI
        self.setWindowTitle(
            ru(
                QCoreApplication.translate('CompactWqualReportUi',
                                           "Compact water quality report"))
        )  # Set the title for the dialog

        self.manual_label.setText(
            "<a href=\"https://github.com/jkall/qgis-midvatten-plugin/wiki/5.-Plots-and-reports#create-compact-water-quality-report\">%s</a>"
            % QCoreApplication.translate('CompactWqualReportUi', '(manual)'))
        self.manual_label.setOpenExternalLinks(True)

        tables = list(db_utils.tables_columns().keys())
        self.sql_table.addItems(sorted(tables))
        #Use w_qual_lab as default.
        gui_utils.set_combobox(self.sql_table,
                               'w_qual_lab',
                               add_if_not_exists=False)

        self.save_attrnames = [
            'num_data_cols', 'rowheader_colwidth_percent',
            'empty_row_between_tables', 'page_break_between_tables',
            'from_active_layer', 'from_sql_table', 'sql_table'
        ]

        self.stored_settings_key = 'compactwqualreport'

        self.stored_settings = utils.get_stored_settings(
            self.ms, self.stored_settings_key, {})
        self.update_from_stored_settings(self.stored_settings)

        self.pushButton_ok.clicked.connect(lambda x: self.wqualreport())

        #self.pushButton_cancel, PyQt4.QtCore.SIGNAL("clicked()"), lambda : self.close())

        self.pushButton_update_from_string.clicked.connect(
            lambda x: self.ask_and_update_stored_settings())

        self.sql_table.currentIndexChanged.connect(
            lambda: self.from_sql_table.setChecked(True))

        self.empty_row_between_tables.clicked.connect(
            lambda: self.page_break_between_tables.setChecked(False)
            if self.empty_row_between_tables.isChecked() else True)
        self.page_break_between_tables.clicked.connect(
            lambda: self.empty_row_between_tables.setChecked(False)
            if self.page_break_between_tables.isChecked() else True)

        self.show()
Exemplo n.º 3
0
    def test_tables_columns_no_dbconnection_supplied(self):
        """  """
        tables_columns = db_utils.tables_columns()
        for tablename in [
                u'obs_points', u'w_levels', u'w_qual_lab', u'w_lvls_last_geom'
        ]:
            assert tablename in tables_columns
            assert u'obsid' in tables_columns[tablename]

        for tablename in [u'geometry_columns', u'spatial_ref_sys']:
            assert tablename not in tables_columns
    def test_tables_columns_dbconnection_supplied(self):
        """  """
        dbconnection = db_utils.DbConnectionManager()
        tables_columns = db_utils.tables_columns(dbconnection=dbconnection)
        for tablename in [
                'obs_points', 'w_levels', 'w_qual_lab', 'w_lvls_last_geom'
        ]:
            assert tablename in tables_columns
            assert 'obsid' in tables_columns[tablename]

        for tablename in ['geometry_columns', 'spatial_ref_sys']:
            assert tablename not in tables_columns
    def loadTablesFromDB(self): # This method populates all table-comboboxes with the tables inside the database
        # Execute a query in SQLite to return all available tables (sql syntax excludes some of the predefined tables)
        # start with cleaning comboboxes before filling with new entries
        tables = list(db_utils.tables_columns().keys())

        self.ListOfTables.addItem('')
        self.ListOfTables_2.addItem('')
        self.ListOfTables_WQUAL.addItem('')

        for table in sorted(tables):
            self.ListOfTables.addItem(table)
            self.ListOfTables_2.addItem(table)
            self.ListOfTables_WQUAL.addItem(table)
Exemplo n.º 6
0
    def loadTablesFromDB(
        self
    ):  # This method populates all table-comboboxes with the tables inside the database
        # Execute a query in SQLite to return all available tables (sql syntax excludes some of the predefined tables)
        # start with cleaning comboboxes before filling with new entries
        tables = db_utils.tables_columns().keys()

        self.ListOfTables.addItem('')
        self.ListOfTables_2.addItem('')
        self.ListOfTables_WQUAL.addItem('')

        for table in sorted(tables):
            self.ListOfTables.addItem(table)
            self.ListOfTables_2.addItem(table)
            self.ListOfTables_WQUAL.addItem(table)
Exemplo n.º 7
0
    def __init__(self, parent, midv_settings):
        self.iface = parent

        self.ms = midv_settings
        qgis.PyQt.QtWidgets.QDialog.__init__(self, parent)
        self.setAttribute(qgis.PyQt.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)  # Required by Qt4 to initialize the UI

        tables_columns = db_utils.tables_columns()
        self.db_browser = DbBrowser(tables_columns)

        self.gridLayout.addWidget(self.db_browser.widget, 0, 0)

        self.pushButton_ok.clicked.connect(lambda x: self.calculate())

        self.pushButton_cancel.clicked.connect(lambda: self.close())

        self.show()
    def __init__(self, parent, midv_settings):
        self.iface = parent

        self.ms = midv_settings
        qgis.PyQt.QtWidgets.QDialog.__init__(self, parent)
        self.setAttribute(qgis.PyQt.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)  # Required by Qt4 to initialize the UI

        tables_columns = db_utils.tables_columns()
        self.db_browser = DbBrowser(tables_columns)


        self.gridLayout.addWidget(self.db_browser.widget, 0, 0)

        self.pushButton_ok.clicked.connect(lambda x: self.calculate())

        self.pushButton_cancel.clicked.connect(lambda : self.close())

        self.show()
Exemplo n.º 9
0
    def load_gui(self):
        self.tables_columns_info = {k: v for (k, v) in db_utils.db_tables_columns_info().items() if not k.endswith('_geom')}
        self.table_chooser = ImportTableChooser(self.tables_columns_info, file_header=None)
        self.main_vertical_layout.addWidget(self.table_chooser.widget)
        self.main_vertical_layout.addStretch()
        #General buttons
        self.select_file_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Load data from file')))
        self.gridLayout_buttons.addWidget(self.select_file_button, 0, 0)
        self.select_file_button.clicked.connect(lambda x: self.select_file())


        self.import_all_features_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Load data from all features\nfrom active layer')))
        self.gridLayout_buttons.addWidget(self.import_all_features_button, 1, 0)
        self.import_all_features_button.clicked.connect(lambda x: self.import_all_features())

        self.import_selected_features_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Load data from selected features\nfrom active layer')))
        self.gridLayout_buttons.addWidget(self.import_selected_features_button, 2, 0)
        self.import_selected_features_button.clicked.connect(lambda x: self.import_selected_features())

        self.gridLayout_buttons.addWidget(get_line(), 3, 0)

        tables_columns = db_utils.tables_columns()
        self.distinct_value_browser = DistinctValuesBrowser(tables_columns)
        self.gridLayout_buttons.addWidget(self.distinct_value_browser.widget, 4, 0)

        self.gridLayout_buttons.addWidget(get_line(), 5, 0)

        self.close_after_import = qgis.PyQt.QtWidgets.QCheckBox(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Close dialog after import')))
        self.close_after_import.setChecked(True)
        self.gridLayout_buttons.addWidget(self.close_after_import, 6, 0)

        self.start_import_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Start import')))
        self.gridLayout_buttons.addWidget(self.start_import_button, 7, 0)
        self.start_import_button.clicked.connect(lambda x: self.start_import())

        self.gridLayout_buttons.setRowStretch(8, 1)

        self.show()
    def load_gui(self):
        self.tables_columns_info = {k: v for (k, v) in db_utils.db_tables_columns_info().items() if not k.endswith('_geom')}
        self.table_chooser = ImportTableChooser(self.tables_columns_info, file_header=None)
        self.main_vertical_layout.addWidget(self.table_chooser.widget)
        self.main_vertical_layout.addStretch()
        #General buttons
        self.select_file_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Load data from file')))
        self.gridLayout_buttons.addWidget(self.select_file_button, 0, 0)
        self.select_file_button.clicked.connect(lambda x: self.select_file())


        self.import_all_features_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Load data from all features\nfrom active layer')))
        self.gridLayout_buttons.addWidget(self.import_all_features_button, 1, 0)
        self.import_all_features_button.clicked.connect(lambda x: self.import_all_features())

        self.import_selected_features_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Load data from selected features\nfrom active layer')))
        self.gridLayout_buttons.addWidget(self.import_selected_features_button, 2, 0)
        self.import_selected_features_button.clicked.connect(lambda x: self.import_selected_features())

        self.gridLayout_buttons.addWidget(get_line(), 3, 0)

        tables_columns = db_utils.tables_columns()
        self.distinct_value_browser = DistinctValuesBrowser(tables_columns)
        self.gridLayout_buttons.addWidget(self.distinct_value_browser.widget, 4, 0)

        self.gridLayout_buttons.addWidget(get_line(), 5, 0)

        self.close_after_import = qgis.PyQt.QtWidgets.QCheckBox(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Close dialog after import')))
        self.close_after_import.setChecked(True)
        self.gridLayout_buttons.addWidget(self.close_after_import, 6, 0)

        self.start_import_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('GeneralCsvImportGui', 'Start import')))
        self.gridLayout_buttons.addWidget(self.start_import_button, 7, 0)
        self.start_import_button.clicked.connect(lambda x: self.start_import())

        self.gridLayout_buttons.setRowStretch(8, 1)

        self.show()
 def LoadColumnsFromTable(self, table=''):
     return db_utils.tables_columns().get(table, [])
    def __init__(self, parent, midv_settings):
        self.iface = parent

        self.tables_columns = db_utils.tables_columns()

        self.ms = midv_settings
        qgis.PyQt.QtWidgets.QDialog.__init__(self, parent)
        self.setAttribute(qgis.PyQt.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)  # Required by Qt4 to initialize the UI
        self.setWindowTitle(
            ru(
                QCoreApplication.translate('CompactWqualReportUi',
                                           "Compact water quality report"))
        )  # Set the title for the dialog

        self.manual_label.setText(
            "<a href=\"https://github.com/jkall/qgis-midvatten-plugin/wiki/5.-Plots-and-reports#create-compact-water-quality-report\">%s</a>"
            % QCoreApplication.translate('CompactWqualReportUi', '(manual)'))
        self.manual_label.setOpenExternalLinks(True)

        self.date_time_formats = {
            'YYYY-MM': '%Y-%m',
            'YYYY-MM-DD': '%Y-%m-%d',
            'YYYY-MM-DD hh': '%Y-%m-%d %H',
            'YYYY-MM-DD hh:mm': '%Y-%m-%d %H:%M',
            'YYYY-MM-DD hh:mm:ss': '%Y-%m-%d %H:%M:%S'
        }

        self.methods = {
            'concat':
            lambda x: ', '.join([ru(y) for y in x.values]),
            'avg':
            lambda x: round(
                sum([float(y) for y in x.values]) / float(len(x.values)),
                num_decimals(x.values))
            if all([floatable(y) for y in x.values]) else ', '.join(
                [ru(y) for y in x.values]),
            'sum':
            lambda x: round(sum([float(y) for y in x]), num_decimals(x))
            if all([floatable(y) for y in x.values]) else ', '.join(x.values),
            'min':
            lambda x: min(x.values),
            'max':
            lambda x: min(x.values)
        }

        self.date_time_format.addItems(self.date_time_formats.keys())
        self.method.addItems(self.methods.keys())

        tables = list(db_utils.tables_columns().keys())
        self.sql_table.addItems(sorted(tables))
        #Use w_qual_lab as default.
        gui_utils.set_combobox(self.sql_table,
                               'w_qual_lab',
                               add_if_not_exists=False)

        self.save_attrnames = [
            'num_data_cols', 'rowheader_colwidth_percent',
            'empty_row_between_tables', 'page_break_between_tables',
            'from_active_layer', 'from_sql_table', 'sql_table',
            'sort_alphabetically', 'sort_by_obsid', 'date_time_as_columns',
            'date_time_format', 'method', 'data_column'
        ]

        self.stored_settings_key = 'compactwqualreport'

        self.pushButton_ok.clicked.connect(lambda x: self.wqualreport())

        self.from_active_layer.clicked.connect(
            lambda x: self.set_columns_from_activelayer())
        self.from_sql_table.clicked.connect(
            lambda x: self.set_columns_from_sql_layer())
        self.sql_table.currentIndexChanged.connect(
            lambda x: self.set_columns_from_sql_layer())

        self.pushButton_update_from_string.clicked.connect(
            lambda x: self.ask_and_update_stored_settings())

        self.sql_table.currentIndexChanged.connect(
            lambda: self.from_sql_table.setChecked(True))

        self.empty_row_between_tables.clicked.connect(
            lambda: self.page_break_between_tables.setChecked(False)
            if self.empty_row_between_tables.isChecked() else True)
        self.page_break_between_tables.clicked.connect(
            lambda: self.empty_row_between_tables.setChecked(False)
            if self.page_break_between_tables.isChecked() else True)

        self.stored_settings = utils.get_stored_settings(
            self.ms, self.stored_settings_key, {})
        self.update_from_stored_settings(self.stored_settings)

        self.show()
Exemplo n.º 13
0
    def add_layers_new_method(self):
        try:  #qgis>=2.4
            if self.group_name == 'Midvatten_OBS_DB':
                position_index = 0
            else:
                position_index = 1
            MyGroup = self.root.insertGroup(position_index, self.group_name)
        except:  #qgis < 2.4
            MyGroup = self.legend.addGroup(self.group_name, 1, -1)

        dbconnection = db_utils.DbConnectionManager()
        uri = dbconnection.uri
        dbtype = dbconnection.dbtype
        schema = dbconnection.schemas()
        #For QgsVectorLayer, dbtype has to be postgres instead of postgis
        dbtype = db_utils.get_dbtype(dbtype)

        canvas = self.iface.mapCanvas()
        layer_list = []
        map_canvas_layer_list = []
        if self.group_name == 'Midvatten_OBS_DB':
            self.add_layers_to_list(layer_list, uri, schema,
                                    self.default_nonspatlayers, dbtype)
            self.add_layers_to_list(layer_list, uri, schema,
                                    self.default_layers, dbtype, 'geometry')

        elif self.group_name == 'Midvatten_data_domains':  #if self.group_name == 'Midvatten_data_domains':
            tables_columns = db_utils.tables_columns()
            d_domain_tables = [
                x for x in tables_columns.keys() if x.startswith(u'zz_')
            ]
            self.add_layers_to_list(layer_list, uri, schema, d_domain_tables,
                                    dbtype)

        #now loop over all the layers and set styles etc
        for layer in layer_list:
            map_canvas_layer_list.append(QgsMapCanvasLayer(layer))
            try:  #qgis>=2.4
                QgsMapLayerRegistry.instance().addMapLayers([layer], False)
                MyGroup.insertLayer(0, layer)
                #MyGroup.addLayer(layer)
            except:  #qgis<2.4
                QgsMapLayerRegistry.instance().addMapLayers([layer])
                group_index = self.legend.groups().index(self.group_name)
                self.legend.moveLayer(self.legend.layers()[0], group_index)

            if self.group_name == 'Midvatten_OBS_DB':
                layer.setEditorLayout(
                    1
                )  #perhaps this is unnecessary since it gets set from the loaded qml below?

            #now try to load the style file
            stylefile_sv = os.path.join(os.sep, os.path.dirname(__file__),
                                        "..", "definitions",
                                        layer.name() + "_sv.qml")
            stylefile = os.path.join(os.sep, os.path.dirname(__file__), "..",
                                     "definitions",
                                     layer.name() + ".qml")
            if utils.getcurrentlocale()[0] == 'sv_SE' and os.path.isfile(
                    stylefile_sv
            ):  #swedish forms are loaded only if locale settings indicate sweden
                try:
                    layer.loadNamedStyle(stylefile_sv)
                except:
                    try:
                        layer.loadNamedStyle(stylefile)
                    except:
                        pass
            else:
                try:
                    layer.loadNamedStyle(stylefile)
                except:
                    pass

            if layer.name() == 'obs_points':  #zoom to obs_points extent
                obsp_lyr = layer
                canvas.setExtent(layer.extent())
            elif layer.name(
            ) == 'w_lvls_last_geom':  #we do not want w_lvls_last_geom to be visible by default
                self.legend.setLayerVisible(layer, False)
            else:
                pass

        #finally refresh canvas
        canvas.refresh()
Exemplo n.º 14
0
 def LoadColumnsFromTable(self, table=''):
     return db_utils.tables_columns().get(table, [])
    def __init__(self, parent, midv_settings):
        self.iface = parent

        self.ms = midv_settings
        qgis.PyQt.QtWidgets.QDialog.__init__(self, parent)
        self.setAttribute(qgis.PyQt.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)  # Required by Qt4 to initialize the UI
        self.setWindowTitle(ru(QCoreApplication.translate('ExportToFieldLogger', "Export to Fieldlogger dialog"))) # Set the title for the dialog

        self.widget.setMinimumWidth(180)

        tables_columns = db_utils.tables_columns()

        self.parameter_groups = None

        self.stored_settingskey = 'fieldlogger_export_pgroups'
        self.stored_settingskey_parameterbrowser = 'fieldlogger_export_pbrowser'

        for settingskey in [self.stored_settingskey, self.stored_settingskey_parameterbrowser]:
            if settingskey not in self.ms.settingsdict:
                utils.MessagebarAndLog.warning(bar_msg=ru(QCoreApplication.translate('ExportToFieldLogger', '%s did not exist in settingsdict'))%settingskey)

        self.parameter_groups = self.create_parameter_groups_using_stored_settings(utils.get_stored_settings(self.ms, self.stored_settingskey))
        if self.parameter_groups is None or not self.parameter_groups:
            self.parameter_groups = [ParameterGroup()]


        self.main_vertical_layout.addWidget(qgis.PyQt.QtWidgets.QLabel(ru(QCoreApplication.translate('ExportToFieldLogger', 'Fieldlogger input fields and locations:'))))
        self.main_vertical_layout.addWidget(get_line())
        self.splitter = SplitterWithHandel(qgis.PyQt.QtCore.Qt.Vertical)
        self.main_vertical_layout.addWidget(self.splitter)

        #This is about adding a messagebar to the fieldlogger window. But for some reason qgis crashes or closes
        #when the timer ends for the regular messagebar
        #self.lbl = MessageBar(self.splitter)
        #qgis.utils.iface.optional_bar = self.lbl

        self.widgets_layouts = self.init_splitters_layouts(self.splitter)

        if self.parameter_groups:
            for export_object in self.parameter_groups:
                self.add_parameter_group_to_gui(self.widgets_layouts, export_object)

        #Buttons

        #ParameterUnitBrowser
        self.parameter_browser = ParameterBrowser(tables_columns, self.widget)
        self.parameter_browser_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Create Input Fields')))
        self.gridLayout_buttons.addWidget(self.parameter_browser_button, 0, 0)
        self.parameter_browser_button.clicked.connect(
                     lambda : self.parameter_browser.show())

        self.update_parameter_browser_using_stored_settings(utils.get_stored_settings(self.ms, self.stored_settingskey_parameterbrowser), self.parameter_browser)

        self.add_parameter_group = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'More Fields and Locations')))
        self.add_parameter_group.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'Creates an additional empty input field group.')))
        self.gridLayout_buttons.addWidget(self.add_parameter_group, 1, 0)
        #Lambda and map is used to run several functions for every button click
        self.add_parameter_group.clicked.connect(
                     lambda: [x() for x in [lambda: self.parameter_groups.append(ParameterGroup()),
                                  lambda: self.add_parameter_group_to_gui(self.widgets_layouts, self.parameter_groups[-1])]])

        self.gridLayout_buttons.addWidget(get_line(), 2, 0)

        #Buttons
        self.save_settings_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Save settings')))
        self.save_settings_button.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'Saves the current input fields settings.')))
        self.gridLayout_buttons.addWidget(self.save_settings_button, 3, 0)
        self.save_settings_button.clicked.connect(
                        lambda: [x() for x in [lambda: utils.save_stored_settings(self.ms,
                                                            self.update_stored_settings(self.parameter_groups),
                                                            self.stored_settingskey),
                                  lambda: utils.save_stored_settings(self.ms,
                                                                    self.update_stored_settings([self.parameter_browser]),
                                                                    self.stored_settingskey_parameterbrowser)]])

        self.clear_settings_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Clear settings')))
        self.clear_settings_button.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'Clear all input fields settings.')))
        self.gridLayout_buttons.addWidget(self.clear_settings_button, 4, 0)
        self.clear_settings_button.clicked.connect(
                     lambda: [x() for x in [lambda: utils.save_stored_settings(self.ms, [], self.stored_settingskey),
                                  lambda: utils.pop_up_info(ru(QCoreApplication.translate('ExportToFieldLogger', 'Settings cleared. Restart Export to Fieldlogger dialog to complete,\nor press "Save settings" to save current input fields settings again.')))]])

        self.settings_strings_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Settings strings')))
        self.settings_strings_button.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'Access the settings strings ("Create input fields" and input fields) to copy and paste all settings between different qgis projects.\n Usage: Select string and copy to a text editor or directly into Settings strings dialog of another qgis project.')))
        self.gridLayout_buttons.addWidget(self.settings_strings_button, 5, 0)
        self.settings_strings_button.clicked.connect(lambda x: self.settings_strings_dialogs())

        self.default_settings_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Default settings')))
        self.default_settings_button.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'Updates "Create input fields" and input fields to default settings.')))
        self.gridLayout_buttons.addWidget(self.default_settings_button, 6, 0)
        self.default_settings_button.clicked.connect(lambda x: self.restore_default_settings())

        self.gridLayout_buttons.addWidget(get_line(), 7, 0)

        self.preview_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Preview')))
        self.preview_button.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'View a preview of the Fieldlogger location file as pop-up info.')))
        self.gridLayout_buttons.addWidget(self.preview_button, 8, 0)
        # Lambda and map is used to run several functions for every button click
        self.preview_button.clicked.connect(lambda x: self.preview())

        self.export_button = qgis.PyQt.QtWidgets.QPushButton(ru(QCoreApplication.translate('ExportToFieldLogger', 'Export')))
        self.export_button.setToolTip(ru(QCoreApplication.translate('ExportToFieldLogger', 'Exports the current combination of locations and input fields to a Fieldlogger location file.')))
        self.gridLayout_buttons.addWidget(self.export_button, 9, 0)
        # Lambda and map is used to run several functions for every button click
        self.export_button.clicked.connect(lambda x: self.export())

        self.gridLayout_buttons.setRowStretch(10, 1)

        self.show()
    def add_layers_new_method(self):
        if self.group_name == 'Midvatten_OBS_DB':
            position_index = 0
        else:
            position_index = 1
        MyGroup = qgis.core.QgsLayerTreeGroup(name=self.group_name,
                                              checked=True)
        self.root.insertChildNode(position_index, MyGroup)
        dbconnection = db_utils.DbConnectionManager()

        canvas = self.iface.mapCanvas()
        layer_list = []
        if self.group_name == 'Midvatten_OBS_DB':
            add_layers_to_list(layer_list,
                               self.default_nonspatlayers,
                               dbconnection=dbconnection)
            add_layers_to_list(layer_list,
                               self.default_layers,
                               geometrycolumn='geometry',
                               dbconnection=dbconnection)

        elif self.group_name == 'Midvatten_data_domains':  #if self.group_name == 'Midvatten_data_domains':
            tables_columns = db_utils.tables_columns()
            d_domain_tables = [
                x for x in list(tables_columns.keys()) if x.startswith('zz_')
            ]
            add_layers_to_list(layer_list,
                               d_domain_tables,
                               dbconnection=dbconnection)

        w_lvls_last_geom = None

        #now loop over all the layers and set styles etc
        for layer in layer_list:
            # TODO: Made this a comment, but there might be some hidden feature thats still needed!
            #map_canvas_layer_list.append(QgsMapCanvasLayer(layer))

            QgsProject.instance().addMapLayers([layer], False)
            MyGroup.insertLayer(0, layer)
            #MyGroup.addLayer(layer)

            #TODO: Check if this isn't needed.
            #if self.group_name == 'Midvatten_OBS_DB':
            #    layer.setEditorLayout(1) #perhaps this is unnecessary since it gets set from the loaded qml below?

            #now try to load the style file
            stylefile_sv = os.path.join(os.sep, os.path.dirname(__file__),
                                        "..", "definitions",
                                        layer.name() + "_sv.qml")
            stylefile = os.path.join(os.sep, os.path.dirname(__file__), "..",
                                     "definitions",
                                     layer.name() + ".qml")
            if utils.getcurrentlocale()[0] == 'sv_SE' and os.path.isfile(
                    stylefile_sv
            ):  #swedish forms are loaded only if locale settings indicate sweden
                try:
                    layer.loadNamedStyle(stylefile_sv)
                except:
                    try:
                        layer.loadNamedStyle(stylefile)
                    except:
                        pass
            else:
                try:
                    layer.loadNamedStyle(stylefile)
                except:
                    pass

            if layer.name() == 'obs_points':  #zoom to obs_points extent
                obsp_lyr = layer
                canvas.setExtent(layer.extent())
            elif layer.name() == 'w_lvls_last_geom':
                w_lvls_last_geom = layer

        if w_lvls_last_geom is not None:
            midv = self.root.findGroup('Midvatten_OBS_DB')
            w_lvls_last_geom = MyGroup.findLayer(w_lvls_last_geom)
            w_lvls_last_geom.setItemVisibilityCheckedRecursive(False)

        #finally refresh canvas
        dbconnection.closedb()
        canvas.refresh()
Exemplo n.º 17
0
    def __init__(self, parent, midv_settings):
        self.iface = parent

        self.ms = midv_settings
        PyQt4.QtGui.QDialog.__init__(self, parent)
        self.setAttribute(PyQt4.QtCore.Qt.WA_DeleteOnClose)
        self.setupUi(self)  # Required by Qt4 to initialize the UI
        self.setWindowTitle(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u"Export to Fieldlogger dialog"))
        )  # Set the title for the dialog

        self.widget.setMinimumWidth(180)

        tables_columns = db_utils.tables_columns()

        self.parameter_groups = None

        self.stored_settingskey = 'fieldlogger_export_pgroups'
        self.stored_settingskey_parameterbrowser = 'fieldlogger_export_pbrowser'

        for settingskey in [
                self.stored_settingskey,
                self.stored_settingskey_parameterbrowser
        ]:
            if settingskey not in self.ms.settingsdict:
                utils.MessagebarAndLog.warning(bar_msg=ru(
                    QCoreApplication.translate(
                        u'ExportToFieldLogger',
                        u'%s did not exist in settingsdict')) % settingskey)

        self.parameter_groups = self.create_parameter_groups_using_stored_settings(
            utils.get_stored_settings(self.ms, self.stored_settingskey),
            self.connect)
        if self.parameter_groups is None or not self.parameter_groups:
            self.parameter_groups = [ParameterGroup(self.connect)]

        self.main_vertical_layout.addWidget(
            PyQt4.QtGui.QLabel(
                ru(
                    QCoreApplication.translate(
                        u'ExportToFieldLogger',
                        u'Fieldlogger input fields and locations:'))))
        self.main_vertical_layout.addWidget(get_line())
        self.splitter = SplitterWithHandel(PyQt4.QtCore.Qt.Vertical)
        self.main_vertical_layout.addWidget(self.splitter)

        #This is about adding a messagebar to the fieldlogger window. But for some reason qgis crashes or closes
        #when the timer ends for the regular messagebar
        #self.lbl = MessageBar(self.splitter)
        #qgis.utils.iface.optional_bar = self.lbl

        self.widgets_layouts = self.init_splitters_layouts(self.splitter)

        if self.parameter_groups:
            for export_object in self.parameter_groups:
                self.add_parameter_group_to_gui(self.widgets_layouts,
                                                export_object)

        #Buttons

        #ParameterUnitBrowser
        self.parameter_browser = ParameterBrowser(tables_columns, self.connect,
                                                  self.widget)
        self.parameter_browser_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u'Create Input Fields')))
        self.gridLayout_buttons.addWidget(self.parameter_browser_button, 0, 0)
        self.connect(self.parameter_browser_button,
                     PyQt4.QtCore.SIGNAL("clicked()"),
                     lambda: self.parameter_browser.show())

        self.update_parameter_browser_using_stored_settings(
            utils.get_stored_settings(
                self.ms, self.stored_settingskey_parameterbrowser),
            self.parameter_browser)

        self.add_parameter_group = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u'More Fields and Locations')))
        self.add_parameter_group.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'Creates an additional empty input field group.')))
        self.gridLayout_buttons.addWidget(self.add_parameter_group, 1, 0)
        #Lambda and map is used to run several functions for every button click
        self.connect(
            self.add_parameter_group, PyQt4.QtCore.SIGNAL("clicked()"),
            lambda: map(lambda x: x(), [
                lambda: self.parameter_groups.append(
                    ParameterGroup(self.connect)),
                lambda: self.add_parameter_group_to_gui(
                    self.widgets_layouts, self.parameter_groups[-1])
            ]))

        self.gridLayout_buttons.addWidget(get_line(), 2, 0)

        #Buttons
        self.save_settings_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u'Save settings')))
        self.save_settings_button.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'Saves the current input fields settings.')))
        self.gridLayout_buttons.addWidget(self.save_settings_button, 3, 0)
        self.connect(
            self.save_settings_button, PyQt4.QtCore.SIGNAL("clicked()"),
            lambda: map(lambda x: x(), [
                lambda: utils.save_stored_settings(
                    self.ms, self.update_stored_settings(
                        self.parameter_groups), self.stored_settingskey),
                lambda: utils.save_stored_settings(
                    self.ms,
                    self.update_stored_settings([self.parameter_browser]), self
                    .stored_settingskey_parameterbrowser)
            ]))

        self.clear_settings_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u'Clear settings')))
        self.clear_settings_button.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'Clear all input fields settings.')))
        self.gridLayout_buttons.addWidget(self.clear_settings_button, 4, 0)
        self.connect(
            self.clear_settings_button, PyQt4.QtCore.SIGNAL("clicked()"),
            lambda: map(lambda x: x(), [
                lambda: utils.save_stored_settings(self.ms, [
                ], self.stored_settingskey), lambda: utils.pop_up_info(
                    ru(
                        QCoreApplication.translate(
                            u'ExportToFieldLogger',
                            u'Settings cleared. Restart Export to Fieldlogger dialog to complete,\nor press "Save settings" to save current input fields settings again.'
                        )))
            ]))

        self.settings_strings_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u'Settings strings')))
        self.settings_strings_button.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'Access the settings strings ("Create input fields" and input fields) to copy and paste all settings between different qgis projects.\n Usage: Select string and copy to a text editor or directly into Settings strings dialog of another qgis project.'
                )))
        self.gridLayout_buttons.addWidget(self.settings_strings_button, 5, 0)
        self.connect(self.settings_strings_button,
                     PyQt4.QtCore.SIGNAL("clicked()"),
                     self.settings_strings_dialogs)

        self.default_settings_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'ExportToFieldLogger',
                                           u'Default settings')))
        self.default_settings_button.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'Updates "Create input fields" and input fields to default settings.'
                )))
        self.gridLayout_buttons.addWidget(self.default_settings_button, 6, 0)
        self.connect(self.default_settings_button,
                     PyQt4.QtCore.SIGNAL("clicked()"),
                     self.restore_default_settings)

        self.gridLayout_buttons.addWidget(get_line(), 7, 0)

        self.preview_button = PyQt4.QtGui.QPushButton(
            ru(QCoreApplication.translate(u'ExportToFieldLogger', u'Preview')))
        self.preview_button.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'View a preview of the Fieldlogger location file as pop-up info.'
                )))
        self.gridLayout_buttons.addWidget(self.preview_button, 8, 0)
        # Lambda and map is used to run several functions for every button click
        self.connect(self.preview_button, PyQt4.QtCore.SIGNAL("clicked()"),
                     self.preview)

        self.export_button = PyQt4.QtGui.QPushButton(
            ru(QCoreApplication.translate(u'ExportToFieldLogger', u'Export')))
        self.export_button.setToolTip(
            ru(
                QCoreApplication.translate(
                    u'ExportToFieldLogger',
                    u'Exports the current combination of locations and input fields to a Fieldlogger location file.'
                )))
        self.gridLayout_buttons.addWidget(self.export_button, 9, 0)
        # Lambda and map is used to run several functions for every button click
        self.connect(self.export_button, PyQt4.QtCore.SIGNAL("clicked()"),
                     self.export)

        self.gridLayout_buttons.setRowStretch(10, 1)

        self.show()
Exemplo n.º 18
0
    def load_gui(self):
        self.tables_columns_info = {
            k: v
            for (k, v) in db_utils.db_tables_columns_info().iteritems()
            if not k.endswith(u'_geom')
        }
        self.table_chooser = ImportTableChooser(self.tables_columns_info,
                                                self.connect,
                                                file_header=None)
        self.main_vertical_layout.addWidget(self.table_chooser.widget)
        self.main_vertical_layout.addStretch()
        #General buttons
        self.select_file_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'GeneralCsvImportGui',
                                           u'Load data from file')))
        self.gridLayout_buttons.addWidget(self.select_file_button, 0, 0)
        self.connect(
            self.select_file_button, PyQt4.QtCore.SIGNAL("clicked()"),
            lambda: map(lambda x: x(), [
                lambda: self.load_files(), lambda: self.table_chooser.reload(),
                lambda: self.file_data_loaded_popup()
            ]))

        self.import_all_features_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(
                    u'GeneralCsvImportGui',
                    u'Load data from all features\nfrom active layer')))
        self.gridLayout_buttons.addWidget(self.import_all_features_button, 1,
                                          0)
        self.connect(
            self.import_all_features_button, PyQt4.QtCore.SIGNAL("clicked()"),
            lambda: map(lambda x: x(), [
                lambda: self.load_from_active_layer(
                    only_selected=False), lambda: self.table_chooser.reload(),
                lambda: self.file_data_loaded_popup()
            ]))

        self.import_selected_features_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(
                    u'GeneralCsvImportGui',
                    u'Load data from selected features\nfrom active layer')))
        self.gridLayout_buttons.addWidget(self.import_selected_features_button,
                                          2, 0)
        self.connect(
            self.import_selected_features_button,
            PyQt4.QtCore.SIGNAL("clicked()"),
            lambda: map(lambda x: x(), [
                lambda: self.load_from_active_layer(
                    only_selected=True), lambda: self.table_chooser.reload(),
                lambda: self.file_data_loaded_popup()
            ]))

        self.gridLayout_buttons.addWidget(get_line(), 3, 0)

        tables_columns = db_utils.tables_columns()
        self.distinct_value_browser = DistinctValuesBrowser(
            tables_columns, self.connect)
        self.gridLayout_buttons.addWidget(self.distinct_value_browser.widget,
                                          4, 0)

        self.gridLayout_buttons.addWidget(get_line(), 5, 0)

        self.close_after_import = PyQt4.QtGui.QCheckBox(
            ru(
                QCoreApplication.translate(u'GeneralCsvImportGui',
                                           u'Close dialog after import')))
        self.close_after_import.setChecked(True)
        self.gridLayout_buttons.addWidget(self.close_after_import, 6, 0)

        self.start_import_button = PyQt4.QtGui.QPushButton(
            ru(
                QCoreApplication.translate(u'GeneralCsvImportGui',
                                           u'Start import')))
        self.gridLayout_buttons.addWidget(self.start_import_button, 7, 0)
        self.connect(self.start_import_button,
                     PyQt4.QtCore.SIGNAL("clicked()"), self.start_import)

        self.gridLayout_buttons.setRowStretch(8, 1)

        self.show()
    def add_layers_new_method(self):
        if self.group_name == 'Midvatten_OBS_DB':
            position_index = 0
        else:
            position_index = 1
        MyGroup = qgis.core.QgsLayerTreeGroup(name=self.group_name, checked=True)
        self.root.insertChildNode(position_index, MyGroup)
        dbconnection = db_utils.DbConnectionManager()

        canvas = self.iface.mapCanvas()
        layer_list = []
        if self.group_name == 'Midvatten_OBS_DB':
            add_layers_to_list(layer_list, self.default_nonspatlayers, dbconnection=dbconnection)
            add_layers_to_list(layer_list, self.default_layers, geometrycolumn='geometry',
                               dbconnection=dbconnection)

        elif self.group_name == 'Midvatten_data_domains': #if self.group_name == 'Midvatten_data_domains':
            tables_columns = db_utils.tables_columns()
            d_domain_tables = [x for x in list(tables_columns.keys()) if x.startswith('zz_')]
            add_layers_to_list(layer_list, d_domain_tables, dbconnection=dbconnection)

        w_lvls_last_geom = None

        #now loop over all the layers and set styles etc
        for layer in layer_list:
            # TODO: Made this a comment, but there might be some hidden feature thats still needed!
            #map_canvas_layer_list.append(QgsMapCanvasLayer(layer))

            QgsProject.instance().addMapLayers([layer],False)
            MyGroup.insertLayer(0,layer)
            #MyGroup.addLayer(layer)

            #TODO: Check if this isn't needed.
            #if self.group_name == 'Midvatten_OBS_DB':
            #    layer.setEditorLayout(1) #perhaps this is unnecessary since it gets set from the loaded qml below?

            #now try to load the style file
            stylefile_sv = os.path.join(os.sep,os.path.dirname(__file__),"..","definitions",layer.name() + "_sv.qml")
            stylefile = os.path.join(os.sep,os.path.dirname(__file__),"..","definitions",layer.name() + ".qml")
            if  utils.getcurrentlocale()[0] == 'sv_SE' and os.path.isfile( stylefile_sv ): #swedish forms are loaded only if locale settings indicate sweden
                try:
                    layer.loadNamedStyle(stylefile_sv)
                except:
                    try:
                        layer.loadNamedStyle(stylefile)
                    except:
                        pass
            else:
                try:
                    layer.loadNamedStyle(stylefile)
                except:
                    pass

            if layer.name() == 'obs_points':#zoom to obs_points extent
                obsp_lyr = layer
                canvas.setExtent(layer.extent())
            elif layer.name() == 'w_lvls_last_geom':
                w_lvls_last_geom = layer

        if w_lvls_last_geom is not None:
            midv = self.root.findGroup('Midvatten_OBS_DB')
            w_lvls_last_geom = MyGroup.findLayer(w_lvls_last_geom)
            w_lvls_last_geom.setItemVisibilityCheckedRecursive(False)

        #finally refresh canvas
        dbconnection.closedb()
        canvas.refresh()