diff options
Diffstat (limited to 'src/dw-hdfsee.c')
-rw-r--r-- | src/dw-hdfsee.c | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/src/dw-hdfsee.c b/src/dw-hdfsee.c index bd13dbe9..e92dcd1e 100644 --- a/src/dw-hdfsee.c +++ b/src/dw-hdfsee.c @@ -312,10 +312,27 @@ static void show_simple_ring(cairo_t *cr, DisplayWindow *dw, cairo_stroke(cr); } +static struct rigid_group *find_corresponding_rigid_group(DisplayWindow *dw, + struct panel *p) { + + int gi; + + for (gi=0; gi<dw->rg_coll->n_rigid_groups; gi++) { + if (panel_is_in_rigid_group(dw->rg_coll->rigid_groups[gi], + p)) { + return dw->rg_coll->rigid_groups[gi]; + } + } + + return NULL; +} + static void maybe_draw_focus(DisplayWindow *dw, cairo_t *cr, int i, cairo_matrix_t *basic_m) { + struct rigid_group *rg = NULL; + switch ( dw->calib_mode ) { case CALIBMODE_NONE: @@ -329,9 +346,9 @@ static void maybe_draw_focus(DisplayWindow *dw, cairo_t *cr, int i, break; case CALIBMODE_GROUPS: - if ( dw->image->det->panels[i].rigid_group == - dw->calib_mode_curr_rg ) - { + rg = find_corresponding_rigid_group(dw, + &dw->image->det->panels[i]); + if (rg == dw->calib_mode_curr_rg) { draw_calib_focus_rectangle(cr, basic_m, dw, i); cairo_stroke(cr); } @@ -1251,6 +1268,26 @@ static gint displaywindow_set_calibmode(GtkWidget *d, DisplayWindow *dw) return 0; } + if (dw->rg_coll_name == NULL) { + dw->rg_coll = dw->image->det->rigid_group_collections[0]; + if (dw->rg_coll == NULL) { + ERROR("Cannot find asuitable rigid group collection.\n"); + gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(w), + 0); + return 0; + } + } else { + dw->rg_coll = find_rigid_group_collection_by_name(dw->image->det, + dw->rg_coll_name); + if (dw->rg_coll == NULL) { + ERROR("Cannot find rigid group collection: %s\n", + dw->rg_coll_name); + gtk_check_menu_item_set_state(GTK_CHECK_MENU_ITEM(w), + 0); + return 0; + } + } + /* Get new value */ val = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)); @@ -2203,8 +2240,14 @@ static void toggle_calibmode_groupmode(DisplayWindow *dw) if ( det->n_rigid_groups != det->n_panels ) { /* Only change if there are any rigid groups defined */ dw->calib_mode = CALIBMODE_GROUPS; - rg = dw->calib_mode_curr_p->rigid_group; - dw->calib_mode_curr_rg = rg; + rg = find_corresponding_rigid_group(dw, + dw->calib_mode_curr_p); + if ( rg == NULL) { + dw->calib_mode = CALIBMODE_ALL; + } else { + dw->calib_mode_curr_rg = rg; + } + } else { /* ...otherwise skip to ALL mode */ dw->calib_mode = CALIBMODE_ALL; @@ -2521,6 +2564,12 @@ DisplayWindow *displaywindow_open(char *filename, char *geom_filename, } else { dw->geom_filename = NULL; } + if (rgcoll_name != NULL) { + dw->rg_coll_name = strdup(rgcoll_name); + } else { + dw->rg_coll_name = NULL; + } + dw->image->det = det_geom; dw->image->beam = beam; dw->image->lambda = 0.0; @@ -2645,16 +2694,6 @@ DisplayWindow *displaywindow_open(char *filename, char *geom_filename, gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE); } - if ( rgcoll_name != NULL ) { - - dw->rg_coll = dw->image->det->rigid_group_collections[0]; - if ( dw->rg_coll == NULL ) { - ERROR("Cannot find suitable rigid group collection.\n", - rgcoll_name); - return NULL; - } - } - ww = gtk_ui_manager_get_widget(dw->ui, "/ui/displaywindow/events"); |