From: Dr. Johann Pfefferl Date: Sat, 8 May 2010 18:16:02 +0000 (+0200) Subject: Style is now more object oriented X-Git-Tag: release-1.0-2~25 X-Git-Url: http://git.maemo.org/git/?p=gps-tracker;a=commitdiff_plain;h=11f9166300fa6bfff12039a4e93bdaaec9c64462 Style is now more object oriented --- diff --git a/Makefile b/Makefile index 9f9fb87..dbf5b9c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # define a list of pkg-config packages we want to use -pkg_packages := gtk+-2.0 hildon-1 liblocation +pkg_packages := gtk+-2.0 hildon-1 liblocation hildon-fm-2 # get the necessary flags for compiling PKG_CFLAGS := $(shell pkg-config --cflags $(pkg_packages)) @@ -16,12 +16,12 @@ ADD_CFLAGS := -Wall -g CFLAGS := $(PKG_CFLAGS) $(ADD_CFLAGS) $(CFLAGS) LDFLAGS := $(PKG_LDFLAGS) $(LDFLAGS) -targets = gps-tracker +targets = gps-tracker example_file_chooser .PHONY: all all: $(targets) -gps-tracker: gps-tracker.o +%: %.o $(CC) $^ -o $@ $(LDFLAGS) .PHONY: clean diff --git a/gps-tracker.c b/gps-tracker.c index f4afead..d089850 100644 --- a/gps-tracker.c +++ b/gps-tracker.c @@ -1,13 +1,56 @@ #include #include +#include #include #include #include #include +typedef struct { + HildonProgram *program; + HildonWindow *window; + + GtkWidget * main_vbox; + GtkWidget *status_label; + GtkButton *start_button; +} AppData; + static GtkWidget *window = NULL; +static gchar * interface_file_chooser (AppData * appdata, GtkFileChooserAction action) +{ + GtkWidget *dialog; + gchar *filename = NULL; + + dialog = hildon_file_chooser_dialog_new (GTK_WINDOW (appdata->window), action); + gtk_widget_show_all (GTK_WIDGET (dialog)); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + } + + gtk_widget_destroy(dialog); + return filename; +} + +static void cb_example_file_save (GtkWidget * w, AppData * data) +{ + gchar *filename = NULL; + filename = interface_file_chooser (data, GTK_FILE_CHOOSER_ACTION_SAVE); + + if (filename == NULL) { + filename = "NULL"; + } + else { + FILE * f = fopen (filename, "w"); + fprintf (f, "This file was generated by Hildon File Chooser example."); + fclose (f); + } + + g_print ("File saved as %s\n", filename); +} + static void on_gps_device_changed (LocationGPSDevice *device, gpointer data) { @@ -105,23 +148,20 @@ on_gps_start (LocationGPSDevice *device, gpointer data) int main (int argc, char **argv) { - HildonProgram *program = NULL; GtkWidget *picker_button = NULL; - GtkVBox *vbox; - GtkWidget *status_label; - GtkButton *start_button; + AppData * data = g_new0 (AppData, 1); hildon_gtk_init (&argc, &argv); LocationGPSDControl *control; LocationGPSDevice *device; - program = hildon_program_get_instance (); + data->program = hildon_program_get_instance (); g_set_application_name("GPS tracker"); window = hildon_stackable_window_new (); - hildon_program_add_window (program, HILDON_WINDOW (window)); + hildon_program_add_window (data->program, HILDON_WINDOW (window)); - vbox = (void*)gtk_vbox_new(FALSE, 0); + data->main_vbox = (void*)gtk_vbox_new(FALSE, 0); /* Create a picker button */ picker_button = hildon_date_button_new (HILDON_SIZE_AUTO, @@ -130,14 +170,14 @@ int main (int argc, char **argv) /* Set a title to the button*/ hildon_button_set_title (HILDON_BUTTON (picker_button), "Pick a date"); - start_button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT)); - gtk_button_set_label (start_button, "Start"); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(start_button), FALSE, FALSE, 8); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(picker_button), FALSE, FALSE, 0); - status_label = gtk_label_new("Hier kommt der Status hin\nUnd hier ist die 2. Zeile"); - gtk_box_pack_start_defaults(GTK_BOX(vbox), status_label); + data->start_button = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_THUMB_HEIGHT)); + gtk_button_set_label (data->start_button, "Start"); + gtk_box_pack_start(GTK_BOX(data->main_vbox), GTK_WIDGET(data->start_button), FALSE, FALSE, 8); + gtk_box_pack_start(GTK_BOX(data->main_vbox), GTK_WIDGET(picker_button), FALSE, FALSE, 0); + data->status_label = gtk_label_new("Hier kommt der Status hin\nUnd hier ist die 2. Zeile"); + gtk_box_pack_start_defaults(GTK_BOX(data->main_vbox), data->status_label); /* Add vbox to main window */ - gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET(vbox)); + gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET(data->main_vbox)); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); @@ -162,7 +202,7 @@ int main (int argc, char **argv) g_signal_connect (control, "error", G_CALLBACK (on_gps_error), NULL); g_signal_connect (control, "gpsd-running", G_CALLBACK (on_gps_start), NULL); g_signal_connect (control, "gpsd-stopped", G_CALLBACK (on_gps_stop), NULL); - g_signal_connect (device, "changed", G_CALLBACK (on_gps_device_changed), status_label); + g_signal_connect (device, "changed", G_CALLBACK (on_gps_device_changed), data->status_label); gtk_widget_show_all (GTK_WIDGET (window)); @@ -173,6 +213,7 @@ int main (int argc, char **argv) g_object_unref (device); g_object_unref (control); + g_free(data); return 0; }