X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=src%2Fexport-ascii.cpp;fp=src%2Fexport-ascii.cpp;h=d26f31edb8bc75e54da5866146625478a4afb742;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=0000000000000000000000000000000000000000;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/src/export-ascii.cpp b/src/export-ascii.cpp new file mode 100644 index 0000000..d26f31e --- /dev/null +++ b/src/export-ascii.cpp @@ -0,0 +1,148 @@ +#include "export-ascii.h" + +#include "mainwindow.h" +#include + +extern QString vymName; +extern Main *mainWindow; + +ExportASCII::ExportASCII() +{ + exportName = "ASCII"; + filter = "TXT (*.txt);;All (* *.*)"; + caption = vymName + " -" + QObject::tr("Export as ASCII"); +} + +void ExportASCII::doExport() +{ + QFile file(filePath); + if (!file.open(QIODevice::WriteOnly)) { + QMessageBox::critical( + 0, QObject::tr("Critical Export Error"), + QObject::tr("Could not export as ASCII to %1").arg(filePath)); + mainWindow->statusMessage(QString(QObject::tr("Export failed."))); + return; + } + + QString out; + + // Main loop over all branches + QString s; + QString curIndent; + QString dashIndent; + int i; + BranchItem *cur = NULL; + BranchItem *prev = NULL; + + int lastDepth = 0; + + QStringList tasks; + + model->nextBranch(cur, prev); + while (cur) { + if (cur->getType() == TreeItem::Branch || + cur->getType() == TreeItem::MapCenter) { + if (!cur->hasHiddenExportParent()) { + // qDebug() << "ExportASCII:: + // "<getHeadingPlain().toStdString(); + + // Insert newline after previous list + if (cur->depth() < lastDepth) + out += "\n"; + + // Make indentstring + curIndent = ""; + for (i = 1; i < cur->depth() - 1; i++) + curIndent += indentPerDepth; + + dashIndent = ""; + switch (cur->depth()) { + case 0: + out += underline(cur->getHeadingPlain(), QString("=")); + out += "\n"; + break; + case 1: + out += "\n"; + out += (underline(getSectionString(cur) + + cur->getHeadingPlain(), + QString("-"))); + out += "\n"; + break; + case 3: + out += (curIndent + "- " + cur->getHeadingPlain()); + out += "\n"; + dashIndent = " "; + break; + default: + out += (curIndent + "- " + cur->getHeadingPlain()); + out += "\n"; + dashIndent = " "; + break; + } + + // If there is a task, save it for potential later display + if (listTasks && cur->getTask()) { + tasks.append(QString("[%1]: %2") + .arg(cur->getTask()->getStatusString()) + .arg(cur->getHeadingPlain())); + } + + // If necessary, write URL + if (!cur->getURL().isEmpty()) + out += (curIndent + dashIndent + cur->getURL()) + "\n"; + + // If necessary, write vymlink + if (!cur->getVymLink().isEmpty()) + out += (curIndent + dashIndent + cur->getVymLink()) + + " (vym mindmap)\n"; + + // If necessary, write note + if (!cur->isNoteEmpty()) { + // curIndent +=" | "; + // Only indent for bullet points + if (cur->depth() > 2) + curIndent += " "; + out += '\n' + cur->getNoteASCII(curIndent, 80); + } + lastDepth = cur->depth(); + } + } + model->nextBranch(cur, prev); + } + + if (listTasks) { + out += "\n\nTasks\n-----\n\n"; + + foreach (QString t, tasks) { + out += " - " + t + "\n"; + } + } + + QTextStream ts(&file); + ts.setCodec("UTF-8"); + ts << out; + file.close(); + + QClipboard *clipboard = QGuiApplication::clipboard(); + clipboard->setText(out); + + QString listTasksString = listTasks ? "true" : "false"; + + displayedDestination = filePath; + + result = ExportBase::Success; + + QStringList args; + args << filePath; + args << listTasksString; + + completeExport(args); +} + +QString ExportASCII::underline(const QString &text, const QString &line) +{ + QString r = text + "\n"; + for (int j = 0; j < text.length(); j++) + r += line; + return r; +}