You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
7.6 KiB
212 lines
7.6 KiB
/***************************************************************************
|
|
* gtk_wnd_gpssetting.c
|
|
*
|
|
* 06. May 2010
|
|
* Copyright 2010 Steffen Pohle
|
|
* steffen@gulpe.de
|
|
****************************************************************************/
|
|
|
|
/*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#include <gtk/gtk.h>
|
|
#include "map.h"
|
|
#include "gtk_port.h"
|
|
#include "gps.h"
|
|
#include "system.h"
|
|
|
|
GtkWidget *gpss_wnd = NULL;
|
|
GtkWidget *gpss_device;
|
|
GtkWidget *gpss_serialdevice;
|
|
GtkWidget *gpss_filename;
|
|
GtkWidget *gpss_createlog;
|
|
|
|
/*
|
|
* delete and destroy signals and events..
|
|
*/
|
|
void gpss_wnd_destroy (GtkWidget *widget, gpointer data) {
|
|
gpss_wnd = NULL;
|
|
};
|
|
|
|
|
|
static gboolean gpss_wnd_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
|
|
return FALSE; /* we can quit */
|
|
};
|
|
|
|
|
|
void gpss_wnd_selectfile () {
|
|
GtkWidget *dialog;
|
|
dialog = gtk_file_chooser_dialog_new (_("Open GPSLog File"), GTK_WINDOW(gpss_wnd),
|
|
GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
|
NULL);
|
|
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
|
|
char *filename;
|
|
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
|
|
gtk_entry_set_text (GTK_ENTRY (gpss_filename), (gchar*) filename);
|
|
g_free (filename);
|
|
}
|
|
gtk_widget_destroy (dialog);
|
|
};
|
|
|
|
|
|
void gpss_wnd_entryedit (GtkEditable *editable, gpointer user_data) {
|
|
char txt[GPS_DEVICELEN];
|
|
|
|
if (editable == GTK_EDITABLE(gpss_filename)) {
|
|
snprintf (txt, GPS_DEVICELEN, "file:%s", gtk_entry_get_text (GTK_ENTRY(gpss_filename)));
|
|
gtk_entry_set_text (GTK_ENTRY(gpss_device), txt);
|
|
}
|
|
else if (editable == GTK_EDITABLE(gpss_serialdevice)) {
|
|
snprintf (txt, GPS_DEVICELEN, "serial:%s", gtk_entry_get_text (GTK_ENTRY(gpss_serialdevice)));
|
|
gtk_entry_set_text (GTK_ENTRY(gpss_device), txt);
|
|
}
|
|
};
|
|
|
|
|
|
void gpss_wnd_simmulationtoggle (GtkToggleButton *togglebutton, gpointer user_data) {
|
|
char txt[GPS_DEVICELEN];
|
|
|
|
snprintf (txt, GPS_DEVICELEN, "file:%s", gtk_entry_get_text (GTK_ENTRY(gpss_filename)));
|
|
gtk_entry_set_text (GTK_ENTRY(gpss_device), txt);
|
|
};
|
|
|
|
|
|
void gpss_wnd_ok () {
|
|
gps_set_device ((char*)gtk_entry_get_text (GTK_ENTRY(gpss_device)));
|
|
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(gpss_createlog)))
|
|
gpsflags = gpsflags | GPSF_LOG;
|
|
else
|
|
gpsflags = gpsflags & (GPSF_ALL-GPSF_LOG);
|
|
};
|
|
|
|
|
|
void gpss_wnd_cancel () {
|
|
};
|
|
|
|
|
|
/*
|
|
* creates the gpssetting windows
|
|
*/
|
|
void gpssetting_wnd_show (GtkWidget *parent) {
|
|
GtkWidget *main_box, *box1, *box2, *button, *label, *frame;
|
|
char *ptxt;
|
|
|
|
if (gpss_wnd == NULL) {
|
|
ptxt = gps_get_device ();
|
|
|
|
gpss_wnd = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
gtk_window_set_title (GTK_WINDOW(gpss_wnd), _("spOSMroute - GPS Settings"));
|
|
gtk_container_set_border_width (GTK_CONTAINER (gpss_wnd), 4);
|
|
gtk_window_set_modal (GTK_WINDOW(gpss_wnd), TRUE);
|
|
gtk_window_set_transient_for (GTK_WINDOW(gpss_wnd), GTK_WINDOW(parent));
|
|
|
|
g_signal_connect (G_OBJECT (gpss_wnd), "delete_event", G_CALLBACK (gpss_wnd_delete_event), NULL);
|
|
g_signal_connect (G_OBJECT (gpss_wnd), "destroy", G_CALLBACK (gpss_wnd_destroy), NULL);
|
|
main_box = gtk_vbox_new (FALSE, 1);
|
|
gtk_container_add (GTK_CONTAINER (gpss_wnd), main_box);
|
|
|
|
/* button leiste */
|
|
box1 = gtk_hbox_new (FALSE, 1);
|
|
gtk_box_pack_end (GTK_BOX (main_box), box1, FALSE, FALSE, 4);
|
|
|
|
button = gtk_button_new_from_stock (GTK_STOCK_OK);
|
|
gtk_box_pack_end (GTK_BOX (box1), button, FALSE, FALSE, 8);
|
|
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gpss_wnd_ok), NULL);
|
|
gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (gpss_wnd));
|
|
|
|
button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
|
|
gtk_box_pack_end (GTK_BOX (box1), button, FALSE, FALSE, 8);
|
|
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gpss_wnd_cancel), NULL);
|
|
gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (gpss_wnd));
|
|
|
|
/*
|
|
* device string
|
|
*/
|
|
|
|
/* device */
|
|
label = gtk_label_new (_("As GPS source you can choose a file or serial device.\nSamples: 'file:/tmp/gps.glog', 'serial:/dev/ttyUBS0',\n'serial:/dev/ttyS0,4800'"));
|
|
gtk_box_pack_start (GTK_BOX (main_box), label, FALSE, FALSE, 4);
|
|
|
|
box1 = gtk_hbox_new (FALSE, 1);
|
|
label = gtk_label_new (_("Source:"));
|
|
gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 4);
|
|
gpss_device = gtk_entry_new ();
|
|
gtk_box_pack_start (GTK_BOX (box1), gpss_device, TRUE, TRUE, 4);
|
|
gtk_box_pack_start (GTK_BOX (main_box), box1, FALSE, FALSE, 1);
|
|
|
|
gpss_createlog = gtk_check_button_new_with_label (_("Create Logfile"));
|
|
gtk_box_pack_start (GTK_BOX (main_box), gpss_createlog, FALSE, FALSE, 1);
|
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gpss_createlog), (gpsflags & GPSF_LOG) ? TRUE : FALSE);
|
|
|
|
|
|
/* serial */
|
|
frame = gtk_frame_new (_("Serial Device"));
|
|
gtk_container_set_border_width (GTK_CONTAINER (frame), 8);
|
|
|
|
box1 = gtk_vbox_new (FALSE, 1);
|
|
|
|
box2 = gtk_hbox_new (FALSE, 1);
|
|
label = gtk_label_new (_("TTY Device:"));
|
|
gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 4);
|
|
gpss_serialdevice = gtk_entry_new ();
|
|
g_signal_connect (G_OBJECT (gpss_serialdevice), "changed", G_CALLBACK (gpss_wnd_entryedit) , NULL);
|
|
gtk_box_pack_start (GTK_BOX (box2), gpss_serialdevice, TRUE, TRUE, 4);
|
|
|
|
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 4);
|
|
|
|
gtk_container_add (GTK_CONTAINER (frame), box1);
|
|
gtk_box_pack_start (GTK_BOX (main_box), frame, FALSE, FALSE, 1);
|
|
|
|
/* file */
|
|
frame = gtk_frame_new (_("Log File"));
|
|
gtk_container_set_border_width (GTK_CONTAINER (frame), 8);
|
|
|
|
box1 = gtk_vbox_new (FALSE, 1);
|
|
label = gtk_label_new (_("Using Logfiles is only usefull for testing the code."));
|
|
gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 4);
|
|
|
|
box2 = gtk_hbox_new (FALSE, 1);
|
|
label = gtk_label_new (_("File:"));
|
|
gtk_box_pack_start (GTK_BOX (box2), label, FALSE, FALSE, 4);
|
|
gpss_filename = gtk_entry_new ();
|
|
gtk_box_pack_start (GTK_BOX (box2), gpss_filename, TRUE, TRUE, 4);
|
|
g_signal_connect (G_OBJECT (gpss_filename), "changed", G_CALLBACK (gpss_wnd_entryedit) , NULL);
|
|
if (strncmp (ptxt, "file:", 5) == 0)
|
|
gtk_entry_buffer_set_text (GTK_ENTRY_BUFFER(gtk_entry_get_buffer (GTK_ENTRY(gpss_filename))), ptxt+5, strlen (ptxt+5));
|
|
|
|
button = gtk_button_new_from_stock (GTK_STOCK_OPEN);
|
|
g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gpss_wnd_selectfile) , NULL);
|
|
gtk_box_pack_end (GTK_BOX (box2), button, FALSE, FALSE, 4);
|
|
|
|
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 4);
|
|
|
|
gtk_container_add (GTK_CONTAINER (frame), box1);
|
|
gtk_box_pack_start (GTK_BOX (main_box), frame, FALSE, FALSE, 1);
|
|
|
|
/* update all elements */
|
|
gtk_entry_set_text (GTK_ENTRY(gpss_device), (gchar*) gps_get_device ());
|
|
|
|
/* show all elements */
|
|
gtk_widget_show_all (gpss_wnd);
|
|
}
|
|
else {
|
|
d_printf ("%s:%d this should not happen. the setting window is modal.", __FILE__, __LINE__);
|
|
exit (0);
|
|
}
|
|
};
|