📄 resourceeditor.cpp
字号:
return m_qrc_stack->count();}QTreeView *ResourceEditor::view(int i) const{ if (i >= qrcCount() || i < 0) return 0; return qobject_cast<QTreeView*>(m_qrc_stack->widget(i));}ResourceModel *ResourceEditor::model(int i) const{ if (i >= qrcCount() || i < 0) return 0; return qobject_cast<ResourceModel*>(view(i)->model());}QTreeView *ResourceEditor::currentView() const{ int idx = currentIndex(); if (idx == -1) return 0; return view(idx);}ResourceModel *ResourceEditor::currentModel() const{ int idx = currentIndex(); if (idx == -1) return 0; return model(idx);}void ResourceEditor::getCurrentItem(QString &prefix, QString &file){ prefix.clear(); file.clear(); QTreeView *view = currentView(); if (view == 0) return; ResourceModel *model = currentModel(); if (model == 0) return; model->getItem(view->currentIndex(), prefix, file);}void ResourceEditor::addPrefix(){ QTreeView *view = currentView(); if (view == 0) return; ResourceModel *model = currentModel(); if (model == 0) return; QModelIndex idx = model->addNewPrefix(); view->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::ClearAndSelect); model->save(); updateUi();}void ResourceEditor::addFiles(){ QTreeView *view = currentView(); if (view == 0) return; ResourceModel *model = currentModel(); if (model == 0) return; QStringList file_list = QFileDialog::getOpenFileNames(this, tr("Open file"), model->absolutePath(QString()), tr("All files (*)")); if (file_list.isEmpty()) return; QModelIndex idx = model->addFiles(view->currentIndex(), file_list); if (idx.isValid()) { view->setExpanded(model->prefixIndex(view->currentIndex()), true); view->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::ClearAndSelect); } model->save(); updateUi();}void ResourceEditor::deleteItem(){ QTreeView *view = currentView(); if (view == 0) return; ResourceModel *model = currentModel(); if (model == 0) return; QModelIndex cur_idx = view->currentIndex(); if (!cur_idx.isValid()) return; QModelIndex idx = model->deleteItem(cur_idx); if (idx.isValid()) { QModelIndex pref_idx = model->prefixIndex(idx); if (pref_idx != idx) view->setExpanded(pref_idx, true); view->selectionModel()->setCurrentIndex(idx, QItemSelectionModel::ClearAndSelect); } model->save(); updateUi();}void ResourceEditor::updateUi(){ QString prefix, file; getCurrentItem(prefix, file); m_add_button->setEnabled(currentModel() != 0); m_remove_button->setEnabled(!prefix.isEmpty()); m_add_files_button->setEnabled(!prefix.isEmpty()); m_remove_qrc_button->setEnabled(currentModel() != 0); QString name; if (m_form != 0) name = QFileInfo(m_form->fileName()).fileName(); if (name.isEmpty()) name = tr("Untitled"); setWindowTitle(tr("Resource Editor: %1").arg(name));}int ResourceEditor::currentIndex() const{ return m_qrc_stack->currentIndex();}void ResourceEditor::setCurrentIndex(int i){ QVariant v = m_qrc_combo->itemData(i); if (v.type() == QVariant::Int) { switch (v.toInt()) { case COMBO_EMPTY_DATA: { bool blocked = m_qrc_combo->blockSignals(true); m_qrc_combo->setCurrentIndex(i); m_qrc_combo->blockSignals(blocked); } break; case COMBO_OPEN_DATA: openView(); break; case COMBO_NEW_DATA: newView(); break; default: break; } } else { bool blocked = m_qrc_combo->blockSignals(true); m_qrc_combo->setCurrentIndex(i); m_qrc_combo->blockSignals(blocked); m_qrc_stack->setCurrentIndex(i); } QAbstractItemView *view = currentView(); if (view != 0) itemChanged(view->currentIndex()); updateUi();}void ResourceEditor::updateQrcStack(){ if (m_ignore_update) return; m_qrc_combo->clear(); while (m_qrc_stack->count() > 0) { QWidget *w = m_qrc_stack->widget(0); m_qrc_stack->removeWidget(w); delete w; } bool empty_list = true; QStringList qrc_file_list; if (m_form != 0) { qrc_file_list = m_form->resourceFiles(); foreach (QString qrc_file, qrc_file_list) { if (QFile::exists(qrc_file)) { addView(qrc_file); empty_list = false; } } } m_qrc_combo->addItem(QIcon(), tr("New..."), QVariant(COMBO_NEW_DATA)); m_qrc_combo->addItem(QIcon(), tr("Open..."), QVariant(COMBO_OPEN_DATA)); if (empty_list) insertEmptyComboItem(); updateUi();}QString ResourceEditor::qrcName(const QString &path) const{ if (m_form == 0 || path.isEmpty()) return tr("Untitled"); return m_form->absoluteDir().relativeFilePath(path);}void ResourceEditor::updateQrcPaths(){ for (int i = 0; i < m_qrc_stack->count(); ++i) { ResourceModel *model = this->model(i); m_qrc_combo->setItemText(i, qrcName(model->fileName())); } updateUi();}void ResourceEditor::addView(const QString &qrc_file){ int idx = qrcCount(); QTreeView *view = new QrcView; ResourceModel *model = g_model_cache()->model(qrc_file); if (model == 0) return; removeEmptyComboItem(); view->setModel(model); m_qrc_combo->insertItem(idx, qrcName(qrc_file)); m_qrc_stack->addWidget(view); connect(view->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(updateUi())); connect(view, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex))); connect(view->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(itemChanged(QModelIndex)));// connect(model, SIGNAL(dirtyChanged(bool)), this, SLOT(updateUi())); setCurrentIndex(idx); m_ignore_update = true; if (m_form && !qrc_file.isEmpty()) m_form->addResourceFile(qrc_file); m_ignore_update = false; updateUi();}void ResourceEditor::setCurrentFile(const QString &_qrc_path, const QString &file_path){ QDir form_dir = m_form->absoluteDir(); QString qrc_path = form_dir.relativeFilePath(_qrc_path); for (int i = 0; i < m_qrc_stack->count(); ++i) { ResourceModel *model = this->model(i); if (qrc_path == form_dir.relativeFilePath(model->fileName())) { setCurrentIndex(i); QModelIndex index = model->getIndex(file_path); view(i)->setCurrentIndex(index); break; } } updateUi();}void ResourceEditor::itemChanged(const QModelIndex &index){ QString file_name, qrc_path; if (ResourceModel *model = currentModel()) { QString prefix, file; model->getItem(index, prefix, file); if (!file.isEmpty()) { file_name = QLatin1Char(':') + prefix + QLatin1Char('/') + file; file_name = QDir::cleanPath(file_name); qrc_path = m_form->absoluteDir().absoluteFilePath(model->fileName()); } } emit currentFileChanged(qrc_path, file_name);}void ResourceEditor::itemActivated(const QModelIndex &index){ ResourceModel *model = currentModel(); if (!model) return; QString prefix, file; model->getItem(index, prefix, file); if (file.isEmpty()) return; QString file_name = QLatin1Char(':') + prefix + QLatin1Char('/') + file; file_name = QDir::cleanPath(file_name); QString qrc_path = m_form->absoluteDir().absoluteFilePath(model->fileName()); emit fileActivated(qrc_path, file_name);}void ResourceEditor::saveCurrentView(){ ResourceModel *model = currentModel(); if (model == 0) return; if (model->fileName().isEmpty()) { QString file_name = QFileDialog::getSaveFileName(this, tr("Save resource file"), m_form->absoluteDir().absolutePath(), tr("Resource files (*.qrc)")); if (file_name.isEmpty()) return; model->setFileName(file_name); m_ignore_update = true; m_form->addResourceFile(file_name); m_ignore_update = false; QString s = QFileInfo(file_name).fileName(); bool blocked = m_qrc_combo->blockSignals(true); m_qrc_combo->setItemText(currentIndex(), s); m_qrc_combo->setCurrentIndex(-1); m_qrc_combo->setCurrentIndex(currentIndex()); m_qrc_combo->blockSignals(blocked); } model->save(); updateUi();}int ResourceEditor::indexOfView(QTreeView *view){ for (int i = 0; i < m_qrc_stack->count(); ++i) { if (view == m_qrc_stack->widget(i)) return i; } return -1;}void ResourceEditor::removeCurrentView(){ QTreeView *view = currentView(); if (view == 0) return; ResourceModel *model = currentModel(); if (model == 0) return; QString file_name = model->fileName(); int idx = indexOfView(view); if (idx == -1) return; m_qrc_combo->removeItem(idx); m_qrc_stack->removeWidget(view); delete view; disconnect(model, SIGNAL(dirtyChanged(bool)), this, SLOT(updateUi())); m_ignore_update = true; if (m_form != 0 && !file_name.isEmpty()) m_form->removeResourceFile(file_name); m_ignore_update = false; if (qrcCount() == 0) { insertEmptyComboItem(); } else { if (idx < qrcCount()) setCurrentIndex(idx); else if (idx > 0) setCurrentIndex(idx - 1); } updateUi();}void ResourceEditor::reloadCurrentView(){ ResourceModel *model = currentModel(); if (model == 0) return; model->reload(); updateUi();}void ResourceEditor::newView(){ QString file_name = QFileDialog::getSaveFileName(this, tr("New resource file"), m_form->absoluteDir().absolutePath(), tr("Resource files (*.qrc)")); if (file_name.isEmpty()) { setCurrentIndex(m_qrc_stack->count() == 0 ? 0 : m_qrc_stack->currentIndex()); return; } ResourceFile rf(file_name); rf.save(); addView(file_name);}void ResourceEditor::openView(){ QString file_name = QFileDialog::getOpenFileName(this, tr("Open resource file"), m_form->absoluteDir().absolutePath(), tr("Resource files (*.qrc)")); if (file_name.isEmpty()) { setCurrentIndex(m_qrc_stack->count() == 0 ? 0 : m_qrc_stack->currentIndex()); return; } addView(file_name);}void ResourceEditor::setActiveForm(QDesignerFormWindowInterface *form){ if (form == m_form) return; if (m_form != 0) { disconnect(m_form, SIGNAL(fileNameChanged(QString)), this, SLOT(updateQrcPaths())); disconnect(m_form, SIGNAL(resourceFilesChanged()), this, SLOT(updateQrcStack())); } m_form = form; updateQrcStack(); if (m_form != 0) { connect(m_form, SIGNAL(fileNameChanged(QString)), this, SLOT(updateQrcPaths())); connect(m_form, SIGNAL(resourceFilesChanged()), this, SLOT(updateQrcStack())); } setEnabled(m_form != 0);}} // namespace qdesigner_internal#include "resourceeditor.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -