diff --git a/cold.c b/cold.c index ee69459..03f53e8 100644 --- a/cold.c +++ b/cold.c @@ -1,3 +1,4 @@ #include #include +#include "texts.h" diff --git a/cold.d b/cold.d index d197c4b..42ddb86 100644 --- a/cold.d +++ b/cold.d @@ -1 +1 @@ -cold.o: cold.c +cold.o: cold.c texts.h diff --git a/cold.h b/cold.h index c69bb3b..9681b07 100644 --- a/cold.h +++ b/cold.h @@ -7,39 +7,4 @@ /* */ /******************************************************************************/ -/* ->>> Dans : [space_page - mode RUN] doivent être : ------------------------------------------------------ - -(1) les commandes de mouvement: - - run/stop, slow down/speed up, step by step, do/undo/redo - + le buffer [elapsed time] qui montre le temps de simulation écoulé -(2) les commandes qui modifient la perception de l'espace (la caméra) - - son orientation (X,Y,Z), - + le zoom, - + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) -(3) les commandes qui modifient les apparences des objets et des situations d'intérêt - (+/- transparents, colorés, etc.) -(4) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.) -(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'ÉDITER L'ESPACE ! <<< ->>> Dans : [space_page - mode EDIT] doivent être : ------------------------------------------------------ -(1) les commandes qui modifient la perception de l'espace (la caméra) - - son orientation (X,Y,Z), - + le zoom, - + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) -(2) les commandes qui modifient les apparences des objets et des situations d'intérêt - (+/- transparents, colorés, etc.) -(3) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.) -(4) les commandes d'édition locales (drag and drop une flèche) - ('faire de la place' pour insérer) - (sélectionner pour déplacer ou enlever...) - NB ces commandes doivent être graphiques et/ou accessibles par raccourcis ou en ligne -(5) les commandes d'édition globales - (ex: introduire, retirer, transformer +/-aléatoirement (n) objets dans l'espace) - NB une action effectuée sur une zone d'intérêt devrait pouvoir être automatiquement appliquée - à d'autres zones d'intérêt identifiées comme similaires -(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'EXÉCUTER UN RUN ! <<< ->>> L'objectif est que l'utilisateur ait accès à une organsisation aussi ergonomique que possible ----- - i.e : chaque utilisateur devrait disposer de 'préférences' - c'est-à-dire avoir la possiblité de faire des choix ergonomiques personnalisés. -*/ diff --git a/hot.c b/hot.c index ac37d86..240f355 100644 --- a/hot.c +++ b/hot.c @@ -5,8 +5,48 @@ #include "cold.h" #include "widgets.h" #include "pages.h" +#include "texts.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 +// https://docs.gtk.org/gtk4/class.Widget.html#height-for-width-geometry-management // GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL + +//------------------------------------------------------------------------------ + +// TODO cliquer sur "RUN" --> affiche "STOP" (et inversement) +static GtkWidget *get_RUN_STOP_label(){ + GtkWidget *RS_label = gtk_label_new (" R U N\n S T O P"); + gtk_widget_set_size_request (GTK_WIDGET (RS_label), 20, 30); + return RS_label; +} + +static 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); + gtk_widget_set_size_request (GTK_WIDGET (scroll_speed), 2, 200); + return scroll_speed; +} + +static GtkBox *get_speed_scrolling_box(){ + GtkBox *speed_scrolling_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); // spacing = 2 + gtk_box_append (speed_scrolling_box, GTK_WIDGET (gtk_label_new (" "))); // AD HOC (pour "centrer") + gtk_box_append (speed_scrolling_box, get_scroll_speed()); + return speed_scrolling_box; +} + +static GtkWidget *get_STEP_by_STEP_Label(){ + GtkWidget *RS_label = gtk_label_new (" Step\n\n(show\nactive\n rule)"); + gtk_widget_set_size_request (GTK_WIDGET (RS_label), 20, 30); + return RS_label; +} + +GtkBox *get_RUN_STOP_box(){ + GtkBox *RUN_STOP_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_VERTICAL, 20)); + gtk_box_append (RUN_STOP_box, get_RUN_STOP_label()); + gtk_box_append (RUN_STOP_box, GTK_WIDGET (get_speed_scrolling_box())); + gtk_box_append (RUN_STOP_box, get_STEP_by_STEP_Label()); + gtk_box_append (RUN_STOP_box, gtk_label_new ("\n\n")); + return RUN_STOP_box; +} diff --git a/hot.d b/hot.d index 880e718..7461b22 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 widgets.h pages.h + cold.h widgets.h pages.h texts.h diff --git a/hot.o b/hot.o index a1a8098..7eba6ba 100644 Binary files a/hot.o and b/hot.o differ diff --git a/myprogram b/myprogram index a584874..35710bb 100755 Binary files a/myprogram and b/myprogram differ diff --git a/pages.c b/pages.c index 4baef39..01dddb4 100644 --- a/pages.c +++ b/pages.c @@ -4,6 +4,7 @@ #include "cold.h" #include "widgets.h" #include "pages.h" +#include "texts.h" GtkWidget *get_edit_rules_page_new(){ @@ -100,20 +101,25 @@ GtkWidget *get_edit_space_page_new(){ } GtkWidget *get_run_space_page_new(){ +/* + GtkBox *lateral_right_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_VERTICAL, 40)); // spacing + gtk_box_append (lateral_right_box, GTK_WIDGET (get_RUN_STOP_box())); + gtk_box_append (lateral_right_box, GTK_WIDGET (get_scroll_speed())); + gtk_box_append (lateral_right_box, GTK_WIDGET (get_STEP_by_STEP_box())); + gtk_box_append (lateral_right_box, GTK_WIDGET (get_XYZ_box())); + gtk_box_append (lateral_right_box, GTK_WIDGET (get_ZOOM_box())); +*/ GtkWidget *space_grid = gtk_grid_new(); -// attach either : get_ELAPSED_TIME_box() or get_simulation_time_extent_buffer() +// same result using 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_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), get_test_image(), 0, 1, 1, 2); + gtk_grid_attach (GTK_GRID(space_grid), get_objects_and_situations_horizontal_pane(), 0, 3, 1, 1); + + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_RUN_STOP_box()), 1, 0, 1, 2); // gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)), 1, 1, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_XYZ_box()), 1, 2, 1, 1); + gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ZOOM_box()), 1, 3, 1, 1); return space_grid; } @@ -162,5 +168,9 @@ void activate (GtkApplication *app, gpointer user_data) { /* REM ! * g_signal_connect (button, "clicked", G_CALLBACK (printf("%s\n", text)), text); * g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_destroy), window); + * + * drag-and-drop https://docs.gtk.org/gtk4/drag-and-drop.html + * + * GtkGestureZoom https://docs.gtk.org/gtk4/class.GestureZoom.html */ diff --git a/pages.d b/pages.d index 1acb863..1126ba2 100644 --- a/pages.d +++ b/pages.d @@ -1 +1 @@ -pages.o: pages.c cold.h widgets.h pages.h +pages.o: pages.c cold.h widgets.h pages.h texts.h diff --git a/pages.o b/pages.o index fba8725..313d42f 100644 Binary files a/pages.o and b/pages.o differ diff --git a/texts.c b/texts.c new file mode 100644 index 0000000..ff71f3b --- /dev/null +++ b/texts.c @@ -0,0 +1,46 @@ +/******************************************************************************/ +/* */ +/* E coli by David S. Goodsell (2009) */ +/* --- */ +/* Let this freeze frame guide us towards the model */ +/* that alone can account for the phenomenon ! */ +/* */ +/******************************************************************************/ + +char *get_space_run_edit_specif(){ return "\n\ +>>> Dans : [space_page - mode RUN] doivent être : ------------------------------------------------------\n\n\ +(1) les commandes de mouvement:\n\ + - run/stop, slow down/speed up, step by step, do/undo/redo\n\ + + le buffer [elapsed time] qui montre le temps de simulation écoulé\n\n\ +(2) les commandes qui modifient la perception de l'espace (la caméra)\n\ + - son orientation (X,Y,Z),\n\ + + le zoom,\n\ + + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) \n\n\ +(3) les commandes qui modifient les apparences des objets et des situations d'intérêt\n\ + (+/- transparents, colorés, etc.)\n\n\ +(4) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.)\n\n\ +(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'ÉDITER L'ESPACE ! <<<\n\n\n\ +>>> Dans : [space_page - mode EDIT] doivent être : ------------------------------------------------------\n\n\ +(1) les commandes qui modifient la perception de l'espace (la caméra)\n\ + - son orientation (X,Y,Z),\n\ + + le zoom,\n\ + + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) \n\n\ +(2) les commandes qui modifient les apparences des objets et des situations d'intérêt\n\ + (+/- transparents, colorés, etc.)\n\n\ +(3) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.)\n\n\ +(4) les commandes d'édition locales (drag and drop une flèche)\n\ + ('faire de la place' pour insérer)\n\ + (sélectionner pour déplacer ou enlever...)\n\ + NB ces commandes doivent être graphiques et/ou accessibles par raccourcis ou en ligne\n\n\ +(5) les commandes d'édition globales\n\ + (ex: introduire, retirer, transformer +/-aléatoirement (n) objets dans l'espace)\n\n\n\ + NB une action effectuée sur une zone d'intérêt devrait pouvoir être automatiquement appliquée\n\ + à d'autres zones d'intérêt identifiées comme similaires\n\n\ +(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'EXÉCUTER UN RUN ! <<<\n\n\n\ +>>> L'objectif est que l'utilisateur ait accès à une organsisation aussi ergonomique que possible -----\n\n\ + i.e : chaque utilisateur devrait disposer de 'préférences'\n\ + c'est-à-dire avoir la possiblité de faire des choix ergonomiques personnalisés.\n\ +";} + +char *get_rules_run_edit_specif(){ return "\n\ +";} diff --git a/texts.d b/texts.d new file mode 100644 index 0000000..18de62c --- /dev/null +++ b/texts.d @@ -0,0 +1 @@ +texts.o: texts.c diff --git a/texts.h b/texts.h new file mode 100644 index 0000000..43a7437 --- /dev/null +++ b/texts.h @@ -0,0 +1,39 @@ +char *get_space_run_edit_specif(); +char *get_rules_run_edit_specif(); + +/* +>>> Dans : [space_page - mode RUN] doivent être : ------------------------------------------------------ + +(1) les commandes de mouvement: + - run/stop, slow down/speed up, step by step, do/undo/redo + + le buffer [elapsed time] qui montre le temps de simulation écoulé +(2) les commandes qui modifient la perception de l'espace (la caméra) + - son orientation (X,Y,Z), + + le zoom, + + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) +(3) les commandes qui modifient les apparences des objets et des situations d'intérêt + (+/- transparents, colorés, etc.) +(4) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.) +(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'ÉDITER L'ESPACE ! <<< +>>> Dans : [space_page - mode EDIT] doivent être : ------------------------------------------------------ +(1) les commandes qui modifient la perception de l'espace (la caméra) + - son orientation (X,Y,Z), + + le zoom, + + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) +(2) les commandes qui modifient les apparences des objets et des situations d'intérêt + (+/- transparents, colorés, etc.) +(3) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.) +(4) les commandes d'édition locales (drag and drop une flèche) + ('faire de la place' pour insérer) + (sélectionner pour déplacer ou enlever...) + NB ces commandes doivent être graphiques et/ou accessibles par raccourcis ou en ligne +(5) les commandes d'édition globales + (ex: introduire, retirer, transformer +/-aléatoirement (n) objets dans l'espace) + NB une action effectuée sur une zone d'intérêt devrait pouvoir être automatiquement appliquée + à d'autres zones d'intérêt identifiées comme similaires +(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'EXÉCUTER UN RUN ! <<< +>>> L'objectif est que l'utilisateur ait accès à une organsisation aussi ergonomique que possible ----- + i.e : chaque utilisateur devrait disposer de 'préférences' + c'est-à-dire avoir la possiblité de faire des choix ergonomiques personnalisés. +*/ + diff --git a/texts.o b/texts.o new file mode 100644 index 0000000..4b12a90 Binary files /dev/null and b/texts.o differ diff --git a/warm.c b/warm.c index 3db4c99..8f16465 100644 --- a/warm.c +++ b/warm.c @@ -4,9 +4,53 @@ #include "cold.h" #include "widgets.h" #include "pages.h" +#include "texts.h" // https://docs.gtk.org/gtk4/visual_index.html < widgets gallery +GtkFrame *get_frame_with_label(){ // EN ATTENDANT DE SAVOIR UTILISER : GtkTextTagTable et GtkTextBuffer + GtkFrame *space_specif = GTK_FRAME(gtk_frame_new ("Space (run / edit) specifications")); + GtkWidget *any_Label = GTK_WIDGET (gtk_label_new (get_space_run_edit_specif())); + gtk_frame_set_child (GTK_FRAME (space_specif), GTK_WIDGET (any_Label)); + return space_specif; +} + +//GtkFrame *space_specif = gtk_frame_new (char* const "Space (run / edit) specifications"); + +GtkWidget *get_text_view(){ // WTF ?!& @Grr #~! https://docs.gtk.org/gtk4/section-text-widget.html + GtkWidget *my_view = gtk_text_view_new (); + GtkTextTagTable *my_table = gtk_text_tag_table_new (); + GtkTextBuffer *my_buffer = gtk_text_buffer_new (my_table); + + gtk_text_buffer_set_text (my_buffer, "Hello, this is some text", -1); + gtk_text_view_set_buffer (GTK_TEXT_VIEW (my_view), my_buffer); + + /* Now you might put the view in a container and display it on the + * screen; when the user edits the text, signals on the buffer + * will be emitted, such as "changed", "insert_text", and so on. + */ + return my_view; +} + + + + + + +//------------------------------------------------------------------------------ + +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; +} @@ -87,22 +131,4 @@ GtkBox *get_CONTROL_box(){ gtk_box_append (CONTROL_box, GTK_WIDGET (get_STEP_by_STEP_box())); return CONTROL_box; } - -GtkWidget *get_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, 5); - gtk_grid_attach (GTK_GRID(space_grid), get_objects_and_situations_horizontal_pane(), 0, 6, 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, 2, 1, 1); -// gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_STEP_by_STEP_box()), 1, 3, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_CONTROL_box()), 1, 0, 1, 2); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_XYZ_box()), 1, 2, 1, 1); - gtk_grid_attach (GTK_GRID(space_grid), GTK_WIDGET(get_ZOOM_box()), 1, 3, 1, 1); - - return space_grid; -} */ diff --git a/warm.d b/warm.d index 7de9c32..f070fd7 100644 --- a/warm.d +++ b/warm.d @@ -1 +1 @@ -warm.o: warm.c cold.h widgets.h pages.h +warm.o: warm.c cold.h widgets.h pages.h texts.h diff --git a/warm.o b/warm.o index 4e5b505..457afbf 100644 Binary files a/warm.o and b/warm.o differ diff --git a/widgets.c b/widgets.c index 2b9ab7b..c1651af 100644 --- a/widgets.c +++ b/widgets.c @@ -4,6 +4,9 @@ #include "cold.h" #include "widgets.h" #include "pages.h" +#include "texts.h" + +//------------------------------------------------------------------------------ GtkWidget *get_test_image(){ GtkWidget *image; @@ -16,59 +19,31 @@ GtkWidget *get_test_image(){ 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_widget_set_size_request (GTK_WIDGET (ZOOM_box), 30, 80); 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_widget_set_size_request (GTK_WIDGET (TOOL_box), 30, 80); 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 + GtkBox *XYZ_labels_box = GTK_BOX(gtk_box_new (GTK_ORIENTATION_VERTICAL, 2)); // spacing = 2 + GtkBox *XYZ_scrollbar_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); @@ -77,40 +52,42 @@ GtkBox *get_XYZ_box(){ 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_widget_set_size_request (GTK_WIDGET (scroll_X), 1, 400); - gtk_box_append (XYZ_box, scroll_X); - gtk_box_append (XYZ_box, scroll_Y); - gtk_box_append (XYZ_box, scroll_Z); + gtk_box_append (XYZ_scrollbar_box, GTK_WIDGET (gtk_label_new (" "))); // AD HOC (pour "centrer") + gtk_box_append (XYZ_scrollbar_box, scroll_X); + gtk_box_append (XYZ_scrollbar_box, scroll_Y); + gtk_box_append (XYZ_scrollbar_box, scroll_Z); -// gtk_box_set_baseline_position (XYZ_box, GTK_BASELINE_POSITION_BOTTOM); + gtk_box_append (XYZ_labels_box, GTK_WIDGET (gtk_label_new ("X Y Z"))); + gtk_box_append (XYZ_labels_box, GTK_WIDGET (XYZ_scrollbar_box)); - return XYZ_box; +// gtk_box_set_baseline_position (XYZ_scrollbar_box, GTK_BASELINE_POSITION_BOTTOM); + + return XYZ_labels_box; +} + +//------------------------------------------------------------------------------ + +static 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) --->\n\ + supports DO - UNDO - REDO functions"); + gtk_progress_bar_set_show_text (buffer, TRUE); + gtk_widget_set_size_request (GTK_WIDGET (buffer), W_IMAGE, 50); + return buffer; } 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)); + gtk_widget_set_size_request (GTK_WIDGET (ELAPSED_TIME_box), W_IMAGE, 50); + gtk_box_append (ELAPSED_TIME_box, GTK_WIDGET(get_simulation_time_extent_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(){ +static 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 "))); @@ -121,7 +98,7 @@ GtkBox *get_objects_box(){ return objects_box; } -GtkBox *get_situations_box(){ +static 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 (" promotion opéron lactose "))); @@ -153,91 +130,3 @@ GtkWidget *get_objects_and_situations_horizontal_pane(){ 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; -} - -GtkFrame *get_frame_with_label(){ // EN ATTENDANT DE SAVOIR UTILISER : GtkTextTagTable et GtkTextBuffer - char *text = "\n\ ->>> Dans : [space_page - mode RUN] doivent être : ------------------------------------------------------\n\ -\n\ -(1) les commandes de mouvement:\n\ - - run/stop, slow down/speed up, step by step, do/undo/redo\n\ - + le buffer [elapsed time] qui montre le temps de simulation écoulé\n\ -\n\ -(2) les commandes qui modifient la perception de l'espace (la caméra)\n\ - - son orientation (X,Y,Z),\n\ - + le zoom,\n\ - + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) \n\ -\n\ -(3) les commandes qui modifient les apparences des objets et des situations d'intérêt\n\ - (+/- transparents, colorés, etc.)\n\ -\n\ -(4) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.)\n\ -\n\ -(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'ÉDITER L'ESPACE ! <<<\n\ -\n\ -\n\ ->>> Dans : [space_page - mode EDIT] doivent être : ------------------------------------------------------\n\ -\n\ -(1) les commandes qui modifient la perception de l'espace (la caméra)\n\ - - son orientation (X,Y,Z),\n\ - + le zoom,\n\ - + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) \n\ -\n\ -(2) les commandes qui modifient les apparences des objets et des situations d'intérêt\n\ - (+/- transparents, colorés, etc.)\n\ -\n\ -(3) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.)\n\ -\n\ -(4) les commandes d'édition locales (drag and drop une flèche)\n\ - ('faire de la place' pour insérer)\n\ - (sélectionner pour déplacer ou enlever...)\n\ - NB ces commandes doivent être graphiques et/ou accessibles par raccourcis ou en ligne\n\ -\n\ -(5) les commandes d'édition globales\n\ - (ex: introduire, retirer, transformer +/-aléatoirement (n) objets dans l'espace)\n\ -\n\ -\n\ - NB une action effectuée sur une zone d'intérêt devrait pouvoir être automatiquement appliquée\n\ - à d'autres zones d'intérêt identifiées comme similaires\n\ -\n\ -(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'EXÉCUTER UN RUN ! <<<\n\ -\n\ -\n\ ->>> L'objectif est que l'utilisateur ait accès à une organsisation aussi ergonomique que possible -----\n\ -\n\ - i.e : chaque utilisateur devrait disposer de 'préférences'\n\ - c'est-à-dire avoir la possiblité de faire des choix ergonomiques personnalisés.\n\ -"; - GtkFrame *space_specif = GTK_FRAME(gtk_frame_new ("Space (run / edit) specifications")); - GtkWidget *any_Label = GTK_WIDGET (gtk_label_new (text)); - gtk_frame_set_child (GTK_FRAME (space_specif), GTK_WIDGET (any_Label)); - return space_specif; -} - -//GtkFrame *space_specif = gtk_frame_new (char* const "Space (run / edit) specifications"); - -GtkWidget *get_text_view(){ // WTF ?!& @Grr #~! https://docs.gtk.org/gtk4/section-text-widget.html - GtkWidget *my_view = gtk_text_view_new (); - GtkTextTagTable *my_table = gtk_text_tag_table_new (); - GtkTextBuffer *my_buffer = gtk_text_buffer_new (my_table); - - gtk_text_buffer_set_text (my_buffer, "Hello, this is some text", -1); - gtk_text_view_set_buffer (GTK_TEXT_VIEW (my_view), my_buffer); - - /* Now you might put the view in a container and display it on the - * screen; when the user edits the text, signals on the buffer - * will be emitted, such as "changed", "insert_text", and so on. - */ - return my_view; -} diff --git a/widgets.d b/widgets.d index 7c6a468..bbdc9b6 100644 --- a/widgets.d +++ b/widgets.d @@ -1 +1 @@ -widgets.o: widgets.c cold.h widgets.h pages.h +widgets.o: widgets.c cold.h widgets.h pages.h texts.h diff --git a/widgets.h b/widgets.h index 3011234..85e2666 100644 --- a/widgets.h +++ b/widgets.h @@ -11,53 +11,16 @@ GtkWidget *get_test_image(); GtkWidget *get_text_view(); GtkFrame *get_frame_with_label(); GtkScrolledWindow *get_scrolled_gl_area(); + GtkBox *get_RUN_STOP_box(); -GtkBox *get_STEP_by_STEP_box(); -GtkBox *get_CONTROL_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(); // https://docs.gtk.org/gtk4/section-text-widget.html -/* ->>> Dans : [space_page - mode RUN] doivent être : ------------------------------------------------------ - -(1) les commandes de mouvement: - - run/stop, slow down/speed up, step by step, do/undo/redo - + le buffer [elapsed time] qui montre le temps de simulation écoulé -(2) les commandes qui modifient la perception de l'espace (la caméra) - - son orientation (X,Y,Z), - + le zoom, - + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) -(3) les commandes qui modifient les apparences des objets et des situations d'intérêt - (+/- transparents, colorés, etc.) -(4) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.) -(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'ÉDITER L'ESPACE ! <<< ->>> Dans : [space_page - mode EDIT] doivent être : ------------------------------------------------------ -(1) les commandes qui modifient la perception de l'espace (la caméra) - - son orientation (X,Y,Z), - + le zoom, - + les paramètres qui définissent la perspective (distances oeil/écran, écran/objet virtuel) -(2) les commandes qui modifient les apparences des objets et des situations d'intérêt - (+/- transparents, colorés, etc.) -(3) les commandes qui modifient l'apparence de l'espace (grilles, +/- surfaces, aspect des flèches, etc.) -(4) les commandes d'édition locales (drag and drop une flèche) - ('faire de la place' pour insérer) - (sélectionner pour déplacer ou enlever...) - NB ces commandes doivent être graphiques et/ou accessibles par raccourcis ou en ligne -(5) les commandes d'édition globales - (ex: introduire, retirer, transformer +/-aléatoirement (n) objets dans l'espace) - NB une action effectuée sur une zone d'intérêt devrait pouvoir être automatiquement appliquée - à d'autres zones d'intérêt identifiées comme similaires -(0) NB >>> AUCUNE COMMANDE NE DOIT PERMETTRE D'EXÉCUTER UN RUN ! <<< ->>> L'objectif est que l'utilisateur ait accès à une organsisation aussi ergonomique que possible ----- - i.e : chaque utilisateur devrait disposer de 'préférences' - c'est-à-dire avoir la possiblité de faire des choix ergonomiques personnalisés. -*/ - diff --git a/widgets.o b/widgets.o index e5349fa..383b60c 100644 Binary files a/widgets.o and b/widgets.o differ