with Glib;                              use Glib;
with Glib.Object;                       use Glib.Object;
with Glib.Values;                       use Glib.Values;
with Gtk.Handlers;                      use Gtk.Handlers;
pragma Elaborate_All (Gtk.Handlers);
with Gtk.Widget;                        use Gtk.Widget;
with Gtk.Enums;                         use Gtk.Enums;
with Gtk.Frame;                         use Gtk.Frame;
with Gtk.Tree_Model;                    use Gtk.Tree_Model;
with Gtk.Scrolled_Window;               use Gtk.Scrolled_Window;
with Gtk.Tree_View_Column;              use Gtk.Tree_View_Column;
with Gtk.Cell_Renderer_Text;            use Gtk.Cell_Renderer_Text;
with Gtk.Cell_Renderer_Toggle;          use Gtk.Cell_Renderer_Toggle;
with Gtk.Tree_Selection;                use Gtk.Tree_Selection;

with Gmface.Gm_Virtual.Gmface.Ctrl_change;         use Gmface.Gm_Virtual.Gmface.Ctrl_Change;
with Gmface.Gm_MIDI.Messages;             use Gmface.Gm_MIDI.Messages;

with Text_Io;                           use Text_Io;



package body Gmface.Gm_Application.Gtk_Ctrl_Change is
   
   --------------------
   -- step sequencer --
   --------------------
   
   
   package Plugin_Object_CB is new Gtk.Handlers.User_Callback 
     (Gobject_Record,
      Abstract_Plugin_Access);   
   
   
   procedure Muted_Edited (Model  : access GObject_Record'Class;
			   Params : Glib.Values.GValues;
			   Plugin : Abstract_Plugin_Access) is
      
      
      
      
      
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Iter        : constant Gtk_Tree_Iter := Get_Iter_From_String (M, Path_String);
      
      Old_Value   : Boolean := False;
      
      Id : Natural := 0;
      
   begin
      Old_Value := Get_Boolean (M, Iter, Muttable_Column);
      
      Id := Integer'Value
	(
	 (Get_String (M, Get_Iter_From_String 
			(M, Get_String (Nth (Params, 1))), Text_Column)));
      
      Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).played := Old_Value;
      Set (M, Iter, Muttable_Column, not Old_Value);
   end Muted_Edited;
   
   
   
   
   
   procedure Loop_Edited (Model  : access GObject_Record'Class;
			  Params : Glib.Values.GValues;
			   Plugin : Abstract_Plugin_Access) is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Iter        : constant Gtk_Tree_Iter := Get_Iter_From_String (M, Path_String);
      
      Old_Value   : Boolean;
      
      Id : Natural := 0;
      
   begin
      Old_Value := Get_Boolean (M, Iter, Loop_Column-3);
      
      Id := Integer'Value
	(
	 (Get_String (M, Get_Iter_From_String 
			(M, Get_String (Nth (Params, 1))), Text_Column)));
      
      
      Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).In_Loop := not Old_Value;
      Set (M, Iter, Loop_Column-3, not Old_Value);
   end Loop_Edited;
   

   
   procedure Name_Edited (Model  : access GObject_Record'Class;
   			 Params : Glib.Values.GValues;
   			 Plugin : Abstract_Plugin_Access) is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Text_Value  : constant Gvalue := Nth (Params, 2);
      Iter        : constant Gtk_Tree_Iter :=
   	Get_Iter_From_String (M, Path_String);
      
      
      
      Id : Natural := 0;
      
   begin
      
      
      Id := Integer'Value
   	(
   	 (Get_String (M, Get_Iter_From_String 
   			(M, Get_String (Nth (Params, 1))), Text_Column)));
      
      begin   	 
   	 Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Ctrl_name := new String ' (Get_String(Text_Value));
      
   	 Set (M, Iter, Cname_Column, (Get_String(Text_Value)));
      exception
   	 when Constraint_Error =>
   	    null;
      end;
      
   end name_Edited;
   
   procedure CC_Edited (Model  : access GObject_Record'Class;
   			  Params : Glib.Values.GValues;
   			  Plugin : Abstract_Plugin_Access)  is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Text_Value  : constant GValue := Nth (Params, 2);
      Iter        : constant Gtk_Tree_Iter :=
   	Get_Iter_From_String (M, Path_String);
      
      
      
      Id : Natural := 0;
      Value : Integer := 0;
   begin
      
      Id := Integer'Value
   	(
   	 (Get_String (M, Get_Iter_From_String 
   			(M, Get_String (Nth (Params, 1))), Text_Column)));
      begin
   	 Value := Integer'Value(Get_String(Text_Value));
	 if C.Long(Value) in Value_Type then
	    Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Ctrl_Num := value_Type(Value);
	 end if;
	 
   	 Set (M, Iter, CC_Column, Integer'Image(Value));
      exception
   	 when Constraint_Error =>
   	    null;
      end;
      
   end CC_Edited;
   
   procedure CV_Edited (Model  : access GObject_Record'Class;
   			    Params : Glib.Values.GValues;
   			    Plugin : Abstract_Plugin_Access)  is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Text_Value  : constant GValue := Nth (Params, 2);
      Iter        : constant Gtk_Tree_Iter :=
   	Get_Iter_From_String (M, Path_String);
      
      
      
      Id : Natural := 0;
      Value : Integer := 0;
   begin
      
      Id := Integer'Value
   	(
   	 (Get_String (M, Get_Iter_From_String 
   			(M, Get_String (Nth (Params, 1))), Text_Column)));
      begin
   	 Value := Integer'Value(Get_String(Text_Value));
	 
	 if C.Long(Value) in Value_Type then
	    Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Ctrl_val := value_Type(Value);
	 end if;
	 
   	 Set (M, Iter, CV_Column, Integer'Image(Value));
      exception
   	 when Constraint_Error =>
   	    null;
      end;
      
   end CV_Edited;
   
   procedure Bar_Edited (Model  : access GObject_Record'Class;
			 Params : Glib.Values.GValues;
			 Plugin : Abstract_Plugin_Access)  is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Text_Value  : constant GValue := Nth (Params, 2);
      Iter        : constant Gtk_Tree_Iter :=
	Get_Iter_From_String (M, Path_String);
      
      
      
      Id : Natural := 0;
      Value : Integer := 0;
   begin
      
      
      Id := Integer'Value
	(
	 (Get_String (M, Get_Iter_From_String 
			(M, Get_String (Nth (Params, 1))), Text_Column)));      
      begin
	 Value := Integer'Value(Get_String(Text_Value));
	 
	 Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Bar := Value;
      
	 Set (M, Iter, Bar_Column, Integer'Image(Value));
      exception
	 when Constraint_Error =>
	    null;
      end;
      
   end Bar_Edited;
   
   procedure Number_Edited (Model  : access GObject_Record'Class;
			    Params : Glib.Values.GValues;
			 Plugin : Abstract_Plugin_Access)  is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Text_Value  : constant GValue := Nth (Params, 2);
      Iter        : constant Gtk_Tree_Iter :=
	Get_Iter_From_String (M, Path_String);
      
      
      
      Id : Natural := 0;
      Value : Integer := 0;
   begin
      
      Id := Integer'Value
	(
	 (Get_String (M, Get_Iter_From_String 
			(M, Get_String (Nth (Params, 1))), Text_Column)));      
      begin
	 Value := Integer'Value(Get_String(Text_Value));
	 
	 Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Number := Value;
	 
	 Set (M, Iter, Number_Column-3, Integer'Image(Value));
      exception
	 when Constraint_Error =>
	    null;
      end;
      
   end Number_Edited;

   	    
         
   procedure Step_Edited (Model  : access GObject_Record'Class;
			  Params : Glib.Values.GValues;
			 Plugin : Abstract_Plugin_Access)  is
      M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
      Path_String : constant String := Get_String (Nth (Params, 1));
      Text_Value  : constant GValue := Nth (Params, 2);
      Iter        : constant Gtk_Tree_Iter :=
	Get_Iter_From_String (M, Path_String);
      
      
      
      Id : Natural := 0;
      Value : Integer := 0;
   begin
      
      
      Id := Integer'Value
	(
	 (Get_String (M, Get_Iter_From_String 
			(M, Get_String (Nth (Params, 1))), Text_Column)));      
      begin
	 Value := Integer'Value(Get_String(Text_Value));
	 
	 Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Step := Value;
	 
	 Set (M, Iter, Step_Column-3, Integer'Image(Value));
      exception
	 when Constraint_Error =>
	    null;
      end;
      
   end Step_Edited;
   
   --  procedure Note_Edited (Model  : access GObject_Record'Class;
   --  			  Params : Glib.Values.GValues;
   --  			 Plugin : Abstract_Plugin_Access)  is
   --     M           : constant Gtk_Tree_Store := Gtk_Tree_Store (Model);
   --     Path_String : constant String := Get_String (Nth (Params, 1));
   --     Text_Value  : constant GValue := Nth (Params, 2);
   --     Iter        : constant Gtk_Tree_Iter :=
   --  	Get_Iter_From_String (M, Path_String);
      
      
      
   --     Id : Natural := 0;
      
   --  begin
      
      
   --     Id := Integer'Value
   --  	(
   --  	 (Get_String (M, Get_Iter_From_String 
   --  			(M, Get_String (Nth (Params, 1))), Text_Column)));      
      
   --     Free(Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Note);
   --     Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Id).Note := new String ' (Get_String (Text_Value));
      
   --     Set_value (M, Iter, Type_Column+2, Text_value);
   --  end Note_Edited;

   ------------------
   -- Add_Key_Line --
   ------------------
   function Add_Key_Line
     (Model     : access Gtk_Tree_Store_Record'Class;
      Id        : Integer;
      Cname     : String;
      CC        : Integer := 64;
      CV        : Integer := 8;
      Bar       : Integer := 1;
      Number    : Integer := 1;
      Step      : Integer := 1;      
      Played    : Boolean := True;      
      Muttable  : Boolean := False;            
      In_Loop   : Boolean := False;
      Parent    : Gtk_Tree_Iter := Null_Iter) return Gtk_Tree_Iter
      is
     Iter : Gtk_Tree_Iter;
   begin
      --Put_Line("Add key 1.0");
      Append (Model, Iter, Parent);
      --Put_Line("Add key 1.1");
      Set (Model, Iter, Text_Column, Integer'Image(Id));
      
      Set (Model, Iter, Cname_Column, Cname);
      Set (Model, Iter, CC_Column, Integer'Image(CC));

      Set (Model, Iter, CV_Column, Integer'Image(CV));                 
      
      Set (Model, Iter, Bar_Column, Integer'Image(Bar));
      
      Set (Model, Iter, Number_Column-3, Integer'Image(Number));
      
      Set (Model, Iter, Step_Column-3, Integer'Image(Step));
      
      --Set (Model, Iter, Type_Column+2, Note);      

      Set (Model, Iter, Muttable_Column, Muttable);
      
      Set (Model, Iter, Loop_Column-3, In_Loop);
      
      Set (Model, Iter, Editable_Column+8, True);
      
      return Iter;
   end Add_Key_Line;
   
   
   
   procedure Bars_Max_Callback
     (Widget  : access Gtk_Widget_Record'Class;      
      Plugin : Abstract_Plugin_Access) is
   begin      
      Ctrl_Change_Plugin_Record(Plugin.all).Bars_Max := Integer(Gtk.Spin_Button.Get_Value(Gtk_Spin_Button(Widget)));
   exception
      when others =>
	 null;
   end Bars_Max_Callback;

   package Plugin_Cb is new Gtk.Handlers.User_Callback 
     (Gtk.Widget.Gtk_Widget_Record, 
      Abstract_Plugin_Access);
   
   
   procedure Initialize (Spec : in out Ctrl_Change_Specifications;
     			 Plugin : in Abstract_Plugin_Access) is
      
      Scrolled   : Gtk_Scrolled_Window;            
      
      -- Comon Tree      
      Col      : Gtk_Tree_View_Column;
      Num      : Gint;
      Text_Render   : Gtk_Cell_Renderer_Text;
      Toggle_Render : Gtk_Cell_Renderer_Toggle;
      
      Parent, Iter  : Gtk_Tree_Iter;
      pragma Unreferenced (Num);
      pragma Warnings (Off, Iter);
      
      
      Vbox : Gtk_Vbox;
      
   begin
      
      Gtk_New (Spec.Sequencer_Model,
	       (Text_column         => GType_String,
		Cname_Column         => GType_String,
                CC_Column         => GType_String,
		CV_Column       => GType_String,   
		Bar_Column          => GType_String,
		Number_Column-3     => GType_String,
		Step_Column-3       => GType_String,		
		Muttable_Column   => GType_Boolean,		
		Loop_Column-3       => GType_Boolean,
		Editable_Column+8   => GType_Boolean)
	      );
      
      --Put_Line("Load seq 0.1");
      
      Gtk_New (Spec.Sequencer_Tree, Spec.Sequencer_Model);
      --Put_Line("Load seq 0.1.1");
      Set_Grid_Lines (Spec.Sequencer_Tree, Grid_Lines_Vertical);
      --Put_Line("Load seq 0.1.2");
      Set_Enable_Tree_Lines (Spec.Sequencer_Tree, True);
      --Put_Line("Load seq 0.1.3");
      Set_Rubber_Banding (Spec.Sequencer_Tree, True);
      --Put_Line("Load seq 0.1.4");
      Set_Mode (Get_Selection (Spec.Sequencer_Tree), Selection_Multiple);
      --Put_Line("Load seq 0.1.5");
      Gtk_New (Scrolled);
      --Put_Line("Load seq 0.1.6");
      Set_Policy (Scrolled, Policy_Always, Policy_Always);
      --Put_Line("Load seq 0.1.7");
      Add (Scrolled, Spec.Sequencer_Tree);            
      --Put_Line("Load seq 0.1.8");
      
      
      Gtk_New(Spec.Specifications_Frame, "Ctrl change sequencer : ");      
      --Put_Line("Load seq 0.1.8.1");
      Gtk_New(Spec.Bars_Max, 1.0, 257.0, 1.0);
      if Plugin /= null then
	 Set_Value(Spec.Bars_Max, Gdouble(Ctrl_Change_Plugin_Record(Plugin.all).Bars_Max));
      end if;
      --Put_Line("Load seq 0.1.8.2");
      
      Plugin_Cb.Connect
        (Spec.Bars_Max, "value_changed", Plugin_Cb.To_Marshaller(Bars_Max_Callback'Access),
	 User_Data => Plugin);
      
      --Put_Line("Load seq 0.1.8.3");
      Gtk_New_Vbox(Vbox, Homogeneous => false);
      Gtk_New_Hbox(Spec.Hbox, Homogeneous => False);
      Gtk_New(Spec.Label, "Bars max : ");
      Pack_Start(Spec.Hbox, Spec.Label, False, False, 2);
      Pack_Start(Spec.Hbox, Spec.Bars_Max, False, False, 2);
      Pack_Start(Vbox, Spec.hbox, False, False, 2);
      Pack_End(Vbox, scrolled);
      Add (Spec.Specifications_Frame, Vbox);      
      --Put_Line("Load seq 0.2");
      
      Gtk_New (Text_Render);
      Gtk_New (Col);
      Num := Append_Column (Spec.Sequencer_Tree, Col);      
      Set_Sort_Column_Id (Col, cname_Column);
      Set_Title (Col, "Id");
      Pack_Start (Col, Text_Render, True);
      Set_Sizing (Col, Tree_View_Column_Autosize);
      Add_Attribute (Col, Text_Render, "text", Text_Column);      
      --Put_Line("Load seq 0.3");
      
      Gtk_New (Text_Render);
      Gtk_New (Col);
      Num := Append_Column (Spec.Sequencer_Tree, Col);
      Set_Sort_Column_Id (Col, cname_Column);
      Set_Title (Col, "Ctrl name");
      Pack_Start (Col, Text_Render, True);
      Set_Sizing (Col, Tree_View_Column_Autosize);
      Add_Attribute (Col, Text_Render, "text", Cname_Column);          
      Add_Attribute (Col, Text_Render, "editable", Editable_Column+8);
      Plugin_Object_CB.Object_Connect
        (Text_Render, "edited", name_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      --Put_Line("Load seq 0.4");
      
      Gtk_New (Text_Render);
      Gtk_New (Col);
      Num := Append_Column (Spec.Sequencer_Tree, Col);      
      Set_Title (Col, "CC");
      Pack_Start (Col, Text_Render, True);
      Set_Sizing (Col, Tree_View_Column_Autosize);
      Add_Attribute (Col, Text_Render, "text", CC_Column);
      Add_Attribute (Col, Text_Render, "editable", Editable_Column+8);
      Plugin_Object_CB.Object_Connect
        (Text_Render, "edited", CC_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      --Put_Line("Load seq 0.5");
      
      Gtk_New (Text_Render);
      Gtk_New (Col);
      Num := Append_Column (Spec.Sequencer_Tree, Col);      
      Set_Title (Col, "CV");
      Pack_Start (Col, Text_Render, True);
      Set_Sizing (Col, Tree_View_Column_Autosize);
      Add_Attribute (Col, Text_Render, "text", CV_Column);
      Add_Attribute (Col, Text_Render, "editable", Editable_Column+8);
      Plugin_Object_CB.Object_Connect
        (Text_Render, "edited", CV_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      
      
      --Put_Line("Load seq 0.6");
      Gtk_New (Text_Render);
      Gtk_New (Col);
      Set_Sort_Column_Id (Col, -1);  --  unsortable
      Num := Append_Column (Spec.Sequencer_Tree, Col);
      Set_Title (Col, "Bar");
      Pack_Start (Col, Text_Render, False);
      Add_Attribute (Col, Text_Render, "text", Bar_Column);      
      Add_Attribute (Col, Text_Render, "editable", Editable_Column+8);
      Plugin_Object_CB.Object_Connect
        (Text_Render, "edited", Bar_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      
      --Put_Line("Load seq 0.7");
      
      Gtk_New (Text_Render);
      Gtk_New (Col);
      Set_Sort_Column_Id (Col, -1);  --  unsortable
      Num := Append_Column (Spec.Sequencer_Tree, Col);
      Set_Title (Col, "Number");
      Pack_Start (Col, Text_Render, False);
      Add_Attribute (Col, Text_Render, "text", Number_Column-3);
      Add_Attribute (Col, Text_Render, "editable", Editable_Column+8);
      Plugin_Object_CB.Object_Connect
        (Text_Render, "edited", Number_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      
      --Put_Line("Load seq 0.8");
      
      Gtk_New (Text_Render);
      --Put_Line("Load seq 0.8.1");
      Gtk_New (Col);
      --Put_Line("Load seq 0.8.2");
      Set_Sort_Column_Id (Col, -1);  --  unsortable
      --Put_Line("Load seq 0.8.3");
      Num := Append_Column (Spec.Sequencer_Tree, Col);
      --Put_Line("Load seq 0.8.4");
      Set_Title (Col, "Step");
      Pack_Start (Col, Text_Render, False);
      --Put_Line("Load seq 0.8.5");
      Add_Attribute (Col, Text_Render, "text", Step_Column-3);
      --Put_Line("Load seq 0.8.6");
      Add_Attribute (Col, Text_Render, "editable", Editable_Column+8);
      --Put_Line("Load seq 0.8.7");
      Plugin_Object_CB.Object_Connect
        (Text_Render, "edited", Step_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      
      --  --Put_Line("Load seq 0.9");
      --  Gtk_New (Text_Render);
      --  Gtk_New (Col);
      --  Set_Sort_Column_Id (Col, -1);  --  unsortable
      --  Num := Append_Column (Spec.Sequencer_Tree, Col);
      --  Set_Title (Col, "Note");
      --  Pack_Start (Col, Text_Render, False);
      --  Add_Attribute (Col, Text_Render, "text", Editable_Column+9);
      --  Add_Attribute (Col, Text_Render, "editable", Editable_Column+9);
      --  Plugin_Object_CB.Object_Connect
      --    (Text_Render, "edited", Note_Edited'Access,
      --  	 Slot_Object => Spec.Sequencer_Model,
      --  	 User_Data => Plugin);
      --Put_Line("Load seq 0.10");
      
      Gtk_New (Toggle_Render);
      Gtk_New (Col);
      Set_Sort_Column_Id (Col, -1);  --  unsortable
      Num := Append_Column (Spec.Sequencer_Tree, Col);
      Set_Title (Col, "Mute");
      Pack_Start (Col, Toggle_Render, False);      
      Add_Attribute (Col, Toggle_Render, "active", Muttable_Column);      
      Plugin_Object_CB.Object_Connect
        (Toggle_Render, "toggled", Muted_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      
      --Put_Line("Load seq 0.11");
      
      Gtk_New (Toggle_Render);
      Gtk_New (Col);
      Set_Sort_Column_Id (Col, -1);  --  unsortable
      Num := Append_Column (Spec.Sequencer_Tree, Col);
      Set_Title (Col, "In loop");
      Pack_Start (Col, Toggle_Render, False);      
      Add_Attribute (Col, Toggle_Render, "active", Loop_Column-3);      
      Plugin_Object_CB.Object_Connect
        (Toggle_Render, "toggled", loop_Edited'Access,
	 Slot_Object => Spec.Sequencer_Model,
	 User_Data => Plugin);
      --Put_Line("Load seq 0.12");
      
      
      --Put_Line("Load seq 0.13");
      Parent := Null_Iter;
      --Put_Line("Load seq 0.14");
      for Count in Ctrl_Change_Plugin_Record(Plugin.all).Sequencer'range loop	 
	 declare
	    Voice : constant Ctrl_Change_Type := Ctrl_Change_Plugin_Record(Plugin.all).Sequencer(Count);
	 begin
	    
	    --Put_Line("Load seq 0.15");
	    
	    Iter := Add_Key_Line
	      (Spec.Sequencer_Model, 
	       Id => count,
	       Cname => Voice.Ctrl_Name.all,
	       CC => Integer(Voice.Ctrl_num),
	       CV => Integer(Voice.Ctrl_val),
	       Bar => Integer(Voice.Bar),
	       Number => Integer(Voice.Number),
	       Step => Integer(Voice.Step), 	       
	       Played => Voice.Played,
	       Muttable => not Voice.Played,	      	       
	       In_Loop => Voice.In_Loop,	       	       
	       Parent => Parent);

	    
	    --Put_Line("Load seq 0.16");
	 end;
      end loop;            
      -- End Sequencer View
      --Put_Line("Load seq 1.0");

      
      
   end Initialize;
   
      
end Gmface.Gm_Application.Gtk_Ctrl_Change;