From e328f875c44dabafa775e4a8affef3e44c1a72a7 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 28 Oct 2020 15:23:01 +0100 Subject: Initial implementation of CrystFELSymmetrySelector This should eventually be replaced by something which behaves a bit like a GtkFileChooserButton --- CMakeLists.txt | 3 +- meson.build | 1 + src/crystfelmergeopts.c | 5 ++- src/crystfelsymmetryselector.c | 86 ++++++++++++++++++++++++++++++++++++++++++ src/crystfelsymmetryselector.h | 75 ++++++++++++++++++++++++++++++++++++ 5 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 src/crystfelsymmetryselector.c create mode 100644 src/crystfelsymmetryselector.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ea46558..b8a0569a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -393,7 +393,8 @@ if (GTK_FOUND) set(CRYSTFEL_GUI_SOURCES src/crystfel_gui.c src/crystfelimageview.c src/gui_peaksearch.c src/gui_index.c src/gui_merge.c src/gui_backend_local.c - src/gui_project.c src/crystfelindexingopts.c src/crystfelmergeopts.c) + src/gui_project.c src/crystfelindexingopts.c src/crystfelmergeopts.c + src/crystfelsymmetryselector.c) if (HAVE_SLURM) set(CRYSTFEL_GUI_SOURCES ${CRYSTFEL_GUI_SOURCES} src/gui_backend_slurm.c) diff --git a/meson.build b/meson.build index ce0a5325..acfc293a 100644 --- a/meson.build +++ b/meson.build @@ -210,6 +210,7 @@ if gtkdep.found() 'src/crystfelimageview.c', 'src/crystfelindexingopts.c', 'src/crystfelmergeopts.c', + 'src/crystfelsymmetryselector.c', 'src/gui_peaksearch.c', 'src/gui_index.c', 'src/gui_merge.c', diff --git a/src/crystfelmergeopts.c b/src/crystfelmergeopts.c index d33401e5..4cff072f 100644 --- a/src/crystfelmergeopts.c +++ b/src/crystfelmergeopts.c @@ -43,6 +43,7 @@ #include #include "crystfelmergeopts.h" +#include "crystfelsymmetryselector.h" G_DEFINE_TYPE(CrystFELMergeOpts, @@ -98,7 +99,7 @@ static GtkWidget *merge_parameters(CrystFELMergeOpts *mo) label = gtk_label_new("Symmetry:"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); - mo->symmetry = gtk_combo_box_text_new(); //crystfel_symmetry_selector_new(); + mo->symmetry = crystfel_symmetry_selector_new(); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(mo->symmetry), FALSE, FALSE, 0); @@ -226,7 +227,7 @@ static GtkWidget *merge_parameters(CrystFELMergeOpts *mo) mo->detwin = gtk_check_button_new_with_label("Refine indexing assignments"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(mo->detwin), FALSE, FALSE, 0); - mo->detwin_sym = gtk_combo_box_text_new(); //crystfel_symmetry_selector_new(); + mo->detwin_sym = crystfel_symmetry_selector_new(); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(mo->detwin_sym), FALSE, FALSE, 0); diff --git a/src/crystfelsymmetryselector.c b/src/crystfelsymmetryselector.c new file mode 100644 index 00000000..e8b1d0d6 --- /dev/null +++ b/src/crystfelsymmetryselector.c @@ -0,0 +1,86 @@ +/* + * crystfelsymmetryselector.c + * + * A GTK widget to choose a symmetry class + * + * Copyright © 2020 Deutsches Elektronen-Synchrotron DESY, + * a research centre of the Helmholtz Association. + * + * Authors: + * 2020 Thomas White + * + * This file is part of CrystFEL. + * + * CrystFEL is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * CrystFEL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with CrystFEL. If not, see . + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include "crystfelsymmetryselector.h" + + +G_DEFINE_TYPE(CrystFELSymmetrySelector, + crystfel_symmetry_selector, + GTK_TYPE_BOX) + + +static void crystfel_symmetry_selector_class_init(CrystFELSymmetrySelectorClass *klass) +{ +} + + +static void crystfel_symmetry_selector_init(CrystFELSymmetrySelector *mo) +{ +} + + +GtkWidget *crystfel_symmetry_selector_new() +{ + CrystFELSymmetrySelector *sel; + + sel = g_object_new(CRYSTFEL_TYPE_SYMMETRY_SELECTOR, NULL); + + sel->entry = gtk_entry_new(); + gtk_entry_set_width_chars(GTK_ENTRY(sel->entry), 10); + gtk_box_pack_start(GTK_BOX(sel), GTK_WIDGET(sel->entry), + FALSE, FALSE, 0.0); + + return GTK_WIDGET(sel); +} + + +char *crystfel_symmetry_selector_get_group_symbol(CrystFELSymmetrySelector *sel) +{ + const gchar *text = gtk_entry_get_text(GTK_ENTRY(sel->entry)); + return strdup(text); +} + + +int crystfel_symmetry_selector_set_group_symbol(CrystFELSymmetrySelector *sel, + const char *pg_symbol) +{ + gtk_entry_set_text(GTK_ENTRY(sel->entry), pg_symbol); + return 0; +} diff --git a/src/crystfelsymmetryselector.h b/src/crystfelsymmetryselector.h new file mode 100644 index 00000000..0b286e90 --- /dev/null +++ b/src/crystfelsymmetryselector.h @@ -0,0 +1,75 @@ +/* + * crystfelsymmetryselector.h + * + * A GTK widget to choose a symmetry class + * + * Copyright © 2020 Deutsches Elektronen-Synchrotron DESY, + * a research centre of the Helmholtz Association. + * + * Authors: + * 2020 Thomas White + * + * This file is part of CrystFEL. + * + * CrystFEL is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * CrystFEL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with CrystFEL. If not, see . + * + */ + +#ifndef CRYSTFELSYMMETRYSELECTOR_H +#define CRYSTFELSYMMETRYSELECTOR_H + +#include +#include + +#define CRYSTFEL_TYPE_SYMMETRY_SELECTOR (crystfel_symmetry_selector_get_type()) + +#define CRYSTFEL_SYMMETRY_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + CRYSTFEL_TYPE_SYMMETRY_SELECTOR, CrystFELSymmetrySelector)) + +#define CRYSTFEL_IS_SYMMETRY_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + CRYSTFEL_TYPE_SYMMETRY_SELECTOR)) + +#define CRYSTFEL_SYMMETRY_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((obj), \ + CRYSTFEL_TYPE_SYMMETRY_SELECTOR, CrystFELSymmetrySelector)) + +#define CRYSTFEL_IS_SYMMETRY_SELECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((obj), \ + CRYSTFEL_TYPE_SYMMETRY_SELECTOR)) + +#define CRYSTFEL_SYMMETRY_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \ + CRYSTFEL_TYPE_SYMMETRY_SELECTOR, CrystFELSymmetrySelector)) + +struct _crystfelsymmetryselector +{ + GtkBox parent_instance; + + /*< private >*/ + GtkWidget *entry; +}; + +struct _crystfelsymmetryselectorclass +{ + GtkBoxClass parent_class; +}; + +typedef struct _crystfelsymmetryselector CrystFELSymmetrySelector; +typedef struct _crystfelsymmetryselectorclass CrystFELSymmetrySelectorClass; + +extern GType crystfel_symmetry_selector_get_type(void); +extern GtkWidget *crystfel_symmetry_selector_new(void); + +extern char *crystfel_symmetry_selector_get_group_symbol(CrystFELSymmetrySelector *sel); +extern int crystfel_symmetry_selector_set_group_symbol(CrystFELSymmetrySelector *sel, + const char *pg_symbol); + +#endif /* CRYSTFELSYMMETRYSELECTOR_H */ -- cgit v1.2.3