aboutsummaryrefslogtreecommitdiffstats
path: root/Plugins/Printing/printing.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
commit7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch)
treea35c14143716e1f2c98f808c81f89426045a946f /Plugins/Printing/printing.cpp
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'Plugins/Printing/printing.cpp')
-rw-r--r--Plugins/Printing/printing.cpp111
1 files changed, 111 insertions, 0 deletions
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());
+}