📄 resourcefile.cpp
字号:
if (result.size() > 1 && result.endsWith(QLatin1String("/"))) result = result.mid(0, result.size() - 1); return result;}int ResourceFile::prefixCount() const{ return m_prefix_list.size();}QString ResourceFile::prefix(int idx) const{ return m_prefix_list.at(idx).name;}int ResourceFile::fileCount(int prefix_idx) const{ return m_prefix_list.at(prefix_idx).file_list.size();}QString ResourceFile::file(int prefix_idx, int file_idx) const{ return relativePath(m_prefix_list.at(prefix_idx).file_list.at(file_idx).name);}QString ResourceFile::alias(int prefix_idx, int file_idx) const{ return m_prefix_list.at(prefix_idx).file_list.at(file_idx).alias;}/******************************************************************************** ResourceModel*/ResourceModel::ResourceModel(const ResourceFile &resource_file, QObject *parent) : QAbstractItemModel(parent), m_resource_file(resource_file){ m_dirty = false;}void ResourceModel::setDirty(bool b){ if (b == m_dirty) return; m_dirty = b; emit dirtyChanged(b);}QModelIndex ResourceModel::index(int row, int column, const QModelIndex &parent) const{ QModelIndex result; qint32 d = parent.internalId(); if (!parent.isValid()) { if (row < m_resource_file.prefixCount()) result = createIndex(row, 0, -1); } else if (column == 0 && d == -1 && parent.row() < m_resource_file.prefixCount() && row < m_resource_file.fileCount(parent.row())) { result = createIndex(row, 0, parent.row()); } return result;}QModelIndex ResourceModel::parent(const QModelIndex &index) const{ QModelIndex result; qint32 d = index.internalId(); if (index.isValid() && d != -1) result = createIndex(d, 0, -1); return result;}int ResourceModel::rowCount(const QModelIndex &parent) const{ int result = 0; qint32 d = parent.internalId(); if (!parent.isValid()) result = m_resource_file.prefixCount(); else if (d == -1) result = m_resource_file.fileCount(parent.row()); return result;}int ResourceModel::columnCount(const QModelIndex &) const{ return 1;}bool ResourceModel::hasChildren(const QModelIndex &parent) const{ bool result = false; qint32 d = parent.internalId(); if (!parent.isValid()) result = m_resource_file.prefixCount() > 0; else if (d == -1) result = m_resource_file.fileCount(parent.row()) > 0; return result;}bool ResourceModel::iconFileExtension(const QString &path){ static QStringList ext_list; if (ext_list.isEmpty()) { QList<QByteArray> _ext_list = QImageReader::supportedImageFormats(); foreach (const QByteArray &ext, _ext_list) ext_list.append(QLatin1String(".") + QString::fromAscii(ext)); } foreach (QString ext, ext_list) { if (path.endsWith(ext, Qt::CaseInsensitive)) return true; } return false;}QVariant ResourceModel::data(const QModelIndex &index, int role) const{ if (!index.isValid()) return QVariant(); qint32 d = index.internalId(); QVariant result; switch (role) { case Qt::DisplayRole: if (d == -1) result = m_resource_file.prefix(index.row()); else result = QFileInfo(m_resource_file.file(d, index.row())).fileName(); break; case Qt::DecorationRole: if (d != -1) { QString path = m_resource_file.absolutePath(m_resource_file.file(d, index.row())); if (iconFileExtension(path)) { QIcon icon(path); if (!icon.isNull()) result = icon; } } break; case Qt::ToolTipRole: if (d != -1) { QString conv_file = m_resource_file.relativePath(m_resource_file.file(d, index.row())); result = conv_file.replace(QDir::separator(), QLatin1Char('/')); } break; default: break; }; return result;}void ResourceModel::getItem(const QModelIndex &index, QString &prefix, QString &file) const{ prefix.clear(); file.clear(); if (!index.isValid()) return; qint32 d = index.internalId(); if (d == -1) { prefix = m_resource_file.prefix(index.row()); } else { prefix = m_resource_file.prefix(d); file = m_resource_file.file(d, index.row()); }}QModelIndex ResourceModel::getIndex(const QString &prefixed_file){ QString prefix, file; if (!m_resource_file.split(prefixed_file, &prefix, &file)) return QModelIndex(); return getIndex(prefix, file);}QModelIndex ResourceModel::getIndex(const QString &prefix, const QString &file){ if (prefix.isEmpty()) return QModelIndex(); int pref_idx = m_resource_file.indexOfPrefix(prefix); if (pref_idx == -1) return QModelIndex(); QModelIndex pref_model_idx = index(pref_idx, 0, QModelIndex()); if (file.isEmpty()) return pref_model_idx; int file_idx = m_resource_file.indexOfFile(pref_idx, file); if (file_idx == -1) return QModelIndex(); return index(file_idx, 0, pref_model_idx);}QModelIndex ResourceModel::prefixIndex(const QModelIndex &sel_idx) const{ if (!sel_idx.isValid()) return QModelIndex(); QModelIndex parent = this->parent(sel_idx); return parent.isValid() ? parent : sel_idx;}QModelIndex ResourceModel::addNewPrefix(){ int i = 1; QString prefix; do prefix = tr("/new/prefix%1").arg(i++); while (m_resource_file.contains(prefix)); beginInsertRows(QModelIndex(), i, i); m_resource_file.addPrefix(prefix); i = m_resource_file.indexOfPrefix(prefix); endInsertRows(); setDirty(true); return index(i, 0, QModelIndex());}QModelIndex ResourceModel::addFiles(const QModelIndex &model_idx, const QStringList &file_list){ if (!model_idx.isValid()) return QModelIndex(); QModelIndex prefix_model_idx = prefixIndex(model_idx); int prefix_idx = prefix_model_idx.row(); QStringList unique_list; foreach (QString file, file_list) { if (!m_resource_file.contains(prefix_idx, file) && !unique_list.contains(file)) unique_list.append(file); } if (unique_list.isEmpty()) return QModelIndex(); int cnt = m_resource_file.fileCount(prefix_idx); beginInsertRows(prefix_model_idx, cnt, cnt + unique_list.count() - 1); // ### FIXME foreach (QString file, file_list) m_resource_file.addFile(prefix_idx, file); endInsertRows(); setDirty(true); return index(cnt + unique_list.count() - 1, 0, prefix_model_idx);}void ResourceModel::changePrefix(const QModelIndex &model_idx, const QString &prefix){ if (!model_idx.isValid()) return; QModelIndex prefix_model_idx = prefixIndex(model_idx); int prefix_idx = model_idx.row(); if (m_resource_file.prefix(prefix_idx) == ResourceFile::fixPrefix(prefix)) return; m_resource_file.replacePrefix(prefix_idx, prefix); emit dataChanged(prefix_model_idx, prefix_model_idx); setDirty(true);}QModelIndex ResourceModel::deleteItem(const QModelIndex &idx){ if (!idx.isValid()) return QModelIndex(); QString prefix, file; getItem(idx, prefix, file); Q_ASSERT(!prefix.isEmpty()); int prefix_idx = m_resource_file.indexOfPrefix(prefix); int file_idx = m_resource_file.indexOfFile(prefix_idx, file); beginRemoveRows(parent(idx), idx.row(), idx.row()); if (file.isEmpty()) { m_resource_file.removePrefix(prefix_idx); if (prefix_idx == m_resource_file.prefixCount()) --prefix_idx; } else { m_resource_file.removeFile(prefix_idx, file_idx); if (file_idx == m_resource_file.fileCount(prefix_idx)) --file_idx; } endRemoveRows(); setDirty(true); if (prefix_idx == -1) return QModelIndex(); QModelIndex prefix_model_idx = index(prefix_idx, 0, QModelIndex()); if (file_idx == -1) return prefix_model_idx; return index(file_idx, 0, prefix_model_idx);}bool ResourceModel::reload(){ bool result = m_resource_file.load(); if (result) setDirty(false); return result;}bool ResourceModel::save(){ bool result = m_resource_file.save(); if (result) setDirty(false); return result;}} // namespace qdesigner_internal
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -