diff --git a/app/node/nodecopypaste.cpp b/app/node/nodecopypaste.cpp index 9b4aec472..7741f9940 100644 --- a/app/node/nodecopypaste.cpp +++ b/app/node/nodecopypaste.cpp @@ -51,7 +51,7 @@ void NodeCopyPasteService::CopyNodesToClipboard(QVector nodes, void *use CopyNodesToClipboardCallback(nodes, &data, userdata); - ProjectSerializer::Save(&writer, data); + ProjectSerializer::Save(&writer, data, type_); Core::CopyStringToClipboard(copy_str); } @@ -66,7 +66,7 @@ void NodeCopyPasteService::PasteNodesFromClipboard(void *userdata) QXmlStreamReader reader(clipboard); Project temp; - ProjectSerializer::Result res = ProjectSerializer::Load(&temp, &reader); + ProjectSerializer::Result res = ProjectSerializer::Load(&temp, &reader, type_); if (res.code() != ProjectSerializer::kSuccess) { return; diff --git a/app/node/nodecopypaste.h b/app/node/nodecopypaste.h index 28c53bed9..eaf3c2b86 100644 --- a/app/node/nodecopypaste.h +++ b/app/node/nodecopypaste.h @@ -34,7 +34,9 @@ namespace olive { class NodeCopyPasteService { public: - NodeCopyPasteService() = default; + NodeCopyPasteService(const QString &type) : + type_(type) + {} protected: void CopyNodesToClipboard(QVector nodes, void* userdata = nullptr); @@ -45,6 +47,9 @@ protected: virtual void PasteNodesToClipboardCallback(const QVector &nodes, const ProjectSerializer::LoadData &load_data, void *userdata){} +private: + QString type_; + }; } diff --git a/app/node/project/serializer/serializer.cpp b/app/node/project/serializer/serializer.cpp index 91164db0e..ca2bee88e 100644 --- a/app/node/project/serializer/serializer.cpp +++ b/app/node/project/serializer/serializer.cpp @@ -55,14 +55,14 @@ void ProjectSerializer::Destroy() instances_.clear(); } -ProjectSerializer::Result ProjectSerializer::Load(Project *project, const QString &filename) +ProjectSerializer::Result ProjectSerializer::Load(Project *project, const QString &filename, const QString &type) { QFile project_file(filename); if (project_file.open(QFile::ReadOnly | QFile::Text)) { QXmlStreamReader reader(&project_file); - Result inner_result = Load(project, &reader); + Result inner_result = Load(project, &reader, type); project_file.close(); @@ -82,13 +82,13 @@ ProjectSerializer::Result ProjectSerializer::Load(Project *project, const QStrin } } -ProjectSerializer::Result ProjectSerializer::Load(Project *project, QXmlStreamReader *reader) +ProjectSerializer::Result ProjectSerializer::Load(Project *project, QXmlStreamReader *reader, const QString &type) { // Determine project version uint version = 0; while (!version && XMLReadNextStartElement(reader)) { - if (reader->name() == QStringLiteral("olive") || reader->name() == QStringLiteral("project")) { + if (reader->name() == QStringLiteral("olive") || reader->name() == type) { while(!version && XMLReadNextStartElement(reader)) { if (reader->name() == QStringLiteral("version")) { version = reader->readElementText().toUInt(); @@ -135,7 +135,7 @@ ProjectSerializer::Result ProjectSerializer::Load(Project *project, QXmlStreamRe } } -ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data) +ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data, const QString &type) { QString temp_save = FileFunctions::GetSafeTemporaryFilename(data.GetFilename()); @@ -144,7 +144,7 @@ ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data) if (project_file.open(QFile::WriteOnly | QFile::Text)) { QXmlStreamWriter writer(&project_file); - Result inner_result = Save(&writer, data); + Result inner_result = Save(&writer, data, type); project_file.close(); @@ -167,7 +167,7 @@ ProjectSerializer::Result ProjectSerializer::Save(const SaveData &data) } } -ProjectSerializer::Result ProjectSerializer::Save(QXmlStreamWriter *writer, const SaveData &data) +ProjectSerializer::Result ProjectSerializer::Save(QXmlStreamWriter *writer, const SaveData &data, const QString &type) { writer->setAutoFormatting(true); @@ -187,11 +187,11 @@ ProjectSerializer::Result ProjectSerializer::Save(QXmlStreamWriter *writer, cons writer->writeTextElement("url", data.GetFilename()); } - writer->writeStartElement(QStringLiteral("project")); + writer->writeStartElement(type); serializer->Save(writer, data, nullptr); - writer->writeEndElement(); // project + writer->writeEndElement(); // [type] writer->writeEndElement(); // olive diff --git a/app/node/project/serializer/serializer.h b/app/node/project/serializer/serializer.h index 0417f440c..58f9505cc 100644 --- a/app/node/project/serializer/serializer.h +++ b/app/node/project/serializer/serializer.h @@ -137,11 +137,11 @@ public: static void Destroy(); - static Result Load(Project *project, const QString &filename); - static Result Load(Project *project, QXmlStreamReader *read_device); + static Result Load(Project *project, const QString &filename, const QString &type); + static Result Load(Project *project, QXmlStreamReader *read_device, const QString &type); - static Result Save(const SaveData &data); - static Result Save(QXmlStreamWriter *write_device, const SaveData &data); + static Result Save(const SaveData &data, const QString &type); + static Result Save(QXmlStreamWriter *write_device, const SaveData &data, const QString &type); protected: virtual LoadData Load(Project *project, QXmlStreamReader *reader, void *reserved) const = 0; diff --git a/app/task/project/load/load.cpp b/app/task/project/load/load.cpp index 606f53e37..f1878dec9 100644 --- a/app/task/project/load/load.cpp +++ b/app/task/project/load/load.cpp @@ -37,7 +37,7 @@ bool ProjectLoadTask::Run() project_->set_filename(GetFilename()); - ProjectSerializer::Result result = ProjectSerializer::Load(project_, GetFilename()); + ProjectSerializer::Result result = ProjectSerializer::Load(project_, GetFilename(), QStringLiteral("project")); switch (result.code()) { case ProjectSerializer::kSuccess: diff --git a/app/task/project/save/save.cpp b/app/task/project/save/save.cpp index 1f5742bcf..3d4c5f6e5 100644 --- a/app/task/project/save/save.cpp +++ b/app/task/project/save/save.cpp @@ -42,7 +42,7 @@ bool ProjectSaveTask::Run() ProjectSerializer::SaveData data(project_, using_filename); - ProjectSerializer::Result result = ProjectSerializer::Save(data); + ProjectSerializer::Result result = ProjectSerializer::Save(data, QStringLiteral("project")); bool success = false; diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index 9105d8cb1..2f4041123 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -45,6 +45,7 @@ const double NodeView::kMinimumScale = 0.1; NodeView::NodeView(QWidget *parent) : HandMovableView(parent), + NodeCopyPasteService(QStringLiteral("nodes")), drop_edge_(nullptr), create_edge_(nullptr), create_edge_output_item_(nullptr), diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 547f11cc9..42da36118 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -60,6 +60,7 @@ namespace olive { TimelineWidget::TimelineWidget(QWidget *parent) : super(true, true, parent), + NodeCopyPasteService(QStringLiteral("timeline")), rubberband_(QRubberBand::Rectangle, this), active_tool_(nullptr), use_audio_time_units_(false),