QVariant QMPQModel::data(const QModelIndex &index, int role) const{ if (!index.isValid()) return QVariant(); if (role != Qt::DisplayRole) return QVariant(); TreeItem *item = static_cast<TreeItem*>(index.internalPointer()); qDebug() << "QMPQModel::data" << index.row() << index.column() << item->data(0).toString(); return item->data(index.column());}
bool QMPQModel::rename(const QModelIndex & index, const QString & newName){ bool result; TreeItem * item = getItem(index); //обертка с проверками вокруг index.internalPointer() result = archive->rename(item, newName); //перенос ветки// reset(); //так работает, но закрывает все раскрытые ветки - некрасиво return result;}
bool QMPQModel::rename(const QModelIndex & index, const QString & newName){ bool result; TreeItem * item = getItem(index); //обертка с проверками вокруг index.internalPointer() beginRemoveRows(); archive->detachTree(item); //отцепляем то, где было endRemoveRows(); beginInsertRows(); result = archive->attachTree(item, newName); //перенос в новое место endInsertRows(); return result;}
bool QMPQModel::close(){ qDebug() << "QMPQModel::close"; bool result = archive->closeArchive();// QApplication::processEvents(); reset(); return result;}
bool QMPQArchive::closeArchive(){ if (!mpq) { return true; } qDebug() << "QMPQArchive::closeArchive"; updateListFile(); hash.clear(); //!! qDeleteAll(m_rootItem->childItems); //!! m_rootItem->childItems.clear(); //!! bool result = SFileCloseArchive(mpq); if (!result) { m_lastError = GetLastError(); qDebug() << "can't close archive: "<< m_lastError.errorMessage(); return false; } mpq = 0; qDebug() << "closed"; return result;}