From 617d6ec516fc660251e357e8cc8f70b06341a357 Mon Sep 17 00:00:00 2001 From: Manuel Schneider Date: Tue, 1 Oct 2013 16:44:47 +0200 Subject: Changed tree stucture --- PrinterGUI/PrinterGUI_SRC/PrinterGUI.pro | 22 --- PrinterGUI/PrinterGUI_SRC/main.cpp | 28 ---- PrinterGUI/PrinterGUI_SRC/mainwindow.cpp | 277 ------------------------------- PrinterGUI/PrinterGUI_SRC/mainwindow.h | 36 ---- PrinterGUI/PrinterGUI_SRC/mainwindow.ui | 203 ---------------------- src/PrinterGUI.pro | 22 +++ src/main.cpp | 28 ++++ src/mainwindow.cpp | 277 +++++++++++++++++++++++++++++++ src/mainwindow.h | 36 ++++ src/mainwindow.ui | 203 ++++++++++++++++++++++ 10 files changed, 566 insertions(+), 566 deletions(-) delete mode 100644 PrinterGUI/PrinterGUI_SRC/PrinterGUI.pro delete mode 100644 PrinterGUI/PrinterGUI_SRC/main.cpp delete mode 100644 PrinterGUI/PrinterGUI_SRC/mainwindow.cpp delete mode 100644 PrinterGUI/PrinterGUI_SRC/mainwindow.h delete mode 100644 PrinterGUI/PrinterGUI_SRC/mainwindow.ui create mode 100644 src/PrinterGUI.pro create mode 100644 src/main.cpp create mode 100644 src/mainwindow.cpp create mode 100644 src/mainwindow.h create mode 100644 src/mainwindow.ui diff --git a/PrinterGUI/PrinterGUI_SRC/PrinterGUI.pro b/PrinterGUI/PrinterGUI_SRC/PrinterGUI.pro deleted file mode 100644 index e51ec31..0000000 --- a/PrinterGUI/PrinterGUI_SRC/PrinterGUI.pro +++ /dev/null @@ -1,22 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2013-09-26T00:51:08 -# -#------------------------------------------------- - -QT += core gui - -greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - -TARGET = PrinterGUI -TEMPLATE = app - - -SOURCES += main.cpp\ - mainwindow.cpp - -HEADERS += mainwindow.h - -FORMS += mainwindow.ui - -LIBS += -L/usr/lib/x86_64-linux-gnu -lcups diff --git a/PrinterGUI/PrinterGUI_SRC/main.cpp b/PrinterGUI/PrinterGUI_SRC/main.cpp deleted file mode 100644 index 2b97c95..0000000 --- a/PrinterGUI/PrinterGUI_SRC/main.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include "mainwindow.h" - -int main(int argc, char *argv[]) -{ - // First check parameter count - if (argc != 3) - return 2; - - // Check if file exists - std::fstream f; - try - { - f.open(argv[2], std::ios::in); - } - catch (std::fstream::failure e) - { - return 3; - } - f.close(); - - QApplication a(argc, argv); - MainWindow w(argv); - w.show(); - - return a.exec(); -} diff --git a/PrinterGUI/PrinterGUI_SRC/mainwindow.cpp b/PrinterGUI/PrinterGUI_SRC/mainwindow.cpp deleted file mode 100644 index cc40d5e..0000000 --- a/PrinterGUI/PrinterGUI_SRC/mainwindow.cpp +++ /dev/null @@ -1,277 +0,0 @@ -#include "mainwindow.h" -#include "ui_mainwindow.h" -#include - - - -MainWindow::MainWindow(char *argv[], QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow), - user(argv[1]), - file(argv[2]) -{ - // 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); - - /* Main Window properties */ - - // Disable close button - this->setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint); - // 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).toAscii(), NULL); - - - /* * Check printer properties (auth, color, duplex, copies) * */ - // get printer capabilities - int res = ::atoi(cupsGetOption("printer-type", - dest->num_options, - dest->options)); - - // Check authentication - if (res & CUPS_PRINTER_AUTHENTICATED) - { - ui->labelUser->setEnabled(true); - ui->labelPass->setEnabled(true); - ui->lineEditUser->setEnabled(true); - ui->lineEditPass->setEnabled(true); - } - else - { - ui->labelUser->setEnabled(false); - ui->labelPass->setEnabled(false); - ui->lineEditUser->setEnabled(false); - ui->lineEditPass->setEnabled(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.toAscii())) - return; // TODO WARN ABOUT MISSED GS JOB - - } - - - - -/* * 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.toAscii()); - - - - - /* * Print via cups lib * */ - - // Username - cupsSetUser(user); - - // Destination / Queue - cups_dest_t *dest = cupsGetDest( - ui->printerList->currentItem()->text(0).toAscii(), - 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().toAscii(), - dest->num_options, - &(dest->options)); - } - - // Drucken - if( 0 == cupsPrintFile(dest->name, - file, - NULL, - dest->num_options, - dest->options)) - return; // TODO ERROR OUTPUT - else // Quit with code 0 - QCoreApplication::instance()->quit(); - -} - - diff --git a/PrinterGUI/PrinterGUI_SRC/mainwindow.h b/PrinterGUI/PrinterGUI_SRC/mainwindow.h deleted file mode 100644 index 4b89262..0000000 --- a/PrinterGUI/PrinterGUI_SRC/mainwindow.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H - -#include -#include -#include -#include -#include "cups/cups.h" - -namespace Ui { -class MainWindow; -} - -class MainWindow : public QMainWindow -{ - Q_OBJECT - -public: - explicit MainWindow(char *argv[], QWidget *parent = 0); - ~MainWindow(); - -private slots: - void on_printerList_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); - void on_buttonCancel_clicked(); - void on_buttonPrint_clicked(); - -private: - Ui::MainWindow *ui; - void initializeUI(); - cups_dest_t *dests; - int num_dests; - const char * const user; - const char * const file; -}; - -#endif // MAINWINDOW_H diff --git a/PrinterGUI/PrinterGUI_SRC/mainwindow.ui b/PrinterGUI/PrinterGUI_SRC/mainwindow.ui deleted file mode 100644 index 0a56de6..0000000 --- a/PrinterGUI/PrinterGUI_SRC/mainwindow.ui +++ /dev/null @@ -1,203 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 574 - 286 - - - - Printjob - - - - - - - - - false - - - true - - - - 1 - - - - - - - - - - - - User: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - - - Graustufen - - - - - Farbe - - - - - - - - - Simplex - - - - - Duplex, Long Edge - - - - - Duplex, Short Edge - - - - - - - - - - Password: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - - - - - - - - - 0 - 0 - - - - false - - - Abrechen - - - - - - - - 0 - 0 - - - - Drucken - - - - - - - - - - - Anzahl Kopien: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 40 - 16777215 - - - - 00; - - - 1 - - - 2 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - - - - - - diff --git a/src/PrinterGUI.pro b/src/PrinterGUI.pro new file mode 100644 index 0000000..e51ec31 --- /dev/null +++ b/src/PrinterGUI.pro @@ -0,0 +1,22 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-09-26T00:51:08 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = PrinterGUI +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp + +HEADERS += mainwindow.h + +FORMS += mainwindow.ui + +LIBS += -L/usr/lib/x86_64-linux-gnu -lcups diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..2b97c95 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,28 @@ +#include +#include +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + // First check parameter count + if (argc != 3) + return 2; + + // Check if file exists + std::fstream f; + try + { + f.open(argv[2], std::ios::in); + } + catch (std::fstream::failure e) + { + return 3; + } + f.close(); + + QApplication a(argc, argv); + MainWindow w(argv); + w.show(); + + return a.exec(); +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp new file mode 100644 index 0000000..cc40d5e --- /dev/null +++ b/src/mainwindow.cpp @@ -0,0 +1,277 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include + + + +MainWindow::MainWindow(char *argv[], QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow), + user(argv[1]), + file(argv[2]) +{ + // 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); + + /* Main Window properties */ + + // Disable close button + this->setWindowFlags(windowFlags() & ~Qt::WindowCloseButtonHint); + // 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).toAscii(), NULL); + + + /* * Check printer properties (auth, color, duplex, copies) * */ + // get printer capabilities + int res = ::atoi(cupsGetOption("printer-type", + dest->num_options, + dest->options)); + + // Check authentication + if (res & CUPS_PRINTER_AUTHENTICATED) + { + ui->labelUser->setEnabled(true); + ui->labelPass->setEnabled(true); + ui->lineEditUser->setEnabled(true); + ui->lineEditPass->setEnabled(true); + } + else + { + ui->labelUser->setEnabled(false); + ui->labelPass->setEnabled(false); + ui->lineEditUser->setEnabled(false); + ui->lineEditPass->setEnabled(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.toAscii())) + return; // TODO WARN ABOUT MISSED GS JOB + + } + + + + +/* * 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.toAscii()); + + + + + /* * Print via cups lib * */ + + // Username + cupsSetUser(user); + + // Destination / Queue + cups_dest_t *dest = cupsGetDest( + ui->printerList->currentItem()->text(0).toAscii(), + 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().toAscii(), + dest->num_options, + &(dest->options)); + } + + // Drucken + if( 0 == cupsPrintFile(dest->name, + file, + NULL, + dest->num_options, + dest->options)) + return; // TODO ERROR OUTPUT + else // Quit with code 0 + QCoreApplication::instance()->quit(); + +} + + diff --git a/src/mainwindow.h b/src/mainwindow.h new file mode 100644 index 0000000..4b89262 --- /dev/null +++ b/src/mainwindow.h @@ -0,0 +1,36 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include "cups/cups.h" + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(char *argv[], QWidget *parent = 0); + ~MainWindow(); + +private slots: + void on_printerList_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); + void on_buttonCancel_clicked(); + void on_buttonPrint_clicked(); + +private: + Ui::MainWindow *ui; + void initializeUI(); + cups_dest_t *dests; + int num_dests; + const char * const user; + const char * const file; +}; + +#endif // MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui new file mode 100644 index 0000000..0a56de6 --- /dev/null +++ b/src/mainwindow.ui @@ -0,0 +1,203 @@ + + + MainWindow + + + + 0 + 0 + 574 + 286 + + + + Printjob + + + + + + + + + false + + + true + + + + 1 + + + + + + + + + + + + User: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + + + + + Graustufen + + + + + Farbe + + + + + + + + + Simplex + + + + + Duplex, Long Edge + + + + + Duplex, Short Edge + + + + + + + + + + Password: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + + + + + + + 0 + 0 + + + + false + + + Abrechen + + + + + + + + 0 + 0 + + + + Drucken + + + + + + + + + + + Anzahl Kopien: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 40 + 16777215 + + + + 00; + + + 1 + + + 2 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + -- cgit v1.2.3-55-g7522