예제 #1
0
int main (int argc, char **argv)
{
	GtkWidget *window = NULL;
	GdkColor col = { 0,100,200,300};
	gint i = 0;
	gfloat j = 0.0;
	gint trace1 = 0;
	gint trace2 = 0;
	gint trace3 = 0;
	gfloat data[3] = {0.1,1.1,2.2};
	gint timeout = 0;

	gtk_init (&argc, &argv);

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

	gtk_widget_set_size_request(GTK_WIDGET(window),320,320);
	chart = mtx_stripchart_new ();
	gtk_container_add (GTK_CONTAINER (window), chart);
	gtk_widget_realize(chart);
	trace1 = mtx_stripchart_add_trace(MTX_STRIPCHART(chart),-512.0,1536.0,0,"Trace 1", NULL);
	printf("trace 1's ID %i\n",trace1);
	trace2 = mtx_stripchart_add_trace(MTX_STRIPCHART(chart),-100.0,512.0,0,"Trace 2", NULL);
	printf("trace 2's ID %i\n",trace2);
	trace3 = mtx_stripchart_add_trace(MTX_STRIPCHART(chart),512.0,1024.0,1,"Trace 3", NULL);
	printf("trace 3's ID %i\n",trace3);
	for (j=0;j<1024;j+=2.5)
	{
		for (i=0;i<3;i++)
			data[i] = j;
		/*printf("setting values to %f, %f, %f\n",data[0],data[1],data[2]); */

		mtx_stripchart_set_values(MTX_STRIPCHART(chart),data);
	}
	mtx_stripchart_get_latest_values(MTX_STRIPCHART(chart),data);
/*	printf("latest values are %f, %f, %f\n",data[0],data[1],data[2]);*/


	/*mtx_stripchart_delete_trace(MTX_STRIPCHART(chart),trace2);*/

	

	timeout = g_timeout_add(40,(GSourceFunc)update_stripchart,(gpointer)chart);
/*	g_timeout_add(4000,(GSourceFunc)remove_trace,GINT_TO_POINTER(trace2));*/


	gtk_widget_show_all (window);


	g_signal_connect (window, "delete_event",
			G_CALLBACK (close_demo), GINT_TO_POINTER(timeout));
	g_signal_connect (window, "destroy_event",
			G_CALLBACK (close_demo), GINT_TO_POINTER(timeout));

	gtk_main ();
	return 0;
}
예제 #2
0
/*!
  \brief updates a stripchart widget with new values
  \param watch is the pointer to the watch containing the new data
  */
G_MODULE_EXPORT void update_stripchart_data(RtvWatch* watch)
{
	ENTER();
	mtx_stripchart_set_n_values(MTX_STRIPCHART(watch->user_data),watch->count,watch->hist_vals);
	EXIT();
	return;
}
예제 #3
0
/*!
 \brief handles exposure events when the screen is covered and then 
 exposed. Works by copying from a backing pixmap to screen,
 \param widget (GtkWidget *) pointer to the chart object
 \param event (GdkEventExpose *) pointer to GDK event datastructure that
 encodes important info like window dimensions and depth.
 */
gboolean mtx_stripchart_expose (GtkWidget *widget, GdkEventExpose *event)
{
	MtxStripChart * chart = MTX_STRIPCHART(widget);
	MtxStripChartPrivate *priv = MTX_STRIPCHART_GET_PRIVATE(chart);
	cairo_t *cr = NULL;

#if GTK_MINOR_VERSION >= 18
	if (gtk_widget_is_sensitive(GTK_WIDGET(widget)))
#else
		if (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(widget)))
#endif
		{
			cr = gdk_cairo_create(widget->window);
			gdk_cairo_set_source_pixmap(cr,priv->bg_pixmap,0,0);
			cairo_rectangle(cr,event->area.x, event->area.y,event->area.width, event->area.height);
			cairo_fill(cr);
			cairo_destroy(cr);
		}
		else
		{
			cr = gdk_cairo_create(widget->window);
			gdk_cairo_set_source_pixmap(cr,priv->bg_pixmap,0,0);
			cairo_rectangle(cr,event->area.x, event->area.y,event->area.width, event->area.height);
			cairo_fill(cr);
			cairo_set_source_rgba (cr, 0.3,0.3,0.3,0.5);
			cairo_paint(cr);
			/*
			   cairo_rectangle (cr,
			   0,0,priv->w,priv->h);
			   cairo_fill(cr);
			 */
			cairo_destroy(cr);
		}
	return FALSE;
}
예제 #4
0
gboolean mtx_stripchart_motion_event (GtkWidget *chart,GdkEventMotion *event)
{
	/* We don't care, but return FALSE to propogate properly */
	MtxStripChartPrivate *priv = MTX_STRIPCHART_GET_PRIVATE(MTX_STRIPCHART(chart));
	priv->mouse_x = event->x;
	priv->mouse_y = event->y;
	return FALSE;
}
예제 #5
0
gboolean mtx_stripchart_enter_leave_event(GtkWidget *widget, GdkEventCrossing *event)
{
	MtxStripChartPrivate *priv = MTX_STRIPCHART_GET_PRIVATE(MTX_STRIPCHART(widget));
	if (event->type == GDK_ENTER_NOTIFY)
		priv->mouse_tracking = TRUE;
	else
		priv->mouse_tracking = FALSE;

	return TRUE;
}
예제 #6
0
/*!
  \brief Creates a stripchart widget (i.e. accel wizard)
  \param parent is the container for stripchart widget
  */
G_MODULE_EXPORT void create_stripchart(GtkWidget *parent)
{
	GtkWidget *chart = NULL;
	gchar ** sources = NULL;
	gchar * tmpbuf = NULL;
	guint i = 0;
	gconstpointer *object = NULL;
	gint min = 0;
	gint max = 0;
	gint precision = 0;
	gchar * name = NULL;
	DataSize size = MTX_U08;
	Rtv_Map *rtv_map;

	ENTER();
	rtv_map = (Rtv_Map *)DATA_GET(global_data,"rtv_map");
	tmpbuf = (gchar *)OBJ_GET(parent,"sources");
	if (tmpbuf);
		sources = g_strsplit(tmpbuf,",",-1);
	chart = mtx_stripchart_new();
	gtk_container_add(GTK_CONTAINER(parent), chart);
	//gtk_widget_realize(chart);
	for (i=0;i<g_strv_length(sources);i++)
	{
		if (!rtv_map)
			continue;
		object = (gconstpointer *)g_hash_table_lookup(rtv_map->rtv_hash,sources[i]);
		if (!object)
			continue;
		if ((gchar *)DATA_GET(object,"dlog_gui_name"))
			name = (gchar *)DATA_GET(object,"dlog_gui_name");
		else
			name = g_strdup("undefined!\n");
		if (DATA_GET(object,"real_lower"))
			min = (GINT)strtol((gchar *)DATA_GET(object,"real_lower"),NULL,10);
		else
			min = get_extreme_from_size(size,LOWER);
		if (DATA_GET(object,"real_upper"))
			max = (GINT)strtol((gchar *)DATA_GET(object,"real_upper"),NULL,10);
		else
			max = get_extreme_from_size(size,UPPER);
		if (DATA_GET(object,"precision"))
			precision = (GINT)DATA_GET(object,"precision");
		else
			precision = 0;
		mtx_stripchart_add_trace(MTX_STRIPCHART(chart),(gfloat)min,(gfloat)max,precision,name,NULL);
	}
	create_rtv_multi_value_historical_watch(sources,FALSE,"update_stripchart_data",chart);
	g_strfreev(sources);
	gtk_widget_show_all(parent);
	EXIT();
	return;
}
예제 #7
0
/*!
 \brief handles configure events when the chart gets created or resized.
 Takes care of creating/destroying graphics contexts, backing pixmaps (two 
 levels are used to split the rendering for speed reasons) colormaps are 
 also created here as well
 \param widget (GtkWidget *) pointer to the chart object
 \param event (GdkEventConfigure *) pointer to GDK event datastructure that
 encodes important info like window dimensions and depth.
 */
gboolean mtx_stripchart_configure (GtkWidget *widget, GdkEventConfigure *event)
{
	MtxStripChart * chart = MTX_STRIPCHART(widget);
	MtxStripChartPrivate *priv = MTX_STRIPCHART_GET_PRIVATE(chart);
	cairo_t *cr = NULL;

	priv->w = widget->allocation.width;
	priv->h = widget->allocation.height;

	/* Backing pixmap (copy of window) */
	if (priv->bg_pixmap)
		g_object_unref(priv->bg_pixmap);
	priv->bg_pixmap=gdk_pixmap_new(widget->window,
			priv->w,priv->h,
			gtk_widget_get_visual(widget)->depth);
	cr = gdk_cairo_create(priv->bg_pixmap);
	cairo_set_operator(cr,CAIRO_OPERATOR_DEST_OUT);
	cairo_paint(cr);
	cairo_destroy(cr);
	/* Trace pixmap */
	if (priv->trace_pixmap)
		g_object_unref(priv->trace_pixmap);
	priv->trace_pixmap=gdk_pixmap_new(widget->window,
			priv->w,priv->h,
			gtk_widget_get_visual(widget)->depth);
	cr = gdk_cairo_create(priv->trace_pixmap);
	cairo_set_operator(cr,CAIRO_OPERATOR_DEST_OUT);
	cairo_paint(cr);
	cairo_destroy(cr);
	/* Grat pixmap */
	if (priv->grat_pixmap)
		g_object_unref(priv->grat_pixmap);
	priv->grat_pixmap=gdk_pixmap_new(widget->window,
			priv->w,priv->h,
			gtk_widget_get_visual(widget)->depth);
	cr = gdk_cairo_create(priv->grat_pixmap);
	cairo_set_operator(cr,CAIRO_OPERATOR_DEST_OUT);
	cairo_paint(cr);
	cairo_destroy(cr);

	gdk_window_set_back_pixmap(widget->window,priv->bg_pixmap,0);

	if (priv->font_options)
		cairo_font_options_destroy(priv->font_options);
	priv->font_options = cairo_font_options_create();
	cairo_font_options_set_antialias(priv->font_options,
			CAIRO_ANTIALIAS_GRAY);

	generate_stripchart_static_traces(chart);
	render_marker (chart);

	return TRUE;
}
예제 #8
0
			hist_vals[i] = g_new0(gfloat, 3);
	}
	/* Simple one at a time */
	vals[0]++;
	vals[1]+=1.25;
	vals[2]+=2.125;
	hist_vals[0][0]++;
	hist_vals[0][1]++;
	hist_vals[0][2]++;
	hist_vals[1][0]+=1.25;
	hist_vals[1][1]+=1.25;
	hist_vals[1][2]+=1.25;
	hist_vals[2][0]+=2.125;
	hist_vals[2][1]+=2.125;
	hist_vals[2][2]+=2.125;
	mtx_stripchart_set_n_values(MTX_STRIPCHART(chart),3,hist_vals);
/*	printf("This should scroll stripchart \n"); */

	return FALSE;
}

gboolean remove_trace(gpointer data)
{
	mtx_stripchart_delete_trace(MTX_STRIPCHART(chart),(GINT)data);
	return FALSE;
}


gboolean close_demo(GtkWidget *widget, gpointer data)
{
	g_source_remove((guint)data);
예제 #9
0
G_MODULE_EXPORT void update_stripchart_data(DataWatch* watch)
{
	mtx_stripchart_set_values(MTX_STRIPCHART(watch->user_data),watch->vals);
}