Introducing the 'View Rules Use' pane. This pane and the comparator can be masked
This commit is contained in:
parent
bcb4cfc9ed
commit
f11ab2e05e
|
@ -43,8 +43,9 @@ enum fsm_choice_STATE_RULES_DATA { STATE, RULES, DATA }; // xor
|
|||
enum fsm_choice_STORE_RESTORE_RESET { STORE, RESTORE, RESET }; // xor
|
||||
|
||||
|
||||
#define n_objects 32 // arbitrary...
|
||||
#define n_situations 128
|
||||
#define n_rules 64 // arbitrary
|
||||
#define n_objects 32 // arbitrary too,
|
||||
#define n_situations 128 // and so on...
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -91,6 +91,9 @@ void *widget_get_rules_tree_and_pilot_box();
|
|||
void *widget_get_rules_page();
|
||||
void *widget_get_rule_edit_controls();
|
||||
void *widget_get_rule_explore_controls();
|
||||
void *widget_rule_itself_vs_explore_edit_pane();
|
||||
void *widget_get_rules_pilot_box();
|
||||
void *widget_get_rules_tree();
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
|
38
src/main.c
38
src/main.c
|
@ -39,15 +39,20 @@
|
|||
* Le nom de toute fonction qui peut être appelée d'un autre module doit comporter :
|
||||
* - 1) le nom du module auquel elle appartient (widget, graphics, parse,...)
|
||||
* - 2) une indication sur son action (get, set, rec, fix, create, add,...)
|
||||
* - 3) une indication sur l'objet de cette action (STATE, RULES, STACK,...)
|
||||
* - 3) une indication sur l'objet de cette action (state, rules, stock,...)
|
||||
*
|
||||
* ex: on_save_CURRENT_MODEL()
|
||||
* model_get_DIM_VALUE()
|
||||
* ex: on_save_current_model()
|
||||
* model_get_dim_value()
|
||||
*
|
||||
* Il est prévisible que 'state.c' devienne un dossier contenant
|
||||
* les fichiers 'controls.c', 'camera.c', 'contrasts.c' et d'autres,
|
||||
* Une fonction comme : get_ZOOM_box()
|
||||
* devra alors être renommé : state_camera_get_ZOOM_box() (par exemple)
|
||||
* Le fichier 'state.c' est devenu un dossier contenant
|
||||
* les fichiers 'top.c', 'middle.c', 'bottom.c' et 'distrib.c'
|
||||
*
|
||||
* 'middle.c' deviendra, s'il est trop volumineux, un dossier 'middle'
|
||||
* contenant, par exemple, les fichiers 'camera.c' ou 'contrasts.c' et d'autres
|
||||
* et ainsi de suite ...
|
||||
*
|
||||
* Une fonction comme : get_zoom_box()
|
||||
* devra alors être renommé : state_camera_get_zoom_box() (par exemple)
|
||||
*
|
||||
* _________________
|
||||
*
|
||||
|
@ -58,7 +63,8 @@
|
|||
* --------------------------------
|
||||
*
|
||||
* La description du 'design' des fenêtres se trouve dans le dossier 'widget'
|
||||
* et s'organise naturellement en arborescence, comme les widgets eux-mêmes.
|
||||
* et s'organise naturellement en arborescence,
|
||||
* en se calquant sur l'arborescence des widgets eux-mêmes.
|
||||
*
|
||||
* Il sera donc facile de répartir cette description en dossiers et fichiers
|
||||
* au fur à mesure de son développement.
|
||||
|
@ -67,10 +73,10 @@
|
|||
* > une barre de titre (décrite dans 'topbar') et
|
||||
* > un widget 'child' (la partie sous la barre de titre)
|
||||
* qui peut prendre au moins trois apparences différentes :
|
||||
* - STATE (montre l'état de l'espace et les commandes associées)
|
||||
* - RULES (les règles et les commandes associées)
|
||||
* - STOCK (les données provenant des mesures, les outils d'analyse, etc.)
|
||||
* (mal défini à ce stade; sera très probablement réparti...)
|
||||
* - state (montre l'état de l'espace et les commandes associées)
|
||||
* - rules (les règles et les commandes associées)
|
||||
* - stock (les données provenant des mesures, les outils d'analyse, etc.)
|
||||
* (nom provisoire : mal défini à ce stade; fonctions à répartir...)
|
||||
*
|
||||
* La fenêtre principale s'ouvre sur la vue de l'état ('state.c') en mode 'EXEC'.
|
||||
* Cette vue comporte trois panneaux (widgets) principaux:
|
||||
|
@ -86,7 +92,7 @@
|
|||
* 2) Les structures transversales.
|
||||
* --------------------------------
|
||||
*
|
||||
* Les fonctions 'transversales' comme celles de 'graphics' 'parse', 'fsm',
|
||||
* Les fonctions 'transversales' comme celles de 'graphics', 'parse', 'fsm', 'prefer'
|
||||
* doivent pouvoir être accédées directement
|
||||
* sans avoir à passer par la hiérarchie des widgets et/ou callbacks.
|
||||
* Elles restent à la racine: 'src/
|
||||
|
@ -111,9 +117,9 @@
|
|||
* - analyses de données...
|
||||
*
|
||||
*
|
||||
* Les préférences des utilisateurs devront être prises en compte.
|
||||
* Leur recueil et leur mémorisation seront probablement des fonctions centrales
|
||||
* mais leur mise en oeuvre suivra probalement les voies hiérarchiques.
|
||||
* Leur recueil et la mémorisation des préférences des utilisateurs
|
||||
* sont des fonctions centrales
|
||||
* mais leur mise en oeuvre suivra probalement des voies hiérarchiques.
|
||||
*
|
||||
* On peut prévoir des préférences concernant l'apparence des widgets,
|
||||
* les traductions, les 'disabilities'; etc.
|
||||
|
|
|
@ -32,27 +32,27 @@
|
|||
#include "../../../include/signal.h"
|
||||
|
||||
|
||||
static void *static_widget_get_rule_explore_controls()
|
||||
void *widget_get_rule_explore_controls()
|
||||
{
|
||||
return gtk_label_new ("________________\n RULE EXPLORE\n\
|
||||
controls\n'''''''''''''''''''''''''''''");
|
||||
}
|
||||
|
||||
static void *static_widget_get_rule_edit_controls()
|
||||
void *widget_get_rule_edit_controls()
|
||||
{
|
||||
return gtk_label_new
|
||||
("___________\n RULE EDIT\n controls\n''''''''''''''''''''");
|
||||
}
|
||||
|
||||
static void *widget_rule_itself_vs_explore_edit_pane()
|
||||
void *widget_rule_itself_vs_explore_edit_pane()
|
||||
{
|
||||
GtkPaned *rule_itself_vs_explore_edit_pane = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_VERTICAL));
|
||||
gtk_paned_set_start_child (rule_itself_vs_explore_edit_pane, GTK_WIDGET (widget_get_selected_rule()));
|
||||
if (fsm_get_exec_edit()) gtk_paned_set_end_child (rule_itself_vs_explore_edit_pane,
|
||||
GTK_WIDGET (static_widget_get_rule_edit_controls()));
|
||||
GTK_WIDGET (widget_get_rule_edit_controls()));
|
||||
else gtk_paned_set_end_child (rule_itself_vs_explore_edit_pane,
|
||||
GTK_WIDGET (static_widget_get_rule_explore_controls()));
|
||||
gtk_paned_set_position (rule_itself_vs_explore_edit_pane, 800); // WARNING : c'est une position "absolue"
|
||||
GTK_WIDGET (widget_get_rule_explore_controls()));
|
||||
gtk_paned_set_position (rule_itself_vs_explore_edit_pane, 660); // WARNING : c'est une position "absolue"
|
||||
gtk_paned_set_wide_handle (rule_itself_vs_explore_edit_pane, TRUE);
|
||||
gtk_paned_set_shrink_start_child (rule_itself_vs_explore_edit_pane, FALSE);
|
||||
gtk_paned_set_shrink_end_child (rule_itself_vs_explore_edit_pane, FALSE);
|
||||
|
@ -60,16 +60,41 @@ static void *widget_rule_itself_vs_explore_edit_pane()
|
|||
return GTK_WIDGET (rule_itself_vs_explore_edit_pane);
|
||||
}
|
||||
|
||||
void *widget_get_rules_page()
|
||||
static void *static_widget_get_rules_pilot_box ()
|
||||
{
|
||||
GtkPaned *H_tree_vs_selected = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL));
|
||||
gtk_paned_set_start_child (H_tree_vs_selected, GTK_WIDGET (widget_get_rules_tree_and_pilot_box()));
|
||||
gtk_paned_set_end_child (H_tree_vs_selected, GTK_WIDGET (widget_rule_itself_vs_explore_edit_pane()));
|
||||
gtk_paned_set_position (H_tree_vs_selected, 340); // WARNING : c'est une position "absolue"
|
||||
gtk_paned_set_wide_handle (H_tree_vs_selected, TRUE);
|
||||
gtk_paned_set_shrink_start_child (H_tree_vs_selected, FALSE);
|
||||
gtk_paned_set_shrink_end_child (H_tree_vs_selected, FALSE);
|
||||
GtkBox *rules_pilot_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2));
|
||||
GtkButton *btt_show_rules_use = GTK_BUTTON (gtk_button_new_with_label ("rules use"));
|
||||
// gtk_button_set_icon_name (btt_show_rules_use, "any-symbolic");
|
||||
// g_signal_connect (btt_show_rules_use, "clicked", G_CALLBACK (on_show_rules_use), no_local_data);
|
||||
GtkButton *btt_show_rules_comparator = GTK_BUTTON (gtk_button_new_with_label ("comparator"));
|
||||
GtkButton *btt_expand_tree = GTK_BUTTON (gtk_button_new_with_label ("tree"));
|
||||
|
||||
return GTK_WIDGET (H_tree_vs_selected);
|
||||
gtk_box_append (rules_pilot_box, GTK_WIDGET (btt_expand_tree));
|
||||
gtk_box_append (rules_pilot_box, GTK_WIDGET (btt_show_rules_use));
|
||||
gtk_box_append (rules_pilot_box, GTK_WIDGET (btt_show_rules_comparator));
|
||||
return rules_pilot_box;
|
||||
}
|
||||
|
||||
void *widget_get_rules_tree_and_pilot_box ()
|
||||
{
|
||||
GtkBox *rules_tree_and_pilot_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2));
|
||||
gtk_box_append (rules_tree_and_pilot_box, GTK_WIDGET (static_widget_get_rules_pilot_box ()));
|
||||
// TODO non static génère une erreur : "référence indéfinie" <> a linkage pb ? see Makefile ?
|
||||
gtk_box_append (rules_tree_and_pilot_box, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)));
|
||||
gtk_box_append (rules_tree_and_pilot_box, GTK_WIDGET (widget_get_rules_tree ()));
|
||||
return rules_tree_and_pilot_box;
|
||||
}
|
||||
|
||||
void *widget_get_rules_page()
|
||||
{
|
||||
GtkPaned *tree_vs_selected = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL));
|
||||
gtk_paned_set_start_child (tree_vs_selected, GTK_WIDGET (widget_get_rules_tree_and_pilot_box()));
|
||||
gtk_paned_set_end_child (tree_vs_selected, GTK_WIDGET (widget_rule_itself_vs_explore_edit_pane()));
|
||||
gtk_paned_set_position (tree_vs_selected, 340); // WARNING : c'est une position "absolue"
|
||||
gtk_paned_set_wide_handle (tree_vs_selected, TRUE);
|
||||
gtk_paned_set_shrink_start_child (tree_vs_selected, FALSE);
|
||||
gtk_paned_set_shrink_end_child (tree_vs_selected, FALSE);
|
||||
|
||||
return GTK_WIDGET (tree_vs_selected);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* *
|
||||
* Gem-graph client *
|
||||
* *
|
||||
* Rules *
|
||||
* *
|
||||
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
|
||||
* Copyright © 2021 Jean Sirmai <jean@a-lec.org> *
|
||||
* *
|
||||
* This file is part of Gem-graph. *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify it *
|
||||
* under the terms of the GNU Affero General Public License *
|
||||
* as published by the Free Software Foundation, *
|
||||
* either version 3 of the License, *
|
||||
* or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; *
|
||||
* without even the implied warranty of MERCHANTABILITY *
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||
* See the GNU Affero General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU Affero General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
|
||||
#include "../../../include/fsm.h"
|
||||
#include "../../../include/widget.h"
|
||||
#include "../../../include/signal.h"
|
||||
|
||||
|
||||
void *widget_get_rules_pilot_box ()
|
||||
{
|
||||
GtkBox *rules_pilot_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2));
|
||||
GtkButton *btt_show_rules_use = GTK_BUTTON (gtk_button_new ());
|
||||
gtk_button_set_icon_name (btt_show_rules_use, "go-home-symbolic");
|
||||
// g_signal_connect (btt_show_rules_use, "clicked", G_CALLBACK (on_show_rules_use), no_local_data);
|
||||
gtk_box_append (rules_pilot_box, GTK_BUTTON (btt_show_rules_use));
|
||||
|
||||
// gtk_box_append (rules_pilot_box,
|
||||
// GTK_WIDGET (gtk_label_new ("\n - - - - - - - (some widgets here) - - - - - - - \n")));
|
||||
return rules_pilot_box;
|
||||
}
|
||||
|
|
@ -36,11 +36,8 @@ static void *get_under_rule_before()
|
|||
{
|
||||
GtkBox *under_rule_before_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2));
|
||||
gtk_box_append (under_rule_before_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n\n - - - - - - - (some widgets here) - - - - - - - ")));
|
||||
gtk_box_append (under_rule_before_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n\n| [ rule_before ] |")));
|
||||
gtk_box_append (under_rule_before_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n\n - - - - - - - (some other widgets there) - - - - - - - ")));
|
||||
GTK_WIDGET (gtk_label_new ("\n | - - - - - - (some widgets here) - - - - - - - |\
|
||||
[ rule_before ] | - - - - - - - - (some other widgets there) - - - - - - - |")));
|
||||
return GTK_WIDGET (under_rule_before_box);
|
||||
}
|
||||
|
||||
|
@ -49,11 +46,8 @@ static void *get_under_rule_after()
|
|||
{
|
||||
GtkBox *under_rule_after_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2));
|
||||
gtk_box_append (under_rule_after_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n\n - - - - - - - (some widgets here) - - - - - - - ")));
|
||||
gtk_box_append (under_rule_after_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n\n| [ rule_after ] |")));
|
||||
gtk_box_append (under_rule_after_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n\n - - - - - - - (some other widgets there) - - - - - - - ")));
|
||||
GTK_WIDGET (gtk_label_new ("\n | - - - - - - - (some widgets here) - - - - - - - |\
|
||||
[ rule_after ] | - - - - - - - - (some other widgets there) - - - - - - - - |")));
|
||||
return GTK_WIDGET (under_rule_after_box);
|
||||
}
|
||||
|
||||
|
@ -66,7 +60,7 @@ static void *get_rule_before()
|
|||
("/home/jean/Gem-Graph/gem-graph-client/data/image/AMP.png")));
|
||||
gtk_box_append (rule_before, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_VERTICAL)));
|
||||
gtk_box_append (rule_before, GTK_WIDGET (get_under_rule_before()));
|
||||
gtk_widget_set_size_request (GTK_WIDGET (rule_before), W_IMAGE_LOCAL / 2, H_IMAGE_LOCAL / 2);
|
||||
gtk_widget_set_size_request (GTK_WIDGET (rule_before), W_IMAGE_LOCAL / 2, H_IMAGE_LOCAL / 1.46);
|
||||
return GTK_WIDGET (rule_before);
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,31 @@
|
|||
#include "../../../include/signal.h"
|
||||
|
||||
|
||||
static void *widget_get_rules_tree ()
|
||||
static GtkScrollbar *rule_bar [n_rules];
|
||||
static GtkAdjustment *rule_adjust [n_rules];
|
||||
|
||||
static void *static_widget_get_rules_use ()
|
||||
{
|
||||
GtkBox *rules_use_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0));
|
||||
for (int i = 0; i < n_rules; i++)
|
||||
{
|
||||
rule_adjust [i] = gtk_adjustment_new (exp(i), 0, 127, 1, 0, 0);
|
||||
rule_bar [i] = GTK_SCROLLBAR (gtk_scrollbar_new (GTK_ORIENTATION_HORIZONTAL,
|
||||
rule_adjust [i]));
|
||||
char tooltip_text[8];
|
||||
sprintf(tooltip_text, "\n%d\n", i);
|
||||
if (0 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (rule_bar [i]), "move rule xyz");
|
||||
if (1 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (rule_bar [i]), "transform this");
|
||||
if (2 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (rule_bar [i]), "transport that");
|
||||
if (3 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (rule_bar [i]), "any rule name");
|
||||
if (4 == i % 5) gtk_widget_set_tooltip_text (GTK_WIDGET (rule_bar [i]), tooltip_text);
|
||||
|
||||
gtk_box_append (rules_use_box, GTK_WIDGET (rule_bar [i]));
|
||||
}
|
||||
return rules_use_box;
|
||||
}
|
||||
|
||||
void *widget_get_rules_tree ()
|
||||
{
|
||||
GtkPaned *H_tree_vs_comparison = GTK_PANED (gtk_paned_new (GTK_ORIENTATION_HORIZONTAL));
|
||||
|
||||
|
@ -41,7 +65,8 @@ static void *widget_get_rules_tree ()
|
|||
// GTK_SCROLLED_WINDOW
|
||||
gtk_paned_set_start_child (H_tree_vs_comparison, GTK_WIDGET (widget_get_user_rules_tree()));
|
||||
gtk_paned_set_end_child (H_tree_vs_comparison, GTK_WIDGET
|
||||
(get_an_impression_of_what_a_rules_comparator_could_be()));
|
||||
(static_widget_get_rules_use ()));
|
||||
// (get_an_impression_of_what_a_rules_comparator_could_be()));
|
||||
gtk_paned_set_position (H_tree_vs_comparison, 200);
|
||||
gtk_paned_set_wide_handle (H_tree_vs_comparison, TRUE);
|
||||
gtk_widget_set_size_request (GTK_WIDGET (H_tree_vs_comparison), W_IMAGE_LOCAL, H_IMAGE_LOCAL);
|
||||
|
@ -51,19 +76,4 @@ static void *widget_get_rules_tree ()
|
|||
return GTK_WIDGET (H_tree_vs_comparison);
|
||||
}
|
||||
|
||||
static void *widget_get_rules_pilot_box ()
|
||||
{
|
||||
GtkBox *rules_pilot_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2));
|
||||
gtk_box_append (rules_pilot_box,
|
||||
GTK_WIDGET (gtk_label_new ("\n - - - - - - - (some widgets here) - - - - - - - \n")));
|
||||
return rules_pilot_box;
|
||||
}
|
||||
|
||||
void *widget_get_rules_tree_and_pilot_box ()
|
||||
{
|
||||
GtkBox *rules_tree_and_pilot_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 2));
|
||||
gtk_box_append (rules_tree_and_pilot_box, GTK_WIDGET (widget_get_rules_pilot_box ()));
|
||||
gtk_box_append (rules_tree_and_pilot_box, GTK_WIDGET (gtk_separator_new (GTK_ORIENTATION_HORIZONTAL)));
|
||||
gtk_box_append (rules_tree_and_pilot_box, GTK_WIDGET (widget_get_rules_tree ()));
|
||||
return rules_tree_and_pilot_box;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue