[Gpredict-svn] SF.net SVN: gpredict:[160] trunk/src/gtk-sat-map-popup.c
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
|
From: <cs...@us...> - 2008-10-25 22:07:56
|
Revision: 160
http://gpredict.svn.sourceforge.net/gpredict/?rev=160&view=rev
Author: csete
Date: 2008-10-25 22:07:53 +0000 (Sat, 25 Oct 2008)
Log Message:
-----------
Use real or simulated time for pass predictions.
Modified Paths:
--------------
trunk/src/gtk-sat-map-popup.c
Modified: trunk/src/gtk-sat-map-popup.c
===================================================================
--- trunk/src/gtk-sat-map-popup.c 2008-10-25 21:55:36 UTC (rev 159)
+++ trunk/src/gtk-sat-map-popup.c 2008-10-25 22:07:53 UTC (rev 160)
@@ -51,6 +51,8 @@
static void coverage_toggled (GtkCheckMenuItem *item, gpointer data);
static void track_toggled (GtkCheckMenuItem *item, gpointer data);
/* static void target_toggled (GtkCheckMenuItem *item, gpointer data); */
+static void show_next_pass_cb (GtkWidget *menuitem, gpointer data);
+static void show_next_passes_cb (GtkWidget *menuitem, gpointer data);
/** \brief Show satellite popup menu.
@@ -106,7 +108,7 @@
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
g_object_set_data (G_OBJECT (menuitem), "sat", sat);
g_object_set_data (G_OBJECT (menuitem), "qth", qth);
- g_signal_connect (menuitem, "activate", G_CALLBACK (show_next_pass), toplevel);
+ g_signal_connect (menuitem, "activate", G_CALLBACK (show_next_pass_cb), satmap);
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
menuitem = gtk_image_menu_item_new_with_label (_("Future passes"));
@@ -114,7 +116,7 @@
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
g_object_set_data (G_OBJECT (menuitem), "sat", sat);
g_object_set_data (G_OBJECT (menuitem), "qth", qth);
- g_signal_connect (menuitem, "activate", G_CALLBACK (show_future_passes), toplevel);
+ g_signal_connect (menuitem, "activate", G_CALLBACK (show_next_passes_cb), satmap);
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
/* separator */
@@ -265,6 +267,143 @@
}
+static void show_next_pass_cb (GtkWidget *menuitem, gpointer data)
+{
+ GtkSatMap *satmap = GTK_SAT_MAP (data);
+ sat_t *sat;
+ qth_t *qth;
+ pass_t *pass;
+ GtkWidget *dialog;
+ GtkWindow *toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (data)));
+
+
+ /* get next pass */
+ sat = SAT(g_object_get_data (G_OBJECT (menuitem), "sat"));
+ qth = (qth_t *) (g_object_get_data (G_OBJECT (menuitem), "qth"));
+
+ /* check wheather sat actially has AOS */
+ if ((sat->otype != ORBIT_TYPE_GEO) && (sat->otype != ORBIT_TYPE_DECAYED) &&
+ has_aos (sat, qth)) {
+ if (sat_cfg_get_bool(SAT_CFG_BOOL_PRED_USE_REAL_T0)) {
+ pass = get_next_pass (sat, qth,
+ sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD));
+ }
+ else {
+ pass = get_pass (sat, qth, satmap->tstamp,
+ sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD));
+ }
+
+ if (pass != NULL) {
+ show_pass (sat->tle.sat_name, qth, pass, GTK_WIDGET (toplevel));
+ }
+ else {
+ /* show dialog that there are no passes within time frame */
+ dialog = gtk_message_dialog_new (toplevel,
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ _("Satellite %s has no passes\n"\
+ "within the next %d days"),
+ sat->tle.sat_name,
+ sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD));
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ }
+ }
+ else {
+ /* show dialog telling that this sat never reaches AOS*/
+ dialog = gtk_message_dialog_new (toplevel,
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Satellite %s has no passes for\n"\
+ "the current ground station!\n\n"\
+ "This can be because the satellite\n"\
+ "is geostationary, decayed or simply\n"\
+ "never comes above the horizon"),
+ sat->tle.sat_name);
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ }
+
+}
+
+
+static void show_next_passes_cb (GtkWidget *menuitem, gpointer data)
+{
+ GtkSatMap *satmap = GTK_SAT_MAP (data);
+ GtkWidget *dialog;
+ GtkWindow *toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (data)));
+ GSList *passes = NULL;
+ sat_t *sat;
+ qth_t *qth;
+
+
+ sat = SAT(g_object_get_data (G_OBJECT (menuitem), "sat"));
+ qth = (qth_t *) (g_object_get_data (G_OBJECT (menuitem), "qth"));
+
+ /* check wheather sat actially has AOS */
+ if ((sat->otype != ORBIT_TYPE_GEO) && (sat->otype != ORBIT_TYPE_DECAYED) &&
+ has_aos (sat, qth)) {
+
+ if (sat_cfg_get_bool(SAT_CFG_BOOL_PRED_USE_REAL_T0)) {
+ passes = get_next_passes (sat, qth,
+ sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD),
+ sat_cfg_get_int (SAT_CFG_INT_PRED_NUM_PASS));
+ }
+ else {
+ passes = get_passes (sat, qth, satmap->tstamp,
+ sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD),
+ sat_cfg_get_int (SAT_CFG_INT_PRED_NUM_PASS));
+
+ }
+
+
+ if (passes != NULL) {
+ show_passes (sat->tle.sat_name, qth, passes, GTK_WIDGET (toplevel));
+ }
+ else {
+ /* show dialog that there are no passes within time frame */
+ dialog = gtk_message_dialog_new (toplevel,
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ _("Satellite %s has no passes\n"\
+ "within the next %d days"),
+ sat->tle.sat_name,
+ sat_cfg_get_int (SAT_CFG_INT_PRED_LOOK_AHEAD));
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ }
+
+ }
+ else {
+ /* show dialog */
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (toplevel,
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Satellite %s has no passes for\n"\
+ "the current ground station!"),
+ sat->tle.sat_name);
+
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+ }
+
+}
+
+
+
#if 0
/** \brief Manage toggling of Set Target.
* \param item The menu item that was toggled.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|