diff options
| author | Maria <matveeva.maria@gmail.com> | 2013-11-06 12:44:39 +0100 | 
|---|---|---|
| committer | Maria <matveeva.maria@gmail.com> | 2013-11-06 14:04:56 +0100 | 
| commit | 62da8b72040f2d2d17cffbc8e6028a907d01ba7e (patch) | |
| tree | 9466313ede3611214e3c7039072cb5e2b49e7c9d /bin/gui | |
| parent | f94e0d52f183b9fc0aec9f72c425240959041b6f (diff) | |
| download | uca-62da8b72040f2d2d17cffbc8e6028a907d01ba7e.tar.gz uca-62da8b72040f2d2d17cffbc8e6028a907d01ba7e.tar.bz2 uca-62da8b72040f2d2d17cffbc8e6028a907d01ba7e.tar.xz uca-62da8b72040f2d2d17cffbc8e6028a907d01ba7e.zip  | |
Add more statistics
Diffstat (limited to 'bin/gui')
| -rw-r--r-- | bin/gui/control.c | 124 | ||||
| -rw-r--r-- | bin/gui/control.glade | 82 | 
2 files changed, 166 insertions, 40 deletions
diff --git a/bin/gui/control.c b/bin/gui/control.c index a73a6c1..38fcbca 100644 --- a/bin/gui/control.c +++ b/bin/gui/control.c @@ -47,16 +47,21 @@ typedef struct {      GtkWidget   *properties_expander;      GtkWidget   *zoom_box;      GtkWidget   *colormap_box; +    GtkWidget   *event_box;      GtkLabel    *mean_label;      GtkLabel    *sigma_label;      GtkLabel    *max_label;      GtkLabel    *min_label; +    GtkLabel    *x_label; +    GtkLabel    *y_label; +    GtkLabel    *val_label;      GtkDialog       *download_dialog;      GtkProgressBar  *download_progressbar;      GtkAdjustment   *download_adjustment;      GtkAdjustment   *count; -    GtkAdjustment   *hadjustment, *vadjustment; +    GtkAdjustment   *hadjustment; +    GtkAdjustment   *vadjustment;      GtkWidget       *histogram_view;      GtkToggleButton *histogram_button; @@ -66,7 +71,6 @@ typedef struct {      RingBuffer  *buffer;      guchar      *pixels;      gint         display_width, display_height; -    gint         page_width, page_height;      gint         colormap;      gdouble      zoom_factor;      State        state; @@ -76,6 +80,7 @@ typedef struct {      gint         timestamp;      gint         width, height;      gint         pixel_size; +    gint         ev_x, ev_y;  } ThreadData;  static UcaPluginManager *plugin_manager; @@ -102,28 +107,28 @@ up_and_down_scale (ThreadData *data, gpointer buffer)      output = data->pixels;      zoom = (gint) data->zoom_factor;      stride = (gint) 1 / data->zoom_factor; +    gint page_width = gtk_adjustment_get_page_size (GTK_ADJUSTMENT (data->hadjustment)); +    gint page_height = gtk_adjustment_get_page_size (GTK_ADJUSTMENT (data->vadjustment));      do_log = gtk_toggle_button_get_active (data->log_button);      if (data->state == RUNNING) { -        gint page_width = gtk_adjustment_get_page_size (GTK_ADJUSTMENT (data->hadjustment)); -        gint page_height = gtk_adjustment_get_page_size (GTK_ADJUSTMENT (data->vadjustment));          start_wval = gtk_adjustment_get_value (GTK_ADJUSTMENT (data->hadjustment));          start_hval = gtk_adjustment_get_value (GTK_ADJUSTMENT (data->vadjustment)); -        data->page_width = (page_width + start_wval); -        data->page_height = (page_height + start_hval); +        page_width += start_wval; +        page_height += start_hval;      }      else {          start_wval = 0;          start_hval = 0; -        data->page_width = data->display_width; -        data->page_height = data->display_height; +        page_width = data->display_width; +        page_height = data->display_height;      }      if (data->pixel_size == 1) {          guint8 *input = (guint8 *) buffer;          for (gint y = 0; y < data->display_height; y++) { -            if (zoom <= 1){  +            if (zoom <= 1) {                   offset = y * stride * data->width;              } @@ -133,8 +138,8 @@ up_and_down_scale (ThreadData *data, gpointer buffer)                  else                      offset = ((gint) (y / zoom) * data->width) + ((gint) (x / zoom)); -                if (y >= start_hval && y < data->page_height) {    -                    if (x >= start_wval && x < data->page_width) { +                if (y >= start_hval && y < page_height) {    +                    if (x >= start_wval && x < page_width) {                          if (do_log)                              dval = log ((input[offset] - min) * factor); @@ -203,8 +208,8 @@ up_and_down_scale (ThreadData *data, gpointer buffer)                  else                      offset = ((gint) (y / zoom) * data->width) + ((gint) (x / zoom)); -                if (y >= start_hval && y < data->page_height)  {    -                    if (x >= start_wval && x < data->page_width) { +                if (y >= start_hval && y < page_height)  {    +                    if (x >= start_wval && x < page_width) {                          if (do_log)                              dval = log ((input[offset] - min) * factor); @@ -317,6 +322,55 @@ get_statistics (ThreadData *data, gdouble *mean, gdouble *sigma, guint *_max, gu  }  static void +on_motion_notify (GtkWidget *event_box, GdkEventMotion *event, ThreadData *data) +{ +    gint page_width = gtk_adjustment_get_page_size(GTK_ADJUSTMENT(data->hadjustment)); +    gint page_height = gtk_adjustment_get_page_size(GTK_ADJUSTMENT(data->vadjustment)); +    gint start_wval = gtk_adjustment_get_value (GTK_ADJUSTMENT (data->hadjustment)); +    gint start_hval = gtk_adjustment_get_value (GTK_ADJUSTMENT (data->vadjustment)); +    page_width += start_wval; +    page_height += start_hval; +   +    if ((data->display_width < page_width) && (data->display_height < page_height)) { +        gint startx = (page_width - data->display_width) / 2; +        data->ev_x = event->x - startx; +        gint starty = (page_height - data->display_height) / 2; +        data->ev_y = event->y - starty; +    }   +    else { +         data->ev_x = event->x; +         data->ev_y = event->y; +    } + +    if ((data->state != RUNNING) || ((data->ev_x >= 0 && data->ev_y >= 0) && (data->ev_y <= data->display_height && data->ev_x <= data->display_width))) {  +        gpointer *buffer;  +        GString *string;  +        buffer = ring_buffer_get_current_pointer (data->buffer); +        string = g_string_new_len (NULL, 32); +        gint i = (data->ev_y / data->zoom_factor) * data->width + data->ev_x / data->zoom_factor; + +        if (data->pixel_size == 1) { +            guint8 *input = (guint8 *) buffer; +            guint8 val = input[i];    +            g_string_printf (string, "val = %i", val); +            gtk_label_set_text (data->val_label, string->str); +        } +        else if (data->pixel_size == 2) { +            guint16 *input = (guint16 *) buffer; +            guint16 val = input[i]; +            g_string_printf (string, "val = %i", val); +            gtk_label_set_text (data->val_label, string->str); +        } + +        g_string_printf (string, "x = %i", data->ev_x); +        gtk_label_set_text (data->x_label, string->str); + +        g_string_printf (string, "y = %i", data->ev_y); +        gtk_label_set_text (data->y_label, string->str); +    } +} + +static void  update_pixbuf (ThreadData *data)  {      GString *string; @@ -401,23 +455,50 @@ preview_frames (void *args)  {      ThreadData *data = (ThreadData *) args;      gint counter = 0; -    GError *error = NULL;; +    GError *error = NULL;      while (data->state == RUNNING) { -        gpointer buffer; +        gpointer *buffer;          buffer = ring_buffer_get_current_pointer (data->buffer);          uca_camera_grab (data->camera, buffer, &error); +           if (error == NULL) {              up_and_down_scale (data, buffer);              gdk_threads_enter ();              update_pixbuf (data); + +            if ((data->ev_x >= 0 && data->ev_y >= 0) && (data->ev_y <= data->display_height && data->ev_x <= data->display_width)) { +                GString *string;  +                string = g_string_new_len (NULL, 32); +                gint i = (data->ev_y / data->zoom_factor) * data->width + data->ev_x / data->zoom_factor; + +                if (data->pixel_size == 1) { +                    guint8 *input = (guint8 *) buffer; +                    guint8 val = input[i];    +                    g_string_printf (string, "val = %i", val); +                    gtk_label_set_text (data->val_label, string->str);  +                } +                else if (data->pixel_size == 2) { +                    guint16 *input = (guint16 *) buffer; +                    guint16 val = input[i]; +                    g_string_printf (string, "val = %i", val); +                    gtk_label_set_text (data->val_label, string->str);   +                } + +                g_string_printf (string, "x = %i", data->ev_x); +                gtk_label_set_text (data->x_label, string->str); + +                g_string_printf (string, "y = %i", data->ev_y); +                gtk_label_set_text (data->y_label, string->str); +            } +              gdk_threads_leave ();              counter++; -        } +            }          else              print_and_free_error (&error);      } @@ -799,7 +880,6 @@ create_main_window (GtkBuilder *builder, const gchar* camera_name)      g_signal_connect (camera, "notify::roi-width", (GCallback) on_roi_width_changed, &td);      g_signal_connect (camera, "notify::roi-height", (GCallback) on_roi_height_changed, &td); -      histogram_view      = egg_histogram_view_new (width * height, bits_per_sample, 256);      property_tree_view  = egg_property_tree_view_new (G_OBJECT (camera));      image               = GTK_WIDGET (gtk_builder_get_object (builder, "image")); @@ -823,14 +903,17 @@ create_main_window (GtkBuilder *builder, const gchar* camera_name)      td.hadjustment      = GTK_ADJUSTMENT (gtk_builder_get_object(builder, "hadjustment"));      td.vadjustment      = GTK_ADJUSTMENT (gtk_builder_get_object(builder, "vadjustment")); -    td.page_width       = gtk_adjustment_get_page_size(GTK_ADJUSTMENT(td.hadjustment)); -    td.page_height      = gtk_adjustment_get_page_size(GTK_ADJUSTMENT(td.vadjustment)); +    td.event_box        = GTK_WIDGET (gtk_builder_get_object(builder, "eventbox"));      td.mean_label       = GTK_LABEL (gtk_builder_get_object (builder, "mean-label"));      td.sigma_label      = GTK_LABEL (gtk_builder_get_object (builder, "sigma-label"));      td.max_label        = GTK_LABEL (gtk_builder_get_object (builder, "max-label"));      td.min_label        = GTK_LABEL (gtk_builder_get_object (builder, "min-label")); +    td.x_label          = GTK_LABEL (gtk_builder_get_object (builder, "x-label1")); +    td.y_label          = GTK_LABEL (gtk_builder_get_object (builder, "y-label1")); +    td.val_label        = GTK_LABEL (gtk_builder_get_object (builder, "val-label1")); +      td.download_dialog  = GTK_DIALOG (gtk_builder_get_object (builder, "download-dialog"));      td.download_adjustment = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "download-adjustment")); @@ -894,7 +977,8 @@ create_main_window (GtkBuilder *builder, const gchar* camera_name)      g_signal_connect (gtk_builder_get_object (builder, "colormap-box"),                        "changed", G_CALLBACK (on_colormap_changed), &td); - +    +    g_signal_connect (td.event_box, "motion-notify-event", G_CALLBACK (on_motion_notify), &td);      g_signal_connect (td.frame_slider, "value-changed", G_CALLBACK (on_frame_slider_changed), &td);      g_signal_connect (td.start_button, "clicked", G_CALLBACK (on_start_button_clicked), &td);      g_signal_connect (td.stop_button, "clicked", G_CALLBACK (on_stop_button_clicked), &td); diff --git a/bin/gui/control.glade b/bin/gui/control.glade index a8b90ca..8d72d70 100644 --- a/bin/gui/control.glade +++ b/bin/gui/control.glade @@ -472,10 +472,19 @@                      <property name="can_focus">False</property>                      <property name="resize_mode">queue</property>                      <child> -                      <object class="GtkImage" id="image"> +                      <object class="GtkEventBox" id="eventbox">                          <property name="visible">True</property>                          <property name="can_focus">False</property> -                        <property name="stock">gtk-missing-image</property> +                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property> +                        <property name="resize_mode">queue</property> +                        <child> +                          <object class="GtkImage" id="image"> +                            <property name="visible">True</property> +                            <property name="can_focus">False</property> +                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_STRUCTURE_MASK</property> +                            <property name="stock">gtk-missing-image</property> +                          </object> +                        </child>                        </object>                      </child>                    </object> @@ -915,17 +924,6 @@                              <property name="column_spacing">6</property>                              <property name="row_spacing">6</property>                              <child> -                              <object class="GtkLabel" id="label20"> -                                <property name="visible">True</property> -                                <property name="can_focus">False</property> -                                <property name="xalign">0</property> -                                <property name="label" translatable="yes">Pixel counts:</property> -                              </object> -                              <packing> -                                <property name="x_options">GTK_FILL</property> -                              </packing> -                            </child> -                            <child>                                <object class="GtkLabel" id="label21">                                  <property name="visible">True</property>                                  <property name="can_focus">False</property> @@ -933,8 +931,6 @@                                  <property name="label" translatable="yes">Distribution:</property>                                </object>                                <packing> -                                <property name="top_attach">1</property> -                                <property name="bottom_attach">2</property>                                  <property name="x_options">GTK_FILL</property>                                </packing>                              </child> @@ -999,23 +995,69 @@                                <packing>                                  <property name="left_attach">1</property>                                  <property name="right_attach">2</property> -                                <property name="top_attach">1</property> -                                <property name="bottom_attach">2</property>                                  <property name="y_options"></property>                                </packing>                              </child>                              <child> -                              <object class="GtkLabel" id="label26"> +                              <object class="GtkHBox" id="hbox4">                                  <property name="visible">True</property>                                  <property name="can_focus">False</property> -                                <property name="xalign">0</property> -                                <property name="label" translatable="yes">0</property> +                                <property name="spacing">6</property> +                                <child> +                                  <object class="GtkLabel" id="x-label1"> +                                    <property name="visible">True</property> +                                    <property name="can_focus">False</property> +                                    <property name="xalign">0</property> +                                    <property name="label" translatable="yes">x = 0.0</property> +                                  </object> +                                  <packing> +                                    <property name="expand">True</property> +                                    <property name="fill">True</property> +                                    <property name="position">0</property> +                                  </packing> +                                </child> +                                <child> +                                  <object class="GtkLabel" id="y-label1"> +                                    <property name="visible">True</property> +                                    <property name="can_focus">False</property> +                                    <property name="xalign">0</property> +                                    <property name="label" translatable="yes">y = 0.0</property> +                                  </object> +                                  <packing> +                                    <property name="expand">True</property> +                                    <property name="fill">True</property> +                                    <property name="position">1</property> +                                  </packing> +                                </child> +                                <child> +                                  <object class="GtkLabel" id="val-label1"> +                                    <property name="visible">True</property> +                                    <property name="can_focus">False</property> +                                    <property name="xalign">0</property> +                                    <property name="label" translatable="yes">val = 0</property> +                                  </object> +                                  <packing> +                                    <property name="expand">True</property> +                                    <property name="fill">True</property> +                                    <property name="position">2</property> +                                  </packing> +                                </child> +                                <child> +                                  <placeholder/> +                                </child>                                </object>                                <packing>                                  <property name="left_attach">1</property>                                  <property name="right_attach">2</property> +                                <property name="top_attach">1</property> +                                <property name="bottom_attach">2</property> +                                <property name="x_options">GTK_FILL</property> +                                <property name="y_options"></property>                                </packing>                              </child> +                            <child> +                              <placeholder/> +                            </child>                            </object>                            <packing>                              <property name="expand">True</property>  | 
