/** * @brief ProjectManagerTreeModel::projectActiveChanged Call this method if active project was changed. * @param newProject New active project. * @param oldProject Old active project. */ void ProjectManagerTreeModel::projectActiveChanged(QString newProject, QString oldProject) { // new project is set int rowNumber = root->getRowCount(); ProjectTreeItem* oldP = NULL; ProjectTreeItem* newP = NULL; int oldRow = 0; int newRow = 0; for(int i = 0; i < rowNumber; ++i) { ProjectTreeItem* item = root->getChild(i); if(item->getDataString() == newProject) { newP = item; newRow = i; } else if(item->getDataString() == oldProject) { oldP = item; oldRow = i; } } if(oldP != NULL) { QModelIndex index = createIndex(oldRow, 0, oldP); dataChanged(index,index); } if(newP != NULL) { QModelIndex indexNew = createIndex(newRow, 0, newP); dataChanged(indexNew,indexNew); } }
/** * @brief ProjectManagerTreeModel::projectRemoved Call this method if project with given name was removed. * @param projName Name of the old project. */ void ProjectManagerTreeModel::projectRemoved(QString projName) { int row = root->getRowCount(); for(int i = 0; i < row; ++i) { ProjectTreeItem* item = root->getChild(i); if(item->getDataString() == projName) { insertData = projName; insertType = ProjectTreeItem::PROJECT; removeRows(i, 1); return; } } }
/** * @brief ProjectManagerTreeModel::data Get data of this item on index with given role. * @param index Index what item we want. * @param role What data role we want to get. * @return QVariant data. */ QVariant ProjectManagerTreeModel::data(const QModelIndex &index, int role) const { if(!index.isValid()) return QVariant(); ProjectTreeItem* item = static_cast<ProjectTreeItem*>(index.internalPointer()); // Display role if(role == Qt::DisplayRole) // get name string return QVariant(item->getDataString()); else if(role == Qt::UserRole) // get type of this item - User roles return QVariant(item->getType()); else if(role == Qt::UserRole + 1) // get name of item (program name, so shader relative path for shader, name of project etc. { ProjectTreeItem::TYPE type = item->getType(); if(type == ProjectTreeItem::SHADER) { MetaShader* sh = static_cast<MetaShader*>(item->getData()); return QVariant(sh->getShader()); } else if(type == ProjectTreeItem::PROJECT) { MetaProject* proj = static_cast<MetaProject*>(item->getData()); return QVariant(proj->getName()); } } else if(role == Qt::UserRole + 2 && item->getType() == ProjectTreeItem::SHADER) // get project of this shader item { MetaProject* proj = static_cast<MetaProject*>(item->findProject()); return QVariant(proj->getName()); } // font role else if(role == Qt::FontRole) { if(item->isActiveProject()) { QFont font; font.setBold(true); return QVariant(font); } else return QVariant(); } else if(role == Qt::DecorationRole) // return icons for items { QIcon icon; MetaShader* sh; switch(item->getType()) { case ProjectTreeItem::DIRECTORY: icon.addFile(":/folder_blue.png"); break; case ProjectTreeItem::SHADER: sh = static_cast<MetaShader*>(item->getData()); if(sh->getType() == MetaShader::FRAGMENT) { icon.addFile(":/document_frag.png"); } else if(sh->getType() == MetaShader::VERTEX) { icon.addFile(":/document_vert.png"); } else return QVariant(); break; default: return QVariant(); } return QVariant(icon); } return QVariant(); }