aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/Printing
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins/Printing')
-rw-r--r--Plugins/Printing/Printing.pro35
-rw-r--r--Plugins/Printing/printer.pngbin0 -> 715 bytes
-rw-r--r--Plugins/Printing/printing.cpp111
-rw-r--r--Plugins/Printing/printing.h36
-rw-r--r--Plugins/Printing/printing.json9
-rw-r--r--Plugins/Printing/printing.qrc5
-rw-r--r--Plugins/Printing/printing_global.h12
-rw-r--r--Plugins/Printing/printingexport.cpp46
-rw-r--r--Plugins/Printing/printingexport.h28
9 files changed, 282 insertions, 0 deletions
diff --git a/Plugins/Printing/Printing.pro b/Plugins/Printing/Printing.pro
new file mode 100644
index 0000000..49469c2
--- /dev/null
+++ b/Plugins/Printing/Printing.pro
@@ -0,0 +1,35 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2014-08-03T20:25:45
+#
+#-------------------------------------------------
+
+include($$PWD/../../SQLiteStudio3/plugins.pri)
+
+QT += printsupport
+
+TARGET = Printing
+TEMPLATE = lib
+
+DEFINES += PRINTING_LIBRARY
+
+SOURCES += printing.cpp \
+ printingexport.cpp
+
+HEADERS += printing.h\
+ printing_global.h \
+ printingexport.h
+
+OTHER_FILES += \
+ printing.json
+
+INCLUDEPATH += $$PLUGINSDIR/PdfExport
+DEPENDPATH += $$PLUGINSDIR/PdfExport
+
+win32|macx: {
+# LIBS += -lPdfExport
+ pluginDep(PdfExport)
+}
+
+RESOURCES += \
+ printing.qrc
diff --git a/Plugins/Printing/printer.png b/Plugins/Printing/printer.png
new file mode 100644
index 0000000..9edfbbc
--- /dev/null
+++ b/Plugins/Printing/printer.png
Binary files differ
diff --git a/Plugins/Printing/printing.cpp b/Plugins/Printing/printing.cpp
new file mode 100644
index 0000000..ff8443d
--- /dev/null
+++ b/Plugins/Printing/printing.cpp
@@ -0,0 +1,111 @@
+#include "printing.h"
+#include "printingexport.h"
+#include "common/unused.h"
+#include "mainwindow.h"
+#include "windows/editorwindow.h"
+#include "dataview.h"
+#include "common/extactionprototype.h"
+#include "datagrid/sqlquerymodel.h"
+#include "exportworker.h"
+#include "services/notifymanager.h"
+#include "sqleditor.h"
+#include <QDebug>
+#include <QPrinter>
+#include <QPrintDialog>
+#include <QThreadPool>
+
+bool Printing::init()
+{
+ Q_INIT_RESOURCE(printing);
+
+ printingExport = new PrintingExport();
+ bool printingExportInit = printingExport->init();
+ if (!printingExportInit)
+ return false;
+
+ printingConfig = new ExportManager::StandardExportConfig();
+ printingConfig->exportData = true;
+ printingConfig->exportTableIndexes = false;
+ printingConfig->exportTableTriggers = false;
+ printingConfig->codec = defaultCodecName();
+
+ printDataAction = new ExtActionPrototype(QIcon(":/icons/printer.png"), tr("Print data"), this);
+ separatorAction = new ExtActionPrototype(this);
+ printQueryAction = new ExtActionPrototype(QIcon(":/icons/printer.png"), tr("Print query"), this);
+
+ connect(printDataAction, SIGNAL(triggered(ExtActionContainer*,int)), this, SLOT(dataPrintRequested(ExtActionContainer*)));
+ connect(printQueryAction, SIGNAL(triggered(ExtActionContainer*,int)), this, SLOT(queryPrintRequested(ExtActionContainer*)));
+
+ DataView::insertActionAfter(printDataAction, DataView::LAST_PAGE);
+ DataView::insertActionAfter(separatorAction, DataView::LAST_PAGE);
+ EditorWindow::insertActionAfter(printQueryAction, EditorWindow::EXPORT_RESULTS);
+
+ return true;
+}
+
+void Printing::deinit()
+{
+ printingExport->deinit();
+
+ DataView::removeAction(printDataAction);
+ DataView::removeAction(separatorAction);
+ EditorWindow::removeAction(printQueryAction);
+ safe_delete(printingExport);
+ safe_delete(printDataAction);
+ safe_delete(separatorAction);
+ safe_delete(printQueryAction);
+ safe_delete(printDialog);
+ Q_CLEANUP_RESOURCE(printing);
+}
+
+void Printing::dataPrintRequested(ExtActionContainer* actionContainer)
+{
+ DataView* dataView = dynamic_cast<DataView*>(actionContainer);
+ if (!dataView)
+ {
+ qCritical() << "Printing::dataPrintRequested() called not from DataView:" << actionContainer;
+ return;
+ }
+
+ if (dataView->getModel()->rowCount() == 0)
+ {
+ notifyError(tr("No data to print."));
+ return;
+ }
+
+ safe_delete(printDialog);
+ printDialog = new QPrintDialog(MAINWINDOW);
+ if (printDialog->exec() != QDialog::Accepted)
+ return;
+
+ notifyInfo(tr("Printing data."));
+
+ QString query = dataView->getModel()->getQuery();
+ Db* db = dataView->getModel()->getDb();
+
+ printingExport->setPaintDevice(printDialog->printer());
+
+ ExportWorker* worker = new ExportWorker(printingExport, printingConfig, nullptr);
+ worker->prepareExportQueryResults(db, query);
+ QThreadPool::globalInstance()->start(worker);
+}
+
+void Printing::queryPrintRequested(ExtActionContainer* actionContainer)
+{
+ EditorWindow* editor = dynamic_cast<EditorWindow*>(actionContainer);
+ if (!editor)
+ {
+ qCritical() << "Printing::queryPrintRequested() called not from EditorWindow:" << actionContainer;
+ return;
+ }
+
+ safe_delete(printDialog);
+ printDialog = new QPrintDialog(MAINWINDOW);
+ if (printDialog->exec() != QDialog::Accepted)
+ return;
+
+ notifyInfo(tr("Printing query."));
+
+ QTextDocument* doc = editor->getEditor()->document();
+ doc->print(printDialog->printer());
+}
diff --git a/Plugins/Printing/printing.h b/Plugins/Printing/printing.h
new file mode 100644
index 0000000..78463a9
--- /dev/null
+++ b/Plugins/Printing/printing.h
@@ -0,0 +1,36 @@
+#ifndef PRINTING_H
+#define PRINTING_H
+
+#include "printing_global.h"
+#include "plugins/genericplugin.h"
+#include "plugins/generalpurposeplugin.h"
+#include "services/exportmanager.h"
+
+class ExtActionPrototype;
+class ExtActionContainer;
+class PrintingExport;
+class QPrintDialog;
+
+class PRINTINGSHARED_EXPORT Printing : public GenericPlugin, public GeneralPurposePlugin
+{
+ Q_OBJECT
+ SQLITESTUDIO_PLUGIN("printing.json")
+
+ public:
+ bool init();
+ void deinit();
+
+ private:
+ ExtActionPrototype* separatorAction = nullptr;
+ ExtActionPrototype* printDataAction = nullptr;
+ ExtActionPrototype* printQueryAction = nullptr;
+ PrintingExport* printingExport = nullptr;
+ ExportManager::StandardExportConfig* printingConfig = nullptr;
+ QPrintDialog* printDialog = nullptr;
+
+ private slots:
+ void dataPrintRequested(ExtActionContainer* actionContainer);
+ void queryPrintRequested(ExtActionContainer* actionContainer);
+};
+
+#endif // PRINTING_H
diff --git a/Plugins/Printing/printing.json b/Plugins/Printing/printing.json
new file mode 100644
index 0000000..1a59fb5
--- /dev/null
+++ b/Plugins/Printing/printing.json
@@ -0,0 +1,9 @@
+{
+ "type": "GeneralPurposePlugin",
+ "title": "Printing",
+ "description": "Provides printing support.",
+ "version": 10000,
+ "author": "SalSoft",
+ "gui": true,
+ "dependencies": "PdfExport"
+}
diff --git a/Plugins/Printing/printing.qrc b/Plugins/Printing/printing.qrc
new file mode 100644
index 0000000..faf09c1
--- /dev/null
+++ b/Plugins/Printing/printing.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/icons">
+ <file>printer.png</file>
+ </qresource>
+</RCC>
diff --git a/Plugins/Printing/printing_global.h b/Plugins/Printing/printing_global.h
new file mode 100644
index 0000000..59be5a4
--- /dev/null
+++ b/Plugins/Printing/printing_global.h
@@ -0,0 +1,12 @@
+#ifndef PRINTING_GLOBAL_H
+#define PRINTING_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(PRINTING_LIBRARY)
+# define PRINTINGSHARED_EXPORT Q_DECL_EXPORT
+#else
+# define PRINTINGSHARED_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // PRINTING_GLOBAL_H
diff --git a/Plugins/Printing/printingexport.cpp b/Plugins/Printing/printingexport.cpp
new file mode 100644
index 0000000..c2d7fd0
--- /dev/null
+++ b/Plugins/Printing/printingexport.cpp
@@ -0,0 +1,46 @@
+#include "printingexport.h"
+#include "common/unused.h"
+#include "mainwindow.h"
+#include "services/notifymanager.h"
+
+QPagedPaintDevice* PrintingExport::createPaintDevice(const QString& documentTitle)
+{
+ UNUSED(documentTitle);
+ return paintDevice;
+}
+
+QPagedPaintDevice* PrintingExport::getPaintDevice() const
+{
+ return paintDevice;
+}
+
+void PrintingExport::setPaintDevice(QPagedPaintDevice* value)
+{
+ paintDevice = value;
+}
+
+bool PrintingExport::init()
+{
+ lineWidth = 1;
+ return PdfExport::init();
+}
+
+void PrintingExport::deinit()
+{
+}
+
+QString PrintingExport::getFormatName() const
+{
+ return tr("Printing");
+}
+
+ExportManager::StandardConfigFlags PrintingExport::standardOptionsToEnable() const
+{
+ return 0;
+}
+
+ExportManager::ExportModes PrintingExport::getSupportedModes() const
+{
+ return ExportManager::DATABASE|ExportManager::TABLE|ExportManager::QUERY_RESULTS;
+
+}
diff --git a/Plugins/Printing/printingexport.h b/Plugins/Printing/printingexport.h
new file mode 100644
index 0000000..fc6172d
--- /dev/null
+++ b/Plugins/Printing/printingexport.h
@@ -0,0 +1,28 @@
+#ifndef PRINTINGEXPORT_H
+#define PRINTINGEXPORT_H
+
+#include "printing_global.h"
+#include "PdfExport/pdfexport.h"
+
+class PRINTINGSHARED_EXPORT PrintingExport : public PdfExport
+{
+ Q_OBJECT
+
+ public:
+ bool init();
+ void deinit();
+ QString getFormatName() const;
+ ExportManager::StandardConfigFlags standardOptionsToEnable() const;
+ ExportManager::ExportModes getSupportedModes() const;
+
+ QPagedPaintDevice* getPaintDevice() const;
+ void setPaintDevice(QPagedPaintDevice* value);
+
+ protected:
+ QPagedPaintDevice* createPaintDevice(const QString& documentTitle);
+
+ private:
+ QPagedPaintDevice* paintDevice = nullptr;
+};
+
+#endif // PRINTINGEXPORT_H