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 Ada.Text_IO; with Gtkada.Builder; use Gtkada.Builder; with Glib.Values; use Glib.Values; with Glib; use Glib; with Glib.Object; use Glib.Object; with Messages; use Messages; with Message_Set; use Message_Set; use Message_Set.Generic_Message_Set; with Gtk.List_Store; use Gtk.List_Store; with Gtk.Tree_Model; use Gtk.Tree_Model; with Gtk.Combo_Box; use Gtk.Combo_Box; with Gtk.Tree_View; use Gtk.Tree_View; with Parameters; use Parameters; use parameters.User_Defined_Parameters_Table_Package; with parameters.extended; use parameters.extended; with GNAT.Current_Exception; use GNAT.Current_Exception; with Framework_Config; use Framework_Config; with Translate; use Translate; with graphical_editor.user_message; use graphical_editor.user_message; package body graphical_editor.messages is procedure Initialize_Message(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, "textbuffer2"); ob4: GObject:= Get_Object(Object, "textbuffer3"); ob5: GObject:= Get_Object(Object, "textbuffer4"); ob6: GObject:= Get_Object(Object, "textbuffer5"); ob7: GObject:= Get_Object(Object, "textbuffer6"); ob8: GObject:= Get_Object(Object, "textbuffer7"); ob9: GObject:= Get_Object(Object, "liststore4"); ob10: GObject:= Get_Object(Object, "treeview2"); ob11: GObject:= Get_Object(Object, "liststore2"); ob12: 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 => buffer_integer, buffer_value => Gtk_Text_Buffer(ob3)); wid4: t_widget := (ptype => buffer_integer, buffer_value => Gtk_Text_Buffer(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 => buffer_integer, buffer_value => Gtk_Text_Buffer(ob8)); wid9: t_widget := (ptype => lists, list_value => Gtk_List_Store(ob9)); wid10: t_widget := (ptype => view, view_value => Gtk_Tree_View(ob10)); wid11: t_widget := (ptype => lists, list_value => Gtk_List_Store(ob11)); wid12: t_widget := (ptype => view, view_value => Gtk_Tree_View(ob12)); wid13: t_widget := (ptype => window, window_value => Message_Window); begin my_tab(1..message_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)); end initialize_Message; procedure Check_message(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class; Error_Message: in out Unbounded_String; Ok: in out Boolean) is Param : User_Defined_Parameters_Table := No_User_Defined_Parameter; Name, Size_String, Period_String, Deadline_String, Jitter_String, Response_Time_String, Communication_Time_String : Unbounded_String; Size, Period, Deadline, Jitter, Response_Time, Communication_Time : Natural; begin name := get_value_buffer_string(Gtk_Text_Buffer(my_tab(1).buffer_value)); Size_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(4).buffer_value)); if Size_String = "" then Size := 0; else to_natural (Size_String, Size, Ok); if not Ok then Error_Message := Lb_Size (Current_Language) & Lb_Must_Be_Numeric (Current_Language); return; end if; end if; Period_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(7).buffer_value)); if Period_String = "" then Period := 0; else to_natural (Period_String, Period, Ok); if not Ok then Error_Message := Lb_Period (Current_Language) & Lb_Must_Be_Numeric (Current_Language); return; end if; end if; Deadline_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(3).buffer_value)); if Deadline_String = "" then Deadline := 0; else to_natural (Deadline_String, Deadline, Ok); if not Ok then Error_Message := Lb_Deadline (Current_Language) & Lb_Must_Be_Numeric (Current_Language); return; end if; end if; Jitter_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(8).buffer_value)); if Jitter_String = "" then Jitter := 0; else to_natural (Jitter_String, Jitter, Ok); if not Ok then Error_Message := Lb_Jitter (Current_Language) & Lb_Must_Be_Numeric (Current_Language); return; end if; end if; Response_Time_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(5).buffer_value)); if Response_Time_String = "" then Response_Time := 0; else to_natural (Response_Time_String, Response_Time, Ok); if not Ok then Error_Message := Lb_Response_Time (Current_Language) & Lb_Must_Be_Numeric (Current_Language); return; end if; end if; Communication_Time_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(6).buffer_value)); if Communication_Time_String = "" then Communication_Time := 0; else to_natural (Communication_Time_String, Communication_Time, Ok); if not Ok then Error_Message := Lb_Communication_Time_Message (Current_Language) & Lb_Must_Be_Numeric (Current_Language); return; end if; end if; Check_Message (sys.messages, Name, Size, Period, Deadline, Jitter, param, Response_Time, Communication_Time); -- cas à gérer --Param : in User_Defined_Parameters_Table := No_User_Defined_Parameter; exception when Message_Set.Invalid_Parameter => begin Ok := False; Error_Message := To_Unbounded_String (Exception_Message); return; end; when others => begin Ok := False; Error_Message := To_Unbounded_String (Exception_Message); end; end Check_message; procedure Add_In_Sys_message(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class) is Param : User_Defined_Parameters_Table := No_User_Defined_Parameter; Name, Size_String, Period_String, Deadline_String, Jitter_String, Response_Time_String, Communication_Time_String : Unbounded_String; Size, Period, Deadline, Jitter, Response_Time, Communication_Time : Natural; Integer_Ok : Boolean; begin name := get_value_buffer_string(Gtk_Text_Buffer(my_tab(1).buffer_value)); Size_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(4).buffer_value)); if Size_String = "" then Size := 0; else to_natural (Size_String,Size, Integer_Ok); end if; Period_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(7).buffer_value)); if Period_String = "" then Period := 0; else to_natural (Period_String, Period, Integer_Ok); end if; Deadline_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(3).buffer_value)); if Deadline_String = "" then Deadline := 0; else to_natural (Deadline_String, Deadline, Integer_Ok); end if; Jitter_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(8).buffer_value)); if Jitter_String = "" then Jitter := 0; else to_natural (Jitter_String, Jitter, Integer_Ok); end if; Response_Time_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(5).buffer_value)); if Response_Time_String = "" then Response_Time := 0; else to_natural (Response_Time_String,Response_Time, Integer_Ok); end if; Communication_Time_String := get_value_buffer_string(Gtk_Text_Buffer(my_tab(6).buffer_value)); if Communication_Time_String = "" then Communication_Time := 0; else to_natural (Communication_Time_String,Communication_Time, Integer_Ok); end if; if (Deadline < 0) then Show_Message_Box (Lb_Deadline (Current_Language) & Lb_Must_Be (Current_Language) & ">0"); return; end if; if (Period /= 0 and Jitter > Deadline) then Show_Message_Box (Lb_Deadline (Current_Language) & Lb_Must_Be (Current_Language) & Lb_Superior (Current_Language) & Lb_Jitter (Current_Language)); return; end if; if (Period /= 0 and Jitter = 0) then Show_Message_Box (Lb_Jitter (Current_Language) & Lb_Mandatory (Current_Language)); return; end if; Add_Message (sys.Messages, Name, Size, Period, Deadline, Jitter, Param, Response_Time, Communication_Time); -- cas à gérer --Param : in User_Defined_Parameters_Table := No_User_Defined_Parameter; exception when message_Set.Invalid_Parameter => begin Show_Message_Box (Exception_Message); return; end; when Message_Set.Generic_Message_Set.full_set => begin Show_Message_Box (Lb_Can_Not_Define_More_Messages (Current_Language)); return; end; when others => begin Show_Message_Box (Exception_Name & Exception_Message); return; end; end Add_In_Sys_message; procedure Deleted_In_Sys_message(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class) is a_message:Generic_Message_Ptr; name: unbounded_string; begin name := get_value_buffer_string(Gtk_Text_Buffer(my_tab(1).buffer_value)); a_message := Search_message (Sys.messages, name); Delete_message (Sys, a_message); end Deleted_In_Sys_message; procedure Show_In_Sys_message(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class) is name : unbounded_string; A_Message : Generic_Message_Ptr; tree_iter: Gtk_Tree_Iter; liststore: GObject; begin name := get_value_buffer_string(Gtk_Text_Buffer(my_tab(1).buffer_value)); A_Message := Search_Message (Sys.Messages, name); liststore:= Get_Object(Object, "liststore4"); Gtk.List_Store.Clear(Gtk_List_Store(liststore)); for i in 0..A_Message.parameters.Nb_Entries -1 loop Append(Gtk_List_Store(liststore), tree_iter); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 0, To_String (A_Message.parameters.Entries(i).parameter_name)); --Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, A_Message.parameters.Entries(i).type_of_parameter); --Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 2, A_Message.parameters.Entries(i).union); end loop; end Show_In_Sys_message; procedure Modify_In_Sys_message(my_tab: in out table_widget_id ; Object : access Gtkada_Builder_Record'Class; name: unbounded_string) is a_message, a_message_buffer :Generic_Message_Ptr; Param : User_Defined_Parameters_Table := No_User_Defined_Parameter; period, jitter : integer; begin a_message := Search_message (Sys.messages, name); a_message_buffer := a_message; A_Message_Buffer.cheddar_private_id := A_message.cheddar_private_id; A_Message_Buffer.name := get_value_buffer_string(Gtk_Text_Buffer(my_tab(1).buffer_value)); A_Message_Buffer.size := get_value_buffer_integer(Gtk_Text_Buffer(my_tab(4).buffer_value)); A_Message_Buffer.deadline := get_value_buffer_integer(Gtk_Text_Buffer(my_tab(3).buffer_value)); A_Message_Buffer.response_time := get_value_buffer_integer(Gtk_Text_Buffer(my_tab(5).buffer_value)); A_Message_Buffer.communication_time := get_value_buffer_integer(Gtk_Text_Buffer(my_tab(6).buffer_value)); period := get_value_buffer_integer(Gtk_Text_Buffer(my_tab(7).buffer_value)); jitter := get_value_buffer_integer(Gtk_Text_Buffer(my_tab(8).buffer_value)); Check_Message (sys.messages, A_Message_Buffer.name, A_Message_Buffer.size, period, A_Message_Buffer.deadline, jitter, param, A_Message_Buffer.response_time, A_Message_Buffer.communication_time); -- cas à gérer --Param : in User_Defined_Parameters_Table := No_User_Defined_Parameter; Delete_message (Sys, a_message); Add_Message (sys.Messages, A_Message_Buffer.name, A_Message_Buffer.size, period, A_Message_Buffer.deadline, jitter, Param, A_Message_Buffer.response_time, A_Message_Buffer.communication_time); -- cas à gérer --Param : in User_Defined_Parameters_Table := No_User_Defined_Parameter; exception when message_Set.Invalid_Parameter => begin Show_Message_Box (Exception_Message); return; end; when Message_Set.Generic_Message_Set.full_set => begin Show_Message_Box (Lb_Can_Not_Define_More_Messages (Current_Language)); return; end; when others => begin Show_Message_Box (Exception_Name & Exception_Message); return; end; end Modify_In_Sys_message; function get_compatible_message(mymessage: Gvalue) return messages_Type is begin return get_compatible_message(Get_String(mymessage)); end get_compatible_message; function get_compatible_message(mymessage: String) return messages_Type is mymessage_mes : messages_Type; begin if to_Unbounded_String(mymessage) = to_Unbounded_String("Periodic") then mymessage_mes := Periodic_Type; end if; if to_Unbounded_String(mymessage) = to_Unbounded_String("Aperiodic") then mymessage_mes := Aperiodic_Type; end if; if to_Unbounded_String(mymessage) = to_Unbounded_String("Generic") then mymessage_mes := Generic_Type; end if; return mymessage_mes; end get_compatible_message; function get_compatible_message(mymessage: messages_Type) return unbounded_string is message_string: Unbounded_String; begin if mymessage = Periodic_Type then message_string:= to_Unbounded_String("Periodic"); end if; if mymessage = Aperiodic_Type then message_string:= to_Unbounded_String("Aperiodic"); end if; if mymessage = Generic_Type then message_string:= to_Unbounded_String("Generic"); end if; return message_string; end get_compatible_message; package Message_callbacks is new generic_callbacks(Number_of_widget => Message_table_length, Initialize => initialize_Message, Check => Check_Message, Add_In_Sys => Add_In_Sys_Message, Deleted_In_Sys => Deleted_In_Sys_Message, Modify_In_Sys => Modify_In_Sys_Message, Show_In_Sys => Show_In_Sys_Message); use Message_callbacks; procedure Show_Message_Widget is Builder : Gtkada_Builder; Error : Glib.Error.GError; tree_iter: Gtk_Tree_Iter; liststore: GObject; A_Message : Generic_Message_Ptr; My_Iterator : Messages_Iterator; begin Gtk.Main.Init; Gtk_New (Builder); Error := Add_From_File (Builder, to_string(Glade_path) & "message.glade"); if Error /= null then Ada.Text_IO.Put_Line ("Error : " & Get_Message (Error)); Error_Free (Error); return; end if; Sys_buffer := sys; liststore:= Get_Object(Builder, "liststore2"); reset_iterator (sys.Messages, My_Iterator); if not is_empty (sys.Messages) then loop current_element (sys.Messages, A_Message, My_Iterator); Append(Gtk_List_Store(liststore), tree_iter); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 0, To_String (A_Message.name)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 1, To_String(get_compatible_message(A_Message.Message_Type))); case A_Message.message_type is when Aperiodic_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 7, Gint(0)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 6, Gint(0)); when Periodic_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 7, Gint(Periodic_Message_Ptr (A_Message).jitter)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 6, Gint(Periodic_Message_Ptr (A_Message).period)); when Generic_Type => Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 7, Gint(0)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 6, Gint(0)); end case; Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 2, Gint(A_Message.deadline)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 3, Gint(A_Message.size)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 4, Gint(A_Message.response_time)); Gtk.List_Store.Set(Gtk_List_Store(liststore), tree_iter, 5, Gint(A_Message.communication_time)); exit when is_last_element (sys.Messages, My_Iterator); next_element (sys.Messages, My_Iterator); end loop; end if; Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_treeview1_cursor_changed", Handler => Message_callbacks.Show_Lign_Selected'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button6_clicked", Handler => Message_callbacks.Add_View'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button5_clicked", Handler => Message_callbacks.Modify_Lign'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button4_clicked", Handler => Message_callbacks.Delected_Lign_Selected'Access); --Gtkada.Builder.Register_Handler --(Builder => Builder, --Handler_Name => "on_button3_clicked", --Handler => Message_callbacks.Show_View'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button2_clicked", Handler => Message_callbacks.Cancel_View'Access); Gtkada.Builder.Register_Handler (Builder => Builder, Handler_Name => "on_button1_clicked", Handler => Message_callbacks.Close_View'Access); Do_Connect (Builder); Gtk.Widget.Show_All (Get_Widget (Builder, "window1")); Gtk.Main.Main; Unref (Builder); end Show_Message_Widget; end graphical_editor.messages;