#include "maplistmodels.h" #include "project.h" /* // QIcon mapFolderIcon; // mapFolderIcon.addFile(QStringLiteral(":/icons/folder_closed_map.ico"), QSize(), QIcon::Normal, QIcon::Off); // mapFolderIcon.addFile(QStringLiteral(":/icons/folder_map.ico"), QSize(), QIcon::Normal, QIcon::On); // QIcon folderIcon; // folderIcon.addFile(QStringLiteral(":/icons/folder_closed.ico"), QSize(), QIcon::Normal, QIcon::Off); // //folderIcon.addFile(QStringLiteral(":/icons/folder.ico"), QSize(), QIcon::Normal, QIcon::On); // ui->mapList->setUpdatesEnabled(false); // mapListModel->clear(); // mapGroupItemsList->clear(); // QStandardItem *root = mapListModel->invisibleRootItem(); // switch (mapSortOrder) // { // case MapSortOrder::Group: // for (int i = 0; i < project->groupNames.length(); i++) { // QString group_name = project->groupNames.value(i); // QStandardItem *group = new QStandardItem; // group->setText(group_name); // group->setIcon(mapFolderIcon); // group->setEditable(false); // group->setData(group_name, Qt::UserRole); // group->setData("map_group", MapListUserRoles::TypeRole); // group->setData(i, MapListUserRoles::GroupRole); // root->appendRow(group); // mapGroupItemsList->append(group); // QStringList names = project->groupedMapNames.value(i); // for (int j = 0; j < names.length(); j++) { // QString map_name = names.value(j); // QStandardItem *map = createMapItem(map_name, i, j); // group->appendRow(map); // mapListIndexes.insert(map_name, map->index()); // } // } // break; // mapListModel = new QStandardItemModel; // mapGroupItemsList = new QList; // mapListProxyModel = new FilterChildrenProxyModel; // mapListProxyModel->setSourceModel(mapListModel); // ui->mapList->setModel(mapListProxyModel); // createMapItem: // QStandardItem *map = new QStandardItem; // map->setText(QString("[%1.%2] ").arg(groupNum).arg(inGroupNum, 2, 10, QLatin1Char('0')) + mapName); // map->setIcon(*mapIcon); // map->setEditable(false); // map->setData(mapName, Qt::UserRole); // map->setData("map_name", MapListUserRoles::TypeRole); // return map; // scrolling: if (scrollTreeView) { // Make sure we clear the filter first so we actually have a scroll target /// !TODO // mapListProxyModel->setFilterRegularExpression(QString()); // ui->mapList->setCurrentIndex(mapListProxyModel->mapFromSource(mapListIndexes.value(map_name))); // ui->mapList->scrollTo(ui->mapList->currentIndex(), QAbstractItemView::PositionAtCenter); } // ui->mapList->setExpanded(mapListProxyModel->mapFromSource(mapListIndexes.value(map_name)), true); */ MapGroupModel::MapGroupModel(Project *project, QObject *parent) : QStandardItemModel(parent) { // this->project = project; this->root = this->invisibleRootItem(); // mapIcon = new QIcon(QStringLiteral(":/icons/map.ico")); // mapEditedIcon = new QIcon(QStringLiteral(":/icons/map_edited.ico")); // mapOpenedIcon = new QIcon(QStringLiteral(":/icons/map_opened.ico")); // mapFolderIcon = new QIcon(QStringLiteral(":/icons/folder_closed_map.ico")); //mapFolderIcon = new QIcon; //mapFolderIcon->addFile(QStringLiteral(":/icons/folder_closed_map.ico"), QSize(), QIcon::Normal, QIcon::Off); //mapFolderIcon->addFile(QStringLiteral(":/icons/folder_map.ico"), QSize(), QIcon::Normal, QIcon::On); initialize(); } QStandardItem *MapGroupModel::createGroupItem(QString groupName, int groupIndex) { QStandardItem *group = new QStandardItem; group->setText(groupName); group->setEditable(true); group->setData(groupName, Qt::UserRole); group->setData("map_group", MapListRoles::TypeRole); group->setData(groupIndex, MapListRoles::GroupRole); // group->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled); this->groupItems.insert(groupName, group); return group; } QStandardItem *MapGroupModel::createMapItem(QString mapName, int groupIndex, int mapIndex) { QStandardItem *map = new QStandardItem; map->setText(QString("[%1.%2] ").arg(groupIndex).arg(mapIndex, 2, 10, QLatin1Char('0')) + mapName); map->setEditable(false); map->setData(mapName, Qt::UserRole); map->setData("map_name", MapListRoles::TypeRole); // map->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled); this->mapItems.insert(mapName, map); return map; } void MapGroupModel::initialize() { for (int i = 0; i < this->project->groupNames.length(); i++) { QString group_name = this->project->groupNames.value(i); QStandardItem *group = createGroupItem(group_name, i); root->appendRow(group); QList groupItems; QMap inGroupItems; //mapGroupItemsList->append(group); QStringList names = this->project->groupedMapNames.value(i); for (int j = 0; j < names.length(); j++) { QString map_name = names.value(j); QStandardItem *map = createMapItem(map_name, i, j); group->appendRow(map); } } } QStandardItem *MapGroupModel::getItem(const QModelIndex &index) const { if (index.isValid()) { QStandardItem *item = static_cast(index.internalPointer()); if (item) return item; } return this->root; } QModelIndex MapGroupModel::indexOfMap(QString mapName) { if (this->mapItems.contains(mapName)) { return this->mapItems[mapName]->index(); } return QModelIndex(); } // projectHasUnsavedChanges = false; // QList list; // list.append(QModelIndex()); // while (list.length()) { // QModelIndex parent = list.takeFirst(); // for (int i = 0; i < model->rowCount(parent); i++) { // QModelIndex index = model->index(i, 0, parent); // if (model->hasChildren(index)) { // list.append(index); // } // QVariant data = index.data(Qt::UserRole); // if (!data.isNull()) { // QString map_name = data.toString(); // if (editor->project && editor->project->mapCache.contains(map_name)) { // QStandardItem *map = mapListModel->itemFromIndex(mapListIndexes.value(map_name)); // map->setIcon(*mapIcon); // if (editor->project->mapCache.value(map_name)->hasUnsavedChanges()) { // map->setIcon(*mapEditedIcon); // projectHasUnsavedChanges = true; // } // if (editor->map->name == map_name) { // map->setIcon(*mapOpenedIcon); // } // } // } // } // } #include QVariant MapGroupModel::data(const QModelIndex &index, int role) const { int row = index.row(); int col = index.column(); if (role == Qt::DecorationRole) { static QIcon mapIcon = QIcon(QStringLiteral(":/icons/map.ico")); static QIcon mapEditedIcon = QIcon(QStringLiteral(":/icons/map_edited.ico")); static QIcon mapOpenedIcon = QIcon(QStringLiteral(":/icons/map_opened.ico")); static QIcon mapFolderIcon; static bool loaded = false; if (!loaded) { mapFolderIcon.addFile(QStringLiteral(":/icons/folder_closed_map.ico"), QSize(), QIcon::Normal, QIcon::Off); mapFolderIcon.addFile(QStringLiteral(":/icons/folder_map.ico"), QSize(), QIcon::Normal, QIcon::On); loaded = true; } QStandardItem *item = this->getItem(index)->child(row, col); QString type = item->data(MapListRoles::TypeRole).toString(); if (type == "map_group") { return mapFolderIcon; } else if (type == "map_name") { QString mapName = item->data(Qt::UserRole).toString(); if (mapName == this->openMap) { return mapOpenedIcon; } else if (this->project->mapCache.contains(mapName)) { if (this->project->mapCache.value(mapName)->hasUnsavedChanges()) { return mapEditedIcon; } } return mapIcon; } // check if map or group // if map, check if edited or open //return QIcon(":/icons/porymap-icon-2.ico"); } return QStandardItemModel::data(index, role); } // case MapSortOrder::Layout: // { // QMap layoutIndices; // for (int i = 0; i < project->mapLayoutsTable.length(); i++) { // QString layoutId = project->mapLayoutsTable.value(i); // MapLayout *layout = project->mapLayouts.value(layoutId); // QStandardItem *layoutItem = new QStandardItem; // layoutItem->setText(layout->name); // layoutItem->setIcon(folderIcon); // layoutItem->setEditable(false); // layoutItem->setData(layout->name, Qt::UserRole); // layoutItem->setData("map_layout", MapListUserRoles::TypeRole); // layoutItem->setData(layout->id, MapListUserRoles::TypeRole2); // layoutItem->setData(i, MapListUserRoles::GroupRole); // root->appendRow(layoutItem); // mapGroupItemsList->append(layoutItem); // layoutIndices[layoutId] = i; // } // for (int i = 0; i < project->groupNames.length(); i++) { // QStringList names = project->groupedMapNames.value(i); // for (int j = 0; j < names.length(); j++) { // QString map_name = names.value(j); // QStandardItem *map = createMapItem(map_name, i, j); // QString layoutId = project->readMapLayoutId(map_name); // QStandardItem *layoutItem = mapGroupItemsList->at(layoutIndices.value(layoutId)); // layoutItem->setIcon(mapFolderIcon); // layoutItem->appendRow(map); // mapListIndexes.insert(map_name, map->index()); // } // } // break; // } LayoutTreeModel::LayoutTreeModel(Project *project, QObject *parent) : QStandardItemModel(parent) { // this->project = project; this->root = this->invisibleRootItem(); initialize(); } QStandardItem *LayoutTreeModel::createLayoutItem(QString layoutId) { QStandardItem *layout = new QStandardItem; layout->setText(layoutId); layout->setEditable(false); layout->setData(layoutId, Qt::UserRole); layout->setData("map_layout", MapListRoles::TypeRole); // // group->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled); this->layoutItems.insert(layoutId, layout); return layout; } QStandardItem *LayoutTreeModel::createMapItem(QString mapName) { QStandardItem *map = new QStandardItem; map->setText(mapName); map->setEditable(false); map->setData(mapName, Qt::UserRole); map->setData("map_name", MapListRoles::TypeRole); map->setFlags(Qt::NoItemFlags | Qt::ItemNeverHasChildren); this->mapItems.insert(mapName, map); return map; } void LayoutTreeModel::initialize() { for (int i = 0; i < this->project->mapLayoutsTable.length(); i++) { // QString layoutId = project->mapLayoutsTable.value(i); QStandardItem *layoutItem = createLayoutItem(layoutId); this->root->appendRow(layoutItem); } for (auto mapList : this->project->groupedMapNames) { for (auto mapName : mapList) { // QString layoutId = project->readMapLayoutId(mapName); QStandardItem *map = createMapItem(mapName); this->layoutItems[layoutId]->appendRow(map); } } // // project->readMapLayoutName } QStandardItem *LayoutTreeModel::getItem(const QModelIndex &index) const { if (index.isValid()) { QStandardItem *item = static_cast(index.internalPointer()); if (item) return item; } return this->root; } QModelIndex LayoutTreeModel::indexOfLayout(QString layoutName) { if (this->layoutItems.contains(layoutName)) { return this->layoutItems[layoutName]->index(); } return QModelIndex(); } QVariant LayoutTreeModel::data(const QModelIndex &index, int role) const { int row = index.row(); int col = index.column(); if (role == Qt::DecorationRole) { static QIcon mapIcon = QIcon(QStringLiteral(":/icons/map.ico")); static QIcon mapEditedIcon = QIcon(QStringLiteral(":/icons/map_edited.ico")); static QIcon mapOpenedIcon = QIcon(QStringLiteral(":/icons/map_opened.ico")); QStandardItem *item = this->getItem(index)->child(row, col); QString type = item->data(MapListRoles::TypeRole).toString(); if (type == "map_layout") { QString layoutId = item->data(Qt::UserRole).toString(); if (layoutId == this->openLayout) { return mapOpenedIcon; } else if (this->project->mapLayouts.contains(layoutId)) { if (this->project->mapLayouts.value(layoutId)->hasUnsavedChanges()) { return mapEditedIcon; } } return mapIcon; } else if (type == "map_name") { return QVariant(); } return QVariant(); // check if map or group // if map, check if edited or open //return QIcon(":/icons/porymap-icon-2.ico"); } return QStandardItemModel::data(index, role); }