diff options
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | Makefile.in | 18 | ||||
-rw-r--r-- | src/dw-geomatic.c | 801 | ||||
-rw-r--r-- | src/dw-geomatic.h | 68 | ||||
-rw-r--r-- | src/dw-hdfsee.c (renamed from src/displaywindow.c) | 4 | ||||
-rw-r--r-- | src/dw-hdfsee.h (renamed from src/displaywindow.h) | 2 | ||||
-rw-r--r-- | src/hdfsee.c | 2 | ||||
-rw-r--r-- | src/hdfsee.h | 2 |
8 files changed, 15 insertions, 884 deletions
diff --git a/Makefile.am b/Makefile.am index 37c63756..ac2e44e5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -50,7 +50,7 @@ endif if HAVE_GTK -src_hdfsee_SOURCES = src/hdfsee.c src/displaywindow.c src/render.c \ +src_hdfsee_SOURCES = src/hdfsee.c src/dw-hdfsee.c src/render.c \ src/hdf5-file.c src/utils.c src/image.c src/filters.c \ src/thread-pool.c src/detector.c endif diff --git a/Makefile.in b/Makefile.in index 1c6d8480..07013079 100644 --- a/Makefile.in +++ b/Makefile.in @@ -129,14 +129,14 @@ am_src_get_hkl_OBJECTS = src/get_hkl.$(OBJEXT) src/sfac.$(OBJEXT) \ src_get_hkl_OBJECTS = $(am_src_get_hkl_OBJECTS) src_get_hkl_LDADD = $(LDADD) src_get_hkl_DEPENDENCIES = $(top_builddir)/lib/libgnu.a -am__src_hdfsee_SOURCES_DIST = src/hdfsee.c src/displaywindow.c \ +am__src_hdfsee_SOURCES_DIST = src/hdfsee.c src/dw-hdfsee.c \ src/render.c src/hdf5-file.c src/utils.c src/image.c \ src/filters.c src/thread-pool.c src/detector.c @HAVE_GTK_TRUE@am_src_hdfsee_OBJECTS = src/hdfsee.$(OBJEXT) \ -@HAVE_GTK_TRUE@ src/displaywindow.$(OBJEXT) \ -@HAVE_GTK_TRUE@ src/render.$(OBJEXT) src/hdf5-file.$(OBJEXT) \ -@HAVE_GTK_TRUE@ src/utils.$(OBJEXT) src/image.$(OBJEXT) \ -@HAVE_GTK_TRUE@ src/filters.$(OBJEXT) src/thread-pool.$(OBJEXT) \ +@HAVE_GTK_TRUE@ src/dw-hdfsee.$(OBJEXT) src/render.$(OBJEXT) \ +@HAVE_GTK_TRUE@ src/hdf5-file.$(OBJEXT) src/utils.$(OBJEXT) \ +@HAVE_GTK_TRUE@ src/image.$(OBJEXT) src/filters.$(OBJEXT) \ +@HAVE_GTK_TRUE@ src/thread-pool.$(OBJEXT) \ @HAVE_GTK_TRUE@ src/detector.$(OBJEXT) src_hdfsee_OBJECTS = $(am_src_hdfsee_OBJECTS) src_hdfsee_LDADD = $(LDADD) @@ -598,7 +598,7 @@ src_indexamajig_SOURCES = src/indexamajig.c src/hdf5-file.c \ src/dirax.c src/mosflm.c src/reflections.c src/templates.c \ src/symmetry.c src/geometry.c src/thread-pool.c \ src/beam-parameters.c src/reflist.c $(am__append_4) -@HAVE_GTK_TRUE@src_hdfsee_SOURCES = src/hdfsee.c src/displaywindow.c src/render.c \ +@HAVE_GTK_TRUE@src_hdfsee_SOURCES = src/hdfsee.c src/dw-hdfsee.c src/render.c \ @HAVE_GTK_TRUE@ src/hdf5-file.c src/utils.c src/image.c src/filters.c \ @HAVE_GTK_TRUE@ src/thread-pool.c src/detector.c @@ -842,7 +842,7 @@ src/get_hkl$(EXEEXT): $(src_get_hkl_OBJECTS) $(src_get_hkl_DEPENDENCIES) src/$(a $(AM_V_CCLD)$(LINK) $(src_get_hkl_OBJECTS) $(src_get_hkl_LDADD) $(LIBS) src/hdfsee.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) -src/displaywindow.$(OBJEXT): src/$(am__dirstamp) \ +src/dw-hdfsee.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/hdfsee$(EXEEXT): $(src_hdfsee_OBJECTS) $(src_hdfsee_DEPENDENCIES) src/$(am__dirstamp) @rm -f src/hdfsee$(EXEEXT) @@ -935,7 +935,7 @@ mostlyclean-compile: -rm -f src/diffraction-gpu.$(OBJEXT) -rm -f src/diffraction.$(OBJEXT) -rm -f src/dirax.$(OBJEXT) - -rm -f src/displaywindow.$(OBJEXT) + -rm -f src/dw-hdfsee.$(OBJEXT) -rm -f src/estimate_background.$(OBJEXT) -rm -f src/filters.$(OBJEXT) -rm -f src/geometry.$(OBJEXT) @@ -983,7 +983,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/diffraction-gpu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/diffraction.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dirax.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/displaywindow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/dw-hdfsee.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/estimate_background.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/filters.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/geometry.Po@am__quote@ diff --git a/src/dw-geomatic.c b/src/dw-geomatic.c deleted file mode 100644 index a2809cb0..00000000 --- a/src/dw-geomatic.c +++ /dev/null @@ -1,801 +0,0 @@ -/* - * dw-geomatic.c - * - * GUI geometry calibration - * - * (c) 2006-2011 Thomas White <taw@physics.org> - * - * Part of CrystFEL - crystallography with a FEL - * - */ - - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <gtk/gtk.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <cairo.h> -#include <gdk-pixbuf/gdk-pixbuf.h> - -#include "dw-geomatic.h" -#include "render.h" -#include "hdf5-file.h" -#include "utils.h" -#include "cell.h" -#include "geometry.h" -#include "peaks.h" - - -static void displaywindow_error(DWGeomatic *dw, const char *message) -{ - GtkWidget *window; - - window = gtk_message_dialog_new(GTK_WINDOW(dw->window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_CLOSE, message); - gtk_window_set_title(GTK_WINDOW(window), "Error"); - - g_signal_connect_swapped(window, "response", - G_CALLBACK(gtk_widget_destroy), window); - gtk_widget_show(window); -} - - -static void displaywindow_update(DWGeomatic *dw) -{ - gint width; - - if ( dw->image != NULL ) { - dw->width = dw->image->width; - dw->height = dw->image->height; - } else { - dw->width = 320; - dw->height = 320; - } - - width = dw->width; - if ( dw->show_col_scale ) width += 20; - - if ( dw->pixbuf != NULL ) { - gdk_pixbuf_unref(dw->pixbuf); - } - if ( dw->image != NULL ) { - dw->pixbuf = render_get_image(dw->image, 1, dw->scale, - dw->boostint); - } else { - dw->pixbuf = NULL; - } - - if ( dw->col_scale != NULL ) { - gdk_pixbuf_unref(dw->col_scale); - } - dw->col_scale = render_get_colour_scale(20, dw->height, dw->scale); - - gdk_window_invalidate_rect(dw->drawingarea->window, NULL, FALSE); -} - - -/* Window closed - clean up */ -static gint displaywindow_closed(GtkWidget *window, DWGeomatic *dw) -{ - if ( dw->hdfile != NULL ) { - hdfile_close(dw->hdfile); - } - - exit(0); /* This program only handles one image at a time */ -} - - -static gboolean displaywindow_expose(GtkWidget *da, GdkEventExpose *event, - DWGeomatic *dw) -{ - cairo_t *cr; - Reflection *refl; - RefListIterator *iter; - - cr = gdk_cairo_create(da->window); - - /* Blank white background */ - cairo_rectangle(cr, 0.0, 0.0, da->allocation.width, - da->allocation.height); - cairo_set_source_rgb(cr, 0.0, 0.0, 1.0); - cairo_fill(cr); - - if ( dw->pixbuf != NULL ) { - gdk_draw_pixbuf(da->window, - da->style->bg_gc[GTK_WIDGET_STATE(da)], - dw->pixbuf, - 0, 0, 0, 0, dw->width, dw->height, - GDK_RGB_DITHER_NONE, 0, 0); - } - - if ( (dw->show_col_scale) && (dw->col_scale != NULL) ) { - gdk_draw_pixbuf(da->window, - da->style->bg_gc[GTK_WIDGET_STATE(da)], - dw->col_scale, - 0, 0, dw->width, 0, 20, dw->height, - GDK_RGB_DITHER_NONE, 0, 0); - } - - if ( dw->image->det != NULL ) { - - RefList *peaks; - UnitCell *rot; - - dw->image->bw = 0.01; - dw->image->div = 0.0; - dw->image->profile_radius = 0.0; - - rot = rotate_cell(dw->cell, dw->pos_x/100000.0, dw->pos_y/100000.0, 0.0); - peaks = find_intersections(dw->image, rot, 0); - cell_free(rot); - - for ( refl = first_refl(peaks, &iter); - refl != NULL; - refl = next_refl(refl, iter) ) { - - double x, y; - - get_detector_pos(refl, &x, &y); - cairo_new_path(cr); - cairo_arc(cr, x, y, 3.0, 0.0, 2.0*M_PI); - cairo_set_source_rgb(cr, 0.0, 0.0, 1.0); - cairo_stroke(cr); - - } - - reflist_free(peaks); - - } - - return FALSE; -} - - -static gint displaywindow_close(GtkWidget *widget, DWGeomatic *dw) -{ - gtk_widget_destroy(dw->window); - return 0; -} - - -static gint displaywindow_set_boostint_response(GtkWidget *widget, - gint response, - DWGeomatic *dw) -{ - int done = 1; - - if ( response == GTK_RESPONSE_OK ) { - - const char *sboostint; - float boostint; - int scanval; - - sboostint = gtk_entry_get_text( - GTK_ENTRY(dw->boostint_dialog->entry)); - scanval = sscanf(sboostint, "%f", &boostint); - if ( (scanval != 1) || (boostint <= 0) ) { - displaywindow_error(dw, "Please enter a positive " - "value for the intensity boost " - "factor."); - done = 0; - } else { - dw->boostint = boostint; - displaywindow_update(dw); - } - } - - if ( done ) { - gtk_widget_destroy(dw->boostint_dialog->window); - } - - return 0; -} - - -static gint displaywindow_set_boostint_destroy(GtkWidget *widget, - DWGeomatic *dw) -{ - free(dw->boostint_dialog); - dw->boostint_dialog = NULL; - return 0; -} - - -static gint displaywindow_set_boostint_response_ac(GtkWidget *widget, - DWGeomatic *dw) -{ - return displaywindow_set_boostint_response(widget, GTK_RESPONSE_OK, dw); -} - - -/* Create a window to ask the user for a new intensity boost factor */ -static gint displaywindow_set_boostint(GtkWidget *widget, DWGeomatic *dw) -{ - struct gmdialog *bd; - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *table; - GtkWidget *label; - char tmp[64]; - - if ( dw->boostint_dialog != NULL ) { - return 0; - } - - if ( dw->hdfile == NULL ) { - return 0; - } - - bd = malloc(sizeof(struct gmdialog)); - if ( bd == NULL ) return 0; - dw->boostint_dialog = bd; - - bd->window = gtk_dialog_new_with_buttons("Intensity Boost", - GTK_WINDOW(dw->window), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CANCEL, GTK_RESPONSE_CLOSE, - GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - - vbox = gtk_vbox_new(FALSE, 0); - hbox = gtk_hbox_new(TRUE, 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(bd->window)->vbox), - GTK_WIDGET(hbox), FALSE, FALSE, 7); - gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), FALSE, FALSE, 5); - - table = gtk_table_new(3, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0); - - label = gtk_label_new("Boost Factor:"); - gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); - gtk_table_attach_defaults(GTK_TABLE(table), GTK_WIDGET(label), - 1, 2, 3, 4); - - bd->entry = gtk_entry_new(); - snprintf(tmp, 63, "%.2f", dw->boostint); - gtk_entry_set_text(GTK_ENTRY(bd->entry), tmp); - gtk_table_attach_defaults(GTK_TABLE(table), GTK_WIDGET(bd->entry), - 2, 3, 3, 4); - - g_signal_connect(G_OBJECT(bd->entry), "activate", - G_CALLBACK(displaywindow_set_boostint_response_ac), - dw); - g_signal_connect(G_OBJECT(bd->window), "response", - G_CALLBACK(displaywindow_set_boostint_response), dw); - g_signal_connect(G_OBJECT(bd->window), "destroy", - G_CALLBACK(displaywindow_set_boostint_destroy), dw); - gtk_window_set_resizable(GTK_WINDOW(bd->window), FALSE); - gtk_widget_show_all(bd->window); - gtk_widget_grab_focus(GTK_WIDGET(bd->entry)); - - return 0; -} - - -static gint displaywindow_about(GtkWidget *widget, DWGeomatic *dw) -{ - GtkWidget *window; - - const gchar *authors[] = { - "Thomas White <taw@physics.org>", - NULL - }; - - window = gtk_about_dialog_new(); - gtk_window_set_transient_for(GTK_WINDOW(window), - GTK_WINDOW(dw->window)); - - gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(window), "geomatic"); - gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window), PACKAGE_VERSION); - gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(window), - "(c) 2006-2011 Thomas White <taw@physics.org> and others"); - gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), - "Quick viewer for HDF files"); - gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window), - "(c) 2006-2011 Thomas White <taw@physics.org>\n"); - gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(window), - "http://www.bitwiz.org.uk/"); - gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(window), authors); - - g_signal_connect(window, "response", G_CALLBACK(gtk_widget_destroy), - NULL); - - gtk_widget_show_all(window); - - return 0; -} - - -static gint displaywindow_set_colscale(GtkWidget *widget, DWGeomatic *dw) -{ - dw->show_col_scale = 1 - dw->show_col_scale; - displaywindow_update(dw); - return 0; -} - - -static void displaywindow_addui_callback(GtkUIManager *ui, GtkWidget *widget, - GtkContainer *container) -{ - gtk_box_pack_start(GTK_BOX(container), widget, FALSE, FALSE, 0); - - /* Enable overflow menu if this is a toolbar */ - if ( GTK_IS_TOOLBAR(widget) ) { - gtk_toolbar_set_show_arrow(GTK_TOOLBAR(widget), TRUE); - } -} - - -static gint displaywindow_setscale(GtkWidget *widget, GtkRadioAction *action, - DWGeomatic *dw) -{ - switch ( gtk_radio_action_get_current_value(action) ) - { - case 0 : dw->scale = SCALE_COLOUR; break; - case 1 : dw->scale = SCALE_MONO; break; - case 2 : dw->scale = SCALE_INVMONO; break; - } - displaywindow_update(dw); - - return 0; -} - - -static gint displaywindow_loadgeom_response(GtkWidget *d, gint response, - DWGeomatic *dw) -{ - if ( response == GTK_RESPONSE_ACCEPT ) { - - char *file; - struct detector *det; - - file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(d)); - - det = get_detector_geometry(file); - g_free(file); - - if ( det == NULL ) { - displaywindow_error(dw, "Invalid geometry file"); - return 1; - } - - /* Validate geometry */ - if ( (1+det->max_fs != dw->image->width) - || (1+det->max_ss != dw->image->height) ) { - - displaywindow_error(dw, - "Geometry does not match image size"); - return 1; - - } else { - - if ( dw->image->det != NULL ) { - free_detector_geometry(dw->image->det); - } - dw->image->det = det; - - displaywindow_update(dw); - } - - } - - gtk_widget_destroy(d); - - return 0; -} - - - -static gint displaywindow_loadgeom(GtkWidget *widget, DWGeomatic *dw) -{ - GtkWidget *d; - - d = gtk_file_chooser_dialog_new("Load Geometry File", - GTK_WINDOW(dw->window), - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); - - g_signal_connect(G_OBJECT(d), "response", - G_CALLBACK(displaywindow_loadgeom_response), dw); - - gtk_widget_show_all(d); - - return 0; -} - - -static void displaywindow_addmenubar(DWGeomatic *dw, GtkWidget *vbox, - int colscale) -{ - GError *error = NULL; - GtkActionEntry entries[] = { - - { "FileAction", NULL, "_File", NULL, NULL, NULL }, - { "LoadGeomAction", GTK_STOCK_OPEN, "_Load Geometry", NULL, - NULL, G_CALLBACK(displaywindow_loadgeom) }, - { "CloseAction", GTK_STOCK_CLOSE, "_Close", NULL, NULL, - G_CALLBACK(displaywindow_close) }, - - { "ViewAction", NULL, "_View", NULL, NULL, NULL }, - { "ImagesAction", NULL, "Images", NULL, NULL, NULL }, - { "BoostIntAction", NULL, "Boost Intensity...", "F5", NULL, - G_CALLBACK(displaywindow_set_boostint) }, - - { "HelpAction", NULL, "_Help", NULL, NULL, NULL }, - { "AboutAction", GTK_STOCK_ABOUT, "_About Geomatic...", - NULL, NULL, - G_CALLBACK(displaywindow_about) }, - - }; - guint n_entries = G_N_ELEMENTS(entries); - - GtkToggleActionEntry toggles[] = { - { "ColScaleAction", NULL, "Show Colour Scale", NULL, NULL, - G_CALLBACK(displaywindow_set_colscale), FALSE }, - }; - guint n_toggles = G_N_ELEMENTS(toggles); - GtkRadioActionEntry radios[] = { - { "ColAction", NULL, "Colour", NULL, NULL, - SCALE_COLOUR }, - { "MonoAction", NULL, "Monochrome", NULL, NULL, - SCALE_MONO }, - { "InvMonoAction", NULL, "Inverse Monochrome", NULL, NULL, - SCALE_INVMONO }, - }; - guint n_radios = G_N_ELEMENTS(radios); - - dw->action_group = gtk_action_group_new("geomatic"); - gtk_action_group_add_actions(dw->action_group, entries, n_entries, dw); - gtk_action_group_add_toggle_actions(dw->action_group, toggles, - n_toggles, dw); - gtk_action_group_add_radio_actions(dw->action_group, radios, n_radios, - colscale, - G_CALLBACK(displaywindow_setscale), - dw); - - dw->ui = gtk_ui_manager_new(); - gtk_ui_manager_insert_action_group(dw->ui, dw->action_group, 0); - g_signal_connect(dw->ui, "add_widget", - G_CALLBACK(displaywindow_addui_callback), vbox); - if ( gtk_ui_manager_add_ui_from_file(dw->ui, - DATADIR"/crystfel/geomatic.ui", &error) == 0 ) { - fprintf(stderr, "Error loading message window menu bar: %s\n", - error->message); - return; - } - - gtk_window_add_accel_group(GTK_WINDOW(dw->window), - gtk_ui_manager_get_accel_group(dw->ui)); - gtk_ui_manager_ensure_update(dw->ui); -} - - -struct newhdf { - DWGeomatic *dw; - char name[1024]; -}; - -static gint displaywindow_newhdf(GtkMenuItem *item, struct newhdf *nh) -{ - hdfile_set_image(nh->dw->hdfile, nh->name); - hdf5_read(nh->dw->hdfile, nh->dw->image, 0, 0.0); - gtk_widget_set_size_request(GTK_WIDGET(nh->dw->drawingarea), - nh->dw->image->width, - nh->dw->image->height); - displaywindow_update(nh->dw); - return 0; -} - - -static GtkWidget *displaywindow_addhdfgroup(struct hdfile *hdfile, - const char *group, - DWGeomatic *dw, GSList **rgp) -{ - char **names; - int *is_group; - int *is_image; - GtkWidget *ms; - int n, i; - - if ( hdfile == NULL ) return NULL; - - names = hdfile_read_group(hdfile, &n, group, &is_group, &is_image); - if ( n == 0 ) return NULL; - - ms = gtk_menu_new(); - - for ( i=0; i<n; i++ ) { - - GtkWidget *item; - GtkWidget *sub; - - if ( names[i] == NULL ) return NULL; - - if ( is_group[i] ) { - - item = gtk_menu_item_new_with_label(names[i]); - - sub = displaywindow_addhdfgroup(hdfile, names[i], - dw, rgp); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), sub); - - } else if ( is_image[i] ) { - - struct newhdf *nh; - - item = gtk_radio_menu_item_new_with_label(*rgp, - names[i]); - - if ( *rgp == NULL ) { - gtk_check_menu_item_set_active( - GTK_CHECK_MENU_ITEM(item), TRUE); - } else { - gtk_check_menu_item_set_active( - GTK_CHECK_MENU_ITEM(item), FALSE); - } - - *rgp = gtk_radio_menu_item_get_group( - GTK_RADIO_MENU_ITEM(item)); - - nh = malloc(sizeof(struct newhdf)); - if ( nh != NULL ) { - strncpy(nh->name, names[i], 1023); - nh->dw = dw; - g_signal_connect(G_OBJECT(item), "activate", - G_CALLBACK(displaywindow_newhdf), nh); - } - - } else { - - char *tmp; - - item = gtk_menu_item_new_with_label(names[i]); - - tmp = hdfile_get_string_value(hdfile, names[i]); - if ( tmp != NULL ) { - - GtkWidget *ss; - GtkWidget *mss; - - mss = gtk_menu_new(); - ss = gtk_menu_item_new_with_label(tmp); - gtk_widget_set_sensitive(ss, FALSE); - gtk_menu_shell_append(GTK_MENU_SHELL(mss), ss); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), - mss); - - } - - - } - - gtk_menu_shell_append(GTK_MENU_SHELL(ms), item); - - free(names[i]); - - - } - - free(is_group); - free(is_image); - - return ms; -} - - -static GtkWidget *displaywindow_createhdfmenus(struct hdfile *hdfile, - DWGeomatic *dw) -{ - GSList *rg = NULL; - - return displaywindow_addhdfgroup(hdfile, "/", dw, &rg); -} - - -static void displaywindow_update_menus(DWGeomatic *dw) -{ - GtkWidget *ms; - GtkWidget *w; - - ms = displaywindow_createhdfmenus(dw->hdfile, dw); - - if ( ms == NULL ) { - - /* Too bad. You'd better hope that /data/data exists... */ - ERROR("Couldn't get list of images in HDF file\n"); - w = gtk_ui_manager_get_widget(dw->ui, - "/ui/displaywindow/view/images"); - gtk_widget_set_sensitive(GTK_WIDGET(w), FALSE); - - /* Add a dummy menu so that the user knows what's going on */ - ms = gtk_menu_new(); - w = gtk_ui_manager_get_widget(dw->ui, - "/ui/displaywindow/view/images"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(w), ms); - - return; - - } - - /* Make new menu be the submenu for File->Images */ - w = gtk_ui_manager_get_widget(dw->ui, "/ui/displaywindow/view/images"); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(w), ms); - - gtk_widget_show_all(ms); -} - - -static gint displaywindow_release(GtkWidget *widget, GdkEventButton *event, - DWGeomatic *dw) -{ - if ( (event->type == GDK_BUTTON_RELEASE) && (event->button == 1) ) { - - g_signal_handler_disconnect(GTK_OBJECT(dw->drawingarea), - dw->motion_callback); - dw->motion_callback = 0; - - } - - return 0; -} - - -static gint displaywindow_motion(GtkWidget *widget, GdkEventMotion *event, - DWGeomatic *dw) -{ - double x, y; - - x = event->x - dw->motion_origx; - y = event->y - dw->motion_origy; - - dw->pos_x += x; - dw->pos_y += y; - - /* Schedule redraw */ - gtk_widget_queue_draw_area(dw->drawingarea, 0, 0, - dw->width, dw->height); - - return 0; -} - - -static gint displaywindow_press(GtkWidget *widget, GdkEventButton *event, - DWGeomatic *dw) -{ - if ( dw->motion_callback != 0 ) { - return 0; - } - - if ( (event->type == GDK_BUTTON_PRESS) && (event->button == 1) ) { - - dw->motion_origx = event->x; - dw->motion_origy = event->y; - - /* Connect motion callback */ - dw->motion_callback = g_signal_connect( - GTK_OBJECT(dw->drawingarea), - "motion-notify-event", - G_CALLBACK(displaywindow_motion), - dw); - - } - - return 0; - -} - - -DWGeomatic *geomatic_open(const char *filename) -{ - DWGeomatic *dw; - char *title; - GtkWidget *vbox; - GtkWidget *sw; - int wr, hr; - - dw = calloc(1, sizeof(DWGeomatic)); - if ( dw == NULL ) return NULL; - dw->pixbuf = NULL; - dw->show_col_scale = 0; - dw->col_scale = NULL; - dw->boostint_dialog = NULL; - dw->boostint = 1; - dw->motion_callback = 0; - dw->image = NULL; - dw->scale = SCALE_COLOUR; - dw->pos_x = 0.0; - dw->pos_y = 0.0; - dw->pos_z = 0.0; - - dw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - - if ( filename == NULL ) { - title = strdup("No file - geomatic"); - } else { - char *bn = safe_basename(filename); - title = malloc(strlen(bn)+14); - sprintf(title, "%s - geomatic", bn); - free(bn); - } - gtk_window_set_title(GTK_WINDOW(dw->window), title); - free(title); - - g_signal_connect(G_OBJECT(dw->window), "destroy", - G_CALLBACK(displaywindow_closed), dw); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(dw->window), vbox); - displaywindow_addmenubar(dw, vbox, dw->scale); - - /* Open the file, if any */ - if ( filename != NULL ) { - - dw->hdfile = hdfile_open(filename); - if ( dw->hdfile == NULL ) { - ERROR("Couldn't open file '%s'\n", filename); - return NULL; - } else if ( hdfile_set_first_image(dw->hdfile, "/") ) { - ERROR("Couldn't select path\n"); - return NULL; - } else { - dw->image = calloc(1, sizeof(struct image)); - hdf5_read(dw->hdfile, dw->image, 0, 0.0); - } - - } else { - return NULL; - } - - dw->drawingarea = gtk_drawing_area_new(); - gtk_widget_set_size_request(GTK_WIDGET(dw->drawingarea), - dw->image->width, - dw->image->height); - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), - dw->drawingarea); - gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); - - wr = dw->image->width; - hr = dw->image->height; - if ( wr > 640 ) wr = 640; - if ( hr > 640 ) hr = 640; - gtk_widget_set_size_request(GTK_WIDGET(dw->window), wr, hr); - - g_signal_connect(GTK_OBJECT(dw->drawingarea), "expose-event", - G_CALLBACK(displaywindow_expose), dw); - - gtk_window_set_resizable(GTK_WINDOW(dw->window), TRUE); - gtk_widget_show_all(dw->window); - - dw->cell = load_cell_from_pdb("1JB0.pdb"); - - dw->boostint = 1.0; - displaywindow_update(dw); - - gtk_widget_add_events(GTK_WIDGET(dw->drawingarea), - GDK_BUTTON_PRESS_MASK - | GDK_BUTTON_RELEASE_MASK - | GDK_BUTTON1_MOTION_MASK); - g_object_set(G_OBJECT(dw->drawingarea), "can-focus", TRUE, NULL); - - g_signal_connect(GTK_OBJECT(dw->drawingarea), "button-press-event", - G_CALLBACK(displaywindow_press), dw); - g_signal_connect(GTK_OBJECT(dw->drawingarea), "button-release-event", - G_CALLBACK(displaywindow_release), dw); - - if ( dw->hdfile != NULL ) displaywindow_update_menus(dw); - - return dw; -} diff --git a/src/dw-geomatic.h b/src/dw-geomatic.h deleted file mode 100644 index 0482d26c..00000000 --- a/src/dw-geomatic.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * dw-geomatic.h - * - * GUI geometry calibration - * - * (c) 2006-2011 Thomas White <taw@physics.org> - * - * Part of CrystFEL - crystallography with a FEL - * - */ - - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#ifndef DW_GEOMATIC_H -#define DW_GEOMATIC_H - -#include <gtk/gtk.h> - -#include "cell.h" -#include "reflist.h" - - -struct gmdialog { - GtkWidget *window; - GtkWidget *entry; -}; - - -typedef struct { - - GtkWidget *window; - GtkWidget *drawingarea; - GtkUIManager *ui; - GtkActionGroup *action_group; - GdkPixbuf *pixbuf; - gulong motion_callback; - - struct hdfile *hdfile; - struct image *image; - int width; - int height; - double boostint; - - /* Dialog boxes */ - struct gmdialog *boostint_dialog; - - int show_col_scale; - int scale; - GdkPixbuf *col_scale; - - double motion_origx; - double motion_origy; - - UnitCell *cell; - double pos_x; - double pos_y; - double pos_z; - -} DWGeomatic; - -/* Return an image display window showing the given filename, or NULL */ -extern DWGeomatic *geomatic_open(const char *filename); - - -#endif /* DW_GEOMATICs_H */ diff --git a/src/displaywindow.c b/src/dw-hdfsee.c index 3251f42b..9c42bf5b 100644 --- a/src/displaywindow.c +++ b/src/dw-hdfsee.c @@ -1,5 +1,5 @@ /* - * displaywindow.c + * dw-hdfsee.c * * Quick yet non-crappy HDF viewer * @@ -21,7 +21,7 @@ #include <cairo.h> #include <gdk-pixbuf/gdk-pixbuf.h> -#include "displaywindow.h" +#include "dw-hdfsee.h" #include "render.h" #include "hdf5-file.h" #include "hdfsee.h" diff --git a/src/displaywindow.h b/src/dw-hdfsee.h index 6dede9a8..d3419390 100644 --- a/src/displaywindow.h +++ b/src/dw-hdfsee.h @@ -1,5 +1,5 @@ /* - * displaywindow.h + * dw-hdfsee.h * * Quick yet non-crappy HDF viewer * diff --git a/src/hdfsee.c b/src/hdfsee.c index 186eb6e6..5a58ff9d 100644 --- a/src/hdfsee.c +++ b/src/hdfsee.c @@ -17,7 +17,7 @@ #include <gtk/gtk.h> #include <getopt.h> -#include "displaywindow.h" +#include "dw-hdfsee.h" #include "utils.h" #include "render.h" diff --git a/src/hdfsee.h b/src/hdfsee.h index 3404ab23..92a9c441 100644 --- a/src/hdfsee.h +++ b/src/hdfsee.h @@ -17,7 +17,7 @@ #ifndef HDFSEE_H #define HDFSEE_H -#include "displaywindow.h" +#include "dw-hdfsee.h" extern void hdfsee_window_closed(DisplayWindow *dw); |