MCPcopy Create free account
hub / github.com/KDE/kdevelop / ExternalScriptJob

Method ExternalScriptJob

plugins/externalscript/externalscriptjob.cpp:40–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38using namespace KDevelop;
39
40ExternalScriptJob::ExternalScriptJob(ExternalScriptItem* item, const QUrl& url, ExternalScriptPlugin* parent)
41 : KDevelop::OutputJob(parent)
42 , m_proc(nullptr)
43 , m_lineMaker(nullptr)
44 , m_outputMode(item->outputMode())
45 , m_inputMode(item->inputMode())
46 , m_errorMode(item->errorMode())
47 , m_filterMode(item->filterMode())
48 , m_document(nullptr)
49 , m_url(url)
50 , m_selectionRange(KTextEditor::Range::invalid())
51 , m_showOutput(item->showOutput())
52{
53 qCDebug(PLUGIN_EXTERNALSCRIPT) << "creating external script job";
54
55 setCapabilities(Killable);
56 setStandardToolView(KDevelop::IOutputView::RunView);
57 setBehaviours(KDevelop::IOutputView::AllowUserClose | KDevelop::IOutputView::AutoScroll);
58
59 auto* model = new KDevelop::OutputModel;
60 model->setFilteringStrategy(static_cast<KDevelop::OutputModel::OutputFilterStrategy>(m_filterMode));
61 setModel(model);
62
63 setDelegate(new KDevelop::OutputDelegate);
64
65 // also merge when error mode "equals" output mode
66 if ((m_outputMode == ExternalScriptItem::OutputInsertAtCursor
67 && m_errorMode == ExternalScriptItem::ErrorInsertAtCursor) ||
68 (m_outputMode == ExternalScriptItem::OutputReplaceDocument
69 && m_errorMode == ExternalScriptItem::ErrorReplaceDocument) ||
70 (m_outputMode == ExternalScriptItem::OutputReplaceSelectionOrDocument
71 && m_errorMode == ExternalScriptItem::ErrorReplaceSelectionOrDocument) ||
72 (m_outputMode == ExternalScriptItem::OutputReplaceSelectionOrInsertAtCursor
73 && m_errorMode == ExternalScriptItem::ErrorReplaceSelectionOrInsertAtCursor) ||
74 // also these two otherwise they clash...
75 (m_outputMode == ExternalScriptItem::OutputReplaceSelectionOrInsertAtCursor
76 && m_errorMode == ExternalScriptItem::ErrorReplaceSelectionOrDocument) ||
77 (m_outputMode == ExternalScriptItem::OutputReplaceSelectionOrDocument
78 && m_errorMode == ExternalScriptItem::ErrorReplaceSelectionOrInsertAtCursor)) {
79 m_errorMode = ExternalScriptItem::ErrorMergeOutput;
80 }
81
82 KTextEditor::View* view = KDevelop::ICore::self()->documentController()->activeTextDocumentView();
83
84 if (m_outputMode != ExternalScriptItem::OutputNone || m_inputMode != ExternalScriptItem::InputNone
85 || m_errorMode != ExternalScriptItem::ErrorNone) {
86 if (!view) {
87 const QString messageText =
88 i18n("Cannot run script '%1' since it tries to access "
89 "the editor contents but no document is open.", item->text());
90 auto* message = new Sublime::Message(messageText, Sublime::Message::Error);
91 ICore::self()->uiController()->postMessage(message);
92 return;
93 }
94
95 m_document = view->document();
96
97 connect(m_document, &KTextEditor::Document::aboutToClose, this, [&] {

Callers

nothing calls this directly

Calls 15

outputModeMethod · 0.80
inputModeMethod · 0.80
errorModeMethod · 0.80
filterModeMethod · 0.80
showOutputMethod · 0.80
documentControllerMethod · 0.80
uiControllerMethod · 0.80
saveModeMethod · 0.80
openDocumentsMethod · 0.80
findProjectForUrlMethod · 0.80

Tested by

no test coverage detected