diff options
author | Xiao Pan <xyz@flylightning.xyz> | 2025-04-29 04:53:01 -0700 |
---|---|---|
committer | Xiao Pan <xyz@flylightning.xyz> | 2025-04-29 04:53:01 -0700 |
commit | e15bf447a2fa5299f97aef65ba7f1ac4f6a9a9bf (patch) | |
tree | b154164e4b4a0e37389ea5e7b4d41f3224bbe7a5 /remote_plot.c | |
parent | 0146c69a5eab04fe48fe3a906df882ceb17380cf (diff) |
feat: add live button, from and to time entries
Diffstat (limited to 'remote_plot.c')
-rw-r--r-- | remote_plot.c | 74 |
1 files changed, 67 insertions, 7 deletions
diff --git a/remote_plot.c b/remote_plot.c index ca2db60..ee8b577 100644 --- a/remote_plot.c +++ b/remote_plot.c @@ -187,8 +187,14 @@ typedef struct { GtkWidget *checkbutton[VOLTLEN+TEMPLEN]; GtkWidget *volt_label; GtkWidget *temp_label; + GtkWidget *live_toggle; + GtkWidget *from_entry; + GtkWidget *to_entry; // .csv file already read offset uint32_t offset; + uint32_t from_time; + uint32_t to_time; + bool from_time_entered; }DATA; static gboolean sftp_read_sync(gpointer user_data) @@ -401,12 +407,23 @@ static void draw_function (GtkDrawingArea *area, if(!ListIsEmpty(&(data->cans))) { //printf("draw begin\n"); - PLFLT xmin=data->cans.head->item.t; - PLFLT xmax=data->cans.end->item.t; + //PLFLT xmin=data->cans.head->item.t; + //PLFLT xmax=data->cans.end->item.t; + PLFLT xmin,xmax; PLFLT ymin, ymax; int plot_counts=0; gboolean active_checkbutton[VOLTLEN+TEMPLEN]; + if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->live_toggle))) + xmax=data->cans.end->item.t; + else + xmax=data->to_time; + + if(data->from_time_entered) + xmin=data->from_time; + else + xmin=data->cans.head->item.t; + for(int i=0;i<(VOLTLEN+TEMPLEN);i++) if((active_checkbutton[i]=gtk_check_button_get_active(GTK_CHECK_BUTTON(data->checkbutton[i])))) plot_counts++; @@ -467,12 +484,15 @@ static void draw_function (GtkDrawingArea *area, // hershey font code see http://plplot.sourceforge.net/examples.php?demo=07 ? { Node * pnode = data->cans.head; - while(pnode!=NULL) + while(pnode!=NULL && ((pnode->item.t <= xmax) || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->live_toggle))) ) { - if(i<VOLTLEN) - plptex(pnode->item.t,pnode->item.volt[i],1.,0.,0.5,"#(727)"); - else - plptex(pnode->item.t,pnode->item.temp[i-VOLTLEN],1.,0.,0.5,"#(727)"); + if(pnode->item.t >= xmin) + { + if(i<VOLTLEN) + plptex(pnode->item.t,pnode->item.volt[i],1.,0.,0.5,"#(727)"); + else + plptex(pnode->item.t,pnode->item.temp[i-VOLTLEN],1.,0.,0.5,"#(727)"); + } pnode=pnode->next; } } @@ -495,6 +515,23 @@ static void print_data (GtkWidget *widget, gpointer user_data) putchar('\n'); } +static void set_from_time (GtkWidget *widget, gpointer user_data) +{ + DATA *data=user_data; + if(!(data->from_time_entered)) + data->from_time_entered=true; + data->from_time=strtoul(gtk_editable_get_text(GTK_EDITABLE(data->from_entry)),NULL,10); + gtk_widget_queue_draw(data->area); +} + +static void set_to_time (GtkWidget *widget, gpointer user_data) +{ + DATA *data=user_data; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->live_toggle),FALSE); + data->to_time=strtoul(gtk_editable_get_text(GTK_EDITABLE(data->to_entry)),NULL,10); + gtk_widget_queue_draw(data->area); +} + static void activate (GtkApplication *app, gpointer user_data) { DATA *data=user_data; @@ -507,9 +544,28 @@ static void activate (GtkApplication *app, gpointer user_data) GtkWidget *flowbox_temp = gtk_flow_box_new(); GtkWidget *expander_volt = gtk_expander_new("Choose cell voltages to plot"); GtkWidget *expander_temp = gtk_expander_new("Choose cell temperatures to plot"); + GtkWidget *from_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); + GtkWidget *to_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); + GtkWidget *from_button = gtk_button_new_with_label ("Enter from time"); + GtkWidget *to_button = gtk_button_new_with_label ("Enter to time"); + + data->from_entry = gtk_entry_new(); + data->to_entry = gtk_entry_new(); + // TODO: gtk_entry_set_placeholder_text() + //gtk_entry_set_placeholder_text(GTK_ENTRY(data->from_entry),"..."); + gtk_entry_set_max_length(GTK_ENTRY(data->from_entry),10); + gtk_entry_set_max_length(GTK_ENTRY(data->to_entry),10); + gtk_box_append(GTK_BOX(from_box), data->from_entry); + gtk_box_append(GTK_BOX(from_box), from_button); + gtk_box_append(GTK_BOX(to_box), data->to_entry); + gtk_box_append(GTK_BOX(to_box), to_button); + g_signal_connect (from_button, "clicked", G_CALLBACK (set_from_time), user_data); + g_signal_connect (to_button, "clicked", G_CALLBACK (set_to_time), user_data); data->volt_label=gtk_label_new("Average voltage:"); data->temp_label=gtk_label_new("Average temperature:"); + data->live_toggle = gtk_toggle_button_new_with_label("Live"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data->live_toggle),TRUE); for(int i=0;i<(VOLTLEN+TEMPLEN);i++) data->checkbutton[i]=gtk_check_button_new_with_label(checkbutton_names[i]); @@ -551,6 +607,9 @@ static void activate (GtkApplication *app, gpointer user_data) gtk_box_append(GTK_BOX(box), button); gtk_box_append(GTK_BOX(box), data->volt_label); gtk_box_append(GTK_BOX(box), data->temp_label); + gtk_box_append(GTK_BOX(box), data->live_toggle); + gtk_box_append(GTK_BOX(box), from_box); + gtk_box_append(GTK_BOX(box), to_box); gtk_box_append(GTK_BOX(box), expander_volt); gtk_box_append(GTK_BOX(box), expander_temp); gtk_box_append(GTK_BOX(box), data->area); @@ -655,6 +714,7 @@ int main (int argc, char **argv) exit(1); } data.offset=0; + data.from_time_entered=false; //printf("after init\n"); |