Increase default trace level. Set level from Developer dialog box.
[dorian] / devtools.cpp
1 #include <QtGui>
2 #include <QDebug>
3
4 #include "devtools.h"
5 #include "trace.h"
6 #include "settings.h"
7
8 DevTools::DevTools(QWidget *parent):
9         QDialog(parent, Qt::Dialog | Qt::WindowTitleHint |
10                 Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint)
11 {
12     setWindowTitle(tr("Developer"));
13     QScrollArea *scroller = new QScrollArea(this);
14     scroller->setFrameStyle(QFrame::NoFrame);
15 #ifdef Q_WS_MAEMO_5
16     scroller->setProperty("FingerScrollable", true);
17     scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
18 #else
19     scroller->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
20     setSizeGripEnabled(true);
21 #endif // Q_WS_MAEMO_5
22     scroller->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
23
24     QWidget *contents = new QWidget(scroller);
25     QVBoxLayout *layout = new QVBoxLayout(contents);
26
27     QPushButton *clearSettings = new QPushButton("Clear persistent data", this);
28     connect(clearSettings, SIGNAL(clicked()), this, SLOT(onClear()));
29     layout->addWidget(clearSettings);
30
31     QLabel *level = new QLabel(tr("Trace level:"), contents);
32     layout->addWidget(level);
33
34     QFrame *box = new QFrame(this);
35     layout->addWidget(box);
36     QHBoxLayout *boxLayout = new QHBoxLayout(box);
37     boxLayout->setMargin(0);
38     box->setLayout(boxLayout);
39     QButtonGroup *group = new QButtonGroup(this);
40     group->setExclusive(true);
41
42     QToolButton *levelDebug = new QToolButton(box);
43     levelDebug->setToolButtonStyle(Qt::ToolButtonTextOnly);
44     levelDebug->setText(tr("Debug"));
45     levelDebug->setCheckable(true);
46     boxLayout->addWidget(levelDebug);
47     group->addButton(levelDebug, QtDebugMsg);
48
49     QToolButton *levelWarning = new QToolButton(box);
50     levelWarning->setToolButtonStyle(Qt::ToolButtonTextOnly);
51     levelWarning->setText(tr("Warning"));
52     levelWarning->setCheckable(true);
53     boxLayout->addWidget(levelWarning);
54     group->addButton(levelWarning, QtWarningMsg);
55
56     QToolButton *levelCritical = new QToolButton(box);
57     levelCritical->setToolButtonStyle(Qt::ToolButtonTextOnly);
58     levelCritical->setText(tr("Critical"));
59     levelCritical->setCheckable(true);
60     boxLayout->addWidget(levelCritical);
61     group->addButton(levelCritical, QtCriticalMsg);
62
63     QToolButton *levelFatal = new QToolButton(box);
64     levelFatal->setToolButtonStyle(Qt::ToolButtonTextOnly);
65     levelFatal->setText(tr("Fatal"));
66     levelFatal->setCheckable(true);
67     boxLayout->addWidget(levelFatal);
68     group->addButton(levelFatal, QtFatalMsg);
69
70     if (Trace::level == QtFatalMsg) {
71         levelFatal->toggle();
72     } else if (Trace::level == QtCriticalMsg) {
73         levelCritical->toggle();
74     } else if (Trace::level == QtWarningMsg) {
75         levelWarning->toggle();
76     } else {
77         levelDebug->toggle();
78     }
79
80     connect(group, SIGNAL(buttonClicked(int)),
81             this, SLOT(onLevelButtonClicked(int)));
82     layout->addWidget(box);
83
84     contents->setLayout(layout);
85     scroller->setWidget(contents);
86
87     QHBoxLayout *dialogLayout = new QHBoxLayout();
88     dialogLayout->addWidget(scroller);
89     setLayout(dialogLayout);
90 }
91
92 void DevTools::onClear()
93 {
94     if (QMessageBox::Yes ==
95         QMessageBox::question(this, "Clear persistent data?",
96                               "Library and settings data will be cleared, "
97                               "application will be restarted. Continue?",
98                               QMessageBox::Yes
99 #ifndef Q_WS_MAEMO_5
100                               , QMessageBox::No
101 #endif
102                               )) {
103         QSettings().clear();
104         QApplication::exit(1000);
105     }
106 }
107
108 void DevTools::onLevelButtonClicked(int level) {
109     Trace::level = (QtMsgType)level;
110     Settings::instance()->setValue("tracelevel", level);
111 }