24 : QAbstractTableModel(parent)
35 if (!parent.isValid()) {
45 if (!parent.isValid()) {
56 if (index.isValid()) {
59 if (role == Qt::DisplayRole) {
62 for (QString
const& i : TableItem->
GetData()) {
63 static QString space{
", " };
64 Data.append(i).append(space);
66 Data.remove(Data.length() - 2, 2);
68 return QVariant(Data);
71 if (role == Qt::ToolTipRole) {
74 if (role == Qt::FontRole) {
76 return QFont(
"Helvetica", 10, -1,
false);
78 return QFont(
"Courier", 10, QFont::Bold);
80 return QFont(
"SansSerif", 10, QFont::Bold);
84 if (role == Qt::ForegroundRole) {
99 if (role == Qt::BackgroundRole) {
101 if (attr_node !=
nullptr) {
102 auto val = attr_node->GetData();
103 if (val.size() == 1 && val[0].toStdString() == attr_node->GetAttribute().p_default_value) {
124 if (!index.isValid() || role != Qt::EditRole) {
130 QStringList OldDataList = TableItem->
GetData();
132 QStringList NewDataList = value.toStringList();
134 if (NewDataList == OldDataList) {
158 if (role == Qt::DisplayRole) {
159 if (orientation == Qt::Horizontal) {
162 if (orientation == Qt::Vertical) {
167 if (role == Qt::FontRole) {
168 return QFont(
"Helvetica [Cronyx]", 10);
177 if (index.isValid()) {
182 return (Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled);
186 return (Qt::ItemIsEnabled | Qt::ItemIsSelectable);
192 return Qt::CopyAction;
199 types <<
"application/vnd.text.list";
205 Qt::DropAction action,
208 const QModelIndex& parent)
216 if (action == Qt::IgnoreAction) {
220 if (!
data->hasFormat(
"application/vnd.text.list")) {
225 QByteArray encodedData =
data->data(
"application/vnd.text.list");
227 QDataStream stream(&encodedData, QIODevice::ReadOnly);
229 QList<QStringList> newItems;
231 while (!stream.atEnd()) {
237 for (
int i = 0; i < newItems.size(); ++i) {
238 if (newItems.at(0).at(1) != newItems.at(i).at(1)) {
262 if (
treenode* NodeClass = dbaccess_guard->getnode(cname)) {
263 std::vector<treenode*> classnodes{ NodeClass };
265 if (include_derived) {
267 for (std::string
const& sbcname : classinfo.
p_subclasses) {
268 if (
treenode* sbcnode = dbaccess_guard->getnode(sbcname)) {
269 classnodes.push_back(sbcnode);
277 for (
treenode* clelement : classnodes) {
292QList<dbe::models::table::type_datum*>
301 std::vector<dunedaq::conffwk::attribute_t>
const& attributes = cdef.
p_attributes;
302 std::vector<dunedaq::conffwk::relationship_t>
const& relations = cdef.
p_relationships;
304 assert(attributes.size() + relations.size() < 1025);
305 std::bitset<1024> hindex;
311 hindex.set(column++,
this_headers.contains(QString::fromStdString(attr.p_name)));
315 hindex.set(column++,
this_headers.contains(QString::fromStdString(rel.p_name)));
320 QList<TableNode*> Row;
327 std::size_t column = 0;
333 if (hindex[column++]) {
338 values.append(nodevalues->GetData(0).toString());
375 if (!
this_headers.contains(QString::fromStdString(i.p_name))) {
381 if (!
this_headers.contains(QString::fromStdString(i.p_name))) {
390 reset(BuildList.at(0).at(1));
401 for (
const QStringList& i : BuildList) {
402 QString name = i.at(0);
444 if (Index.isValid()) {
468 if (index.isValid()) {
469 return this_objects[index.row()].ref();
472 throw daq::dbe::cannot_handle_invalid_qmodelindex(
ERS_HERE);
478 if (index.isValid()) {
479 return class_type_info;
482 return dunedaq::conffwk::class_t();
496 if (obj.class_name() == this_class_name.toStdString() or
501 if (handlernode ==
nullptr) {
502 handlernode =
new ObjectNode(obj,
false, handlerclass);
505 emit layoutAboutToBeChanged();
510 auto sit = this_structure.begin();
511 auto it = this_objects.begin();
513 for (; it != this_objects.end() and sit != this_structure.end() and it->UID() < handlerobj.UID(); ++it, ++sit) {
516 this_structure.insert(++sit, createrow(handlernode));
518 this_objects.insert(++it, handlerobj);
523 emit layoutChanged();
530 if (index.isValid()) {
532 this->removeRows(index.row(), 1, index.parent());
533 }
catch (daq::dbe::ObjectChangeWasNotSuccessful
const& err) {
541 if (index.isValid()) {
542 type_datum* element = getnode(index);
543 element->resetdata(QStringList(QString::fromStdString(obj.ref().UID())));
544 this_objects[index.row()] = obj.ref();
545 emit dataChanged(index, index);
552 if (obj.class_name() == this_class_name.toStdString() or
558 auto sit = this_structure.begin();
559 auto it = this_objects.begin();
563 for (; it != this_objects.end() and sit != this_structure.end() and it->UID() != handlerobj.UID(); ++it, ++sit)
568 for (TableNode* x : *sit) {
573 *sit = createrow(handlernode);
575 int row = index.row() == 0 ? 0 : index.row() - 1;
577 int column = index.column() == 0 ? 0 : index.column() - 1;
579 emit dataChanged(createIndex(row, column), createIndex(row + 1, column + 1));
593 for (
int row = 0; row < this_objects.size(); ++row) {
594 dref ListElement = this_objects.at(row);
596 if (ListElement.UID() == obj.UID()) {
597 return this->index(row, 0);
601 return QModelIndex();
609 beginRemoveRows(parent, row, row + count - 1);
611 for (; count != 0; --count) {
612 this_structure.removeOne(this_structure.at(row + count - 1));
613 this_objects.removeAt(row + count - 1);
ObjectNode(dref ObjectData, bool IsCopy, treenode *ParentNode)
static QColor TableRelationshipBackground
static QColor FileReadOnlyForeground
static QColor TableColorAttribute
Including DBE.
static QColor TableAttributeBackground
static QColor DefaultValueBackground
static QColor TableColorRelationship
static QColor FileReadOnlyBackground
TableAttributeNode(dunedaq::conffwk::attribute_t Attribute, const QStringList &NodeData)
TableNode(QStringList const &NodeData, const QVariant &tooltip)
Including DBE.
const QVariant & get_tooltip() const
virtual QStringList GetData() const
TableRelationshipNode(dunedaq::conffwk::relationship_t Relationship, const QStringList &NodeData)
static cptr< datahandler > gethandler()
static bool check_file_rw(const QString &FileName)
static bool derived(std::string const &fromclass, std::string const &aclass)
static dunedaq::conffwk::class_t definition(std::string const &cn, bool direct_only)
static treenode * findchild(treenode *top, QString const &name)
std::string contained_in() const
dunedaq::conffwk::ConfigObject & ref(bool check_null=true) const
static configobject::tref get(dbe::cokey const &desc)
void update_multiple_objects(std::vector< type_object_info > const &)
void model_common_connections()
table(QObject *parent=nullptr)
Including QT Headers.
QList< type_datum * > createrow(treenode const *)
TableNode * getnode(const QModelIndex &Index) const
void reset(QString const &)
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, type_index const &parent) override
QList< dbe::dref > * GetTableObjects()
Qt::DropActions supportedDropActions() const override
int rowCount(type_index const &parent) const override
QStringList mimeTypes() const override
void setheader(dunedaq::conffwk::class_t const &)
QVariant data(type_index const &index, int role) const override
bool BuildTableFromObject(QList< QStringList > BuildList)
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
Qt::ItemFlags flags(type_index const &index) const override
bool setData(type_index const &index, const QVariant &value, int role) override
QString get_class_name() const
QList< QList< TableNode * > > this_structure
void slot_data_dropped(QMimeData const &, Qt::DropAction)
tref GetTableObject(int ObjectIndex) const
int columnCount(type_index const &parent) const override
bool BuildTableFromClass(const QString &ClassName, bool BuildSubClasses=false)
QList< dref > this_objects
void objectsUpdated(const std::vector< dbe::dref > &objects)
virtual tref GetObject() const
QList< treenode * > GetChildren() const
virtual QVariant GetData(const int Column, int role=Qt::DisplayRole) const
#define MODEL_COMMON_INTERFACE_LOOKUP_IMPL(classname)
#define MODEL_REMOVE_ROWS_DEF(classname)
#define MODEL_COMMON_INTERFACE_RENAME_THAT_OBJ_IMPL(classname)
#define MODEL_COMMON_INTERFACE_UPDATE_THAT_OBJ_IMPL(classname)
#define MODEL_COMMON_INTERFACE_DELETE_THAT_OBJ_IMPL(classname)
#define MODEL_COMMON_INTERFACE_SLOTS_DEF(classname)
#define MODEL_COMMON_INTERFACE_CREATE_THAT_OBJ_IMPL(classname)
void relation(dbe::inner::configobject::tref src, dunedaq::conffwk::relationship_t const &edge, QStringList const &targets)
void attribute(dbe::inner::configobject::tref objectref, dunedaq::conffwk::attribute_t const &attribute_info, QStringList const &attribute_values)
std::string const parse(ers::Issue const &)
inner::configobject::tref tref
config_object_description dref
virtual type_class_info getclass(type_index const &index) const =0
virtual type_object_ref getobject(type_index const &index) const =0
virtual QAbstractItemModel * ReturnSourceModel() const =0
const std::vector< attribute_t > p_attributes
const std::vector< relationship_t > p_relationships
const std::vector< std::string > p_subclasses
std::string p_description