##// END OF EJS Templates
Adds read compatibility for local AMDA server...
Adds read compatibility for local AMDA server The local AMDA server uses another regex than the default server to read the units in x. We manage the compatibility by adding in the parser the possibility of testing several regexes to read a property

File last commit:

r1036:9c3bb5e93c54
r1121:98220c931c83
Show More
DataSourceItem.h
154 lines | 4.9 KiB | text/x-c | CLexer
#ifndef SCIQLOP_DATASOURCEITEM_H
#define SCIQLOP_DATASOURCEITEM_H
#include "CoreGlobal.h"
#include <Common/spimpl.h>
#include <QVariant>
#include <QVector>
class DataSourceItemAction;
/**
* Possible types of an item
*/
enum class DataSourceItemType { NODE, PRODUCT, COMPONENT };
/**
* @brief The DataSourceItem class aims to represent a structure element of a data source.
* A data source has a tree structure that is made up of a main DataSourceItem object (root)
* containing other DataSourceItem objects (children).
* For each DataSourceItem can be associated a set of data representing it.
*/
class SCIQLOP_CORE_EXPORT DataSourceItem {
public:
/// Key associated with the name of the item
static const QString NAME_DATA_KEY;
/// Key associated with the plugin of the item
static const QString PLUGIN_DATA_KEY;
explicit DataSourceItem(DataSourceItemType type, const QString &name);
explicit DataSourceItem(DataSourceItemType type, QVariantHash data = {});
std::unique_ptr<DataSourceItem> clone() const;
/// @return the actions of the item as a vector
QVector<DataSourceItemAction *> actions() const noexcept;
/**
* Adds an action to the item. The item takes ownership of the action, and the action is
* automatically associated to the item
* @param action the action to add
*/
void addAction(std::unique_ptr<DataSourceItemAction> action) noexcept;
/**
* Adds a child to the item. The item takes ownership of the child.
* @param child the child to add
*/
void appendChild(std::unique_ptr<DataSourceItem> child) noexcept;
/**
* Returns the item's child associated to an index
* @param childIndex the index to search
* @return a pointer to the child if index is valid, nullptr otherwise
*/
DataSourceItem *child(int childIndex) const noexcept;
int childCount() const noexcept;
/**
* Get the data associated to a key
* @param key the key to search
* @return the data found if key is valid, default QVariant otherwise
*/
QVariant data(const QString &key) const noexcept;
/// Gets all data
QVariantHash data() const noexcept;
/**
* Merge in the item the source item passed as parameter.
*
* The merge is done by adding as child of the item the complete tree represented by the source
* item. If a part of the tree already exists in the item (based on the name of the nodes), it
* is merged by completing the existing tree by items "leaves" (products, components or nodes
* with no child).
*
* For example, with item representing the tree:
* R (root node)
* - N1 (node)
* -- N11 (node)
* --- P1 (product)
* --- P2 (product)
* - N2 (node)
*
* and the source item representing the tree:
* N1 (root node)
* - N11 (node)
* -- P3 (product)
* - N12 (node)
*
* The leaves of the source item to merge into the item are N1/N11/P3 and N1/N12 => we therefore
* have the following merge result:
* R
* - N1
* -- N11
* --- P1
* --- P2
* --- P3 (added leaf)
* -- N12 (added leaf)
*
* @param item the source item
* @remarks No control is performed on products or components that are merged into the same tree
* part (two products or components may have the same name)
* @remarks the merge is made by copy (source item is not changed and still exists after the
* operation)
*/
void merge(const DataSourceItem &item);
bool isRoot() const noexcept;
QString name() const noexcept;
/**
* Get the item's parent
* @return a pointer to the parent if it exists, nullptr if the item is a root
*/
DataSourceItem *parentItem() const noexcept;
/**
* Gets the item's root
* @return the top parent, the item itself if it's the root item
*/
const DataSourceItem &rootItem() const noexcept;
/**
* Sets or appends a value to a key
* @param key the key
* @param value the value
* @param append if true, the value is added to the values already existing for the key,
* otherwise it replaces the existing values
*/
void setData(const QString &key, const QVariant &value, bool append = false) noexcept;
DataSourceItemType type() const noexcept;
/**
* @brief Searches the first child matching the specified data.
* @param data The data to search.
* @param recursive So the search recursively.
* @return the item matching the data or nullptr if it was not found.
*/
DataSourceItem *findItem(const QVariantHash &data, bool recursive);
bool operator==(const DataSourceItem &other);
bool operator!=(const DataSourceItem &other);
private:
class DataSourceItemPrivate;
spimpl::unique_impl_ptr<DataSourceItemPrivate> impl;
};
#endif // SCIQLOP_DATASOURCEITEMMODEL_H