From 0e274cdf6520a0096fa6e3b64d9710f8b06fabd3 Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Tue, 7 May 2024 20:48:01 +0200 Subject: [PATCH] =?UTF-8?q?r=C3=A9partition=20[pages=20/=20widgets]=20=20(?= =?UTF-8?q?+=20hot=20/=20warm=20/=20cold)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cold.c | 363 +----------------------------------------------------- cold.d | 2 +- cold.h | 59 --------- cold.o | Bin 47544 -> 5264 bytes hot.c | 14 +-- hot.d | 2 +- hot.h | 11 ++ hot.o | Bin 6496 -> 2696 bytes main.c | 11 ++ main.d | 2 +- main.o | Bin 9312 -> 9312 bytes myprogram | Bin 40016 -> 39992 bytes pages.c | 167 +++++++++++++++++++++++++ pages.d | 1 + pages.h | 56 +++++++++ pages.o | Bin 0 -> 29920 bytes warm.c | 2 + warm.d | 2 +- warm.h | 15 ++- widgets.c | 165 +++++++++++++++++++++++++ widgets.d | 1 + widgets.h | 39 ++++++ widgets.o | Bin 0 -> 23392 bytes 23 files changed, 475 insertions(+), 437 deletions(-) create mode 100644 pages.c create mode 100644 pages.d create mode 100644 pages.h create mode 100644 pages.o create mode 100644 widgets.c create mode 100644 widgets.d create mode 100644 widgets.h create mode 100644 widgets.o diff --git a/cold.c b/cold.c index b7f1b78..3a8e919 100644 --- a/cold.c +++ b/cold.c @@ -1,366 +1,7 @@ #include #include #include "cold.h" +#include "widgets.h" +#include "pages.h" void print_text(GtkWidget *widget, gpointer data) {g_print (data);} - -GtkWidget *get_a_space_test_image(){ - GtkWidget *image; - image = GTK_WIDGET(get_scrolled_gl_area()); - image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/aXoris.png"); - image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/gg sketch.png"); - image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/E coli.png"); - image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/E coli resized.png"); - image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/Getting_Started_with_GTK/E coli by David S. Goodsell (2009).png"); - return image; -} - -GtkWidget *get_scroll_speed(){ - GtkAdjustment *speed_adjust = gtk_adjustment_new (0, 0, 100, 1, 0, 0); - GtkWidget *scroll_speed = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, speed_adjust); - return scroll_speed; -} - -// TODO cliquer sur "RUN" --> affiche "STOP" (et inversement) -GtkBox *get_RUN_STOP_box(){ - GtkBox *RUN_STOP_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2 - - GtkWidget *RUN_Label = GTK_WIDGET (gtk_label_new (NULL)); // "RUN")); - const char *str = " RUN-STOP"; - const char *format = "\%s"; // ^c^v no more... - char *markup; - - markup = g_markup_printf_escaped (format, str); - gtk_label_set_markup (GTK_LABEL (RUN_Label), markup); // Sets the labels text and attributes from markup. - g_free (markup); - - gtk_label_set_max_width_chars (GTK_LABEL(RUN_Label), 12); - gtk_label_set_wrap (GTK_LABEL(RUN_Label), TRUE); - gtk_label_set_xalign (GTK_LABEL(RUN_Label), 0.5); // xalign value, between 0 and 1 - gtk_label_set_yalign (GTK_LABEL(RUN_Label), 0.5); - gtk_label_set_selectable (GTK_LABEL(RUN_Label), FALSE); // default = FALSE - gtk_label_set_single_line_mode (GTK_LABEL(RUN_Label), TRUE); // default = TRUE - // - gtk_box_append (RUN_STOP_box, RUN_Label); - return RUN_STOP_box; -} - -GtkBox *get_STEP_by_STEP_box(){ - GtkBox *STEP_by_STEP_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); - GtkWidget *STEP_by_STEP_Label = GTK_WIDGET (gtk_label_new ("ONE\nSTEP")); - gtk_box_append (STEP_by_STEP_box, STEP_by_STEP_Label); - return STEP_by_STEP_box; -} - -GtkBox *get_ZOOM_box(){ - GtkBox *ZOOM_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); - GtkWidget *ZOOM_Label = GTK_WIDGET (gtk_label_new ("ZOOM\n ---\n(space\nstruct.)")); - gtk_box_append (ZOOM_box, ZOOM_Label); - return ZOOM_box; -} - -GtkBox *get_XYZ_box(){ - GtkBox *XYZ_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2 - // GtkWidget *scale_X = gtk_scale_button_new (0, 360, 10, NULL); < à étudier - // (double min, double max, double step, const char** icons) - GtkAdjustment *X_adjust = gtk_adjustment_new (0, 0, 380, 1, 0, 0); - GtkAdjustment *Y_adjust = gtk_adjustment_new (0, 0, 380, 1, 0, 0); - GtkAdjustment *Z_adjust = gtk_adjustment_new (0, 0, 380, 1, 0, 0); - GtkWidget *scroll_X = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, X_adjust); - GtkWidget *scroll_Y = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, Y_adjust); - GtkWidget *scroll_Z = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, Z_adjust); - - gtk_box_append (XYZ_box, scroll_X); - gtk_box_append (XYZ_box, scroll_Y); - gtk_box_append (XYZ_box, scroll_Z); - -// gtk_box_set_baseline_position (XYZ_box, GTK_BASELINE_POSITION_BOTTOM); - - return XYZ_box; -} - -GtkBox *get_ELAPSED_TIME_box(){ - GtkBox *ELAPSED_TIME_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); - -// GtkProgressBar *get_simulation_time_extent_buffer(){ - GtkProgressBar *buffer = GTK_PROGRESS_BAR (gtk_progress_bar_new ()); - gtk_progress_bar_set_text (buffer, "<--- [buffer] (simulation extent time) --->"); - gtk_progress_bar_set_show_text (buffer, TRUE); - - gtk_box_append (ELAPSED_TIME_box, GTK_WIDGET(buffer)); - return ELAPSED_TIME_box; -} - -GtkProgressBar *get_simulation_time_extent_buffer(){ - - GtkProgressBar *buffer = GTK_PROGRESS_BAR (gtk_progress_bar_new ()); - gtk_progress_bar_set_text (buffer, "<--- [buffer] (simulation extent time) --->"); - gtk_progress_bar_set_show_text (buffer, TRUE); - - return buffer; -} - -GtkBox *get_objects_box(){ - GtkBox *objects_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); - gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" membrane "))); - gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" co-enzyme A "))); - gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" ribosome "))); - gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" cytochrome C "))); - gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" ATP synthase "))); - gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" chromosome "))); - return objects_box; -} - -GtkBox *get_situations_box(){ - GtkBox *situations_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); - gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" transcription "))); - gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" épissage "))); - gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" translation "))); - gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" transport Na/K "))); - gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" ubiquitination "))); - gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" rotation du moteur flagellaire "))); - return situations_box; -} - -static GtkWidget *get_frame_objects(){ - GtkWidget *frame_objects = gtk_frame_new (" Objects"); // defines each class of object transparence - gtk_widget_set_size_request (frame_objects, 0, H_STYLES_PANE); // < utile seulement pour la largeur min/max - gtk_frame_set_child (GTK_FRAME (frame_objects), GTK_WIDGET (get_objects_box())); - return frame_objects; -} - -static GtkWidget *get_frame_situations(){ - GtkWidget *frame_situations = gtk_frame_new (" Situations"); // facilitates each situation identification - gtk_widget_set_size_request (GTK_WIDGET (frame_situations), 0, H_STYLES_PANE); // < utile seulement pour la largeur min/max - gtk_frame_set_child (GTK_FRAME (frame_situations), GTK_WIDGET (get_situations_box())); - return frame_situations; -} - -GtkWidget *get_objects_and_situations_horizontal_pane(){ - GtkWidget *objects_and_situations_horizontal_pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); - gtk_paned_set_start_child (GTK_PANED(objects_and_situations_horizontal_pane), GTK_WIDGET (get_frame_objects())); - gtk_paned_set_end_child (GTK_PANED(objects_and_situations_horizontal_pane), GTK_WIDGET (get_frame_situations())); - return objects_and_situations_horizontal_pane; -}GtkScrolledWindow *get_scrolled_gl_area(){ - GtkScrolledWindow *scrolled = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new()); - gtk_scrolled_window_set_min_content_width (scrolled, W_IMAGE); - gtk_scrolled_window_set_min_content_height (scrolled, H_IMAGE); -// GtkAdjustment *width = gtk_adjustment_new (600, 300, 1000, 1, 1, 1000); -// GtkAdjustment *height = gtk_adjustment_new (600, 300, 1000, 1, 1, 1000); - // (value, lower, upper, step_increment, page_increment, page_size) -// GtkWidget *GLarea = gtk_gl_area_new(); -// gtk_scrolled_window_set_child (scrolled, GLarea); -// https://docs.gtk.org/gtk4/class.GLArea.html - return scrolled; -} - - - - - -/*---------------------------------------------------------------------------*/ - - - -GtkWidget *get_edit_rules_page_new(){ - GtkWidget *xxx_grid = gtk_grid_new(); - return xxx_grid; -} - -GtkWidget *get_edit_measures_page_new(){ - GtkWidget *measures_grid = gtk_grid_new(); - return measures_grid; -} - -GtkWidget *get_edit_results_page_new(){ - GtkWidget *xxx_grid = gtk_grid_new(); - return xxx_grid; -} - -GtkWidget *get_edit_discuss_page_new(){ - GtkWidget *xxx_grid = gtk_grid_new(); - return xxx_grid; -} - -GtkWidget *get_edit_help_page_new(){ - GtkWidget *xxx_grid = gtk_grid_new(); - return xxx_grid; -} - -GtkWidget *get_run_measures_page_new(){ - GtkWidget *measures_grid = gtk_grid_new(); - gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("movements"), 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("transports"), 1, 0, 1, 1); - gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("transformations"), 2, 0, 1, 1); - gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("objects"), 0, 1, 1, 1); - gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("situations"), 1, 1, 1, 1); - return measures_grid; -} - -GtkWidget *get_run_results_page_new(){ - GtkWidget *results_grid = gtk_grid_new(); - gtk_grid_attach (GTK_GRID(results_grid), gtk_button_new_with_label ("Repartitions"), 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID(results_grid), gtk_button_new_with_label ("Correlations"), 0, 1, 1, 1); - gtk_grid_attach (GTK_GRID(results_grid), gtk_button_new_with_label ("Evolutions"), 0, 2, 1, 1); - return results_grid; -} - -GtkWidget *get_run_discuss_page_new(){ - GtkWidget *discuss_grid = gtk_grid_new(); - gtk_grid_attach (GTK_GRID (discuss_grid), gtk_button_new_with_label ("Interpretations"), 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID (discuss_grid), gtk_button_new_with_label ("Discussions"), 0, 1, 1, 1); - return discuss_grid; -} - -GtkWidget *get_run_help_page_new(){ - GtkWidget *help_grid = gtk_grid_new(); - gtk_grid_attach (GTK_GRID (help_grid), gtk_button_new_with_label ("Can I help you ?"), 0, 0, 1, 1); - return help_grid; -} - - -GtkWidget *get_run_rules_page_new(){ - GtkWidget *rules_grid = gtk_grid_new(); - GtkWidget *hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); - gtk_grid_attach (GTK_GRID (rules_grid), hpaned, 0, 0, 1, 1); - - GtkWidget *frame1 = gtk_frame_new ("hello ?"); - GtkWidget *frame2 = gtk_frame_new ("it's me !"); - - GtkWidget *grid_3 = gtk_grid_new(); - gtk_frame_set_child ( GTK_FRAME(frame2), grid_3); - - gtk_paned_set_start_child (GTK_PANED(hpaned), GTK_WIDGET (frame1)); - gtk_paned_set_end_child (GTK_PANED(hpaned), GTK_WIDGET (frame2)); - gtk_widget_set_size_request (hpaned, W, H); -// gtk_widget_set_size_request (frame1, 0, H); // < utile seulement pour la largeur min/max -// gtk_widget_set_size_request (frame2, 50, 100); - -// gtk_grid_attach (GTK_GRID (rules_grid), hpaned, 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID (grid_3), gtk_button_new_with_label ("in the right pane"), 0, 0, 1, 1); - return rules_grid; -} - - -GtkWidget *get_run_space_page_new(){ - - GtkWidget *space_grid = gtk_grid_new(); -// attach either : get_ELAPSED_TIME_box() or get_simulation_time_extent_buffer() -// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ELAPSED_TIME_box()), 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_simulation_time_extent_buffer()), 0, 0, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), get_a_space_test_image(), 0, 1, 1, 3); - gtk_grid_attach (GTK_GRID(space_grid), get_objects_and_situations_horizontal_pane(), 0, 4, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_RUN_STOP_box()), 1, 0, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), get_scroll_speed(), 1, 1, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_STEP_by_STEP_box()), 1, 2, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_XYZ_box()), 1, 3, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ZOOM_box()), 1, 4, 1, 1); -// How to use gtk_separators ? -// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)), 1, 1, 1, 1); - - return space_grid; -} - -void window_bar(GtkWindow *window, char *title){ - GtkWidget *titlebar = gtk_header_bar_new(); - gtk_window_set_title (window, title); - gtk_window_set_titlebar (window, titlebar); // header_bar -// GtkWidget my_window_controls = *gtk_window_controls_new (GTK_PACK_END); // _START -// gtk_window_controls_set_decoration_layout (GTK_WINDOW_CONTROLS(my_window_controls), NULL); // const char* layout); -} - -void activate (GtkApplication *app, gpointer user_data) { - GtkWindow *window = GTK_WINDOW (gtk_application_window_new (app)); - window_bar (window, "E coli (with permission from David S. Goodsell, 2009)"); - - GtkNotebook *run_notebook = GTK_NOTEBOOK(gtk_notebook_new()); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK(run_notebook), GTK_POS_TOP); // GTK_POS_LEFT - - gtk_notebook_append_page (run_notebook, get_run_space_page_new(), gtk_label_new ("space")); - gtk_notebook_append_page (run_notebook, get_run_rules_page_new(), gtk_label_new ("rules")); - gtk_notebook_append_page (run_notebook, get_run_measures_page_new(),gtk_label_new ("measures")); - gtk_notebook_append_page (run_notebook, get_run_results_page_new(), gtk_label_new ("results")); - gtk_notebook_append_page (run_notebook, get_run_discuss_page_new(), gtk_label_new ("interpret")); - gtk_notebook_append_page (run_notebook, get_run_help_page_new(), gtk_label_new ("help")); - - GtkNotebook *edit_notebook = GTK_NOTEBOOK(gtk_notebook_new()); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK(edit_notebook), GTK_POS_TOP); // GTK_POS_LEFT - - gtk_notebook_append_page (edit_notebook, get_edit_space_page_new(), gtk_label_new ("space")); - gtk_notebook_append_page (edit_notebook, get_edit_rules_page_new(), gtk_label_new ("rules")); - gtk_notebook_append_page (edit_notebook, get_edit_measures_page_new(),gtk_label_new ("measures")); - gtk_notebook_append_page (edit_notebook, get_edit_results_page_new(), gtk_label_new ("results")); - gtk_notebook_append_page (edit_notebook, get_edit_discuss_page_new(), gtk_label_new ("interpret")); - gtk_notebook_append_page (edit_notebook, get_edit_help_page_new(), gtk_label_new ("help")); - - GtkWidget *run_xor_edit_horizontal_pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); - GtkWidget *frame_edits = gtk_frame_new ("Situations"); // facilitate each situation identification - gtk_widget_set_size_request (run_xor_edit_horizontal_pane, W_IMAGE, H_STYLES_PANE); - gtk_widget_set_size_request (GTK_WIDGET (frame_edits), 0, H_STYLES_PANE); // < utile pour la largeur min/max - gtk_paned_set_start_child (GTK_PANED(run_xor_edit_horizontal_pane), GTK_WIDGET (run_notebook)); - gtk_paned_set_end_child (GTK_PANED(run_xor_edit_horizontal_pane), GTK_WIDGET (edit_notebook)); - gtk_paned_set_position (GTK_PANED (run_xor_edit_horizontal_pane), W_IMAGE + 90); // ! WARNING ! '90' is AD HOC - gtk_window_set_child (window, GTK_WIDGET(run_xor_edit_horizontal_pane)); - gtk_window_present (GTK_WINDOW (window)); -} - -void click_print_do (GtkWindow *window, GtkWidget *grid, - char *label, char *text, int x, int y, int w, int h){ - GtkWidget *button = gtk_button_new_with_label (label); - gtk_grid_attach (GTK_GRID (grid), button, x, y, w, h); - g_signal_connect (button, "clicked", G_CALLBACK (print_text), text); - if (window) - g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window); -} - -/*----------------------------------------------------------------------------*/ - -/* GtkBox GtkGrid GtkRevealer GtkStack - * GtkOverlay GtkPaned GtkExpander GtkFixed */ - -/* GtkBox - * int spacing = 8; - * box = gtk_box_new (0, spacing); - * 0 = GTK_ORIENTATION_HORIZONTAL, 1 = GTK_ORIENTATION_VERTICAL - * gtk_widget_set_halign (box, GTK_ALIGN_FILL); - * gtk_widget_set_valign (box, GTK_ALIGN_CENTER); * START CENTER END FILL * - * gtk_window_set_child (GTK_WINDOW (window), box); - * gtk_box_append (GTK_BOX (box), button); */ - -/* grid = gtk_grid_new (); - gtk_window_set_child (GTK_WINDOW (window), grid); - button = gtk_button_new_with_label (" I "); n fois - gtk_grid_attach (GTK_GRID (grid), button, 0, 0, 1, 1); n fois */ - -/* - * gtk_paned_new (GTK_ORIENTATION_VERTICAL or GTK_ORIENTATION_VERTICAL) - * GtkPaned has two panes, arranged either horizontally or vertically. - * The division between the two panes is adjustable by the user by dragging a handle. - * Child widgets are added to the panes of the widget - * with gtk_paned_pack1() and gtk_paned_pack2(). - */ - -/* - * GtkWidget* gtk_box_new (GtkOrientation orientation, gint spacing) - */ - - - - - -/* TODO or NOT TODO - * - * GtkRevealer *revealer = gtk_revealer_new(); - * gtk_revealer_set_child (GTK_ ? (revealer), box); - * gtk_revealer_set_transition_type (revealer, GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); - * - */ - -// GtkWidget *overlay = gtk_overlay_new(); -// gtk_overlay_set_buildable_id (GTK_BUILDABLE(overlay), "overlay id"); -// printf("overlay %s\n", gtk_buildable_get_buildable_id (GTK_BUILDABLE(overlay))); - -// how do I attach a widget to a page ? - -// https://stackoverflow.com/questions/20122232/gtklistc-code-how-to-get-the-selection-of-a-gtklist < TO CHECK - diff --git a/cold.d b/cold.d index 49544c2..f5f72b2 100644 --- a/cold.d +++ b/cold.d @@ -1 +1 @@ -cold.o: cold.c cold.h +cold.o: cold.c cold.h widgets.h pages.h diff --git a/cold.h b/cold.h index 3c80721..67e9bfe 100644 --- a/cold.h +++ b/cold.h @@ -7,63 +7,4 @@ /* */ /******************************************************************************/ -#include -#include -#define W 1920 -#define H 960 -#define W_IMAGE 1920 - 64 -#define H_IMAGE 960 - 46 -#define H_STYLES_PANE 60 - void print_text(GtkWidget *widget, gpointer data); -GtkWidget *get_a_space_test_image(); -GtkScrolledWindow *get_scrolled_gl_area(); -GtkBox *get_RUN_STOP_box(); -GtkBox *get_STEP_by_STEP_box(); -GtkBox *get_CONTROL_box(); -GtkBox *get_ZOOM_box(); -GtkBox *get_XYZ_box(); -GtkWidget *get_scroll_speed(); -void window_bar(GtkWindow *window, char *title); -GtkWidget *get_objects_and_situations_horizontal_pane(); -GtkBox *get_ELAPSED_TIME_box(); -GtkProgressBar *get_simulation_time_extent_buffer(); -void activate (GtkApplication *app, gpointer user_data); - -GtkWidget *get_run_space_page_new(); -GtkWidget *get_run_rules_page_new(); -GtkWidget *get_run_measures_page_new(); -GtkWidget *get_run_results_page_new(); -GtkWidget *get_run_discuss_page_new(); -GtkWidget *get_run_help_page_new(); - -GtkWidget *get_edit_space_page_new(); -GtkWidget *get_edit_rules_page_new(); -GtkWidget *get_edit_measures_page_new(); -GtkWidget *get_edit_results_page_new(); -GtkWidget *get_edit_discuss_page_new(); -GtkWidget *get_edit_help_page_new(); - -void click_print_do (GtkWindow *window, GtkWidget *grid, - char *label, char *text, int x, int y, int w, int h); - -// https://docs.gtk.org/gtk4/visual_index.html < widgets gallery - - - -/* -Dans : space_page_new() doivent être déclarées -et organisées de façon aussi ergonomique que possible : - -- les commandes de mouvement (run/stop, slow down/speed up, step by step, do/undo/redo) - et le buffer qui montre où on en est dans le temps de simulation - (un seul bouton pour toutes ces commandes ?) - -- les commandes qui modifient l'orientation (X,Y,Z) de l'espace, le zoom, la perspective - -- les commandes qui modifient les apparences des grilles et des flèches - -- les commandes qui modifient les apparences des objets et des situations d'intérêt - (+/- transparents, colorés, etc.) -*/ - diff --git a/cold.o b/cold.o index 14966618a64098dc75b369df971a407feb58fb32..bc31a1b6f24b0ec945fd8ffc5584e773d5ee08f8 100644 GIT binary patch literal 5264 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 s$ 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 diff --git a/hot.c b/hot.c index 07a415e..e8249e8 100644 --- a/hot.c +++ b/hot.c @@ -2,20 +2,10 @@ #include #include "warm.h" #include "cold.h" +#include "widgets.h" +#include "pages.h" // https://forge.a-lec.org/gem-graph/gem-graph-client/src/branch/devel/Makefile // https://docs.gtk.org/gtk4/visual_index.html < widgets gallery // GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL -GtkWidget *get_edit_space_page_new(){ - - GtkWidget *space_grid = gtk_grid_new(); - gtk_grid_attach (GTK_GRID(space_grid), get_a_space_test_image(), 0, 0, 1, 3); - gtk_grid_attach (GTK_GRID(space_grid), get_objects_and_situations_horizontal_pane(), 0, 4, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_XYZ_box()), 1, 0, 1, 2); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ZOOM_box()), 1, 2, 1, 2); -// How to use gtk_separators ? -// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)), 1, 1, 1, 1); - - return space_grid; -} diff --git a/hot.d b/hot.d index 0108b09..880e718 100644 --- a/hot.d +++ b/hot.d @@ -1,3 +1,3 @@ hot.o: hot.c warm.h \ /gnu/store/fkmpkdav2zmz1k72989bdgpdrfac7rz1-glib-2.78.0/include/glib-2.0/glib.h \ - cold.h + cold.h widgets.h pages.h diff --git a/hot.h b/hot.h index e648700..f89b6d0 100644 --- a/hot.h +++ b/hot.h @@ -1,5 +1,16 @@ +/******************************************************************************/ +/* */ +/* E coli by David S. Goodsell (2009) */ +/* --- */ +/* Let this freeze frame guide us towards the model */ +/* that alone can account for the phenomenon ! */ +/* */ +/******************************************************************************/ + #include #include #include "warm.h" #include "cold.h" +#include "widgets.h" +#include "pages.h" diff --git a/hot.o b/hot.o index 5cdd778a821ebd7867385cbd3a8740a2746d17ae..a1a80988eedc80dd42d1768e3edeb37d9a8a1578 100644 GIT binary patch literal 2696 zcmbVNe@t6d6u$4ZIJQDzLnk_wZV^|MzII#27BgoZ3Sk{E78fNXqbL<|mJzc;B(j!cuMv7hfmoNW?V~hnXT*V= zeU3eED62iuv(J~T&(5m*I$@nX_elIb$IEZMxP9A)){(y3>g^W`{CxxJ(9S3OkB5Z# z^rSkZ+$(Ih-8PF|2z9MeY%j1`iZ&GG-!6oOGTG4dF1S>qIii*30xC;ni(>GKqFlA- zqQf!af}qHlSXGMDJf0mF;dl)NjN^lPjnDp^Cx4;tl3H%f`7AJd;p7LqyhBs9dm6s0 z{bSM9+CLY%bmYX9L*0|kO7*y}?Q%`uU%dl!uP*(1ZM1G_^qs#qUiQ@UnLihlH~+DAHEf?&CNBPT`SjJocl#I0W{2lTo|thCoZEj-#V-#h@9wVj4u2)$ z5oLI3?)@sK<@^gDxm~vo4DPC(|M`pDxbp4i4bkPfoAF10EzdobOeCwPlY6Vjr*?S0 z?{SZnP4?8fO2)>0ujOe~rT14=A9E*5$6o5mTMQ)HULB_6hbVPz7(gYZKV{{Z1fC4MjA0}}r%;d+U`Lf9|y{}OJIcz%vyiC-k#CGn3F zen#RO2=k7>_m%n_q!OD<^;ol&FuxzHNB$7;LhI~pj|GC@W6_jvZrV z&@vo}=^C6eS7$8H^c3NiaF^B*jdbYIST7HM^L_(J@htLl2YGgKtq&5J=1(9A#&hEQtKgF7Zw5|Y6DaXJ-oWtr znoX{4gk+}vzfpe=iLpO^rRDw|z~P!6PC$%SNR2*8!StQWc#fwblSw~81qaj0R3PhL zVZBsWOdpd1iRZrTUnjj(CU%lu=2^%5X$bJW$mOi(=g0LtKVw`^)?%)e$Pp@B3qI5P f$9E#1J(T1Vi5j!X^W(Z1_4p?Sc0T3OcUk{G7}xxr literal 6496 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 D`Lriz diff --git a/main.c b/main.c index f88d883..03eb2cd 100644 --- a/main.c +++ b/main.c @@ -1,6 +1,17 @@ +/******************************************************************************/ +/* */ +/* E coli by David S. Goodsell (2009) */ +/* --- */ +/* Let this freeze frame guide us towards the model */ +/* that alone can account for the phenomenon ! */ +/* */ +/******************************************************************************/ + #include "hot.h" #include "warm.h" #include "cold.h" +#include "widgets.h" +#include "pages.h" int main (int argc, char **argv) { diff --git a/main.d b/main.d index cb66cb3..46f908e 100644 --- a/main.d +++ b/main.d @@ -1,3 +1,3 @@ main.o: main.c hot.h warm.h \ /gnu/store/fkmpkdav2zmz1k72989bdgpdrfac7rz1-glib-2.78.0/include/glib-2.0/glib.h \ - cold.h + cold.h widgets.h pages.h diff --git a/main.o b/main.o index 0be068b9f4cbc42fe8ccd4868761dfb2ff4cecc7..c0d6b89a2c66e85166ec2b8d109290c2d1e1b064 100644 GIT binary patch delta 1514 zcmVNZ?42=6_W|6u#%q{eACV-@W%`zLzh5${(IW`6wzd$=n1%L1JQ%gk*sW z!^kL0%aS%ixGLyxE%rlEL_%2>Mo46f2r6jdq97uuWxM8_nYr(|XclL_^MB^dnYm(V znyG=K@wE!cTJ1l}aBSKP+R7b6I2pPSgC#fSs~9)TBD)1jmrYEEO3-SWX?eThNhT%kUz>beitW6lw_>qmpP^=)^K7M z$C9~V_VTcfbbovR`RiO)hKysr1m_9oJW?%yOK#HgA>=_b22P~ z^>LDMtWylLxu`sySkxpONiHjRCON0zS?{BQqv3>tW8sv7=e%DEp7%A7aJ(#y$+N#X z9puT@;7x$&oxLYFqRW=l*pKTOo}8~)%%2kYDPl+wet$+dAUuay4+%d>v=eLL!>0|}RdVI9bkv5$m9T*FRs5?|{lM)2IrxN*)u=CvtWMOi*sX?+ehplFITw`}s*&`>_l{FS zS0~c=yCaNn3(co71GZSJr8Wg-w^m$-6a-h@)+d5I|qmOdBPao5? zI%R|NBJ_Oy1KJpYVv`>PBn4+eAhr;bNCYK+@=$AFFoTL7dBYEEuWAA|fjtdZVBWEc z0PjXT3kF6t2KiSG_+hW=US0wx7+(}Ku64-oB90qz)P*0ly}ahinpDK>VoX4y9EUxF zjSa6IWVCn6i#1MO>65;-J;qvUwgr%+R25d4-qKUi;Z;Sgw@%icqoIw7ZTukndC7o( zlZ37!&8nQ2Z&^aINU7{Vde7Pg1VEOek`8%BEv|zoh-!y$YJ~DmO6Eh_F-!QLY0;Bf z_%pXo4>;e0dKR?7EDz}$ae3(MMl$~=O=#*r=O4m)v4#q|A8Kd4T=#yh)mF_W0sI2S zqcKMS0RR9100000hX4Qo000000RRA#YXzkg+5i9m000000RR9100000c$~Y&lOzT< z1jH=B$dg`f|<_vn;fNB?}al@db1s!RBbR^}tolMyATL|83MFEwwAe(gfU3ie&+y~tU+SC9? zLqj?sC`V3JDIhU3E;24K0JC-q$`k=tlR+PU0XMV3AHM+slaqlVzX21IK_WK+W0QFz QKLU0NlVKeev(O@t0rkJMaR2}S delta 1514 zcmVNZ?42=6_UC6nI&vcQEg zkx`bGC2fRoRnXsB?1!R=gt9D*kjNGhRM5gjK}1l?cHMLCy>G@vcX94_{?9%4+v#L45U4&Ut3D{;ILwI*1!4^OAWLy272yf3sQCNGX5aAucUphxAIqL{qz_Q9j zL&NP?9!}U*?#in8Wd1 z982bc(Z|Eu(tq&*62f;>Q=LCSSyLj0 zEvvS4oPTKh4t!?#g6YzcfFY)olG^v#ERzK|^UZ&l9G0|`0H;}(!{T@l;*3eohmcw; zxB$XV8uhHm7-uGo=_^vMNGx8qAx4sVMYNV^2hnly$AFmPcxW;#g^EnHZM>?h;cz$1 z>9VhGA@Pl=CcB%`OL}xKZcF>3uHGU#ut_8Xntu%GH8%Z-LV9^-$S7WmKS}SMedSvX z9X5=4)rRVGNYTG!@JDGw=?88H$iXLc%%Q#_XLg~EMQ*ip^lRYY%ekn;kVDcN-8)VR zU7bkd?G7=*Ei|9T4A^3=PW092(Ms#E+~H;lw`94FBv~p>u66yzq6Suq870|za<{E= z&p)IBSa1vfsZH4LFeNmh8(K>?c;G|ACUydq<(6I0YC9&F(xEYj-#Hz z#zxl;GTuAo#Tv)2^hw{^9w%CAwgr%+R25d4-qKUi;Z;Sgw@%i|(a^@YcrW{T$$*o8 zgsx)EemO7SvVM!$pbD&>!$w0BEP`SD*t3Ue6lZ`uukJ+pKaUj^GD@Wp6{z=|mR0lzl}` z$5X>q;De;B8kRCwe?~VsLDdlz_=b2t7g#%HMlSv>+wb3n2_9(kO(z&UP^kS+8K33+ zLavf>%Vc3EX}EgtT2h5@wdHfj74-Q5l>|NAU29dO%AM)-Q6W2B_JT6bcY}*DFQ&Fb(kTc?D+p2o4k4W? z&Uem$*Z02v`<>^Rz1I4z*lVx7&OS4P<7g9FQxjSu2ec`Pa{+gZ6oR_ONZ}+vgRa6uFe#xq@LEiM=tKAt!27@zu24d4 z;lx+?p|~i%4mDPxwEdtxJnsq>^c2O7UJ-z&V^hJYu&AIEa6v47XfVo74K+r=ldvqH z&rtjifTu!5(nXEAsBs82dZM!E1MT27*lJKi6v~P6lR@#Da0MJ+C?U#X6vqp0Zho!K z0e1=tKR2g_OX4xWz3`N-ShzoQboHvM$BUpq(-EkXWfq277^p?9>ZyfoVIyAsLL%Gb zu^Ku$&n!8@PTk`&lTh$?To+xBqrE_$N;B^T2PMy{QD3ZK$eKoz&{*je~`oj+()ryNe z5V{w(UFQUwHG9A4N!>{ogQPnPM;-|6$+!AA20YUNh<# zRerGAr6_s(Qtm@!pyahnxfc-y%8XIRK<=QqG_Xj`sBN&O0w{J3WLe?&+1X*|r%2QW zk^?JilfPIu*i@_+g}JD3(?uQLasWGp>O4dQFoRkYs^-mrQZs7NM8VXon~(wWw@KmI4cU?gOzd*KrR78$j^OUr-SQ z{eVRy`u~9FeF$E-JSPoo{}|8>0}fywy@2pm1_FTy0(<`s-1|Df0k{`qe}kL!4eaD3 z0MU#>wZIy{wtoUAi~T>2{uho1e;p0~I<^AlYEjd`p2KH2iBUQH^F&$(EP?f)4kZNU zh3&t$)jm-z>O`<({Ucy&PsjkA^6L+P+Svcy_;r(i$r}HXr7vau%T8J6{%?c7tw;hW z+A)+aio^;er0@njbp!_l$AOY4H2pb(J_E_L699Gy2)vSu4(}BxQ-kvK5xk0vk{Au} zLPUcoCy3S@!GCknUbO}RK@f<9vvM;+#o;R4EFw%GDg&V4&WIlUe<$4l@@ZEGy@|kZ zbhw~=7nBijULGnP)SQ|BtYYHdl_i75R+p2!JpBJoVhq}OfI)+Spmb0nxCRdc854*G zUV4iH-oUQG<$1}tH-L134Zhek)N~5>6z(b*DCl22gFXZLi<3VX-pWH~SpdlG@nCp~ z1At2fICbC@;RXbCpy%L#S~Kbds5NlRAuxf7G^2h4b0LgTEO<~MECAcL9q7Ob6O4Mc zEg-&wq4L0>o^UB%8Yl=T6g*SjJu%rLkPr-4-7a%%dk@^$P z$3qEk7skYCx?K#cAGqmKVM(JoIjQfveh$^%@+G|-}eFIas(aNz*tgIeRCmHq8hRPQ4CFN{Kd z{8=1t;RQ1H#|_N=9|gI{G3dg`7i?76-3vkcPYFSf|5X6K3%hUs+wN}xu3XsN_}_LI z|0&e`MOm(1^cU*xhX?bM!6J9T&H$fO;Mv8s2b3hN2m9i*0uCDmGqd$@z!l{H-UF8{ zi68>}z&=w$`Jc2QfTjWOIs_o29#ba>Ex->U0Yq#Aclq*kECKZGuK;626=(@Vy>B4{ zjy$!f&zHyLF=)~Rn#7`lfqNx{ddKm{ViL4y11+5XW3dRF*neZZ0xjNw7GQ!vVnB>4 z)C2HOj6~34L>@F@16c4bX#;Zo&z(KC19Sv%T3wu5|LJj{P>2Z74s~Z&?7*i5Xkq36 zpc%Ds`FLgoBhP?=8-N&K;M<_XpPSwa0RJ9_|Ji#mFvWkxnFb6IUxDFI{lNO_0rExt zi~tS@4lE2df_jeu%)bESiO2^{Q1uhPFhPs}8KLq+=|ez0s(O@{`s)AEg9%>L?qvHS z|Ahb2D}eeDaDAUH^e}|me;Hf{4NwJWybPfIUwSB@7epd9zF$5%Q4ca;Dd4-HdcXtd zKJb0(4}e9LbO(V1OaZ7Z6F8?3iYVa(=vssW5XnT7Eb0X8R0VUhbr2wA2nPBMUM(ah z@eVM(8KX6HGe)`pX4H=utsbC;K#hQt5%Cx>RTdmj7VOZBT7T=#B@bzv2NnhH10$SH zm<KH_puEKXI3}4AxLCHNGee4*$99`@<85wzbdF6m9fk|Bz zIN_rT!kGHn+M0TG8w&VP_?!|W{6ujDo~|GPgI+_I20un!2aV^DNOyqWokt?m0cyE` zL<#^j5um03)mcO$I{?}N&=r6}mXJsc;7;lQC=Yl?Edw4L~t~lO^vP63GEj0R)f;CRJRJn$U2gI*H zaXbJw1UCXOO@P~iKT=^<_X4;{pypR=|990I)Ie=?HaS&h+B;dTN*HBAf0i+jjT~$idG-QB}8h~^F zdx#6hyu642Y6;*?01gxkb%B@{fW7_~771WA|H882A*!U*HGrn%9~wp=LJxqwfKLG# zA^^@Eeg<%Oz~;`u>C_l71ptl%uAp`eQwQMG;8tqvS^)sJ1@saE%mP*Fi#4OoUz8h+ z3bs!Z&|VtAs{d(&t^h?Dp|%9DS%KH8F$jXv79jls8tUSm0JwobRMmL&IE+}#uq)`L zXn-Hs0%RBv$TK*mI(OX?g&%qyqZSnutzWoK>h^DRxDFfx&T@wg$_2lEhY~7?8pYwd zclZTw0G<#CG33uz7$^}K?f@?+gd8GZCjSRQQ4@IW9ZEqDfG2?vKt_2lw5SyWSkxsB zxy0WCGI-^ozJq84N9sX927U9`H3A*-2gm$;ez^(Vb(pTp)TZhY85>b&W zFSVnWk(V#E??4=l5YjJvk=vithCwgl4V0DuQgfL(6uxJ`040Ox12yFX`V_1V(WPhO zrK>Ecg=(Wl2h3TkX1c(EK&Yz-e_5o*}wQ5LAf z7T{Ll3PzNI8-KL_>OYJt7xiJhyzBn#H933?@Zz}CcKplh27nVmsQ=H}H9#+F<4do^ ze|dR>S|}V9`PHS3z@?1{DrX4f-6ambM*%Nf)Chr$qkO-i;vZky5MB10^ra2Z!^V`D z)WG{DMtCh6De#a5WT*scR0c;lqX`X@qpgFTmnWYM#MkPf3qWk#oNWPe-^~jc-K`w# zJnL?mc%T#6d0E)mI(k`vZ*MHD-TdHgcocOb=5gq_(98KCP`HydGmNh0M~1V&5hfSW zk%eJxd0I$GT14qP*W71#b27Y zo@YXRpT3DRcV#zw>l(q@^XVA4;yw`j%>un2q)pWpIB9@uGEqCdw)R^b|MpT4sxGA|2y z#?h;ZM61**%Pb}Tkv*|P?-n_8u#mMFcGMpIDKLstr|+;@;Rg47irNo!qUSWv)j7W2 z@$aoJO1r{|PlS2R+KZY4k;q(+&gcn~zA?ojzSAE(D0LbbdH-jS3n5c}=hNM$XY-ko zlycTTJZfx!Kb$b=KEn>F^tK?TjUzIp#dZvlLhB08yZIW!IyPL85UQ%-{wZS52y@xk znn-2n{TzK*#LIeSO^dK6rR#npPd(NosmdLfHH6%rUJ+KLlUgHvQY!MC(J%N+61Kv9a?Qo095x?1w|ut(?cza58{Tv7R2vtqSJ_h0A*n=z-VfQV-doaA^r`qu zY3EA99iv#DCA>W5@PBJs){T3Eg}=Z-s;!w`Q5LVNShjP#Z!ArwL)rMVVPzDoR|S_I z@06V{LGEf#uD@TTnr&B2;pVqn3z=2yyZKmiFQpgxHlV)cxJ@Po8FcQAWx>q`m~)j}i>?N%+jq&` z8@Z6HvBH++Ws5Z^#d|Un*d2=}%jEKryf_s_(;uqsi3Bsohep!ri^ZBM2-0vUG4|V3=6~hX6rTa$m^fZ|vEvs9{-9M{a-~Iit z71y`Jcb%R0Fkcjf7_FPl3e)fCM7qgmGg~jp@OiHYLOV5HAdxqIQ7W8#vyxY~fl6lA1y?e+( zu&p7J@rorcL2tZ5}m zP0W)!RdlVTA#S?cmB1dw>r*>L(fY^=(bNgX_AfZ;BT={dcS__g;m4Q9a|iHPDxj1EsDQ`_PD<<6}siSf>GQsxDb4PP3A~Y z;p4*s>2`PAS_j&j5Upfcbk`-B}9t{Q@Q_gcrRQA;6a z8KKxdkwh`~KpU(3CNJpHztGnm;g7~8WxX29kDGk_`Y}e_Px;RSlr7JqToedzxM8cf zJ`?bJgV|2rg8msRPj-0BH%YUC^_Mu|@Gxgf{Es-%hs>3|Dd+0&in(#KEBH_aa1sG)8sPm=dtz7gUzZO*pzZ38( zUg>-Klpg(uHZ5t9Vbmf2=XJq--Ei}~d6MU!cZh%GYFkRzj@m75n?JES@BSvZqbNbJ zBzHTr>z(V<{IBYaGd=2Y^o}ggGc*P~Lf|C#H8F5vkh&H;BH@}aegyH;BBP?Mw+H&; z)n76dO&te`b!XK#HxyqR31~5i?`0TSZ1Qzzd^t*MC=gpdpwq@HFR*M%N#tJVl#1JJ zC!V7r2oS$koWvgkWn(AZ(?t^-E4*>NiKw2~daMSyMYF<`(Wa3|?5)L@Ax4D%Gg+lM z@=KbsIVq1E&6D#g*!|bk$!Wjeb_{91kR-YPtgxx~G+l)KDba-IyTQ;~z09Ks zhg5?!!Ob(~EOKHVVYNy#(=@l#--(E?Y(X7M7@sA*9U0_?aVfQ=3;TR;8_S0mIjRtZ zr{EQ5G}BK&cBG4SHm}HWSJ)DUe-wpS#fI68)bp`QL}dFsg1{`ONxxL>u~8Bn<=n15 zyDqTB$`UW;ujtO?^E}z-pjNoGFz@;ta*HxZ`qP0)PBsP;Y%?xy+cVm5oWlA*ruKKV zVQUWYwW3J;G;0mn+S=%8$>`~s=xJ-th7Y9D7R1d4#91#RU6QQZ_j)KetogaEKXF>a zQmj3(a0MT~WMYHeG~A`hY{>{PW}8~MJ?P?fvdeotBIfM%ubjkRVu9*f_QrizUKQI} zY4t@IL9M#e#;*WiU&PCh*mZGE>l1as;cI(R%FbC#KGjSO7SS(dYTuF7?vU3Olh-ci z5pAwTeb?#945hBUM_#M<(vU%Wi%xk{c{vW`V?zAli3wC71$%W#~I)%S~Au9aSR-r}v z{CC_UQ-8nKp_$fVZQYyCt2qejjH21l9bIb)_`BPLLPU}Tt|vELPXwHn`(E5I z$-ya>R=g$g5@uxUP%l)}I+Y>V8uVH)P(O!y;*+G!IN@D~K7BH|{U&E&2gTEeo3}Nt z<0Dw)mXE%evbD3R1~A_0=4OrP4Crwnh29IWa8ShmI=g1-^kL12@nM&Hyz#B!2O&RX z1MQh5a8Iyp9Rhx?lhO~|8+lrK#;Eh0Xu~#M@vc3$&H@o^gDl=ZEVH^RKf!lU;&9eI zRq3c5o5trvop_Y(>9+IhjBJVT*;{LG%sn@=p_yW=O6RZIi?oLAbBn|>%=L5DHxrPn zZ4n%SN7281e@ZDGhIdaim2589_w=JNqdDIPJQF(vExc=FgSNoxH%_FWgu>b zFsst>wbxaL)dprM4$oJFx#|4MS*+T%-Zok3`1txAN9ZxJ5{$m?x$Yq&=L&b;7{Q{# zs*)nf2e$QS(aQRQ;bh1- zi}70G8HYC|y?#;?uc*Og9-R;-|_RPQW&g)_F^T}j= zl~kx2A<~~qHYd_wem}Wh-yZ^jj<>=75gM*RysRs-C`7F5s_l3Q+EzfkffDwrLjS ze9dTo73}=Q>G~J+2&Oqg*0iy3^N`US11r|S1Lcu^gdShiwQWNd6(1_LD~Kd^__1fy zWlSV<^xuFXj9y&xz#88nxjAR6an)9bAkm{q{d%MNzD~j~lW-aHWC#Bh2l9Pd_1`a9 z(%K3VCD$?4t-mZrvw7?}9ntpX?3&PEJ(N!(-5_JnzLVzB^%L{a?Ng60V>$BA2}WSK zq5NUrZV+y|{yso6T(g%D74I&6bEY*s?B?Ver002%1&hd9n4J4nv{oc0Dqddt#t6`5 zI=K=UcnT+16mQc6YYX?|3*aXOliOp3Uv(W6=CEZLe6fpkNv=3wddN2z)E{y)=z|bz z>(_nfw3pH=4siwWw9=f2B$sE^!-(!bDxD&`F)1is|AU^P zENXIt8AcNwk(y?x%sI+VT7EuPcCE}B5L;58f~WDx6u?Y zgDn!ik}Wy2c1mc>MP;QeywA~d(X!;#eLo5#-A{SEj*~YxwM(VjUO>SmIWYKSn!BI* z!Pi*n*R{8{mVGw*Tx+p&xHgfjKH6Nq_|vgYSH$xascO`yWLOsC54^Y=O-IkuS3@Hz z9)^g9*}cc4{lG^V`Tp3pqu^Csq*w}~!M;wD8p_2bhJKxE*7VLK`3DRhfQi|sPA`DH zip#9z2u&||_5Hs2qaJ-Z!cFxSn#k#Ny)Y`ZCZ+(Ej~@LigET!-KePtki{1H6-XtHc zZ1*@kwbVI5Uh_RL3*GAIGamDfTDn$#yp&Gsvv3c=)a2f)J+7)d*M1UZ?_c|w=xL0Y z2qmT{qn6c~QE{tvpyHZsM$mb3&oZFFytrrcdgtCB(+9iS{WK09ouOBq7h1d9AQ&## z_$sdJ)=;H0W&S~t+j^j&ho}vkh<)^XA8CT_f>&lS`fSzC2fvM;+-rb7sKu^!_MDE| zeJ^GyOTU!j(%~c2#XXx{tORH!O(_6`AWhZJE~}fI*nDQK=H5)3LZx%}!)n;8bBSu_ zETB@>9)|i2BX_uF18QEqlFhl-prs2WTU6pa!uCuw!Q2cM|3vNup8QZ~LPbhmo>IJs z9F*FJ28R0d6goH_#K82q&7%9>^6vYFZtmH5lNm8(yPxV9(Iw8z=woB$&f;i^DK0%! z+^H!p+n=qCW>f+VCu`AQvrQzV1_;aN^b$G|kI1DaCA!&f_2sXPzB31eJ1rgW0wuzA z@_z&!lo&kOufPo9!dvG1E;jkVPjJX1#)^}yyX)kBUrMrL!m+9Vb;+XC^Xr(aE#w6u zQhMtyHIoEnh4W*vj{^$$C>+brh}QPLFiP?AaDN_K=Zu{b<@dLOIh70yE4lKHHy2Tz z|3>evFqGm|wyq>*2_LZkwYy>Tx_<2@6Q$K`jX#O)Lw@h_TnJ`M^!DV3WZZ23;>Pkt zTYWdHtNgEfuayT81exED5ns4|_LcWlw~rp#XA=CWgpd@<&m>yStPhxYjdq}$FIVDh zy&HWyrLq>^+kQDo7KP0)8d+d&USXm<dZ2mgea0#-{_$^CacpWYeZFuRY z=^J5zIAUuB1++c!hE%V0N(2@;#KlZ(jTi>6Yny3Y9&NntuamcdiPVhNbtO^t=#a*pgv7xf9lO^m>L*0MrOe-x zRXb7Qy05tLG4E>{NhI&xH)%gOsA!>{OC$X?%L=r&!(1pDtucnqc_fCOyUcmAP)Q5R z3@9DAa?O@zC2w%}EjK+=MN41ux$&Fw`nGwzd~>JrVi4^b?WQTlLpW#r^cGX%6%UDJ zYRV9do3YI19>i+fuwKdKK*|t*edx}rNj}-c05Kb$Wo3zm3cl>zOloeJu-VBK-BZna z< zGS~Gmq4PgX_0eDyk%MCUZCBT2`%L$yyRrf@#pX?G!_i5H$hAp24wV&YEu0qp>} zJK2b2HFLM(6TcOu-2_fiLT<%36}D3n3F2DYeXt)qv{NfWi)G*5Hv5Lkgd%H<45JcC zDDhvVAp(n3-y z)H@i%Z7Jwi%7|8#mrCO|TpJM_{b)wR*!tQ4yjq#tE$v0c0obB7crC%a&P<~7td{(; zZR?6u&l~0LiPT_dVsq9J3CNMOS&eaH>V1ALt7ZF<((AU%eTrBTD)u4ceP&||#ix<0 z4>nG(dgW5^z_2}9VV-Pa<^)mYC$=+{LH3?(iUgeAVPolqf_`zTWj<)*DtcrFbX|&5 zz4O>rI{K?6j&~<(K2*bNAFTSZj57Asd13V($knD#e_Y>l(SKK`E@<5DLJE64rrErlqZhvOi*Y~xGMaX zQEq|V6>%Au@RA=pjF>!pUA(TLP{nn9zB`&tHnn`f^~3!QmWj=g$C)IdTl{@Ud2t7k zxS+ccjF*tb1A*ygBQSY6=5l=C+c(R3`MC0p{%nVXqFsuKUcm%A&Y+{BYBZZ$}@G{0xMWJ11#v)5Ak`33gK0O{|z zyk!9|m{L)Hjb5Gy-{VPc{F3l5ZJJ29WmnV|%z({2XqLZ3V(?rvCYtD6QODzTJliWN z!|x71PC{er{7#;{^++14hkB57P=UZ zF~`>ko)X}iX9pfF(^Gej+vZx@n>?^;iw~tNzTf(s$wbScmgG&lcDj1y-ZC>=7(_#kFjUx&NVE7GEk>s_{w<<_$-JSL z`52ucp*9%MVY?dLj6oXZ8k>!2&zVA9kI{kX#nVZ_HKE}En`^=Zub16;XH*J()&WqnypzYip}V7H%YMJ;31}NApTw3m9vGBv7MK^7NU<2?Y@d176mY3(Nj>;-3tlL-=dD4eJb%ys zbnbJ;V=N@eOB2J!4YHj8OT8}R4d|6iJm0PABT~>O>pt9I0q`*mez4qIdl=75)Y1vFx-D7ft zche+BA*6jhW6u`5QfO~hK0LXGP|Y8LhctD1DAsDElicJ=>8MIh^un3K*k>W%PFL6T znPinw^RPmfF}sB!k$;uS4mx~jy~@=^p8#vV|9$F~R}J6kE!8MPnUSybMr`|#9CsO2 z&73c0QKiqhYR~PTw#amd-g5r=KAui*kleuR{r*0LknUV~;Nc_6t?MS3o-j9B>GwV7 z45gj9RPS89X&G)Hol z13SW~h)@@G3i{^9+79Qtm-g`U6(<#2cArzb%vu;aOk-p8zyG*|iSysGUv`|q?86BG zBC}qPE&V7@UD9`2<2T=k@TNUeY--R;mlLfXvgKIlU=Tnb+SS{ARKYU%c3PlihP%?s z>p0sCM$(lFos1x2*+GZ~YV^8|Lf_l$8CXDHHj1c0x;*EE^C5AvlPU|U5Z&4L{$bp; zc)QrlEpHrLeqe@akvk*06ZV@Gk2I)pNN%kP%CJ#6)>q;$PakJsWROXFC_8V>!QED{ zNS~WUNQzU-yUB}XL>@M-1Qsp1ypnBBvZA;J6Isdh?cJ+C{A7mfKF7TIWXw`5mu{SX z-THno?c$g2>|iQJx{fPuR4-Ycax2(A*K^(|U%0~Ns{AX$# z&9H1KX<@IFiIOfl@`uq!vRZ}Zg)+(v6=N})#%4XKRX#uICm%&sXT(B7;g9YTu|yH@q~sar8*7Gv9ch0x28lDx8v`$hS+QhzW=Z0n)X8RfGOaR~ zoT&@#W!5GYS}OH>6s$;yK9n)2N>6zyT73sb_AaxlYmKxzbv6yt*kcBL%KcuvpFrSu z4lHyBlOYi&bn7x>VQr#a^sw2Pqfc#LKk2Q_R)MO6aN zcls2^qUg2M5ECc4H!r0PSbS6T{6im9L#Z><4c2X38j-8p49An^ySzq;#@n9^;;U+k zU|;Q>&I$}3YBf7yuzWtIbEEL8kMn5mShMAy6Q{A?Hp%yr0x-R zii%;;>zcni?l9?+PA(P3^6rk*<8hrEtkuT&mTJlWAUxwnnQ1P&y~8yl4+U}l{OWImns%q z4d{6iuAjz6=lu;$%d{zv#WGgckOq_Cs!dH#^0Q#1?}s6;qVZd-Vj0MJ&+U`*goD%H zK|7D=Wfrm$i|;sDeNhVFh~K(7FT=QVz7NZKw!nI}y4tO=A5$9OeC}WU`-B?DVy{~{ zliT``P^5iqF7J)j*LN~*TGCqbdPHIQR1-Sp8Wr`M9-CT?T!`aid>wl_(4F@H0>D%e~0RKMP&UqM{r9)xYFTanS!x{y$p+S7ho1=tVMbt?se>%7FvBi92XWL%TC6dClqW_5Bi zb8@n>+H^`?vG&(&{NKkEGu{lMQlK^?Ml&ILo9_06Z!oT(T6O%Frpg_vD53!?miPTP z)g)B<1cl;aD{O4(m>(0yKCxkWGDghgfk8LXA6M{|uv4aQit40rvp&VqU-f-LVx20C zh_kSuxkVu@(Lbb|+(6E*C8-U@*F%hfg}I+;>oPI;mM-^5+<+ESS`)`VOvX4Vu$g)} zS}kj2U67Yv@A`PRS_+PaQ97kbp{7T00+e)SZ00B3n;J>aNGnegv1?4?vCfYKo00rm zu7xJ=sQel+=E<#nq0IzLqx_V$8r9se&%JJ+o~B5z`)Gxod`Ug=RCD->U~qR^{>agW zXc8j7PG8@X*zfqnVEKdc@`sl_aeXdi4Ve=!TvxyQm+!s$+)_zTUUqA?E}NcnBWa4k zJ8S&FKV|pV2IiK+fL^~pEA(3B;9XO9!9%?${|C2TE6tG43JSEnpA;8D2=@`U{erof zv0fWhuQC1MyU7)UAKryWfkp9jcp0-{Kqp7RyU*tX{-{oYV3)kU^VZk7>zVf?eY4#V zN#Pk4e45eCLz{Hsu;Gyrn?V`&hF!T?7eX4o4kKTEzUDBQuPUBMxwjiCpXQPloLvQa z>~WInu0Jft)Aba7Z7d!?y~}~;QZzX`Nfeto;B8CKd%l;&grQTczLhhyeoQM4%6_@ zl6-GA(?_s$!#b-w#F%m`IEZAU_qNg99BymEEabck{xB?|CYhYQqNpr^v(bQac9Tii z#w#W{)t>#p=ap@YB)^#0hfjiSQ!M8}#l)W&w6cA_s8$9fpIa9izdLNq720nv_}#NN z5x?Mgm`9LH z;-2Rw8Zv0GoAWZ4z4F^Yl*%sMNXQ_mMn|JeXmMu8RfFAumy1~x0cAKc{EH;GJuRW3 z-(yy9*?l~gL&!`r@)v!etW97qsb9#+!;sw(cKJQC97W9X9fm!y(_eKuA+SuqUR8_U zt@91ykA|z0RJZ)h^ILSwX+zX+{P2jl!oUAaMGEc_P70fSxGX_5RlJL?>B6Qr6PSS& zA<SevAX#wc8Zy zCd2B`tQyhs2b@Co$}cTN(^4EoXy4x=@7dyZVK?8-HByOo9uaX0eUpr%9JK0+d_Qz2 zhPiGr;sYEeL9oVY);^RvxR^_JEI-4jMt&oNEL(XgAT>f=lfhvxkgP)CU>(QYk*p6Y zd52PQ%>FtV4>z}u8_PGuEn3Mh>UR@Ejngt>0+a6z-+eghB9M~sg=LVDO_`euk4jF6 z^P#{qb$h(A0M)uO1<2MC374`j)sw}~v9V7d&$;XVM zGABHS@KzXZ>KI;dv+ZYevM=&czOSrPC*>oO#(AQX({3MeMox^KNkQT<_dJ_!S&VEG>O9qRIs8_#ENs4A~c>*yz17SX{B8Vz|b5-xP;~8H1Rf+%kkxx47tghnhLJ zQ6^E&!3q!!QiY5aoLwJ{h5ej_%+zrjZY!=%MbRX3g*3{GZ!XJ4&28)MKVj4D$X63Z zPPwB~y?{;FlA|%mY(pO5ibnF$(pX)4!D#D57)4<@Ll}{uhzND*_QE+0Nk%%y^1j)B zH1(ECMBM#@h>G3WO!B?=I(YKvBy^cHE0AuwRT!I%Xx>+S*4c+qQVvv>;fe>FVzHF5 zp}!D#Z|eFvEp=3$#T|ZmfcfHz9G&K@ePdXG^jDYnj9K5qX{AL>74HmrzdP#8O6WN= zbjkZPZX1;WOXtFihL3z25O#7(^_Uirf1ONjGs`OdQ}K?t*f8Sog^_GL2{xBxilT?{ zT}f4#_yVlO`sRYPZC?uPN$&%+as(Q7h5d-3Lw0#fn7xTXvamM#$28y3H$$^71e4oU zT9k%F!>OB#xkXEQ!NfkXOaue@J~EW4Md~C+&y3&ZsVpfx-)Qqm#Q3%%s-9~sy(tp> zwnaC9ph&t(sNcm>I{Xn|kP>_6GarKfs&N4btW_z=sL9XNn5<#_wptaWrp;lg0P^DZ zJ^1z;j^o^`_x7&COmCGC@+>8~G@s75{z90W%d+sUEu;s%WBR1caX1{ZRdMv?qv|80 zGORe9>-qkgRbgnP;V%T3XTlp@(HOTmcAC>qsc*WE?K7~G79^vedmpJZ#MKKJoAQyL zV#10~F&nD`Yo(b^b4&A0_)5YncWy2^Mc_El;3$8$tBShQ_z}mn{qw?L>z-+Pg&^~k zVob{je((Gvch{w#Axbv1{kelQDQfIbuTE}-e_nz5EDI}UTs3qT!JQ?@zCE%)H`+01 zt95T_SrBs}IZL56?IybO=Dtg75}z#pT$cgt;hNk_74;K)ndf^ozQ1_YCsuH3ExdwG zvOCk97WQS`hm2Fd>xykBGX(ccSJPU&*vWe1i3=z9kW>1Uzu%-G-O1snhDB)@*QwNa zF1LAb_G>|Ty1`{?`%~VG+5I$&2+Dg_I}n#;oz}gC5!pj#KHu3LB^Bd@8mGnuy^r}p z92!E{8;d^)+ctmsbrE!rd6T%8TYgH0LGPzcEB)i&6vn{?V@P3xsaXPe@&`(t^1@nc zS6`*C4#}xbcS!_&q_{r(iPC2Oewu9EczwKAl2=WhX|K5RF2xLWXYE@n)p2Q`n@p=K z>u^Sr=!qBiCFt7a#5CU~vF;NaRlAI$@qHhjr)hOtAl%7GROq2Um7CA36e*i+nEI_V z<*d@s_MnJXys!faORYTDwu*3jeYPE&-KJaet6Wp_{IIU|n2~4a!Q=I~#P$zL&4f!% zS&cO*FB+T69LpKBKP8uW&e`&xRNZ?;BbFS5rAduJ#PZ@X-@B{n9#Gc+ny;bi>R4=g zM#AuYgi02!+!LZuU0StAjcP{=QILnFSpt!kcaFQU<|>+{VTL48s&07E>XJ*v*>(5RAi4=l^@uT2vf_tPI0ZRR z*XAQ-nsbIXRlx0lWC<4QT-W2`hO0`PAW;ZKuERfYgXASNdd58ve#nNO-yJY~|~Z1~)mJ zO$MD=GOkk_<=sx0qO(GSuHvBaOEONEPKMISyW%eQ;%IEX2wD4{*Y@I*Yw79X@LjDp zBzlnx&l>2F()MlJk^VOSc-!}OwG~wttR@Zt-`);9!laTmqTF(Jc$#-E5nET4v_l^K zQl8G{=@J#^9pmdKVviE)!%j#y@t9$bLcw?}g1!&29*7@j%_cw-ayk^W7KgY#;?!-# zE7AqwnM)4#@JJ)2w-O_+OfrrOlvHuy>qa;`3q>s2@@!g0RCs~Pq@3bm`Q54LCRU^5{*;xPa0iA4zHnN7+qm>h+E2L~((~3*Rm97L44W&Get_V?ePw-|vgn|hCd!H!ZHzz?N$M-d{lc%0 zs2`P6PxFtEdYRuIEMau)A9WNG!1aS=>QX)Z;b=(|!T8p?gHp1L;!#Fn*$}sB`R^s< zek$5NUa3&PGyTGVmVBBOCEhaSrukd@?CSa3UK*B#=Iw`O-GT*@l7T>VR z+xEpbt|`c^tGge^ZMxX^xH#Y=RPXm|ixG^8-+^5_KVd&AbH=dEcHLtzcQQxfJ4ET= z1?fysWx5Fjd8J(NhLr!}Pffc1xU*?%8!0_3J1!!f(G01E-l0bo*VbBap3{Zn&`oFw z9$*Y@rf;up`^x$dZ7**JES~7;!ZMQ^Z?!gWnC;fSr9}KTOK0ABnsC(UUr6L%_@gCt z`Qw;=WKkDfLAi3wrn1zWP-ArSJi2#k$Zapi!Jhm?T?J5Vjar~6B^>*Bb8 zyY}Pz_$oM$zY@TZ2W?U}LPy1$d%8cKmWbheW+~AFKEuqmiapt`KVnhj$bzN6pkpUh zpi^Yb&`Lg_!WhV_En|HUXYg68*+0d*&UNM3;rJ>I7yp*rE8FK%?pqk~YlZ zHX}2{;yfxPFI9V#obUQ^gsnY0Ra%J}h{1Ygsi&QNb8Ur8j9D{7d^oaXpGMR_?%VzQE0zs*`aDa) zg->?FoA_(Ufz^74^E^~0FQLUGAGOHKE%}%_Rz_B~M(*!#K9S^EWDrj;P#i5WldqDN!^L1S6X$p9rIvsEnx2G>Hro zt&s@+FqIGY&#yiDh2dqXDo{qaM;Zg1D2<5t&(DJX{EsJOaKSWwVhLq=RK60*C<5`S z^GFj%!|A{LIfOmDHbWdoz~(|J1m6Rs`+*k{DSR)L0j`rtg%ccnf$+gSGR1Lf!Y`ys zcr74VUjCp14&MW$)7T5$)P-*r70z(t1>y(y$hv`Fa{1LH3jpH7TeG-v?wefbE#P}u M;!tHcXEyu)1Ay+e;s5{u delta 18088 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 +#include +#include "cold.h" +#include "widgets.h" +#include "pages.h" + + +GtkWidget *get_edit_rules_page_new(){ + GtkWidget *xxx_grid = gtk_grid_new(); + return xxx_grid; +} + +GtkWidget *get_edit_measures_page_new(){ + GtkWidget *measures_grid = gtk_grid_new(); + return measures_grid; +} + +GtkWidget *get_edit_results_page_new(){ + GtkWidget *xxx_grid = gtk_grid_new(); + return xxx_grid; +} + +GtkWidget *get_edit_discuss_page_new(){ + GtkWidget *xxx_grid = gtk_grid_new(); + return xxx_grid; +} + +GtkWidget *get_edit_help_page_new(){ + GtkWidget *xxx_grid = gtk_grid_new(); + return xxx_grid; +} + +GtkWidget *get_run_measures_page_new(){ + GtkWidget *measures_grid = gtk_grid_new(); + gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("movements"), 0, 0, 1, 1); + gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("transports"), 1, 0, 1, 1); + gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("transformations"), 2, 0, 1, 1); + gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("objects"), 0, 1, 1, 1); + gtk_grid_attach (GTK_GRID (measures_grid), gtk_button_new_with_label ("situations"), 1, 1, 1, 1); + return measures_grid; +} + +GtkWidget *get_run_results_page_new(){ + GtkWidget *results_grid = gtk_grid_new(); + gtk_grid_attach (GTK_GRID(results_grid), gtk_button_new_with_label ("Repartitions"), 0, 0, 1, 1); + gtk_grid_attach (GTK_GRID(results_grid), gtk_button_new_with_label ("Correlations"), 0, 1, 1, 1); + gtk_grid_attach (GTK_GRID(results_grid), gtk_button_new_with_label ("Evolutions"), 0, 2, 1, 1); + return results_grid; +} + +GtkWidget *get_run_discuss_page_new(){ + GtkWidget *discuss_grid = gtk_grid_new(); + gtk_grid_attach (GTK_GRID (discuss_grid), gtk_button_new_with_label ("Interpretations"), 0, 0, 1, 1); + gtk_grid_attach (GTK_GRID (discuss_grid), gtk_button_new_with_label ("Discussions"), 0, 1, 1, 1); + return discuss_grid; +} + +GtkWidget *get_run_help_page_new(){ + GtkWidget *help_grid = gtk_grid_new(); + gtk_grid_attach (GTK_GRID (help_grid), gtk_button_new_with_label ("Can I help you ?"), 0, 0, 1, 1); + return help_grid; +} + + +GtkWidget *get_run_rules_page_new(){ + GtkWidget *rules_grid = gtk_grid_new(); + GtkWidget *hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); + gtk_grid_attach (GTK_GRID (rules_grid), hpaned, 0, 0, 1, 1); + + GtkWidget *frame1 = gtk_frame_new ("hello ?"); + GtkWidget *frame2 = gtk_frame_new ("it's me !"); + + GtkWidget *grid_3 = gtk_grid_new(); + gtk_frame_set_child ( GTK_FRAME(frame2), grid_3); + + gtk_paned_set_start_child (GTK_PANED(hpaned), GTK_WIDGET (frame1)); + gtk_paned_set_end_child (GTK_PANED(hpaned), GTK_WIDGET (frame2)); + gtk_widget_set_size_request (hpaned, W, H); + + gtk_grid_attach (GTK_GRID (grid_3), gtk_button_new_with_label ("in the right pane"), 0, 0, 1, 1); + return rules_grid; +} + + +GtkWidget *get_edit_space_page_new(){ + + GtkWidget *space_grid = gtk_grid_new(); + gtk_grid_attach (GTK_GRID(space_grid), get_a_space_test_image(), 0, 0, 1, 3); + gtk_grid_attach (GTK_GRID(space_grid), get_objects_and_situations_horizontal_pane(), 0, 4, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_XYZ_box()), 1, 0, 1, 2); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ZOOM_box()), 1, 2, 1, 2); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_edit_TOOL_box()), 1, 3, 1, 2); + gtk_widget_set_size_request (space_grid, W, H); +// How to use gtk_separators ? +// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)), 1, 1, 1, 1); + + return space_grid; +} + +GtkWidget *get_run_space_page_new(){ + + GtkWidget *space_grid = gtk_grid_new(); +// attach either : get_ELAPSED_TIME_box() or get_simulation_time_extent_buffer() + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ELAPSED_TIME_box()), 0, 0, 1, 1); +// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_simulation_time_extent_buffer()), 0, 0, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), get_a_space_test_image(), 0, 1, 1, 3); + gtk_grid_attach (GTK_GRID(space_grid), get_objects_and_situations_horizontal_pane(), 0, 4, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_RUN_STOP_box()), 1, 0, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), get_scroll_speed(), 1, 1, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_STEP_by_STEP_box()), 1, 2, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_XYZ_box()), 1, 3, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ZOOM_box()), 1, 4, 1, 1); +// How to use gtk_separators ? +// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)), 1, 1, 1, 1); + + return space_grid; +} + +void window_bar(GtkWindow *window, char *title){ + GtkWidget *titlebar = gtk_header_bar_new(); + gtk_window_set_title (window, title); + gtk_window_set_titlebar (window, titlebar); // header_bar +// GtkWidget my_window_controls = *gtk_window_controls_new (GTK_PACK_END); // _START +// gtk_window_controls_set_decoration_layout (GTK_WINDOW_CONTROLS(my_window_controls), NULL); // const char* layout); +} + +void activate (GtkApplication *app, gpointer user_data) { + GtkWindow *window = GTK_WINDOW (gtk_application_window_new (app)); + window_bar (window, "E coli (with permission from David S. Goodsell, 2009)"); + + GtkNotebook *run_notebook = GTK_NOTEBOOK(gtk_notebook_new()); + gtk_notebook_set_tab_pos (GTK_NOTEBOOK(run_notebook), GTK_POS_TOP); // GTK_POS_LEFT + + gtk_notebook_append_page (run_notebook, get_run_space_page_new(), gtk_label_new ("space")); + gtk_notebook_append_page (run_notebook, get_run_rules_page_new(), gtk_label_new ("rules")); + gtk_notebook_append_page (run_notebook, get_run_measures_page_new(),gtk_label_new ("measures")); + gtk_notebook_append_page (run_notebook, get_run_results_page_new(), gtk_label_new ("results")); + gtk_notebook_append_page (run_notebook, get_run_discuss_page_new(), gtk_label_new ("interpret")); + gtk_notebook_append_page (run_notebook, get_run_help_page_new(), gtk_label_new ("help")); + + GtkNotebook *edit_notebook = GTK_NOTEBOOK(gtk_notebook_new()); + gtk_notebook_set_tab_pos (GTK_NOTEBOOK(edit_notebook), GTK_POS_TOP); // GTK_POS_RIGHT + + gtk_notebook_append_page (edit_notebook, get_edit_space_page_new(), gtk_label_new ("space")); + gtk_notebook_append_page (edit_notebook, get_edit_rules_page_new(), gtk_label_new ("rules")); + gtk_notebook_append_page (edit_notebook, get_edit_measures_page_new(),gtk_label_new ("measures")); + gtk_notebook_append_page (edit_notebook, get_edit_results_page_new(), gtk_label_new ("results")); + gtk_notebook_append_page (edit_notebook, get_edit_discuss_page_new(), gtk_label_new ("interpret")); + gtk_notebook_append_page (edit_notebook, get_edit_help_page_new(), gtk_label_new ("help")); + + GtkWidget *run_xor_edit_horizontal_pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); + gtk_widget_set_size_request (run_xor_edit_horizontal_pane, W_IMAGE, H_STYLES_PANE); + gtk_paned_set_start_child (GTK_PANED(run_xor_edit_horizontal_pane), GTK_WIDGET (run_notebook)); + gtk_paned_set_end_child (GTK_PANED(run_xor_edit_horizontal_pane), GTK_WIDGET (edit_notebook)); + gtk_paned_set_position (GTK_PANED (run_xor_edit_horizontal_pane), W_IMAGE + 90); // ! WARNING ! '90' is AD HOC + gtk_window_set_child (window, GTK_WIDGET(run_xor_edit_horizontal_pane)); + gtk_window_present (GTK_WINDOW (window)); +} + +void click_print_do (GtkWindow *window, GtkWidget *grid, + char *label, char *text, int x, int y, int w, int h){ + GtkWidget *button = gtk_button_new_with_label (label); + gtk_grid_attach (GTK_GRID (grid), button, x, y, w, h); + g_signal_connect (button, "clicked", G_CALLBACK (print_text), text); + if (window) + g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window); +} diff --git a/pages.d b/pages.d new file mode 100644 index 0000000..1acb863 --- /dev/null +++ b/pages.d @@ -0,0 +1 @@ +pages.o: pages.c cold.h widgets.h pages.h diff --git a/pages.h b/pages.h new file mode 100644 index 0000000..cfe8c30 --- /dev/null +++ b/pages.h @@ -0,0 +1,56 @@ +/******************************************************************************/ +/* */ +/* E coli by David S. Goodsell (2009) */ +/* --- */ +/* Let this freeze frame guide us towards the model */ +/* that alone can account for the phenomenon ! */ +/* */ +/******************************************************************************/ + +#include +#include +#define W 1920 +#define H 960 +#define W_IMAGE 1920 - 64 +#define H_IMAGE 960 - 46 +#define H_STYLES_PANE 60 + +void activate (GtkApplication *app, gpointer user_data); + +GtkWidget *get_run_space_page_new(); +GtkWidget *get_run_rules_page_new(); +GtkWidget *get_run_measures_page_new(); +GtkWidget *get_run_results_page_new(); +GtkWidget *get_run_discuss_page_new(); +GtkWidget *get_run_help_page_new(); + +GtkWidget *get_edit_space_page_new(); +GtkWidget *get_edit_rules_page_new(); +GtkWidget *get_edit_measures_page_new(); +GtkWidget *get_edit_results_page_new(); +GtkWidget *get_edit_discuss_page_new(); +GtkWidget *get_edit_help_page_new(); + +void click_print_do (GtkWindow *window, GtkWidget *grid, + char *label, char *text, int x, int y, int w, int h); + +// https://docs.gtk.org/gtk4/visual_index.html < widgets gallery + + + +/* +Dans : space_page_new() doivent être déclarées +et organisées de façon aussi ergonomique que possible : + +- les commandes de mouvement (run/stop, slow down/speed up, step by step, do/undo/redo) + et le buffer qui montre où on en est dans le temps de simulation + (un seul bouton pour toutes ces commandes ?) + +- les commandes qui modifient l'orientation (X,Y,Z) de l'espace, le zoom, la perspective + +- les commandes qui modifient les apparences des grilles et des flèches + +- les commandes qui modifient les apparences des objets et des situations d'intérêt + (+/- transparents, colorés, etc.) +*/ + diff --git a/pages.o b/pages.o new file mode 100644 index 0000000000000000000000000000000000000000..335eb787222621e0b21b3032f3c0c72ae225ee5b GIT binary patch literal 29920 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®sV|Hxy-G5e!@QI!KXLHU&HqODLx4X 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 PwJe+ #include "warm.h" #include "cold.h" +#include "widgets.h" +#include "pages.h" // https://docs.gtk.org/gtk4/visual_index.html < widgets gallery diff --git a/warm.d b/warm.d index 85cf6d4..52125ce 100644 --- a/warm.d +++ b/warm.d @@ -1,3 +1,3 @@ warm.o: warm.c warm.h \ /gnu/store/fkmpkdav2zmz1k72989bdgpdrfac7rz1-glib-2.78.0/include/glib-2.0/glib.h \ - cold.h + cold.h widgets.h pages.h diff --git a/warm.h b/warm.h index e40b345..9e336be 100644 --- a/warm.h +++ b/warm.h @@ -1,4 +1,14 @@ +/******************************************************************************/ +/* */ +/* E coli by David S. Goodsell (2009) */ +/* --- */ +/* Let this freeze frame guide us towards the model */ +/* that alone can account for the phenomenon ! */ +/* */ +/******************************************************************************/ + #pragma once + #include #include #include @@ -10,11 +20,14 @@ #include #include #include + #include #include + #include "cold.h" +#include "widgets.h" +#include "pages.h" // https://blog.gtk.org/2020/09/08/on-list-models/ < TODO -// https://stackoverflow.com/questions/20122232/gtklistc-code-how-to-get-the-selection-of-a-gtklist diff --git a/widgets.c b/widgets.c new file mode 100644 index 0000000..ac0497e --- /dev/null +++ b/widgets.c @@ -0,0 +1,165 @@ +#include +#include +#include "cold.h" +#include "widgets.h" +#include "pages.h" + +GtkWidget *get_a_space_test_image(){ + GtkWidget *image; + image = GTK_WIDGET(get_scrolled_gl_area()); + image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/aXoris.png"); + image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/gg sketch.png"); + image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/E coli.png"); + image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/images/E coli resized.png"); + image = gtk_picture_new_for_filename ("/home/jean/01/Gtk4/Getting_Started_with_GTK/E coli by David S. Goodsell (2009).png"); + return image; +} + +GtkWidget *get_scroll_speed(){ + GtkAdjustment *speed_adjust = gtk_adjustment_new (0, 0, 100, 1, 0, 0); + GtkWidget *scroll_speed = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, speed_adjust); + return scroll_speed; +} + +// TODO cliquer sur "RUN" --> affiche "STOP" (et inversement) +GtkBox *get_RUN_STOP_box(){ + GtkBox *RUN_STOP_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2 + + GtkWidget *RUN_Label = GTK_WIDGET (gtk_label_new (NULL)); // "RUN")); + const char *str = " RUN-STOP"; + const char *format = "\%s"; // ^c^v no more... + char *markup; + + markup = g_markup_printf_escaped (format, str); + gtk_label_set_markup (GTK_LABEL (RUN_Label), markup); // Sets the labels text and attributes from markup. + g_free (markup); + + gtk_label_set_max_width_chars (GTK_LABEL(RUN_Label), 12); + gtk_label_set_wrap (GTK_LABEL(RUN_Label), TRUE); + gtk_label_set_xalign (GTK_LABEL(RUN_Label), 0.5); // xalign value, between 0 and 1 + gtk_label_set_yalign (GTK_LABEL(RUN_Label), 0.5); + gtk_label_set_selectable (GTK_LABEL(RUN_Label), FALSE); // default = FALSE + gtk_label_set_single_line_mode (GTK_LABEL(RUN_Label), TRUE); // default = TRUE + // + gtk_box_append (RUN_STOP_box, RUN_Label); + return RUN_STOP_box; +} + +GtkBox *get_STEP_by_STEP_box(){ + GtkBox *STEP_by_STEP_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + GtkWidget *STEP_by_STEP_Label = GTK_WIDGET (gtk_label_new ("ONE\nSTEP")); + gtk_box_append (STEP_by_STEP_box, STEP_by_STEP_Label); + return STEP_by_STEP_box; +} + +GtkBox *get_ZOOM_box(){ + GtkBox *ZOOM_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + GtkWidget *ZOOM_Label = GTK_WIDGET (gtk_label_new ("ZOOM\n ---\n(space\nstruct.)")); + gtk_box_append (ZOOM_box, ZOOM_Label); + return ZOOM_box; +} + +GtkBox *get_edit_TOOL_box(){ + GtkBox *TOOL_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + GtkWidget *ZOOM_Label = GTK_WIDGET (gtk_label_new ("TOOLS\n ---\n(space\nstruct.)")); + gtk_box_append (TOOL_box, ZOOM_Label); + return TOOL_box; +} + +GtkBox *get_XYZ_box(){ + GtkBox *XYZ_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2 + // GtkWidget *scale_X = gtk_scale_button_new (0, 360, 10, NULL); < à étudier + // (double min, double max, double step, const char** icons) + GtkAdjustment *X_adjust = gtk_adjustment_new (0, 0, 380, 1, 0, 0); + GtkAdjustment *Y_adjust = gtk_adjustment_new (0, 0, 380, 1, 0, 0); + GtkAdjustment *Z_adjust = gtk_adjustment_new (0, 0, 380, 1, 0, 0); + GtkWidget *scroll_X = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, X_adjust); + GtkWidget *scroll_Y = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, Y_adjust); + GtkWidget *scroll_Z = gtk_scrollbar_new (GTK_ORIENTATION_VERTICAL, Z_adjust); + + gtk_box_append (XYZ_box, scroll_X); + gtk_box_append (XYZ_box, scroll_Y); + gtk_box_append (XYZ_box, scroll_Z); + +// gtk_box_set_baseline_position (XYZ_box, GTK_BASELINE_POSITION_BOTTOM); + + return XYZ_box; +} + +GtkBox *get_ELAPSED_TIME_box(){ + GtkBox *ELAPSED_TIME_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); + +// GtkProgressBar *get_simulation_time_extent_buffer(){ + GtkProgressBar *buffer = GTK_PROGRESS_BAR (gtk_progress_bar_new ()); + gtk_progress_bar_set_text (buffer, "<--- [buffer] (simulation extensive time) --->"); + gtk_progress_bar_set_show_text (buffer, TRUE); + gtk_widget_set_size_request (GTK_WIDGET (buffer), W_IMAGE, 40); + + gtk_box_append (ELAPSED_TIME_box, GTK_WIDGET(buffer)); + return ELAPSED_TIME_box; +} + +GtkProgressBar *get_simulation_time_extent_buffer(){ + + GtkProgressBar *buffer = GTK_PROGRESS_BAR (gtk_progress_bar_new ()); + gtk_progress_bar_set_text (buffer, "<--- [buffer] (simulation extensive time) --->"); + gtk_progress_bar_set_show_text (buffer, TRUE); + gtk_widget_set_size_request (GTK_WIDGET (buffer), W_IMAGE, 40); + + return buffer; +} + +GtkBox *get_objects_box(){ + GtkBox *objects_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" membrane "))); + gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" co-enzyme A "))); + gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" ribosome "))); + gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" cytochrome C "))); + gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" ATP synthase "))); + gtk_box_append (objects_box, GTK_WIDGET (gtk_label_new (" chromosome "))); + return objects_box; +} + +GtkBox *get_situations_box(){ + GtkBox *situations_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); + gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" transcription "))); + gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" épissage "))); + gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" translation "))); + gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" transport Na/K "))); + gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" ubiquitination "))); + gtk_box_append (situations_box, GTK_WIDGET (gtk_label_new (" rotation du moteur flagellaire "))); + return situations_box; +} + +static GtkWidget *get_frame_objects(){ + GtkWidget *frame_objects = gtk_frame_new (" Objects"); // defines each class of object transparence + gtk_widget_set_size_request (frame_objects, 0, H_STYLES_PANE); // < utile seulement pour la largeur min/max + gtk_frame_set_child (GTK_FRAME (frame_objects), GTK_WIDGET (get_objects_box())); + return frame_objects; +} + +static GtkWidget *get_frame_situations(){ + GtkWidget *frame_situations = gtk_frame_new (" Situations"); // facilitates each situation identification + gtk_widget_set_size_request (GTK_WIDGET (frame_situations), 0, H_STYLES_PANE); // < utile seulement pour la largeur min/max + gtk_frame_set_child (GTK_FRAME (frame_situations), GTK_WIDGET (get_situations_box())); + return frame_situations; +} + +GtkWidget *get_objects_and_situations_horizontal_pane(){ + GtkWidget *objects_and_situations_horizontal_pane = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); + gtk_paned_set_start_child (GTK_PANED(objects_and_situations_horizontal_pane), GTK_WIDGET (get_frame_objects())); + gtk_paned_set_end_child (GTK_PANED(objects_and_situations_horizontal_pane), GTK_WIDGET (get_frame_situations())); + return objects_and_situations_horizontal_pane; +}GtkScrolledWindow *get_scrolled_gl_area(){ + GtkScrolledWindow *scrolled = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new()); + gtk_scrolled_window_set_min_content_width (scrolled, W_IMAGE); + gtk_scrolled_window_set_min_content_height (scrolled, H_IMAGE); +// GtkAdjustment *width = gtk_adjustment_new (600, 300, 1000, 1, 1, 1000); +// GtkAdjustment *height = gtk_adjustment_new (600, 300, 1000, 1, 1, 1000); + // (value, lower, upper, step_increment, page_increment, page_size) +// GtkWidget *GLarea = gtk_gl_area_new(); +// gtk_scrolled_window_set_child (scrolled, GLarea); +// https://docs.gtk.org/gtk4/class.GLArea.html + return scrolled; +} + diff --git a/widgets.d b/widgets.d new file mode 100644 index 0000000..7c6a468 --- /dev/null +++ b/widgets.d @@ -0,0 +1 @@ +widgets.o: widgets.c cold.h widgets.h pages.h diff --git a/widgets.h b/widgets.h new file mode 100644 index 0000000..1bbf36b --- /dev/null +++ b/widgets.h @@ -0,0 +1,39 @@ +/******************************************************************************/ +/* */ +/* E coli by David S. Goodsell (2009) */ +/* --- */ +/* Let this freeze frame guide us towards the model */ +/* that alone can account for the phenomenon ! */ +/* */ +/******************************************************************************/ + +GtkWidget *get_a_space_test_image(); +GtkScrolledWindow *get_scrolled_gl_area(); +GtkBox *get_RUN_STOP_box(); +GtkBox *get_STEP_by_STEP_box(); +GtkBox *get_CONTROL_box(); +GtkBox *get_ZOOM_box(); +GtkBox *get_edit_TOOL_box(); +GtkBox *get_XYZ_box(); +GtkWidget *get_scroll_speed(); +void window_bar(GtkWindow *window, char *title); +GtkWidget *get_objects_and_situations_horizontal_pane(); +GtkBox *get_ELAPSED_TIME_box(); +GtkProgressBar *get_simulation_time_extent_buffer(); + +/* +Dans : space_page_new() doivent être déclarées +et organisées de façon aussi ergonomique que possible : + +- les commandes de mouvement (run/stop, slow down/speed up, step by step, do/undo/redo) + et le buffer qui montre où on en est dans le temps de simulation + (un seul bouton pour toutes ces commandes ?) + +- les commandes qui modifient l'orientation (X,Y,Z) de l'espace, le zoom, la perspective + +- les commandes qui modifient les apparences des grilles et des flèches + +- les commandes qui modifient les apparences des objets et des situations d'intérêt + (+/- transparents, colorés, etc.) +*/ + diff --git a/widgets.o b/widgets.o new file mode 100644 index 0000000000000000000000000000000000000000..73b65d9d6a7b9b776233b981493bd0c207db670c GIT binary patch literal 23392 zcmd6v30O_t`}cPuvmz2j$COAD8KRO$R7#0L$Z@JuorY7-IVUnp8A8bPAVVQjhR2jS zDRbr_5;Bib=9zch``oK%S&#nz-~YYd_j=!TU8lX*XMOi~t$nYx_g;JNbDG@8t8Wz@ z9f2kt!CCkxN2wr;^807qMO<|eOa&9c-#z)!Aos-58czY{xKtMe_vC!{sm5V3YMsF3dKTYZCSU{hJ1aJvr`9E_d#s@KMkiXrEav5?#VYGlBe^T0EW)@|9`zb6aT?t4~XrCUj4Nf^WA5Q5e#+L zSCSp6SiksNy+`s1M)RNOkN=l?ujCI$pjYUa@JfD#c{&0fWB$0<9- z9?gYy3dtQhF}W-h}2|Lqe`J=oR19J>b`N$=Q^adeW7 z06h7SQv!`2Go1bj<^OO)?Kp(d;VSUsgFAo2kb_e=4lo=IFot8BC)L^8-);uaGVqLxQRNh~_r z+B&qOu7cpGj+H4TYR%Xvxl_xSpeV(kaq^bVZPbo7P~a>$T3K01B*TN^LPO=MK#9ac zt%#0`l4%q%N{KvPBUh>wqvaBfB3j-~A|YC52o^~ai9{8n(dt6tB+)S%d7MfT8bv}I z6(v)sB#u`$eI#{KM72`td$lnyJP^-xvSNMrKj2=~qEH*}^k$B5& zJS(JeL8L1bq=U6FM72*)ggjWI79^5E3Qe3?q}B#p{9E2rn+b3cm$_qLDKa?Wib z@YS^MpW^}+m}HJAt{)ip_=MZWM-AK5eBExlVMnin*M>Ga)WB`t8}rnXHp+F+-%X#r zdu4vx$m8{Io*%W`^O{?Y3p0i(FB)#U=6865!@Xh84$obDW$f;8?b<}Nktd~WyAZk0 z>FAsIPSNd3I-apO|MYI}rsuv#xd(6Sd_N>4F0XUvv{0w~{^u^sLL;(mujqtEoZCEp zUe9vl-dA=#cYg3xF+H^D@|-76ht%0)vO#+9X`7pQO~QLd`pkbeVShiJ{f&2}lzSia zNNOwjHs$tN$8&Wbx3|@~)-ioSLU}F2?oKYv?mx&ZD3nN^?AxK+cI$%V#3&NIyD_ZO z*}8V^y@tOU^1jO9K=%Vr?W<>pUUwNfxlOg;;C7F@tyZZ^9St^3sJW@-hQZ}$!e^^5 zJ`*-u93Nr&Hg83TIamJ*nwQhu`r)X~XD#0Z)f)Ndm+^`!@7grGIetgS(!B+T7iM$} zJQka9>#q+cSGV{cs+ZI0>!Z&88*8?BVejCTzs1r)6EtPy^#u)D zWEnnhc{<44BW0WEmO)FFS$*$sQ~goy_ES@I-?Ztjnxt5?W$o*o=T8*eT<3b~eqwHc zc{}&{3##X51(f9`I~$uE`sD7Unv!Z><(uguot^XAOt`bDR>vOc`;+Z@G}D`X(Er89 zYs#6K@)`|h9dBm)P47@m^+)?FDLclSdVMTgbm~z3e$vM~l9gjS7rr##vvc_PL&Jw8 z6%Tr?tlsLD_wj=ho80>_{#5_>2lrch2Q;5&QBZJT_>#733U&^jZSA?*$a3Oeg9E<2 zj^Epn-a$hd$c(N42Am3M~tQS_Dn|d*)=1gZHdzx*amz z+g~R_zxSBw8IAIkGcE?oo+@=3G#FRZu)!IJ8@Ia-&5dj7HhbjRb)Kcprw*FE-&_C9 z{F6T}^>g1Fe(OQmtP5Z6H+7DbeYxpa+j&)C=E`qf@=c43BwfFrJ}P{ky4tkH7PGQ- z-_u@Y3q3mgo!F>x{p^4TD-QQxx=X$6^~F&qR`%L@&!O1JY15LhHI2XDIeTNszH0S% z*2>P3$%YPg7*?onx3llb7Fi8jyoff>a_ErNX4v2(&8#AiIE@Z4tQKGv8?gQ1h`MpI zfQ3~9y1t7p>X3T6$tR=hpIb>+COo)WU1mCJ)`xXZY)uUWrbBa znInH~9y_YksQJCxX7!d8>t6VIWUF~w)9FUG4>G>KRgQg|H#ecAxZ0L|e>b--m>1@> zsBoUzX-jb3q1R&js2^EQ{bp@F+2`oB&1(vmJC~G1b!%e(V6|h9e5aSKK0k3;_){(X z$nCaTKkD&FrJG@uJtnK}Hd-}z=^^(is&`8eZg_nuY*FMCaH|M+!Mie1f~ zjZQ31`YANqJ^4?1eQ<)?Op<6menp^fv3H(}fzy?No8~SmXdhjzL)H}M&MlrLHl8}Y z?U#r@j!Er&4JY^Od7)^D)$tAe&zJ5$+vLnW*VXm!Zh4lN)39Cc`}qY|PTkehU*7!l zD)pnJo>>OvU-TX}(49MQ+$^hDLz|%dnCzoBy9OU=SZ!|GQ6qPn2yJ`JYV>O0_Rpq= z8+$n~D)4U?zxkM^zV6n}{SK%5pD3S`*G%{2V5`4$x>tXepgeLy7&q(Il>MW^OO|e| zqdxd3p!4Fg(D+G~r5UF_4Ep9%BdOK$tj1pgUz^{G828}%)P{D^t{uEjn_p@_B)ETQ zylnI5^*5qAJ-uu{pwv9^*zQa9FAwP6@ZhCwUCs8bXf(v5>F$sv%|6^a;U9VDM~z|1 zSy|&&2L(9bhN}FZ)>>9Q~Z)s-U?vD*V_cU7LaJ(XZ?*EEs{{=@Q zNIa)^Dk|!~b9~vkwofD9=_HMeHan3xW5Cp@&0WX2PaC+-B6Ig2v#Z-U#g|L`hV8g$ z9NEianq*avV6Wi0B_GQ|LPz^V6)ad1`N%BiY3lTrb2TNo?LM5_mC&+wZda$UPS=k# z?bmMeGCf7qQj>)(w_SXFp!v~l*Dv{Htc{5qmawu+&w79EdnZ-Sn0t?2U24+pq2Bq+ zE%s^#d%s#AvHsLKzk-AY*((ap%C;0n6>j#}u=7)$R;`U?KE9h)JRFr5Z`}6EFUP=4 z_mz3B!KO5W;(aglOl};Ta4glhcE6N9tt}cQ4_&uu$ZP9*Miy1PtF?USXL0kZUvGQ; zfx%0KOml;b$lmq2r|f8`PU>N4;~%-xFX`o!-ZqY}c71-}7vBWGd)=fjuTCgm zJb7tSiCa*YZ_Yo21AoTEb|B+e8~z&Nn5KW;i8tjm_s_B^S*<2$wN(Y7YE4U_YEG^E zT2)WfDyxMudR)vW0!TC;zhcj#BTB3bRgW);O+S7} z7}=`3t3~~6i`3kUzQ!8|PFbBhv-!wed&jB`{Ay$@vM()NaAUe8!C*+~`O@=cY5R+c z#}9nt7@x4WZ0st7`^7gsR#hE8Izy*y>B+`*fBHqo^}ms_wpa7InMax%wO7_nyHoS0 z?FGFM<2B}O|1hqd*1Bg&;{k8>FLjC77&(7;k4ZjLAGY1)Yi`*0O3C@Dn=PaX#_1!{ z)9*UYHqtchmr=vnt3hqkJW`g*UKw`fVN&7D%4w)AzM;eMyi`Q@iP-MyxtsoVPN z*=e#yjT%^4?@(P@@+sW8XSby}Y0Dbq&Dd(x^xdq*P5W*d5dLn!oJ&_NN^57Fejj0P zm9?x%hPT9o<4EySUDsS;u$K%;_8Zr%K&k&Q9Kc z_O@}gFE30TXZHS@r+d-<+@kw+mKwcT z<6F9CO-s*htrzBAAG0Utc+E~PJ%beMZmZ9)3OrqY%u*(KqL&?&W82;$<9)&59m8+Q zCp2F*Y14>5axc8goN8%xC~V(&tHShUTNc;!3R<-1wr?HBGqv0HyF2>3$sQSe%}lShFghuCacpWzN9P&~J72X7%ha8hn$&8T z&gg`#`_iYBe)uuHB=huw2ALkJ{$>x7z7B0|Gj054%Q>@)YS(i%Y-FU#?VYr5yD-Md zsMW>M$`^a|x*W_IdgokDx#o3np=$Ousb=QMMsq*Kz0=hxshKjOsJ+LecRO$GdGo#H z`y0V-o^PheiZ%{DH0JuZ$CFg=e_VO^{n_am3&$)}1o&mvNK=>TH2z*z{aful3F?}9 zE6&8W8% z7KR5l?&FwHXL#D(qNuf+^Gy?qOhRk>6x}`Ek0B!Pe(%vmTh(q%6>% zmzBNVcgxW(W1iLdUY?isGhQg0Gw03v9kwsC{~Y3IbFoTG-CN~PPYraR`N^iZKzGT& z(&Zl>T*{l#xum;qi<~*@^L3)->-4rQ)){%z)FRUDSw^QkS>mMpla)^_If zVFL_5712QV#nlUU zkG$*hsuwxX=y`eWzplSq=bsy#FEN<*^^ck!Th>pUYCYn4&Wv1_8b|WhZJIbP^H}z9 zr)`fPtlIzae8QYNRhCWZetGx9DdRlrP1(4@F{edJjc@xbOy|w`c>Ua(eO0|W7tfdO zo2lvK@wAmeM)buMs}9UQy!$}ehlAg9<#&At6rS`P?y+|I=B%%Qx97*SesQqH8M{vE zPwE@bk5mu+bke@3S8lo8e4C)L&(2R(6}SfbyFd!iSYAv$x(B0rO0fSL+Pa^G-F-HM6>)y5N85ZfIJqI~_K*Tm3l6=+*)MVYT#s zjBs&{$Vku7T{<2RuSpoBhT4Uo zGj5=u6K|knQm1;2`9v%s+!V`#VA-pl!SpJ<>+1DM)UD!2L|Egsu<=+3E{Sgp#Me|%;_IZ2)1kEnAK>yi@*v|}T1k}4}dr7iw# zIke*`mRE;B&~~`Z)lI27r&^+3m3Pn*2`Mswa*_h!57qUaqnlW@iZ^JWE%vDCTcOd$ zWdadM2=l}86&2;$eW@}R9JH~G{|_`PP&2#2r%zoyZCes(dvj4^U!l>qB|=*j(BCH5 ztg7((=kE%2D@Mz&rMlv%`jtUWSJ3-66geGbzZUBXwSNVe(-q()*T0jlp#N`3h^}Bz z32#sdH~bgZwgfNsOsUqnI?gWtDbPNigI@eKnTXly|7uYS!W%I06ptmsx{=TCT0fu? zKCTj;SqaZ09O{iFOGx7JNtRd0=Xdo!u7rOg9DM#JOGx5zOqMmt0Q#Lzqe^(IN_dY- z_<&0IkV<%5C46Qjd}SqkXC=I#68^jr{+Vzw{$vSBJa3U@J#u{$OoBiIJ7?<>lM#|q~4pz%aM!cKEj_P zr}tl!e@AYM_jckrj_57O_P=X?mrA&6C46WlTvZ95ML6tNF1ANJpOW?nV-z7_a*f(L zSg`i$-5LILfj@S(;$M4#6iQ`M@g0a%BUfvr;_E3POcN<3ZyaKxqQo~p%8-~bQl)&% zZ@HRSL@Sii;20%&VWS~0ib6Eu|B*6Wt_Ta)h|*X^uqI9=hf1WOF)C@OB1*25Ma#to zYFk2DDVK+cYFS7`oLUnNwf)+vAel-_NSnxuA1S=}kp{)Yi(8Rpg*-|YB#+YOq|q`} zWL&H?R;5sCLZxzbuq+nq(W=B96g5JaG*l%gjUwS;%i^^=Ee#HrsnlHQ7?muRL-DdG zMVOL5+xDTJTS+tPd?v%Y7;ygf&?691C+M~ND^?E z4Nwlxo*;oAITchSJ6r=j%$2FW3v#NrzNGkg-m+4v_Sr*Ve9gfyGcv;DG!;jF*-jUTcd>@Vw|&-ufcfCTd) zNT6r^3mMM(|6n-luM2@EiMF54lWHU9{f!vT`uAoy>mP_57I1e#`%%GgxVxZS&G@k6 zKZVh=KFb)+`mC+Q=P;vZeNHo+^|?}s&jW@xX4?O@60VCUHHasxug`Eco~D)Xwv})n zhO_Y>!tnM?J4Ya==K%?hk1$4W$>=oJ|1$%rMF}yV?qj4}nPJM#Fgd_>0XMHRg z&idGLKBKiZLT5(L`nWKh_36X;%s`)hjGp!JXE^IKjPs%Q4^l?Y`b03C^@-tpc3^un zjGpzG%y8Cc6~oznT#KB>{}}pbF?!ZNo8hgAmiFU8B+|77&6Pc6I;gJRZ4A34Ma4ymE&(~!}# zK4uJOeY!KeBk`f}@5%T>-PY*u#^~W1MfCv;XOH($47XwQkqn1>OzJb5;hh;i9yuKk z-LO4V7(Lsb1q^4~vy9=kjQ=`@v+dc=@Ggx048!X){3gTM`Sufrv-9ndWLroOV|HG> zR-{_aUZ?02H;4oKw6QMgfx~ANUjOJ5Kw$8U56;n$==_CpE!Cc5VI9JY7GhC*@vqjK zeVS>+8^LouNWkFZjr)&Z{Hx%-@p?d?pHTe_^zi``k|>{sK7+Nmf=@&r`uvCL zBXFFAaQf=#uj2S?)KB900u1&nj*mcnD#xdzehJ6x<0IA$9A5_mfTUg8Ma6z~NBt3w zm!ZCZ<1U!L&T%{RdCu`mm@nh_P4xfDab5JOhWkz9JOX(Gjwc{D<2cMAAX#yI3igX5 z$6c`BJviPD_3%6t5^Ya^Y=0!jKOrB>@vS(1W^lYQwtq3l$Dn>4$Kl=ylK5){vZU=v z#(Ix)`lq5=5YBSk2=hf8r@oIk-XHUH{L*?yBmc?iH)DI~{RP!ausw}2u9Q=s)*SDF z{nC}=<~aW8{Rs7Ghx&n>z7e)(B**267r1Kv79s}wHUI+E3Isd+xzs&f+TnpxE zkZxDPA2S^M>HO+B$1Ow`K`28`_sbLWRWW|Rp^NBzyB@!#<77L- z!H3?z?`Jsp)I-I_l4HeT;Ji!vXoCkA~r}UrkXzhvTi0XD}R45c*^>9DHn0 zpU-gzct9pnRP2E)N85%nvO!va2fIB!|c>FM_w4s-fic$}YPIG{P?1F3-H z)3sQ*$oX%>dT(<)2l*$41CrpltpX1(NTTDs0QF`Zzm2>Xaqy z5RGRc!(mtBQU8|X@O=2qW!PEWtLkm5N0Qj3Lg329XZNz2lP3?aPawp zJ{K7dKJYy?NLM-Tg}ewkWFf?E80YsKr}3BJ15K*mfckSBzmD7iAG}cg6Xb(A{t>yF z6+KzIX(}03d12j^nJ!(3df#S0Sh4^E&q9Mou4#`*noV)8`1M84mr}2>bCI#|@ERW;oRS1>18QIb=b) zjC>$@-~%qoH)ydCh@7^ces3d;)1zFN#OX8fypd9gehH(8TV9+72pN^|%?yV)w7~t{ z#_?vzcOj?yg_m6+m*eo=I7lTNx71?c8^__DG^G0QvX&(9$3srcn=l-jLZ6%2G92_4 zqFNBTGaU3D$bA?N`T@uT7!LYD$dwESJ^h|!Ji|dBg!*KLgPz{kEM++8>GRX=$YDG{ z{5wJ+NxL}S0r@`8=RA&w;~c+({2|9*AjiW-JRc$w>&4Tm7=Nr%!F>lRrdj9Fiae5wb|7^3BL0EQmw`zvqEO`QO^CAi*VQ zS-mUAV=+(rh3csf-CxS-Ja7x=L+8(DIbM$KE9E%7Pj86j)So^lq0jFrPluBSN%Z+8 z<@7n^1kQ&(-%jT^eZO;zgjsF>g=g_`_> zD^@Ne|6PmxM>eWaksnt4O9Q{NpaRk~x+?zsLd*xpM8nTf1ZySvS7g@Yr>j`g$S0Qab#V$nsyY2VFMU$jHRH)60T3Dsn2iI}BhAOha=h8Gzw1C!6mm@0K z-Wa!szF`y1(Tdp5CnE=-d@N&WJ=)%QTyH<`9F6e)-q}$W|8b{dg z>K}mj&ptFzTDywvF)PfhWczd+s7e3L_ABZ3)DV}gu|se-DoQy!VJRv3-TvD`$C5<1 zhy90pTz>!I{LOn3B=}+dbiN7<60bc<88sGFWIl-7)A)8Pb9 z60{#eN~@v$caAVyS3${4S0=FsY30#|@(W-S!f!fd1xOG$nud?Vr-^sQ{OL z&|s2qI55m^bt?O6uvbUVu7y)hi>7$%B^aNM5uKP{l`r}-vid+_A9 zUy9q`