------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Cheddar is a GNU GPL real-time scheduling analysis tool. -- This program provides services to automatically check schedulability and -- other performance criteria of real-time architecture models. -- -- Copyright (C) 2002-2020, Frank Singhoff, Alain Plantec, Jerome Legrand, -- Hai Nam Tran, Stephane Rubini -- -- The Cheddar project was started in 2002 by -- Frank Singhoff, Lab-STICC UMR 6285, Université de Bretagne Occidentale -- -- Cheddar has been published in the "Agence de Protection des Programmes/France" in 2008. -- Since 2008, Ellidiss technologies also contributes to the development of -- Cheddar and provides industrial support. -- -- The full list of contributors and sponsors can be found in AUTHORS.txt and SPONSORS.txt -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 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 General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- -- -- Contact : cheddar@listes.univ-brest.fr -- ------------------------------------------------------------------------------ -- Last update : -- $Rev$ -- $Date$ -- $Author: singhoff $ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with Gtk; use Gtk; with Gtk.Main; use Gtk.Main; with Glib.Error; use Glib.Error; with Gtk.Widget; use Gtk.Widget; with Ada.Text_IO; use Ada.Text_IO; with Gtk.Combo_Box; use Gtk.Combo_Box; with Gtk.List_Store; use Gtk.List_Store; with Gtk.Tree_Model; use Gtk.Tree_Model; with Gtk.Tree_View; use Gtk.Tree_View; with Glib; use Glib; with Glib.Object; use Glib.Object; with Glib.Values; use Glib.Values; with Gtk.Tree_View_Column; use Gtk.Tree_View_Column; with deployments; use deployments; with deployment_set; use deployment_set; with graphical_editor.cores; use graphical_editor.cores; with graphical_editor.user_message; use graphical_editor.user_message; with Ada.Exceptions; use Ada.Exceptions; with GNAT.Current_Exception; use GNAT.Current_Exception; with framework_config; use framework_config; with scheduler_interface; use scheduler_interface; with translate; use translate; with objects; use objects; use objects.generic_object_set_package; with objects.extended; use objects.extended; with sets; with tasks; use tasks; with task_set; use task_set; with task_groups; use task_groups; with task_group_set; use task_group_set; with resources; use resources; with resource_set; use resource_set; with messages; use messages; with message_set; use message_set; with core_units; use core_units; with processors; use processors; with processor_set; use processor_set; use processor_set.generic_processor_set; use processor_set.generic_core_unit_set; with buffers; use buffers; with buffer_set; use buffer_set; with networks; use networks; with network_set; use network_set; with event_analyzers; use event_analyzers; with event_analyzer_set; use event_analyzer_set; with address_spaces; use address_spaces; with address_space_set; use address_space_set; with caches; use caches; with cache_set; use cache_set; with deployments; use deployments; with deployment_set; use deployment_set; with graphical_editor.convert_text; use graphical_editor.convert_text; with systems; use systems; package body graphical_editor.deployments is deployment_table_length : constant Natural := 19; procedure initialize_deployment (my_tab : in out table_widget_id; object : access gtkada_builder_record'class) is ob1 : gobject := Get_Object (object, "textbuffer1"); ob2 : gobject := Get_Object (object, "combobox3"); ob3 : gobject := Get_Object (object, "combobox5"); ob4 : gobject := Get_Object (object, "combobox4"); ob5 : gobject := Get_Object (object, "textbuffer2"); ob6 : gobject := Get_Object (object, "textbuffer4"); ob7 : gobject := Get_Object (object, "textbuffer5"); ob8 : gobject := Get_Object (object, "textbuffer6"); ob9 : gobject := Get_Object (object, "textbuffer7"); ob10 : gobject := Get_Object (object, "textbuffer8"); ob11 : gobject := Get_Object (object, "textbuffer9"); ob12 : gobject := Get_Object (object, "textbuffer10"); ob13 : gobject := Get_Object (object, "liststore4"); ob14 : gobject := Get_Object (object, "treeview2"); ob15 : gobject := Get_Object (object, "liststore5"); ob16 : gobject := Get_Object (object, "treeview3"); ob17 : gobject := Get_Object (object, "liststore1"); ob18 : gobject := Get_Object (object, "treeview1"); wid1 : t_widget := (ptype => buffer_string, buffer_value => gtk_text_buffer (ob1)); wid2 : t_widget := (ptype => combo, combo_value => gtk_combo_box (ob2)); wid3 : t_widget := (ptype => combo, combo_value => gtk_combo_box (ob3)); wid4 : t_widget := (ptype => combo, combo_value => gtk_combo_box (ob4)); wid5 : t_widget := (ptype => buffer_string, buffer_value => gtk_text_buffer (ob5)); wid6 : t_widget := (ptype => buffer_integer, buffer_value => gtk_text_buffer (ob6)); wid7 : t_widget := (ptype => buffer_integer, buffer_value => gtk_text_buffer (ob7)); wid8 : t_widget := (ptype => buffer_integer, buffer_value => gtk_text_buffer (ob8)); wid9 : t_widget := (ptype => buffer_string, buffer_value => gtk_text_buffer (ob9)); wid10 : t_widget := (ptype => buffer_integer, buffer_value => gtk_text_buffer (ob10)); wid11 : t_widget := (ptype => buffer_integer, buffer_value => gtk_text_buffer (ob11)); wid12 : t_widget := (ptype => buffer_string, buffer_value => gtk_text_buffer (ob12)); wid13 : t_widget := (ptype => lists, list_value => gtk_list_store (ob13)); wid14 : t_widget := (ptype => view, view_value => gtk_tree_view (ob14)); wid15 : t_widget := (ptype => lists, list_value => gtk_list_store (ob15)); wid16 : t_widget := (ptype => view, view_value => gtk_tree_view (ob16)); wid17 : t_widget := (ptype => lists, list_value => gtk_list_store (ob17)); wid18 : t_widget := (ptype => view, view_value => gtk_tree_view (ob18)); wid19 : t_widget := (ptype => my_window, window_value => deployment_window); begin my_tab (1 .. deployment_table_length) := (new t_widget'(wid1), new t_widget'(wid2), new t_widget'(wid3), new t_widget'(wid4), new t_widget'(wid5), new t_widget'(wid6), new t_widget'(wid7), new t_widget'(wid8), new t_widget'(wid9), new t_widget'(wid10), new t_widget'(wid11), new t_widget'(wid12), new t_widget'(wid13), new t_widget'(wid14), new t_widget'(wid15), new t_widget'(wid16), new t_widget'(wid17), new t_widget'(wid18), new t_widget'(wid19)); end initialize_deployment; -- Data retrieved from the widgets -- deployment_scheduler : schedulers_type; deployment_preemptive : preemptives_type; deployment_type : deployments_type; deployment_name, deployment_automaton_name : Unbounded_String; deployment_file_name, deployment_allocation_description : Unbounded_String; deployment_start_time, deployment_priority, number_of_resource, number_of_consumer, deployment_quantum, deployment_capacity, deployment_period : Integer; deployment_resource_entities, deployment_consumer_entities : generic_objects_set; procedure check_deployment (my_tab : in out table_widget_id; object : access gtkada_builder_record'class) is start_time_string, quantum_string, capacity_string, period_string, priority_string : Unbounded_String; tree_iter_resource, tree_iter_consumer : gtk_tree_iter; object_name_value : gvalue; integer_ok : Boolean; begin deployment_name := get_value_buffer_string (gtk_text_buffer (my_tab (1).buffer_value)); deployment_type := to_type (To_Unbounded_String (Get_Active_Text (gtk_combo_box (my_tab (2).combo_value)))) .deployment_value; deployment_scheduler := to_type (To_Unbounded_String (Get_Active_Text (gtk_combo_box (my_tab (3).combo_value)))) .schedulers_value; deployment_preemptive := to_type (To_Unbounded_String (Get_Active_Text (gtk_combo_box (my_tab (4).combo_value)))) .preemptives_value; deployment_automaton_name := get_value_buffer_string (gtk_text_buffer (my_tab (5).buffer_value)); capacity_string := suppress_space (get_value_buffer_string (gtk_text_buffer (my_tab (6).buffer_value))); if (capacity_string = "") then deployment_capacity := 0; else to_integer (capacity_string, deployment_capacity, integer_ok); if not integer_ok then Raise_Exception (deployment_set.invalid_parameter'identity, To_String (lb_capacity (current_language) & lb_must_be_numeric (current_language))); end if; end if; period_string := suppress_space (get_value_buffer_string (gtk_text_buffer (my_tab (7).buffer_value))); if (period_string = "") then deployment_period := 0; else to_integer (period_string, deployment_period, integer_ok); if not integer_ok then Raise_Exception (deployment_set.invalid_parameter'identity, To_String (lb_period (current_language) & lb_must_be_numeric (current_language))); end if; end if; priority_string := suppress_space (get_value_buffer_string (gtk_text_buffer (my_tab (8).buffer_value))); if (priority_string = "") then deployment_priority := 0; else to_integer (priority_string, deployment_priority, integer_ok); if not integer_ok then Raise_Exception (deployment_set.invalid_parameter'identity, To_String (lb_priority (current_language) & lb_must_be_numeric (current_language))); end if; end if; deployment_file_name := get_value_buffer_string (gtk_text_buffer (my_tab (9).buffer_value)); start_time_string := suppress_space (get_value_buffer_string (gtk_text_buffer (my_tab (10).buffer_value))); if (start_time_string = "") then deployment_start_time := 0; else to_integer (start_time_string, deployment_start_time, integer_ok); if not integer_ok then Raise_Exception (deployment_set.invalid_parameter'identity, To_String (lb_start_time (current_language) & lb_must_be_numeric (current_language))); end if; end if; quantum_string := suppress_space (get_value_buffer_string (gtk_text_buffer (my_tab (11).buffer_value))); if (quantum_string = "") then deployment_quantum := 0; else to_integer (quantum_string, deployment_quantum, integer_ok); if not integer_ok then Raise_Exception (deployment_set.invalid_parameter'identity, To_String ("Quantum" & lb_must_be_numeric (current_language))); return; end if; end if; deployment_allocation_description := get_value_buffer_string (gtk_text_buffer (my_tab (12).buffer_value)); number_of_consumer := get_number_elements (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (14).view_value))); tree_iter_consumer := Get_Iter_First (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (14).view_value))); for i in 1 .. number_of_consumer loop Gtk.Tree_Model.Get_Value (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (14).view_value)), tree_iter_consumer, 0, object_name_value); add (deployment_consumer_entities, search_by_name (sys, To_Unbounded_String (Get_String (object_name_value)))); Next (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (14).view_value)), tree_iter_consumer); end loop; number_of_resource := get_number_elements (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (16).view_value))); tree_iter_resource := Get_Iter_First (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (16).view_value))); for i in 1 .. number_of_resource loop Gtk.Tree_Model.Get_Value (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (16).view_value)), tree_iter_resource, 0, object_name_value); add (deployment_resource_entities, search_by_name (sys, To_Unbounded_String (Get_String (object_name_value)))); Unset (object_name_value); Next (gtk_tree_model (Gtk.Tree_View.Get_Model (my_tab (16).view_value)), tree_iter_resource); end loop; check_deployment (sys.deployments, deployment_name, deployment_resource_entities, deployment_consumer_entities, empty_string, deployment_capacity, deployment_period, deployment_priority, deployment_preemptive, deployment_quantum, deployment_file_name, deployment_scheduler, deployment_automaton_name); end check_deployment; procedure add_in_sys_deployment (my_tab : in out table_widget_id; object : access gtkada_builder_record'class) is begin add_deployment (sys.deployments, deployment_name, deployment_resource_entities, deployment_consumer_entities, deployment_allocation_description, deployment_capacity, deployment_period, deployment_priority, deployment_preemptive, deployment_quantum, deployment_file_name, deployment_scheduler, deployment_automaton_name); end add_in_sys_deployment; procedure deleted_in_sys_deployment (my_tab : in out table_widget_id; object : access gtkada_builder_record'class) is a_deployment : generic_deployment_ptr; name : Unbounded_String; begin name := get_value_buffer_string (gtk_text_buffer (my_tab (1).buffer_value)); a_deployment := search_deployment (sys.deployments, name); check_entity_referencing_a_deployment (sys, a_deployment); delete (sys.deployments, a_deployment); end deleted_in_sys_deployment; procedure modify_in_sys_deployment (my_tab : in out table_widget_id; object : access gtkada_builder_record'class) is a_deployment, a_deployment_buffer : generic_deployment_ptr; id : Unbounded_String; begin a_deployment := search_deployment (sys.deployments, deployment_name); id := a_deployment.cheddar_private_id; delete (sys.deployments, a_deployment); add_deployment (sys.deployments, a_deployment_buffer, deployment_name, deployment_resource_entities, deployment_consumer_entities, deployment_allocation_description, deployment_capacity, deployment_period, deployment_priority, deployment_preemptive, deployment_quantum, deployment_file_name, deployment_scheduler, deployment_automaton_name); a_deployment_buffer.cheddar_private_id := id; end modify_in_sys_deployment; procedure show_in_sys_deployment (my_tab : in out table_widget_id; object : access gtkada_builder_record'class) is name : Unbounded_String; a_deployment : generic_deployment_ptr; liststore1, liststore2 : gobject; tree_iter1, tree_iter2 : gtk_tree_iter; consumer_entities_set, resource_entities_set : generic_objects_set; my_consumer_entities_set_iterator, my_resource_entities_set_iterator : generic_object_set_package.iterator; a_consumer_entities, a_resource_entities : generic_object_ptr; begin name := get_value_buffer_string (gtk_text_buffer (my_tab (1).buffer_value)); a_deployment := search_deployment (sys.deployments, name); liststore1 := Get_Object (object, "liststore4"); liststore2 := Get_Object (object, "liststore5"); Gtk.List_Store.Clear (gtk_list_store (liststore1)); Gtk.List_Store.Clear (gtk_list_store (liststore2)); consumer_entities_set := a_deployment.consumer_entities; resource_entities_set := a_deployment.resource_entities; reset_iterator (consumer_entities_set, my_consumer_entities_set_iterator); if not is_empty (consumer_entities_set) then loop current_element (consumer_entities_set, a_consumer_entities, my_consumer_entities_set_iterator); Append (gtk_list_store (liststore1), tree_iter1); Gtk.List_Store.Set (gtk_list_store (liststore1), tree_iter1, 0, To_String (get_name_of_generic_object (a_consumer_entities))); exit when is_last_element (consumer_entities_set, my_consumer_entities_set_iterator); next_element (consumer_entities_set, my_consumer_entities_set_iterator); end loop; end if; reset_iterator (resource_entities_set, my_resource_entities_set_iterator); if not is_empty (resource_entities_set) then loop current_element (resource_entities_set, a_resource_entities, my_resource_entities_set_iterator); Append (gtk_list_store (liststore2), tree_iter2); Gtk.List_Store.Set (gtk_list_store (liststore2), tree_iter2, 0, To_String (get_name_of_generic_object (a_resource_entities))); exit when is_last_element (resource_entities_set, my_resource_entities_set_iterator); next_element (resource_entities_set, my_resource_entities_set_iterator); end loop; end if; end show_in_sys_deployment; procedure delected_lign_consumer (object : access gtkada_builder_record'class) is liststore : gobject; tree_iter : gtk_tree_iter; path1 : gtk_tree_path; focus1 : gtk_tree_view_column; begin liststore := Get_Object (object, "liststore4"); Get_Cursor (gtk_tree_view (Get_Object (object, "treeview2")), path1, focus1); if path1 /= null and focus1 /= null then tree_iter := Get_Iter (gtk_tree_model (liststore), path1); Gtk.List_Store.Remove (gtk_list_store (liststore), tree_iter); end if; exception when others => show_message_box (Exception_Name & " : " & Exception_Message); return; end delected_lign_consumer; procedure delected_lign_resource (object : access gtkada_builder_record'class) is liststore : gobject; tree_iter : gtk_tree_iter; path1 : gtk_tree_path; focus1 : gtk_tree_view_column; begin liststore := Get_Object (object, "liststore5"); Get_Cursor (gtk_tree_view (Get_Object (object, "treeview3")), path1, focus1); if path1 /= null and focus1 /= null then tree_iter := Get_Iter (gtk_tree_model (liststore), path1); Gtk.List_Store.Remove (gtk_list_store (liststore), tree_iter); end if; exception when others => show_message_box (Exception_Name & " : " & Exception_Message); return; end delected_lign_resource; procedure add_view_resource (object : access gtkada_builder_record'class) is tree_iter : gtk_tree_iter; begin Append (gtk_list_store (Get_Object (object, "liststore5")), tree_iter); Gtk.List_Store.Set (gtk_list_store (Get_Object (object, "liststore5")), tree_iter, 0, Get_Active_Text (gtk_combo_box (Get_Object (object, "combobox2")))); exception when others => show_message_box (Exception_Name & " : " & Exception_Message); return; end add_view_resource; procedure add_view_consumer (object : access gtkada_builder_record'class) is tree_iter : gtk_tree_iter; begin Append (gtk_list_store (Get_Object (object, "liststore4")), tree_iter); Gtk.List_Store.Set (gtk_list_store (Get_Object (object, "liststore4")), tree_iter, 0, Get_Active_Text (gtk_combo_box (Get_Object (object, "combobox1")))); exception when others => show_message_box (Exception_Name & " : " & Exception_Message); return; end add_view_consumer; package deployment_callbacks is new generic_callbacks (number_of_widget => deployment_table_length, initialize => initialize_deployment, check => check_deployment, add_in_sys => add_in_sys_deployment, deleted_in_sys => deleted_in_sys_deployment, modify_in_sys => modify_in_sys_deployment, show_in_sys => show_in_sys_deployment); use deployment_callbacks; procedure show_deployment_widget is builder : gtkada_builder; error : Glib.Error.gerror; my_iterator : deployments_iterator; a_deployment : generic_deployment_ptr; tree_iter : gtk_tree_iter; liststore : gobject; a_task : generic_task_ptr; a_task_group : generic_task_group_ptr; a_resource : generic_resource_ptr; a_message : generic_message_ptr; a_core_units : core_unit_ptr; a_processor : generic_processor_ptr; a_buffer : buffer_ptr; a_network : generic_network_ptr; an_address_space : address_space_ptr; a_cache : generic_cache_ptr; my_task_iterator : tasks_iterator; my_task_group_iterator : task_groups_iterator; my_resource_iterator : resources_iterator; my_message_iterator : messages_iterator; my_core_units_iterator : core_units_iterator; my_processor_iterator : processors_iterator; my_buffer_iterator : buffers_iterator; my_network_iterator : networks_iterator; my_address_space_iterator : address_spaces_iterator; my_cache_iterator : caches_iterator; my_combo_consumer, my_combo_resource : gobject; begin Gtk.Main.Init; Gtk_New (builder); error := Add_From_File (builder, To_String (glade_path) & "deployment.glade"); if error /= null then Ada.Text_IO.Put_Line ("Error : " & Get_Message (error)); Error_Free (error); return; end if; initialize (sys_buffer); duplicate (sys, sys_buffer); my_combo_consumer := Get_Object (builder, "combobox1"); my_combo_resource := Get_Object (builder, "combobox2"); reset_iterator (sys.tasks, my_task_iterator); if not is_empty (sys.tasks) then loop current_element (sys.tasks, a_task, my_task_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_task.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_task.name)); exit when is_last_element (sys.tasks, my_task_iterator); next_element (sys.tasks, my_task_iterator); end loop; end if; reset_iterator (sys.task_groups, my_task_group_iterator); if not is_empty (sys.task_groups) then loop current_element (sys.task_groups, a_task_group, my_task_group_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_task_group.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_task_group.name)); exit when is_last_element (sys.task_groups, my_task_group_iterator); next_element (sys.task_groups, my_task_group_iterator); end loop; end if; reset_iterator (sys.resources, my_resource_iterator); if not is_empty (sys.resources) then loop current_element (sys.resources, a_resource, my_resource_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_resource.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_resource.name)); exit when is_last_element (sys.resources, my_resource_iterator); next_element (sys.resources, my_resource_iterator); end loop; end if; reset_iterator (sys.messages, my_message_iterator); if not is_empty (sys.messages) then loop current_element (sys.messages, a_message, my_message_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_message.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_message.name)); exit when is_last_element (sys.messages, my_message_iterator); next_element (sys.messages, my_message_iterator); end loop; end if; reset_iterator (sys.core_units, my_core_units_iterator); if not is_empty (sys.core_units) then loop current_element (sys.core_units, a_core_units, my_core_units_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_core_units.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_core_units.name)); exit when is_last_element (sys.core_units, my_core_units_iterator); next_element (sys.core_units, my_core_units_iterator); end loop; end if; reset_iterator (sys.processors, my_processor_iterator); if not is_empty (sys.processors) then loop current_element (sys.processors, a_processor, my_processor_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_processor.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_processor.name)); exit when is_last_element (sys.processors, my_processor_iterator); next_element (sys.processors, my_processor_iterator); end loop; end if; reset_iterator (sys.buffers, my_buffer_iterator); if not is_empty (sys.buffers) then loop current_element (sys.buffers, a_buffer, my_buffer_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_buffer.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_buffer.name)); exit when is_last_element (sys.buffers, my_buffer_iterator); next_element (sys.buffers, my_buffer_iterator); end loop; end if; reset_iterator (sys.networks, my_network_iterator); if not is_empty (sys.networks) then loop current_element (sys.networks, a_network, my_network_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_network.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_network.name)); exit when is_last_element (sys.networks, my_network_iterator); next_element (sys.networks, my_network_iterator); end loop; end if; reset_iterator (sys.address_spaces, my_address_space_iterator); if not is_empty (sys.address_spaces) then loop current_element (sys.address_spaces, an_address_space, my_address_space_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (an_address_space.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (an_address_space.name)); exit when is_last_element (sys.address_spaces, my_address_space_iterator); next_element (sys.address_spaces, my_address_space_iterator); end loop; end if; reset_iterator (sys.caches, my_cache_iterator); if not is_empty (sys.caches) then loop current_element (sys.caches, a_cache, my_cache_iterator); Append_Text (gtk_combo_box (my_combo_consumer), To_String (a_cache.name)); Append_Text (gtk_combo_box (my_combo_resource), To_String (a_cache.name)); exit when is_last_element (sys.caches, my_cache_iterator); next_element (sys.caches, my_cache_iterator); end loop; end if; Set_Active (gtk_combo_box (Get_Object (builder, "combobox1")), 0); Set_Active (gtk_combo_box (Get_Object (builder, "combobox2")), 0); Set_Active (gtk_combo_box (Get_Object (builder, "combobox3")), 0); Set_Active (gtk_combo_box (Get_Object (builder, "combobox4")), 0); Set_Active (gtk_combo_box (Get_Object (builder, "combobox5")), 0); liststore := Get_Object (builder, "liststore1"); reset_iterator (sys.deployments, my_iterator); if not is_empty (sys.deployments) then loop current_element (sys.deployments, a_deployment, my_iterator); Append (gtk_list_store (liststore), tree_iter); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 0, To_String (a_deployment.name)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 1, To_String (to_label (new t_all_enumeration_type' (deployment_enum, a_deployment.deployment_type)))); if a_deployment.deployment_type = dynamic_deployment_type then Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 2, To_String (to_label (new t_all_enumeration_type' (schedulers, dynamic_deployment_ptr (a_deployment) .allocation_parameters .scheduler_type)))); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 3, To_String (to_label (new t_all_enumeration_type' (preemptives, dynamic_deployment_ptr (a_deployment) .allocation_parameters .preemptive_type)))); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 4, To_String (dynamic_deployment_ptr (a_deployment) .allocation_parameters .automaton_name)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 5, gint (dynamic_deployment_ptr (a_deployment) .allocation_parameters .capacity)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 6, gint (dynamic_deployment_ptr (a_deployment) .allocation_parameters .period)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 7, gint (dynamic_deployment_ptr (a_deployment) .allocation_parameters .priority)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 8, To_String (dynamic_deployment_ptr (a_deployment) .allocation_parameters .user_defined_scheduler_source_file_name)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 9, gint (dynamic_deployment_ptr (a_deployment) .allocation_parameters .start_time)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 10, gint (dynamic_deployment_ptr (a_deployment) .allocation_parameters .quantum)); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 11, ""); else Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 2, "Rate Monotonic Protocol"); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 3, "Preemptive"); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 4, ""); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 5, 0); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 6, 0); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 7, 0); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 8, ""); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 9, 0); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 10, 0); Gtk.List_Store.Set (gtk_list_store (liststore), tree_iter, 11, ""); end if; exit when is_last_element (sys.deployments, my_iterator); next_element (sys.deployments, my_iterator); end loop; end if; Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_treeview1_cursor_changed", Handler => deployment_callbacks.show_lign_selected'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button1_clicked", Handler => deployment_callbacks.close_view'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button2_clicked", Handler => deployment_callbacks.cancel_view'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button5_clicked", Handler => deployment_callbacks.add_view'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button9_clicked", Handler => add_view_resource'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button7_clicked", Handler => add_view_consumer'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button4_clicked", Handler => deployment_callbacks.modify_lign'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button3_clicked", Handler => deployment_callbacks.delected_lign_selected'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button8_clicked", Handler => delected_lign_consumer'access); Gtkada.Builder.Register_Handler (Builder => builder, Handler_Name => "on_button10_clicked", Handler => delected_lign_resource'access); Do_Connect (builder); Gtk.Widget.Show_All (Get_Widget (builder, "window1")); Gtk.Main.Main; Unref (builder); end show_deployment_widget; end graphical_editor.deployments;