-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor edit form configuration out of QgsVectorLayer
- Loading branch information
Showing
25 changed files
with
1,156 additions
and
668 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,253 @@ | ||
/*************************************************************************** | ||
qgseditformconfig.sip | ||
------------------- | ||
begin : Nov 18, 2015 | ||
copyright : (C) 2015 by Matthias Kuhn | ||
email : matthias at opengis dot ch | ||
***************************************************************************/ | ||
|
||
/*************************************************************************** | ||
* * | ||
* This program is free software; you can redistribute it and/or modify * | ||
* it under the terms of the GNU General Public License as published by * | ||
* the Free Software Foundation; either version 2 of the License, or * | ||
* (at your option) any later version. * | ||
* * | ||
***************************************************************************/ | ||
|
||
class QgsEditFormConfig : QObject | ||
{ | ||
%TypeHeaderCode | ||
#include <qgseditformconfig.h> | ||
%End | ||
|
||
public: | ||
/** The different types to layout the attribute editor. */ | ||
enum EditorLayout | ||
{ | ||
GeneratedLayout = 0, //!< Autogenerate a simple tabular layout for the form | ||
TabLayout = 1, //!< Use a layout with tabs and group boxes. Needs to be configured. | ||
UiFileLayout = 2 //!< Load a .ui file for the layout. Needs to be configured. | ||
}; | ||
|
||
struct GroupData | ||
{ | ||
GroupData(); | ||
GroupData( const QString& name, const QList<QString>& fields ); | ||
QString mName; | ||
QList<QString> mFields; | ||
}; | ||
|
||
struct TabData | ||
{ | ||
TabData(); | ||
TabData( const QString& name, const QList<QString>& fields, const QList<QgsEditFormConfig::GroupData>& groups ); | ||
QString mName; | ||
QList<QString> mFields; | ||
QList<QgsEditFormConfig::GroupData> mGroups; | ||
}; | ||
|
||
/** | ||
* Types of feature form suppression after feature creation | ||
*/ | ||
enum FeatureFormSuppress | ||
{ | ||
SuppressDefault = 0, //!< Use the application-wide setting | ||
SuppressOn = 1, //!< Suppress feature form | ||
SuppressOff = 2 //!< Do not suppress feature form | ||
}; | ||
|
||
explicit QgsEditFormConfig( QObject* parent = nullptr ); | ||
|
||
/** | ||
* This is only useful in combination with EditorLayout::TabLayout. | ||
* | ||
* Adds a new tab to the layout. Should be a QgsAttributeEditorContainer. | ||
*/ | ||
void addTab( QgsAttributeEditorElement* data ); | ||
|
||
/** | ||
* Returns a list of tabs for EditorLayout::TabLayout. | ||
*/ | ||
QList< QgsAttributeEditorElement* > tabs(); | ||
|
||
/** | ||
* Clears all the tabs for the attribute editor form with EditorLayout::TabLayout. | ||
*/ | ||
void clearTabs(); | ||
|
||
/** Get the active layout style for the attribute editor for this layer */ | ||
EditorLayout layout(); | ||
|
||
/** Set the active layout style for the attribute editor for this layer */ | ||
void setLayout( EditorLayout editorLayout ); | ||
|
||
/** Get path to the .ui form. Only meaningful with EditorLayout::UiFileLayout. */ | ||
QString uiForm() const; | ||
|
||
/** | ||
* Set path to the .ui form. | ||
* When a string is provided, the layout style will be set to EditorLayout::UiFileLayout, | ||
* if an empty or a null string is provided, the layout style will be set to | ||
* EditorLayout::GeneratedLayout. | ||
*/ | ||
void setUiForm( const QString& ui ); | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// Widget stuff | ||
|
||
/** | ||
* Set the editor widget type for a field | ||
* | ||
* QGIS ships the following widget types, additional types may be available depending | ||
* on plugins. | ||
* | ||
* <ul> | ||
* <li>CheckBox (QgsCheckboxWidgetWrapper)</li> | ||
* <li>Classification (QgsClassificationWidgetWrapper)</li> | ||
* <li>Color (QgsColorWidgetWrapper)</li> | ||
* <li>DateTime (QgsDateTimeEditWrapper)</li> | ||
* <li>Enumeration (QgsEnumerationWidgetWrapper)</li> | ||
* <li>FileName (QgsFileNameWidgetWrapper)</li> | ||
* <li>Hidden (QgsHiddenWidgetWrapper)</li> | ||
* <li>Photo (QgsPhotoWidgetWrapper)</li> | ||
* <li>Range (QgsRangeWidgetWrapper)</li> | ||
* <li>RelationReference (QgsRelationReferenceWidgetWrapper)</li> | ||
* <li>TextEdit (QgsTextEditWrapper)</li> | ||
* <li>UniqueValues (QgsUniqueValuesWidgetWrapper)</li> | ||
* <li>UuidGenerator (QgsUuidWidgetWrapper)</li> | ||
* <li>ValueMap (QgsValueMapWidgetWrapper)</li> | ||
* <li>ValueRelation (QgsValueRelationWidgetWrapper)</li> | ||
* <li>WebView (QgsWebViewWidgetWrapper)</li> | ||
* </ul> | ||
* | ||
* @param attrIdx Index of the field | ||
* @param widgetType Type id of the editor widget to use | ||
*/ | ||
void setWidgetType( int fieldIdx, const QString& widgetType ); | ||
|
||
/** | ||
* Get the id for the editor widget used to represent the field at the given index | ||
* | ||
* @param fieldIdx The index of the field | ||
* | ||
* @return The id for the editor widget or a NULL string if not applicable | ||
*/ | ||
QString widgetType( int fieldIdx ) const; | ||
|
||
/** | ||
* Get the id for the editor widget used to represent the field at the given index | ||
* | ||
* @param fieldName The name of the field | ||
* | ||
* @return The id for the editor widget or a NULL string if not applicable | ||
* | ||
* @note python method name editorWidgetV2ByName | ||
*/ | ||
QString widgetType( const QString& fieldName ) const; | ||
|
||
/** | ||
* Set the editor widget config for a field. | ||
* | ||
* Python: Will accept a map. | ||
* | ||
* Example: | ||
* \code{.py} | ||
* layer.setEditorWidgetV2Config( 1, { 'Layer': 'otherlayerid_1234', 'Key': 'Keyfield', 'Value': 'ValueField' } ) | ||
* \endcode | ||
* | ||
* @param attrIdx Index of the field | ||
* @param config The config to set for this field | ||
* | ||
* @see setEditorWidgetV2() for a list of widgets and choose the widget to see the available options. | ||
*/ | ||
void setWidgetConfig( int attrIdx, const QgsEditorWidgetConfig& config ); | ||
|
||
/** | ||
* Get the configuration for the editor widget used to represent the field at the given index | ||
* | ||
* @param fieldIdx The index of the field | ||
* | ||
* @return The configuration for the editor widget or an empty config if the field does not exist | ||
*/ | ||
QgsEditorWidgetConfig widgetConfig( int fieldIdx ) const; | ||
|
||
/** | ||
* Get the configuration for the editor widget used to represent the field with the given name | ||
* | ||
* @param fieldName The name of the field | ||
* | ||
* @return The configuration for the editor widget or an empty config if the field does not exist | ||
* | ||
* @note python method name is editorWidgetV2ConfigByName | ||
*/ | ||
QgsEditorWidgetConfig widgetConfig( const QString& fieldName ) const; | ||
|
||
/** | ||
* If this returns false, the widget at the given index will always be read-only. | ||
*/ | ||
bool fieldEditable( int idx ); | ||
|
||
/** | ||
* If set to false, the widget at the given index will be read-only, regardless of the | ||
* layer's editable state and data provider capacities. | ||
* If it is set to true, the widget's editable state will be synchronized with the layer's | ||
* edit state. | ||
*/ | ||
void setFieldEditable( int idx, bool editable ); | ||
|
||
/** | ||
* If this returns true, the widget at the given index will receive its label on the previous line | ||
* while if it returns false, the widget will receive its label on the left hand side. | ||
* Labeling on top leaves more horizontal space for the widget itself. | ||
**/ | ||
bool labelOnTop( int idx ); | ||
|
||
/** | ||
* If this is set to true, the widget at the given index will receive its label on | ||
* the previous line while if it is set to false, the widget will receive its label | ||
* on the left hand side. | ||
* Labeling on top leaves more horizontal space for the widget itself. | ||
**/ | ||
void setLabelOnTop( int idx, bool onTop ); | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// Python stuff | ||
|
||
|
||
/** Get python function for edit form initialization */ | ||
QString initFunction() const; | ||
|
||
/** Set python function for edit form initialization */ | ||
void setInitFunction( const QString& function ); | ||
|
||
/** Get python code for edit form initialization */ | ||
QString initCode() const; | ||
|
||
/** Set python code for edit form initialization */ | ||
void setInitCode( const QString& code ); | ||
|
||
/** Return if python code shall be loaded for edit form initialization */ | ||
bool useInitCode() const; | ||
|
||
/** Set if python code shall be used for edit form initialization */ | ||
void setUseInitCode( const bool useCode ); | ||
|
||
FeatureFormSuppress suppress() const; | ||
void setSuppress( FeatureFormSuppress s ); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
a50f2d0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@m-kuhn I think this might have lead to a regression whereas on master builds, opening the attribute dialog sets dual view mode (even though the default view, rows & columns, is toggled on in the bottom-right set of buttons).
a50f2d0
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't know if it was caused by this, but it's fixed now.