diff --git a/src/plugins/coreplugin/dialogs/codecselector.cpp b/src/plugins/coreplugin/dialogs/codecselector.cpp index 6c0187dcbe6..3ef225490ad 100644 --- a/src/plugins/coreplugin/dialogs/codecselector.cpp +++ b/src/plugins/coreplugin/dialogs/codecselector.cpp @@ -11,12 +11,37 @@ #include #include -#include +#include +#include +#include +#include #include #include #include namespace Core { +namespace Internal { + +class CodecSelector : public QDialog +{ +public: + CodecSelector(QWidget *parent, Core::BaseTextDocument *doc); + ~CodecSelector() override; + + QTextCodec *selectedCodec() const; + +private: + void updateButtons(); + void buttonClicked(QAbstractButton *button); + + bool m_hasDecodingError; + bool m_isModified; + QLabel *m_label; + Utils::ListWidget *m_listWidget; + QDialogButtonBox *m_dialogButtonBox; + QAbstractButton *m_reloadButton; + QAbstractButton *m_saveButton; +}; /* custom class to make sure the width is wide enough for the * contents. Should be easier with Qt. */ @@ -132,12 +157,21 @@ QTextCodec *CodecSelector::selectedCodec() const void CodecSelector::buttonClicked(QAbstractButton *button) { - Result result = Cancel; + CodecSelectorResult::Action result = CodecSelectorResult::Cancel; if (button == m_reloadButton) - result = Reload; + result = CodecSelectorResult::Reload; if (button == m_saveButton) - result = Save; + result = CodecSelectorResult::Save; done(result); } +} // namespace Internal + +CodecSelectorResult askForCodec(QWidget *parent, BaseTextDocument *doc) +{ + Internal::CodecSelector dialog(parent, doc); + const CodecSelectorResult::Action result = CodecSelectorResult::Action(dialog.exec()); + return {result, dialog.selectedCodec()}; +} + } // namespace Core diff --git a/src/plugins/coreplugin/dialogs/codecselector.h b/src/plugins/coreplugin/dialogs/codecselector.h index e98c388517a..4ec22c8960d 100644 --- a/src/plugins/coreplugin/dialogs/codecselector.h +++ b/src/plugins/coreplugin/dialogs/codecselector.h @@ -5,44 +5,22 @@ #include "../core_global.h" -#include -#include -#include -#include #include +#include -namespace Utils { class ListWidget; } -namespace Core { class BaseTextDocument; } +namespace Core { +class BaseTextDocument; +} namespace Core { -class CORE_EXPORT CodecSelector : public QDialog +struct CORE_EXPORT CodecSelectorResult { - Q_OBJECT - -public: - - CodecSelector(QWidget *parent, Core::BaseTextDocument *doc); - ~CodecSelector() override; - - QTextCodec *selectedCodec() const; - - // Enumeration returned from QDialog::exec() - enum Result { - Cancel, Reload, Save - }; - -private: - void updateButtons(); - void buttonClicked(QAbstractButton *button); - - bool m_hasDecodingError; - bool m_isModified; - QLabel *m_label; - Utils::ListWidget *m_listWidget; - QDialogButtonBox *m_dialogButtonBox; - QAbstractButton *m_reloadButton; - QAbstractButton *m_saveButton; + enum Action { Cancel, Reload, Save }; + Action action; + QTextCodec *codec; }; +CORE_EXPORT CodecSelectorResult askForCodec(QWidget *parent, Core::BaseTextDocument *doc); + } // namespace Core diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp index 39b467a3dcc..1339a326874 100644 --- a/src/plugins/diffeditor/diffeditordocument.cpp +++ b/src/plugins/diffeditor/diffeditordocument.cpp @@ -311,17 +311,17 @@ Core::IDocument::OpenResult DiffEditorDocument::open(QString *errorString, const bool DiffEditorDocument::selectEncoding() { - Core::CodecSelector codecSelector(Core::ICore::dialogParent(), this); - switch (codecSelector.exec()) { - case Core::CodecSelector::Reload: { - setCodec(codecSelector.selectedCodec()); + const CodecSelectorResult result = askForCodec(Core::ICore::dialogParent(), this); + switch (result.action) { + case CodecSelectorResult::Reload: { + setCodec(result.codec); QString errorMessage; return reload(&errorMessage, Core::IDocument::FlagReload, Core::IDocument::TypeContents); } - case Core::CodecSelector::Save: - setCodec(codecSelector.selectedCodec()); + case CodecSelectorResult::Save: + setCodec(result.codec); return Core::EditorManager::saveDocument(this); - case Core::CodecSelector::Cancel: + case CodecSelectorResult::Cancel: break; } return false; diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 0decfd3bcc4..7d04cb83d4e 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -1816,22 +1816,22 @@ void TextEditorWidgetPrivate::clearCurrentSuggestion() void TextEditorWidget::selectEncoding() { TextDocument *doc = d->m_document.data(); - CodecSelector codecSelector(this, doc); - - switch (codecSelector.exec()) { - case CodecSelector::Reload: { + const CodecSelectorResult result = Core::askForCodec(Core::ICore::dialogParent(), doc); + switch (result.action) { + case Core::CodecSelectorResult::Reload: { QString errorString; - if (!doc->reload(&errorString, codecSelector.selectedCodec())) { + if (!doc->reload(&errorString, result.codec)) { QMessageBox::critical(this, Tr::tr("File Error"), errorString); break; } - break; } - case CodecSelector::Save: - doc->setCodec(codecSelector.selectedCodec()); + break; + } + case Core::CodecSelectorResult::Save: + doc->setCodec(result.codec); EditorManager::saveDocument(textDocument()); updateTextCodecLabel(); break; - case CodecSelector::Cancel: + case Core::CodecSelectorResult::Cancel: break; } }