aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-01-07 12:16:34 +0100
committerThomas White <taw@physics.org>2021-01-07 12:27:06 +0100
commit97eb1a231a07777a961efe6a389597989d1b7dc4 (patch)
tree303e93bd9bad6e13cf71fb705b5a7a096f160b4b /src
parent801aca3557fed6883ccc7a84b5ca38005cb6244c (diff)
GUI: Basic labelling of reflections
Lots of improvements still to be made here, such as using the "real" Cairo text API as well as using proper overlines for negative indices.
Diffstat (limited to 'src')
-rw-r--r--src/crystfel_gui.c18
-rw-r--r--src/crystfelimageview.c40
-rw-r--r--src/crystfelimageview.h4
-rw-r--r--src/gui_project.c6
-rw-r--r--src/gui_project.h1
5 files changed, 66 insertions, 3 deletions
diff --git a/src/crystfel_gui.c b/src/crystfel_gui.c
index cf727018..09011830 100644
--- a/src/crystfel_gui.c
+++ b/src/crystfel_gui.c
@@ -204,6 +204,8 @@ void update_imageview(struct crystfelproject *proj)
crystfel_image_view_set_show_reflections(CRYSTFEL_IMAGE_VIEW(proj->imageview),
proj->show_refls);
+ crystfel_image_view_set_label_reflections(CRYSTFEL_IMAGE_VIEW(proj->imageview),
+ proj->label_refls);
crystfel_image_view_set_refl_box_size(CRYSTFEL_IMAGE_VIEW(proj->imageview),
proj->indexing_params.ir_inn);
crystfel_image_view_set_show_peaks(CRYSTFEL_IMAGE_VIEW(proj->imageview),
@@ -740,6 +742,15 @@ static gint show_refls_sig(GtkWidget *w, struct crystfelproject *proj)
}
+static gint label_refls_sig(GtkWidget *w, struct crystfelproject *proj)
+{
+ proj->label_refls = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(w));
+ crystfel_image_view_set_label_reflections(CRYSTFEL_IMAGE_VIEW(proj->imageview),
+ proj->label_refls);
+ return FALSE;
+}
+
+
static void add_menu_bar(struct crystfelproject *proj, GtkWidget *vbox)
{
GError *error = NULL;
@@ -752,6 +763,7 @@ static void add_menu_bar(struct crystfelproject *proj, GtkWidget *vbox)
"<menu name=\"view\" action=\"ViewAction\" >"
" <menuitem name=\"peaks\" action=\"PeaksAction\" />"
" <menuitem name=\"refls\" action=\"ReflsAction\" />"
+ " <menuitem name=\"labelrefls\" action=\"LabelReflsAction\" />"
"</menu>"
"<menu name=\"tools\" action=\"ToolsAction\" >"
"</menu>"
@@ -783,6 +795,8 @@ static void add_menu_bar(struct crystfelproject *proj, GtkWidget *vbox)
G_CALLBACK(show_peaks_sig), FALSE },
{ "ReflsAction", NULL, "Calculated reflection positions", NULL, NULL,
G_CALLBACK(show_refls_sig), FALSE },
+ { "LabelReflsAction", NULL, "Show reflection indices", NULL, NULL,
+ G_CALLBACK(label_refls_sig), FALSE },
};
proj->action_group = gtk_action_group_new("cellwindow");
@@ -1093,6 +1107,10 @@ int main(int argc, char *argv[])
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(w),
proj.show_refls);
+ w = gtk_ui_manager_get_action(proj.ui, "/mainwindow/view/labelrefls");
+ gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(w),
+ proj.label_refls);
+
update_imageview(&proj);
}
diff --git a/src/crystfelimageview.c b/src/crystfelimageview.c
index 0117c79b..26e06bce 100644
--- a/src/crystfelimageview.c
+++ b/src/crystfelimageview.c
@@ -433,8 +433,10 @@ static void draw_peaks(cairo_t *cr, CrystFELImageView *iv,
}
-static void draw_refls(cairo_t *cr, CrystFELImageView *iv,
- RefList *list)
+static void draw_refls(cairo_t *cr,
+ CrystFELImageView *iv,
+ RefList *list,
+ int label_reflections)
{
const Reflection *refl;
RefListIterator *iter;
@@ -494,6 +496,27 @@ static void draw_refls(cairo_t *cr, CrystFELImageView *iv,
cairo_stroke(cr);
}
+ if ( label_reflections ) {
+
+ signed int h, k, l;
+ char tmp[64];
+
+ get_indices(refl, &h, &k, &l);
+ snprintf(tmp, 64, "%i %i %i", h, k, l);
+
+ cairo_save(cr);
+ cairo_new_path(cr);
+ cairo_move_to(cr, x, y);
+ cairo_set_source_rgb(cr, 0.0, 0.4, 0.0);
+ cairo_set_font_size(cr, 11*p->pixel_pitch);
+ cairo_scale(cr, 1.0, -1.0);
+ cairo_show_text(cr, tmp);
+ cairo_fill(cr);
+ cairo_restore(cr);
+
+ }
+
+
}
}
@@ -536,7 +559,9 @@ static gint draw_sig(GtkWidget *window, cairo_t *cr, CrystFELImageView *iv)
int i;
for ( i=0; i<iv->image->n_crystals; i++ ) {
Crystal *cry = iv->image->crystals[i];
- draw_refls(cr, iv, crystal_get_reflections(cry));
+ draw_refls(cr, iv,
+ crystal_get_reflections(cry),
+ iv->label_refls);
}
}
@@ -687,6 +712,7 @@ GtkWidget *crystfel_image_view_new()
iv->pixbufs = NULL;
iv->peak_box_size = 1.0;
iv->refl_box_size = 1.0;
+ iv->label_refls = 1;
g_signal_connect(G_OBJECT(iv), "destroy",
G_CALLBACK(destroy_sig), iv);
@@ -952,6 +978,14 @@ void crystfel_image_view_set_show_reflections(CrystFELImageView *iv,
}
+void crystfel_image_view_set_label_reflections(CrystFELImageView *iv,
+ int label_refls)
+{
+ iv->label_refls = label_refls;
+ rerender_image(iv);
+}
+
+
void crystfel_image_view_set_peak_box_size(CrystFELImageView *iv,
float box_size)
{
diff --git a/src/crystfelimageview.h b/src/crystfelimageview.h
index a8f8df99..0ea2ab87 100644
--- a/src/crystfelimageview.h
+++ b/src/crystfelimageview.h
@@ -88,6 +88,7 @@ struct _crystfelimageview
double brightness;
int show_peaks;
int show_refls;
+ int label_refls;
float peak_box_size;
float refl_box_size;
};
@@ -117,6 +118,9 @@ extern void crystfel_image_view_set_show_peaks(CrystFELImageView *iv,
extern void crystfel_image_view_set_show_reflections(CrystFELImageView *iv,
int show_refls);
+extern void crystfel_image_view_set_label_reflections(CrystFELImageView *iv,
+ int label_refls);
+
extern void crystfel_image_view_set_peak_box_size(CrystFELImageView *iv,
float box_size);
diff --git a/src/gui_project.c b/src/gui_project.c
index f909eb29..d88ea791 100644
--- a/src/gui_project.c
+++ b/src/gui_project.c
@@ -420,6 +420,10 @@ static void handle_var(const char *key, const char *val,
proj->show_refls = parse_int(val);
}
+ if ( strcmp(key, "label_refls") == 0 ) {
+ proj->label_refls = parse_int(val);
+ }
+
if ( strcmp(key, "geom") == 0 ) {
proj->geom_filename = strdup(val);
}
@@ -843,6 +847,7 @@ int save_project(struct crystfelproject *proj)
fprintf(fh, "show_peaks %i\n", proj->show_peaks);
fprintf(fh, "show_refls %i\n", proj->show_refls);
+ fprintf(fh, "label_refls %i\n", proj->label_refls);
fprintf(fh, "-----\n");
for ( i=0; i<proj->n_results; i++ ) {
@@ -917,6 +922,7 @@ void default_project(struct crystfelproject *proj)
/* Default parameter values */
proj->show_peaks = 1;
proj->show_refls = 1;
+ proj->label_refls = 1;
proj->peak_search_params.method = PEAK_ZAEF;
proj->peak_search_params.threshold = 800.0;
diff --git a/src/gui_project.h b/src/gui_project.h
index e1f47712..bb85be43 100644
--- a/src/gui_project.h
+++ b/src/gui_project.h
@@ -231,6 +231,7 @@ struct crystfelproject {
struct peak_params peak_search_params;
int show_refls;
+ int label_refls;
struct index_params indexing_params;
int indexing_backend_selected;
GtkWidget *indexing_opts;