/** \brief Create and initialise widgets for the single pass cfg tab.
 *
 * The widgets must be preloaded with values from config. If a config value
 * is NULL, sensible default values, eg. those from defaults.h should
 * be laoded.
 */
GtkWidget *sat_pref_single_pass_create ()
{
     GtkWidget *table;
     GtkWidget *label;
     GtkWidget *vbox;
     guint      i;


     /* create the table */
     table = gtk_table_new ((SINGLE_PASS_COL_NUMBER+1)/COLUMNS + 1, COLUMNS, TRUE);
     gtk_container_set_border_width (GTK_CONTAINER (table), 20);
     gtk_table_set_row_spacings (GTK_TABLE (table), 10);
     gtk_table_set_col_spacings (GTK_TABLE (table), 5);

     /* create header */
     label = gtk_label_new (NULL);
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_label_set_markup (GTK_LABEL (label), 
                     _("<b>Visible Columns:</b>"));

     gtk_table_attach (GTK_TABLE (table), label, 0, 2, 0, 1,
                 GTK_FILL,  GTK_SHRINK, 0, 0);

     /* get visible column flags */
     flags = sat_cfg_get_int (SAT_CFG_INT_PRED_SINGLE_COL);

     for (i = 0; i < SINGLE_PASS_COL_NUMBER; i++) {

          check[i] = gtk_check_button_new_with_label (SINGLE_PASS_COL_HINT[i]);

          gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check[i]),
                               flags & (1 << i));

          gtk_table_attach (GTK_TABLE (table), check[i],
                      i % COLUMNS, (i % COLUMNS) + 1,
                      Y0 + i / COLUMNS, Y0 + i / COLUMNS + 1,
                      GTK_FILL,  GTK_SHRINK, 0, 0);

          g_signal_connect (check[i], "toggled",
                      G_CALLBACK (toggle_cb),
                      GUINT_TO_POINTER (i));

     }

     /* create vertical box */
     vbox = gtk_vbox_new (FALSE, 0);
     gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);
     gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);

     /* create RESET button */
     create_reset_button (GTK_BOX (vbox));


     startflags = flags;
     dirty = FALSE;
     reset = FALSE;

     return vbox;
}
/** \brief Create and initialise widgets for the layout view preferences tab.
 *
 * The widgets must be preloaded with values from config. If a config value
 * is NULL, sensible default values, eg. those from defaults.h should
 * be laoded.
 */
GtkWidget *sat_pref_layout_create (GKeyFile *cfg)
{
    GtkWidget *table;
    GtkWidget *vbox;



    /* create the table */
    table = gtk_table_new (8, 5, FALSE);
    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
    gtk_table_set_col_spacings (GTK_TABLE (table), 5);

    /* layout selector */
    create_layout_selector (cfg, GTK_TABLE (table));

    /* separator */
    gtk_table_attach (GTK_TABLE (table),
                      gtk_hseparator_new (),
                      0, 5, 3, 4,
                      GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);


    /* create vertical box */
    vbox = gtk_vbox_new (FALSE, 5);
    gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);
    gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, TRUE, 0);

    /* window placement */
    if (cfg == NULL) {
        create_window_placement (GTK_BOX (vbox));
    }

    /* create RESET button */
    create_reset_button (cfg, GTK_BOX (vbox));

    /* reset flags */
    dirty = FALSE;
    reset = FALSE;

    return vbox;;
}
Esempio n. 3
0
/** \brief Create and initialise widgets for the refresh rates tab.
 *
 * The widgets must be preloaded with values from config. If a config value
 * is NULL, sensible default values, eg. those from defaults.h should
 * be laoded.
 */
GtkWidget *sat_pref_refresh_create (GKeyFile *cfg)
{
     GtkWidget *table;
     GtkWidget *vbox;
     GtkWidget *label;
     gint       val;

     dirty = FALSE;
     reset = FALSE;

     /* create table */
     table = gtk_table_new (6, 3, FALSE);
     gtk_table_set_row_spacings (GTK_TABLE (table), 10);
     gtk_table_set_col_spacings (GTK_TABLE (table), 5);

     /* data refresh */
     label = gtk_label_new (_("Refresh data every"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     dataspin = gtk_spin_button_new_with_range (100, 10000, 1);
     gtk_spin_button_set_increments (GTK_SPIN_BUTTON (dataspin), 1, 100);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (dataspin), TRUE);
     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (dataspin),
                            GTK_UPDATE_IF_VALID);
     if (cfg != NULL) {
          val = mod_cfg_get_int (cfg,
                           MOD_CFG_GLOBAL_SECTION,
                           MOD_CFG_TIMEOUT_KEY,
                           SAT_CFG_INT_MODULE_TIMEOUT);
     }
     else {
          val = sat_cfg_get_int (SAT_CFG_INT_MODULE_TIMEOUT);
     }
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (dataspin), val);
     g_signal_connect (G_OBJECT (dataspin), "value-changed",
                 G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), dataspin, 1, 2, 0, 1,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     label = gtk_label_new (_("[msec]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1,
                 GTK_FILL | GTK_EXPAND,
                 GTK_SHRINK,
                 0, 0);

     /* separator */
     gtk_table_attach (GTK_TABLE (table),
                 gtk_hseparator_new (),
                 0, 3, 1, 2,
                 GTK_FILL | GTK_EXPAND,
                 GTK_SHRINK,
                 0, 0);


     /* List View */
     label = gtk_label_new (_("Refresh list view every"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     listspin = gtk_spin_button_new_with_range (1, 50, 1);
     gtk_spin_button_set_increments (GTK_SPIN_BUTTON (listspin), 1, 5);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (listspin), TRUE);
     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (listspin),
                            GTK_UPDATE_IF_VALID);
     if (cfg != NULL) {
          val = mod_cfg_get_int (cfg,
                           MOD_CFG_LIST_SECTION,
                           MOD_CFG_LIST_REFRESH,
                           SAT_CFG_INT_LIST_REFRESH);
     }
     else {
          val = sat_cfg_get_int (SAT_CFG_INT_LIST_REFRESH);
     }
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (listspin), val);
     g_signal_connect (G_OBJECT (listspin), "value-changed",
                 G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), listspin, 1, 2, 2, 3,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     label = gtk_label_new (_("[cycle]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 2, 3, 2, 3,
                 GTK_FILL | GTK_EXPAND,
                 GTK_SHRINK,
                 0, 0);


     /* Map View */
     label = gtk_label_new (_("Refresh map view every"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     mapspin = gtk_spin_button_new_with_range (1, 50, 1);
     gtk_spin_button_set_increments (GTK_SPIN_BUTTON (mapspin), 1, 5);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (mapspin), TRUE);
     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (mapspin),
                            GTK_UPDATE_IF_VALID);
     if (cfg != NULL) {
          val = mod_cfg_get_int (cfg,
                           MOD_CFG_MAP_SECTION,
                           MOD_CFG_MAP_REFRESH,
                           SAT_CFG_INT_MAP_REFRESH);
     }
     else {
          val = sat_cfg_get_int (SAT_CFG_INT_MAP_REFRESH);
     }
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (mapspin), val);
     g_signal_connect (G_OBJECT (mapspin), "value-changed",
                 G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), mapspin, 1, 2, 3, 4,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     label = gtk_label_new (_("[cycle]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 2, 3, 3, 4,
                 GTK_FILL | GTK_EXPAND,
                 GTK_SHRINK,
                 0, 0);


     /* Polar View */
     label = gtk_label_new (_("Refresh polar view every"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     polarspin = gtk_spin_button_new_with_range (1, 50, 1);
     gtk_spin_button_set_increments (GTK_SPIN_BUTTON (polarspin), 1, 5);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (polarspin), TRUE);
     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (polarspin),
                            GTK_UPDATE_IF_VALID);
     if (cfg != NULL) {
          val = mod_cfg_get_int (cfg,
                           MOD_CFG_POLAR_SECTION,
                           MOD_CFG_POLAR_REFRESH,
                           SAT_CFG_INT_POLAR_REFRESH);
     }
     else {
          val = sat_cfg_get_int (SAT_CFG_INT_POLAR_REFRESH);
     }
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (polarspin), val);
     g_signal_connect (G_OBJECT (polarspin), "value-changed",
                 G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), polarspin, 1, 2, 4, 5,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     label = gtk_label_new (_("[cycle]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 2, 3, 4, 5,
                 GTK_FILL | GTK_EXPAND,
                 GTK_SHRINK,
                 0, 0);


     /* Single-Sat View */
     label = gtk_label_new (_("Refresh single-sat view every"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     singlespin = gtk_spin_button_new_with_range (1, 50, 1);
     gtk_spin_button_set_increments (GTK_SPIN_BUTTON (singlespin), 1, 5);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (singlespin), TRUE);
     gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (singlespin),
                            GTK_UPDATE_IF_VALID);
     if (cfg != NULL) {
          val = mod_cfg_get_int (cfg,
                           MOD_CFG_SINGLE_SAT_SECTION,
                           MOD_CFG_SINGLE_SAT_REFRESH,
                           SAT_CFG_INT_SINGLE_SAT_REFRESH);
     }
     else {
          val = sat_cfg_get_int (SAT_CFG_INT_SINGLE_SAT_REFRESH);
     }
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (singlespin), val);
     g_signal_connect (G_OBJECT (singlespin), "value-changed",
                 G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), singlespin, 1, 2, 5, 6,
                 GTK_FILL,
                 GTK_SHRINK,
                 0, 0);

     label = gtk_label_new (_("[cycle]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label, 2, 3, 5, 6,
                 GTK_FILL | GTK_EXPAND,
                 GTK_SHRINK,
                 0, 0);


     /* create vertical box */
     vbox = gtk_vbox_new (FALSE, 0);
     gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);
     gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);

     /* create RESET button */
     create_reset_button (cfg, GTK_BOX (vbox));
     

        return vbox;
}
Esempio n. 4
0
/** \brief Create and initialise widgets for the radios tab.
 *
 * The widgets must be preloaded with values from config. If a config value
 * is NULL, sensible default values, eg. those from defaults.h should
 * be laoded.
 */
GtkWidget *sat_pref_conditions_create ()
{
     GtkWidget   *table;
     GtkWidget   *label;
     GtkWidget   *vbox;


     dirty = FALSE;
     reset = FALSE;

     table = gtk_table_new (14, 3, FALSE);
     gtk_table_set_row_spacings (GTK_TABLE (table), 10);
     gtk_table_set_col_spacings (GTK_TABLE (table), 5);

     /* minimum elevation */
     label = gtk_label_new (_("Minimum elevation"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 0, 1,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     minel = gtk_spin_button_new_with_range (1, 90, 1);
     gtk_widget_set_tooltip_text (minel,
                                _("Elevation threshold for passes.\n"\
                                   "Passes with maximum elevation below this limit "\
                                  "will be omitted"));
     gtk_spin_button_set_digits (GTK_SPIN_BUTTON (minel), 0);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (minel), TRUE);
     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (minel), FALSE);
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (minel),
                                      sat_cfg_get_int (SAT_CFG_INT_PRED_MIN_EL));
     g_signal_connect (G_OBJECT (minel), "value-changed",
                           G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), minel,
                           1, 2, 0, 1,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     label = gtk_label_new (_("[deg]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           2, 3, 0, 1,
                           GTK_FILL | GTK_EXPAND,
                           GTK_SHRINK,
                           0, 0);
     
     /* separator */
     gtk_table_attach (GTK_TABLE (table),
                           gtk_hseparator_new (),
                           0, 3, 1, 2,
                           GTK_FILL | GTK_EXPAND,
                           GTK_SHRINK,
                           0, 0);

     label = gtk_label_new (NULL);
     gtk_label_set_markup (GTK_LABEL (label), _("<b>Multiple Passes:</b>"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 2, 3,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);

     /* number of passes */
     label = gtk_label_new (_("Number of passes to predict"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 3, 4,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     numpass = gtk_spin_button_new_with_range (5, 50, 1);
     gtk_widget_set_tooltip_text (numpass,
                                  _("The maximum number of passes to predict."));
     gtk_spin_button_set_digits (GTK_SPIN_BUTTON (numpass), 0);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (numpass), TRUE);
     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (numpass), FALSE);
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (numpass),
                                      sat_cfg_get_int (SAT_CFG_INT_PRED_NUM_PASS));
     g_signal_connect (G_OBJECT (numpass), "value-changed",
                           G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), numpass,
                           1, 2, 3, 4,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);

     /* lookahead */
     label = gtk_label_new (_("Passes should occur within"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 4, 5,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     lookahead = gtk_spin_button_new_with_range (1, 14, 1);
     gtk_widget_set_tooltip_text (lookahead,
                                _("Only passes that occur within the specified "\
                                  "number of days will be shown."));
     gtk_spin_button_set_digits (GTK_SPIN_BUTTON (lookahead), 0);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (lookahead), TRUE);
     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (lookahead), FALSE);
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (lookahead),
                                      sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD));
     g_signal_connect (G_OBJECT (lookahead), "value-changed",
                           G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), lookahead,
                           1, 2, 4, 5,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     label = gtk_label_new (_("[days]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           2, 3, 4, 5,
                           GTK_FILL | GTK_EXPAND,
                           GTK_SHRINK,
                           0, 0);
     
     /* separator */
     gtk_table_attach (GTK_TABLE (table),
                           gtk_hseparator_new (),
                           0, 3, 5, 6,
                           GTK_FILL | GTK_EXPAND,
                           GTK_SHRINK,
                           0, 0);


     label = gtk_label_new (NULL);
     gtk_label_set_markup (GTK_LABEL (label), _("<b>Pass Details:</b>"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 6, 7,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);

     /* time resolution */
     label = gtk_label_new (_("Time resolution"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 7, 8,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     res = gtk_spin_button_new_with_range (1, 600, 1);
     gtk_widget_set_tooltip_text (res,
                                _("Gpredict will try to show the pass details "\
                                  "with the specified time resolution."));
     gtk_spin_button_set_digits (GTK_SPIN_BUTTON (res), 0);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (res), TRUE);
     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (res), FALSE);
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (res),
                                      sat_cfg_get_int (SAT_CFG_INT_PRED_RESOLUTION));
     g_signal_connect (G_OBJECT (res), "value-changed",
                           G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), res,
                           1, 2, 7, 8,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     label = gtk_label_new (_("[sec]"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           2, 3, 7, 8,
                           GTK_FILL | GTK_EXPAND,
                           GTK_SHRINK,
                           0, 0);

     /* number of entries */
     label = gtk_label_new (_("Number of entries"));
     gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
     gtk_table_attach (GTK_TABLE (table), label,
                           0, 1, 8, 9,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);
     nument = gtk_spin_button_new_with_range (10, 200, 1);
     gtk_widget_set_tooltip_text (nument,
                                  _("Gpredict will try to keep the number of rows " \
                                    "in the detailed prediction within this limit."));
     gtk_spin_button_set_digits (GTK_SPIN_BUTTON (nument), 0);
     gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nument), TRUE);
     gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (nument), FALSE);
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (nument),
                                      sat_cfg_get_int (SAT_CFG_INT_PRED_NUM_ENTRIES));
     g_signal_connect (G_OBJECT (nument), "value-changed",
                           G_CALLBACK (spin_changed_cb), NULL);
     gtk_table_attach (GTK_TABLE (table), nument,
                           1, 2, 8, 9,
                           GTK_FILL,
                           GTK_SHRINK,
                           0, 0);

    /* separator */
    gtk_table_attach (GTK_TABLE (table),
                      gtk_hseparator_new (),
                      0, 3, 9, 10,
                      GTK_FILL | GTK_EXPAND,
                      GTK_SHRINK,
                      0, 0);

    /* satellite visibility */
    label = gtk_label_new (NULL);
    gtk_label_set_markup (GTK_LABEL (label), _("<b>Satellite Visibility:</b>"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, 10, 11,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);

    /* twilight threshold */
    label = gtk_label_new (_("Twilight threshold"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, 11, 12,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);
    twspin = gtk_spin_button_new_with_range (-18, 0, 1);
    gtk_widget_set_tooltip_text (twspin,
                          _("Satellites are only considered visible if the elevation "\
                            "of the Sun is below the specified threshold.\n"\
                            "  \342\200\242 Astronomical: -18\302\260 to -12\302\260\n"\
                            "  \342\200\242 Nautical: -12\302\260 to -6\302\260\n"\
                            "  \342\200\242 Civil: -6\302\260 to 0\302\260"));
    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (twspin), 0);
    gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (twspin), TRUE);
    gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (twspin), FALSE);
    gtk_spin_button_set_value (GTK_SPIN_BUTTON (twspin),
                               sat_cfg_get_int (SAT_CFG_INT_PRED_TWILIGHT_THLD));
    g_signal_connect (G_OBJECT (twspin), "value-changed",
                      G_CALLBACK (spin_changed_cb), NULL);
    gtk_table_attach (GTK_TABLE (table), twspin,
                      1, 2, 11, 12,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);
    label = gtk_label_new (_("[deg]"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      2, 3, 11, 12,
                      GTK_FILL | GTK_EXPAND,
                      GTK_SHRINK,
                      0, 0);
    
    /* separator */
    gtk_table_attach (GTK_TABLE (table),
                      gtk_hseparator_new (),
                      0, 3, 12, 13,
                      GTK_FILL | GTK_EXPAND,
                      GTK_SHRINK,
                      0, 0);

    /* T0 for predictions */
    tzero = gtk_check_button_new_with_label (_("Always use real time for pass predictions"));
    gtk_widget_set_tooltip_text (tzero,
                                 _("Check this box if you want Gpredict to always use "\
                                   "the current (real) time as starting time when predicting "\
                                   "future satellite passes.\n\n"\
                                   "If you leave the box unchecked and the time controller is "\
                                   "active, Gpredict will use the time from the time controller "\
                                   "as starting time for predicting satellite passes."));
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tzero),
                                  sat_cfg_get_bool (SAT_CFG_BOOL_PRED_USE_REAL_T0));
    g_signal_connect (G_OBJECT (tzero), "toggled",
                      G_CALLBACK (spin_changed_cb), NULL);
     
    gtk_table_attach (GTK_TABLE (table), tzero, 0, 3, 13, 14,
                      GTK_FILL | GTK_EXPAND, GTK_SHRINK,
                      0, 0);
    
     /* create vertical box */
     vbox = gtk_vbox_new (FALSE, 0);
     gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);
     gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);

     /* create RESET button */
     create_reset_button (GTK_BOX (vbox));


     return vbox;
}
/** \brief Create and initialise widgets for the sky-at-glance tab.
 *
 * The widgets must be preloaded with values from config. If a config value
 * is NULL, sensible default values, eg. those from defaults.h should
 * be laoded.
 */
GtkWidget *sat_pref_sky_at_glance_create ()
{
    GtkWidget   *table;
    GtkWidget   *label;
    GtkWidget   *vbox;
    GdkColor     col;
    guint        rgb;   /* 0xRRGGBB encoded colour */
    guint        y;



    dirty = FALSE;
    reset = FALSE;

    table = gtk_table_new (16, 5, FALSE);
    gtk_table_set_row_spacings (GTK_TABLE (table), 5);
    gtk_table_set_col_spacings (GTK_TABLE (table), 5);


    label = gtk_label_new (NULL);
    gtk_label_set_markup (GTK_LABEL (label), _("<b>Time:</b>"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, 0, 1,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);

    /* number of hours */
    label = gtk_label_new (_("Find and show passes that occur within"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, 1, 2,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);
    timesp = gtk_spin_button_new_with_range (1, 24, 1);
    gtk_widget_set_tooltip_text (timesp,
                          _("The passes shown on the Sky at a Glance chart\n"\
                            "will begin within this number of hours."));
    gtk_spin_button_set_digits (GTK_SPIN_BUTTON (timesp), 0);
    gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (timesp), TRUE);
    gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (timesp), FALSE);
    gtk_spin_button_set_value (GTK_SPIN_BUTTON (timesp),
                               sat_cfg_get_int (SAT_CFG_INT_SKYATGL_TIME));
    g_signal_connect (G_OBJECT (timesp), "value-changed",
                      G_CALLBACK (spin_changed_cb), NULL);
    gtk_table_attach (GTK_TABLE (table), timesp,
                      1, 2, 1, 2,
                      GTK_SHRINK, GTK_SHRINK,
                      0, 0);
    label = gtk_label_new (_("hours"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      2, 3, 1, 2,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);
    
    /* separator */
    gtk_table_attach (GTK_TABLE (table),
                      gtk_hseparator_new (),
                      0, 5, 2, 3,
                      GTK_FILL | GTK_EXPAND,
                      GTK_SHRINK,
                      0, 0);



    y = 3;

    label = gtk_label_new (NULL);
    gtk_label_set_markup (GTK_LABEL (label), _("<b>Colours:</b>"));
    gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, y, y+1,
                      GTK_FILL,
                      GTK_SHRINK,
                      0, 0);

    /* colour 1 */
    label = gtk_label_new (_("Colour for satellite 1: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, y+1, y+2,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col1 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col1), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col1), _("Select colour 1"));
    gtk_table_attach (GTK_TABLE (table), col1,
                      1, 2, y+1, y+2,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text ( col1,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_01);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col1), &col);
    g_signal_connect (col1, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 2 */
    label = gtk_label_new (_("Colour for satellite 2: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, y+2, y+3,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col2 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col2), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col1), _("Select colour 2"));
    gtk_table_attach (GTK_TABLE (table), col2,
                      1, 2, y+2, y+3,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text ( col2,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_02);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col2), &col);
    g_signal_connect (col2, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 3 */
    label = gtk_label_new (_("Colour for satellite 3: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, y+3, y+4,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col3 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col3), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col3), _("Select colour 3"));
    gtk_table_attach (GTK_TABLE (table), col3,
                      1, 2, y+3, y+4,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col3,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_03);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col3), &col);
    g_signal_connect (col3, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 4 */
    label = gtk_label_new (_("Colour for satellite 4: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, y+4, y+5,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col4 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col4), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col4), _("Select colour 4"));
    gtk_table_attach (GTK_TABLE (table), col4,
                      1, 2, y+4, y+5,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col4,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_04);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col4), &col);
    g_signal_connect (col4, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 5 */
    label = gtk_label_new (_("Colour for satellite 5: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      0, 1, y+5, y+6,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col5 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col5), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col5), _("Select colour 5"));
    gtk_table_attach (GTK_TABLE (table), col5,
                      1, 2, y+5, y+6,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col5,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_05);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col5), &col);
    g_signal_connect (col5, "color-set", G_CALLBACK (colour_changed), NULL);


    /* colour 6 */
    label = gtk_label_new (_("Colour for satellite 6: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      3, 4, y+1, y+2,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col6 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col6), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col6), _("Select colour 6"));
    gtk_table_attach (GTK_TABLE (table), col6,
                      4, 5, y+1, y+2,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col6,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_06);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col6), &col);
    g_signal_connect (col6, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 7 */
    label = gtk_label_new (_("Colour for satellite 7: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      3, 4, y+2, y+3,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col7 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col7), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col7), _("Select colour 7"));
    gtk_table_attach (GTK_TABLE (table), col7,
                      4, 5, y+2, y+3,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col7,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_07);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col7), &col);
    g_signal_connect (col7, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 8 */
    label = gtk_label_new (_("Colour for satellite 8: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      3, 4, y+3, y+4,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col8 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col8), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col8), _("Select colour 8"));
    gtk_table_attach (GTK_TABLE (table), col8,
                      4, 5, y+3, y+4,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col8,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_08);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col8), &col);
    g_signal_connect (col8, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 9 */
    label = gtk_label_new (_("Colour for satellite 9: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      3, 4, y+4, y+5,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col9 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col9), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col9), _("Select colour 9"));
    gtk_table_attach (GTK_TABLE (table), col9,
                      4, 5, y+4, y+5,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col9,
                                 _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_09);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col9), &col);
    g_signal_connect (col9, "color-set", G_CALLBACK (colour_changed), NULL);

    /* colour 10 */
    label = gtk_label_new (_("Colour for satellite 10: "));
    gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
    gtk_table_attach (GTK_TABLE (table), label,
                      3, 4, y+5, y+6,
                      GTK_SHRINK, GTK_SHRINK, 0, 0);
    col10 = gtk_color_button_new ();
    gtk_color_button_set_use_alpha (GTK_COLOR_BUTTON (col10), FALSE);
    gtk_color_button_set_title (GTK_COLOR_BUTTON (col10), _("Select colour 10"));
    gtk_table_attach (GTK_TABLE (table), col10,
                      4, 5, y+5, y+6,
                      GTK_FILL , GTK_FILL, 0, 0);
    gtk_widget_set_tooltip_text (col10,
                          _("Click to select a colour"));
    rgb = sat_cfg_get_int (SAT_CFG_INT_SKYATGL_COL_10);

    rgb2gdk (rgb, &col);
    gtk_color_button_set_color (GTK_COLOR_BUTTON (col10), &col);
    g_signal_connect (col10, "color-set", G_CALLBACK (colour_changed), NULL);




    /* create vertical box */
    vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_set_border_width (GTK_CONTAINER (vbox), 20);
    gtk_box_pack_start (GTK_BOX (vbox), table, TRUE, TRUE, 0);

    /* create RESET button */
    create_reset_button (GTK_BOX (vbox));


    return vbox;

}