1 #include "cellinfo-window.h"
5 #include <glib/gi18n.h>
7 static void create_cellinfo (CellinfoWindow *self);
8 static void create_menu (CellinfoWindow *self);
10 static void cellinfo_on_location_changed(LocationGPSDevice *device, gpointer data);
12 static void cellinfo_window_on_menu_select_sensors (GtkButton *button, gpointer data);
13 static void cellinfo_window_on_menu_configuration (GtkButton *button, gpointer data);
16 G_DEFINE_TYPE (CellinfoWindow, cellinfo_window, HILDON_TYPE_WINDOW)
19 cellinfo_window_dispose (GObject *object)
21 CellinfoWindow *self = CELLINFO_WINDOW (object);
23 location_gpsd_control_stop(self->control);
24 G_OBJECT_CLASS (cellinfo_window_parent_class)->dispose (object);
28 cellinfo_window_finalize (GObject *object)
30 G_OBJECT_CLASS (cellinfo_window_parent_class)->finalize (object);
34 cellinfo_window_class_init (CellinfoWindowClass *klass)
36 GObjectClass *object_class = G_OBJECT_CLASS (klass);
39 object_class->dispose = cellinfo_window_dispose;
40 object_class->finalize = cellinfo_window_finalize;
44 cellinfo_window_init (CellinfoWindow *self)
47 /* Create a vbox which will contain our text view: */
48 GtkWidget *main_vbox = gtk_vbox_new (FALSE, 0);
49 gtk_container_add (GTK_CONTAINER (self), main_vbox);
51 /* Create all necessary parts: */
52 create_cellinfo (self);
55 /* Put the cell info in the vbox and show it: */
56 gtk_box_pack_start (GTK_BOX (main_vbox), self->vb_cellinfo, TRUE, TRUE, 0);
57 gtk_widget_show (main_vbox);
59 /* Set the intial focus on the text view: */
60 gtk_widget_grab_focus (GTK_WIDGET(self->vb_cellinfo));
65 cellinfo_window_new (osso_context_t *osso)
67 CellinfoWindow *self =
68 CELLINFO_WINDOW (g_object_new (CELLINFO_TYPE_WINDOW, NULL));
70 /* Avoid adding extra code such as this to a _new() function when writing
71 * widgets that should be reusable. This should really be a GObject property.
78 static GtkWidget* add_menu_item (GtkWidget *main_menu, const gchar* title,
79 GCallback clicked_callback, gpointer user_data)
81 HildonAppMenu *app_menu = HILDON_APP_MENU (main_menu);
83 /* Create a button, add it, and return it: */
84 GtkWidget *button = hildon_button_new_with_text (HILDON_SIZE_AUTO,
85 HILDON_BUTTON_ARRANGEMENT_VERTICAL, title, NULL);
86 gtk_widget_show (button);
88 g_signal_connect_after (button, "clicked",
89 G_CALLBACK (clicked_callback), user_data);
91 hildon_app_menu_append (app_menu, GTK_BUTTON (button));
96 static void create_menu (CellinfoWindow *self)
99 /* Create needed handles */
100 GtkWidget *main_menu = hildon_app_menu_new ();
102 /* Create the menu items */
103 self->select_sensors = add_menu_item (main_menu, _("Select Sensors"),
104 G_CALLBACK (&cellinfo_window_on_menu_select_sensors), self);
107 /* Create the menu items */
108 self->select_sensors = add_menu_item (main_menu, _("Configuration"),
109 G_CALLBACK (&cellinfo_window_on_menu_configuration), self);
111 /* Add menu to HildonWindow */
112 hildon_window_set_app_menu (
113 HILDON_WINDOW (self),
114 HILDON_APP_MENU (main_menu));
116 /* We need to show menu items */
117 gtk_widget_show_all (GTK_WIDGET (main_menu));
119 static gboolean cellinfo_start_location (gpointer data)
121 location_gpsd_control_start ((LocationGPSDControl *) data);
125 static gboolean cellinfo_on_gpsd_running (LocationGPSDControl *control, gpointer data){
126 CellinfoWindow *self = (CellinfoWindow *)data;
128 g_print("gpsd running status %d\n", self->device->status);
130 g_print("No device !");
135 static void cellinfo_on_gpsd_error(LocationGPSDControl *control, LocationGPSDControlError error, gpointer user_data)
137 g_print("GPSD error!\n");
139 case LOCATION_ERROR_USER_REJECTED_DIALOG:
140 g_debug("User didn't enable requested methods");
142 case LOCATION_ERROR_USER_REJECTED_SETTINGS:
143 g_debug("User changed settings, which disabled location");
145 case LOCATION_ERROR_BT_GPS_NOT_AVAILABLE:
146 g_debug("Problems with BT GPS");
148 case LOCATION_ERROR_METHOD_NOT_ALLOWED_IN_OFFLINE_MODE:
149 g_debug("Requested method is not allowed in offline mode");
151 case LOCATION_ERROR_SYSTEM:
152 g_debug("System error");
157 static GtkWidget *add_cellinfo_label_entry(CellinfoWindow *self, const char *entry_name, GtkWidget **label){
161 hbox = gtk_hbox_new (TRUE, 1);
162 l = gtk_label_new(entry_name);
163 *label = gtk_label_new("");
165 gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
166 gtk_label_set_justify (GTK_LABEL (*label), GTK_JUSTIFY_LEFT);
167 gtk_box_pack_start (GTK_BOX (hbox), l, TRUE, TRUE, 0);
168 gtk_box_pack_start (GTK_BOX (hbox), *label, TRUE, TRUE, 0);
169 gtk_box_pack_start (GTK_BOX (self->vb_cellinfo), hbox, TRUE, TRUE, 0);
173 static void create_cellinfo (CellinfoWindow *self)
179 self->control = location_gpsd_control_get_default();
180 self->device = g_object_new(LOCATION_TYPE_GPS_DEVICE, NULL);
182 g_object_set(G_OBJECT(self->control),
183 "preferred-method", LOCATION_METHOD_CWP,
184 "preferred-interval", LOCATION_INTERVAL_DEFAULT,
187 g_signal_connect(self->device, "changed", G_CALLBACK(cellinfo_on_location_changed), self);
188 g_signal_connect(self->control, "gpsd-running", G_CALLBACK(cellinfo_on_gpsd_running), self);
189 g_signal_connect(self->control, "error", G_CALLBACK(cellinfo_on_gpsd_error), self);
191 g_idle_add(cellinfo_start_location, self->control);
194 self->vb_cellinfo = gtk_vbox_new(TRUE, 1);
197 hbox = gtk_hbox_new (TRUE, 1);
198 label = gtk_label_new(_("Cell Type:"));
199 self->lb_cell_type = gtk_label_new("");
200 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
201 gtk_box_pack_start (GTK_BOX (hbox), self->lb_cell_type, TRUE, TRUE, 0);
202 gtk_box_pack_start (GTK_BOX (self->vb_cellinfo), hbox, TRUE, TRUE, 0);
206 self->hb_cell_id = add_cellinfo_label_entry (self, _("Cell Id:"), &self->lb_cell_id);
209 hbox = gtk_hbox_new (TRUE, 1);
210 label = gtk_label_new (_("MNC:"));
211 self->lb_mnc = gtk_label_new("");
212 gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
213 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
214 gtk_box_pack_start (GTK_BOX (hbox), self->lb_mnc, TRUE, TRUE, 0);
215 gtk_box_pack_start (GTK_BOX (self->vb_cellinfo), hbox, TRUE, TRUE, 0);
218 hbox = gtk_hbox_new (TRUE, 1);
219 label = gtk_label_new(_("MCC:"));
220 self->lb_mcc = gtk_label_new("");
221 gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
222 gtk_box_pack_start (GTK_BOX (hbox), self->lb_mcc, TRUE, TRUE, 0);
223 gtk_box_pack_start (GTK_BOX (self->vb_cellinfo), hbox, TRUE, TRUE, 0);
226 self->hb_lac = gtk_hbox_new (TRUE, 1);
227 label = gtk_label_new(_("LAC:"));
228 self->lb_lac = gtk_label_new("");
229 gtk_box_pack_start (GTK_BOX (self->hb_lac), label, TRUE, TRUE, 0);
230 gtk_box_pack_start (GTK_BOX (self->hb_lac), self->lb_lac, TRUE, TRUE, 0);
231 gtk_box_pack_start (GTK_BOX (self->vb_cellinfo), self->hb_lac, TRUE, TRUE, 0);
234 self->hb_ucid = gtk_hbox_new (TRUE, 1);
235 label = gtk_label_new(_("UCID:"));
236 self->lb_ucid = gtk_label_new("");
237 gtk_box_pack_start (GTK_BOX (self->hb_ucid), label, TRUE, TRUE, 0);
238 gtk_box_pack_start (GTK_BOX (self->hb_ucid), self->lb_ucid, TRUE, TRUE, 0);
239 gtk_box_pack_start (GTK_BOX (self->vb_cellinfo), self->hb_ucid, TRUE, TRUE, 0);
242 gtk_widget_show_all (self->vb_cellinfo);
244 gtk_widget_hide_all (self->hb_cell_id);
245 gtk_widget_hide_all (self->hb_lac);
246 gtk_widget_hide_all (self->hb_ucid);
250 static void cellinfo_window_on_menu_select_sensors (GtkButton *button, gpointer data)
255 static void cellinfo_window_on_menu_configuration (GtkButton *button, gpointer data)
257 //CellinfoWindow *self = CELLINFO_WINDOW (data);
261 static void cellinfo_on_location_changed(LocationGPSDevice *device, gpointer data)
263 CellinfoWindow *self = CELLINFO_WINDOW (data);
265 g_print("No device\n");
268 g_print("Changed! status %d\n", device->status);
269 if (device->cell_info){
270 if (device->cell_info->flags & LOCATION_CELL_INFO_GSM_CELL_INFO_SET){
271 _gsm_cell_info ci = device->cell_info->gsm_cell_info;
272 gtk_label_set_text (GTK_LABEL (self->lb_cell_type), _("GSM"));
273 gtk_label_set_text (GTK_LABEL (self->lb_cell_id), g_strdup_printf ("%d",ci.cell_id));
274 gtk_label_set_text (GTK_LABEL (self->lb_mnc), g_strdup_printf ("%d",ci.mnc));
275 gtk_label_set_text (GTK_LABEL (self->lb_mcc), g_strdup_printf ("%d",ci.mcc));
276 gtk_label_set_text (GTK_LABEL (self->lb_lac), g_strdup_printf ("%d",ci.lac));
277 gtk_widget_show_all (self->hb_cell_id);
278 gtk_widget_show_all (self->hb_lac);
279 gtk_widget_hide_all (self->hb_ucid);
281 if (device->cell_info->flags & LOCATION_CELL_INFO_WCDMA_CELL_INFO_SET){
282 _wcdma_cell_info ci = device->cell_info->wcdma_cell_info;
284 gtk_label_set_text (GTK_LABEL (self->lb_cell_type), _("WCDMA"));
285 gtk_label_set_text (GTK_LABEL (self->lb_mnc), g_strdup_printf ("%d",ci.mnc));
286 gtk_label_set_text (GTK_LABEL (self->lb_mcc), g_strdup_printf ("%d",ci.mcc));
287 gtk_label_set_text (GTK_LABEL (self->lb_ucid), g_strdup_printf ("%d",ci.ucid));
288 gtk_widget_hide_all (self->hb_cell_id);
289 gtk_widget_hide_all (self->hb_lac);
290 gtk_widget_show_all (self->hb_ucid);