From b045b9599a3f280516f3c8398a9b49418917019c Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Wed, 8 May 2024 23:43:23 +0200 Subject: [PATCH] cleaning Allocation height too small. Tried 60x409, but GtkBox needs at least 60x438. --- cold.c | 1 + cold.d | 2 +- cold.h | 35 ---------- hot.c | 40 ++++++++++++ hot.d | 2 +- hot.o | Bin 2696 -> 9048 bytes myprogram | Bin 43664 -> 43800 bytes pages.c | 30 ++++++--- pages.d | 2 +- pages.o | Bin 26496 -> 26032 bytes texts.c | 46 ++++++++++++++ texts.d | 1 + texts.h | 39 ++++++++++++ texts.o | Bin 0 -> 5944 bytes warm.c | 62 ++++++++++++------ warm.d | 2 +- warm.o | Bin 2704 -> 9144 bytes widgets.c | 187 +++++++++++------------------------------------------- widgets.d | 2 +- widgets.h | 43 +------------ widgets.o | Bin 28152 -> 17960 bytes 21 files changed, 237 insertions(+), 257 deletions(-) create mode 100644 texts.c create mode 100644 texts.d create mode 100644 texts.h create mode 100644 texts.o 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 a1a80988eedc80dd42d1768e3edeb37d9a8a1578..7eba6ba95023be8d008c8654ea7687455f33f11f 100644 GIT binary patch literal 9048 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 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 diff --git a/myprogram b/myprogram index a58487486d5e10a975d9fefbbf5bbe48cc150dd8..35710bb6398bbba5c01ee3d3dd74f1e1acac47fd 100755 GIT binary patch delta 19396 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 U$PfI3D!p=c)bV`iayjq+0sp$J^#A|> delta 19790 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 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 fba8725c274da9e0f82424ade05227a6b2f1e49a..313d42fb3939696e7dc87ecbe1bdd4ce83ee78d1 100644 GIT binary patch literal 26032 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 OR>22F1*QO#<^C6++QifV literal 26496 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 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 0000000000000000000000000000000000000000..4b12a90c5ff4bfb83c6caf152015da83edecaa80 GIT binary patch literal 5944 zcmds4U2I%O6`u9Rj$ehB5*RDd6;@sVxUEgx| z-p&279jl=stsoJCMg=NBQU4xLj6wubCHjICbx|Q|QHmP!zym*0A3)-P777nVg74fr zbA5fiQBVs)Vx+w@=bQ64XU?3NePU?jU|k}?R7RwfVHy?>=hbU zi`mwWr+hS^8EfkA@8_H!&`gK-@#9WK%ZsUsRua6Mm#u=}`*ewkTMkvh8G(=e%N3*!;LKw2A{2u3i?8@>8A;`z9?6 zJgz8Le3u-(>=~M?TPCkAzsGGXu zEc$|I zuavgZSK@FeBFfQS&tDS)n$k@dOGg5Q>k9UH`8U12r<=R*34w!d*U2DR49l)AU?kjp zwhPYPdne~op=*?2;Wng8wr(K*GMub9o?S%3gVOvs`ED1D>gD`2fy!7fjE(INJq?Zw z=ldoHC&z~P;Nj8HePaiPIK~GK4^QwTL*t`E6BFYgQ`HLxh9`!``ABN$;UoJ7hdA%_ z_3Yidx2frlhi?eN|K-#7|C_&eJgfi9{JrDh`cLNX^21U{RTm1nU!)8xuTeox7i_J> zQIdJVwkq5+1(zpbv0Q~mpw=LrDr!2aC>=MHK?4UX#VeL)bKP`s_J#fLDgw7bRm(C> z)N5Y_Dx0s-=9b5WX^0tNXR{~;(i8u9Qf-UeD@!h|lC4#y^-~^LgxdopS|03H!)@WBw=+R` zD_V9L>q8;ZaJy)(g*mzedD`q!rL;g7v#MSwe1RQ*wX{Q;A0;kuvE^N_x*({e`Fl5S zVLDQFu`M&Urn?l*8Ca5cx#qc68ATd_@lB&@8X%yl=8BdqFG^HjfH5een}|#=DfwJ4 zU|F~#p*Gkd_^Fq5gYv~eh(APu9XeXQFgQsic5;j!E42#jNQy2dgsRAeX_YBfzK)6&Tkz&iPL+oNvD?GXV?N_f}Ot9zIB)bz?_SucemcGu!p5{+?t{h&! zHnDEyK>Peg#_HB4KH0LqIoYwPgTS^8j3rxHbMx?e##U^>puaiULM|wOdYAe0mIi-v zEYZ?X;IEy%o3Yi6Z1gzT>RBV(Mxu$t`z>pzBPIA@(BbQ=OLWw=)=7;dv6-z3$>gd; z{gy<1vLV@-sNdZ1*ML}G*8urNe_oW*zCMiSE{O|!T3+pKt3UJ2pIke*W#5-xyQ}{0 ziJQ-!y4A62&#n1;PCY&{IJoOC2YW8I|7PlD-&bF}?}GlV6Yp+&bN1MwCvLp=x3jO$ zojdi3@BN;A`^+yMdCC0R{6BVk*FXQj%56Wr{@%-fdg+VLZ#ePwvz=ECUweP`A720R z@v(EymA76wzHR@N6E9!sPmSMCD@RlQR01-jv46uqNO#?OsQBiMpWhh$)r|*7-+1f( z-kY;M*FW{k*~8sk*WY;P>DKIUX4~-Sg`OLk>*r@%-`P4`UUl>F_BHG~e@`{ALxY2T zJbh?vvWxH7mED>3w`2wEaQy1=!xXDyiED(ZmXNga>mza^F+a`{b8U%Dt5-H6U056N zkIT6R*%Rg)L9Z}5wX7rkE7&{#Ts8q98Af60Y|{67DMnQCHrA4C<#J}9f7Na9)wjX@ z)Lu51WUb3E(!4I>zly^>5~mnZQ#fts>L5j4FZwgKhr4Mi zJ_9{!pQsunNwI9|?<3*S{cV)jR7v>@q^wOq~?GfSrNSJf;DQn)B$=%!F2FrbD6 zPx&;x=J0f2S<`Yw7KNu9|6%iAkaWrPvK2g5h3%e}dd2iq5&wyW49kb^I5beqqd8AX z2k3*Q@;RV_`liOzZ^Dnx(ExtYc0`tjUJ2fXp6sYxZkPC0iAT>UO+6y#;~nXUHp(;7 z`9b9=A4%s<{Gv^rn|Gs!8w|>S<;MW9TJjIlfk2DqEYV6%^%DwHiirvBh?E}*$nYCu zV}~(QEBuIn30u|BAGKQc6<%=oXCI{{}G9 z*{dcnrdE;mzZ;O@SFtHSp2JKn`8G0!b}Z<^Z(RN=W_DCGwfqwM4IzXo1w|Jvn+ zpzPEBQ7n|a%AZ=c$<&{veJ&SFb+A_cQF(~h9+Gd9=kGH_L|Qz4^d6}t|A6%Wj}ciK H#^wJ72=F?y literal 0 HcmV?d00001 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 4e5b505bc13f0113ac648e74e83b92045e28ddef..457afbf76908e97195a964036fd2aeb429662938 100644 GIT binary patch literal 9144 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 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 e5349fa7b868cdfe0da0870abd8bf61d38b4208d..383b60c246a87d73fc648bc880098c59532a090e 100644 GIT binary patch literal 17960 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 z