diff --git a/include/base.h b/include/base.h index d941a87..d30b470 100644 --- a/include/base.h +++ b/include/base.h @@ -18,9 +18,9 @@ * or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; * +* but WITHOUT ANY WARRANTY; * * without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. * +* 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 * @@ -42,6 +42,7 @@ #include #include #include + #include #include @@ -74,8 +75,8 @@ struct arrow_t { uint load; uint site; uint x; uint y; uint z; }; /* - If I'm standing on Earth (or any spinning spheroid), - looking towards its North pole. + If I'm standing on Earth (or any spinning spheroid), + looking towards its North pole. Then : diff --git a/include/callback.h b/include/callbacks.h similarity index 96% rename from include/callback.h rename to include/callbacks.h index 5f21386..0396937 100644 --- a/include/callback.h +++ b/include/callbacks.h @@ -17,9 +17,9 @@ * or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; * +* but WITHOUT ANY WARRANTY; * * without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. * +* 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 * @@ -37,6 +37,7 @@ void on_main_window_activation (GtkApplication *app, gpointer user_data); void on_dialog_window_activation (GtkApplication *app, gpointer user_data); void on_toggle_EXEC_EDIT (GtkWidget *btt_XOR_EXEC_EDIT, gpointer user_data); +void on_toggle_STATE_RULES_DATA (GtkWidget *btt, gpointer user_data); void on_toggle_MODEL_RUN_STOP (GtkWidget *btt_MODEL_RUN_STOP, gpointer data); void on_open_STATE (GtkWidget *btt_open_STATE, gpointer data); @@ -46,7 +47,6 @@ void on_open_DATA (GtkWidget *btt_open_DATA, gpointer data); void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data); void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data); void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, gpointer data); -void on_toggle_STATE_RULES_DATA (GtkWidget *btt, gpointer user_data); void on_user_tree_expander_toggled (GtkExpander *expander, gpointer user_data); void on_setup_user_tree_factory (GtkSignalListItemFactory *factory, diff --git a/include/graphics.h b/include/graphics.h index c92b042..b90cccc 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -18,9 +18,9 @@ * or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; * +* but WITHOUT ANY WARRANTY; * * without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. * +* 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 * @@ -268,64 +268,6 @@ static inline void print_stack(int stack_id) } -void graphics_model_setup (const int stack_id); - -int draw_one_arrow_vertex (const int stack_id, - int space_X, - int space_Y, - int space_Z, - int weight, - int site, - int x, - int y, - int z); - -int draw_one_arrow_line(const int stack_id, - int offset_vertex); - -/* - * Writes grid ridges to vertex and color buffers - * - * @param coords long (x,y,z), step_x, step_y, step_z - * - * @return void - */ -int draw_space_ridges_vertex (const int stack_id, - long offset_vertex, - long x, - long y, - long z); - -int draw_space_ridges_lines (const int stack_id); - -/* - * Writes grid lines on space faces - * - * @param coords long (x,y,z) - * - * @return void - */ -long draw_grids_on_space_faces_vertex (const int stack_id, - long x, - long y, - long z); - -long draw_grids_on_space_faces_lines (const int stack_id, - long offset_vertex, - long x, - long y, - long z); - -int set_arrow (int stack_id, - int arrows_nb, - int space_X, - int space_Y, - int space_Z, - int requested_weight, - int site, - int arrow_x, - int arrow_y, - int arrow_z); /* * Initializes a gl_area * diff --git a/include/parsing.h b/include/parsing.h index 037940f..519bbd2 100644 --- a/include/parsing.h +++ b/include/parsing.h @@ -17,9 +17,9 @@ * or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; * +* but WITHOUT ANY WARRANTY; * * without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. * +* 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 * diff --git a/include/widgets.h b/include/widgets.h index cfc644e..18aa0d7 100644 --- a/include/widgets.h +++ b/include/widgets.h @@ -17,9 +17,9 @@ * or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; * +* but WITHOUT ANY WARRANTY; * * without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. * +* 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 * @@ -39,26 +39,23 @@ #define H_IMAGE_LOCAL H / 16 void main_window_design (GtkWindow *main_window); -void dialog_window_design (GtkWindow *main_window, GtkWindow *dialog_window); - -GtkButton *get_GtkButton (char *btt_name); - -GtkFrame *get_frame_with_label(); - -GtkWidget *get_selected_rules_vpaned_new(); -GtkWidget *get_rules_tree_hpaned_new(); - -GtkWidget *get_TIME_EXEC_controls_box(); -GtkWidget *get_SPACE_EDIT_controls_box(); -GtkWidget *get_OBJECTS_and_SITUATIONS(); +void dialog_window_design (GtkWindow *main_window, + GtkWindow *dialog_window); GtkWidget *get_window_child_STATE(); GtkWidget *get_window_child_RULES(); GtkWidget *get_window_child_DATA(); -GtkWidget *get_text_view(); +GtkWidget *get_selected_rules_vpaned_new(); +GtkWidget *get_rules_tree_hpaned_new(); GtkWidget *get_rules_page_new(); +GtkWidget *get_TIME_EXEC_controls_box(); +GtkWidget *get_SPACE_EDIT_controls_box(); +GtkWidget *get_OBJECTS_and_SITUATIONS(); + +GtkWidget *get_text_view(); + GtkWidget *get_image_ALL_SPACE(); GtkWidget *get_image_GLUTAMATE(); GtkWidget *get_image_GLUTAMINE(); @@ -69,6 +66,10 @@ GtkWidget *get_image_DOPAMINE(); GtkWidget *get_image_ATP(); GtkWidget *get_image_AMP(); +GtkButton *get_GtkButton (char *btt_name); + +GtkFrame *get_frame_with_label(); + GtkProgressBar *get_ELAPSED_TIME_ProgressBar(); GtkBox *get_RUN_STOP_box(); @@ -78,6 +79,10 @@ GtkBox *get_XYZ_box(); GtkBox *get_rules_user_tree_new(); GtkBox *get_ELAPSED_TIME_box(); +struct TreeNode_t {gchar *text; struct TreeNode_t *child, *next;}; +void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child); +struct TreeNode_t *create_user_tree_node (const gchar* text); +void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root); GtkScrolledWindow *get_user_rules_tree (); void icons_for_fun (GtkHeaderBar *header_bar); diff --git a/src/callback.c b/src/callbacks.c similarity index 94% rename from src/callback.c rename to src/callbacks.c index 0371b0e..964e74d 100644 --- a/src/callback.c +++ b/src/callbacks.c @@ -26,7 +26,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "../include/callback.h" +#include "../include/callbacks.h" #include "../include/widgets.h" #include "../include/graphics.h" @@ -37,16 +37,11 @@ static GtkWindow *main_window, *dialog_window; - void on_main_window_activation (GtkApplication *app, gpointer no_user_data) { main_window = GTK_WINDOW (gtk_application_window_new (app)); main_window_design (main_window); - g_signal_connect (app, - "activate", - G_CALLBACK (on_dialog_window_activation), - main_window); } @@ -56,6 +51,8 @@ void on_dialog_window_activation (GtkApplication *app, dialog_window = GTK_WINDOW (gtk_application_window_new (app)); dialog_window_design (main_window, dialog_window); + + gtk_window_present (GTK_WINDOW (dialog_window)); } @@ -119,6 +116,13 @@ void on_bind_user_tree_factory (GtkSignalListItemFactory *factory, gtk_tree_list_row_get_depth(row) * 20); } +void on_setup_user_tree_factory (GtkSignalListItemFactory *factory, + GObject* object, gpointer user_data){ + GtkWidget* expander = gtk_expander_new (NULL); + gtk_list_item_set_child (GTK_LIST_ITEM (object), expander); + if (0) printf("[on_setup_user_tree_factory] here is an expander\n"); +} + /******************************************************************************/ /* G L A R E A */ @@ -286,18 +290,18 @@ void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data) { gtk_widget_set_sensitive (GTK_WIDGET (data), TRUE); - printf ("callback.c (line 294) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n"); + printf ("callback.c (line 286) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n"); } void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data) { gtk_window_close (GTK_WINDOW (data)); - printf ("callback.c (line 300) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n"); + printf ("callback.c (line 292) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n"); } void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, gpointer data) { gtk_window_close (GTK_WINDOW (data)); - printf ("callback.c (line 306) - WRITE_CURRENT_MODEL\n"); + printf ("callback.c (line 300) - WRITE_CURRENT_MODEL\n"); } diff --git a/src/dialog.c b/src/dialog.c index 7945971..27e2226 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -25,7 +25,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "../include/callback.h" +#include "../include/callbacks.h" void dialog_window_design (GtkWindow *main_window, GtkWindow *dialog_window){ char *title = " Save the current model before modifying it? "; diff --git a/src/graph_area.c b/src/graph_area.c index 9a43474..db6720f 100644 --- a/src/graph_area.c +++ b/src/graph_area.c @@ -26,7 +26,7 @@ #include "../include/graphics.h" -#include "../include/callback.h" +#include "../include/callbacks.h" struct stack_index_t { long stack_id; diff --git a/src/main.c b/src/main.c index f1cb1eb..c30bcfb 100644 --- a/src/main.c +++ b/src/main.c @@ -18,9 +18,9 @@ * or (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; * +* but WITHOUT ANY WARRANTY; * * without even the implied warranty of MERCHANTABILITY * -* or FITNESS FOR A PARTICULAR PURPOSE. * +* 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 * @@ -29,21 +29,19 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "../include/callback.h" +#include "../include/callbacks.h" int main (int argc, char **argv) { GtkApplication *app; int status; - app = gtk_application_new ("org.jean.GG_hack", G_APPLICATION_DEFAULT_FLAGS); + app = gtk_application_new ("org.jean.gg_hack", G_APPLICATION_DEFAULT_FLAGS); + g_signal_connect (app, "activate", G_CALLBACK (on_main_window_activation), NULL); g_signal_connect (app, "activate", G_CALLBACK (on_dialog_window_activation), NULL); + status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); - - printf("\nTODO (2024-06-30) OpenGL see : widgets.get_SPACE_VIEW_box()\ -\nline 138 > ui_setup_glarea (0, GTK_WIDGET (middle_box));\n\n"); - return status; } diff --git a/src/tree.c b/src/tree_lab.c similarity index 52% rename from src/tree.c rename to src/tree_lab.c index 088f1a2..b7a25bc 100644 --- a/src/tree.c +++ b/src/tree_lab.c @@ -2,40 +2,42 @@ * * * Gem-graph client * * * -* GTK4 Tree list * +* Widgets header * * * -* Copyright © 2021 Libre en Communs * -* Copyright © 2023 Adrien Bourmault * -* Copyright © 2024 Jean Sirmai * +* Copyright © 2021 Libre en Communs * +* Copyright © 2021 Adrien Bourmault * +* Copyright © 2021 Jean Sirmai * * * * 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 publishedby the Free Software Foundation, * -* either version 3 of the License, or (at your option) any later version. * +* 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. * +* 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 . * +* You should have received a copy of the GNU Affero General Public License * +* along with this program. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "../include/callback.h" +#include "../include/callbacks.h" +#include "../include/widgets.h" // https://docs.gtk.org/gtk4/visual_index.html < widgets gallery // https://docs.gtk.org/gtk4/section-text-widget.html // https://docs.gtk.org/gtk4/class.Widget.html#height-for-width-geometry-management // GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL -struct TreeNode_t {gchar *text; struct TreeNode_t *child, *next;}; -static void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child){ +void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child){ if (parent->child) { struct TreeNode_t *cur = parent->child; while (cur && cur->next) {cur = cur->next;} @@ -43,52 +45,13 @@ static void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child) } else parent->child = child; } -static struct TreeNode_t *create_user_tree_node (const gchar* text){ +struct TreeNode_t *create_user_tree_node (const gchar* text){ struct TreeNode_t *node = g_malloc0 (sizeof(struct TreeNode_t)); node->text = g_strdup (text); node->child = NULL; // if (0) printf("create_user_tree_node %s\n", text); return node; } -static void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root) { - struct TreeNode_t *a = create_user_tree_node("We, the people");add_child_node(tree_root, a); - struct TreeNode_t *b = create_user_tree_node("in Order to"); add_child_node(tree_root, b); - struct TreeNode_t *c = create_user_tree_node("do establish"); add_child_node(tree_root, c); - struct TreeNode_t *aa = create_user_tree_node("aware of"); add_child_node(a, aa); - struct TreeNode_t *aaa = create_user_tree_node("our rights"); add_child_node(aa, aaa); - struct TreeNode_t *aab = create_user_tree_node("our duties"); add_child_node(aa, aab); - struct TreeNode_t *aaaa = create_user_tree_node("read"); add_child_node(aaa, aaaa); - struct TreeNode_t *aaab = create_user_tree_node("write"); add_child_node(aaa, aaab); - struct TreeNode_t *aaac = create_user_tree_node("copy"); add_child_node(aaa, aaac); - struct TreeNode_t *aaad = create_user_tree_node("edit"); add_child_node(aaa, aaad); - struct TreeNode_t *aaaba= create_user_tree_node("code"); add_child_node(aaab, aaaba); - struct TreeNode_t *aaabb= create_user_tree_node("language"); add_child_node(aaab, aaabb); - struct TreeNode_t *aaabc= create_user_tree_node("any art..."); add_child_node(aaab, aaabc); - struct TreeNode_t *aaadb= create_user_tree_node("publish"); add_child_node(aaac, aaadb); - struct TreeNode_t *aaada= create_user_tree_node("create"); add_child_node(aaad, aaada); - struct TreeNode_t *aaba = create_user_tree_node("learn"); add_child_node(aab, aaba); - struct TreeNode_t *aabb = create_user_tree_node("help"); add_child_node(aab, aabb); - struct TreeNode_t *ba = create_user_tree_node("promote"); add_child_node(b, ba); - struct TreeNode_t *bb = create_user_tree_node("individual"); add_child_node(b, bb); - struct TreeNode_t *bc = create_user_tree_node("and common"); add_child_node(b, bc); - struct TreeNode_t *bca = create_user_tree_node("education"); add_child_node(bc, bca); - struct TreeNode_t *bcb = create_user_tree_node("mutual"); add_child_node(bc, bcb); - struct TreeNode_t *bcc = create_user_tree_node("support"); add_child_node(bc, bcc); - struct TreeNode_t *bcd = create_user_tree_node("health"); add_child_node(bc, bcd); - struct TreeNode_t *bcda = create_user_tree_node("mental"); add_child_node(bcd, bcda); - struct TreeNode_t *bcdb = create_user_tree_node("physical"); add_child_node(bcd, bcdb); - struct TreeNode_t *ca = create_user_tree_node("free"); add_child_node(c, ca); - struct TreeNode_t *cb = create_user_tree_node("code"); add_child_node(c, cb); - struct TreeNode_t *cc = create_user_tree_node("access"); add_child_node(c, cc); -} - -void on_setup_user_tree_factory (GtkSignalListItemFactory *factory, - GObject* object, gpointer user_data){ - GtkWidget* expander = gtk_expander_new (NULL); - gtk_list_item_set_child (GTK_LIST_ITEM (object), expander); - if (0) printf("[on_setup_user_tree_factory] here is an expander\n"); -} - static GListModel* get_user_tree_model_child (struct TreeNode_t *parent){ GtkStringList *list = NULL; if (parent) { @@ -154,3 +117,4 @@ GtkScrolledWindow *get_user_rules_tree () return scrolled_window; } + diff --git a/src/widgets.c b/src/widgets.c index 35b315a..c06c52e 100644 --- a/src/widgets.c +++ b/src/widgets.c @@ -27,7 +27,7 @@ #include "../include/base.h" -#include "../include/callback.h" +#include "../include/callbacks.h" #include "../include/widgets.h" // https://blog.gtk.org/2020/09/08/on-list-models/ < TODO @@ -156,6 +156,9 @@ GtkWidget *get_SPACE_VIEW_box(){ gtk_box_append (right_box, GTK_WIDGET (get_ZOOM_box())); GtkBox *middle_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2)); + + printf("\nwidgets.get_SPACE_VIEW_box()\ + TODO ui_setup_glarea (0, GTK_WIDGET (middle_box));\n\n"); // TODO gtk_box_append (middle_box, GTK_WIDGET (get_image_ALL_SPACE())); // ui_setup_glarea (0, GTK_WIDGET (middle_box)); diff --git a/src/widgets_lab.c b/src/widgets_lab.c index 9dd9fcf..c342d71 100644 --- a/src/widgets_lab.c +++ b/src/widgets_lab.c @@ -2,25 +2,27 @@ * * * Gem-graph client * * * -* Widgets * +* Widgets header * * * -* Copyright © 2021 Libre en Communs * -* Copyright © 2023 Jean Sirmai * +* Copyright © 2021 Libre en Communs * +* Copyright © 2021 Jean Sirmai * * * * 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 publishedby the Free Software Foundation, * -* either version 3 of the License, or (at your option) any later version. * +* 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. * +* 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 . * +* You should have received a copy of the GNU Affero General Public License * +* along with this program. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -419,3 +421,36 @@ void icons_for_fun (GtkHeaderBar *header_bar) // https://iconduck.com/sets/a gtk_header_bar_pack_end (header_bar, GTK_WIDGET (power_low)); } +void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root) { + struct TreeNode_t *a = create_user_tree_node("We, the people");add_child_node(tree_root, a); + struct TreeNode_t *b = create_user_tree_node("in Order to"); add_child_node(tree_root, b); + struct TreeNode_t *c = create_user_tree_node("do establish"); add_child_node(tree_root, c); + struct TreeNode_t *aa = create_user_tree_node("aware of"); add_child_node(a, aa); + struct TreeNode_t *aaa = create_user_tree_node("our rights"); add_child_node(aa, aaa); + struct TreeNode_t *aab = create_user_tree_node("our duties"); add_child_node(aa, aab); + struct TreeNode_t *aaaa = create_user_tree_node("read"); add_child_node(aaa, aaaa); + struct TreeNode_t *aaab = create_user_tree_node("write"); add_child_node(aaa, aaab); + struct TreeNode_t *aaac = create_user_tree_node("copy"); add_child_node(aaa, aaac); + struct TreeNode_t *aaad = create_user_tree_node("edit"); add_child_node(aaa, aaad); + struct TreeNode_t *aaaba= create_user_tree_node("code"); add_child_node(aaab, aaaba); + struct TreeNode_t *aaabb= create_user_tree_node("language"); add_child_node(aaab, aaabb); + struct TreeNode_t *aaabc= create_user_tree_node("any art..."); add_child_node(aaab, aaabc); + struct TreeNode_t *aaadb= create_user_tree_node("publish"); add_child_node(aaac, aaadb); + struct TreeNode_t *aaada= create_user_tree_node("create"); add_child_node(aaad, aaada); + struct TreeNode_t *aaba = create_user_tree_node("learn"); add_child_node(aab, aaba); + struct TreeNode_t *aabb = create_user_tree_node("help"); add_child_node(aab, aabb); + struct TreeNode_t *ba = create_user_tree_node("promote"); add_child_node(b, ba); + struct TreeNode_t *bb = create_user_tree_node("individual"); add_child_node(b, bb); + struct TreeNode_t *bc = create_user_tree_node("and common"); add_child_node(b, bc); + struct TreeNode_t *bca = create_user_tree_node("education"); add_child_node(bc, bca); + struct TreeNode_t *bcb = create_user_tree_node("mutual"); add_child_node(bc, bcb); + struct TreeNode_t *bcc = create_user_tree_node("support"); add_child_node(bc, bcc); + struct TreeNode_t *bcd = create_user_tree_node("health"); add_child_node(bc, bcd); + struct TreeNode_t *bcda = create_user_tree_node("mental"); add_child_node(bcd, bcda); + struct TreeNode_t *bcdb = create_user_tree_node("physical"); add_child_node(bcd, bcdb); + struct TreeNode_t *ca = create_user_tree_node("free"); add_child_node(c, ca); + struct TreeNode_t *cb = create_user_tree_node("code"); add_child_node(c, cb); + struct TreeNode_t *cc = create_user_tree_node("access"); add_child_node(c, cc); +} + +