985dfb6ca6a64882c1e8b4044e8f70fa825164b9
[impuzzle] / src / settingsdialog.cpp
1 #include "settingsdialog.h"
2 #include "settings.h"
3 #include "defines.h"
4
5 #include <QRadioButton>
6 #include <QPushButton>
7 #include <QGroupBox>
8 #include <QVBoxLayout>
9 #include <QHBoxLayout>
10 #include <QComboBox>
11 #include <QFileDialog>
12 #include <QDir>
13 #include <QLabel>
14
15 #include <QDebug>
16
17 SettingsDialog::SettingsDialog(QWidget *parent) :
18         QDialog(parent)
19 {
20     setModal(true);
21
22     easyButton_ = new QRadioButton(tr("Easy"));
23     easyButton_->setChecked(true);
24     hardButton_ = new QRadioButton(tr("Hard"));
25
26     buttonLayout_ = new QHBoxLayout;
27     buttonLayout_->addWidget(easyButton_);
28     buttonLayout_->addWidget(hardButton_);
29
30     buttonGroup_ = new QGroupBox(tr("Difficulty"));
31     buttonGroup_->setLayout(buttonLayout_);
32
33     QStringList items;
34     items << DEFAULT_IMAGE_TXT << RANDOM_IMAGE_TXT << SELECT_IMAGE_TXT;
35
36     imageCombo_ = new QComboBox;
37     imageCombo_->addItems(items);
38
39     selectedImageLabel_ = new QLabel(tr("n/a"));
40
41     mainLayout_ = new QVBoxLayout;
42     mainLayout_->addWidget(buttonGroup_);
43     mainLayout_->addWidget(imageCombo_);
44     mainLayout_->addWidget(selectedImageLabel_);
45
46     selectedImageLabel_->setVisible(false);
47
48     setLayout(mainLayout_);
49
50     connect(easyButton_, SIGNAL(toggled(bool)), this, SLOT(difficultySelectionChanged(bool)));
51     connect(imageCombo_, SIGNAL(currentIndexChanged(QString)), this, SLOT(imageSelectionChanged(QString)));
52 }
53
54 void SettingsDialog::difficultySelectionChanged(bool value)
55 {
56     if(value) {
57         Settings::instance()->setPieceCount(EASY_PIECE_COUNT);
58     }
59     else {
60         Settings::instance()->setPieceCount(HARD_PIECE_COUNT);
61     }
62 }
63
64 void SettingsDialog::imageSelectionChanged(const QString &txt)
65 {
66     if(txt == RANDOM_IMAGE_TXT) {
67         qDebug() << "Random image selected";
68
69         // Get random image from ~/MyDocs/.images/
70         QStringList filters;
71         filters << "*.jpg" << "*.png" << "*.xpm";
72
73         QDir dir(QDir::homePath() + QLatin1String("/MyDocs/.images"));
74         //dir.setNameFilters(filters);
75
76         QStringList pics = dir.entryList(filters, QDir::Files | QDir::NoSymLinks);
77
78         qDebug() << QString("pics list contains %1 entries").arg(pics.count());
79
80         Settings::instance()->setImage(QPixmap(QDir::homePath() + QLatin1String("/MyDocs/.images/") + pics.at(qrand() % pics.count())));
81
82         if(selectedImageLabel_->isVisible()) {
83             selectedImageLabel_->setVisible(false);
84         }
85     }
86     else if(txt == SELECT_IMAGE_TXT) {
87         qDebug() << "Select image... selected";
88
89         // Open file selection dialog
90         QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
91                                                         QDir::homePath() + QLatin1String("/MyDocs/.images"),
92                                                          tr("Images (*.png *.xpm *.jpg)"));
93
94         Settings::instance()->setImage(QPixmap(fileName));
95
96         selectedImageLabel_->setText(fileName);
97
98         if(!selectedImageLabel_->isVisible() && !fileName.isEmpty()) {
99             selectedImageLabel_->setVisible(true);
100         }
101     }
102     else {
103         qDebug() << "Default image selected";
104
105         Settings::instance()->setImage(0);
106
107         if(selectedImageLabel_->isVisible()) {
108             selectedImageLabel_->setVisible(false);
109         }
110     }
111 }