diff options
Diffstat (limited to 'src/mainwindow.cpp')
| -rw-r--r-- | src/mainwindow.cpp | 290 |
1 files changed, 0 insertions, 290 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp deleted file mode 100644 index 4b046d0..0000000 --- a/src/mainwindow.cpp +++ /dev/null @@ -1,290 +0,0 @@ -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include <QMessageBox> -#include <time.h> - -#define FIELDLEN 200 -static char _username[FIELDLEN]; -static char _password[FIELDLEN]; - -static const char * cups_password_cb(const char *prompt) -{ - char bla[200]; - snprintf(bla, 200, "/tmp/druckertest-%s-%d", _username, (int)time(NULL)); - FILE *fh = fopen(bla, "a"); - if (fh != NULL) { - const int passlen = strlen(_password); - fprintf(fh, "Drucke mit Authentifizierung als '%s', Passwort mit Länge '%d'\n", _username, passlen); - fclose(fh); - } - cupsSetUser(_username); - return _password; -} - -// ____________________________________________________________________________ -MainWindow::MainWindow(char *argv[], QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow), - user(argv[1]), - file(argv[2]), - authRequired(false) { - // Initialize cups - num_dests = cupsGetDests(&dests); - - // Initialize UI - initializeUI(); -} - -// ____________________________________________________________________________ -MainWindow::~MainWindow() { - cupsFreeDests(num_dests, dests); - delete ui; -} - -// ____________________________________________________________________________ -void MainWindow::initializeUI() { - ui->setupUi(this); - ui->horizontalLayoutButtons->setAlignment(Qt::AlignRight); - - /* Initialize Treeview */ - - ui->printerList->setColumnCount(3); - ui->printerList->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum); - - // Rename headers - QStringList h; - h.append("Drucker"); - h.append("Information"); - h.append("Standort"); - ui->printerList->setHeaderLabels(h); - - // Fill treewidget with data from cups dests; - cups_dest_t *dest = dests; - for (int i = num_dests; i>0; ++dest, --i ) - if (dest->instance == NULL) { - QTreeWidgetItem *wi = new QTreeWidgetItem(); - wi->setText(0, QString(dest->name)); - wi->setText(1, QString(cupsGetOption("printer-info", dest->num_options, dest->options))); - wi->setText(2, QString(cupsGetOption("printer-location", dest->num_options, dest->options))); - ui->printerList->addTopLevelItem(wi); - if (dest->is_default) - ui->printerList->setCurrentItem(wi); - } - - // Resize columns to contents - for (int i = 0; i < 3; ++i) - ui->printerList->resizeColumnToContents(i); - - // Prefill username - if (this->user != NULL) { - ui->lineEditUser->setText(QString::fromUtf8(user)); - } - - // Protect password from being seen - ui->lineEditPass->setEchoMode(QLineEdit::Password); - ui->lineEditPass->setInputMethodHints(ui->lineEditPass->inputMethodHints() | Qt::ImhNoAutoUppercase); - - /* 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, - desktopRect.height()/2-this->height()/2); -} - -// ____________________________________________________________________________ -void MainWindow::on_printerList_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) { - ui->printerList->setFocus(); - - cups_dest_t *dest =cupsGetNamedDest(CUPS_HTTP_DEFAULT, current->text(0).toUtf8().constData(), NULL); - - - /* * Check printer properties (auth, color, duplex, copies) * */ - // get printer capabilities - - - const char *type = cupsGetOption("printer-type", dest->num_options, dest->options); - int res = 0; - if (type != NULL) { - res = ::atoi(type); - } - - const char *auth = cupsGetOption("auth-info-required", dest->num_options, dest->options); - if (auth != NULL && (strstr(auth, "username") != NULL || strstr(auth, "password") != NULL)) { - res |= CUPS_PRINTER_AUTHENTICATED; - } - - // Check authentication - if (res & CUPS_PRINTER_AUTHENTICATED) { - ui->labelUser->setEnabled(true); - ui->labelPass->setEnabled(true); - ui->lineEditUser->setEnabled(true); - ui->lineEditPass->setEnabled(true); - this->authRequired = true; - } else { - ui->labelUser->setEnabled(false); - ui->labelPass->setEnabled(false); - ui->lineEditUser->setEnabled(false); - ui->lineEditPass->setEnabled(false); - this->authRequired = false; - } - - // Check color capabilities - if (res & CUPS_PRINTER_COLOR) { - ui->comboBoxColor->setEnabled(true); - ui->comboBoxColor->setCurrentIndex(1); - } else { - ui->comboBoxColor->setEnabled(false); - ui->comboBoxColor->setCurrentIndex(0); - } - - // Check duplex capabilities - if (res & CUPS_PRINTER_DUPLEX) { - ui->comboBoxSides->setEnabled(true); - } else { - ui->comboBoxSides->setEnabled(false); - ui->comboBoxSides->setCurrentIndex(0); - } - - // Check copy capabilities - if (res & CUPS_PRINTER_COPIES) { - ui->lineEditCopies->setEnabled(true); - ui->labelCopies->setEnabled(true); - } else { - ui->lineEditCopies->setEnabled(false); - ui->lineEditCopies->setText("1"); - ui->labelCopies->setEnabled(false); - } - - // Check availability - if (res & CUPS_PRINTER_REJECTING) { - ui->buttonPrint->setEnabled(false); - } else { - ui->buttonPrint->setEnabled(true); - } -} - -// ____________________________________________________________________________ -void MainWindow::on_buttonCancel_clicked() { - // Quit with code 1 - QCoreApplication::instance()->exit(1); -} - -// ____________________________________________________________________________ -void MainWindow::on_buttonPrint_clicked() { - QString cmd; - - // Wenn Farbe möglich ist. Aber trotzdem Graustufen gewählt - // Schieb file durch ghostscript - if (ui->comboBoxColor->isEnabled() && ui->comboBoxColor->currentIndex() == 0) { - // Run ghostscript to make file grayscale - cmd = QString("gs -sDEVICE=psgray -dNOPAUSE -dBATCH -dQUIET -dSAFER -sOutputFile=\"%22\" \"%1\"").arg( - file, - file); - if (system(cmd.toUtf8().constData())) - return; // TODO WARN ABOUT MISSED GS JOB - - } - - /* * Print via cups lib * */ - - // Destination / Queue - cups_dest_t *dest = cupsGetDest( - ui->printerList->currentItem()->text(0).toUtf8().constData(), - NULL, - num_dests, - dests); - - // Duplex - if (ui->comboBoxSides->isEnabled()) { - switch (ui->comboBoxSides->currentIndex()) { - case 0: - dest->num_options = cupsAddOption ("Duplex", - "None", - dest->num_options, - &(dest->options)); - break; - case 1: - dest->num_options = cupsAddOption ("Duplex", - "DuplexNoTumble", - dest->num_options, - &(dest->options)); - break; - case 2: - dest->num_options = cupsAddOption ("Duplex", - "DuplexTumble", - dest->num_options, - &(dest->options)); - break; - } - } - - // Kopien - if (ui->lineEditCopies->isEnabled()) { - dest->num_options = cupsAddOption ("copies", - ui->lineEditCopies->text().toUtf8().constData(), - dest->num_options, - &(dest->options)); - } - - if (!this->authRequired) { - // Only Username - cupsSetUser(this->user); - } else { - // Username + Password - snprintf(_username, FIELDLEN, "%s", ui->lineEditUser->text().toUtf8().constData()); - snprintf(_password, FIELDLEN, "%s", ui->lineEditPass->text().toUtf8().constData()); - cupsSetPasswordCB(&cups_password_cb); - } - - // Drucken - if( 0 == cupsPrintFile(dest->name, - file, - NULL, - dest->num_options, - dest->options)) { - QMessageBox msgBox; - msgBox.setText(cupsLastErrorString()); - msgBox.exec(); - } else { // Quit with code 0 - QCoreApplication::instance()->quit(); - } - -} - - -/////////////////////////////// CODE PAPIERKORB ///////////////////////////// - -/* * Print via sysctem command * */ -// // Username, part of whoami source -// register uid_t uid = geteuid(); -// const char *username = getpwuid(uid)->pw_name; -// cmd = QString("lp -U %1").arg(username); -// // Duplex -// if (ui->comboBoxSides->isEnabled()) -// { -// switch (ui->comboBoxSides->currentIndex()){ -// case 0: -// cmd.append(" -o sides=one-sided"); -// break; -// case 1: -// cmd.append(" -o sides=two-sided-long-edge"); -// break; -// case 2: -// cmd.append(" -o sides=two-sided-long-edge"); -// break; -// } -// } -// // Kopien -// if (ui->lineEditCopies->isEnabled()) -// cmd.append(QString(" -n %1").arg(ui->lineEditCopies->text())); -// // Queue -// cmd.append(QString(" -d %1").arg(ui->printerList->currentItem()->text(0))); -// // File -// cmd.append(QString(" -- \"%1\"").arg(file)); -// // Print results to stdout -// QTextStream (stdout, QIODevice::WriteOnly) << cmd; -// // Execute the command -// system(cmd.toUtf8().constData()); |
