00e7243cfde6e82402bec51832f48aaed3233204
[googlelatitude] / src / latitude.cpp
1 #include "latitude.h"
2
3 LatitudeGUI::LatitudeGUI(QMainWindow *parent) : QMainWindow(parent) {
4     glatitude = new GoogleLatitude(this);
5     setting = new QSettings();
6     urllogin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview&continue=http://www.google.com/maps/m?mode=latitude");
7
8     show_lat();
9
10     connect(glatitude, SIGNAL(getOK()), this, SLOT(get_loc()));
11     connect(glatitude, SIGNAL(setOK()), this, SLOT(set_OK()));
12     connect(glatitude, SIGNAL(setERROR()), this, SLOT(set_ERROR()));
13 }
14
15 void LatitudeGUI::get_loc() {
16     location_lat->setText(QString::number(glatitude->get_lat()));
17     location_lon->setText(QString::number(glatitude->get_lon()));
18     location_acc->setText(QString::number(glatitude->get_acc()));
19     status->setText(tr("Using google.com/loc"));
20 }
21
22 void LatitudeGUI::get_cell() {
23     status->setText(tr("Using cell... TODO"));
24 }
25
26 void LatitudeGUI::get_gps() {
27     status->setText(tr("Using gps... TODO"));
28 }
29
30 void LatitudeGUI::set() {
31     glatitude->login(login_user->text(),
32                      login_pass->text());
33     glatitude->set(location_lat->text().toDouble(),
34                    location_lon->text().toDouble(),
35                    location_acc->text().toDouble());
36     status->setText(tr("Setting location..."));
37 }
38
39 void LatitudeGUI::set_OK() {
40     status->setText(tr("Location Updated !"));
41 }
42
43 void LatitudeGUI::set_ERROR() {
44     status->setText(tr("Error in Authentification !"));
45 }
46
47 void LatitudeGUI::save() {
48     setting->setValue("user", login_user->text());
49     setting->setValue("pass", login_pass->text());
50 }
51
52 void LatitudeGUI::show_map() {
53     // webkit magic
54     maps = new QWebView();
55     connect(maps, SIGNAL(loadFinished(bool)), this, SLOT(maps_login()));
56     maps->load(urllogin);
57
58     // set widget
59     setCentralWidget(maps);
60     setWindowTitle(tr("Google Maps"));
61
62     // menu
63     menuBar()->clear();
64     menuBar()->addAction(tr("&Latitude") ,this, SLOT(show_lat()));
65 }
66
67 void LatitudeGUI::show_lat() {
68     // login input
69     login_user = new QLineEdit(setting->value("user","my_username").toString());
70     login_pass = new QLineEdit(setting->value("pass","my_password").toString());
71     login_pass->setEchoMode(QLineEdit::Password);
72     QPushButton *button_update = new QPushButton(tr("&Update Location"));
73     // login layout
74     QFormLayout *layout_login = new QFormLayout();
75     layout_login->addRow(tr("&Username"), login_user);
76     layout_login->addRow(tr("&Password"), login_pass);
77     layout_login->addRow(button_update);
78     // login connect
79     connect(login_user, SIGNAL(editingFinished()), this, SLOT(save()));
80     connect(login_pass, SIGNAL(editingFinished()), this, SLOT(save()));
81     connect(login_user, SIGNAL(returnPressed()), login_pass, SLOT(setFocus()));
82     connect(login_pass, SIGNAL(returnPressed()), this, SLOT(set()));
83     connect(button_update, SIGNAL(clicked()), this, SLOT(set()));
84
85     // location input
86     location_lat = new QLineEdit(QString::number(0));
87     location_lon = new QLineEdit(QString::number(0));
88     location_acc = new QLineEdit(QString::number(0));
89     // location layout
90     QFormLayout *layout_location = new QFormLayout();
91     layout_location->addRow(tr("lat :"), location_lat);
92     layout_location->addRow(tr("lon :"), location_lon);
93     layout_location->addRow(tr("acc :"), location_acc);
94
95     // source button
96     QPushButton *source_loc = new QPushButton(tr("&loc"));
97     QPushButton *source_cell = new QPushButton(tr("&cell"));
98     QPushButton *source_gps = new QPushButton(tr("&gps"));
99     // source layout
100     QHBoxLayout *layout_source = new QHBoxLayout();
101     layout_source->addWidget(source_loc);
102     layout_source->addWidget(source_cell);
103     layout_source->addWidget(source_gps);
104     // source connect
105     connect(source_loc, SIGNAL(clicked()), glatitude, SLOT(get()));
106     connect(source_cell, SIGNAL(clicked()), this, SLOT(get_cell()));
107     connect(source_gps, SIGNAL(clicked()), this, SLOT(get_gps()));
108
109     // main layout
110     location = new QWidget();
111     QHBoxLayout *layout_form = new QHBoxLayout();
112     layout_form->addLayout(layout_login);
113     layout_form->addLayout(layout_location);
114     QVBoxLayout *layout = new QVBoxLayout();
115     status = new QLineEdit("Ready");
116     status->setReadOnly(true);
117     status->setDisabled(true);
118     layout->addLayout(layout_form);
119     layout->addWidget(status);
120     layout->addLayout(layout_source);
121     location->setLayout(layout);
122
123     // set widget
124     setCentralWidget(location);
125     setWindowTitle(tr("Google Latitude Updater"));
126
127     // menu
128     menuBar()->clear();
129     menuBar()->addAction(tr("&Maps") ,this, SLOT(show_map()));
130 }
131
132 void LatitudeGUI::maps_login() {
133     if ( maps->url() == urllogin ) {
134         maps->page()->mainFrame()->evaluateJavaScript(
135                 QString("document.getElementById('Email').value = \"%1\";").arg(
136                         setting->value("user").toString()));
137         maps->page()->mainFrame()->evaluateJavaScript(
138                 QString("document.getElementById('Passwd').value = \"%1\";").arg(
139                         setting->value("pass").toString()));
140         maps->page()->mainFrame()->evaluateJavaScript("document.getElementById('gaia_loginform').submit();");
141     }
142 }