SynEdit, MacroRecorder: Added AssignEvents

git-svn-id: trunk@37678 -
This commit is contained in:
martin 2012-06-17 21:14:03 +00:00
parent 04a085258f
commit e5c319db91

View File

@ -51,19 +51,22 @@ resourcestring
sCannotResume = 'Can only resume when paused';
type
TSynMacroState = (msStopped, msRecording, msPlaying, msPaused);
TSynMacroState = (msStopped, msRecording, msPlaying, msPaused); // msPaused = paused recording
TSynMacroCommand = (mcRecord, mcPlayback);
{ TSynMacroEvent }
TSynMacroEvent = class(TObject)
protected
fRepeatCount: Byte;
function GetAsString : string; virtual; abstract;
procedure InitEventParameters(aStr : string); virtual; abstract;
public
constructor Create; {$IFNDEF FPC}virtual;{$ENDIF}
constructor Create; virtual;
procedure Initialize(aCmd: TSynEditorCommand;
const aChar: TUTF8Char;
aData: Pointer); virtual; abstract;
procedure Assign(AnEvent: TSynMacroEvent); virtual;
{ the CommandID must not be read inside LoadFromStream/SaveToStream. It's read by the
MacroRecorder component to decide which MacroEvent class to instanciate }
procedure LoadFromStream(aStream: TStream); virtual; abstract;
@ -73,6 +76,8 @@ type
property RepeatCount : Byte read fRepeatCount write fRepeatCount;
end;
TSynMacroEventClass = class of TSynMacroEvent;
{ TSynIgnoredEvent }
TSynIgnoredEvent = class(TSynMacroEvent)
@ -88,6 +93,8 @@ type
procedure Playback(aEditor: TCustomSynEdit); override;
end;
{ TSynBasicEvent }
TSynBasicEvent = class(TSynMacroEvent)
protected
fCommand: TSynEditorCommand;
@ -97,6 +104,7 @@ type
procedure Initialize(aCmd: TSynEditorCommand;
const aChar: TUTF8Char;
aData: Pointer); override;
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure Playback(aEditor: TCustomSynEdit); override;
@ -104,6 +112,8 @@ type
property Command: TSynEditorCommand read fCommand write fCommand;
end;
{ TSynCharEvent }
TSynCharEvent = class(TSynMacroEvent)
protected
fKey: TUTF8Char;
@ -113,6 +123,7 @@ type
procedure Initialize(aCmd: TSynEditorCommand;
const aChar: TUTF8Char;
aData: Pointer); override;
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure Playback(aEditor: TCustomSynEdit); override;
@ -120,6 +131,8 @@ type
property Key: TUTF8Char read fKey write fKey;
end;
{ TSynStringEvent }
TSynStringEvent = class(TSynMacroEvent)
protected
fString: string;
@ -129,6 +142,7 @@ type
procedure Initialize(aCmd: TSynEditorCommand;
const aChar: TUTF8Char;
aData: Pointer); override;
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure Playback(aEditor: TCustomSynEdit); override;
@ -136,6 +150,8 @@ type
property Value: string read fString write fString;
end;
{ TSynPositionEvent }
TSynPositionEvent = class(TSynBasicEvent)
protected
fPosition: TPoint;
@ -145,6 +161,7 @@ type
procedure Initialize(aCmd: TSynEditorCommand;
const aChar: TUTF8Char;
aData: Pointer); override;
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure Playback(aEditor: TCustomSynEdit); override;
@ -152,6 +169,8 @@ type
property Position: TPoint read fPosition write fPosition;
end;
{ TSynDataEvent }
TSynDataEvent = class(TSynBasicEvent)
protected
fData: Pointer;
@ -159,6 +178,7 @@ type
procedure Initialize(aCmd: TSynEditorCommand;
const aChar: TUTF8Char;
aData: Pointer); override;
procedure Assign(AnEvent: TSynMacroEvent); override;
procedure LoadFromStream(aStream: TStream); override;
procedure SaveToStream(aStream: TStream); override;
procedure Playback(aEditor: TCustomSynEdit); override;
@ -234,6 +254,7 @@ type
procedure Stop;
procedure Pause;
procedure Resume;
procedure AssignEventsFrom(AMacroRecorder: TCustomSynMacroRecorder);
property IsEmpty: boolean read GetIsEmpty;
property State: TSynMacroState read fState;
procedure Clear;
@ -319,7 +340,13 @@ procedure TSynDataEvent.Initialize(aCmd: TSynEditorCommand; const aChar: TUTF8Ch
begin
fCommand := aCmd;
Assert( aChar = #0 );
fData := aData;
fData := aData; // Todo: must be copied...
end;
procedure TSynDataEvent.Assign(AnEvent: TSynMacroEvent);
begin
inherited Assign(AnEvent);
// Todo: COPY data.
end;
procedure TSynDataEvent.LoadFromStream(aStream: TStream);
@ -659,6 +686,22 @@ begin
StateChanged;
end;
procedure TCustomSynMacroRecorder.AssignEventsFrom(AMacroRecorder: TCustomSynMacroRecorder);
var
i: Integer;
NewEvent: TSynMacroEvent;
begin
Clear;
if AMacroRecorder.fEvents = nil then exit;
fEvents := TList.Create;
for i := 0 to AMacroRecorder.fEvents.Count -1 do begin
NewEvent := TSynMacroEventClass(TSynMacroEvent(AMacroRecorder.fEvents[i]).ClassType).Create;
NewEvent.Assign(TSynMacroEvent(AMacroRecorder.fEvents[i]));
fEvents.add(NewEvent);
end;
end;
procedure TCustomSynMacroRecorder.SaveToStream(aDest: TStream);
var
cEvent, eCnt : integer;
@ -857,6 +900,13 @@ begin
{$ENDIF}
end;
procedure TSynBasicEvent.Assign(AnEvent: TSynMacroEvent);
begin
inherited Assign(AnEvent);
if AnEvent is TSynBasicEvent then
fCommand := TSynBasicEvent(AnEvent).fCommand;
end;
procedure TSynBasicEvent.LoadFromStream(aStream: TStream);
begin
aStream.Read( fRepeatCount, SizeOf(fRepeatCount) );
@ -906,6 +956,13 @@ begin
Assert( aData = nil );
end;
procedure TSynCharEvent.Assign(AnEvent: TSynMacroEvent);
begin
inherited Assign(AnEvent);
if AnEvent is TSynCharEvent then
fKey := TSynCharEvent(AnEvent).fKey;
end;
procedure TSynCharEvent.LoadFromStream(aStream: TStream);
begin
aStream.Read( fKey, SizeOf(Key) );
@ -978,6 +1035,13 @@ begin
Position := Point( 0, 0 );
end;
procedure TSynPositionEvent.Assign(AnEvent: TSynMacroEvent);
begin
inherited Assign(AnEvent);
if AnEvent is TSynPositionEvent then
fPosition := TSynPositionEvent(AnEvent).fPosition;
end;
procedure TSynPositionEvent.LoadFromStream(aStream: TStream);
begin
aStream.Read( fPosition, SizeOf(Position) );
@ -1045,6 +1109,13 @@ begin
Value := String(aData);
end;
procedure TSynStringEvent.Assign(AnEvent: TSynMacroEvent);
begin
inherited Assign(AnEvent);
if AnEvent is TSynStringEvent then
fString := TSynStringEvent(AnEvent).fString;
end;
procedure TSynStringEvent.LoadFromStream(aStream: TStream);
var
l : Integer;
@ -1108,4 +1179,9 @@ begin
fRepeatCount := 1;
end;
procedure TSynMacroEvent.Assign(AnEvent: TSynMacroEvent);
begin
fRepeatCount := AnEvent.fRepeatCount;
end;
end.