142 drawpars.
clear =
true;
147 cairo_pop_group_to_source(cr[
i]);
149 cairo_destroy(cr[i]);
158 const int oldactive_cell)
163 cairo_set_line_width(cr[
i], 1.0);
171 for(
unsigned int i = 0;
i < THEhits.size();
i++){
172 hit & thishit = THEhits[
i];
173 if((thishit.
plane == oldactive_plane && thishit.
cell == oldactive_cell) ||
182 for(
int i = 0;
i <
kXorY;
i++) cairo_destroy(cr[
i]);
211 gtk_widget_get_pointer(
edarea[
i], &x, &y);
212 if(x >= 0 && y >= 0 && x <
edarea[i]->allocation.width
213 && y <
edarea[i]->allocation.height)
222 static gboolean
mouseover(GtkWidget * widg, GdkEventMotion * gevent,
225 if(gevent == NULL)
return TRUE;
230 if(gevent->state & GDK_BUTTON1_MASK){
251 drawpars.
clear =
true;
280 const bool stillanimating =
295 return stillanimating;
365 else if(
gevi+change < 0){
380 if(gtk_events_pending())
return TRUE;
399 const bool *
const forward = (
const bool *
const)data;
444 const int userevent =
445 strtol(gtk_entry_get_text(GTK_ENTRY(
ueventbox)), &endptr, 10);
449 if((
errno == ERANGE && (userevent == INT_MAX || userevent == INT_MIN))
450 || (
errno != 0 && userevent == 0)
451 || endptr == optarg || *endptr !=
'\0' 455 "events %d through %d%s%s",
459 ==
theevents.size()-1?
"":
" (not consecutive)",
472 gevi += (forward?1:-1);
555 switch(speednum < 1?1:speednum > 11?11:speednum){
573 animate = GTK_TOGGLE_BUTTON(w)->active;
607 const bool adjmax = *(
bool *)dt;
613 = gtk_adjustment_get_value(GTK_ADJUSTMENT(wg));
671 static int oldwidth =
event->width, oldheight =
event->height;
672 static bool first =
true;
673 const bool need_redraw =
674 first ||
event->width > oldwidth ||
event->height > oldheight;
676 oldwidth =
event->width, oldheight =
event->height;
678 if(need_redraw) gtk_widget_queue_draw(mainwin);
707 const int initialticknum = 0;
708 GtkObject *
const tickadj = gtk_adjustment_new
709 (initialticknum, 0, 1000, 1, 100, 0);
710 GtkWidget * tickslider = gtk_spin_button_new(GTK_ADJUSTMENT(tickadj), 10, 0);
711 g_signal_connect(tickadj,
"value_changed", G_CALLBACK(
adjusttick),
713 gtk_entry_set_max_length (GTK_ENTRY(tickslider), 6);
714 gtk_entry_set_width_chars(GTK_ENTRY(tickslider), 6);
720 const int initialspeednum = 6;
721 speedadj = gtk_adjustment_new (initialspeednum, 1, 11, 1, 1, 0);
725 GtkWidget *
const speedslider
726 = gtk_spin_button_new(GTK_ADJUSTMENT(
speedadj), 10, 0);
727 gtk_entry_set_max_length (GTK_ENTRY(speedslider), 2);
728 gtk_entry_set_width_chars(GTK_ENTRY(speedslider), 2);
734 static GdkColor *
color = NULL;
736 color =
new GdkColor;
737 gtk_widget_realize(mainwin);
738 gtk_style_lookup_color(gtk_widget_get_style(mainwin),
"bg_color", color);
740 gtk_widget_modify_base(widg, GTK_STATE_NORMAL, color);
748 gtk_text_view_set_editable(GTK_TEXT_VIEW(
statbox[i]),
false);
749 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(
statbox[i]),
false);
755 GtkWidget * ticklabel = gtk_text_view_new();
756 GtkTextBuffer * ticklabeltext = gtk_text_buffer_new(0);
757 gtk_text_view_set_justification(GTK_TEXT_VIEW(ticklabel), GTK_JUSTIFY_CENTER);
758 const char *
const ticklabelbuf = ismax?
"Max Tick":
"Min Tick";
759 gtk_text_buffer_set_text(ticklabeltext, ticklabelbuf, strlen(ticklabelbuf));
760 gtk_text_view_set_buffer(GTK_TEXT_VIEW(ticklabel), ticklabeltext);
761 gtk_text_view_set_editable(GTK_TEXT_VIEW(ticklabel),
false);
768 GtkWidget * speedlabel = gtk_text_view_new();
769 GtkTextBuffer * speedlabeltext = gtk_text_buffer_new(0);
770 gtk_text_view_set_justification(GTK_TEXT_VIEW(speedlabel), GTK_JUSTIFY_CENTER);
771 const char *
const speedlabelbuf =
"Speed";
772 gtk_text_buffer_set_text(speedlabeltext, speedlabelbuf, strlen(speedlabelbuf));
773 gtk_text_view_set_buffer(GTK_TEXT_VIEW(speedlabel), speedlabeltext);
774 gtk_text_view_set_editable(GTK_TEXT_VIEW(speedlabel),
false);
782 gtk_entry_set_max_length(GTK_ENTRY(ueventbox), 20);
783 gtk_entry_set_width_chars(GTK_ENTRY(ueventbox), 5);
784 g_signal_connect(ueventbox,
"activate", G_CALLBACK(
getuserevent), NULL);
790 GtkWidget * w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
792 snprintf(winname, 1024,
"NOE: %s", name);
793 gtk_window_set_title(GTK_WINDOW(w), winname);
794 gtk_window_set_default_size(GTK_WINDOW(w), 400, 68 );
795 g_signal_connect(w,
"delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
797 GtkWidget * tab = gtk_table_new(1, 1,
FALSE);
798 gtk_container_add(GTK_CONTAINER(w), tab);
800 gtk_table_attach(GTK_TABLE(tab),
statbox[si], 0, 1, 0, 1,
801 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
810 gtk_init(NULL, NULL);
811 mainwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
812 gtk_window_set_title(GTK_WINDOW(mainwin),
"NOE: New nOva Event viewer");
813 g_signal_connect(mainwin,
"delete-event", G_CALLBACK(
close_window), 0);
815 g_signal_connect(mainwin,
"configure-event",G_CALLBACK(
redraw_window),NULL);
817 edarea[
i] = gtk_drawing_area_new();
819 g_signal_connect(
edarea[i],
"motion-notify-event", G_CALLBACK(
mouseover), NULL);
820 g_signal_connect(
edarea[i],
"scroll-event", G_CALLBACK(
dozooming),
new bool(i));
821 g_signal_connect(
edarea[i],
"button-press-event",
823 gtk_widget_set_events(
edarea[i], gtk_widget_get_events(
edarea[i])
824 | GDK_POINTER_MOTION_HINT_MASK
825 | GDK_POINTER_MOTION_MASK
826 | GDK_BUTTON_PRESS_MASK
832 GtkWidget *
next = gtk_button_new_with_mnemonic(
"_Next Event");
833 g_signal_connect(next,
"clicked", G_CALLBACK(
to_next),
new bool(
true));
835 GtkWidget *
prev = gtk_button_new_with_mnemonic(
"_Previous Event");
836 g_signal_connect(prev,
"clicked", G_CALLBACK(
to_next),
new bool(
false));
839 cum_ani_checkbox = gtk_check_button_new_with_mnemonic(
"_Cumulative animation");
853 GtkWidget * re_an_button = gtk_button_new_with_mnemonic(
"_Restart animation");
864 ueventbut = gtk_button_new_with_mnemonic(
"_Go to event");
867 const int nrow = 8, ncol = 11;
868 GtkWidget * tab = gtk_table_new(nrow, ncol,
FALSE);
869 gtk_container_add(GTK_CONTAINER(mainwin), tab);
871 GtkWidget * top_row_widgets[ncol] = {
875 GtkWidget * second_row_widgets[ncol] = {
876 NULL, NULL, minticklabel, maxticklabel, NULL,
877 NULL, NULL, NULL, speedlabel, NULL, NULL};
879 for(
int c = 0;
c < ncol;
c++){
880 gtk_table_attach(GTK_TABLE(tab), top_row_widgets[
c], c, c+1, 0, 1,
881 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
883 if(second_row_widgets[c] != NULL)
884 gtk_table_attach(GTK_TABLE(tab),second_row_widgets[c],c,c+1,1,2,
885 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
891 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
893 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
894 gtk_table_attach(GTK_TABLE(tab),
statbox[
stathit], 0, ncol-1, 4, 5,
895 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
897 GtkAttachOptions(GTK_EXPAND | GTK_FILL), GTK_SHRINK, 0, 0);
902 GtkWidget *
const tracksbut = gtk_button_new_with_mnemonic(
"Show _track info");
903 g_signal_connect(tracksbut,
"clicked", G_CALLBACK(
opentrackwin), NULL);
905 GtkWidget *
const vertexbut = gtk_button_new_with_mnemonic(
"Show _vertex info");
906 g_signal_connect(vertexbut,
"clicked", G_CALLBACK(
openvertexwin), NULL);
908 gtk_table_attach(GTK_TABLE(tab), tracksbut, ncol-1, ncol, 2, 4,
909 GtkAttachOptions(GTK_EXPAND | GTK_FILL),
910 GtkAttachOptions(GTK_EXPAND | GTK_FILL), 0, 0);
912 gtk_table_attach(GTK_TABLE(tab), vertexbut, ncol-1, ncol, 4, 6,
913 GtkAttachOptions(GTK_EXPAND | GTK_FILL),
914 GtkAttachOptions(GTK_EXPAND | GTK_FILL), 0, 0);
917 gtk_table_attach(GTK_TABLE(tab),
edarea[
i], 0, ncol,
919 GtkAttachOptions(GTK_EXPAND | GTK_FILL),
920 GtkAttachOptions(GTK_EXPAND | GTK_FILL), 0, 0);
922 gtk_table_attach(GTK_TABLE(tab), gtk_hseparator_new(), 0, ncol,
924 GtkAttachOptions(GTK_EXPAND | GTK_FILL),
925 GtkAttachOptions(GTK_SHRINK), 0, 0);
929 gtk_window_set_default_size(GTK_WINDOW(mainwin), 400, 300);
931 gtk_widget_show_all(mainwin);
943 gtk_widget_queue_draw(mainwin);
965 static bool first =
true;
static gboolean redraw_window(GtkWidget *mainwin, GdkEventConfigure *event, __attribute__((unused)) gpointer d)
T max(const caf::Proxy< T > &a, T b)
void update_active_objects(const noe_view_t V, const int x, const int y)
GtkWidget * edarea[kXorY]
static void adjusttick(GtkWidget *wg, const gpointer dt)
static gboolean clear_error_message(__attribute__((unused)) gpointer dt)
void draw_event(TCanvas *theCanvas, TH2F *h[2], const MatchableEvent &sum)
static bool get_event(const int change)
gboolean redraw_event(__attribute__((unused)) GtkWidget *widg, __attribute__((unused)) GdkEventExpose *ee, __attribute__((unused)) gpointer data)
static void openvertexwin()
Supply basic geometry functions.
static gulong freeruntimeoutid
static GtkWidget * ueventbox
static gboolean draw_event_from_timer(__attribute__((unused)) gpointer data)
static bool adjusttick_callback_inhibit
void draw_vertices(cairo_t **cr, const DRAWPARS *const drawpars)
static gulong freeruninterval
static bool have_event_by_number(const unsigned int n)
void dopanning(const noe_view_t V, GdkEventMotion *gevent)
static GtkWidget * maxtickslider
static GtkWidget * make_aux_win(const char *const name, const statcontents si)
static void opentrackwin()
static void toggle_cum_ani(GtkWidget *w, __attribute__((unused)) gpointer dt)
static gboolean animation_step(__attribute__((unused)) gpointer data)
static GtkWidget * make_ueventbox()
const Var kY([](const caf::SRProxy *sr){float tmp=0.f;if(sr->mc.nu.empty()) return tmp;tmp=sr->mc.nu[0].y;return tmp;})
static gboolean mouseover(GtkWidget *widg, GdkEventMotion *gevent, __attribute__((unused)) gpointer data)
static void draw_whole_user_event()
static void change_highlighted_reco()
const XML_Char const XML_Char * data
static GtkWidget * freerun_checkbox
static void to_next(__attribute__((unused)) GtkWidget *widget, gpointer data)
static void set_bg_color_to_main(GtkWidget *widg)
static void prepare_to_swich_events()
static gboolean pollmouseover(__attribute__((unused)) gpointer data)
std::vector< noeevent > theevents
void set_eventn_status_vertex()
static void close_window()
void set_status(const int boxn, const char *format,...)
static void start_freerun_timer()
void draw_tracks(cairo_t **cr, const DRAWPARS *const drawpars)
gboolean mousebuttonpress(__attribute__((unused)) GtkWidget *widg, GdkEventMotion *gevent, __attribute__((unused)) gpointer data)
__attribute__((unused)) static std
static GtkWidget * ueventbut
void update_active_indices(const noe_view_t V, const int x, const int y, const int TDCSTEP)
static void toggle_freerun(__attribute__((unused)) GtkWidget *w, __attribute__((unused)) gpointer dt)
static GtkWidget * mainwin
static void stop_freerun_timer()
static gulong animationinterval
static gulong statmsgtimeoutid
static GtkWidget * animate_checkbox
static void toggle_animate(GtkWidget *w, __attribute__((unused)) gpointer dt)
GtkTextBuffer * stattext[NSTATBOXES]
static void restart_animation(__attribute__((unused)) GtkWidget *w, __attribute__((unused)) gpointer d)
static gboolean handle_event()
void request_edarea_size()
static void makestatbox(const int i)
GtkWidget * statbox[NSTATBOXES]
static void change_highlighted_cell(const int oldactive_plane, const int oldactive_cell)
static GtkWidget * make_ticklabel(const bool ismax)
void set_eventn_status_runevent()
void draw_hit(cairo_t *cr, const hit &thishit, GtkWidget **edarea)
static bool cumulative_animation
static GtkWidget * make_tickslider(const bool ismax)
static GtkWidget * vertexwin
void realmain(const bool have_read_all)
static gboolean to_next_free_run(__attribute__((unused)) gpointer data)
static void set_intervals(const int speednum)
static void adjustspeed(GtkWidget *wg, __attribute__((unused)) const gpointer dt)
void set_eventn_status_hit()
gboolean dozooming(GtkWidget *widg, GdkEventScroll *gevent, gpointer data)
static GtkWidget * trackwin
static GtkWidget * cum_ani_checkbox
T min(const caf::Proxy< T > &a, T b)
static gulong animatetimeoutid
static GtkWidget * make_speedlabel()
void set_eventn_status_track()
static GtkObject * speedadj
static GtkWidget * mintickslider
static void getuserevent()
static gboolean prefetch_an_event(__attribute__((unused)) gpointer data)
static GtkWidget * make_speedslider()
cairo_pattern_t * eventpattern[kXorY]