Skip to content

Commit 1cc957c

Browse files
Plugging in the backend in the new interface
1 parent f150793 commit 1cc957c

File tree

7 files changed

+191
-52
lines changed

7 files changed

+191
-52
lines changed

app/commonprintdialog.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ extern "C" {
88
#include <QQmlApplicationEngine>
99
#include <QObject>
1010

11-
gpointer parse_commands(gpointer user_data);
11+
//gpointer parse_commands(gpointer user_data);
1212

1313
class _CommonPrintDialog
1414
{
@@ -37,7 +37,7 @@ class CommonPrintDialog {
3737

3838
class BackendObject: public QObject {
3939
Q_OBJECT
40-
public slots:
40+
public Q_SLOTS:
4141
void newPrinterSelected(const QString &printer);
4242
void remotePrintersToggled(const QString enabled);
4343
void cancelButtonClicked();

app/window.cpp

Lines changed: 133 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
11
#include "window.h"
2+
#include <QDebug>
23

3-
Window::Window() :
4+
_Window *_window;
5+
6+
_Window::_Window(QWidget *parent) :
7+
QWidget(parent),
8+
masterLayout(new QGridLayout(this)),
49
tabs(new Tabs(this)),
5-
content(new QHBoxLayout()),
610
root(new Root(this)),
711
preview(new Preview(this)),
8-
controls(new Controls(this)),
9-
container(new QVBoxLayout())
12+
controls(new Controls(this))
1013
{
1114
/*
12-
* container
15+
* masterLayout
1316
* |-tabs
14-
* |-content
15-
* |-root
16-
* |-preview
17+
* |-root -- preview
1718
* |-controls
1819
*/
19-
setCentralWidget(new QWidget(this));
20-
21-
tabs->setMinimumSize(700, 32);
2220
QObject::connect(tabs->rootObject,
2321
SIGNAL(tabBarIndexChanged(qint32)),
2422
this,
@@ -49,51 +47,144 @@ Window::Window() :
4947
preview,
5048
SLOT(showPrevPage()));
5149

52-
content->setSpacing(0);
53-
content->setMargin(0);
50+
tabs->setMinimumSize(700, 32);
5451

5552
root->setMinimumSize(320, 408);
5653

5754
preview->setMinimumSize(380, 408);
5855

59-
content->addWidget(root);
60-
content->addWidget(preview);
61-
6256
controls->setMinimumSize(700, 40);
6357

64-
container->setSpacing(0);
65-
container->setMargin(0);
66-
container->addWidget(tabs);
67-
container->addLayout(content);
68-
container->addWidget(controls);
58+
masterLayout->setColumnMinimumWidth(0, 320);
59+
masterLayout->setColumnMinimumWidth(1, 380);
60+
masterLayout->setRowMinimumHeight(0, 32);
61+
masterLayout->setRowMinimumHeight(1, 408);
62+
masterLayout->setRowMinimumHeight(2, 40);
63+
masterLayout->setSpacing(0);
64+
masterLayout->setMargin(0);
65+
66+
masterLayout->addWidget(tabs, 0, 0, 1, 2);
67+
masterLayout->addWidget(root, 1, 0, 1, 1);
68+
masterLayout->addWidget(preview, 1, 1, 1, 1);
69+
masterLayout->addWidget(controls, 2, 0, 1, 2);
6970

70-
preview->widgetHeight = content->itemAt(1)->geometry().height();
71+
preview->widgetHeight = masterLayout->itemAt(2)->geometry().height();
7172

72-
centralWidget()->setLayout(container);
7373
adjustSize();
74+
75+
setMaximumSize(700, 480);
76+
setMinimumSize(700, 480);
77+
78+
init_backend();
79+
}
80+
81+
Window::Window(QWidget *parent) :
82+
QWidget(parent)
83+
{
84+
_window = new _Window(parent);
85+
_window->show();
7486
}
7587

7688
void Window::resizeEvent(QResizeEvent *event) {
77-
QMainWindow::resizeEvent(event);
78-
tabs->resize(container->itemAt(0)->geometry());
79-
root->resize(content->itemAt(0)->geometry());
80-
controls->resize(container->itemAt(2)->geometry());
81-
preview->widgetHeight = content->itemAt(1)->geometry().height();
82-
preview->setZoom(preview->currentZoomFactor);
89+
QWidget::resizeEvent(event);
90+
// _window->tabs->resize(_window->container->itemAt(0)->geometry());
91+
// _window->root->resize(_window->content->itemAt(0)->geometry());
92+
// _window->controls->resize(_window->container->itemAt(2)->geometry());
93+
// _window->preview->widgetHeight = _window->content->itemAt(1)->geometry().height();
94+
// _window->preview->setZoom(_window->preview->currentZoomFactor);
8395
}
8496

85-
void Window::tabBarIndexChanged(qint32 index) {
97+
void _Window::tabBarIndexChanged(qint32 index) {
8698
root->rootObject->setProperty("index", index);
8799
}
88100

89-
void Window::swipeViewIndexChanged(qint32 index) {
101+
void _Window::swipeViewIndexChanged(qint32 index) {
90102
tabs->rootObject->setProperty("index", index);
91103
}
92104

93-
void Window::cancelButtonClicked() {
105+
void _Window::cancelButtonClicked() {
94106
exit(0);
95107
}
96108

109+
static int add_printer_callback(PrinterObj *p) {
110+
printf("print_frontend.c : Printer %s added!\n", p->name);
111+
}
112+
113+
static int remove_printer_callback(char *printer_name) {
114+
printf("print_frontend.c : Printer %s removed!\n", printer_name);
115+
}
116+
117+
gpointer _Window::ui_add_printer(gpointer user_data) {
118+
/*
119+
* Need this delay so that the FrontendObj
120+
* initialization completes
121+
*/
122+
bool* enabled = (bool*)user_data;
123+
for (int i = 0; i < 100000000; i++);
124+
Command cmd;
125+
if (*enabled) {
126+
cmd.command = "unhide-remote-cups";
127+
parse_commands(&cmd);
128+
}
129+
else {
130+
cmd.command = "hide-remote-cups";
131+
parse_commands(&cmd);
132+
}
133+
clearPrinters();
134+
g_hash_table_foreach(f->printer, ui_add_printer_aux, NULL);
135+
}
136+
137+
void ui_add_printer_aux(gpointer key, gpointer value, gpointer user_data) {
138+
_window->addPrinter((const char*)key);
139+
qDebug() << "Added" << (const char*)key;
140+
}
141+
142+
void _Window::addPrinter(const char *printer) {
143+
QObject* obj = root->rootObject->findChild<QObject*>("generalObject");
144+
if (obj) {
145+
QMetaObject::invokeMethod(obj,
146+
"updateDestinationModel",
147+
Q_ARG(QVariant, printer));
148+
}
149+
else
150+
qDebug() << "generalObject Not Found";
151+
}
152+
153+
gpointer _Window::parse_commands(gpointer user_data) {
154+
Command* cmd = (Command*)user_data;
155+
if (cmd->command.compare("hide-remote-cups") == 0)
156+
hide_remote_cups_printers(f);
157+
else if (cmd->command.compare("unhide-remote-cups") == 0)
158+
unhide_remote_cups_printers(f);
159+
else if (cmd->command.compare("get-all-options") == 0) {
160+
char printerName[300];
161+
strcpy(printerName, cmd->arg1.c_str());
162+
get_all_printer_options(_window->f, printerName);
163+
}
164+
}
165+
166+
void _Window::init_backend() {
167+
event_callback add_cb = (event_callback)add_printer_callback;
168+
event_callback rem_cb = (event_callback)remove_printer_callback;
169+
f = get_new_FrontendObj(NULL, add_cb, rem_cb);
170+
bool enabled = true;
171+
//g_thread_new("add_printer_thread", (GThreadFunc)ui_add_printer, &enabled);
172+
ui_add_printer(&enabled);
173+
connect_to_dbus(f);
174+
loop = g_main_loop_new(NULL, FALSE);
175+
//g_main_loop_run(loop);
176+
}
177+
178+
void _Window::clearPrinters() {
179+
// QObject* obj = root->rootObject->findChild<QObject*>("generalObject");
180+
// if (obj) {
181+
// QMetaObject::invokeMethod(obj,
182+
// "clearDestinationModel");
183+
// }
184+
// else
185+
// qDebug() << "generalObject Not Found";
186+
}
187+
97188
Tabs::Tabs(QWidget* parent) :
98189
QWidget(parent),
99190
tabs(new QQuickWidget(QUrl("qrc:/app/Tabs.qml"), this)) {
@@ -201,3 +292,13 @@ void Controls::resize(const QRect& rect) {
201292
QWidget::resize(rect.width(), rect.height());
202293
controls->resize(rect.width(), rect.height());
203294
}
295+
296+
void ui_add_job_hold_until(char *startJobOption) {}
297+
298+
void ui_add_maximum_print_copies(char *_copies) {}
299+
300+
void ui_add_pages_per_side(char *pages) {}
301+
302+
void ui_clear_supported_media() {}
303+
304+
void ui_add_supported_media(char *media) {}

app/window.h

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,32 @@
11
#ifndef WINDOW_H
22
#define WINDOW_H
33

4-
#include <QMainWindow>
5-
#include <QHBoxLayout>
4+
#include <QGridLayout>
65
#include <QQuickItem>
76
#include <QQuickWidget>
87
#include <QPrintPreviewWidget>
98
#include <QPainter>
109
#include <memory>
1110
#include <poppler/qt5/poppler-qt5.h>
1211

12+
#include <QDebug>
13+
14+
extern "C" {
15+
#include "../backends/cups/src/CPD.h"
16+
#include "../backends/cups/src/print_frontend.h"
17+
}
18+
1319
class QPrinter;
14-
class QVBoxLayout;
20+
21+
static int add_printer_callback(PrinterObj *p);
22+
static int remove_printer_callback(char *printer_name);
23+
void ui_add_printer_aux(gpointer key, gpointer value, gpointer user_data);
24+
25+
typedef struct {
26+
std::string command;
27+
std::string arg1;
28+
std::string arg2;
29+
} Command;
1530

1631
class Tabs : public QWidget {
1732
Q_OBJECT
@@ -72,26 +87,42 @@ class Controls : public QWidget {
7287
QQuickWidget* controls;
7388
};
7489

75-
class Window : public QMainWindow {
90+
class _Window : public QWidget {
7691
Q_OBJECT
7792
public:
78-
Window();
93+
FrontendObj *f;
94+
GMainLoop *loop;
95+
Tabs* tabs;
96+
Root* root;
97+
Preview* preview;
98+
Controls* controls;
99+
QGridLayout* masterLayout;
100+
101+
_Window(QWidget* parent = Q_NULLPTR);
102+
void init_backend();
103+
void addPrinter(const char* printer);
104+
void clearPrinters();
105+
void addPrinterSupportedMedia(char* media) {}
106+
void clearPrintersSupportedMedia() {}
107+
void addMaximumPrintCopies(int copies) {}
108+
void addJobHoldUntil(char* startJobOption) {}
109+
void addPagesPerSize(char* pages) {}
110+
void updateAllOptions(const QString &printer) {}
111+
gpointer parse_commands(gpointer user_data);
112+
gpointer ui_add_printer(gpointer user_data);
79113

80114
public Q_SLOTS:
81115
void tabBarIndexChanged(qint32 index);
82116
void swipeViewIndexChanged(qint32 index);
83117
void cancelButtonClicked();
118+
};
119+
120+
class Window : public QWidget {
121+
public:
122+
Window(QWidget *parent = Q_NULLPTR);
84123

85124
protected:
86125
void resizeEvent(QResizeEvent* event) override;
87-
88-
private:
89-
Tabs* tabs;
90-
QHBoxLayout* content;
91-
Root* root;
92-
Preview* preview;
93-
Controls* controls;
94-
QVBoxLayout* container;
95126
};
96127

97128
#endif // WINDOW_H

backends/cups

Submodule cups updated from 9a83392 to 2c67ccd

common-print-dialog.pro

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += printsupport
55
TARGET = cpd
66
TEMPLATE = lib
77

8-
CONFIG += c++11
8+
CONFIG += c++11 no_keywords
99
unix {
1010
target.path = /usr/lib
1111
INSTALLS += target
@@ -15,7 +15,7 @@ unix {
1515

1616
SOURCES += \#app/main.cpp \
1717
app/preview.cpp \
18-
app/commonprintdialog.cpp \
18+
\#app/commonprintdialog.cpp \
1919
backends/cups/src/frontend_interface.c \
2020
backends/cups/src/frontend_helper.c \
2121
backends/cups/src/common_helper.c \
@@ -54,7 +54,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
5454

5555
HEADERS += \
5656
app/preview.h \
57-
app/commonprintdialog.h \
57+
\#app/commonprintdialog.h \
5858
backends/cups/src/print_frontend.h \
5959
backends/cups/src/frontend_interface.h \
6060
backends/cups/src/frontend_helper.h \

cpd.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ CPD::CPD(QPrinter *printer, QWidget *parent) :
99
CPD::CPD(QWidget *parent) :
1010
QWidget(parent)
1111
{
12-
Window *w = new Window();
12+
w = new Window();
13+
}
14+
15+
void CPD::show() {
1316
w->show();
1417
}
1518

cpd.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
#include <QPrinter>
66
#include <QWidget>
77

8+
class Window;
9+
810
class CPDSHARED_EXPORT CPD : public QWidget
911
{
1012

1113
public:
14+
Window *w;
1215
CPD(QPrinter *printer, QWidget *parent = Q_NULLPTR);
1316
CPD(QWidget *parent = Q_NULLPTR);
17+
void show();
1418
QString information();
1519
};
1620

0 commit comments

Comments
 (0)