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