Added include for QTimer in header file.
[easylist] / mainform.cpp
1 #include "mainform.h"\r
2 #include "ui_mainform.h"\r
3 \r
4 MainForm::MainForm(QWidget *parent) :\r
5     QMainWindow(parent),\r
6     ui(new Ui::MainForm)\r
7 {\r
8     ui->setupUi(this);\r
9     settings = new QSettings(WILLEM_LIU, EASY_LIST);\r
10 \r
11     /* Make a call every x milliseconds */\r
12     timer = new QTimer(this);\r
13     connect(timer, SIGNAL(timeout()), this, SLOT(Keep_backlight_on()));\r
14 \r
15     requestWebpage = new RequestWebpage(this);\r
16     connect(requestWebpage, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotSyncList(QNetworkReply*)));\r
17 \r
18     newIndex = 0;\r
19     connect(SystemSettings::getInstance(), SIGNAL(signalKeyboardClosed(bool)), this, SLOT(keyboardClosed(bool)));\r
20 \r
21     ui->actionAuto_Orientation->setChecked(settings->value(AUTO_ORIENTATION).toBool());\r
22     on_actionAuto_Orientation_triggered();\r
23 \r
24     ui->actionSort_A_Z->setChecked(settings->value(SORT_A_Z).toBool());\r
25     on_actionSort_A_Z_triggered();\r
26 \r
27     // Set a default value for CHECKED_ITEMS_TO_BOTTOM\r
28     if(settings->contains(CHECKED_ITEMS_TO_BOTTOM) == false)\r
29     {\r
30         settings->setValue(CHECKED_ITEMS_TO_BOTTOM, false);\r
31     }\r
32     ui->actionChecked_bottom->setChecked(settings->value(CHECKED_ITEMS_TO_BOTTOM).toBool());\r
33     on_actionChecked_bottom_triggered();\r
34 \r
35     // Set a default value for CHECKED_BACKLIGHT\r
36     if(settings->contains(CHECKED_BACKLIGHT) == false)\r
37     {\r
38         settings->setValue(CHECKED_BACKLIGHT, false);\r
39     }\r
40     ui->actionKeep_backlight_on->setChecked(settings->value(CHECKED_BACKLIGHT).toBool());\r
41     on_actionKeep_backlight_on_triggered();\r
42 \r
43     // Create a default for landscape mode.\r
44     landscape = settings->value(LANDSCAPE).toBool();\r
45     // If LANDSCAPE exists in QSettings.\r
46     if(settings->contains(LANDSCAPE))\r
47     {\r
48         // We use the LANDSCAPE value in the QSettings.\r
49         landscape = settings->value(LANDSCAPE).toBool();\r
50     }\r
51     else\r
52     {\r
53         // Otherwise we set our default into the QSettings.\r
54         settings->setValue(LANDSCAPE, landscape);\r
55     }\r
56     // If keyboard is opened at start. We do landscape mode.\r
57     // Otherwise we do what's read from the QSettings.\r
58     if(ui->actionAuto_Orientation->isChecked() == false)\r
59     {\r
60         if(SystemSettings::getInstance()->getKeyboardClosed() == false)\r
61         {\r
62             setLandscapeMode(true);\r
63         }\r
64         else\r
65         {\r
66             setLandscapeMode(landscape);\r
67         }\r
68     }\r
69 \r
70     // Populate the QStackedWidget. ListForm is set as the current widget.\r
71     listForm = new ListForm(this);\r
72     editForm = new EditForm(this);\r
73     chooseListForm = new ChooseListForm(this);\r
74     settingsForm = new SettingsForm(this);\r
75 \r
76     connect(listForm, SIGNAL(signalTransitionOutFinished()), this, SLOT(stateOutFinished()));\r
77     connect(listForm, SIGNAL(signalNavigate(int)), this, SLOT(changeWidget(int)));\r
78 \r
79     connect(editForm, SIGNAL(signalTransitionOutFinished()), this, SLOT(stateOutFinished()));\r
80     connect(editForm, SIGNAL(signalNavigate(int)), this, SLOT(changeWidget(int)));\r
81 \r
82     connect(chooseListForm, SIGNAL(signalTransitionOutFinished()), this, SLOT(stateOutFinished()));\r
83     connect(chooseListForm, SIGNAL(signalNavigate(int)), this, SLOT(changeWidget(int)));\r
84 \r
85     connect(settingsForm, SIGNAL(signalTransitionOutFinished()), this, SLOT(stateOutFinished()));\r
86     connect(settingsForm, SIGNAL(signalNavigate(int)), this, SLOT(changeWidget(int)));\r
87 \r
88     ui->stackedWidget->addWidget(listForm);\r
89     ui->stackedWidget->addWidget(editForm);\r
90     ui->stackedWidget->addWidget(chooseListForm);\r
91     ui->stackedWidget->addWidget(settingsForm);\r
92     ui->stackedWidget->setCurrentWidget(listForm);\r
93 }\r
94 \r
95 MainForm::~MainForm()\r
96 {\r
97     delete ui;\r
98 }\r
99 \r
100 void MainForm::stateOutFinished()\r
101 {\r
102     qDebug() << "Show new widget" << newIndex;\r
103     ui->stackedWidget->setCurrentIndex(newIndex);\r
104     SlideWidget * newWidget = dynamic_cast<SlideWidget * >(ui->stackedWidget->currentWidget());\r
105     newWidget->move(0, -newWidget->height());\r
106     newWidget->setStateIn();\r
107     newWidget->shown();\r
108 }\r
109 \r
110 void MainForm::changeWidget(int step)\r
111 {\r
112     SlideWidget * currentWidget = dynamic_cast<SlideWidget * >(ui->stackedWidget->currentWidget());\r
113     currentWidget->initStates();\r
114     int currentIndex = ui->stackedWidget->indexOf(currentWidget);\r
115     // Because all widgets are started with StateOut as initial state, we\r
116     // need to reset the current widget to StateIn. The view is showing the\r
117     // current widget at the place of its StateIn position. But the state\r
118     // is never set to StateIn.\r
119     currentWidget->setStateIn();\r
120     qDebug() << "Current widget index" << currentIndex;\r
121     newIndex = step;\r
122     currentWidget->setStateOut();\r
123     qDebug() << "New widget index" << newIndex;\r
124 }\r
125 \r
126 void MainForm::keyboardClosed(bool closed)\r
127 {\r
128     // When keyboard is opened.\r
129     if(ui->actionAuto_Orientation->isChecked() == false)\r
130     {\r
131         if(closed == false)\r
132         {\r
133             setLandscapeMode(true);\r
134         }\r
135         else\r
136         {\r
137             setLandscapeMode(landscape);\r
138         }\r
139     }\r
140 }\r
141 \r
142 void MainForm::setLandscapeMode(bool landscape)\r
143 {\r
144     if(landscape)\r
145     {\r
146         tempLandscapeMode = true;\r
147         qDebug() << LANDSCAPE;\r
148 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)\r
149         setAttribute(Qt::WA_Maemo5AutoOrientation, false);\r
150         setAttribute(Qt::WA_Maemo5LandscapeOrientation, true);\r
151         setAttribute(Qt::WA_Maemo5PortraitOrientation, false);\r
152 #endif\r
153     }\r
154     else\r
155     {\r
156         tempLandscapeMode = false;\r
157         qDebug() << PORTRAIT;\r
158 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)\r
159         setAttribute(Qt::WA_Maemo5AutoOrientation, false);\r
160         setAttribute(Qt::WA_Maemo5PortraitOrientation, true);\r
161         setAttribute(Qt::WA_Maemo5LandscapeOrientation, false);\r
162 #endif\r
163     }\r
164 }\r
165 \r
166 void MainForm::on_actionRotate_triggered()\r
167 {\r
168     qDebug() << "Rotate";\r
169 \r
170     landscape = (width() < height());\r
171     settings->setValue(LANDSCAPE, landscape);\r
172     ui->actionAuto_Orientation->setChecked(false);\r
173     settings->setValue(AUTO_ORIENTATION, ui->actionAuto_Orientation->isChecked());\r
174     setLandscapeMode(landscape);\r
175 }\r
176 \r
177 void MainForm::on_actionAbout_triggered()\r
178 {\r
179     qDebug() << "About";\r
180     QString aboutText;\r
181     aboutText.append("<html><body>");\r
182     aboutText.append("EasyList (c) 2010-");\r
183     aboutText.append(QDate::currentDate().toString("yyyy"));\r
184     aboutText.append("<br><br>");\r
185     aboutText.append("Created by Willem Liu.<br>");\r
186     aboutText.append("Thanks to Ade.<br>");\r
187     aboutText.append("Created with QtCreator.<br><br>");\r
188     aboutText.append("Please <a href='http://www.willemliu.nl/donate'>donate</a> any amount you deem this app is worthy to keep me going on.<br><br>");\r
189     aboutText.append("</body></html>");\r
190     QMessageBox::about(this, "EasyList", aboutText);\r
191 }\r
192 \r
193 void MainForm::on_actionChecked_bottom_triggered()\r
194 {\r
195     bool sortToBottom = ui->actionChecked_bottom->isChecked();\r
196     qDebug() << "Checked Bottom" << sortToBottom;\r
197     settings->setValue(CHECKED_ITEMS_TO_BOTTOM, sortToBottom);\r
198     MyCheckBoxContainer::getInstance()->setSortCheckedToBottom(sortToBottom);\r
199 }\r
200 \r
201 void MainForm::closeEvent(QCloseEvent *event)\r
202 {\r
203     settings->setValue(LIST_TEXT, MyCheckBoxContainer::getInstance()->getListText());\r
204     SystemSettings::getInstance()->saveCurrentList();\r
205     event->accept();\r
206 }\r
207 \r
208 void MainForm::on_actionAuto_Orientation_triggered()\r
209 {\r
210     settings->setValue(AUTO_ORIENTATION, ui->actionAuto_Orientation->isChecked());\r
211     qDebug() << "Auto orientation" << ui->actionAuto_Orientation->isChecked();\r
212     if(ui->actionAuto_Orientation->isChecked())\r
213     {\r
214 #if defined(Q_WS_MAEMO_5) || defined(Q_WS_HILDON)\r
215         setAttribute(Qt::WA_Maemo5PortraitOrientation, false);\r
216         setAttribute(Qt::WA_Maemo5LandscapeOrientation, false);\r
217         setAttribute(Qt::WA_Maemo5AutoOrientation, true);\r
218 #endif\r
219     }\r
220     else\r
221     {\r
222         setLandscapeMode(landscape);\r
223     }\r
224 }\r
225 \r
226 void MainForm::on_actionSort_A_Z_triggered()\r
227 {\r
228     settings->setValue(SORT_A_Z, ui->actionSort_A_Z->isChecked());\r
229     MyCheckBoxContainer::getInstance()->setSortAlphabetically(ui->actionSort_A_Z->isChecked());\r
230 }\r
231 \r
232 void MainForm::on_actionLists_triggered()\r
233 {\r
234     listForm->saveList();\r
235     changeWidget(2);\r
236 }\r
237 \r
238 void MainForm::on_actionSync_triggered()\r
239 {\r
240     int res = QMessageBox::warning(this, "Synchronize list", "If you haven't saved your current list under a list name other than SyncList then it will be overwritten by the items on the website.", QMessageBox::Ok, QMessageBox::Cancel);\r
241 \r
242     if(res == QMessageBox::Ok)\r
243     {\r
244         QString username = settings->value(USERNAME, "").toString();\r
245         QString password = settings->value(PASSWORD, "").toString();\r
246         QString url = settings->value(SYNC_URL, DEFAULT_SYNC_URL).toString();\r
247         url.append("?username=" + username);\r
248         url.append("&password=" + password);\r
249         qDebug() << url;\r
250         requestWebpage->post(url,settings->value(LIST_TEXT,"").toString().toUtf8());\r
251         //requestWebpage->fetch(url);\r
252     }\r
253 }\r
254 \r
255 void MainForm::slotSyncList(QNetworkReply* pReply)\r
256 {\r
257     settings->setValue(LIST_TEXT, MyCheckBoxContainer::getInstance()->getListText());\r
258     SystemSettings::getInstance()->saveCurrentList();\r
259     QByteArray data=pReply->readAll();\r
260     QString list = QString::fromUtf8(data);\r
261     settings->setValue(LIST_TEXT, list);\r
262     settings->setValue(SELECTED_LIST_NAME, SYNC_LIST_NAME);\r
263     settings->setValue(SYNC_LIST_NAME, settings->value(LIST_TEXT, ""));\r
264     QStringList listNames = settings->value(LIST_NAMES, "").toStringList();\r
265     if(listNames.contains(SYNC_LIST_NAME) == false)\r
266     {\r
267         listNames.append(SYNC_LIST_NAME);\r
268     }\r
269     settings->setValue(LIST_NAMES, QVariant(listNames));\r
270     changeWidget(0);\r
271     pReply->deleteLater();\r
272 }\r
273 \r
274 void MainForm::on_actionSetting_triggered()\r
275 {\r
276     changeWidget(3);\r
277 }\r
278 \r
279 void MainForm::on_actionKeep_backlight_on_triggered()\r
280 {\r
281     bool setBacklight = ui->actionKeep_backlight_on->isChecked();\r
282     if(setBacklight)\r
283     {\r
284         if(timer->isActive() == false)\r
285         {\r
286             timer->start(5000);\r
287         }\r
288     }\r
289     else\r
290     {\r
291         qDebug() << "Backlight: " << setBacklight;\r
292         timer->stop();\r
293     }\r
294     qDebug() << "Checked Backlight" << setBacklight;\r
295     settings->setValue(CHECKED_BACKLIGHT, setBacklight);\r
296 }\r
297 \r
298 void MainForm::Keep_backlight_on()\r
299 {\r
300     bool setBacklight = ui->actionKeep_backlight_on->isChecked();\r
301     if(setBacklight)\r
302     {\r
303         qDebug() << "Backlight: " << setBacklight;\r
304         QString strUnlock = "dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_display_blanking_pause";\r
305         QProcess::startDetached(strUnlock);\r
306     }\r
307 }\r