IDE: SynEdit: Add writer interface to macro-recorder

git-svn-id: trunk@37774 -
This commit is contained in:
martin 2012-06-25 01:07:17 +00:00
parent 13192356d4
commit 0ac6e28810

View File

@ -53,6 +53,31 @@ resourcestring
type
TSynMacroState = (msStopped, msRecording, msPlaying, msPaused); // msPaused = paused recording
TSynMacroCommand = (mcRecord, mcPlayback);
TSynEventParamType = (ptString, ptInteger);
TSynMacroEvent = class;
TSynMacroEventWriter = class(TObject)
public
procedure WriteEventCommand(const ACmd: TSynEditorCommand); virtual; abstract;
procedure WriteEventParam(const AParam: string); virtual; abstract;
procedure WriteEventParam(const AParam: integer); virtual; abstract;
end;
{ TSynMacroEventReader }
TSynMacroEventReader = class(TObject)
protected
function GetParamAsInt(Index: Integer): Integer; virtual; abstract;
function GetParamAsString(Index: Integer): String; virtual; abstract;
function GetParamType(Index: Integer): TSynEventParamType; virtual; abstract;
public
function EventCommand: TSynEditorCommand; virtual; abstract;
function ParamCount: Integer; virtual; abstract;
property ParamType[Index: Integer]: TSynEventParamType read GetParamType;
property ParamAsString[Index: Integer]: String read GetParamAsString;
property ParamAsInt[Index: Integer]: Integer read GetParamAsInt;
end;
{ TSynMacroEvent }
@ -71,6 +96,8 @@ type
MacroRecorder component to decide which MacroEvent class to instanciate }
procedure LoadFromStream(aStream: TStream); virtual; abstract;
procedure SaveToStream(aStream: TStream); virtual; abstract;
procedure LoadFromReader(aReader: TSynMacroEventReader); virtual; abstract;
procedure SaveToWriter(aWriter: TSynMacroEventWriter); virtual; abstract;
procedure Playback(aEditor: TCustomSynEdit); virtual; abstract;
property AsString : string read GetAsString;
property RepeatCount : Byte read fRepeatCount write fRepeatCount;
@ -90,6 +117,8 @@ type
aData: Pointer); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure LoadFromReader(aReader: TSynMacroEventReader); override;
procedure SaveToWriter(aWriter: TSynMacroEventWriter); override;
procedure Playback(aEditor: TCustomSynEdit); override;
end;
@ -107,6 +136,8 @@ type
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure LoadFromReader(aReader: TSynMacroEventReader); override;
procedure SaveToWriter(aWriter: TSynMacroEventWriter); override;
procedure Playback(aEditor: TCustomSynEdit); override;
public
property Command: TSynEditorCommand read fCommand write fCommand;
@ -126,6 +157,8 @@ type
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure LoadFromReader(aReader: TSynMacroEventReader); override;
procedure SaveToWriter(aWriter: TSynMacroEventWriter); override;
procedure Playback(aEditor: TCustomSynEdit); override;
public
property Key: TUTF8Char read fKey write fKey;
@ -145,6 +178,8 @@ type
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure LoadFromReader(aReader: TSynMacroEventReader); override;
procedure SaveToWriter(aWriter: TSynMacroEventWriter); override;
procedure Playback(aEditor: TCustomSynEdit); override;
public
property Value: string read fString write fString;
@ -164,6 +199,8 @@ type
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure LoadFromReader(aReader: TSynMacroEventReader); override;
procedure SaveToWriter(aWriter: TSynMacroEventWriter); override;
procedure Playback(aEditor: TCustomSynEdit); override;
public
property Position: TPoint read fPosition write fPosition;
@ -241,8 +278,8 @@ type
var Handled: boolean; var Command: TSynEditorCommand;
var aChar: TUTF8Char;
Data: pointer; HandlerData: pointer);
function CreateMacroEvent(aCmd: TSynEditorCommand): TSynMacroEvent;
protected
function CreateMacroEvent(aCmd: TSynEditorCommand): TSynMacroEvent; virtual;
property RecordCommandID: TSynEditorCommand index ord(mcRecord) read GetCommandIDs write SetCommandIDs;
property PlaybackCommandID: TSynEditorCommand index ord(mcPlayback) read GetCommandIDs write SetCommandIDs;
function GetShortCuts(Cmd: integer): TShortCut;
@ -329,6 +366,16 @@ begin
//
end;
procedure TSynIgnoredEvent.LoadFromReader(aReader: TSynMacroEventReader);
begin
//
end;
procedure TSynIgnoredEvent.SaveToWriter(aWriter: TSynMacroEventWriter);
begin
aWriter.WriteEventCommand(ecNone);
end;
procedure TSynIgnoredEvent.Playback(aEditor: TCustomSynEdit);
begin
//
@ -417,6 +464,8 @@ function TCustomSynMacroRecorder.CreateMacroEvent(aCmd: TSynEditorCommand): TSyn
begin
case aCmd of
ecNone:
Result := TSynIgnoredEvent.Create;
ecGotoXY, ecSelGotoXY, ecSetMarker0..ecSetMarker9:
begin
Result := TSynPositionEvent.Create;
@ -697,7 +746,7 @@ var
NewEvent: TSynMacroEvent;
begin
Clear;
if AMacroRecorder.fEvents = nil then exit;
if (AMacroRecorder = nil) or (AMacroRecorder.fEvents = nil) then exit;
fEvents := TList.Create;
for i := 0 to AMacroRecorder.fEvents.Count -1 do begin
@ -935,6 +984,21 @@ begin
aStream.Write( RepeatCount, SizeOf(RepeatCount) );
end;
procedure TSynBasicEvent.LoadFromReader(aReader: TSynMacroEventReader);
begin
fCommand := aReader.EventCommand;
fRepeatCount := 1;
if aReader.ParamCount > 0 then
fRepeatCount := aReader.GetParamAsInt(0);
end;
procedure TSynBasicEvent.SaveToWriter(aWriter: TSynMacroEventWriter);
begin
aWriter.WriteEventCommand(fCommand);
if fRepeatCount <> 1 then
aWriter.WriteEventParam(fRepeatCount);
end;
{ TSynCharEvent }
function TSynCharEvent.GetAsString: string;
@ -995,6 +1059,22 @@ begin
aStream.Write( RepeatCount, SizeOf(RepeatCount) );
end;
procedure TSynCharEvent.LoadFromReader(aReader: TSynMacroEventReader);
begin
fKey := aReader.GetParamAsString(0);
fRepeatCount := 1;
if aReader.ParamCount > 1 then
fRepeatCount := aReader.GetParamAsInt(1);
end;
procedure TSynCharEvent.SaveToWriter(aWriter: TSynMacroEventWriter);
begin
aWriter.WriteEventCommand(ecChar);
aWriter.WriteEventParam(fKey);
if fRepeatCount <> 1 then
aWriter.WriteEventParam(fRepeatCount);
end;
{ TSynPositionEvent }
function TSynPositionEvent.GetAsString: string;
@ -1070,6 +1150,25 @@ begin
aStream.Write( Position, SizeOf(Position) );
end;
procedure TSynPositionEvent.LoadFromReader(aReader: TSynMacroEventReader);
begin
fCommand := aReader.EventCommand;
fPosition.x := aReader.GetParamAsInt(0);
fPosition.y := aReader.GetParamAsInt(1);
fRepeatCount := 1;
if aReader.ParamCount > 2 then
fRepeatCount := aReader.GetParamAsInt(2);
end;
procedure TSynPositionEvent.SaveToWriter(aWriter: TSynMacroEventWriter);
begin
aWriter.WriteEventCommand(fCommand);
aWriter.WriteEventParam(fPosition.x);
aWriter.WriteEventParam(fPosition.y);
if fRepeatCount <> 1 then
aWriter.WriteEventParam(fRepeatCount);
end;
{ TSynStringEvent }
{$IFNDEF SYN_COMPILER_3_UP}
@ -1178,7 +1277,21 @@ begin
aStream.Write( RepeatCount, SizeOf(RepeatCount) );
end;
procedure TSynStringEvent.LoadFromReader(aReader: TSynMacroEventReader);
begin
fString := aReader.GetParamAsString(0);
fRepeatCount := 1;
if aReader.ParamCount > 1 then
fRepeatCount := aReader.GetParamAsInt(1);
end;
procedure TSynStringEvent.SaveToWriter(aWriter: TSynMacroEventWriter);
begin
aWriter.WriteEventCommand(ecString);
aWriter.WriteEventParam(fString);
if fRepeatCount <> 1 then
aWriter.WriteEventParam(fRepeatCount);
end;
{ TSynMacroEvent }