diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index ab04d11f7ff93dafcadb5f4f95b39f39ed0916b9..fc3ee7d4e0d0d9206015dec879a1b0374e1fce59 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1080,7 +1080,7 @@ IEditor *EditorManager::createEditor(const QString &editorId, mimeType = m_d->m_core->mimeDatabase()->findByType(QLatin1String("text/plain")); } // open text files > 48 MB in binary editor - if (fileInfo.size() > qint64(3) << 24 && mimeType.type().startsWith(QLatin1String("text"))) + if (fileInfo.size() > maxTextFileSize() && mimeType.type().startsWith(QLatin1String("text"))) mimeType = m_d->m_core->mimeDatabase()->findByType(QLatin1String("application/octet-stream")); factories = editorFactories(mimeType, true); } else { @@ -2013,5 +2013,10 @@ void EditorManager::gotoOtherSplit() } } } + +qint64 EditorManager::maxTextFileSize() +{ + return (qint64(3) << 24); +} //===================EditorClosingCoreListener====================== diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h index e488f040ea0dfcfd242fcd7560d49252b343fdb1..541c5d335566975bdef14a811dcca795558e8539 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.h +++ b/src/plugins/coreplugin/editormanager/editormanager.h @@ -199,6 +199,8 @@ public: QWidget *parent, bool displaySaveAsButton = false); + static qint64 maxTextFileSize(); + signals: void currentEditorChanged(Core::IEditor *editor); void editorCreated(Core::IEditor *editor, const QString &fileName); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index e82160232b36726268d8c2773bea1d6c7a04b4ea..3283b7b77d77a6dfd33a17a90347134046e598bd 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -573,8 +573,19 @@ void BaseTextEditor::triggerQuickFix() emit requestQuickFix(editableInterface()); } +QString BaseTextEditor::msgTextTooLarge(quint64 size) +{ + return tr("The text is too large to be displayed (%1 MB)."). + arg(size >> 20); +} + bool BaseTextEditor::createNew(const QString &contents) { + if (contents.size() > Core::EditorManager::maxTextFileSize()) { + setPlainText(msgTextTooLarge(contents.size())); + document()->setModified(false); + return false; + } setPlainText(contents); document()->setModified(false); return true; diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index afcc2548d041aee9c98a91d7497f9a9e38440540..8a0cb0499caec17ac7345e2dc09fb85a05970c04 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -294,6 +294,8 @@ protected: bool canInsertFromMimeData(const QMimeData *source) const; void insertFromMimeData(const QMimeData *source); + static QString msgTextTooLarge(quint64 size); + private: void maybeSelectLine(); diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp index 5186570852891ee9cf1ae9e30f1f1521bf9e7fed..af184590093bac4fbd8448eb7656a75e46d62d10 100644 --- a/src/plugins/vcsbase/vcsbaseeditor.cpp +++ b/src/plugins/vcsbase/vcsbaseeditor.cpp @@ -627,7 +627,11 @@ void VCSBaseEditor::jumpToChangeFromDiff(QTextCursor cursor) void VCSBaseEditor::setPlainTextData(const QByteArray &data) { - setPlainText(codec()->toUnicode(data)); + if (data.size() > Core::EditorManager::maxTextFileSize()) { + setPlainText(msgTextTooLarge(data.size())); + } else { + setPlainText(codec()->toUnicode(data)); + } } void VCSBaseEditor::setFontSettings(const TextEditor::FontSettings &fs)