diff options
Diffstat (limited to 'Plugins/Printing')
| -rw-r--r-- | Plugins/Printing/Printing.pro | 35 | ||||
| -rw-r--r-- | Plugins/Printing/printer.png | bin | 0 -> 715 bytes | |||
| -rw-r--r-- | Plugins/Printing/printing.cpp | 111 | ||||
| -rw-r--r-- | Plugins/Printing/printing.h | 36 | ||||
| -rw-r--r-- | Plugins/Printing/printing.json | 9 | ||||
| -rw-r--r-- | Plugins/Printing/printing.qrc | 5 | ||||
| -rw-r--r-- | Plugins/Printing/printing_global.h | 12 | ||||
| -rw-r--r-- | Plugins/Printing/printingexport.cpp | 46 | ||||
| -rw-r--r-- | Plugins/Printing/printingexport.h | 28 |
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 Binary files differnew file mode 100644 index 0000000..9edfbbc --- /dev/null +++ b/Plugins/Printing/printer.png 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 |
