aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/diffeditor/diffeditorwidgetcontroller.cpp')
-rw-r--r--src/plugins/diffeditor/diffeditorwidgetcontroller.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
index c4f0ab5cb5..a5757f42d2 100644
--- a/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
+++ b/src/plugins/diffeditor/diffeditorwidgetcontroller.cpp
@@ -39,6 +39,7 @@
#include <cpaster/codepasterservice.h>
+#include <utils/infobar.h>
#include <utils/progressindicator.h>
#include <utils/qtcassert.h>
#include <utils/temporaryfile.h>
@@ -50,6 +51,7 @@
using namespace Core;
using namespace TextEditor;
+using namespace Utils;
namespace DiffEditor {
namespace Internal {
@@ -76,7 +78,7 @@ void DiffEditorWidgetController::setDocument(DiffEditorDocument *document)
if (m_document) {
disconnect(m_document, &IDocument::aboutToReload, this, &DiffEditorWidgetController::scheduleShowProgress);
- disconnect(m_document, &IDocument::reloadFinished, this, &DiffEditorWidgetController::hideProgress);
+ disconnect(m_document, &IDocument::reloadFinished, this, &DiffEditorWidgetController::onDocumentReloadFinished);
}
const bool wasRunning = m_document && m_document->state() == DiffEditorDocument::Reloading;
@@ -85,7 +87,8 @@ void DiffEditorWidgetController::setDocument(DiffEditorDocument *document)
if (m_document) {
connect(m_document, &IDocument::aboutToReload, this, &DiffEditorWidgetController::scheduleShowProgress);
- connect(m_document, &IDocument::reloadFinished, this, &DiffEditorWidgetController::hideProgress);
+ connect(m_document, &IDocument::reloadFinished, this, &DiffEditorWidgetController::onDocumentReloadFinished);
+ updateCannotDecodeInfo();
}
const bool isRunning = m_document && m_document->state() == DiffEditorDocument::Reloading;
@@ -123,6 +126,12 @@ void DiffEditorWidgetController::hideProgress()
m_progressIndicator->hide();
}
+void DiffEditorWidgetController::onDocumentReloadFinished()
+{
+ updateCannotDecodeInfo();
+ hideProgress();
+}
+
void DiffEditorWidgetController::patch(bool revert, int fileIndex, int chunkIndex)
{
if (!m_document)
@@ -294,6 +303,27 @@ void DiffEditorWidgetController::addExtraActions(QMenu *menu, int fileIndex, int
controller->requestChunkActions(menu, fileIndex, chunkIndex, selection);
}
+void DiffEditorWidgetController::updateCannotDecodeInfo()
+{
+ if (!m_document)
+ return;
+
+ Utils::InfoBar *infoBar = m_document->infoBar();
+ Id selectEncodingId(Constants::SELECT_ENCODING);
+ if (m_document->hasDecodingError()) {
+ if (!infoBar->canInfoBeAdded(selectEncodingId))
+ return;
+ Utils::InfoBarEntry info(selectEncodingId,
+ tr("<b>Error:</b> Could not decode \"%1\" with \"%2\"-encoding.")
+ .arg(m_document->displayName(),
+ QString::fromLatin1(m_document->codec()->name())));
+ info.setCustomButtonInfo(tr("Select Encoding"), [this]() { m_document->selectEncoding(); });
+ infoBar->addInfo(info);
+ } else {
+ infoBar->removeInfo(selectEncodingId);
+ }
+}
+
void DiffEditorWidgetController::sendChunkToCodePaster(int fileIndex, int chunkIndex)
{
if (!m_document)