forked from qt-creator/qt-creator
CodecSelector: Hide dialog class behind function
It isn't necessary to export the class (which would then best have a d- pointer etc). Just provide a function that asks the user for a codec and returns their decision. This makes the whole dialog an implementation detail. Change-Id: I7d574561cbe7f079a6d383ba65ba70f6868bbf05 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -11,12 +11,37 @@
|
|||||||
#include <utils/itemviews.h>
|
#include <utils/itemviews.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTextCodec>
|
#include <QDialog>
|
||||||
|
#include <QDialogButtonBox>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QListWidget>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
namespace Core {
|
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
|
/* custom class to make sure the width is wide enough for the
|
||||||
* contents. Should be easier with Qt. */
|
* contents. Should be easier with Qt. */
|
||||||
@@ -132,12 +157,21 @@ QTextCodec *CodecSelector::selectedCodec() const
|
|||||||
|
|
||||||
void CodecSelector::buttonClicked(QAbstractButton *button)
|
void CodecSelector::buttonClicked(QAbstractButton *button)
|
||||||
{
|
{
|
||||||
Result result = Cancel;
|
CodecSelectorResult::Action result = CodecSelectorResult::Cancel;
|
||||||
if (button == m_reloadButton)
|
if (button == m_reloadButton)
|
||||||
result = Reload;
|
result = CodecSelectorResult::Reload;
|
||||||
if (button == m_saveButton)
|
if (button == m_saveButton)
|
||||||
result = Save;
|
result = CodecSelectorResult::Save;
|
||||||
done(result);
|
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
|
} // namespace Core
|
||||||
|
@@ -5,44 +5,22 @@
|
|||||||
|
|
||||||
#include "../core_global.h"
|
#include "../core_global.h"
|
||||||
|
|
||||||
#include <QDialog>
|
|
||||||
#include <QLabel>
|
|
||||||
#include <QDialogButtonBox>
|
|
||||||
#include <QListWidget>
|
|
||||||
#include <QTextCodec>
|
#include <QTextCodec>
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
namespace Utils { class ListWidget; }
|
namespace Core {
|
||||||
namespace Core { class BaseTextDocument; }
|
class BaseTextDocument;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
|
|
||||||
class CORE_EXPORT CodecSelector : public QDialog
|
struct CORE_EXPORT CodecSelectorResult
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
enum Action { Cancel, Reload, Save };
|
||||||
|
Action action;
|
||||||
public:
|
QTextCodec *codec;
|
||||||
|
|
||||||
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;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
CORE_EXPORT CodecSelectorResult askForCodec(QWidget *parent, Core::BaseTextDocument *doc);
|
||||||
|
|
||||||
} // namespace Core
|
} // namespace Core
|
||||||
|
@@ -311,17 +311,17 @@ Core::IDocument::OpenResult DiffEditorDocument::open(QString *errorString, const
|
|||||||
|
|
||||||
bool DiffEditorDocument::selectEncoding()
|
bool DiffEditorDocument::selectEncoding()
|
||||||
{
|
{
|
||||||
Core::CodecSelector codecSelector(Core::ICore::dialogParent(), this);
|
const CodecSelectorResult result = askForCodec(Core::ICore::dialogParent(), this);
|
||||||
switch (codecSelector.exec()) {
|
switch (result.action) {
|
||||||
case Core::CodecSelector::Reload: {
|
case CodecSelectorResult::Reload: {
|
||||||
setCodec(codecSelector.selectedCodec());
|
setCodec(result.codec);
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
return reload(&errorMessage, Core::IDocument::FlagReload, Core::IDocument::TypeContents);
|
return reload(&errorMessage, Core::IDocument::FlagReload, Core::IDocument::TypeContents);
|
||||||
}
|
}
|
||||||
case Core::CodecSelector::Save:
|
case CodecSelectorResult::Save:
|
||||||
setCodec(codecSelector.selectedCodec());
|
setCodec(result.codec);
|
||||||
return Core::EditorManager::saveDocument(this);
|
return Core::EditorManager::saveDocument(this);
|
||||||
case Core::CodecSelector::Cancel:
|
case CodecSelectorResult::Cancel:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@@ -1816,22 +1816,22 @@ void TextEditorWidgetPrivate::clearCurrentSuggestion()
|
|||||||
void TextEditorWidget::selectEncoding()
|
void TextEditorWidget::selectEncoding()
|
||||||
{
|
{
|
||||||
TextDocument *doc = d->m_document.data();
|
TextDocument *doc = d->m_document.data();
|
||||||
CodecSelector codecSelector(this, doc);
|
const CodecSelectorResult result = Core::askForCodec(Core::ICore::dialogParent(), doc);
|
||||||
|
switch (result.action) {
|
||||||
switch (codecSelector.exec()) {
|
case Core::CodecSelectorResult::Reload: {
|
||||||
case CodecSelector::Reload: {
|
|
||||||
QString errorString;
|
QString errorString;
|
||||||
if (!doc->reload(&errorString, codecSelector.selectedCodec())) {
|
if (!doc->reload(&errorString, result.codec)) {
|
||||||
QMessageBox::critical(this, Tr::tr("File Error"), errorString);
|
QMessageBox::critical(this, Tr::tr("File Error"), errorString);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break; }
|
break;
|
||||||
case CodecSelector::Save:
|
}
|
||||||
doc->setCodec(codecSelector.selectedCodec());
|
case Core::CodecSelectorResult::Save:
|
||||||
|
doc->setCodec(result.codec);
|
||||||
EditorManager::saveDocument(textDocument());
|
EditorManager::saveDocument(textDocument());
|
||||||
updateTextCodecLabel();
|
updateTextCodecLabel();
|
||||||
break;
|
break;
|
||||||
case CodecSelector::Cancel:
|
case Core::CodecSelectorResult::Cancel:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user