29 GtkWidget *
title = gtk_label_new(
"");
30 gtk_label_set_markup(GTK_LABEL(title),
"<big>Monitor</big>");
32 TabAdd(gtk_hseparator_new());
37 this->collecting_data =
false;
38 this->continue_plotting =
false;
39 this->passive_plot =
false;
42 GtkWidget * btn_box1 = gtk_hbutton_box_new();
43 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box1),GTK_BUTTONBOX_START);
44 GtkWidget * btn_box2 = gtk_hbutton_box_new();
45 gtk_button_box_set_layout(GTK_BUTTON_BOX(btn_box2),GTK_BUTTONBOX_START);
46 GtkWidget *label_box = gtk_hbox_new(
false,0);
49 btn_start = gtk_button_new_with_label(
"Start Monitoring");
50 gtk_widget_set_size_request(btn_start,30,20);
51 g_signal_connect(G_OBJECT(btn_start),
53 G_CALLBACK(CB_StartMonitor),
56 btn_stop = gtk_button_new_with_label(
"Stop");
57 gtk_widget_set_sensitive(btn_stop,
false);
58 g_signal_connect(G_OBJECT(btn_stop),
60 G_CALLBACK(CB_StopMonitor),
63 btn_start_collecting = gtk_button_new_with_label(
"Start Collecting");
64 g_signal_connect(G_OBJECT(btn_start_collecting),
66 G_CALLBACK(CB_StartCollect),
70 check_filter = gtk_check_button_new_with_label(
"Enable Filter");
71 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_filter),
false);
72 g_signal_connect(G_OBJECT(check_filter),
74 G_CALLBACK(CB_toggleFilter),
78 GtkWidget *samples_label = gtk_label_new(
"Samples Collected: ");
79 label_collected_samples = gtk_label_new(
"0");
82 gtk_box_pack_start(GTK_BOX(btn_box1),btn_start,
false,
false,2);
83 gtk_box_pack_start(GTK_BOX(btn_box1),btn_start_collecting,
false,
false,2);
84 gtk_box_pack_start(GTK_BOX(btn_box1),gtk_label_new(
"Data Source: "),
false,
false, 2);
85 gtk_box_pack_start(GTK_BOX(btn_box1),
getView()->getDataSource()->getCombo(),
false,
false,2);
86 gtk_box_pack_start(GTK_BOX(btn_box2),btn_stop,
false,
false,2);
87 gtk_box_pack_start(GTK_BOX(btn_box2),check_filter,
false,
false,2);
88 gtk_box_pack_start(GTK_BOX(label_box),samples_label,
false,
false,2);
89 gtk_box_pack_start(GTK_BOX(label_box),label_collected_samples,
false,
false,2);
92 GtkWidget * btn_boxes = gtk_vbox_new(
false,0);
93 gtk_box_pack_start(GTK_BOX(btn_boxes), btn_box1,
false,
false, 0);
94 gtk_box_pack_start(GTK_BOX(btn_boxes), btn_box2,
false,
false, 0);
111 this->updating_view =
true;
113 if(this->continue_plotting)
115 if(this->collecting_data)
117 gtk_widget_set_sensitive(btn_start,
false);
118 gtk_widget_set_sensitive(btn_stop,
true);
119 gtk_widget_set_sensitive(btn_start_collecting,
false);
123 gtk_widget_set_sensitive(btn_start,
false);
124 gtk_widget_set_sensitive(btn_stop,
true);
125 gtk_widget_set_sensitive(btn_start_collecting,
false);
130 gtk_widget_set_sensitive(btn_start,
true);
131 gtk_widget_set_sensitive(btn_stop,
false);
132 gtk_widget_set_sensitive(btn_start_collecting,
true);
136 gtk_label_set_text(GTK_LABEL(label_collected_samples),
140 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_filter),filter);
142 this->updating_view =
false;
158 this->passive_plot =
true;
160 this->collecting_data =
false;
161 this->collecting_data =
false;
177 void TabMonitor::createPlot()
181 plot =
new EEGMonitor(
this,this->
getView()->getModel()->channelsGetNumEnabledChannels());
184 TabAdd(*plot,
true,
true, 0);
194 bool TabMonitor::startDataSource()
202 string msg =
"There was an error starting the data source. \n("+string(e.what())+
")";
206 if(!
getView()->getModel()->dataIsStarted())
208 WidgetUtils::AlertError(
"Error Starting Data Source",
"There was an error starting the data source. Check device configuration.");
218 void TabMonitor::startPlotting()
223 continue_plotting =
true;
229 if(this->collecting_data)
235 g_timeout_add(100, timedPlot,
this);
241 gint TabMonitor::timedPlot(gpointer parent)
246 if(tab->passive_plot && !tab->plot->
isDetached())
252 if(!tab->continuePlotting())
259 if(!tab->passive_plot)
263 gtk_label_set_text(GTK_LABEL(tab->label_collected_samples),
268 if(!tab->collecting_data)
272 ublas::matrix<double> d = (data.getMatrix());
277 tab->plot->
Plot(data);
283 if(!tab->collecting_data)
290 cout << e.
what() <<
"\n";
294 cerr << e.
what() <<
"\n";
299 string msg =
"Failed to process data. \n(" + string(e.
what()) +
")";
305 string msg =
"Failed to process data. \n(" + string(e.what()) +
")";
313 void TabMonitor::stopPlotting()
315 if(!this->passive_plot)
318 this->continue_plotting =
false;
319 this->collecting_data =
false;
320 this->passive_plot =
false;
327 void TabMonitor::stopDataSource()
338 void TabMonitor::CB_StartMonitor(GtkWidget *w, gpointer data)
341 if(!tab->passive_plot)
343 if(tab->startDataSource())
344 tab->startPlotting();
348 tab->startPlotting();
351 void TabMonitor::CB_StopMonitor(GtkWidget *w, gpointer data)
354 if(!tab->passive_plot)
355 tab->stopDataSource();
358 void TabMonitor::CB_StartCollect(GtkWidget *w, gpointer data)
361 tab->collecting_data =
true;
362 tab->CB_StartMonitor(w,data);
366 void TabMonitor::CB_toggleFilter(GtkWidget *w, gpointer data)
370 if(!tab->updating_view)
373 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tab->check_filter));