summaryrefslogtreecommitdiffstats
path: root/src/exporters/baseexporter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/exporters/baseexporter.h')
-rw-r--r--src/exporters/baseexporter.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/src/exporters/baseexporter.h b/src/exporters/baseexporter.h
new file mode 100644
index 0000000..d814fb4
--- /dev/null
+++ b/src/exporters/baseexporter.h
@@ -0,0 +1,95 @@
+/***************************************************************************
+* Copyright (C) 2003 by *
+* Cyril Bosselut ([email protected]) *
+* Jason Kivlighn ([email protected]) *
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+***************************************************************************/
+
+#ifndef BASEEXPORTER_H
+#define BASEEXPORTER_H
+
+#include <tqstringlist.h>
+
+#include <tdeapplication.h>
+#include <kprogress.h>
+
+#include "datablocks/recipelist.h"
+
+class TQFile;
+
+class KTar;
+
+class RecipeDB;
+
+class BaseExporter
+{
+public:
+ BaseExporter( const TQString &file, const TQString &ext );
+ virtual ~BaseExporter();
+
+ /** Subclasses must report which items it is able to work with.
+ * These should be or'ed together items from RecipeDB::RecipeItems
+ */
+ virtual int supportedItems() const = 0;
+
+ /** Export the recipes with the given ids to the file specified in the constructor.
+ * Optionally, a progress dialog may be given to specify the progress made.
+ */
+ void exporter( const TQValueList<int> &ids, RecipeDB *database, KProgressDialog * = 0 );
+
+ /** Convenience function for the above, which exports a single recipe. */
+ void exporter( int id, RecipeDB *database, KProgressDialog * = 0 );
+
+ /** Returns the actual filename that will be written to during the export.
+ * Note that this can differ somewhat from the filename passed in the
+ * constructor.
+ */
+ TQString fileName() const;
+
+ /** Write the given recipe list to a text stream.
+ * This can be used to export recipes without use of the database.
+ */
+ void writeStream( TQTextStream &, const RecipeList & );
+
+protected:
+ virtual TQString createContent( const RecipeList & ) = 0;
+ virtual TQString createFooter(){ return TQString(); }
+ virtual TQString createHeader( const RecipeList & ){ return TQString(); }
+
+ /** The number of recipes to load into memory at once. This many recipes will be
+ * loaded from the database, processed, and then another batch of this many will be
+ * processed until all recipes are exported.
+ */
+ virtual int progressInterval() const { return 50; }
+
+ /** Extra RecipeDB::RecipeItems that a subclass requires when creating a file's header.
+ * For example, the Krecipes file format requires writing the category hierarchy in the header,
+ * so it's exporter adds RecipeDB::Categories.
+ */
+ virtual int headerFlags() const;
+
+ /** Make generated file a gzipped tarball */
+ void setCompressed( bool );
+
+ /** Attempt to return the version of the application via
+ * TDEGlobal::instance()->aboutData()->version()
+ * This can be used by exporters to put the version of the app exporting the file.
+ */
+ TQString krecipes_version() const;
+
+private:
+ bool createFile();
+ void saveToFile( const TQValueList<int> &ids, RecipeDB *database );
+
+ TQFile* file;
+ KTar *tar_file;
+ TQString filename;
+ KProgressDialog *m_progress_dlg;
+ bool compress;
+};
+
+#endif //BASEEXPORTER_H