]> git.itanic.dy.fi Git - maemo-mapper/blobdiff - src/settings.c
Added basic APRS support - Can be disabled by removing definition of INCLUDE_APRS
[maemo-mapper] / src / settings.c
index ba46750127c82cc26023f020ea08bc0a91722308..a0b814602f62ff451daa2b1aab03f0b12f9c4b95 100644 (file)
 #define GCONF_KEY_POI_DL_URL GCONF_KEY_PREFIX"/poi_dl_url" 
 #define GCONF_KEY_DEG_FORMAT GCONF_KEY_PREFIX"/deg_format" 
 
+// APRS
+#ifdef INCLUDE_APRS
+#define GCONF_KEY_APRS_SERVER      GCONF_KEY_PREFIX"/aprs_server" 
+#define GCONF_KEY_APRS_SERVER_PORT GCONF_KEY_PREFIX"/aprs_server_port" 
+#define GCONF_KEY_APRS_SERVER_VAL  GCONF_KEY_PREFIX"/aprs_mycall_val" 
+#define GCONF_KEY_APRS_MYCALL      GCONF_KEY_PREFIX"/aprs_mycall"
+#define GCONF_KEY_APRS_INET_BEACON      GCONF_KEY_PREFIX"/aprs_inet_beacon"
+#define GCONF_KEY_APRS_INET_BEACON_INTERVAL      GCONF_KEY_PREFIX"/aprs_inet_beacon_interval"
+#define GCONF_KEY_APRS_ENABLE                                  GCONF_KEY_PREFIX"/aprs_enable"
+#define GCONF_KEY_APRS_ENABLE_INET_TX                  GCONF_KEY_PREFIX"/aprs_enable_inet_tx"
+#define GCONF_KEY_APRS_ENABLE_TTY_TX                   GCONF_KEY_PREFIX"/aprs_enable_tty_tx"
+
+#define GCONF_KEY_APRS_MAX_TRACK_PTS                   GCONF_KEY_PREFIX"/aprs_max_track_points"
+#define GCONF_KEY_APRS_MAX_STATIONS                    GCONF_KEY_PREFIX"/aprs_max_stations"
+#define GCONF_KEY_APRS_TTY_PORT                                GCONF_KEY_PREFIX"/aprs_tty_port"
+#define GCONF_KEY_APRS_TNC_CONN_METHOD                         GCONF_KEY_PREFIX"/aprs_tnc_conn_method"
+#define GCONF_KEY_APRS_TNC_BT_MAC                              GCONF_KEY_PREFIX"/aprs_tnc_bt_mac"
+#define GCONF_KEY_APRS_INET_AUTO_FILTER                GCONF_KEY_PREFIX"/aprs_inet_auto_filter"
+#define GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE  GCONF_KEY_PREFIX"/aprs_inet_auto_filter_range"
+#define GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT  GCONF_KEY_PREFIX"/aprs_show_new_station_alert"
+#define GCONF_KEY_APRS_BEACON_COMMENT                  GCONF_KEY_PREFIX"/aprs_beacon_comment"
+#define GCONF_KEY_APRS_TTY_BEACON_INTERVAL             GCONF_KEY_PREFIX"/aprs_tty_beacon_interval"
+
+#define GCONF_KEY_APRS_BEACON_PATH                             GCONF_KEY_PREFIX"/aprs_beacon_path"
+#define GCONF_KEY_APRS_BEACON_SYM_GROUP                GCONF_KEY_PREFIX"/aprs_beacon_symbol_group"
+#define GCONF_KEY_APRS_BEACON_SYMBOL                   GCONF_KEY_PREFIX"/aprs_beacon_symbol"
+#define GCONF_KEY_APRS_BEACON_COMPRESSED               GCONF_KEY_PREFIX"/aprs_beacon_compressed"
+
+//////////
+#endif // INCLUDE_APRS
+
 
 typedef struct _ScanInfo ScanInfo;
 struct _ScanInfo {
@@ -145,6 +176,44 @@ struct _ScanInfo {
     DBusGProxy *sig_proxy;
 };
 
+#ifdef INCLUDE_APRS
+
+typedef struct
+{
+    GtkWidget *txt_aprs_mycall;
+    GtkWidget *txt_aprs_inet_server_validation;
+    GtkWidget *txt_aprs_server;
+    GtkWidget *txt_aprs_inet_beacon_interval;
+    GtkWidget *txt_aprs_inet_beacon_comment;
+    GtkWidget *txt_aprs_max_stations;
+    GtkWidget *txt_aprs_tty_port;
+    GtkWidget *txt_tnc_bt_mac;    
+    GtkWidget *txt_auto_filter_range;
+    GtkWidget *txt_beacon_comment;
+    GtkWidget *num_aprs_server_port;
+    GtkWidget *txt_tty_beacon_interval;
+    
+    GtkWidget *rad_aprs_file;
+    GtkWidget *rad_tnc_bt;
+    GtkWidget *rad_tnc_file;
+    
+    GtkWidget *chk_enable_inet_auto_filter;
+    GtkWidget *chk_enable_inet_tx;
+    GtkWidget *chk_enable_tty_tx;
+    GtkWidget *chk_aprs_show_new_station_alert;
+    GtkWidget *chk_aprs_enabled;
+    
+    GtkWidget *btn_scan_bt_tnc;
+    
+    GtkWidget *txt_unproto_path;
+    GtkWidget *chk_compressed_beacon;
+    GtkWidget *txt_beacon_group;
+    GtkWidget *txt_beacon_symbol;
+    
+} TAprsSettings;
+#endif // INCLUDE_APRS
+
+
 typedef struct _KeysDialogInfo KeysDialogInfo;
 struct _KeysDialogInfo {
     GtkWidget *cmb[CUSTOM_KEY_ENUM_COUNT];
@@ -155,6 +224,131 @@ struct _ColorsDialogInfo {
     GtkWidget *col[COLORABLE_ENUM_COUNT];
 };
 
+#ifdef INCLUDE_APRS
+typedef enum
+{
+       ALIGN_TOP_LEFT,
+       ALIGN_TOP_CENTER,
+       ALIGN_TOP_RIGHT,
+       ALIGN_CENTER_LEFT,
+       ALIGN_CENTER_CENTER,
+       ALIGN_CENTER_RIGHT,
+       ALIGN_BOTTOM_LEFT,
+       ALIGN_BOTTOM_CENTER,
+       ALIGN_BOTTOM_RIGHT
+} TCellAlignment;
+
+void set_ctrl_alignment(GtkWidget *ctrl, TCellAlignment alignment)
+{
+       gfloat align_hor = 0.0f, align_vert = 0.0f;
+
+       switch(alignment)
+    {
+    case ALIGN_CENTER_LEFT:
+    case ALIGN_CENTER_CENTER:
+    case ALIGN_CENTER_RIGHT:
+       align_vert = 0.5f;
+       break;
+    case ALIGN_BOTTOM_LEFT:
+    case ALIGN_BOTTOM_CENTER:
+    case ALIGN_BOTTOM_RIGHT:
+       align_vert = 1.0f;
+       break;
+    case ALIGN_TOP_LEFT:
+    case ALIGN_TOP_CENTER:
+    case ALIGN_TOP_RIGHT:
+    default:
+       align_vert = 0.0f;
+       break;
+    }
+    
+
+    switch(alignment)
+    {
+    case ALIGN_CENTER_CENTER:
+    case ALIGN_BOTTOM_CENTER:
+    case ALIGN_TOP_CENTER:
+       align_hor = 0.5f;
+       break;
+    case ALIGN_CENTER_RIGHT:
+    case ALIGN_BOTTOM_RIGHT:
+    case ALIGN_TOP_RIGHT:
+       align_hor = 1.0f;
+       break;
+    case ALIGN_CENTER_LEFT:
+    case ALIGN_BOTTOM_LEFT:
+    case ALIGN_TOP_LEFT:
+    default:
+       align_hor = 0.0f;
+       break;
+    }
+    
+    gtk_misc_set_alignment(GTK_MISC(ctrl), align_hor, align_vert);
+}
+
+void set_ctrl_width(GtkWidget *ctrl, gint width)
+{
+       gtk_widget_set_size_request(ctrl, width, -1);
+}
+
+
+void add_edit_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width, 
+               GtkWidget **ctrl, TCellAlignment alignment, gchar * initial_value)
+{
+       GtkWidget * hbox;
+       
+    gtk_table_attach(GTK_TABLE(table),
+        hbox = gtk_hbox_new(FALSE, 4),
+            xmin, xmax, ymin, ymax, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+    gtk_box_pack_start(GTK_BOX(hbox),
+               *ctrl = gtk_entry_new(),
+        TRUE, TRUE, 0);
+
+#ifndef LEGACY
+    g_object_set(G_OBJECT(*ctrl), "hildon-input-mode",
+        HILDON_GTK_INPUT_MODE_FULL, NULL);
+#else
+    g_object_set(G_OBJECT(*ctrl), HILDON_AUTOCAP, FALSE, NULL);
+#endif
+
+    set_ctrl_alignment(*ctrl, alignment);
+    set_ctrl_width(*ctrl, width);    
+    
+    // Set the initial value
+    if(initial_value)
+    {
+       gtk_entry_set_text(GTK_ENTRY(*ctrl), initial_value);
+    }
+}
+
+void add_check_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width, 
+               GtkWidget **ctrl, TCellAlignment alignment, gchar * caption, gboolean initial_value)
+{
+       gtk_table_attach(GTK_TABLE(table),
+                       *ctrl = gtk_check_button_new_with_label(caption),
+        xmin, xmax, ymin, ymax, GTK_FILL, 0, 2, 4);
+       
+    set_ctrl_alignment(*ctrl, alignment);
+    set_ctrl_width(*ctrl, width);
+    
+    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(*ctrl), initial_value);
+}
+
+void add_label_box(GtkWidget *table, gint xmin, gint xmax, gint ymin, gint ymax, gint width,  
+               GtkWidget **ctrl, TCellAlignment alignment, gchar * initial_value)
+{
+       
+    gtk_table_attach(GTK_TABLE(table),
+            *ctrl = gtk_label_new(initial_value),
+            xmin, xmax, ymin, ymax, GTK_FILL, 0, 2, 4);
+//        gtk_misc_set_alignment(GTK_MISC(ctrl), 1.f, 0.5f);
+
+    set_ctrl_alignment(*ctrl, alignment);
+    set_ctrl_width(*ctrl, width);
+}
+
+#endif // INCLUDE_APRS
+
 
 /**
  * Save all configuration data to GCONF.
@@ -281,7 +475,7 @@ settings_save()
 
     /* Save Deg Format. */
     gconf_client_set_string(gconf_client,
-            GCONF_KEY_DEG_FORMAT, DEG_FORMAT_ENUM_TEXT[_degformat], NULL);
+            GCONF_KEY_DEG_FORMAT, DEG_FORMAT_ENUM_TEXT[_degformat].name , NULL);
 
     /* Save Speed Limit On flag. */
     gconf_client_set_bool(gconf_client,
@@ -1127,12 +1321,96 @@ settings_dialog_colors(GtkWidget *widget, GtkWidget *parent)
     return TRUE;
 }
 
+#ifdef INCLUDE_APRS
+
+void load_aprs_options(GConfClient *gconf_client)
+{
+    _aprs_server = gconf_client_get_string(
+            gconf_client, GCONF_KEY_APRS_SERVER, NULL);
+
+    _aprs_server_port = gconf_client_get_int(
+            gconf_client, GCONF_KEY_APRS_SERVER_PORT, NULL);
+
+    _aprs_inet_server_validation = gconf_client_get_string(
+            gconf_client, GCONF_KEY_APRS_SERVER_VAL, NULL);
+
+    _aprs_mycall = gconf_client_get_string(gconf_client, 
+        GCONF_KEY_APRS_MYCALL, NULL);
+    
+
+    _aprs_tty_port = gconf_client_get_string(gconf_client, 
+        GCONF_KEY_APRS_TTY_PORT, NULL);
+    
+    
+    
+    _aprs_inet_beacon_comment = gconf_client_get_string(gconf_client, 
+       GCONF_KEY_APRS_INET_BEACON, NULL);
+
+    _aprs_inet_beacon_interval = gconf_client_get_int(
+        gconf_client, GCONF_KEY_APRS_INET_BEACON_INTERVAL, NULL);
+    
+    _aprs_std_pos_hist = gconf_client_get_int(
+        gconf_client, GCONF_KEY_APRS_MAX_TRACK_PTS, NULL);
+
+    _aprs_max_stations = gconf_client_get_int(
+            gconf_client, GCONF_KEY_APRS_MAX_STATIONS, NULL);
+    
+    _aprs_enable = gconf_client_get_bool(gconf_client,
+               GCONF_KEY_APRS_ENABLE, NULL);
+
+    _aprs_show_new_station_alert = gconf_client_get_bool(gconf_client,
+               GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT, NULL);
+
+    _aprs_tnc_method = gconf_client_get_int(
+            gconf_client, GCONF_KEY_APRS_TNC_CONN_METHOD, NULL);
+
+    _aprs_tnc_bt_mac = gconf_client_get_string(gconf_client, 
+               GCONF_KEY_APRS_TNC_BT_MAC, NULL);
+    
+    _aprs_server_auto_filter_km = gconf_client_get_int(
+                gconf_client, GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE, NULL);
+    
+    _aprs_server_auto_filter_on = gconf_client_get_bool(gconf_client,
+               GCONF_KEY_APRS_INET_AUTO_FILTER, NULL);
+    
+    _aprs_beacon_comment = gconf_client_get_string(gconf_client, 
+               GCONF_KEY_APRS_BEACON_COMMENT, NULL);
+    
+    _aprs_enable_inet_tx = gconf_client_get_bool(gconf_client,
+               GCONF_KEY_APRS_ENABLE_INET_TX, NULL);
+    _aprs_enable_tty_tx = gconf_client_get_bool(gconf_client,
+               GCONF_KEY_APRS_ENABLE_TTY_TX, NULL);
+    
+    _aprs_tty_beacon_interval = gconf_client_get_int(
+            gconf_client, GCONF_KEY_APRS_TTY_BEACON_INTERVAL, NULL);
+    
+    
+    //_aprs_unproto_path = g_strdup_printf("WIDE2-2");
+    _aprs_unproto_path = gconf_client_get_string(gconf_client, 
+                               GCONF_KEY_APRS_BEACON_PATH, NULL);
+    
+    _aprs_transmit_compressed_posit = gconf_client_get_bool(gconf_client,
+               GCONF_KEY_APRS_BEACON_COMPRESSED, NULL);
+    
+    gchar *tmp;
+    tmp = gconf_client_get_string(gconf_client, 
+                       GCONF_KEY_APRS_BEACON_SYM_GROUP, NULL);
+    if(tmp && strlen(tmp)>0) _aprs_beacon_group = tmp[0];
+    else _aprs_beacon_group = '/'; 
+    
+    //_aprs_beacon_symbol = 'k';
+    tmp = gconf_client_get_string(gconf_client, 
+                               GCONF_KEY_APRS_BEACON_SYMBOL, NULL);
+    if(tmp && strlen(tmp)>0) _aprs_beacon_symbol  = tmp[0];
+    else _aprs_beacon_symbol = 'l';
+}
+#endif // INCLUDE_APRS
+
 /**
  * Bring up the Settings dialog.  Return TRUE if and only if the recever
  * information has changed (MAC or channel).
  */
-gboolean
-settings_dialog()
+gboolean settings_dialog()
 {
     static GtkWidget *dialog = NULL;
     static GtkWidget *notebook = NULL;
@@ -1476,7 +1754,7 @@ settings_dialog()
                 cmb_degformat = gtk_combo_box_new_text());
         for(i = 0; i < DEG_FORMAT_ENUM_COUNT; i++)
             gtk_combo_box_append_text(GTK_COMBO_BOX(cmb_degformat),
-                DEG_FORMAT_ENUM_TEXT[i]);
+                DEG_FORMAT_ENUM_TEXT[i].name);
 
         gtk_table_attach(GTK_TABLE(table),
                 label = gtk_label_new(_("Auto-Download Pre-cache")),
@@ -1965,7 +2243,11 @@ settings_init()
     COLORABLE_GCONF[COLORABLE_ROUTE_BREAK]
         = GCONF_KEY_PREFIX"/color_route_break";
     COLORABLE_GCONF[COLORABLE_POI] = GCONF_KEY_PREFIX"/color_poi";
-
+    
+#ifdef INCLUDE_APRS
+    COLORABLE_GCONF[COLORABLE_APRS_STATION] = GCONF_KEY_PREFIX"/color_aprs_station";
+#endif // INCLUDE_APRS
+    
     if(!gconf_client)
     {
         popup_error(_window, _("Failed to initialize GConf.  Quitting."));
@@ -2149,7 +2431,7 @@ settings_init()
         gint i = 0;
         if(degformat_key_str)
             for(i = DEG_FORMAT_ENUM_COUNT - 1; i > 0; i--)
-                if(!strcmp(degformat_key_str, DEG_FORMAT_ENUM_TEXT[i]))
+                if(!strcmp(degformat_key_str, DEG_FORMAT_ENUM_TEXT[i].name))
                     break;
         _degformat = i;
     }
@@ -2190,6 +2472,10 @@ settings_init()
         _unblank_option = i;
     }
 
+#ifdef INCLUDE_APRS
+    load_aprs_options(gconf_client);
+#endif // INCLUDE_APRS
+    
     /* Get Info Font Size.  Default is INFO_FONT_MEDIUM. */
     {
         gchar *info_font_size_str = gconf_client_get_string(gconf_client,
@@ -2551,3 +2837,598 @@ settings_init()
     vprintf("%s(): return\n", __PRETTY_FUNCTION__);
 }
 
+
+#ifdef INCLUDE_APRS
+////// APRS Settings start
+
+void read_aprs_options(TAprsSettings *aprsSettings )
+{
+       // Basic options
+    _aprs_mycall = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->txt_aprs_mycall)));
+    
+     
+    _aprs_enable = gtk_toggle_button_get_active(
+                       GTK_TOGGLE_BUTTON(aprsSettings->chk_aprs_enabled ));
+
+    _aprs_show_new_station_alert = gtk_toggle_button_get_active(
+                       GTK_TOGGLE_BUTTON(aprsSettings->chk_aprs_show_new_station_alert ));
+
+    
+    gchar * s_max_stations = g_strdup(gtk_entry_get_text(
+            GTK_ENTRY(aprsSettings->txt_aprs_max_stations)));
+    gint64 i64_max_stations = g_ascii_strtoll (s_max_stations, NULL, 10);
+    _aprs_max_stations = (gint)i64_max_stations;
+        
+
+    // Inet options
+    _aprs_server = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->txt_aprs_server)));
+
+    
+    _aprs_tty_port = g_strdup(gtk_entry_get_text(
+            GTK_ENTRY(aprsSettings->txt_aprs_tty_port)));
+    
+    _aprs_inet_server_validation = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->txt_aprs_inet_server_validation)));
+
+    gchar * s_port = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->num_aprs_server_port)));
+    gint64 i64_port = g_ascii_strtoll (s_port, NULL, 10);
+    _aprs_server_port = (gint)i64_port;
+
+    
+    gchar * s_beacon_interval = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_interval )));
+    gint64 i64_beacon_interval = g_ascii_strtoll (s_beacon_interval, NULL, 10);
+    g_free(s_beacon_interval);
+    _aprs_inet_beacon_interval = (gint)i64_beacon_interval;
+
+    s_beacon_interval = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->txt_tty_beacon_interval )));
+    i64_beacon_interval = g_ascii_strtoll (s_beacon_interval, NULL, 10);
+    g_free(s_beacon_interval);
+    _aprs_tty_beacon_interval = (gint)i64_beacon_interval;
+    
+    
+    _aprs_inet_beacon_comment = g_strdup(gtk_entry_get_text(
+        GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_comment )));
+    
+   _aprs_tnc_bt_mac =  g_strdup(gtk_entry_get_text(
+               GTK_ENTRY(aprsSettings->txt_tnc_bt_mac )));
+    
+   _aprs_tnc_method = TNC_CONNECTION_BT;
+   if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_file) ))
+   {
+          _aprs_tnc_method = TNC_CONNECTION_FILE;
+   }
+
+
+   _aprs_server_auto_filter_on = gtk_toggle_button_get_active(
+           GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_inet_auto_filter ));
+   
+   gchar * s_server_auto_filter_km = g_strdup(gtk_entry_get_text(
+       GTK_ENTRY(aprsSettings->txt_auto_filter_range )));
+   gint64 i64_server_auto_filter_km = g_ascii_strtoll (s_server_auto_filter_km, NULL, 10);
+   _aprs_server_auto_filter_km = (gint)i64_server_auto_filter_km;
+
+
+   _aprs_enable_inet_tx = gtk_toggle_button_get_active(
+           GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_inet_tx ));
+
+   _aprs_enable_tty_tx = gtk_toggle_button_get_active(
+           GTK_TOGGLE_BUTTON(aprsSettings->chk_enable_tty_tx ));
+   
+   _aprs_beacon_comment = g_strdup(gtk_entry_get_text(
+           GTK_ENTRY(aprsSettings->txt_beacon_comment )));
+   
+   _aprs_beacon_comment = g_strdup(gtk_entry_get_text(
+              GTK_ENTRY(aprsSettings->txt_beacon_comment )));
+   
+
+   _aprs_unproto_path = g_strdup(gtk_entry_get_text(
+                  GTK_ENTRY(aprsSettings->txt_unproto_path )));
+   
+   gchar *tmp;
+   tmp = g_strdup(gtk_entry_get_text(
+                  GTK_ENTRY(aprsSettings->txt_beacon_group )));
+   if(strlen(tmp)>0) _aprs_beacon_group = tmp[0]; 
+
+   tmp = g_strdup(gtk_entry_get_text(
+                  GTK_ENTRY(aprsSettings->txt_beacon_symbol )));
+   if(strlen(tmp)>0) _aprs_beacon_symbol = tmp[0]; 
+   
+   _aprs_transmit_compressed_posit  = FALSE; // Not currently supported
+   
+}
+
+void save_aprs_options()
+{
+       GConfClient *gconf_client = gconf_client_get_default();
+    if(!gconf_client)
+    {
+        popup_error(_window,
+                _("Failed to initialize GConf.  Settings were not saved."));
+        return;
+    }
+
+    
+    /* APRS */
+    if(_aprs_server)
+        gconf_client_set_string(gconf_client,
+                GCONF_KEY_APRS_SERVER, _aprs_server, NULL);
+
+    if(_aprs_server_port)
+        gconf_client_set_int(gconf_client,
+                GCONF_KEY_APRS_SERVER_PORT, _aprs_server_port, NULL);
+
+    if(_aprs_inet_server_validation)
+        gconf_client_set_string(gconf_client,
+                GCONF_KEY_APRS_SERVER_VAL, _aprs_inet_server_validation, NULL);
+
+    if(_aprs_mycall)
+        gconf_client_set_string(gconf_client,
+                GCONF_KEY_APRS_MYCALL, _aprs_mycall, NULL);
+
+    if(_aprs_tty_port)
+        gconf_client_set_string(gconf_client,
+                GCONF_KEY_APRS_TTY_PORT, _aprs_tty_port, NULL);
+
+    
+    
+    
+    if(_aprs_inet_beacon_comment)
+        gconf_client_set_string(gconf_client,
+                       GCONF_KEY_APRS_INET_BEACON, _aprs_inet_beacon_comment, NULL);
+
+    gconf_client_set_int(gconf_client,
+               GCONF_KEY_APRS_INET_BEACON_INTERVAL, _aprs_inet_beacon_interval, NULL);
+               
+    gconf_client_set_int(gconf_client,
+               GCONF_KEY_APRS_MAX_TRACK_PTS, _aprs_std_pos_hist, NULL);
+    
+    gconf_client_set_int(gconf_client,
+               GCONF_KEY_APRS_MAX_STATIONS, _aprs_max_stations, NULL);
+    
+    gconf_client_set_bool(gconf_client,
+               GCONF_KEY_APRS_ENABLE, _aprs_enable, NULL);
+    
+
+    gconf_client_set_bool(gconf_client,
+               GCONF_KEY_APRS_SHOW_NEW_STATION_ALERT, _aprs_show_new_station_alert, NULL);
+   
+    if(_aprs_tnc_bt_mac)
+        gconf_client_set_string(gconf_client,
+                       GCONF_KEY_APRS_TNC_BT_MAC, _aprs_tnc_bt_mac, NULL);
+  
+    gconf_client_set_int(gconf_client,
+               GCONF_KEY_APRS_TNC_CONN_METHOD, _aprs_tnc_method, NULL);
+
+    gconf_client_set_int(gconf_client,
+               GCONF_KEY_APRS_INET_AUTO_FILTER_RANGE, _aprs_server_auto_filter_km, NULL);
+
+    gconf_client_set_bool(gconf_client,
+               GCONF_KEY_APRS_INET_AUTO_FILTER, _aprs_server_auto_filter_on, NULL);
+
+    gconf_client_set_bool(gconf_client,
+               GCONF_KEY_APRS_ENABLE_INET_TX, _aprs_enable_inet_tx, NULL);
+       gconf_client_set_bool(gconf_client,
+                       GCONF_KEY_APRS_ENABLE_TTY_TX, _aprs_enable_tty_tx, NULL);
+       
+    if(_aprs_beacon_comment)
+        gconf_client_set_string(gconf_client,
+                       GCONF_KEY_APRS_BEACON_COMMENT, _aprs_beacon_comment, NULL);
+
+    gconf_client_set_int(gconf_client,
+               GCONF_KEY_APRS_TTY_BEACON_INTERVAL, _aprs_tty_beacon_interval, NULL);
+    
+    gconf_client_set_bool(gconf_client,
+               GCONF_KEY_APRS_BEACON_COMPRESSED, _aprs_transmit_compressed_posit, NULL);
+
+    if(_aprs_unproto_path)
+        gconf_client_set_string(gconf_client,
+                       GCONF_KEY_APRS_BEACON_PATH, _aprs_unproto_path, NULL);
+
+    //if(_aprs_beacon_group)
+    {
+       gchar tmp[5];
+       snprintf(tmp, 5, "%c", _aprs_beacon_group);
+       
+        gconf_client_set_string(gconf_client,
+                       GCONF_KEY_APRS_BEACON_SYM_GROUP, tmp, NULL);
+            
+        //if(strlen(tmp)> 1) _aprs_beacon_group = tmp[0]; 
+    }
+    
+    //if(_aprs_beacon_symbol)
+    {
+       gchar tmp[5];
+       snprintf(tmp, 5, "%c", _aprs_beacon_symbol);
+       
+       gconf_client_set_string(gconf_client,
+                                       GCONF_KEY_APRS_BEACON_SYMBOL, tmp, NULL);
+       
+       //if(strlen(tmp)> 1) _aprs_beacon_symbol = tmp[0];
+    }
+                
+}
+
+
+
+
+
+void setup_aprs_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+//    GtkWidget *hbox;
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+        table = gtk_table_new(3/*rows*/, 4/*columns*/, FALSE /*Auto re-size*/),
+        label = gtk_label_new(_("Station")));
+
+    /* Callsign. */
+    // Label
+    add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Callsign");
+    add_edit_box (table, 1, 2, 0, 1, -1, &(aprsSettings->txt_aprs_mycall), ALIGN_TOP_LEFT, _aprs_mycall);
+
+
+    add_check_box(table, 2, 4, 0, 1, -1, &(aprsSettings->chk_compressed_beacon), ALIGN_TOP_LEFT, 
+               "Compress Beacons", _aprs_transmit_compressed_posit);
+    // Not yet supported
+    gtk_widget_set_sensitive (GTK_WIDGET (aprsSettings->chk_compressed_beacon), FALSE);
+    
+    
+    
+    add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Beacon Path");
+    add_edit_box (table, 1, 2, 1, 2, -1, &(aprsSettings->txt_unproto_path), ALIGN_TOP_LEFT, _aprs_unproto_path);
+
+
+    add_check_box(table, 2, 4, 1, 2, -1, &(aprsSettings->chk_aprs_show_new_station_alert), ALIGN_TOP_LEFT, 
+       "Show New Station Alerts", _aprs_show_new_station_alert);
+
+    
+    add_label_box(table, 0, 1, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Symbol Group");
+    gchar initialValue[2];
+    snprintf(initialValue, 2, "%c", _aprs_beacon_group);
+    add_edit_box (table, 1, 2, 2, 3, -1, &(aprsSettings->txt_beacon_group), ALIGN_TOP_LEFT, initialValue);
+    
+    add_label_box(table, 2, 3, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Symbol");
+    
+    snprintf(initialValue, 2, "%c", _aprs_beacon_symbol);
+    add_edit_box (table, 3, 4, 2, 3, -1, &(aprsSettings->txt_beacon_symbol), ALIGN_TOP_LEFT, initialValue);
+   
+}
+
+
+
+void setup_aprs_tty_page_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+    GtkWidget *hbox;
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+        table = gtk_table_new(3/*rows*/, 2/*columns*/, FALSE /*Auto re-size*/),
+        label = gtk_label_new(_("TNC 1")));
+
+    
+       // Receiver MAC Address. 
+    gtk_table_attach(GTK_TABLE(table),
+               aprsSettings->rad_tnc_bt = gtk_radio_button_new_with_label(
+                NULL, _("Bluetooth")),
+            0, 1, 0, 1, GTK_FILL, 0, 2, 4);
+//    gtk_misc_set_alignment(/*GTK_MISC*/(aprsSettings->rad_tnc_bt), 1.f, 0.5f);
+    gtk_table_attach(GTK_TABLE(table),
+            hbox = gtk_hbox_new(FALSE, 4),
+            1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+  
+    gtk_box_pack_start(GTK_BOX(hbox),
+               aprsSettings->txt_tnc_bt_mac = gtk_entry_new(),
+            TRUE, TRUE, 0);
+#ifdef MAEMO_CHANGES
+#ifndef LEGACY
+    g_object_set(G_OBJECT(aprsSettings->txt_tnc_bt_mac), "hildon-input-mode",
+            HILDON_GTK_INPUT_MODE_FULL, NULL);
+#else
+    g_object_set(G_OBJECT(txt_gps_bt_mac), HILDON_AUTOCAP, FALSE, NULL);
+#endif
+#endif
+    gtk_box_pack_start(GTK_BOX(hbox),
+               aprsSettings->btn_scan_bt_tnc = gtk_button_new_with_label(_("Scan...")),
+            FALSE, FALSE, 0);
+        
+#ifndef HAVE_LIBGPSBT
+gtk_widget_set_sensitive(aprsSettings->rad_tnc_bt, FALSE);
+gtk_widget_set_sensitive(aprsSettings->txt_tnc_bt_mac, FALSE);
+gtk_widget_set_sensitive(aprsSettings->btn_scan_bt_tnc, FALSE);
+#endif
+
+    // File Path (RFComm). 
+       gtk_table_attach(GTK_TABLE(table),
+               aprsSettings->rad_tnc_file = gtk_radio_button_new_with_label_from_widget(
+                GTK_RADIO_BUTTON(aprsSettings->rad_tnc_bt), _("File Path")),
+            0, 1, 1, 2, GTK_FILL, 0, 2, 4);
+//    gtk_misc_set_alignment(/*GTK_MISC*/(aprsSettings->rad_tnc_file), 1.f, 0.5f);
+    gtk_table_attach(GTK_TABLE(table),
+            hbox = gtk_hbox_new(FALSE, 4),
+            1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+    gtk_box_pack_start(GTK_BOX(hbox),
+               aprsSettings->txt_aprs_tty_port = gtk_entry_new(),
+            TRUE, TRUE, 0);
+#ifdef MAEMO_CHANGES
+#ifndef LEGACY
+    g_object_set(G_OBJECT(aprsSettings->txt_aprs_tty_port), "hildon-input-mode",
+            HILDON_GTK_INPUT_MODE_FULL, NULL);
+#else
+    g_object_set(G_OBJECT(txt_gps_file_path), HILDON_AUTOCAP, FALSE, NULL);
+#endif
+#endif
+
+    
+
+       add_check_box(table, 0, 1, 2, 3, -1, &(aprsSettings->chk_enable_tty_tx), ALIGN_TOP_LEFT, 
+               "Enable TX", _aprs_enable_tty_tx);
+
+       gtk_table_attach(GTK_TABLE(table),
+           label = gtk_label_new(_("Only KISS TNC's are supported (9600 8N1)")),
+               1, 2, 2, 3, GTK_FILL, 0, 2, 4);
+       gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+
+       
+       
+       
+       // Init
+
+    if(aprsSettings->txt_aprs_tty_port)
+        gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_tty_port), _aprs_tty_port);
+    
+    if(aprsSettings->txt_tnc_bt_mac)
+            gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_tnc_bt_mac), _aprs_tnc_bt_mac);
+    
+  
+    if(_aprs_tnc_method == TNC_CONNECTION_BT)
+       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_bt), TRUE);
+    else if(_aprs_tnc_method == TNC_CONNECTION_FILE)
+       gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(aprsSettings->rad_tnc_file), TRUE);
+
+   
+}
+
+void setup_aprs_tty2_page_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+        table = gtk_table_new(2/*rows*/, 1/*columns*/, FALSE /*Auto re-size*/),
+        label = gtk_label_new(_("TNC 2")));
+
+    add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Beacon Interval");
+    
+    gchar s_interval[8]; s_interval[0] = 0;
+    if(_aprs_tty_beacon_interval>0) snprintf(s_interval, 8, "%u", _aprs_tty_beacon_interval );
+    add_edit_box (table, 1, 3, 0, 1, -1, &(aprsSettings->txt_tty_beacon_interval), ALIGN_TOP_LEFT, 
+               s_interval);
+    add_label_box(table, 3, 4, 0, 1, -1, &label, ALIGN_TOP_LEFT, "seconds");
+    
+    add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Beacon Text");
+    add_edit_box (table, 1, 4, 1, 2, -1, &(aprsSettings->txt_beacon_comment), ALIGN_TOP_LEFT, _aprs_beacon_comment);
+
+}
+
+
+void setup_aprs_general_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+        table = gtk_table_new(2/*rows*/, 1/*columns*/, FALSE /*Auto re-size*/),
+        label = gtk_label_new(_("APRS")));
+    
+    // Notice
+    add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, 
+       "APRS (Automatic/Amateur Position Reporting System) is \na system used by Radio Amateurs to communicate position, \nweather, and short messages.");
+
+    // Enabled    
+    add_check_box(table, 0, 1, 1, 2, -1, &(aprsSettings->chk_aprs_enabled), ALIGN_TOP_LEFT, 
+       "Enable APRS functionality", _aprs_enable);
+}
+
+void setup_aprs_inet_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+        table = gtk_table_new(3/*rows*/, 5/*columns*/, FALSE /*Auto re-size*/),
+        label = gtk_label_new(_("Internet")));
+
+
+    /*iNet server*/
+    add_label_box(table, 0, 1, 0, 1, -1, &label, ALIGN_TOP_LEFT, "Server");
+    add_edit_box (table, 1, 3, 0, 1, -1, &(aprsSettings->txt_aprs_server), ALIGN_TOP_LEFT, _aprs_server);
+
+    /*iNet server port*/
+    add_label_box(table, 3, 4, 0, 1, -1, &label, ALIGN_TOP_RIGHT, "Port");
+    add_edit_box (table, 4, 5, 0, 1, 0.5, &(aprsSettings->num_aprs_server_port), ALIGN_TOP_LEFT, 
+               g_strdup_printf("%u", _aprs_server_port));
+    
+
+    /* Validation */
+    add_label_box(table, 0, 1, 1, 2, -1, &label, ALIGN_TOP_LEFT, "Server Validation");
+    add_edit_box (table, 1, 3, 1, 2, 0.5, &(aprsSettings->txt_aprs_inet_server_validation), ALIGN_TOP_LEFT, _aprs_inet_server_validation);
+    add_check_box(table, 3, 5, 1, 2, -1, &(aprsSettings->chk_enable_inet_tx), ALIGN_TOP_LEFT, 
+       "Enable TX", _aprs_enable_inet_tx);
+
+    /*iNet server filter*/
+    add_label_box(table, 0, 1, 2, 3, -1, &label, ALIGN_TOP_LEFT, "Filter data");
+    add_check_box(table, 1, 2, 2, 3, -1, &(aprsSettings->chk_enable_inet_auto_filter), ALIGN_TOP_LEFT, "Enable", 
+               _aprs_server_auto_filter_on);
+    add_label_box(table, 2, 3, 2, 3, -1, &label, ALIGN_TOP_RIGHT, "Range");
+    add_edit_box (table, 3, 4, 2, 3, 0.75, &(aprsSettings->txt_auto_filter_range), ALIGN_TOP_LEFT, 
+               g_strdup_printf("%u", _aprs_server_auto_filter_km));
+    add_label_box(table, 4, 5, 2, 3, -1, &label, ALIGN_TOP_LEFT, "km");
+
+}
+
+
+
+void setup_aprs_inet2_options_page(GtkWidget *notebook, TAprsSettings *aprsSettings)
+{
+    GtkWidget *table;
+    GtkWidget *label;
+    GtkWidget *hbox;
+
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+        table = gtk_table_new(2/*rows*/, 3/*columns*/, FALSE /*Auto re-size*/),
+        label = gtk_label_new(_("Internet 2")));
+
+
+    /* iNet Beacon interval */
+    // Label
+    gtk_table_attach(GTK_TABLE(table),
+        label = gtk_label_new(_("Beacon interval")),
+            0, 1, 0, 1, GTK_FILL, 0, 2, 4);
+    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+
+    // Edit box
+    gtk_table_attach(GTK_TABLE(table),
+        hbox = gtk_hbox_new(FALSE, 4),
+            1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+    gtk_box_pack_start(GTK_BOX(hbox),
+        aprsSettings->txt_aprs_inet_beacon_interval = gtk_entry_new(),
+        TRUE, TRUE, 0);
+
+#ifndef LEGACY
+    g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_interval), "hildon-input-mode",
+        HILDON_GTK_INPUT_MODE_FULL, NULL);
+#else
+    g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_interval), HILDON_AUTOCAP, FALSE, NULL);
+#endif
+
+    gtk_table_attach(GTK_TABLE(table),
+        label = gtk_label_new(_("seconds")),
+            2, 3, 0, 1, GTK_FILL, 0, 2, 4);
+    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+
+    /* Beacon comment */
+    // Label
+    gtk_table_attach(GTK_TABLE(table),
+        label = gtk_label_new(_("Beacon Comment")),
+            0, 1, 1, 2, GTK_FILL, 0, 2, 4);
+    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+
+    // Edit box
+    gtk_table_attach(GTK_TABLE(table),
+        hbox = gtk_hbox_new(FALSE, 4),
+            1, 3, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+    gtk_box_pack_start(GTK_BOX(hbox),
+        aprsSettings->txt_aprs_inet_beacon_comment = gtk_entry_new(),
+        TRUE, TRUE, 0);
+
+#ifndef LEGACY
+    g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_comment), "hildon-input-mode",
+        HILDON_GTK_INPUT_MODE_FULL, NULL);
+#else
+    g_object_set(G_OBJECT(aprsSettings->txt_aprs_inet_beacon_comment), HILDON_AUTOCAP, FALSE, NULL);
+#endif
+    
+    // Init values
+    if(_aprs_inet_beacon_interval)
+    {
+        gchar interval[8];
+        snprintf(interval, 8, "%d", _aprs_inet_beacon_interval);
+
+       gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_interval), interval);
+    }
+        
+    if(_aprs_inet_beacon_comment)
+        gtk_entry_set_text(GTK_ENTRY(aprsSettings->txt_aprs_inet_beacon_comment), _aprs_inet_beacon_comment);
+
+}
+
+void aprs_settings_dialog(gboolean *aprs_inet_config_changed, gboolean *aprs_tty_config_changed)
+{
+    static GtkWidget *dialog = NULL;
+    static GtkWidget *notebook = NULL;
+    static TAprsSettings aprs_settings;
+    static ScanInfo scan_info = {0};
+    
+    printf("%s()\n", __PRETTY_FUNCTION__);
+
+    
+    *aprs_inet_config_changed = FALSE;
+    *aprs_tty_config_changed = FALSE;
+    
+    if(dialog == NULL)
+    {
+        dialog = gtk_dialog_new_with_buttons(_("APRS Settings"),
+                GTK_WINDOW(_window), GTK_DIALOG_MODAL,
+                GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                NULL);
+
+        /* Enable the help button. */
+#ifndef LEGACY
+        hildon_help_dialog_help_enable(
+#else
+        ossohelp_dialog_help_enable(
+#endif 
+                GTK_DIALOG(dialog), HELP_ID_SETTINGS, _osso);
+
+        gtk_dialog_add_button(GTK_DIALOG(dialog),
+                GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
+
+        gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
+                notebook = gtk_notebook_new(), TRUE, TRUE, 0);
+
+
+        
+        // Add enable, and info page
+        setup_aprs_general_options_page(notebook, &aprs_settings);
+        
+        // Add station details page
+        setup_aprs_options_page(notebook, &aprs_settings);
+        
+        // Add iNet page
+        setup_aprs_inet_options_page(notebook, &aprs_settings);
+        setup_aprs_inet2_options_page(notebook, &aprs_settings);
+        
+        // Add TTY page
+        setup_aprs_tty_page_options_page(notebook, &aprs_settings);
+        setup_aprs_tty2_page_options_page(notebook, &aprs_settings);
+        
+
+
+        /* Connect signals. */
+        memset(&scan_info, 0, sizeof(scan_info));
+        scan_info.settings_dialog = dialog;
+        scan_info.txt_gps_bt_mac = aprs_settings.txt_tnc_bt_mac;
+        g_signal_connect(G_OBJECT(aprs_settings.btn_scan_bt_tnc), "clicked",
+                         G_CALLBACK(scan_bluetooth), &scan_info);
+
+    }
+  
+    gtk_widget_show_all(dialog);
+
+    if(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
+    {
+       // TODO - check if settings have really changed 
+        *aprs_inet_config_changed = TRUE;
+        *aprs_tty_config_changed = TRUE;
+        
+        
+       read_aprs_options(&aprs_settings );
+
+        save_aprs_options();
+
+    }
+
+    gtk_widget_hide(dialog);
+
+    vprintf("%s(): return %d\n", __PRETTY_FUNCTION__, rcvr_changed);
+
+}
+#endif // INCLUDE_APRS
+