[Gpredict-svn] SF.net SVN: gpredict:[640] trunk
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
From: <cs...@us...> - 2010-07-12 13:34:53
|
Revision: 640 http://gpredict.svn.sourceforge.net/gpredict/?rev=640&view=rev Author: csete Date: 2010-07-12 13:34:47 +0000 (Mon, 12 Jul 2010) Log Message: ----------- Implemented pass summary pop-up when mouse hovers over a pass. Works like tootlips. Modified Paths: -------------- trunk/ChangeLog trunk/src/gtk-sky-glance.c Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-07-12 12:49:51 UTC (rev 639) +++ trunk/ChangeLog 2010-07-12 13:34:47 UTC (rev 640) @@ -9,7 +9,11 @@ * src/predict-tools.c: Include TCA when creating copy of a pass. + * src/gtk-sky-glance.c: + Implemented pass summary pop-up when mouse hovers over a pass. Works like + tooltips. + 2010-07-11 Alexandru Csete <oz9aec at gmail.com> * data/satdata: Modified: trunk/src/gtk-sky-glance.c =================================================================== --- trunk/src/gtk-sky-glance.c 2010-07-12 12:49:51 UTC (rev 639) +++ trunk/src/gtk-sky-glance.c 2010-07-12 13:34:47 UTC (rev 640) @@ -101,13 +101,13 @@ static GooCanvasItemModel* create_canvas_model (GtkSkyGlance *skg); +static void create_sat (gpointer key, gpointer value, gpointer data); + static gdouble t2x (GtkSkyGlance *skg, gdouble t); static gdouble x2t (GtkSkyGlance *skg, gdouble x); +static gchar *time_to_str (gdouble julutc); -static void create_sat (gpointer key, gpointer value, gpointer data); - - static GtkVBoxClass *parent_class = NULL; @@ -280,6 +280,7 @@ /* create the canvas */ GTK_SKY_GLANCE (skg)->canvas = goo_canvas_new (); + g_object_set (G_OBJECT (GTK_SKY_GLANCE(skg)->canvas), "has-tooltip", TRUE, NULL); gtk_widget_modify_base (GTK_SKY_GLANCE (skg)->canvas, GTK_STATE_NORMAL, &bg_color); gtk_widget_set_size_request (GTK_SKY_GLANCE (skg)->canvas, GTK_SKY_GLANCE (skg)->w, @@ -824,8 +825,6 @@ } - - //g_print("Mouse enter: %s AOS:\n"); return TRUE; @@ -983,7 +982,13 @@ GooCanvasItemModel *root; GooCanvasItemModel *lab; + /* tooltips vars */ + gchar *tooltip; /* the complete tooltips string */ + gchar *aosstr; /* AOS time string */ + gchar *losstr; /* LOS time string */ + gchar *tcastr; /* TCA time string */ + /* FIXME: Include current pass if sat is up now */ @@ -1021,10 +1026,32 @@ skypass->catnum = sat->tle.catnr; tmppass = (pass_t *) g_slist_nth_data (passes, i); skypass->pass = copy_pass (tmppass); + + aosstr = time_to_str (skypass->pass->aos); + losstr = time_to_str (skypass->pass->los); + tcastr = time_to_str (skypass->pass->tca); + + /* box tooltip will contain pass summary */ + tooltip = g_strdup_printf("<big><b>%s</b>\n</big>\n"\ + "<tt>AOS: %s Az:%.0f\302\260\n" \ + "TCA: %s Az:%.0f\302\260 / El:%.1f\302\260\n" \ + "LOS: %s Az:%.0f\302\260</tt>\n" \ + "\n<i>Click for details</i>", + skypass->pass->satname, + aosstr, skypass->pass->aos_az, + tcastr, skypass->pass->maxel_az, skypass->pass->max_el, + losstr, skypass->pass->los_az); + + g_free (aosstr); + g_free (losstr); + g_free (tcastr); + skypass->box = goo_canvas_rect_model_new (root, 10, 10, 20, 20, /* dummy coordinates */ "stroke-color-rgba", bcol, "fill-color-rgba", fcol, + "tooltip", tooltip, NULL); + g_free (tooltip); /* store this pass in list */ skg->passes = g_slist_append (skg->passes, skypass); @@ -1053,3 +1080,47 @@ skg->satlab = g_slist_append (skg->satlab, lab); } } + + + +/** \brief Convert "jul_utc" time to formatted string + * \param julutc The time to convert + * \return A newly allocated string containing the formatted time (should be freed by caller) + * + * \bug This code is duplicated many places. + */ +static gchar *time_to_str (gdouble julutc) +{ + gchar buff[TIME_FORMAT_MAX_LENGTH]; + gchar *fmtstr; + gchar *timestr; + time_t t; + guint size; + + + /* convert julian date to struct time_t */ + t = (julutc - 2440587.5)*86400.; + + /* format the number */ + fmtstr = sat_cfg_get_str (SAT_CFG_STR_TIME_FORMAT); + + /* format either local time or UTC depending on check box */ + if (sat_cfg_get_bool (SAT_CFG_BOOL_USE_LOCAL_TIME)) { + size = strftime (buff, TIME_FORMAT_MAX_LENGTH, fmtstr, localtime (&t)); + } + else { + size = strftime (buff, TIME_FORMAT_MAX_LENGTH, fmtstr, gmtime (&t)); + } + + g_free (fmtstr); + + + if (size == 0) + /* size > MAX_LENGTH */ + buff[TIME_FORMAT_MAX_LENGTH-1] = '\0'; + + timestr = g_strdup (buff); + + + return timestr; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |