with Gtk.Menu_Item; use Gtk.Menu_Item; with Gtk; use Gtk; with Gtk.Main; use Gtk.Main; with Glib.Error; use Glib.Error; with Gtk.Widget; use Gtk.Widget; with Gtk.Dialog; use Gtk.Dialog; with Gtk.About_Dialog; use Gtk.About_Dialog; with Gtk.Label; use Gtk.Label; with Glib.Object; use Glib.Object; with Gtk.Text_Buffer; use Gtk.Text_Buffer; with Gtk.Combo_Box; use Gtk.Combo_Box; with Gtk.Text_Iter; use Gtk.Text_Iter; 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 Gtk.Tree_View_Column; use Gtk.Tree_View_Column; with Glib; use Glib; with Glib.Object; use Glib.Object; with Glib.Values; use Glib.Values; with Ada.Text_IO; use Ada.Text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with unbounded_strings; use unbounded_strings; with Processors; use Processors; with address_spaces; use address_spaces; with Processors.extended; use Processors.extended; with unbounded_strings; use unbounded_strings; use unbounded_strings.strings_table_package; with Framework_Config; use Framework_Config; with Buffer_Set; use Buffer_Set; use Buffer_Set.Generic_Buffer_Set; with Resource_Set; use Resource_Set; use Resource_Set.Generic_Resource_Set; with graphical_editor.user_message; use graphical_editor.user_message; with GNAT.Current_Exception; use GNAT.Current_Exception; with Translate; use Translate; with Networks; use Networks; with Task_Set; use Task_Set; use Task_Set.Generic_Task_Set; with Scheduler; use Scheduler; with Scheduler.user_defined.interpreted.pipeline; use Scheduler.user_defined.interpreted.pipeline; with Scheduler.user_defined.interpreted.Automata; use Scheduler.user_defined.interpreted.Automata; with Scheduler_Interface; use Scheduler_Interface; with Processor_Set; use Processor_Set; with Address_Space_Set; use Address_Space_Set; with Tasks; use Tasks; with Gtkada.Builder; use Gtkada.Builder; with Glib; use Glib; package body graphical_editor.tasks is procedure Initialize_Task(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, "combobox1"); ob3: GObject:= Get_Object(Object, "combobox3"); ob4: GObject:= Get_Object(Object, "combobox2"); ob5: GObject:= Get_Object(Object, "textbuffer2"); ob6: GObject:= Get_Object(Object, "textbuffer3"); ob7: GObject:= Get_Object(Object, "textbuffer4"); ob8: GObject:= Get_Object(Object, "combobox4"); ob9: GObject:= Get_Object(Object, "textbuffer5"); ob10: GObject:= Get_Object(Object, "combobox5"); ob11: GObject:= Get_Object(Object, "textbuffer6"); ob12: GObject:= Get_Object(Object, "textbuffer7"); ob13: GObject:= Get_Object(Object, "textbuffer8"); ob14: GObject:= Get_Object(Object, "textbuffer9"); ob15: GObject:= Get_Object(Object, "textbuffer10"); ob16: GObject:= Get_Object(Object, "textbuffer11"); ob17: GObject:= Get_Object(Object, "liststore4"); 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_integer, 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 => combo, combo_value => Gtk_Combo_Box(ob8)); wid9: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(ob9)); wid10: t_widget := (ptype => combo, combo_value => Gtk_Combo_Box(ob10)); wid11: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(ob11)); wid12: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(ob12)); wid13: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(ob13)); wid14: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(ob14)); wid15: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(ob15)); wid16: t_widget := (ptype => buffer_string, buffer_value => Gtk_Text_Buffer(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 => window, window_value => Tasks_Window); begin my_tab(1..task_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_Task; procedure Check_Task(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class; Error_Message: in out Unbounded_String; Ok: in out Boolean) is begin -- mettre ici check constraint ... Check_Task de task_set ... null; end Check_Task; procedure Add_In_Sys_Task(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class) is begin null; end Add_In_Sys_Task; procedure Add_In_Sys_Task(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class; tree_iter: Gtk_Tree_Iter) is myname, mycpuname, myadresspacename, mytasktype, mystarttime, mycapacity, myperiod, mydeadline, myjitter, myblockingtime, mypriority, mycriticality, mypolicy: GValue; mytasktype_task: Tasks_type; mypolicytype: Policies; oktasktype, okpolicy: boolean; begin Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 0, myname); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 2, mycpuname); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 3, myadresspacename); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 1, mytasktype); mytasktype_task:=get_compatible_task(mytasktype); --to_tasks_type --(Get_String(mytasktype), -- mytasktype_task, -- oktasktype); -- if not oktasktype then --Show_Message_Box --(Lb_Task_Type (Current_Language)); --return; -- end if; Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 6, mystarttime); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 4, mycapacity); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 14, myperiod); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 5, mydeadline); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 13, myjitter); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 8, myblockingtime); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 7, mypriority); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 12, mycriticality); Gtk.Tree_Model.Get_Value(Gtk_Tree_Model(Gtk.Tree_View.Get_Model(my_tab(Task_table_length-1).view_value)), tree_iter, 9, mypolicy); to_policies (Get_String(mypolicy), mypolicytype, okpolicy); if not okpolicy then Show_Message_Box (Lb_Policy_Control (Current_Language)); return; end if; Task_Set.Add_Task(sys.tasks, to_Unbounded_String(Get_String(myname)), to_Unbounded_String(Get_String(mycpuname)), to_Unbounded_String(Get_String(myadresspacename)), Tasks_type(mytasktype_task), Integer(Get_int(mystarttime)), Integer(Get_int(mycapacity)),Integer(Get_int(myperiod)), Integer(Get_int(mydeadline)), Integer(Get_int(myjitter)), Integer(Get_int(myblockingtime)), Integer'Value(Get_String(mypriority)), Integer(Get_int(mycriticality)), mypolicytype); --ajouter à mon interface les valeurs par defaut ... -- Offset : in Offsets_Table := No_Offset; -- Stack_Memory_Size : in Integer := 0; -- Text_Memory_Size : in Integer := 0; -- Param : in User_Defined_Parameters_Table := -- No_User_Defined_Parameter; -- Parametric_Rule_Name : in Unbounded_String := -- empty_string; -- Seed_Value : in Integer := 0; -- Predictable : in Boolean := True; -- context_switch_overhead : in Integer := 0) end Add_In_Sys_Task; function get_compatible_task(mytasktype: Gvalue) return Tasks_Type is mytasktype_task: Tasks_type; begin if to_Unbounded_String(Get_String(mytasktype)) = to_Unbounded_String("Periodic") then mytasktype_task := Periodic_Type; end if; return mytasktype_task; end get_compatible_task; package Task_callbacks is new generic_callbacks(Number_of_widget => Task_table_length, Initialize => initialize_Task, Check => Check_Task, Add_In_Sys => Add_In_Sys_Task); use Task_callbacks; procedure Show_Tasks_Widget is Builder : Gtkada_Builder; Error : Glib.Error.GError; My_Iterator : Tasks_Iterator; A_Task: Generic_Task_Ptr; tree_iter: Gtk_Tree_Iter; liststore: GObject; ok: boolean; A_Processor : Generic_Processor_Ptr; My_Processor_Iterator : Processors_Iterator; my_combo_cpu: GObject; An_Adress_Space : Address_Space_Ptr; My_Adress_Space_Iterator : Address_Spaces_Iterator; my_combo_adress_space: GObject; begin Gtk.Main.Init; Gtk_New (Builder); Error := Add_From_File (Builder, to_string(Glade_path) & "task.glade"); if Error /= null then Ada.Text_IO.Put_Line ("Error : " & Get_Message (Error)); Error_Free (Error); return; end if; my_combo_cpu := Get_Object(Builder, "combobox3"); 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_cpu), To_String(A_Processor.name)); exit when is_last_element (sys.Processors, My_Processor_Iterator); next_element (sys.Processors, My_Processor_Iterator); end loop; else Show_Message_Box (Lb_Define_processors_Before (Current_Language)); end if; my_combo_adress_space := Get_Object(Builder, "combobox2"); reset_iterator (sys.Address_Spaces, My_Adress_Space_Iterator); if not is_empty (sys.Address_Spaces) then loop current_element (sys.Address_Spaces, An_Adress_Space, My_Adress_Space_Iterator); Append_Text (Gtk_Combo_Box(my_combo_adress_space), To_String(An_Adress_Space.name)); exit when is_last_element (sys.Address_Spaces, My_Adress_Space_Iterator); next_element (sys.Address_Spaces, My_Adress_Space_Iterator); end loop; else Show_Message_Box (Lb_Define_Address_Spaces_Before (Current_Language)); end if; liststore:= Get_Object(Builder, "liststore4"); reset_iterator (sys.Tasks, My_Iterator); if not is_empty (sys.Tasks) then loop current_element (sys.Tasks, A_Task, My_Iterator); Append(Gtk_List_Store(liststore), tree_iter); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 0, To_String (A_Task.name)); --Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, Tasks_Type'image(A_Task.task_type)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 2, To_String (A_Task.cpu_name)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 3, To_String (A_Task.address_space_name)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 4, Gint(A_Task.capacity)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 5, Gint(A_Task.deadline)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 6, Gint(A_Task.start_time)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 7, Priority_Range'image(A_Task.priority)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 8, Gint(A_Task.blocking_time)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 9, Policies'image(A_Task.policy)); --il faut ajouter l'attribut des offsets ... --Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 10, Offsets_Table'image(A_Task.offsets)); --j'ai loupé d'autres attributs : parameters et context_switch_overhead -- à completer ... Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 10, Gint(A_Task.text_memory_size)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 11, Gint(A_Task.stack_memory_size)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 12, Gint(A_Task.criticality)); case A_Task.task_type is when Aperiodic_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 13, Gint(0)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 14, Gint(0)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 15, ""); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, "Aperiodic"); when Periodic_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 13, Gint (Periodic_Task_Ptr (A_Task).jitter)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 14, Gint (Periodic_Task_Ptr (A_Task).period)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 15, ""); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, "Periodic"); when Poisson_Type | Scheduling_Task_type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 13, Gint (Poisson_Task_Ptr (A_Task).jitter)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 14, Gint (Poisson_Task_Ptr (A_Task).period)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 15, ""); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, "Poisson"); when Sporadic_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 13, Gint (Sporadic_Task_Ptr (A_Task).jitter)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 14, Gint (Sporadic_Task_Ptr (A_Task).period)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 15, ""); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, "Sporadic"); when Parametric_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 13, Gint (Poisson_Task_Ptr (A_Task).jitter)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 14, Gint (Poisson_Task_Ptr (A_Task).period)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 15, To_String(Parametric_Task_Ptr (A_Task).activation_rule)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, "User-defined"); when frame_task_type => --cas a revoir après discussion avec frank et shuai ... Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 13, Gint (Poisson_Task_Ptr (A_Task).jitter)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 14, Gint (Poisson_Task_Ptr (A_Task).period)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 15, To_String(Parametric_Task_Ptr (A_Task).activation_rule)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, "User-defined"); end case; exit when is_last_element (sys.Tasks, My_Iterator); next_element (sys.Tasks, My_Iterator); end loop; end if; Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_treeview1_cursor_changed", Handler => Task_callbacks.Show_Lign_Selected'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button6_clicked", Handler => Task_callbacks.Add_View'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button5_clicked", Handler => Task_callbacks.Modify_Lign'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button4_clicked", Handler => Task_callbacks.Delected_Lign_Selected'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button3_clicked", Handler => Task_callbacks.Show_View'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button2_clicked", Handler => Task_callbacks.Cancel_View'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button1_clicked", Handler => Task_callbacks.Close_View'Access); Do_Connect (Builder); Gtk.Widget.Show_All (Get_Widget (Builder, "window1")); Gtk.Main.Main; Unref (Builder); end Show_Tasks_Widget; end graphical_editor.tasks;