Sanity checkes in FingerManagerWindow while reading checkboxes position
[KFingerManager.git] / src / FingerManagerWindow.cpp
blob4c8cb279d5cbdfdf10ce0ba40d43e75410fde930
1 #include <KConfig>
2 #include <KConfigGroup>
3 #include <KLocale>
4 #include <QWidget>
5 #include <QPixmap>
6 #include <QButtonGroup>
7 #include <QSize>
9 #include "FingerManagerWindow.h"
10 #include "FMDbusConn.h"
11 #include "FingerNames.h"
13 int y_base;
15 void FingerManagerWindow::fingerSelected(int idx) {
16 qDebug() << "fingers[" <<idx<< "]: " << fingers[idx]->isChecked();
19 QCheckBox* FingerManagerWindow::createCheckBox(int idx, int x, int y) {
20 QCheckBox *cb = new QCheckBox(this);
21 QSize size = cb->sizeHint();
22 cb->setGeometry(QRect(x - (size.width()/2),
23 y_base + y - (size.height()/2),
24 size.height(),
25 size.height()));
26 cb->setWhatsThis(i18n(fingerNames[idx]));
27 btng->addButton(cb, idx);
28 return(cb);
31 void FingerManagerWindow::load(KConfig *settings) {
32 // Config helper
33 KConfigGroup cfgGroup;
35 // Load image
36 cfgGroup = settings->group("image");
37 y_base = cfgGroup.readEntry("base", 20);
39 QString filename = cfgGroup.readEntry("filename", "/home/djaara/.config/djaara.net/hands.png");
40 cfgGroup.writeEntry("filename", "/home/djaara/.config/djaara.net/hands.png");
41 QPixmap image = QPixmap(filename);
42 if (!image.isNull()) {
43 handsLabel->setPixmap(image);
44 } else {
45 handsLabel->setText("File not found: " + filename);
47 handsLabel->setGeometry(QRect(0, y_base, image.width(), image.height()));
49 // Load checkboxes
50 cfgGroup = settings->group("fingers");
51 fingersCount = cfgGroup.readEntry("count", 0);
52 for (int i = 0; i < fingersCount && i < MAX_FINGERS; i++) {
53 QString name;
55 name.sprintf("%d/x", i+1);
56 int x = cfgGroup.readEntry(name, 0);
58 name.sprintf("%d/y", i+1);
59 int y = cfgGroup.readEntry(name, 0);
61 name.sprintf("%d/idx", i+1);
62 unsigned int idx = cfgGroup.readEntry(name, i);
64 if (x && y && idx < MAX_FINGERS) {
65 qDebug() << "Adding new checkbox[" << idx << "]";
66 fingers[idx] = createCheckBox(idx, x, y);
67 } else {
68 qDebug() << "Checkbox[" << idx << "] skipped";
69 fingers[idx] = 0;
75 FingerManagerWindow::FingerManagerWindow(QWidget *parent,
76 Qt::WindowFlags wflags) : KDialog(parent, wflags) {
77 // No OK or Cancel buttons
78 setButtons(KDialog::None);
80 // Window title
81 setWindowTitle("Finger manager...");
83 setWhatsThis(i18n("Finger Manager Application"));
85 // Prepare component
86 initComponents();
87 load(settings);
89 // Handle all check buttons
90 btng->setExclusive(false);
91 QObject::connect(btng, SIGNAL(buttonClicked(int)), SLOT(fingerSelected(int)));
93 // Set fixed size
94 setMinimumWidth(handsLabel->width());
95 setMinimumHeight(handsLabel->height());
96 setMaximumWidth(handsLabel->width());
97 setMaximumHeight(handsLabel->height());
99 FMDbusConn dbc;
103 * void initComponents()
104 * Initialize main components of FingerManagerWindow
106 void FingerManagerWindow::initComponents() {
107 btng = new QButtonGroup(this);
108 settings = new KConfig("kfingerrc");
109 handsLabel = new QLabel(this);
112 FingerManagerWindow::~FingerManagerWindow() {
113 for (int i = 0; i < fingersCount; i++) {
114 if (fingers[i]) delete fingers[i];
116 if (settings) delete settings;
117 if (btng) delete btng;
118 if (handsLabel) delete handsLabel;