with Gmface.Gm_Common;                    use Gmface.Gm_Common;
with Gmface.Gm_Virtual;                   use Gmface.Gm_Virtual;

with Gmface.Gm_Processing;                use Gmface.Gm_Processing;
with Gmface.Gm_Processing.Gmface.Gm_Plugin_Processing;
use Gmface.Gm_Processing.Gmface.Gm_Plugin_Processing;

with Gmface.Gm_Virtual.Gmface.Gmface_Plugins;
use Gmface.Gm_Virtual.Gmface.Gmface_Plugins;


with Ada.Calendar;                      use Ada.Calendar;

package Gmface.Gm_Processing.Gmface.Gm_Step_Sequencer is
   
   type Step_Sequencer_Processing(Plugin : Abstract_Plugin_Access);
   
   task type Step_Sequencer_Process (Step_Sequencer : access Step_Sequencer_Processing) is
      entry Initialize(Options : in Work_Options_Access);
      entry Start(Start_time : in Time; Tempo : in Tempo_Type; Signature : in Time_Signature_Type);
      entry Stop;
      entry Halt;
   end Step_Sequencer_Process;
   
   type Step_Sequencer_Processing(Plugin : Abstract_Plugin_Access) is new Plugin_Processing(Step_Seq) with
      record
	 Process : Step_Sequencer_Process(Step_Sequencer_Processing'Access);
      end record;
   
   
   procedure Initialize(Plugin_Process : in Step_Sequencer_Processing; Options : in Work_Options_Access);
   
   procedure Start(Plugin_Process : in Step_Sequencer_Processing;Start_Time : in Time; Tempo : in Tempo_Type; Signature : in Time_Signature_Type);
   procedure Stop(Plugin_Process : in Step_Sequencer_Processing);
   procedure Halt(Plugin_Process : in Step_Sequencer_Processing);
end Gmface.Gm_Processing.Gmface.Gm_Step_Sequencer;