def save_stored_settings(self, save_attrnames): stored_settings = {} for attrname in save_attrnames: try: attr = getattr(self, attrname) except: utils.MessagebarAndLog.info(log_msg=ru( QCoreApplication.translate( 'DrillreportUi', "Programming error. Attribute name %s didn't exist in self." )) % attrname) else: if isinstance(attr, qgis.PyQt.QtWidgets.QPlainTextEdit): val = [x for x in attr.toPlainText().split('\n') if x] elif isinstance(attr, (qgis.PyQt.QtWidgets.QCheckBox, qgis.PyQt.QtWidgets.QRadioButton)): val = attr.isChecked() elif isinstance(attr, qgis.PyQt.QtWidgets.QLineEdit): val = attr.text() elif isinstance(attr, qgis.PyQt.QtWidgets.QComboBox): val = attr.currentText() else: utils.MessagebarAndLog.info(log_msg=ru( QCoreApplication.translate( 'DrillreportUi', 'Programming error. The Qt-type %s is unhandled.')) % str(type(attr))) continue stored_settings[attrname] = val self.stored_settings = stored_settings utils.save_stored_settings(self.ms, self.stored_settings, self.stored_settings_key)
def test_save_stored_settings(): mock_ms = MagicMock() mock_ms.settingsdict = {} stored_settings = [(0, (('input_field_group_list', ['p1.u1;it1:h1', 'p2.u2;it2:h2']), ('key0_2', 'value0_2'))), (1, (('location_suffix', 'value1_1'), ('key1_2', 'value1_2')))] testkey = 'thekey' utils.save_stored_settings(mock_ms, stored_settings, testkey) teststring = mock_ms.settingsdict[testkey] reference_string = '[(0, (("input_field_group_list", ["p1.u1;it1:h1", "p2.u2;it2:h2"], ), ("key0_2", "value0_2", ), ), ), (1, (("location_suffix", "value1_1", ), ("key1_2", "value1_2", ), ), )]' assert teststring == reference_string
def test_save_stored_settings_real_parameter_name(): mock_ms = MagicMock() mock_ms.settingsdict = {} stored_settings = [(0, (('input_field_group_list', ['Aveflow.m3/s;numberDecimal|numberSigned;measure flow', 'Accflow.m3;numberDecimal|numberSigned;measure flow']), ('key0_2', 'value0_2'))), (1, (('location_suffix', 'value1_1'), ('key1_2', 'value1_2')))] testkey = 'fieldlogger_pgroups' utils.save_stored_settings(mock_ms, stored_settings, testkey) teststring = create_test_string(mock_ms.settingsdict[testkey]) reference_string = '[(0, (("input_field_group_list", ["Aveflow.m3/s;numberDecimal|numberSigned;measure flow", "Accflow.m3;numberDecimal|numberSigned;measure flow"], ), ("key0_2", "value0_2", ), ), ), (1, (("location_suffix", "value1_1", ), ("key1_2", "value1_2", ), ), )]' assert teststring == reference_string
def update_settings(self, new_string_text, settingskey): try: stored_settings = ast.literal_eval(new_string_text) except SyntaxError as e: stored_settings = [] utils.MessagebarAndLog.warning(bar_msg=ru(QCoreApplication.translate('ExportToFieldLogger', 'Parsing settings failed, see log message panel')), log_msg=ru(QCoreApplication.translate('ExportToFieldLogger', 'Parsing settings failed using string\n%s\n%s'))%(new_string_text, str(e))) return False utils.save_stored_settings(self.ms, stored_settings, settingskey) return True
def save_stored_settings(self): stored_settings = {} for attrname in [ 'general_metadata', 'geo_metadata', 'strat_columns', 'header_in_table', 'skip_empty', 'include_comments', 'general_metadata_header', 'geo_metadata_header', 'strat_columns_header', 'comment_header', 'empty_row_between_obsids', 'topleft_topright_colwidths', 'general_colwidth', 'geo_colwidth', 'decimal_separator' ]: try: attr = getattr(self, attrname) except: utils.MessagebarAndLog.info(log_msg=ru( QCoreApplication.translate( 'DrillreportUi', "Programming error. Attribute name %s didn't exist in self." )) % attrname) else: if isinstance(attr, qgis.PyQt.QtWidgets.QPlainTextEdit): val = [x for x in attr.toPlainText().split('\n') if x] elif isinstance(attr, qgis.PyQt.QtWidgets.QCheckBox): val = attr.isChecked() elif isinstance(attr, qgis.PyQt.QtWidgets.QLineEdit): val = attr.text() else: utils.MessagebarAndLog.info(log_msg=ru( QCoreApplication.translate( 'DrillreportUi', 'Programming error. The Qt-type %s is unhandled.')) % str(type(attr))) continue stored_settings[attrname] = val self.stored_settings = stored_settings utils.save_stored_settings(self.ms, self.stored_settings, self.stored_settings_key)
def save_stored_settings(self): stored_settings = {} for attrname in ['general_metadata', 'geo_metadata', 'strat_columns', 'header_in_table', 'skip_empty', 'include_comments', 'general_metadata_header', 'geo_metadata_header', 'strat_columns_header', 'comment_header', 'empty_row_between_obsids', 'topleft_topright_colwidths', 'general_colwidth', 'geo_colwidth', 'decimal_separator']: try: attr = getattr(self, attrname) except: utils.MessagebarAndLog.info(log_msg=ru(QCoreApplication.translate('DrillreportUi', "Programming error. Attribute name %s didn't exist in self.")) % attrname) else: if isinstance(attr, qgis.PyQt.QtWidgets.QPlainTextEdit): val = [x for x in attr.toPlainText().split('\n') if x] elif isinstance(attr, qgis.PyQt.QtWidgets.QCheckBox): val = attr.isChecked() elif isinstance(attr, qgis.PyQt.QtWidgets.QLineEdit): val = attr.text() else: utils.MessagebarAndLog.info(log_msg=ru(QCoreApplication.translate('DrillreportUi', 'Programming error. The Qt-type %s is unhandled.'))%str(type(attr))) continue stored_settings[attrname] = val self.stored_settings = stored_settings utils.save_stored_settings(self.ms, self.stored_settings, self.stored_settings_key)
def export(self): utils.save_stored_settings( self.ms, self.update_stored_settings(self.parameter_groups), self.stored_settingskey) self.write_printlist_to_file( self.create_export_printlist(self.parameter_groups))
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()
class ExportToFieldLogger(PyQt4.QtGui.QMainWindow, export_fieldlogger_ui_dialog): 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() @staticmethod def init_splitters_layouts(splitter): widgets_layouts = [] for nr in xrange(2): widget = PyQt4.QtGui.QWidget() layout = PyQt4.QtGui.QHBoxLayout() widget.setLayout(layout) splitter.addWidget(widget) widgets_layouts.append((widget, layout)) return widgets_layouts def add_parameter_group_to_gui(self, widgets_layouts, parameter_group): self.create_widget_and_connect_widgets(widgets_layouts[0][1], [ PyQt4.QtGui.QLabel( ru( QCoreApplication.translate(u'ExportToFieldLogger', u'Sub-location suffix'))), parameter_group._sublocation_suffix, PyQt4.QtGui.QLabel( ru( QCoreApplication.translate(u'ExportToFieldLogger', u'Input fields'))), parameter_group._input_field_group_list ]) self.create_widget_and_connect_widgets(widgets_layouts[1][1], [ PyQt4.QtGui.QLabel( ru( QCoreApplication.translate(u'ExportToFieldLogger', u'Locations'))), parameter_group.paste_from_selection_button, parameter_group._obsid_list, PyQt4.QtGui.QLabel( ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Location suffix\n(ex. project number)'))), parameter_group._location_suffix ]) @staticmethod def create_widget_and_connect_widgets( parent_layout=None, widgets=None, layout_class=PyQt4.QtGui.QVBoxLayout): new_widget = PyQt4.QtGui.QWidget() layout = layout_class() new_widget.setLayout(layout) if parent_layout is not None: parent_layout.addWidget(new_widget) for widget in widgets: layout.addWidget(widget) return new_widget @staticmethod def create_parameter_groups_using_stored_settings(stored_settings, connect): """ """ if not stored_settings or stored_settings is None: return [] parameter_groups = [] for index, attrs in stored_settings: parameter_group = ParameterGroup(connect) attrs_set = False for attr in attrs: if hasattr(parameter_group, attr[0].encode(u'utf-8')): setattr(parameter_group, attr[0].encode(u'utf-8'), attr[1]) attrs_set = True else: utils.MessagebarAndLog.warning(log_msg=ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Tried to load input field groups but the variable %s did not exist.' )) % attr[0]) if attrs_set: parameter_groups.append(parameter_group) return parameter_groups @staticmethod def update_parameter_browser_using_stored_settings(stored_settings, parameter_browser): if not stored_settings or stored_settings is None: return for index, attrs in stored_settings: for attr in attrs: if hasattr(parameter_browser, attr[0].encode(u'utf-8')): setattr(parameter_browser, attr[0].encode(u'utf-8'), attr[1]) else: utils.MessagebarAndLog.warning(log_msg=ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Tried to load input field fields browser but the variable %s did not exist.' )) % attr[0]) @staticmethod def update_stored_settings(objects_with_get_settings): return [[index, copy.deepcopy(an_object.get_settings())] for index, an_object in enumerate(objects_with_get_settings) if an_object.get_settings()] def restore_default_settings(self): input_field_browser, input_fields_groups = defs.export_fieldlogger_defaults( ) self.update_settings(input_field_browser, self.stored_settingskey_parameterbrowser) self.update_settings(input_fields_groups, self.stored_settingskey) utils.pop_up_info( ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Input fields and "Create Input Fields" updated to default.\nRestart Export to Fieldlogger dialog to complete,\nor press "Save settings" to save current input fields settings again.' ))) def settings_strings_dialogs(self): msg = ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Edit the settings string for input fields browser and restart export fieldlogger dialog\nto load the change.' )) browser_updated = self.ask_and_update_settings( [self.parameter_browser], self.stored_settingskey_parameterbrowser, msg) msg = ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Edit the settings string for input fields groups and restart export fieldlogger dialog\nto load the change.' )) groups_updated = self.ask_and_update_settings(self.parameter_groups, self.stored_settingskey, msg) if browser_updated or groups_updated: utils.pop_up_info( ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Settings updated. Restart Export to Fieldlogger dialog\nor press "Save settings" to undo.' ))) def ask_and_update_settings(self, objects_with_get_settings, settingskey, msg=''): old_string = utils.anything_to_string_representation( self.update_stored_settings(objects_with_get_settings)) new_string = PyQt4.QtGui.QInputDialog.getText( None, ru( QCoreApplication.translate(u'ExportToFieldLogger', "Edit settings string")), msg, PyQt4.QtGui.QLineEdit.Normal, old_string) if not new_string[1]: return False new_string_text = ru(new_string[0]) self.update_settings(new_string_text, settingskey) def update_settings(self, new_string_text, settingskey): try: stored_settings = ast.literal_eval(new_string_text) except SyntaxError, e: stored_settings = [] utils.MessagebarAndLog.warning( bar_msg=ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Parsing settings failed, see log message panel')), log_msg=ru( QCoreApplication.translate( u'ExportToFieldLogger', u'Parsing settings failed using string\n%s\n%s')) % (new_string_text, str(e))) return False utils.save_stored_settings(self.ms, stored_settings, settingskey) return True
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 export(self): utils.save_stored_settings(self.ms, self.update_stored_settings(self.parameter_groups), self.stored_settingskey) self.write_printlist_to_file(self.create_export_printlist(self.parameter_groups))