Exemplo n.º 1
0
    def alterForm(self, selected_layer):
        """
        Iterate over the fields of the layer and alters the widgets in
        accordance to the typeName and length.
        """
        not_nullable_columns = self.checkNullableColumns(selected_layer)

        for field_index, field in enumerate(selected_layer.fields()):
            f_type = field.typeName()

            widget_type = QgsEditorWidgetRegistry().findBest(
                selected_layer, field.displayName())
            widget_type_name = QgsEditorWidgetRegistry().findBest(
                selected_layer, field.displayName()).type()

            if widget_type_name != 'TextEdit':
                pass
            elif f_type == "text":
                selected_layer.setEditorWidgetSetup(field_index, widget_type)
                selected_layer.editFormConfig().setWidgetConfig(
                    field.displayName(), {
                        'IsMultiline': True,
                        'UseHtml': False
                    })
            elif f_type == "varchar":
                selected_layer.setEditorWidgetSetup(field_index, widget_type)
                selected_layer.editFormConfig().setWidgetConfig(
                    field.displayName(), {
                        'IsMultiline': (field.length() > 80),
                        'UseHtml': False
                    })
            elif f_type == "date":
                selected_layer.setEditorWidgetSetup(field_index, widget_type)
                selected_layer.editFormConfig().setWidgetConfig(
                    field.displayName(), {
                        'display_format': 'yyyy-MM-dd',
                        'field_format': 'yyyy-MM-dd',
                        'calendar_popup': True
                    })
            elif f_type == "bool":
                selected_layer.setEditorWidgetSetup(field_index, widget_type)
                selected_layer.editFormConfig().setWidgetConfig(
                    field.displayName(), {
                        'CheckedState': 't',
                        'UncheckedState': 'f'
                    })

            selected_layer.setFieldConstraint(
                field_index, not_nullable_columns[field_index])
Exemplo n.º 2
0
    def handleValueRelations(self, new_layer, ref_native_col_num,
                             ref_foreign_col_num, selected_layer):
        """
        Create a ValueRelation widget from the field numbers for the
        selected layer
        """
        fields = new_layer.fields()
        foreign_column = fields[ref_foreign_col_num - 1].name()

        fields = selected_layer.fields()
        native_column = fields[ref_native_col_num - 1].name()

        if native_column and foreign_column:
            column_index = ref_native_col_num - 1
            new_layer_id = new_layer.id()

            widget_type = QgsEditorWidgetRegistry().findBest(
                selected_layer, column_index.displayName())

            selected_layer.setEditorWidgetSetup(column_index, widget_type)
            selected_layer.editFormConfig().setWidgetConfig(
                column_index, {
                    'Layer': new_layer_id,
                    'Key': foreign_column,
                    'Value': foreign_column,
                    "AllowMulti": False,
                    "AllowNull": False,
                    "OrderByValue": True
                })
            # Repeat the entire process for the layer which was just added
            self.identifyRelations(new_layer)
            self.alterForm(new_layer)