resourceeditor.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 981 行 · 第 1/2 页
CPP
981 行
m_qrc_combo->insertItem(0, QIcon(), tr("<no resource files>"), QVariant(COMBO_EMPTY_DATA)); m_qrc_combo->setCurrentIndex(0);}void ResourceEditor::removeEmptyComboItem(){ if (m_qrc_combo->count() == 0) return; const QVariant v = m_qrc_combo->itemData(0); if (v.type() != QVariant::Int || v.toInt() != COMBO_EMPTY_DATA) return; m_qrc_combo->removeItem(0);}int ResourceEditor::qrcCount() const{ 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{ const int idx = currentIndex(); if (idx == -1) return 0; return view(idx);}ResourceModel *ResourceEditor::currentModel() const{ 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; const 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; const QStringList file_list = QFileDialog::getOpenFileNames(this, tr("Open file"), model->lastResourceOpenDirectory(), tr("All files (*)")); if (file_list.isEmpty()) return; const 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; const QModelIndex cur_idx = view->currentIndex(); if (!cur_idx.isValid()) return; const QModelIndex idx = model->deleteItem(cur_idx); if (idx.isValid()) { const 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(); QString suffix = name.isEmpty() ? tr("Resource Editor") : tr("Resource Editor: %1").arg(name); QWidget* widget = 0; if (m_form != 0) widget = m_form->core()->topLevel(); if (widget && (widget->objectName() == QLatin1String("MDIWindow"))) { QDockWidget* dockWidget = qFindChild<QDockWidget*>(widget, (parentWidget()->objectName() + QLatin1String("_dock"))); if(dockWidget) dockWidget->setWindowTitle(suffix); } else if ((widget = parentWidget()) != 0 && widget->isWindow()) widget->setWindowTitle(suffix); else setWindowTitle(suffix);}int ResourceEditor::currentIndex() const{ return m_qrc_stack->currentIndex();}void ResourceEditor::setCurrentIndex(int i){ const 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 { const 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, QDir(model->fileName()).absolutePath()); } updateUi();}void ResourceEditor::addView(const QString &qrc_file){ const int idx = qrcCount(); QTreeView *view = new QrcView; view->setDragEnabled(m_dragEnabled); ResourceModel *model = g_model_cache()->model(qrc_file); if (model == 0) return; removeEmptyComboItem(); view->setModel(model); m_qrc_combo->insertItem(idx, model->fileName()); 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))); 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){ const QDir form_dir = m_form->absoluteDir(); const QString qrc_path = form_dir.relativeFilePath(_qrc_path); for (int i = 0; i < m_qrc_stack->count(); ++i) { ResourceModel *resourceModel = model(i); if (qrc_path == form_dir.relativeFilePath(resourceModel->fileName())) { setCurrentIndex(i); const QModelIndex index = resourceModel->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 = ResourceModel::resourcePath(prefix, file); 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; const QString file_name = ResourceModel::resourcePath(prefix, file); const QString qrc_path = m_form->absoluteDir().absoluteFilePath(model->fileName()); emit fileActivated(qrc_path, file_name);}static void ensureSuffix(QString &file_name){ const QString suffix = QLatin1String("qrc"); if (QFileInfo(file_name).suffix() != suffix) { file_name += QLatin1Char('.'); file_name += suffix; }}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; ensureSuffix(file_name); 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(), model->fileName()); 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; } ensureSuffix(file_name); 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 + =
减小字号Ctrl + -
显示快捷键?