22 typedef unsigned int uint;
23 #pragma warning( disable : 4554)
31 #include <glib-object.h>
33 #include <gtkdatabox.h>
34 #include <gtkdatabox_points.h>
35 #include <gtkdatabox_lines.h>
36 #include <gtkdatabox_regions.h>
37 #include <gtkdatabox_ruler.h>
38 #include <gtkdatabox_grid.h>
39 #include <gtkdatabox_markers.h>
40 #include <gtkdatabox_offset_bars.h>
99 setHomogeneous(
false);
103 axis=gtk_databox_new ();
104 setOptions((GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK));
108 GtkWidget *xRuler = gtk_databox_ruler_new (GTK_ORIENTATION_HORIZONTAL);
110 gtk_databox_set_ruler_x (GTK_DATABOX(axis), GTK_DATABOX_RULER (xRuler));
111 GtkWidget *yRuler = gtk_databox_ruler_new (GTK_ORIENTATION_VERTICAL);
113 gtk_databox_set_ruler_y (GTK_DATABOX(axis), GTK_DATABOX_RULER (yRuler));
115 setOptions((GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL));
118 setOptions((GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK));
119 setRegion(1, 2, 1, 2);
126 gtk_widget_modify_bg (axis, GTK_STATE_NORMAL, &gdkC);
134 return getCurrentAxis();
147 gtk_widget_show_all(axis);
148 gtk_widget_show_all(getWidget());
151 gtk_widget_hide(axis);
152 gtk_widget_hide(getWidget());
162 plot(x, y, cnt, cls);
171 void plot(gfloat *
x, gfloat *
y,
int cnt,
const char *clsChar) {
173 plot(x, y, cnt, cls);
190 GtkDataboxGraph *graph=NULL;
194 graph = gtk_databox_lines_new (cnt, x, y, &gdkC, size);
196 graph = gtk_databox_points_new (cnt, x, y, &gdkC, size);
197 gtk_databox_graph_add_front (GTK_DATABOX (axis), graph);
210 plot(x, y1, y2, cnt, cls);
222 void plot(gfloat *
x, gfloat *
y1, gfloat *
y2,
int cnt,
const char *clsChar) {
224 plot(x, y1, y2, cnt, cls);
244 GtkDataboxGraph *graph=NULL;
248 graph = gtk_databox_regions_new (cnt, x, y1, y2, &gdkC);
250 graph = gtk_databox_offset_bars_new(cnt, x, y1, y2, &gdkC, size);
251 gtk_databox_graph_add_front (GTK_DATABOX (axis), graph);
263 semilogx(x, y, cnt, cls);
275 semilogx(x, y, cnt, cls);
286 plot(x, y, cnt, cls);
287 gtk_databox_set_scale_type_x (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
300 semilogx(x, y1, y2, cnt, cls);
315 semilogx(x, y1, y2, cnt, cls);
329 plot(x, y1, y2, cnt, cls);
331 if (gtk_databox_get_scale_type_x(GTK_DATABOX (axis))!=GTK_DATABOX_SCALE_LOG)
332 gtk_databox_set_scale_type_x (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
343 semilogy(x, y, cnt, cls);
355 semilogy(x, y, cnt, cls);
366 plot(x, y, cnt, cls);
369 if (gtk_databox_get_scale_type_y(GTK_DATABOX (axis))!=GTK_DATABOX_SCALE_LOG)
370 gtk_databox_set_scale_type_y (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
381 loglog(x, y, cnt, cls);
393 loglog(x, y, cnt, cls);
403 plot(x, y, cnt, cls);
404 if (gtk_databox_get_scale_type_x(GTK_DATABOX (axis))!=GTK_DATABOX_SCALE_LOG)
405 gtk_databox_set_scale_type_x (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
406 if (gtk_databox_get_scale_type_y(GTK_DATABOX (axis))!=GTK_DATABOX_SCALE_LOG)
407 gtk_databox_set_scale_type_y (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
416 GtkDataboxGraph *
text(gfloat *
x, gfloat *
y,
const char *textDisp,
const char *clsChar) {
418 return text(x, y, textDisp, cls);
430 GtkDataboxGraph *graph = gtk_databox_markers_new (1, x, y, &gdkC, 1, GTK_DATABOX_MARKERS_NONE);
432 gtk_databox_markers_set_label (GTK_DATABOX_MARKERS (graph), 0, GTK_DATABOX_MARKERS_TEXT_CENTER, (gchar*)textDisp, boxed);
433 gtk_databox_graph_add_front (GTK_DATABOX (axis), graph);
447 gtk_databox_graph_remove_all(GTK_DATABOX (axis));
462 GtkDataboxGrid *gridG=GTK_DATABOX_GRID(gridGraph);
463 if (gtk_databox_grid_get_hline_vals(gridG)) {
464 grid(on, gtk_databox_grid_get_hlines(gridG), gtk_databox_grid_get_hline_vals(gridG), gtk_databox_grid_get_vlines(gridG), gtk_databox_grid_get_vline_vals(gridG));
468 grid(on, 5, NULL, 5, NULL);
478 void grid(
bool on,
int hCnt, gfloat *hLines,
int vCnt, gfloat *vLines) {
481 if (gridGraph!=NULL) {
482 gtk_databox_graph_remove(GTK_DATABOX (axis), gridGraph);
488 if ((hLines!=NULL) & (vLines!=NULL))
489 gridGraph=gtk_databox_grid_array_new(hCnt, vCnt, hLines, vLines, &gdkC, size);
491 gridGraph=gtk_databox_grid_new(hCnt, vCnt, &gdkC, size);
492 gtk_databox_graph_add_front (GTK_DATABOX (axis), gridGraph);
494 if (gridGraph!=NULL) {
495 gtk_databox_graph_remove(GTK_DATABOX (axis), gridGraph);
508 void limits(
float min_x,
float max_x,
float min_y,
float max_y) {
509 gtk_databox_set_total_limits (GTK_DATABOX (axis), min_x, max_x, max_y, min_y);
517 gtk_databox_auto_rescale(GTK_DATABOX (axis), border);
525 gtk_widget_queue_draw (GTK_WIDGET (axis));
588 void set(GtkWidget *widget, ...) {
590 va_start(args, widget);
593 char *token=va_arg(args,
char *);
594 if ((token==NULL) | (token==
'\0'))
598 if ((strcmp(&token[1],
"oxShadow")==0) | (strcmp(&token[1],
"oxshadow")==0))
599 gtk_databox_set_box_shadow(GTK_DATABOX(widget), (GtkShadowType)va_arg(args,
int));
600 else if ((strcmp(&token[1],
"Scale")==0) | (strcmp(&token[1],
"scale")==0)) {
601 char *linearOrLog=va_arg(args,
char*);
602 if (tolower(token[0])==
'x'){
603 if (strcmp(&linearOrLog[1],
"og")==0)
604 gtk_databox_set_scale_type_x (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
606 gtk_databox_set_scale_type_x (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LINEAR);
608 if (tolower(token[0])==
'y'){
609 if (strcmp(&linearOrLog[1],
"og")==0)
610 gtk_databox_set_scale_type_y (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LOG);
612 gtk_databox_set_scale_type_y (GTK_DATABOX (axis), GTK_DATABOX_SCALE_LINEAR);
616 GtkDataboxRuler *ruler;
618 if (tolower(token[0])==
'x')
619 ruler=gtk_databox_get_ruler_x(GTK_DATABOX (widget));
621 ruler=gtk_databox_get_ruler_y(GTK_DATABOX (widget));
625 if ((strcmp(&token[1],
"MinorTick")==0) | (strcmp(&token[1],
"minortick")==0)) {
627 int draw_ticks=va_arg(args,
int);
628 gtk_databox_ruler_set_draw_subticks(ruler,draw_ticks);
630 }
else if ((strcmp(&token[1],
"Tick")==0) | (strcmp(&token[1],
"tick")==0)) {
631 uint manual_tick_cnt=va_arg(args,
int);
632 if (manual_tick_cnt==0)
633 gtk_databox_ruler_set_draw_ticks(ruler,manual_tick_cnt);
635 gtk_databox_ruler_set_manual_tick_cnt(ruler, manual_tick_cnt);
636 gtk_databox_ruler_set_manual_ticks(ruler, va_arg(args, gfloat*));
638 }
else if ((strcmp(&token[1],
"LabelFormat")==0) | (strcmp(&token[1],
"labelformat")==0)) {
641 scaleType=gtk_databox_get_scale_type_x(GTK_DATABOX (widget));
643 scaleType=gtk_databox_get_scale_type_y(GTK_DATABOX (widget));
645 if (scaleType==GTK_DATABOX_SCALE_LINEAR)
646 gtk_databox_ruler_set_linear_label_format(ruler, va_arg(args,
char*));
648 gtk_databox_ruler_set_log_label_format(ruler, va_arg(args,
char*));
650 }
else if ((strcmp(&token[1],
"LabelLength")==0) | (strcmp(&token[1],
"labellength")==0)) {
653 scaleType=gtk_databox_get_scale_type_x(GTK_DATABOX (widget));
655 scaleType=gtk_databox_get_scale_type_y(GTK_DATABOX (widget));
657 gtk_databox_ruler_set_max_length(ruler, va_arg(args,
int));
658 }
else if ((strcmp(&token[1],
"LabelLength")==0) | (strcmp(&token[1],
"labellength")==0)) {
659 gtk_databox_ruler_set_max_length(ruler, va_arg(args,
int));
660 }
else if ((strcmp(&token[1],
"TickLabel")==0) | (strcmp(&token[1],
"ticklabel")==0)) {
661 gtk_databox_ruler_set_manual_tick_labels(ruler, (gchar**)va_arg(args, gchar**));
662 }
else if ((strcmp(&token[1],
"TickXOffset")==0) | (strcmp(&token[1],
"tickxoffset")==0)) {
663 gtk_databox_ruler_set_text_hoffset(ruler, va_arg(args,
int));
664 }
else if ((strcmp(&token[1],
"Position")==0) | (strcmp(&token[1],
"position")==0)) {
665 gtk_databox_ruler_set_draw_position(ruler, va_arg(args,
int));
666 }
else if ((strcmp(&token[1],
"Shadow")==0) | (strcmp(&token[1],
"shadow")==0)) {
667 gtk_databox_ruler_set_box_shadow(ruler, (GtkShadowType)va_arg(args,
int));
668 }
else if ((strcmp(&token[1],
"LabelAlignment")==0) | (strcmp(&token[1],
"labelalignment")==0)) {
669 char *which=va_arg(args,
char*);
670 if (strcmp(&which[1],
"ight")==0)
671 gtk_databox_ruler_set_text_alignment(ruler, PANGO_ALIGN_RIGHT);
672 else if (strcmp(&which[1],
"enter")==0)
673 gtk_databox_ruler_set_text_alignment(ruler, PANGO_ALIGN_CENTER);
675 gtk_databox_ruler_set_text_alignment(ruler, PANGO_ALIGN_LEFT);
676 }
else if ((strcmp(&token[1],
"LabelRotate")==0) | (strcmp(&token[1],
"labelrotate")==0)) {
677 char *which=va_arg(args,
char*);
678 if (strcmp(&which[1],
"ertical")==0)
679 gtk_databox_ruler_set_text_orientation(ruler, GTK_ORIENTATION_VERTICAL);
681 gtk_databox_ruler_set_text_orientation(ruler, GTK_ORIENTATION_HORIZONTAL);
684 if (tolower(token[0])==
'x')
685 gtk_databox_set_ruler_x(GTK_DATABOX (widget), ruler);
687 gtk_databox_set_ruler_y(GTK_DATABOX (widget), ruler);
699 g_signal_connect_after(axis, event, callback, data);
713 void xLabel(
const char* label,
int *indexes=NULL){
715 setRegion(2, 3, 3, 4);
716 setOptions((GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL));
719 *
this<<(
Labels()<<label).setAlignment(0.5, 0.5);
727 setOptions((GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL | GTK_SHRINK));
728 int indexes[]={1,2,2,3};
729 xLabel(label,indexes);
743 void yLabel(
const char* label,
int *indexes=NULL){
744 Labels ylabel; ylabel<<label;
746 setRegion(0, 1, 1, 2);
747 setOptions((GtkAttachOptions)(GTK_FILL), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK));
760 setOptions((GtkAttachOptions)(GTK_FILL | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL));
761 int indexes[]={1,2,0,1};
762 yLabel(label,indexes);
772 void title(
const char* titleStr,
int *indexes=NULL){
773 Labels labels; labels<<titleStr;
785 void title(GtkWidget *widget,
int *indexes=NULL){
787 setRegion(2, 3, 0, 1);
788 setOptions((GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions)(GTK_FILL));