2 changed files with 273 additions and 3 deletions
@ -0,0 +1,270 @@ |
|||||
|
/*! |
||||
|
@page settings_xml The XML settings format |
||||
|
@brief Documentation of the XML format used to create settings uis |
||||
|
|
||||
|
This format is used to create settings.xml files to be read by the default XML |
||||
|
QtMvvm::ISettingsSetupLoader. The files are read via that service and mapped to |
||||
|
QtMvvm::SettingsElements::Setup. |
||||
|
|
||||
|
@tableofcontents |
||||
|
|
||||
|
@section settings_xml_elements Elements |
||||
|
The possible elements of such a file |
||||
|
|
||||
|
@subsection settings_xml_elements_config SettingsConfig |
||||
|
@copybrief QtMvvm::SettingsElements::Setup |
||||
|
|
||||
|
The `<SettingsConfig>` element must be the root Element of the XML document and is mapped to the |
||||
|
QtMvvm::SettingsElements::Setup. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_config_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
----------------|-------|-----------|------------- |
||||
|
allowSearch | bool | `true` | @copybrief QtMvvm::SettingsElements::Setup::allowSearch |
||||
|
allowRestore | bool | `true` | @copybrief QtMvvm::SettingsElements::Setup::allowRestore |
||||
|
|
||||
|
@subsubsection settings_xml_elements_config_elements Content |
||||
|
Can be an arbitrary number of Elements from the following list. However, only one type of |
||||
|
element is allowed. If you for example use `<Entry>` as first child, all other children must |
||||
|
be of the same type as well: |
||||
|
|
||||
|
- (Primary:) @ref settings_xml_elements_category |
||||
|
- @ref settings_xml_elements_section |
||||
|
- @ref settings_xml_elements_group |
||||
|
- @ref settings_xml_elements_entry |
||||
|
- @ref settings_xml_elements_include |
||||
|
|
||||
|
@subsection settings_xml_elements_category Category |
||||
|
@copybrief QtMvvm::SettingsElements::Category |
||||
|
|
||||
|
The `<Category>` element is mapped to the QtMvvm::SettingsElements::Category. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_category_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
------------|---------------------------------------|---------------------------------------------------|------------- |
||||
|
title | string | `"General Settings"` | @copybrief QtMvvm::SettingsElements::Category::title |
||||
|
icon | url | `"qrc:/de/skycoder42/qtmvvm/icons/settings.svg"` | @copybrief QtMvvm::SettingsElements::Category::icon |
||||
|
tooltip | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Category::tooltip |
||||
|
frontends | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Category::frontends |
||||
|
selectors | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Category::selectors |
||||
|
|
||||
|
@subsubsection settings_xml_elements_category_elements Content |
||||
|
Can be an arbitrary number of Elements from the following list. However, only one type of |
||||
|
element is allowed. If you for example use `<Entry>` as first child, all other children must |
||||
|
be of the same type as well: |
||||
|
|
||||
|
- (Primary:) @ref settings_xml_elements_section |
||||
|
- @ref settings_xml_elements_group |
||||
|
- @ref settings_xml_elements_entry |
||||
|
- @ref settings_xml_elements_include |
||||
|
|
||||
|
@subsection settings_xml_elements_section Section |
||||
|
@copybrief QtMvvm::SettingsElements::Section |
||||
|
|
||||
|
The `<Section>` element is mapped to the QtMvvm::SettingsElements::Section. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_section_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
------------|---------------------------------------|---------------|------------- |
||||
|
title | string | `"General"` | @copybrief QtMvvm::SettingsElements::Section::title |
||||
|
icon | url | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Section::icon |
||||
|
tooltip | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Section::tooltip |
||||
|
frontends | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Section::frontends |
||||
|
selectors | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Section::selectors |
||||
|
|
||||
|
@subsubsection settings_xml_elements_section_elements Content |
||||
|
Can be an arbitrary number of Elements from the following list. However, only one type of |
||||
|
element is allowed. If you for example use `<Entry>` as first child, all other children must |
||||
|
be of the same type as well: |
||||
|
|
||||
|
- (Primary:) @ref settings_xml_elements_group |
||||
|
- @ref settings_xml_elements_entry |
||||
|
- @ref settings_xml_elements_include |
||||
|
|
||||
|
@subsection settings_xml_elements_group Group |
||||
|
@copybrief QtMvvm::SettingsElements::Group |
||||
|
|
||||
|
The `<Group>` element is mapped to the QtMvvm::SettingsElements::Group. A special property of |
||||
|
the group is, that when the `title` is not set, the group becomes hidden and instead all |
||||
|
entries that are part of the group are simply shown as normal elements in the section, instead |
||||
|
of organizing them into subgroups. If the title is empty, the tooltip is ignored, even if set. |
||||
|
The descriptors however still apply. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_group_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
------------|---------------------------------------|---------------|------------- |
||||
|
title | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Group::title |
||||
|
tooltip | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Group::tooltip |
||||
|
frontends | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Group::frontends |
||||
|
selectors | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Group::selectors |
||||
|
|
||||
|
@subsubsection settings_xml_elements_group_elements Content |
||||
|
Can be an arbitrary number of Elements from the following list. However, only one type of |
||||
|
element is allowed. If you for example use `<Entry>` as first child, all other children must |
||||
|
be of the same type as well: |
||||
|
|
||||
|
- (Primary:) @ref settings_xml_elements_entry |
||||
|
- @ref settings_xml_elements_include |
||||
|
|
||||
|
@subsection settings_xml_elements_entry Entry |
||||
|
@copybrief QtMvvm::SettingsElements::Entry |
||||
|
|
||||
|
The `<Entry>` element is mapped to the QtMvvm::SettingsElements::Entry. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_entry_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
----------------|---------------------------------------|-------------------|------------- |
||||
|
key | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Entry::key |
||||
|
type | @ref settings_xml_types_type | `"QString"` | @copybrief QtMvvm::SettingsElements::Entry::type |
||||
|
title | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Entry::title |
||||
|
tooltip | string | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Entry::tooltip |
||||
|
defaultValue | variant | <i>Invalid</i> | @copybrief QtMvvm::SettingsElements::Entry::defaultValue |
||||
|
frontends | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Entry::frontends |
||||
|
selectors | @ref settings_xml_types_descriptor | <i>Empty</i> | @copybrief QtMvvm::SettingsElements::Entry::selectors |
||||
|
|
||||
|
@subsubsection settings_xml_elements_entry_elements Content |
||||
|
Can be an arbitrary number of Elements from the following list. They can be mixed and in any |
||||
|
order |
||||
|
|
||||
|
- @ref settings_xml_elements_searchkey |
||||
|
- @ref settings_xml_elements_property |
||||
|
|
||||
|
@subsection settings_xml_elements_searchkey SearchKey |
||||
|
The `<SearchKey>` Element is converted to a string added to the |
||||
|
QtMvvm::SettingsElements::Entry::searchKeys property. A searchkey can only be a child of an |
||||
|
Entry, and all the keys are merged to a list. It's a leaf element and must contain the string |
||||
|
that becomes the search key |
||||
|
|
||||
|
@subsection settings_xml_elements_property Property |
||||
|
The `<Property>` Element is an XML description of a generic QVariant property. Each property |
||||
|
gets converted to a QString key and a QVariant value that then becomes a property of the |
||||
|
parent element. Properties can be children of entries, as well as properties and elements, as |
||||
|
long as for the last two their type is `object` |
||||
|
|
||||
|
@subsubsection settings_xml_elements_property_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
--------|-------------------------------|-------------------|------------- |
||||
|
key | string | <i>Required</i> | The key of the property |
||||
|
type | @ref settings_xml_types_type | <i>Required</i> | The type of the properties value |
||||
|
ts | bool | `false` | Specify whether the properties value should be translated. Does not apply to `list` or `object` types |
||||
|
|
||||
|
@subsubsection settings_xml_elements_property_elements Content |
||||
|
The content depend on the `type` attribute. The following tables shows which type leads |
||||
|
to which kind of child element: |
||||
|
|
||||
|
Type | Child Element |
||||
|
----------------|--------------- |
||||
|
list | An arbitrary number of @ref settings_xml_elements_element "Element" elements |
||||
|
object | An arbitrary number of @ref settings_xml_elements_property "Property" elements |
||||
|
<i>Others</i> | Has text content. The text content is interpreted as a value of the given type |
||||
|
|
||||
|
@subsection settings_xml_elements_element Element |
||||
|
The `<Element>` Element is an XML description of a generic QVariant list value. A property |
||||
|
of type `list` will have a number of elements as children that are converted to a list of |
||||
|
QVariant values. Each element can be of a different type, but typically they all are of the |
||||
|
same. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_element_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
--------|-------------------------------|-------------------|------------- |
||||
|
type | @ref settings_xml_types_type | <i>Required</i> | The type of the list element |
||||
|
ts | bool | `false` | Specify whether the element value should be translated. Does not apply to `list` or `object` types |
||||
|
|
||||
|
@subsubsection settings_xml_elements_element_elements Content |
||||
|
The content depend on the `type` attribute. The following tables shows which type leads |
||||
|
to which kind of child element: |
||||
|
|
||||
|
Type | Child Element |
||||
|
----------------|--------------- |
||||
|
list | An arbitrary number of @ref settings_xml_elements_element "Element" elements |
||||
|
object | An arbitrary number of @ref settings_xml_elements_property "Property" elements |
||||
|
<i>Others</i> | Has text content. The text content is interpreted as a value of the given type |
||||
|
|
||||
|
@subsection settings_xml_elements_include Include |
||||
|
An `<Include>` element is a reference to a different file to be included at that point. When |
||||
|
the parser reaches an include, it continues to read the included file as if it was a part of |
||||
|
the original XML document. Because of that the root element of an included settings file must |
||||
|
not be `<SettingsConfig>`, but instead the expected primary child of the current parent |
||||
|
element. For example, if the include element is a child of a `<Section>`, then the root |
||||
|
element must be a `<Group>` element (Each element that support includes as one child type |
||||
|
marked as primary). It is possible to specify an include element in another included document. |
||||
|
|
||||
|
@subsubsection settings_xml_elements_include_attribs Attributes |
||||
|
Name | Type | Default | Description |
||||
|
------------|-------|-----------|------------- |
||||
|
optional | bool | `false` | An optional include. If the file cannot be found it is skipped instead of aborting with an error |
||||
|
|
||||
|
@subsubsection settings_xml_elements_include_elements Content |
||||
|
The content of the include element must be a path to an XML file to be read as include. If the |
||||
|
path is relative, it is resolved relative to the directory of the current file (the one that |
||||
|
contains the include directive). It is possible to use a path with file selectors. If the file |
||||
|
could not be found, the parser will fail, unless the include is marked as optional. |
||||
|
|
||||
|
@section settings_xml_types Attribute and Value types |
||||
|
In the above element descriptions a number of types are specified. Most are very basic types, |
||||
|
but some need some more explanation to them. |
||||
|
|
||||
|
@subsection settings_xml_types_basic Basic Types |
||||
|
The following table lists all basic types that don't need much explanation: |
||||
|
|
||||
|
Type | Description |
||||
|
------------|------------- |
||||
|
string | A simple string |
||||
|
bool | A boolean value. Allowed values are `true` and `false` |
||||
|
url | A standard XML encoded URL |
||||
|
variant | A string that is read by C++ as string and then stored as QVariant. It thus must be a string convertible to the desired type via QVariant |
||||
|
|
||||
|
@subsection settings_xml_types_type type |
||||
|
The `type` type must be a simple string that corresponds to a C++ type name (or special ui |
||||
|
type, for entry elements). It defines the actual type of for example the defaultValue of the |
||||
|
`<Entry>` element or the contents of a `<Property>` element. Typical values would be: |
||||
|
|
||||
|
- QString or string |
||||
|
- QUrl or url |
||||
|
- int |
||||
|
- double or number |
||||
|
- bool |
||||
|
- QDateTime or datetime |
||||
|
- ... |
||||
|
|
||||
|
The type you need depends on what kind of data you want to represent via the XML elements. But |
||||
|
remember that all types you use must be convertible from a simple string. |
||||
|
|
||||
|
@subsection settings_xml_types_descriptor descriptor |
||||
|
A descripter is a simplified string of a boolean logic statement. It us used for the |
||||
|
`frontend` and `selectors` attributes of various elements. The general idea is that these |
||||
|
descriptors serve as "filters". This allows you to create one xml file for all platforms and |
||||
|
frontends, by excluding specific elements for specific configurations. See |
||||
|
QtMvvm::ISettingsSetupLoader::loadSetup. |
||||
|
|
||||
|
The allowed symbols and syntax depend on the attribute the descriptor is used for: |
||||
|
|
||||
|
@subsubsection settings_xml_types_descriptor_frontend frontend descriptor |
||||
|
The frontend is the name of the GUI implementation beeing used (For example `widgest` for |
||||
|
the QWidgets based gui, and `quick` for the Qt Quick Controls 2 gui). Must be a string of the |
||||
|
following format: |
||||
|
|
||||
|
@code |
||||
|
<frontend>[|<frontend>...] |
||||
|
@endcode |
||||
|
|
||||
|
With `<frontend>` beeing the name of the frontend the element should be visible for. It's |
||||
|
basically a list of allowed frontend as simple string. If the attribute is not specified, the |
||||
|
element is visible on all frontends. |
||||
|
|
||||
|
@subsubsection settings_xml_types_descriptor_selectors selectors descriptor |
||||
|
The selectors are active file selectors (of the QFileSelector class). By specifiying this |
||||
|
attribute you can set selectors that must be active for the element to be visible. This can |
||||
|
for example be used to show a specific element on one platform only. Must be a string of the |
||||
|
following format: |
||||
|
|
||||
|
@code |
||||
|
<selector>[&<selector>...][|<frontend>[&<selector>...]...] |
||||
|
@endcode |
||||
|
|
||||
|
With `<selector>` beeing the names of the selectors that must be set. It's basically a bunch |
||||
|
of or condiditions around and conditions. This is a very reduced boolean logic, but it should |
||||
|
be enough to create the desired filters. For example, you may want to show an element only on |
||||
|
windows or on android when the material design is used. The resulting string would be: |
||||
|
`windows|android&material`. |
||||
|
*/ |
Loading…
Reference in new issue