Skycoder42
7 years ago
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