Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 9.93 KB | None | 0 0
  1. diff --git a/src/backend/core/Project.cpp b/src/backend/core/Project.cpp
  2. index 477d3124b..8b001fff5 100644
  3. --- a/src/backend/core/Project.cpp
  4. +++ b/src/backend/core/Project.cpp
  5. @@ -53,6 +53,7 @@
  6.  #include <QMenu>
  7.  #include <QThreadPool>
  8.  #include <QUndoStack>
  9. +#include <QBuffer>
  10.  
  11.  #include <KConfig>
  12.  #include <KConfigGroup>
  13. @@ -223,10 +224,8 @@ QString Project::supportedExtensions() {
  14.  //##############################################################################
  15.  //##################  Serialization/Deserialization  ###########################
  16.  //##############################################################################
  17. -/**
  18. - * \brief Save as XML
  19. - */
  20. -void Project::save(QXmlStreamWriter* writer) const {
  21. +
  22. +void Project::save(const QPixmap& thumbnail, QXmlStreamWriter* writer) const {
  23.     //set the version and the modification time to the current values
  24.     d->version = LVERSION;
  25.     d->modificationTime = QDateTime::currentDateTime();
  26. @@ -240,10 +239,25 @@ void Project::save(QXmlStreamWriter* writer) const {
  27.     writer->writeAttribute("fileName", fileName());
  28.     writer->writeAttribute("modificationTime", modificationTime().toString("yyyy-dd-MM hh:mm:ss:zzz"));
  29.     writer->writeAttribute("author", author());
  30. +
  31. +   QByteArray bArray;
  32. +   QBuffer buffer(&bArray);
  33. +   buffer.open(QIODevice::WriteOnly);
  34. +   thumbnail.save(&buffer, "JPEG");
  35. +   QString image = QString::fromLatin1(bArray.toBase64().data());
  36. +   writer->writeAttribute("thumbnail", image);
  37. +
  38.     writeBasicAttributes(writer);
  39.  
  40.     writeCommentElement(writer);
  41.  
  42. +   save(writer);
  43. +}
  44. +
  45. +/**
  46. + * \brief Save as XML
  47. + */
  48. +void Project::save(QXmlStreamWriter* writer) const {
  49.     //save all children
  50.     for (auto* child : children<AbstractAspect>(IncludeHidden)) {
  51.         writer->writeStartElement("child_aspect");
  52. diff --git a/src/backend/core/Project.h b/src/backend/core/Project.h
  53. index 2558c9cd4..8bd3aee86 100644
  54. --- a/src/backend/core/Project.h
  55. +++ b/src/backend/core/Project.h
  56. @@ -73,7 +73,7 @@ public:
  57.     bool hasChanged() const;
  58.     void navigateTo(const QString& path);
  59.  
  60. -   void save(QXmlStreamWriter*) const override;
  61. +   void save(const QPixmap&, QXmlStreamWriter*) const;
  62.     bool load(XmlStreamReader*, bool preview) override;
  63.     bool load(const QString&, bool preview = false);
  64.  
  65. @@ -98,6 +98,7 @@ private:
  66.     class Private;
  67.     Private* d;
  68.     bool readProjectAttributes(XmlStreamReader*);
  69. +   void save(QXmlStreamWriter*) const override;
  70.  };
  71.  
  72.  #endif // ifndef PROJECT_H
  73. diff --git a/src/kdefrontend/MainWin.cpp b/src/kdefrontend/MainWin.cpp
  74. index da62a398d..2dba76f64 100644
  75. --- a/src/kdefrontend/MainWin.cpp
  76. +++ b/src/kdefrontend/MainWin.cpp
  77. @@ -1097,8 +1097,10 @@ bool MainWin::save(const QString& fileName) {
  78.     if (file->open(QIODevice::WriteOnly)) {
  79.         m_project->setFileName(fileName);
  80.  
  81. +       QPixmap thumbnail = centralWidget()->grab();
  82. +
  83.         QXmlStreamWriter writer(file);
  84. -       m_project->save(&writer);
  85. +       m_project->save(thumbnail, &writer);
  86.         m_project->undoStack()->clear();
  87.         m_project->setChanged(false);
  88.         file->close();
  89.  
  90. diff --git a/src/kdefrontend/WelcomeScreenHelper.cpp b/src/kdefrontend/WelcomeScreenHelper.cpp
  91. new file mode 100644
  92. index 000000000..394e115c1
  93. --- /dev/null
  94. +++ b/src/kdefrontend/WelcomeScreenHelper.cpp
  95. @@ -0,0 +1,116 @@
  96. +/***************************************************************************
  97. +   File                 : WelcomeScreenHelper.cpp
  98. +   Project              : LabPlot
  99. +   --------------------------------------------------------------------
  100. +   Copyright            : (C) 2019 Ferencz Kovacs (kferike98@gmail.com)
  101. +   Description          : Helper class for the welcome screen
  102. + ***************************************************************************/
  103. +
  104. +/***************************************************************************
  105. + *                                                                         *
  106. + *  This program is free software; you can redistribute it and/or modify   *
  107. + *  it under the terms of the GNU General Public License as published by   *
  108. + *  the Free Software Foundation; either version 2 of the License, or      *
  109. + *  (at your option) any later version.                                    *
  110. + *                                                                         *
  111. + *  This program is distributed in the hope that it will be useful,        *
  112. + *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
  113. + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
  114. + *  GNU General Public License for more details.                           *
  115. + *                                                                         *
  116. + *   You should have received a copy of the GNU General Public License     *
  117. + *   along with this program; if not, write to the Free Software           *
  118. + *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
  119. + *   Boston, MA  02110-1301  USA                                           *
  120. + *                                                                         *
  121. + ***************************************************************************/
  122. +#include "WelcomeScreenHelper.h"
  123. +#include "DatasetModel.h"
  124. +#include "kdefrontend/datasources/ImportDatasetWidget.h"
  125. +#include "backend/datasources/DatasetHandler.h"
  126. +
  127. +#include <QVector>
  128. +#include <QTimer>
  129. +#include <QFile>
  130. +#include <QDebug>
  131. +#include <QUrl>
  132. +
  133. +#include <KFilterDev>
  134. +#include <KCompressionDevice>
  135. +
  136. +
  137. +/*!
  138. +\class WelcomeScreenHelper
  139. +\brief Helper class for the welcome screen
  140. +
  141. +\ingroup kdefrontend
  142. +*/
  143. +WelcomeScreenHelper::WelcomeScreenHelper() {
  144. +   m_datasetWidget = new ImportDatasetWidget(0);
  145. +   m_datasetWidget->hide();
  146. +
  147. +   m_datasetModel = new DatasetModel(m_datasetWidget->getDatasetsMap());
  148. +
  149. +}
  150. +
  151. +WelcomeScreenHelper::~WelcomeScreenHelper() {
  152. +
  153. +}
  154.  
  155. +/**
  156. + * @brief Returns the thumbnail image saved with the project.
  157. + * @param url the path to the saved project file.
  158. + */
  159. +QVariant WelcomeScreenHelper::getProjectThumbnail(const QUrl& url) {
  160. +   QString filename;
  161. +   if (url.isLocalFile())  // fix for Windows
  162. +       filename = url.toLocalFile();
  163. +   else
  164. +       filename = url.path();
  165. +
  166. +   QIODevice* file;
  167. +   // first try gzip compression, because projects can be gzipped and end with .lml
  168. +   if (filename.endsWith(QLatin1String(".lml"), Qt::CaseInsensitive))
  169. +       file = new KCompressionDevice(filename,KFilterDev::compressionTypeForMimeType("application/x-gzip"));
  170. +   else    // opens filename using file ending
  171. +       file = new KFilterDev(filename);
  172. +
  173. +   if (!file)
  174. +       file = new QFile(filename);
  175. +
  176. +   if (!file->open(QIODevice::ReadOnly)) {
  177. +       qDebug() << "Could not open file for reading.";
  178. +       return QVariant();
  179. +   }
  180. +
  181. +   char c;
  182. +   bool rc = file->getChar(&c);
  183. +   if (!rc) {
  184. +       qDebug() << "The project file is empty.";
  185. +       file->close();
  186. +       delete file;
  187. +       return false;
  188. +   }
  189. +   file->seek(0);
  190. +
  191. +   //parse XML
  192. +   XmlStreamReader reader(file);
  193. +
  194. +   while (!(reader.isStartDocument() || reader.atEnd()))
  195. +       reader.readNext();
  196. +
  197. +   if (!(reader.atEnd())) {
  198. +       if (!reader.skipToNextTag())
  199. +           return false;
  200. +
  201. +       if (reader.name() == "project") {
  202. +           QString thumbnail = reader.attributes().value("thumbnail").toString();
  203. +
  204. +           thumbnail.prepend("data:image/jpg;base64,");
  205. +           qDebug() << "Return thumbnail " <<thumbnail;
  206. +           return QVariant(thumbnail);
  207. +       }
  208. +   }
  209. +
  210. +   return QVariant();
  211. +}
  212. diff --git a/src/kdefrontend/WelcomeScreenHelper.h b/src/kdefrontend/WelcomeScreenHelper.h
  213. new file mode 100644
  214. index 000000000..560a85df7
  215. --- /dev/null
  216. +++ b/src/kdefrontend/WelcomeScreenHelper.h
  217. @@ -0,0 +1,53 @@
  218. +/***************************************************************************
  219. +    File                 : WelcomeScreenHelper.h
  220. +    Project              : LabPlot
  221. +    --------------------------------------------------------------------
  222. +    Copyright            : (C) 2019 Ferencz Kovacs (kferike98@gmail.com)
  223. +    Description          : Helper class for the welcome screen
  224. + ***************************************************************************/
  225. +
  226. +/***************************************************************************
  227. + *                                                                         *
  228. + *  This program is free software; you can redistribute it and/or modify   *
  229. + *  it under the terms of the GNU General Public License as published by   *
  230. + *  the Free Software Foundation; either version 2 of the License, or      *
  231. + *  (at your option) any later version.                                    *
  232. + *                                                                         *
  233. + *  This program is distributed in the hope that it will be useful,        *
  234. + *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
  235. + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
  236. + *  GNU General Public License for more details.                           *
  237. + *                                                                         *
  238. + *   You should have received a copy of the GNU General Public License     *
  239. + *   along with this program; if not, write to the Free Software           *
  240. + *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
  241. + *   Boston, MA  02110-1301  USA                                           *
  242. + *                                                                         *
  243. + ***************************************************************************/
  244. +#ifndef WELCOMESCREENHELPER_H
  245. +#define WELCOMESCREENHELPER_H
  246. +
  247. +#include <QObject>
  248. +#include <QMap>
  249. +#include <QVariant>
  250. +#include <memory>
  251. +
  252. +class ImportDatasetWidget;
  253. +class DatasetHandler;
  254. +class Spreadsheet;
  255. +class DatasetModel;
  256. +
  257. +class WelcomeScreenHelper:  public QObject {
  258. +    Q_OBJECT
  259. +
  260. +public:
  261. +    WelcomeScreenHelper();
  262. +    ~WelcomeScreenHelper();
  263. +    Q_INVOKABLE QVariant getProjectThumbnail(const QUrl& url);
  264. +
  265. +private:
  266. +    DatasetModel* m_datasetModel{nullptr};
  267. +    ImportDatasetWidget* m_datasetWidget{nullptr};
  268. +
  269. +};
  270. +#endif //WELCOMESCREENHELPER_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement