2 #include <KConfigGroup>
7 #include <QButtonGroup>
10 #include <QHBoxLayout>
11 #include <QVBoxLayout>
12 #include <KPushButton>
13 #include <KMessageBox>
15 #include "FingerManagerWindow.h"
16 #include "FingerManagerDevicesModel.h"
17 #include "FMDbusConn.h"
18 #include "FingerNames.h"
24 * Handle checkbox status changes
26 void FingerManagerWindow::fingerSelected(int idx
) {
27 int devid
= devices
->currentIndex();
29 qDebug("%s: %d", fingerNames
[idx
].iface
, fingers
[idx
]->isChecked());
30 if (fingers
[idx
]->isChecked()) {
31 KMessageBox::sorry(this, i18n("Deletion of single "
32 "fingerprint is not supported in fprintd D-Bus "
34 fingers
[idx
]->setChecked(true);fingers
[idx
]->setChecked(true);
36 // QString device = ((FingerManagerDevicesModel*)devices->model())->
37 // getDeviceName(devid);
38 // QString msg = QString(i18n("Enroll finger \"%1\" on device \"%2\" for user \"%3\"?"));
39 // msg = msg.arg(fingerNames[idx].name, device, getlogin());
40 // int result = KMessageBox::questionYesNo(this,
43 // if (result == KMessageBox::Yes) {
44 // fingers[idx]->setChecked(true);
46 // fingers[idx]->setChecked(false);
48 FMEnroll
*e
= new FMEnroll(
49 ((FingerManagerDevicesModel
*)devices
->model())->getDeviceModel(devid
),
58 * Fill combo box with founded devices
60 void FingerManagerWindow::addDevices(int idx
) {
61 qDebug("Devices were discovered (%d)...", idx
);
62 FingerManagerDevicesModel
* m
= dbc
->getModel(idx
);
64 devices
->setCurrentIndex(m
->getDefault());
68 * Retrieves enrolled fingers from dbus and set checked corresponding checkboxes
70 void FingerManagerWindow::processFingers(int idx
) {
71 qDebug("Enrolled fingers were discovered (%d)", idx
);
72 QStringList fngrs
= dbc
->getFingers(idx
);
73 for (int i
= 0; i
< 10; i
++) {
74 if (fingers
[i
]) fingers
[i
]->setChecked(false);
76 for (int i
= 0; i
< fngrs
.size(); i
++) {
77 QString finger
= fngrs
.at(i
);
78 for (int j
= 0; j
< 10; j
++) {
79 if (finger
== fingerNames
[j
].iface
) {
80 if (fingers
[i
]) fingers
[j
]->setChecked(true);
87 * Hook after search enrolled fingerprints for selected device
89 void FingerManagerWindow::deviceChanged(int idx
) {
91 qDebug() << "deviceChanged: "<< ((FingerManagerDevicesModel
*)devices
->model())->getDevicePath(idx
);
92 dbc
->getEnrolledFingers(((FingerManagerDevicesModel
*)devices
->model())->getDevicePath(idx
), getlogin());
93 deleteAllBtn
->setEnabled(true);
95 deleteAllBtn
->setEnabled(false);
100 * Hook after deletion all enrolled fingerprints for selected device
102 void FingerManagerWindow::fingerprintsDeleted() {
103 deviceChanged(devices
->currentIndex());
107 * Verify deletion of enrolled fingerprints on selected device for current user
109 void FingerManagerWindow::deleteAll() {
111 int idx
= devices
->currentIndex();
114 QString device
= ((FingerManagerDevicesModel
*)devices
->model())->
116 QString msg
= QString(i18n("Do you really want delete all fingerprints "
117 "on device \"%1\" for user \"%2\""));
118 msg
= msg
.arg(device
, getlogin());
119 // Show Yes/No message box
120 int result
= KMessageBox::questionYesNo(this, msg
);
121 if (result
== KMessageBox::Yes
) {
122 qDebug() << "Deleting all enrolled fingerprints...";
123 dbc
->deleteAllEnrolledFingers(
124 ((FingerManagerDevicesModel
*)devices
->model())->getDevicePath(idx
),
130 QCheckBox
* FingerManagerWindow::createCheckBox(int idx
, int x
, int y
) {
131 QCheckBox
*cb
= new QCheckBox(handsPanel
);
132 QSize size
= cb
->sizeHint();
133 cb
->setGeometry(QRect(x
- (size
.width()/2),
134 y_base
+ y
- (size
.height()/2),
137 btng
->addButton(cb
, idx
);
141 void FingerManagerWindow::load(KConfig
*settings
) {
143 KConfigGroup cfgGroup
;
146 cfgGroup
= settings
->group("image");
147 y_base
= cfgGroup
.readEntry("base", 20);
149 QString filename
= cfgGroup
.readEntry("filename", "/home/djaara/.config/djaara.net/hands.png");
150 QPixmap image
= QPixmap(filename
);
151 if (!image
.isNull()) {
152 handsLabel
->setPixmap(image
);
154 handsLabel
->setText("File not found: " + filename
);
156 handsLabel
->setGeometry(QRect(0, y_base
, image
.width(), image
.height()));
158 // Set handsPanel dimension
159 handsPanel
->setFixedWidth(handsLabel
->width());
160 handsPanel
->setFixedHeight(handsLabel
->height());
163 cfgGroup
= settings
->group("fingers");
164 fingersCount
= cfgGroup
.readEntry("count", 0);
165 for (int i
= 0; i
< fingersCount
&& i
< MAX_FINGERS
; i
++) {
168 name
.sprintf("%d/x", i
+1);
169 int x
= cfgGroup
.readEntry(name
, 0);
171 name
.sprintf("%d/y", i
+1);
172 int y
= cfgGroup
.readEntry(name
, 0);
174 name
.sprintf("%d/idx", i
+1);
175 unsigned int idx
= cfgGroup
.readEntry(name
, i
);
177 if (x
&& y
&& idx
< MAX_FINGERS
) {
178 qDebug("Adding new checkbox[%d]", idx
);
179 fingers
[idx
] = createCheckBox(idx
, x
, y
);
181 qDebug("Checkbox[%d] skipped", idx
);
189 * Actualize all texts in window after language changes
191 void FingerManagerWindow::retranslate() {
193 setWindowTitle(i18n("Finger manager..."));
196 setWhatsThis(i18n("Finger Manager Application"));
198 deviceLabel
->setText(i18n("Select device:"));
199 deleteAllBtn
->setText(i18n("Delete all"));
200 deleteAllBtn
->setToolTip(i18n("Delete all enrolled fingerprints on selected device."));
202 for (int i
= 0; i
< 10; i
++) {
204 fingers
[i
]->setWhatsThis(i18n(fingerNames
[i
].name
));
205 fingers
[i
]->setToolTip(i18n(fingerNames
[i
].name
));
211 * FingerManagerWindow contructor
213 FingerManagerWindow::FingerManagerWindow(QWidget
*parent
,
214 Qt::WindowFlags wflags
) : KDialog(parent
, wflags
) {
215 // Only OK button, precedent by separator
216 setButtons(KDialog::Ok
);
217 showButtonSeparator(true);
224 // Connect to FMDbusConn
225 QObject::connect(dbc
, SIGNAL(devicesDiscovered(int)), this, SLOT(addDevices(int)));
226 QObject::connect(dbc
, SIGNAL(enrolledFingersDiscovered(int)), this, SLOT(processFingers(int)));
227 QObject::connect(dbc
, SIGNAL(enrolledFingersDeleted()), this, SLOT(fingerprintsDeleted()));
230 // Dialog's main widget
231 setMainWidget(mainPanel
);
233 // Handle all check buttons
234 btng
->setExclusive(false);
235 QObject::connect(btng
, SIGNAL(buttonPressed(int)), SLOT(fingerSelected(int)));
237 // Handle delete all button
238 QObject::connect(deleteAllBtn
, SIGNAL(pressed()), this, SLOT(deleteAll()));
241 mainPanelLayout
->addWidget(handsPanel
);
242 mainPanelLayout
->addWidget(separator
);
243 devicesLayout
->addWidget(deviceLabel
);
244 devicesLayout
->addWidget(devices
);
245 devicesLayout
->addStretch();
246 devicesLayout
->addWidget(deleteAllBtn
);
247 mainPanelLayout
->addLayout(devicesLayout
);
248 mainPanel
->setLayout(mainPanelLayout
);
250 QObject::connect(devices
, SIGNAL(currentIndexChanged(int)), this, SLOT(deviceChanged(int)));
252 setMaximumSize(minimumSizeHint());
256 * void initComponents()
257 * Initialize main components of FingerManagerWindow
259 void FingerManagerWindow::initComponents() {
260 dbc
= new FMDbusConn
;
261 mainPanel
= new QWidget();
262 handsPanel
= new QWidget();
263 btng
= new QButtonGroup(handsPanel
);
264 settings
= new KConfig("kfingerrc");
265 handsLabel
= new QLabel(handsPanel
);
266 deviceLabel
= new QLabel();
267 devices
= new QComboBox
;
268 devices
->setModel(new FingerManagerDevicesModel
);
269 devicesLayout
= new QHBoxLayout();
270 mainPanelLayout
= new QVBoxLayout();
271 mainPanelLayout
->setSizeConstraint(QLayout::SetFixedSize
);
272 separator
= new KSeparator(mainPanel
);
273 deleteAllBtn
= new KPushButton();
274 deleteAllBtn
->setEnabled(false);
278 * FingerManagerWindow destructor
280 FingerManagerWindow::~FingerManagerWindow() {
281 for (int i
= 0; i
< fingersCount
; i
++) {
282 if (fingers
[i
]) delete fingers
[i
];
288 if (settings
) delete settings
;
289 if (btng
) delete btng
;
293 if (deleteAllBtn
) delete deleteAllBtn
;
294 if (handsLabel
) delete handsLabel
;
295 if (separator
) delete separator
;
296 if (devicesLayout
) delete devicesLayout
;
297 if (handsPanel
) delete handsPanel
;
298 if (mainPanelLayout
) delete mainPanelLayout
;
299 if (mainPanel
) delete mainPanel
;