aboutsummaryrefslogtreecommitdiff
path: root/remote_plot.c
diff options
context:
space:
mode:
authorXiao Pan <xyz@flylightning.xyz>2025-04-29 04:53:01 -0700
committerXiao Pan <xyz@flylightning.xyz>2025-04-29 04:53:01 -0700
commite15bf447a2fa5299f97aef65ba7f1ac4f6a9a9bf (patch)
treeb154164e4b4a0e37389ea5e7b4d41f3224bbe7a5 /remote_plot.c
parent0146c69a5eab04fe48fe3a906df882ceb17380cf (diff)
feat: add live button, from and to time entries
Diffstat (limited to 'remote_plot.c')
-rw-r--r--remote_plot.c74
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");