diff --git a/src/project/project.h b/src/project/project.h --- a/src/project/project.h +++ b/src/project/project.h @@ -88,6 +88,16 @@ */ QList codeDocuments() const; + /** + * Creates a code document based on a given file path + */ + KTextEditor::Document* createCodeDocument(const QString& filePath); + + /** + * Returns a document of a given url (path) + */ + KTextEditor::Document* openCodeDocument(const QUrl &url); + /** * Add code document @p document to project. This updates the document's url. */ diff --git a/src/project/project.cpp b/src/project/project.cpp --- a/src/project/project.cpp +++ b/src/project/project.cpp @@ -183,7 +183,6 @@ d->m_graphEditor = graphEditor; d->m_projectUrl = projectFile; if (!d->loadProject(projectFile)) { - addCodeDocument(KTextEditor::Editor::instance()->createDocument(nullptr)); addGraphDocument(graphEditor->createDocument()); setModified(false); d->m_journal = KTextEditor::Editor::instance()->createDocument(nullptr); @@ -222,26 +221,41 @@ return d->m_workingDirectory.path(); } -bool Project::addCodeDocument(KTextEditor::Document *document) +KTextEditor::Document* Project::createCodeDocument(const QString& filePath) { - // compute first unused document path - QStringList usedPaths; - foreach (KTextEditor::Document *document, d->m_codeDocuments) { - usedPaths.append(document->url().toLocalFile()); + auto path = d->m_workingDirectory.path() + QLatin1Char('/') + filePath + QStringLiteral(".js"); + + auto doc = KTextEditor::Editor::instance()->createDocument(nullptr); + if (!doc->saveAs(QUrl::fromLocalFile(path))) { + qCritical() << "Error when saving code file to working directory, aborting."; + return nullptr; } - QString path; - for (int i = 0; i <= d->m_codeDocuments.count(); ++i) { - path = d->m_workingDirectory.path() - + QChar('/') - + "codefile" + QString::number(i) + QString(".js"); - if (!usedPaths.contains(path)) { - break; - } + + if (!addCodeDocument(doc)) { + return nullptr; } - // put document into working directory - if (!document->saveAs(QUrl::fromLocalFile(path))) { - qCritical() << "Error when saving code file to working directory, aborting."; + return doc; +} + +KTextEditor::Document* Project::openCodeDocument(const QUrl &url) +{ + auto doc = KTextEditor::Editor::instance()->createDocument(nullptr); + if (!doc->openUrl(url)) { + qCritical() << "Error when opening code file, aborting."; + return nullptr; + } + + if (!addCodeDocument(doc)) { + return nullptr; + } + + return doc; +} + +bool Project::addCodeDocument(KTextEditor::Document *document) +{ + if (document == nullptr) { return false; } @@ -256,10 +270,7 @@ KTextEditor::Document * Project::importCodeDocument(const QUrl &url) { - KTextEditor::Document *document = KTextEditor::Editor::instance()->createDocument(nullptr); - document->openUrl(url); - addCodeDocument(document); - return document; + return openCodeDocument(url); } void Project::tryToRemoveCodeDocument(KTextEditor::Document *document) diff --git a/src/ui/mainwindow.h b/src/ui/mainwindow.h --- a/src/ui/mainwindow.h +++ b/src/ui/mainwindow.h @@ -98,7 +98,7 @@ void saveProjectAs(); // script file handling - void createCodeDocument(); + void tryToCreateCodeDocument(); void importCodeDocument(); void exportCodeDocument(); diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -290,7 +290,7 @@ createAction("document-save-as", i18nc("@action:inmenu", "Save Project as"), "save-project-as", SLOT(saveProjectAs()), this); createAction("document-new", i18nc("@action:inmenu", "New Graph Document"), "new-graph", SLOT(createGraphDocument()), this); - createAction("document-new", i18nc("@action:inmenu", "New Script File"), "new-script", SLOT(createCodeDocument()), this); + createAction("document-new", i18nc("@action:inmenu", "New Script File"), "new-script", SLOT(tryToCreateCodeDocument()), this); createAction("document-import", i18nc("@action:inmenu", "Import Graph"), "import-graph", SLOT(importGraphDocument()), this); createAction("document-export", i18nc("@action:inmenu", "Export Graph as"), "export-graph-as", SLOT(exportGraphDocument()), this); createAction("document-import", i18nc("@action:inmenu", "Import Script"), "add-script", SLOT(importCodeDocument()), this); @@ -367,7 +367,7 @@ } Project *project = new Project(m_graphEditor); - project->addCodeDocument(KTextEditor::Editor::instance()->createDocument(nullptr)); + project->createCodeDocument(i18n("untitled")); project->addGraphDocument(m_graphEditor->createDocument()); project->setModified(false); @@ -480,18 +480,24 @@ return targetFile.fileName(); } -void MainWindow::createCodeDocument() +void MainWindow::tryToCreateCodeDocument() { QString basePrefix = QInputDialog::getText(this, i18n("ScriptName"), i18n("Enter the name of your new script")); if (basePrefix.isNull()) { qDebug() << "Filename is empty and no script file was created."; - } else { - QString fileName = uniqueFilename(basePrefix, "js"); //TODO this does nothing - KTextEditor::Document *document = KTextEditor::Editor::instance()->createDocument(nullptr); - m_currentProject->addCodeDocument(document); + return; + } + + QString fullPath = m_currentProject->workingDir() + QLatin1Char('/') + basePrefix + QStringLiteral(".js"); + QFileInfo file(fullPath); + if (file.exists()) { + KMessageBox::error(this, i18n("File already exists.")); + return; } + + m_currentProject->createCodeDocument(basePrefix); } void MainWindow::createGraphDocument()