summaryrefslogtreecommitdiffstats
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp290
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());