From 337339004843bc968e90a45cf24b9272b8372ba1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 4 Feb 2015 16:27:36 +0100 Subject: [PATCH] Mime type settings: Show magic matchers for mime types Change-Id: I40f024b51e20717aa4bc74351bb5996b31f3a869 Reviewed-by: David Schulz --- .../coreplugin/mimetypemagicdialog.cpp | 3 +- src/plugins/coreplugin/mimetypemagicdialog.h | 19 +++--- src/plugins/coreplugin/mimetypesettings.cpp | 61 +++++++++---------- 3 files changed, 38 insertions(+), 45 deletions(-) diff --git a/src/plugins/coreplugin/mimetypemagicdialog.cpp b/src/plugins/coreplugin/mimetypemagicdialog.cpp index ead53b01640..ead0c77630b 100644 --- a/src/plugins/coreplugin/mimetypemagicdialog.cpp +++ b/src/plugins/coreplugin/mimetypemagicdialog.cpp @@ -81,7 +81,8 @@ void MimeTypeMagicDialog::setMagicData(const MagicData &data) MagicData MimeTypeMagicDialog::magicData() const { - MagicData data; + MagicData data(Utils::Internal::MimeMagicRule(Utils::Internal::MimeMagicRule::Byte, + QByteArray(), 0, 0), 0); // data.m_value = ui.valueLineEdit->text(); // if (ui.stringRadioButton->isChecked()) // data.m_type = MagicStringRule::kMatchType; diff --git a/src/plugins/coreplugin/mimetypemagicdialog.h b/src/plugins/coreplugin/mimetypemagicdialog.h index e45db322f5d..2e4779f8391 100644 --- a/src/plugins/coreplugin/mimetypemagicdialog.h +++ b/src/plugins/coreplugin/mimetypemagicdialog.h @@ -33,23 +33,20 @@ #include "ui_mimetypemagicdialog.h" +#include + namespace Core { namespace Internal { struct MagicData { - MagicData() {} - MagicData(const QString &value, const QString &type, int start, int end, int p) - : m_value(value) - , m_type(type) - , m_start(start) - , m_end(end) - , m_priority(p) {} + MagicData(Utils::Internal::MimeMagicRule rule, int priority) + : m_rule(rule) + , m_priority(priority) + { + } - QString m_value; - QString m_type; - int m_start; - int m_end; + Utils::Internal::MimeMagicRule m_rule; int m_priority; }; diff --git a/src/plugins/coreplugin/mimetypesettings.cpp b/src/plugins/coreplugin/mimetypesettings.cpp index e49a372b523..e656b84d45f 100644 --- a/src/plugins/coreplugin/mimetypesettings.cpp +++ b/src/plugins/coreplugin/mimetypesettings.cpp @@ -208,10 +208,11 @@ public: void clearSyncData(); void markAsModified(int index); + void addMagicHeaderRow(const MagicData &data); + void editMagicHeaderRowData(const int row, const MagicData &data); + // TODO -// void addMagicHeaderRow(const MagicData &data); // MagicData getMagicHeaderRowData(const int row) const; -// void editMagicHeaderRowData(const int row, const MagicData &data); void updateMimeDatabase(); void resetState(); @@ -393,20 +394,14 @@ void MimeTypeSettingsPrivate::syncData(const QModelIndex ¤t, m_ui.patternsLineEdit->setText(currentMimeType.globPatterns().join(kSemiColon)); - // TODO -// // Consider only rule-based matchers. -// const QList > &matchers = currentMimeType.magicRuleMatchers(); -// foreach (const QSharedPointer &matcher, matchers) { -// MagicRuleMatcher *ruleMatcher = static_cast(matcher.data()); -// const int priority = ruleMatcher->priority(); -// const MagicRuleMatcher::MagicRuleList &rules = ruleMatcher->magicRules(); -// foreach (const MagicRuleMatcher::MagicRuleSharedPointer &rule, rules) -// addMagicHeaderRow(MagicData(rule->matchValue(), -// rule->matchType(), -// rule->startPos(), -// rule->endPos(), -// priority)); -// } + QMap > rules = + Utils::MimeDatabase::magicRulesForMimeType(currentMimeType); + for (auto it = rules.constBegin(); it != rules.constEnd(); ++it) { + int priority = it.key(); + foreach (const Utils::Internal::MimeMagicRule &rule, it.value()) { + addMagicHeaderRow(MagicData(rule, priority)); + } + } } } @@ -419,13 +414,13 @@ void MimeTypeSettingsPrivate::handlePatternEdited() } } -// TODO -//void MimeTypeSettingsPrivate::addMagicHeaderRow(const MagicData &data) -//{ -// const int row = m_ui.magicHeadersTreeWidget->topLevelItemCount(); -// editMagicHeaderRowData(row, data); -//} +void MimeTypeSettingsPrivate::addMagicHeaderRow(const MagicData &data) +{ + const int row = m_ui.magicHeadersTreeWidget->topLevelItemCount(); + editMagicHeaderRowData(row, data); +} +// TODO //MagicData MimeTypeSettingsPrivate::getMagicHeaderRowData(const int row) const //{ // MagicData data; @@ -440,17 +435,17 @@ void MimeTypeSettingsPrivate::handlePatternEdited() // return data; //} -//void MimeTypeSettingsPrivate::editMagicHeaderRowData(const int row, const MagicData &data) -//{ -// QTreeWidgetItem *item = new QTreeWidgetItem; -// item->setText(0, data.m_value); -// item->setText(1, data.m_type); -// item->setText(2, MagicRule::toOffset(qMakePair(data.m_start, data.m_end))); -// item->setText(3, QString::number(data.m_priority)); -// m_ui.magicHeadersTreeWidget->takeTopLevelItem(row); -// m_ui.magicHeadersTreeWidget->insertTopLevelItem(row, item); -// m_ui.magicHeadersTreeWidget->setCurrentItem(item); -//} +void MimeTypeSettingsPrivate::editMagicHeaderRowData(const int row, const MagicData &data) +{ + QTreeWidgetItem *item = new QTreeWidgetItem; + item->setText(0, QString::fromUtf8(data.m_rule.value())); + item->setText(1, QString::fromLatin1(Utils::Internal::MimeMagicRule::typeName(data.m_rule.type()))); + item->setText(2, QString::fromLatin1("%1:%2").arg(data.m_rule.startPos()).arg(data.m_rule.endPos())); + item->setText(3, QString::number(data.m_priority)); + m_ui.magicHeadersTreeWidget->takeTopLevelItem(row); + m_ui.magicHeadersTreeWidget->insertTopLevelItem(row, item); + m_ui.magicHeadersTreeWidget->setCurrentItem(item); +} //void MimeTypeSettingsPrivate::addMagicHeader() //{