Reset indicator when the screen is locked
[ameter] / mainwindow.cpp
1 #include <QtCore/QCoreApplication>
2
3 #ifdef Q_WS_MAEMO_5
4 #include <mce/dbus-names.h>
5 #include <mce/mode-names.h>
6 #endif
7
8 #include "mainwindow.h"
9 #include "asettings.h"
10 #include "about.h"
11
12 extern qreal g_n;
13 extern qreal a_max;
14 extern int divisions;
15 extern int angle_step;
16 extern int smoothing;
17
18 int data_rate = 0;
19
20 #ifdef Q_WS_MAEMO_5
21 static QDBusConnection dBusConnection = QDBusConnection::systemBus();
22 #endif
23
24 MainWindow::MainWindow(QWidget *parent)
25         : QMainWindow(parent)
26 {
27         QMenuBar *bar = menuBar();
28         QAction *action;
29         QSettings settings("igorinov", "ameter", this);
30
31         g_n = settings.value("g", g_n).toDouble();
32         a_max = settings.value("max", a_max).toDouble();
33         divisions = settings.value("divisions", divisions).toInt();
34         angle_step = settings.value("angle_step", angle_step).toInt();
35         smoothing = settings.value("smoothing", smoothing).toInt();
36         data_rate = settings.value("rate", data_rate).toInt();
37
38         awidget = new AMeterWidget(this);
39         setCentralWidget(awidget);
40         action = bar->addAction("&About");
41         connect(action, SIGNAL(triggered()), this, SLOT(showAbout()));
42         action = bar->addAction("&Settings");
43         connect(action, SIGNAL(triggered()), this, SLOT(showSettings()));
44         accelerometer = new QAccelerometer(this);
45         accelerometer->setProperty("alwaysOn", true);
46         accelerometer->addFilter(awidget);
47         accelerometer->setDataRate(data_rate);
48         accelerometer->start();
49
50 #ifdef Q_WS_MAEMO_5
51         dBusInterface = new QDBusInterface(MCE_SERVICE, MCE_REQUEST_PATH,
52                 MCE_REQUEST_IF, dBusConnection, this);
53  
54         dBusConnection.connect(MCE_SERVICE, MCE_SIGNAL_PATH, MCE_SIGNAL_IF,
55                 MCE_DISPLAY_SIG, this, SLOT(screenChange(const QDBusMessage &)));
56 #endif
57 }
58
59 MainWindow::~MainWindow()
60 {
61         delete awidget;
62         delete accelerometer;
63 }
64
65 void MainWindow::showAbout()
66 {
67         AboutDialog dialog(this);
68
69         dialog.exec();
70 }
71
72 void MainWindow::showSettings()
73 {
74         SettingsDialog dialog(this);
75         QSettings settings("igorinov", "ameter", this);
76         int code;
77
78         accelerometer->stop();
79         code = dialog.exec();
80         accelerometer->start();
81         if (code != QDialog::Accepted)
82         {
83                 return;
84         }
85         
86         settings.setValue("g", g_n);
87         settings.setValue("max", a_max);
88         settings.setValue("divisions", divisions);
89         settings.setValue("angle_step", angle_step);
90         settings.setValue("rate", data_rate);
91
92         awidget->setGravity(g_n);
93         accelerometer->setDataRate(data_rate);
94 }
95
96 void MainWindow::setOrientation(ScreenOrientation orientation)
97 {
98     Qt::WidgetAttribute attribute;
99     switch (orientation) {
100 #if QT_VERSION < 0x040702
101     // Qt < 4.7.2 does not yet have the Qt::WA_*Orientation attributes
102     case ScreenOrientationLockPortrait:
103         attribute = static_cast<Qt::WidgetAttribute>(128);
104         break;
105     case ScreenOrientationLockLandscape:
106         attribute = static_cast<Qt::WidgetAttribute>(129);
107         break;
108     default:
109     case ScreenOrientationAuto:
110         attribute = static_cast<Qt::WidgetAttribute>(130);
111         break;
112 #else // QT_VERSION < 0x040702
113     case ScreenOrientationLockPortrait:
114         attribute = Qt::WA_LockPortraitOrientation;
115         break;
116     case ScreenOrientationLockLandscape:
117         attribute = Qt::WA_LockLandscapeOrientation;
118         break;
119     default:
120     case ScreenOrientationAuto:
121         attribute = Qt::WA_AutoOrientation;
122         break;
123 #endif // QT_VERSION < 0x040702
124     };
125     setAttribute(attribute, true);
126 }
127
128 void MainWindow::showExpanded()
129 {
130 #ifdef Q_OS_SYMBIAN
131     showFullScreen();
132 #elif defined(Q_WS_MAEMO_5)
133     showMaximized();
134 #else
135     show();
136 #endif
137 }
138
139 #ifdef Q_WS_MAEMO_5
140 void MainWindow::screenChange(const QDBusMessage &message)
141 {
142     QString state = message.arguments().at(0).toString();
143     if (!state.isEmpty()) {
144         if (state == MCE_DISPLAY_OFF_STRING)
145         {
146             accelerometer->stop();
147             awidget->reset();
148         } else {
149             accelerometer->start();
150         }
151     }
152 }
153 #endif
154