6 #include <QApplication>
12 json[
"parentId"] = (int) mParentId;
13 json[
"id"] = (int) mId;
33 if (mDirectory)
return mDirectory->
id();
34 if (mContext)
return mContext->
id();
40 if (mDirectory)
return mDirectory->
name();
41 if (mContext)
return mContext->
name();
58 return mDirectory->
name();
60 return mDirectory->
id();
72 return mContext->
id();
113 if (!parent)
return 0;
119 return mDirectory !=
nullptr;
124 return mContext !=
nullptr;
191 types <<
"contexttreemodel/item";
197 return getItemInternal(
mRootItem, directoryId,
true);
202 return getItemInternal(
mRootItem, contextId,
false);
212 if (ctxItem->
getId() ==
id && isDirectory)
214 BaseTreeItem* bti = getItemInternal(childItem,
id, isDirectory);
218 else if (ctxItem->
isContext() && !isDirectory)
220 if (ctxItem->
getId() ==
id)
230 parentItem = mCurrentDirectory;
241 mCurrentDirectory = item;
248 mDirectoryList.push_back(directory);
272 else if(mCurrentDirectory)
273 finalParent = mCurrentDirectory;
285 mContextMap.insert({context, item});
301 int row = item->
row();
304 parent->removeChild(item);
309 std::map<GraphContext *,ContextTreeItem *>::iterator it;
310 it = mContextMap.find(context);
311 mContextMap.erase(it);
318 if(item == mCurrentDirectory) {
319 mCurrentDirectory =
nullptr;
324 for (
int i = 0; i < childCopy.
length(); i++) {
345 int row = item->
row();
348 parent->removeChild(item);
351 auto it = std::find(mDirectoryList.begin(), mDirectoryList.end(), directory);
352 if (it != mDirectoryList.end()) {
353 mDirectoryList.erase(it);
368 if (
static_cast<ContextTreeItem*
>(item)->isDirectory())
return nullptr;
370 for (
auto &i : mContextMap) {
371 if (i.second == item) {
381 mContextList.clear();
382 for (
auto it = mContextMap.begin(); it != mContextMap.end(); ++it) {
383 mContextList.push_back(it->first);
390 return mDirectoryList;
396 if(currentItem ==
nullptr)
397 mCurrentDirectory =
nullptr;
402 mCurrentDirectory = currentItem;
407 return mCurrentDirectory;
412 if (!itemToMove || !newParent )
return false;
420 if (!oldParent)
return false;
422 int currentRow = itemToMove->
row();
433 void ContextTreeModel::dumpRecursion(
ContextTreeItem *parent,
int level)
const
436 for (
int i=0; i<level; i++)
440 if (
parent->isDirectory())
441 std::cerr <<
parent->directory()->name().toStdString() << std::endl;
443 std::cerr <<
"[" <<
parent->context()->name().toStdString() <<
"] " <<
parent->context()->id() << std::endl;
447 dumpRecursion(
dynamic_cast<ContextTreeItem*
>(cld), level+1);
457 std::vector<u32> ids;
463 ids.push_back(cti->
getId());
476 std::vector<u32> ids;
482 ids.push_back(cti->
getId());
(Future) Base class for all tree models related to the details widget.
virtual int getRowForChild(const BaseTreeItem *child) const
virtual QList< BaseTreeItem * > getChildren() const
virtual bool removeChild(BaseTreeItem *child)
virtual BaseTreeItem * getParent() const
virtual int getChildCount() const
virtual void appendChild(BaseTreeItem *child)
The BaseTreeModel implements generic standard functions of a tree model.
QModelIndex getIndexFromItem(BaseTreeItem *item) const
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
void insertChildItem(BaseTreeItem *childItem, BaseTreeItem *parentItem=nullptr, int row=-1)
BaseTreeItem * getRootItem() const
void setHeaderLabels(const QStringList &label)
BaseTreeItem * getItemFromIndex(QModelIndex index) const
void writeToFile(QJsonObject &json)
QVariant getData(int column) const override
QDateTime getTimestamp() const
ContextTreeItem(GraphContext *context)
int getColumnCount() const override
GraphContext * context() const
ContextDirectory * directory() const
void setData(QList< QVariant > data) override
void appendData(QVariant data) override
void setDataAtColumn(int column, QVariant &data) override
bool moveItem(ContextTreeItem *itemToMove, BaseTreeItem *newParent, int row=-1)
std::vector< u32 > getChildDirectoriesOf(u32 directoryId)
void removeDirectory(ContextDirectory *directory)
QStringList mimeTypes() const override
void setCurrentDirectory(ContextTreeItem *currentItem)
Qt::ItemFlags flags(const QModelIndex &index) const override
void directoryCreatedSignal(ContextTreeItem *item)
const QVector< GraphContext * > & list()
QVariant data(const QModelIndex &inddex, int role=Qt::DisplayRole) const override
std::vector< u32 > getChildContextsOf(u32 directoryId)
QModelIndex getIndexFromContext(GraphContext *context) const
BaseTreeItem * getDirectory(u32 directoryId) const
ContextTreeItem * getCurrentDirectory()
void removeContext(GraphContext *context)
ContextDirectory * addDirectory(QString name, BaseTreeItem *parentItem, u32 id)
void addContext(GraphContext *context, BaseTreeItem *parent=nullptr)
ContextTreeModel(QObject *parent=nullptr)
const QVector< ContextDirectory * > & directoryList()
BaseTreeItem * getContext(u32 contextId) const
Logical container for modules, gates, and nets.
u32 getExclusiveModuleId() const
QDateTime getTimestamp() const
QString getNameWithDirtyState() const
static SelectionDetailsIconProvider * instance()
virtual void setObject(const UserActionObject &obj)
The UserActionObject class represents a single object used in UserAction.
QString dateToLocaleString(const QDateTime &dt)
void beginInsertRows(const QModelIndex &parent, int first, int last)
void beginRemoveRows(const QModelIndex &parent, int first, int last)
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector< int > &roles)
void * internalPointer() const const
bool isValid() const const
const QObjectList & children() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QObject * parent() const const