findicondialog.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 598 行 · 第 1/2 页
CPP
598 行
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "resourcefile_p.h"#include "findicondialog_p.h"#include "ui_findicondialog.h"#include "resourceeditor_p.h"#include <QtDesigner/abstractformwindow.h>#include <QtDesigner/abstractformeditor.h>#include <QtDesigner/abstractformwindowmanager.h>#include <QtDesigner/abstractresourcebrowser.h>#include <QtDesigner/abstractlanguage.h>#include <QtDesigner/qextensionmanager.h>#ifdef Q_OS_WIN#include <Windows.h>#endif#include <QtCore/QFileInfo>#include <QtCore/QDir>#include <QtCore/QMetaObject>#include <QtCore/QSettings>#include <QtCore/qdebug.h>#include <QtGui/QFileDialog>#include <QtGui/QHeaderView>#include <QtGui/QImageReader>#include <QtGui/QLabel>#include <QtGui/QComboBox>#include <QtGui/QLineEdit>#include <QtGui/QPushButton>#include <QtCore/QSignalMapper>namespace qdesigner_internal {QStringList extensionList(){ static QStringList extension_list; if (extension_list.isEmpty()) { const QList<QByteArray> _extension_list = QImageReader::supportedImageFormats(); foreach (const QByteArray &ext, _extension_list) { QString filter = QLatin1String("*."); filter += QString::fromAscii(ext); extension_list.append(filter); } } return extension_list;}bool FindIconDialog::isIconValid(const QString &file) const{ if (!qrcPath().isEmpty()) return m_resource_editor->isIcon(qrcPath(), file); const bool enabled = !file.isEmpty(); if (enabled) { const QStringList ext_list = extensionList(); foreach (QString ext, ext_list) { if (file.endsWith(ext.remove(0, 2), Qt::CaseInsensitive)) { return true; } } } return false;} enum { g_file_item_id, g_dir_item_id }; static const char* FindDialogDirSettingsKey="FindIconDialog/RecentDirectories";QListWidgetItem *createListWidgetItem(const QIcon &icon, const QString &text, int item_id, QListWidget *parent){ QListWidgetItem *result = new QListWidgetItem(icon, text, parent); const QSize s = parent->iconSize(); result->setSizeHint(QSize(s.width()*3, s.height()*2)); result->setData(Qt::UserRole, item_id); return result;}bool dirItem(QListWidgetItem *item){ const QVariant v = item->data(Qt::UserRole); if (!v.canConvert(QVariant::Int)) return false; return v.toInt() == g_dir_item_id;}}namespace qdesigner_internal {FindIconDialog::FindIconDialog(QDesignerFormWindowInterface *form, QWidget *parent) : QDialog(parent), ui(new Ui::FindIconDialog), m_form (form), m_view_dir(QDir::temp()), m_resource_editor(0), m_language_editor(0){ ui->setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); const QSize icon_size(24, 24); ui->m_icon_view->setViewMode(QListWidget::IconMode); ui->m_icon_view->setMovement(QListWidget::Static); ui->m_icon_view->setResizeMode(QListWidget::Adjust); ui->m_icon_view->setIconSize(icon_size); ui->m_icon_view->setTextElideMode(Qt::ElideRight); ui->m_file_input->setMinimumContentsLength(40); ui->m_file_input->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength); QSettings settings; const QStringList recent_dir_list = settings.value(QLatin1String(FindDialogDirSettingsKey)).toStringList(); foreach (const QString &dir, recent_dir_list) ui->m_file_input->addItem(dir); ui->m_widget_stack->widget(FileBox)->layout()->setMargin(0); QWidget *page = ui->m_widget_stack->widget(ResourceBox); QVBoxLayout *layout = new QVBoxLayout(page); layout->setMargin(0); m_resource_editor = new ResourceEditor(form->core(), false, page); disconnect(form->core()->formWindowManager(), SIGNAL(activeFormWindowChanged(QDesignerFormWindowInterface*)), m_resource_editor, SLOT(setActiveForm(QDesignerFormWindowInterface*))); m_resource_editor->setActiveForm(form); layout->addWidget(m_resource_editor); m_resource_editor->layout()->setMargin(0); QDesignerFormEditorInterface *core = form->core(); if (QDesignerLanguageExtension *lang = qt_extension<QDesignerLanguageExtension*>(core->extensionManager(), core)) { m_language_editor = lang->createResourceBrowser(ui->m_widget_stack); connect(m_language_editor, SIGNAL( currentPathChanged(const QString&)), this,SLOT(itemChanged(const QString&))); connect(m_language_editor, SIGNAL( pathActivated(const QString&)), this,SLOT(itemActivated(const QString&))); ui->m_widget_stack->addWidget(m_language_editor); } ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); // Set up switching of modes QSignalMapper *mapper = new QSignalMapper(this); mapper->setMapping(ui->m_specify_file_input, FileBox); mapper->setMapping(ui->m_specify_resource_input, m_language_editor ? LanguageBox : ResourceBox); connect(mapper, SIGNAL(mapped(int)), this, SLOT(setActiveBox(int))); connect(ui->m_specify_file_input, SIGNAL(clicked()), mapper, SLOT(map())); connect(ui->m_specify_resource_input, SIGNAL(clicked()), mapper, SLOT(map())); connect(ui->m_icon_view, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(currentItemChanged(QListWidgetItem*))); connect(ui->m_icon_view, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(itemActivated(QListWidgetItem*))); connect(ui->m_cd_up_button, SIGNAL(clicked()), this, SLOT(cdUp())); connect(ui->m_file_input->lineEdit(), SIGNAL(textEdited(QString)), this, SLOT(setFile(QString))); connect(ui->m_file_input, SIGNAL(currentIndexChanged(QString)), this, SLOT(setFile(QString))); connect(m_resource_editor, SIGNAL(fileActivated(QString, QString)), this, SLOT(itemActivated(QString, QString))); connect(m_resource_editor, SIGNAL(currentFileChanged(QString, QString)), this, SLOT(itemChanged(QString, QString)));#ifdef Q_OS_WIN isRoot = false; QSettings myComputer(QLatin1String("HKEY_CLASSES_ROOT\\CLSID\\{20D04FE0-3AEA-1069-A2D8-08002B30309D}"), QSettings::NativeFormat); rootDir = myComputer.value(QString(QLatin1Char('.'))).toString();#endif updateButtons();}void FindIconDialog::accept(){ if (activeBox() == FileBox && !filePath().isEmpty()) { QStringList recent_dir_list; const QString new_path = m_view_dir.path(); recent_dir_list.append(new_path); for (int i = 0; i < 15 && i < ui->m_file_input->count(); ++i) { const QString path = ui->m_file_input->itemText(i); if (path != new_path) recent_dir_list.append(path); } QSettings settings; settings.setValue(QLatin1String(FindDialogDirSettingsKey), recent_dir_list); } if (activeBox() == ResourceBox) { setDefaultQrcPath(qrcPath()); } else if (activeBox() == LanguageBox) { setDefaultLanguagePath(filePath()); } else { setDefaultFilePath(QFileInfo(filePath()).absolutePath()); } setPreviousInputBox(activeBox()); QDialog::accept();}void FindIconDialog::cdUp(){ QDir dir = m_view_dir;#ifdef Q_OS_WIN if (dir.cdUp() && !isRoot) { setFile(dir.canonicalPath()); } else if (!isRoot) setFile(rootDir);#else if (dir.cdUp()) setFile(dir.path());#endif updateButtons();}void FindIconDialog::itemActivated(const QString&, const QString &file_name){ if (activeBox() != ResourceBox) return; if (isIconValid(file_name)) accept(); updateButtons();}void FindIconDialog::itemActivated(QListWidgetItem *item){ if (!item || activeBox() != FileBox) return; const QString file = item->text(); const QString path = m_view_dir.filePath(file); if (dirItem(item)) {#ifdef Q_OS_WIN isRoot = false;#endif QMetaObject::invokeMethod(this, "setFile", Qt::QueuedConnection, Q_ARG(QString, path)); } else accept(); updateButtons();}void FindIconDialog::itemChanged(const QString &qrc_path, const QString &file_name){ if (activeBox() != ResourceBox) return; m_resource_data.file = file_name; m_resource_data.qrc = qrc_path; updateButtons();}void FindIconDialog::currentItemChanged(QListWidgetItem *item){ if (activeBox() != FileBox) return; if (item == 0) return; const QString path = m_view_dir.filePath(item->text()); ui->m_file_input->lineEdit()->setText(path); if (dirItem(item)) m_file_data.file.clear(); else
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?