15 #ifndef BORNAGAIN_GUI_COREGUI_MODELS_SESSIONMODEL_H
16 #define BORNAGAIN_GUI_COREGUI_MODELS_SESSIONMODEL_H
21 #include <QStringList>
33 virtual Qt::ItemFlags
flags(
const QModelIndex&
index)
const;
34 virtual QVariant
data(
const QModelIndex&
index,
int role)
const;
35 virtual QVariant
headerData(
int section, Qt::Orientation orientation,
int role)
const;
38 virtual QModelIndex
index(
int row,
int column,
const QModelIndex&
parent)
const;
39 virtual QModelIndex
parent(
const QModelIndex& child)
const;
41 virtual bool setHeaderData(
int, Qt::Orientation,
const QVariant&,
int = Qt::EditRole);
48 virtual QMimeData*
mimeData(
const QModelIndexList& indexes)
const;
49 virtual bool canDropMimeData(
const QMimeData*
data, Qt::DropAction action,
int row,
int column,
50 const QModelIndex&
parent)
const;
51 virtual bool dropMimeData(
const QMimeData*
data, Qt::DropAction action,
int row,
int column,
52 const QModelIndex&
parent);
67 template <
typename T> T*
insertItem(
const QModelIndex&
parent,
int row = -1, QString tag =
"");
90 const QString& tag =
"");
98 template <
typename T = SessionItem> T*
topItem()
const;
99 template <
typename T = SessionItem> QVector<T*>
topItems()
const;
100 template <
typename T = SessionItem>
101 QVector<T*>
topItems(std::function<
bool(
const T&)> accept)
const;
116 const QString& tag =
"");
135 template <
typename T>
138 return static_cast<T*
>(
copy(item_to_copy, new_parent, tag));
143 auto items = topItems<T>();
144 return items.isEmpty() ? nullptr : items.front();
151 QModelIndex parentIndex;
152 for (
int i_row = 0; i_row <
rowCount(parentIndex); ++i_row) {
153 QModelIndex itemIndex =
index(i_row, 0, parentIndex);
155 result.push_back(
item);
165 QModelIndex parentIndex;
166 for (
int i_row = 0; i_row <
rowCount(parentIndex); ++i_row) {
167 QModelIndex itemIndex =
index(i_row, 0, parentIndex);
170 result.push_back(
item);
183 return Qt::MoveAction;
188 return Qt::MoveAction;
Defines class SessionFlags.
Defines class SessionItem.
Defines reader and writer classes for SessionModel.
The service to collect messages from different senders.
QVariant value() const
Get value.
SessionItem * parent() const
Returns parent of this item.
SessionModel * model() const
Returns model of this item.
T * item(const QString &tag) const
QString modelType() const
Get model type.
QString getModelName() const
virtual QModelIndex parent(const QModelIndex &child) const
T * topItem() const
Returns first item in list of topItems.
T * copyItem(const T *item_to_copy, SessionItem *new_parent=0, const QString &tag="")
SessionItem * copy(const SessionItem *item_to_copy, SessionItem *new_parent=0, const QString &tag="")
Copy given item to the new_parent at given row.
virtual void writeTo(QXmlStreamWriter *writer, SessionItem *parent=0)
virtual Qt::ItemFlags flags(const QModelIndex &index) const
SessionItem * itemForIndex(const QModelIndex &index) const
void setDraggedItemType(const QString &type)
T * insertItem(SessionItem *parent=nullptr, int row=-1, QString tag="")
virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
virtual QVector< SessionItem * > nonXMLItems() const
QString m_dragged_item_type
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
QVector< T * > topItems() const
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const
QString getModelTag() const
virtual bool setData(const QModelIndex &index, const QVariant &value, int role)
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const
virtual int columnCount(const QModelIndex &parent) const
virtual int rowCount(const QModelIndex &parent) const
virtual bool setHeaderData(int, Qt::Orientation, const QVariant &, int=Qt::EditRole)
virtual bool removeRows(int row, int count, const QModelIndex &parent)
void load(const QString &filename="")
SessionModel(QString model_tag, QObject *parent=0)
void removeItem(SessionItem *item)
SessionItem * insertNewItem(QString model_type, SessionItem *parent_item=nullptr, int row=-1, QString tag="")
virtual QStringList mimeTypes() const
void save(const QString &filename="")
virtual void initFrom(SessionModel *model, SessionItem *parent)
SessionItem * moveItem(SessionItem *item, SessionItem *new_parent=0, int row=-1, const QString &tag="")
Move given parameterized item to the new_parent at given row.
QString m_model_tag
model tag (SampleModel, InstrumentModel)
SessionItem * rootItem() const
virtual QVariant data(const QModelIndex &index, int role) const
QVector< QString > acceptableDefaultItemTypes(const QModelIndex &parent) const
virtual QMimeData * mimeData(const QModelIndexList &indexes) const
virtual void readFrom(QXmlStreamReader *reader, MessageService *messageService=0)
virtual Qt::DropActions supportedDragActions() const
void setRootItem(SessionItem *root)
SessionItem * m_root_item
QModelIndex indexOfItem(SessionItem *item) const
virtual SessionModel * createCopy(SessionItem *parent=0)
virtual Qt::DropActions supportedDropActions() const
std::string filename(const std::string &path)
Returns path without directory part ("Foo/Bar/Doz.int.gz" -> "Doz.int.gz")