summaryrefslogtreecommitdiffstats
path: root/src/maingui/printergui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/maingui/printergui.cpp')
-rw-r--r--src/maingui/printergui.cpp68
1 files changed, 55 insertions, 13 deletions
diff --git a/src/maingui/printergui.cpp b/src/maingui/printergui.cpp
index 8d2e81e..21e03f4 100644
--- a/src/maingui/printergui.cpp
+++ b/src/maingui/printergui.cpp
@@ -4,6 +4,7 @@
#include <unistd.h>
#include <QTimer>
#include <QStatusBar>
+#include <QCloseEvent>
#include <pwd.h>
#include <cups/ppd.h>
@@ -13,9 +14,11 @@ static QStringList knownPageSizeOptions = QStringList() << "PageSize";
// ____________________________________________________________________________
PrinterGui::PrinterGui(char *argv[], QWidget *parent) :
- QMainWindow(parent),
+ QDialog(parent),
ui(new Ui::PrinterGui),
- bgTimeout(-1)
+ statusBar(NULL),
+ bgTimeout(-1),
+ jobId(0)
{
// When called it is guaranteed that argv has (at least) 3 elements
@@ -59,12 +62,19 @@ PrinterGui::~PrinterGui()
void PrinterGui::initializeUI()
{
ui->setupUi(this);
+ this->setWindowModality(Qt::ApplicationModal);
+ // Put always on top
+ this->setWindowFlags(Qt::Dialog | Qt::WindowStaysOnTopHint);
ui->horizontalLayoutButtons->setAlignment(Qt::AlignRight);
ui->comboBoxColor->setEnabled(false);
ui->comboBoxSides->setEnabled(false);
ui->label_color->setEnabled(false);
ui->label_duplex->setEnabled(false);
+ // Create a status bar (qt designer doesn't support this for dialogs)
+ statusBar = new QStatusBar(this);
+ ui->statusBarLayout->addWidget(statusBar);
+
/* Initialize Treeview */
ui->printerList->setColumnCount(3);
@@ -98,8 +108,6 @@ void PrinterGui::initializeUI()
/* Main Window properties */
- // Disable close button
- this->setWindowFlags((this->windowFlags() & ~Qt::WindowCloseButtonHint) | Qt::WindowStaysOnTopHint);
// center dialog on screen center
QRect desktopRect = QApplication::desktop()->screenGeometry(this);
this->move( desktopRect.width()/2-this->width()/2,
@@ -190,17 +198,43 @@ void PrinterGui::on_printerList_currentItemChanged(QTreeWidgetItem *current, QTr
// Check availability
if (res & CUPS_PRINTER_REJECTING) {
ui->buttonPrint->setEnabled(false);
- statusBar()->showMessage("Dieser Drucker nimmt zur Zeit keine Aufträge an");
+ statusBar->showMessage("Dieser Drucker nimmt zur Zeit keine Aufträge an");
} else {
ui->buttonPrint->setEnabled(true);
- statusBar()->clearMessage();
+ statusBar->clearMessage();
}
}
+void PrinterGui::closeEvent(QCloseEvent * e)
+{
+ if (e->isAccepted()) {
+ if (jobId != 0) {
+ cupsCancelJob(ui->printerList->currentItem()->text(0).toUtf8().constData(), jobId);
+ jobId = 0;
+ }
+ QCoreApplication::instance()->exit(0);
+ }
+ QDialog::closeEvent(e);
+}
+
+void PrinterGui::keyPressEvent(QKeyEvent * e)
+{
+ if(e->key() != Qt::Key_Escape) {
+ QDialog::keyPressEvent(e);
+ return;
+ }
+ this->close();
+}
+
+void PrinterGui::hideEvent(QHideEvent * e)
+{
+ this->close();
+}
+
// ____________________________________________________________________________
void PrinterGui::on_buttonCancel_clicked()
{
- QCoreApplication::instance()->exit(0);
+ this->close();
}
// ____________________________________________________________________________
@@ -250,20 +284,28 @@ void PrinterGui::on_buttonPrint_clicked()
}
cupsSetUser(this->user);
- char jobtitle[100];
- snprintf(jobtitle, 100, "gui-%d-%s", (int)getpid(), this->user);
+ char jobtitle[200];
+ const char *docName;
+ docName = getenv("J");
+ if (docName == NULL) {
+ docName = getenv("N");
+ }
+ if (docName == NULL) {
+ docName = "Untitled";
+ }
+ snprintf(jobtitle, sizeof(jobtitle), "gui-%d-%s (%s)", (int)getpid(), this->user, docName);
// Drucken
- if( 0 == cupsPrintFile(dest->name,
+ jobId = cupsPrintFile(dest->name,
file,
jobtitle,
dest->num_options,
- dest->options)) {
+ dest->options);
+ if (jobId == 0) {
QMessageBox::critical(this, "CUPS Fehler", cupsLastErrorString());
} else {
this->bgTimeout = 0;
- statusBar()->showMessage("Druckauftrag wird verarbeitet...");
- ui->buttonCancel->setEnabled(false);
+ statusBar->showMessage("Druckauftrag wird verarbeitet...");
ui->buttonPrint->setEnabled(false);
ui->cboPaperSize->setEnabled(false);
ui->comboBoxColor->setEnabled(false);