/** \brief Manage toggling of Ground Track. * \param item The menu item that was toggled. * \param data Pointer to the GtkPolarView structure. * */ static void track_toggled(GtkCheckMenuItem * item, gpointer data) { GtkPolarView *pv = GTK_POLAR_VIEW(data); sat_obj_t *obj = NULL; sat_t *sat; /* qth_t *qth; Unused */ gint *catnum; /* get satellite object */ obj = SAT_OBJ(g_object_get_data(G_OBJECT(item), "obj")); sat = SAT(g_object_get_data(G_OBJECT(item), "sat")); /*qth = (qth_t *)(g_object_get_data (G_OBJECT (item), "qth")); */ if (obj == NULL) { sat_log_log(SAT_LOG_LEVEL_ERROR, _("%s:%d: Failed to get satellite object."), __FILE__, __LINE__); return; } /* toggle flag */ obj->showtrack = !obj->showtrack; gtk_check_menu_item_set_active(item, obj->showtrack); catnum = g_new0(gint, 1); *catnum = sat->tle.catnr; if (obj->showtrack) { /* add sky track */ /* add it to the storage structure */ g_hash_table_insert(pv->showtracks_on, catnum, NULL); /* remove it from the don't show */ g_hash_table_remove(pv->showtracks_off, catnum); gtk_polar_view_create_track(pv, obj, sat); } else { /* add it to the hide */ g_hash_table_insert(pv->showtracks_off, catnum, NULL); /* remove it from the show */ g_hash_table_remove(pv->showtracks_on, catnum); /* delete sky track */ gtk_polar_view_delete_track(pv, obj, sat); } }
static void show_next_passes_cb (GtkWidget *menuitem, gpointer data) { GtkPolarView *pv = GTK_POLAR_VIEW (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, pv->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->nickname, 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->nickname, 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->nickname); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } }
/** \brief Manage toggling of Ground Track. * \param item The menu item that was toggled. * \param data Pointer to the GtkPolarView structure. * */ static void track_toggled (GtkCheckMenuItem *item, gpointer data) { GtkPolarView *pv = GTK_POLAR_VIEW (data); sat_obj_t *obj = NULL; sat_t *sat; qth_t *qth; gint idx,i; GooCanvasItemModel *root; pass_detail_t *detail; guint num; GooCanvasPoints *points; gfloat x,y; guint32 col; guint tres,ttidx; /* get satellite object */ obj = SAT_OBJ(g_object_get_data (G_OBJECT (item), "obj")); sat = SAT(g_object_get_data (G_OBJECT (item), "sat")); qth = (qth_t *)(g_object_get_data (G_OBJECT (item), "qth")); if (obj == NULL) { sat_log_log (SAT_LOG_LEVEL_BUG, _("%s:%d: Failed to get satellite object."), __FILE__, __LINE__); return; } /* toggle flag */ obj->showtrack = !obj->showtrack; gtk_check_menu_item_set_active (item, obj->showtrack); root = goo_canvas_get_root_item_model (GOO_CANVAS (pv->canvas)); if (obj->showtrack) { /* add sky track */ /* create points */ num = g_slist_length (obj->pass->details); if (num == 0) { sat_log_log (SAT_LOG_LEVEL_BUG, _("%s:%d: Pass has no details."), __FILE__, __LINE__); return; } /* time resolution for time ticks; we need 3 additional points to AOS and LOS ticks. */ tres = (num-2) / (TRACK_TICK_NUM-1); points = goo_canvas_points_new (num); /* first point should be (aos_az,0.0) */ azel_to_xy (pv, obj->pass->aos_az, 0.0, &x, &y); points->coords[0] = (double) x; points->coords[1] = (double) y; obj->trtick[0] = create_time_tick (pv, obj->pass->aos, x, y); ttidx = 1; for (i = 1; i < num-1; i++) { detail = PASS_DETAIL(g_slist_nth_data (obj->pass->details, i)); if (detail->el >=0.0) azel_to_xy (pv, detail->az, detail->el, &x, &y); points->coords[2*i] = (double) x; points->coords[2*i+1] = (double) y; if (!(i % tres)) { /* create a time tick */ if (ttidx<TRACK_TICK_NUM) obj->trtick[ttidx] = create_time_tick (pv, detail->time, x, y); ttidx++; } } /* last point should be (los_az, 0.0) */ azel_to_xy (pv, obj->pass->los_az, 0.0, &x, &y); points->coords[2*(num-1)] = (double) x; points->coords[2*(num-1)+1] = (double) y; /* create poly-line */ col = mod_cfg_get_int (pv->cfgdata, MOD_CFG_POLAR_SECTION, MOD_CFG_POLAR_TRACK_COL, SAT_CFG_INT_POLAR_TRACK_COL); obj->track = goo_canvas_polyline_model_new (root, FALSE, 0, "points", points, "line-width", 1.0, "stroke-color-rgba", col, "line-cap", CAIRO_LINE_CAP_SQUARE, "line-join", CAIRO_LINE_JOIN_MITER, NULL); goo_canvas_points_unref (points); /* put track on the bottom of the sack */ goo_canvas_item_model_lower (obj->track, NULL); } else { /* delete sky track */ idx = goo_canvas_item_model_find_child (root, obj->track); if (idx != -1) { goo_canvas_item_model_remove_child (root, idx); } for (i = 0; i < TRACK_TICK_NUM; i++) { idx = goo_canvas_item_model_find_child (root, obj->trtick[i]); if (idx != -1) { goo_canvas_item_model_remove_child (root, idx); } } } }