def buildfromauto(formconfig, base): widgetsconfig = formconfig['widgets'] outlayout = QFormLayout() outlayout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow) outwidget = base outwidget.setLayout(outlayout) for config in widgetsconfig: widgettype = config['widget'] field = config['field'] name = config.get('name', field) if not field: utils.warning("Field can't be null for {}".format(name)) utils.warning("Skipping widget") continue label = QLabel(name) label.setObjectName(field + "_label") widget = roam.editorwidgets.core.createwidget(widgettype, parent=base) widget.setObjectName(field) layoutwidget = QWidget() layoutwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) layoutwidget.layout().addWidget(widget) if config.get('rememberlastvalue', False): savebutton = QToolButton() savebutton.setObjectName('{}_save'.format(field)) layoutwidget.layout().addWidget(savebutton) outlayout.addRow(label, layoutwidget) outlayout.addItem(QSpacerItem(10, 10)) installflickcharm(outwidget) return outwidget
def setupui(self): """ Setup the widget in the form """ widgetsconfig = self.formconfig['widgets'] layer = self.form.QGISLayer # Crash in QGIS if you lookup a field that isn't found. # We just make a dict with all fields lower because QgsFields is case sensitive. fields = {field.name().lower():field for field in layer.pendingFields().toList()} for config in widgetsconfig: widgettype = config['widget'] field = config['field'].lower() if field in self.boundwidgets: utils.warning("Sorry you can't bind the same field ({}) twice.".format(field)) utils.warning("{} for field {} has been ignored in setup".format(widget, field)) continue widget = self.findcontrol(field) if widget is None: utils.warning("No widget named {} found".format(field)) continue label = self.findcontrol("{}_label".format(field)) if label is None: utils.warning("Not label found for {}".format(field)) widgetconfig = config.get('config', {}) qgsfield = fields[field] try: widgetwrapper = roam.editorwidgets.core.widgetwrapper(widgettype=widgettype, layer=self.form.QGISLayer, field=qgsfield, widget=widget, label=label, config=widgetconfig) except EditorWidgetException as ex: utils.warning(ex.message) continue readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules or 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) if config.get('required', False) and not widgetwrapper.hidden: # All widgets state off as false unless told otherwise self.requiredfields[field] = False widgetwrapper.setrequired() widgetwrapper.validationupdate.connect(self.updaterequired) widgetwrapper.largewidgetrequest.connect(self.showlargewidget.emit) self._bindsavebutton(field) self.boundwidgets[field] = widgetwrapper
def layer_by_name(name): """ Return a layer from QGIS using its name. :param name: The name of the layer :return: A single layer with the given layer name """ try: return layers_by_name(name)[0] except IndexError as ex: warning(f"Can't find layer: {name}") raise ex
def update(self, cursor): if cursor is None: return try: feature = cursor.feature except NoFeature as ex: utils.warning(ex) return form = cursor.form layer = cursor.layer clear_image_cache() info1, results = self.generate_info("info1", self.project, layer, feature.id(), feature) info2, _= self.generate_info("info2", self.project, layer, feature.id(), feature, lastresults=results[0]) if form: name = "{}".format(layer.name(), form.label) else: name = layer.name() info = dict(TITLE=name, INFO1=info1, INFO2=info2) html = updateTemplate(info, template) self.countlabel.setText(str(cursor)) self.attributesView.setHtml(html, templates.baseurl) tools = self.project.layer_tools(layer) hasform = not form is None editattributes = 'edit_attributes' in tools and hasform editgeom = 'edit_geom' in tools and hasform self.editButton.setVisible(editattributes) self.editGeomButton.setVisible(editgeom) self.featureupdated.emit(layer, feature, cursor.features)
def update(self, cursor): if cursor is None: return try: feature = cursor.feature except NoFeature as ex: utils.warning(ex) return fields = [field.name() for field in feature.fields()] data = OrderedDict() items = [] for field, value in zip(fields, feature.attributes()): data[field] = value item = u"<tr><th>{0}</th> <td>${{{0}}}</td></tr>".format(field) items.append(item) rowtemple = Template(''.join(items)) rowshtml = updateTemplate(data, rowtemple) form = cursor.form layer = cursor.layer if form: name = "{}".format(layer.name(), form.label) else: name = layer.name() info = dict(TITLE=name, ROWS=rowshtml) html = updateTemplate(info, template) self.countlabel.setText(str(cursor)) self.attributesView.setHtml(html, templates.baseurl) self.editButton.setVisible(not form is None) self.editGeomButton.setVisible(not form is None) self.featureupdated.emit(layer, feature, cursor.features)
def setupui(self): """ Setup the widget in the form """ self.geomwidget = self.findcontrol("__geomwidget") widgetsconfig = copy.deepcopy(self.formconfig['widgets']) try: widgetsconfig = self.get_widgets(widgetsconfig) except AttributeError: pass layer = self.form.QGISLayer # Crash in QGIS if you lookup a field that isn't found. # We just make a dict with all fields lower because QgsFields is case sensitive. fields = { field.name().lower(): field for field in layer.fields().toList() } # Build a lookup for events self.events = collections.defaultdict(list) for event in self.form.events: self.events[event['source']].append(event) widgetsconfig = copy.deepcopy(widgetsconfig) self.sectionwidgets = {} currentsection = None for config in widgetsconfig: widgettype = config['widget'] if widgettype == "Section": name = config['name'] currentsection = name self.sectionwidgets[name] = [] continue field = config['field'] if not field: utils.info("Skipping widget. No field defined") continue field = field.lower() if field in self.boundwidgets: utils.warning( "Can't bind the same field ({}) twice.".format(field)) continue widget = self.findcontrol(field) if widget is None: widget = roam.editorwidgets.core.createwidget(widgettype) config['hidden'] = True utils.info( "No widget named {} found so we have made one.".format( field)) label = self.findcontrol("{}_label".format(field)) if label is None: utils.debug("No label found for {}".format(field)) widgetconfig = config.get('config', {}) widgetconfig['formwidget'] = self try: qgsfield = fields[field] except KeyError: utils.log("No field for ({}) found".format(field)) continue context = dict(project=self.form.project, form=self.form, featureform=self) try: widgetwrapper = roam.editorwidgets.core.widgetwrapper( widgettype=widgettype, layer=self.form.QGISLayer, field=qgsfield, widget=widget, label=label, config=widgetconfig, context=context, main_config=config) except EditorWidgetException as ex: utils.exception(ex) continue widgetwrapper.default_events = config.get('default_events', ['capture']) readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules or 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) widgetwrapper.newstyleform = self.formconfig.get("newstyle", False) widgetwrapper.required = config.get('required', False) # Only connect widgets that have events if widgetwrapper.id in self.events: widgetwrapper.valuechanged.connect( partial(self.check_for_update_events, widgetwrapper)) widgetwrapper.valuechanged.connect(self.updaterequired) try: changedslot = getattr(self, "widget_{}_changed".format(field)) widgetwrapper.valuechanged.connect(changedslot) except AttributeError: pass widgetwrapper.largewidgetrequest.connect( RoamEvents.show_widget.emit) self._bindsavebutton(field) self.boundwidgets[field] = widgetwrapper try: self.widgetidlookup[config['_id']] = widgetwrapper except KeyError: pass if currentsection: self.sectionwidgets[currentsection].append(widgetwrapper)
def buildfromauto(formconfig, base) -> QWidget: """ Build a auto form from the form config given. :param formconfig: The form config containing the information about the widgets to create. :param base: The base widget to create the new widgets in. :return: The base widget with the added widgets created inside the layout. """ widgetsconfig = copy.deepcopy(formconfig['widgets']) try: widgetsconfig = base.get_widgets(widgetsconfig) except AttributeError: pass newstyle = formconfig.get("newstyle", False) hassections = any(config['widget'] == "Section" for config in widgetsconfig) def make_layout(): """ Create the inner layout for the widget. For new style forms this is a vbox layout so everything is stacked on top of each other in a simple list. :return: """ if newstyle: return QVBoxLayout() else: layout = QFormLayout() layout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow) return layout def make_tab(tabwidget, name): """ Create a table in the given tab widget. :param tabwidget: The tab widget to create the tab in. :param name: The name of the new tab to create. :return: The new widget inside the tab and the widgets inner layout. """ widget = QWidget() widget.setLayout(make_layout()) tabwidget.addTab(widget, name) return widget, widget.layout() if hassections: outwidget = QTabWidget(base) outlayout = None base.setLayout(QVBoxLayout()) base.layout().setContentsMargins(0, 0, 0, 0) base.layout().addWidget(outwidget) else: outwidget = base outlayout = make_layout() outwidget.setLayout(outlayout) # Add the geometry editor widget of that is set in the config. # This is a hidden option so isn't exposed in config manager yet if roam.config.settings.get("form_geom_edit", False): geomwidget = GeomWidget() geomwidget.setObjectName("__geomwidget") outlayout.addRow("Geometry", geomwidget) insection = False for config in widgetsconfig: widgettype = config['widget'] # Make the first tab if one isn't defined already and we have other sections in the config if not insection and hassections and not widgettype == "Section": name = formconfig['label'] tabwidget, outlayout = make_tab(outwidget, name) insection = True if widgettype == 'Section': # Add a spacer to the last widget if outlayout: spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) outlayout.addItem(QSpacerItem(10, 500)) outlayout.addWidget(spacer) name = config['name'] tabwidget, outlayout = make_tab(outwidget, name) insection = True continue field = config['field'] name = config.get('name', field) if not field: utils.warning("Field can't be null for {}".format(name)) utils.warning("Skipping widget") continue label = QLabel(name) label.setObjectName(field + "_label") labelwidget = QWidget() labelwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) labelwidget.layout().addWidget(label) labelwidget.layout().setContentsMargins(0, 0, 0, 0) widget = roam.editorwidgets.core.createwidget(widgettype, parent=base) widget.setObjectName(field) layoutwidget = QWidget() layoutwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) layoutwidget.layout().addWidget(widget) layoutwidget.layout().setContentsMargins(0, 0, 0, 10) if config.get('rememberlastvalue', False): savebutton = QToolButton() savebutton.setObjectName('{}_save'.format(field)) if newstyle: spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) labelwidget.layout().addWidget(spacer) labelwidget.layout().addWidget(savebutton) else: layoutwidget.layout().addWidget(savebutton) if newstyle: outlayout.addWidget(labelwidget) outlayout.addWidget(layoutwidget) else: outlayout.addRow(labelwidget, layoutwidget) spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) outlayout.addWidget(spacer) if not hassections: outlayout.addItem(QSpacerItem(10, 500)) return base
from qgis.core import * from qgis.gui import * from roam import resources_rc, utils from roam.utils import log from roam.api import RoamEvents, GPS import roam.config if os.name == 'nt': try: from power import PowerState powerenabled = True except ImportError as ex: utils.warning("Can't load Power management support {}".format(ex)) powerenabled = False class GPSAction(QAction): gpsfixed = pyqtSignal(bool) def __init__(self, icon, canvas, parent): super(GPSAction, self).__init__( QIcon(icon), QApplication.translate("GPSAction", "Enable GPS", None, QApplication.UnicodeUTF8), parent) self.canvas = canvas self.triggered.connect(self.connectGPS) GPS.gpsfixed.connect(self.fixed)
def buildfromauto(formconfig, base): widgetsconfig = copy.deepcopy(formconfig['widgets']) try: widgetsconfig = base.get_widgets(widgetsconfig) except AttributeError: pass newstyle = formconfig.get("newstyle", False) hassections = any(config['widget'] == "Section" for config in widgetsconfig) def make_layout(): if newstyle: return QVBoxLayout() else: layout = QFormLayout() layout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow) return layout def make_tab(tabwidget, name): widget = QWidget() widget.setLayout(make_layout()) tabwidget.addTab(widget, name) return widget, widget.layout() if hassections: outwidget = QTabWidget(base) outlayout = None base.setLayout(QVBoxLayout()) base.layout().setContentsMargins(0, 0, 0, 0) base.layout().addWidget(outwidget) else: outwidget = base outlayout = make_layout() outwidget.setLayout(outlayout) if roam.config.settings.get("form_geom_edit", False): geomwidget = GeomWidget() geomwidget.setObjectName("__geomwidget") outlayout.addRow("Geometry", geomwidget) insection = False for config in widgetsconfig: widgettype = config['widget'] ## Make the first tab if one isn't defined already and we have other sections in the config if not insection and hassections and not widgettype == "Section": name = formconfig['label'] tabwidget, outlayout = make_tab(outwidget, name) insection = True if widgettype == 'Section': # Add a spacer to the last widget if outlayout: spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) outlayout.addItem(QSpacerItem(10, 500)) outlayout.addWidget(spacer) name = config['name'] tabwidget, outlayout = make_tab(outwidget, name) installflickcharm(tabwidget) insection = True continue field = config['field'] name = config.get('name', field) if not field: utils.warning("Field can't be null for {}".format(name)) utils.warning("Skipping widget") continue label = QLabel(name) label.setObjectName(field + "_label") labelwidget = QWidget() labelwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) labelwidget.layout().addWidget(label) labelwidget.layout().setContentsMargins(0, 0, 0, 0) widget = roam.editorwidgets.core.createwidget(widgettype, parent=base) widget.setObjectName(field) layoutwidget = QWidget() layoutwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) layoutwidget.layout().addWidget(widget) layoutwidget.layout().setContentsMargins(0, 0, 0, 10) if config.get('rememberlastvalue', False): savebutton = QToolButton() savebutton.setObjectName('{}_save'.format(field)) if newstyle: spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) labelwidget.layout().addWidget(spacer) labelwidget.layout().addWidget(savebutton) else: layoutwidget.layout().addWidget(savebutton) if newstyle: outlayout.addWidget(labelwidget) outlayout.addWidget(layoutwidget) else: outlayout.addRow(labelwidget, layoutwidget) spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) outlayout.addWidget(spacer) if not hassections: outlayout.addItem(QSpacerItem(10, 500)) installflickcharm(outwidget) return base
def bind(self): """ Binds the given feature to the to the feature form. :param feature: :param defaults: The lookup containing the default values. Note: This is only used to toggle the save buttons. Default values should be set before the feature is given to the bind function. :return: """ widgetsconfig = self.formconfig['widgets'] for config in widgetsconfig: widgettype = config['widget'] print widgettype field = config['field'] widget = self.widget.findChild(QWidget, field) label = self.widget.findChild(QLabel, "{}_label".format(field)) widgetconfig = config.get('config', {}) widgetwrapper = WidgetsRegistry.createwidget(widgettype, self.form.QGISLayer, field, widget, label, widgetconfig) print widgetwrapper if widgetwrapper is None: print("No widget found for {}".format(widgettype)) continue readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules: widgetwrapper.readonly = True if 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) if config.get('required', False) and not widgetwrapper.hidden: # All widgets state off as false unless told otherwise self.requiredfields[field] = False widgetwrapper.setrequired() widgetwrapper.validationupdate.connect(self.updaterequired) try: print "Null Check" print self.feature.fields().toList() value = nullcheck(self.feature[field]) print value except KeyError: utils.warning("Can't find field {}".format(field)) value = None widgetwrapper.setvalue(value) self._bindsavebutton(field) self.boundwidgets.append(widgetwrapper) self.validateall(self.boundwidgets)
def setupui(self): """ Setup the widget in the form """ widgetsconfig = self.formconfig['widgets'] layer = self.form.QGISLayer # Crash in QGIS if you lookup a field that isn't found. # We just make a dict with all fields lower because QgsFields is case sensitive. fields = { field.name().lower(): field for field in layer.pendingFields().toList() } for config in widgetsconfig: widgettype = config['widget'] field = config['field'] if not field: utils.warning("Skipping widget. No field defined") continue field = field.lower() if field in self.boundwidgets: utils.warning( "Sorry you can't bind the same field ({}) twice.".format( field)) utils.warning( "{} for field {} has been ignored in setup".format( widget, field)) continue widget = self.findcontrol(field) if widget is None: utils.warning("No widget named {} found".format(field)) continue label = self.findcontrol("{}_label".format(field)) if label is None: utils.warning("Not label found for {}".format(field)) widgetconfig = config.get('config', {}) qgsfield = fields[field] try: widgetwrapper = roam.editorwidgets.core.widgetwrapper( widgettype=widgettype, layer=self.form.QGISLayer, field=qgsfield, widget=widget, label=label, config=widgetconfig) except EditorWidgetException as ex: utils.warning(ex.message) continue readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules or 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) if config.get('required', False) and not widgetwrapper.hidden: # All widgets state off as false unless told otherwise self.requiredfields[field] = False widgetwrapper.setrequired() widgetwrapper.validationupdate.connect(self.updaterequired) widgetwrapper.largewidgetrequest.connect(self.showlargewidget.emit) self._bindsavebutton(field) self.boundwidgets[field] = widgetwrapper
def setupui(self): """ Setup the widget in the form """ self.geomwidget = self.findcontrol("__geomwidget") widgetsconfig = copy.deepcopy(self.formconfig['widgets']) try: widgetsconfig = self.get_widgets(widgetsconfig) except AttributeError: pass layer = self.form.QGISLayer # Crash in QGIS if you lookup a field that isn't found. # We just make a dict with all fields lower because QgsFields is case sensitive. fields = {field.name().lower():field for field in layer.pendingFields().toList()} # Build a lookup for events self.events = collections.defaultdict(list) for event in self.form.events: self.events[event['source']].append(event) widgetsconfig = copy.deepcopy(widgetsconfig) self.sectionwidgets = {} currentsection = None for config in widgetsconfig: widgettype = config['widget'] if widgettype == "Section": name = config['name'] currentsection = name self.sectionwidgets[name] = [] continue field = config['field'] if not field: utils.info("Skipping widget. No field defined") continue field = field.lower() if field in self.boundwidgets: utils.warning("Can't bind the same field ({}) twice.".format(field)) continue widget = self.findcontrol(field) if widget is None: widget = roam.editorwidgets.core.createwidget(widgettype) config['hidden'] = True utils.info("No widget named {} found so we have made one.".format(field)) label = self.findcontrol("{}_label".format(field)) if label is None: utils.debug("No label found for {}".format(field)) widgetconfig = config.get('config', {}) widgetconfig['formwidget'] = self try: qgsfield = fields[field] except KeyError: utils.log("No field for ({}) found".format(field)) context = dict(project=self.form.project, form=self.form, featureform=self) try: widgetwrapper = roam.editorwidgets.core.widgetwrapper(widgettype=widgettype, layer=self.form.QGISLayer, field=qgsfield, widget=widget, label=label, config=widgetconfig, context=context) except EditorWidgetException as ex: utils.exception(ex) continue widgetwrapper.default_events = config.get('default_events', ['capture']) readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules or 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) widgetwrapper.newstyleform = self.formconfig.get("newstyle", False) widgetwrapper.required = config.get('required', False) widgetwrapper.id = config.get('_id', '') # Only connect widgets that have events if widgetwrapper.id in self.events: widgetwrapper.valuechanged.connect(partial(self.check_for_update_events, widgetwrapper)) widgetwrapper.valuechanged.connect(self.updaterequired) try: changedslot = getattr(self, "widget_{}_changed".format(field)) widgetwrapper.valuechanged.connect(changedslot) except AttributeError: pass widgetwrapper.largewidgetrequest.connect(RoamEvents.show_widget.emit) self._bindsavebutton(field) self.boundwidgets[field] = widgetwrapper try: self.widgetidlookup[config['_id']] = widgetwrapper except KeyError: pass if currentsection: self.sectionwidgets[currentsection].append(widgetwrapper)
def buildfromauto(formconfig, base): widgetsconfig = copy.deepcopy(formconfig['widgets']) try: widgetsconfig = base.get_widgets(widgetsconfig) except AttributeError: pass newstyle = formconfig.get("newstyle", False) hassections = any(config['widget'] == "Section" for config in widgetsconfig) def make_layout(): if newstyle: return QVBoxLayout() else: layout = QFormLayout() layout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow) return layout def make_tab(tabwidget, name): widget = QWidget() widget.setLayout(make_layout()) tabwidget.addTab(widget, name) return widget, widget.layout() if hassections: outwidget = QTabWidget(base) outlayout = None base.setLayout(QVBoxLayout()) base.layout().setContentsMargins(0,0,0,0) base.layout().addWidget(outwidget) else: outwidget = base outlayout = make_layout() outwidget.setLayout(outlayout) if roam.config.settings.get("form_geom_edit", False): geomwidget = GeomWidget() geomwidget.setObjectName("__geomwidget") outlayout.addRow("Geometry", geomwidget) insection = False for config in widgetsconfig: widgettype = config['widget'] ## Make the first tab if one isn't defined already and we have other sections in the config if not insection and hassections and not widgettype == "Section": name = formconfig['label'] tabwidget, outlayout = make_tab(outwidget, name) insection = True if widgettype == 'Section': # Add a spacer to the last widget if outlayout: spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) outlayout.addItem(QSpacerItem(10, 500)) outlayout.addWidget(spacer) name = config['name'] tabwidget, outlayout = make_tab(outwidget, name) installflickcharm(tabwidget) insection = True continue field = config['field'] name = config.get('name', field) if not field: utils.warning("Field can't be null for {}".format(name)) utils.warning("Skipping widget") continue label = QLabel(name) label.setObjectName(field + "_label") labelwidget = QWidget() labelwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) labelwidget.layout().addWidget(label) labelwidget.layout().setContentsMargins(0,0,0,0) widget = roam.editorwidgets.core.createwidget(widgettype, parent=base) widget.setObjectName(field) layoutwidget = QWidget() layoutwidget.setLayout(QBoxLayout(QBoxLayout.LeftToRight)) layoutwidget.layout().addWidget(widget) layoutwidget.layout().setContentsMargins(0,0,0,10) if config.get('rememberlastvalue', False): savebutton = QToolButton() savebutton.setObjectName('{}_save'.format(field)) if newstyle: spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) labelwidget.layout().addWidget(spacer) labelwidget.layout().addWidget(savebutton) else: layoutwidget.layout().addWidget(savebutton) if newstyle: outlayout.addWidget(labelwidget) outlayout.addWidget(layoutwidget) else: outlayout.addRow(labelwidget, layoutwidget) spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding) outlayout.addWidget(spacer) if not hassections: outlayout.addItem(QSpacerItem(10, 500)) installflickcharm(outwidget) return base
def setupui(self): """ Setup the widget in the form """ self.geomwidget = self.findcontrol("__geomwidget") widgetsconfig = self.formconfig['widgets'] layer = self.form.QGISLayer # Crash in QGIS if you lookup a field that isn't found. # We just make a dict with all fields lower because QgsFields is case sensitive. fields = { field.name().lower(): field for field in layer.pendingFields().toList() } for config in widgetsconfig: widgettype = config['widget'] field = config['field'] if not field: utils.info("Skipping widget. No field defined") continue field = field.lower() if field in self.boundwidgets: utils.warning( "Can't bind the same field ({}) twice.".format(field)) continue widget = self.findcontrol(field) if widget is None: widget = roam.editorwidgets.core.createwidget(widgettype) config['hidden'] = True utils.info( "No widget named {} found so we have made one.".format( field)) label = self.findcontrol("{}_label".format(field)) if label is None: utils.debug("No label found for {}".format(field)) widgetconfig = config.get('config', {}) qgsfield = fields[field] try: widgetwrapper = roam.editorwidgets.core.widgetwrapper( widgettype=widgettype, layer=self.form.QGISLayer, field=qgsfield, widget=widget, label=label, config=widgetconfig) except EditorWidgetException as ex: utils.exception(ex) continue readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules or 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) widgetwrapper.required = config.get('required', False) widgetwrapper.valuechanged.connect(self.updaterequired) widgetwrapper.largewidgetrequest.connect( RoamEvents.show_widget.emit) self._bindsavebutton(field) self.boundwidgets[field] = widgetwrapper
def setupui(self): """ Setup the widget in the form """ widgetsconfig = self.formconfig['widgets'] layer = self.form.QGISLayer # Crash in QGIS if you lookup a field that isn't found. # We just make a dict with all fields lower because QgsFields is case sensitive. fields = {field.name().lower():field for field in layer.pendingFields().toList()} for config in widgetsconfig: widgettype = config['widget'] field = config['field'] if not field: utils.info("Skipping widget. No field defined") continue field = field.lower() if field in self.boundwidgets: utils.warning("Sorry you can't bind the same field ({}) twice.".format(field)) utils.warning("{} for field {} has been ignored in setup".format(widget, field)) continue widget = self.findcontrol(field) if widget is None: widget = roam.editorwidgets.core.createwidget(widgettype) config['hidden'] = True utils.info("No widget named {} found so we have made one.".format(field)) label = self.findcontrol("{}_label".format(field)) if label is None: utils.debug("No label found for {}".format(field)) widgetconfig = config.get('config', {}) qgsfield = fields[field] try: widgetwrapper = roam.editorwidgets.core.widgetwrapper(widgettype=widgettype, layer=self.form.QGISLayer, field=qgsfield, widget=widget, label=label, config=widgetconfig) except EditorWidgetException as ex: utils.exception(ex) continue readonlyrules = config.get('read-only-rules', []) if self.editingmode and 'editing' in readonlyrules: widgetwrapper.readonly = True elif 'insert' in readonlyrules or 'always' in readonlyrules: widgetwrapper.readonly = True widgetwrapper.hidden = config.get('hidden', False) widgetwrapper.required = config.get('required', False) widgetwrapper.valuechanged.connect(self.updaterequired) widgetwrapper.largewidgetrequest.connect(RoamEvents.show_widget.emit) self._bindsavebutton(field) self.boundwidgets[field] = widgetwrapper
from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtSvg import QSvgRenderer from qgis.core import * from qgis.gui import * from roam import resources_rc, utils from roam.utils import log if os.name == 'nt': try: from power import PowerState powerenabled = True except ImportError as ex: utils.warning("Can't load Power management support {}".format(ex)) powerenabled = False class GPSAction(QAction): gpsfixed = pyqtSignal(bool) def __init__(self, icon, canvas, settings, parent): QAction.__init__(self, QIcon(icon), "Enable GPS", parent) self.canvas = canvas self.settings = settings self.triggered.connect(self.connectGPS) self.gpsConn = None self.isConnected = False self.NMEA_FIX_BAD = 1 self.NMEA_FIX_2D = 2