This commit is contained in:
Basile Burg 2014-07-15 06:55:07 +02:00
parent cf7d601ef9
commit fe9fecde64
12 changed files with 123 additions and 45 deletions

View File

@ -80,10 +80,15 @@ type
function dlgOkCancel(const aMsg: string): TModalResult; function dlgOkCancel(const aMsg: string): TModalResult;
(** (**
* Info dialog * Info message
*) *)
function dlgOkInfo(const aMsg: string): TModalResult; function dlgOkInfo(const aMsg: string): TModalResult;
(**
* Error message
*)
function dlgOkError(const aMsg: string): TModalResult;
(** (**
* Returns an unique object identifier, based on its heap address. * Returns an unique object identifier, based on its heap address.
*) *)
@ -302,6 +307,13 @@ begin
exit( MessageDlg('Coedit', aMsg, mtInformation, Btns, '')); exit( MessageDlg('Coedit', aMsg, mtInformation, Btns, ''));
end; end;
function dlgOkError(const aMsg: string): TModalResult;
const
Btns = [mbOK];
begin
exit( MessageDlg('Coedit', aMsg, mtError, Btns, ''));
end;
function uniqueObjStr(const aObject: Tobject): string; function uniqueObjStr(const aObject: Tobject): string;
begin begin
{$HINTS OFF}{$WARNINGS OFF} {$HINTS OFF}{$WARNINGS OFF}

View File

@ -448,6 +448,7 @@ end;
//TODO-cstring literals: token strings. //TODO-cstring literals: token strings.
//TODO-cstring literals: escape bug: std.path/std.regex: "\\" //TODO-cstring literals: escape bug: std.path/std.regex: "\\"
//TODO-ccomments: correct nested comments handling. //TODO-ccomments: correct nested comments handling.
//TODO-cidea: something like pascal {$region} : /*folder blabla*/ /*endfolder*/
{$BOOLEVAL ON} {$BOOLEVAL ON}
procedure TSynD2Syn.next; procedure TSynD2Syn.next;

View File

@ -723,7 +723,7 @@ procedure checkSyntacticErrors(const aTokenList: TLexTokenList; const anErrorLis
const const
errPrefix = 'syntactic error: '; errPrefix = 'syntactic error: ';
var var
tk, old1, old2: TLexToken; tk, old1, old2, lastSig: TLexToken;
err: PLexError; err: PLexError;
tkIndex: NativeInt; tkIndex: NativeInt;
pareCnt, curlCnt, squaCnt: NativeInt; pareCnt, curlCnt, squaCnt: NativeInt;
@ -746,6 +746,9 @@ begin
pareLeft:= False; pareLeft:= False;
curlLeft:= False; curlLeft:= False;
squaLeft:= False; squaLeft:= False;
FillByte( old1, sizeOf(TLexToken), 0);
FillByte( old2, sizeOf(TLexToken), 0);
FillByte( lastSig, sizeOf(TLexToken), 0);
for tk in aTokenList do for tk in aTokenList do
begin begin
@ -802,29 +805,29 @@ begin
end; end;
_preSeq: _preSeq:
// invalid sequences // invalid sequences
if tkIndex > 0 then // can use old1 if tkIndex > 0 then
begin begin
// empty statements:
if (tk.kind = ltkSymbol) and (tk.data = ';') then
if (lastSig.kind = ltkSymbol) and (lastSig.data = ';') then
addError('invalid syntax for empty statement');
if tk.kind <> ltkComment then lastSig := tk;
// suspicious double keywords
if (old1.kind = ltkKeyword) and (tk.kind = ltkKeyword) then if (old1.kind = ltkKeyword) and (tk.kind = ltkKeyword) then
if old1.data = tk.data then if old1.data = tk.data then
addError('keyword is duplicated'); addError('keyword is duplicated');
(* // suspicious double numbers
if (old1.kind = ltkOperator) and (tk.kind = ltkOperator) then
if not isPtrOperator(tk.data[1]) then // ident operator [&,*] ident
addError('operator rhs cannot be an operator');
*)
if (old1.kind = ltkNumber) and (tk.kind = ltkNumber) then if (old1.kind = ltkNumber) and (tk.kind = ltkNumber) then
addError('symbol or operator expected after number'); addError('symbol or operator expected after number');
end; end;
if tkIndex > 1 then // can use old2 if tkIndex > 1 then
begin begin
end; end;
old1 := tk; old1 := tk;
old2 := old1; old2 := old1;
end; end;

View File

@ -245,15 +245,18 @@ type
TCustomProcOptions = class(TOptsGroup) TCustomProcOptions = class(TOptsGroup)
private private
fExecutable: string; fExecutable: string;
fWorkDir: string;
fOptions: TProcessOptions; fOptions: TProcessOptions;
fParameters: TStringList; fParameters: TStringList;
fShowWin: TShowWindowOptions; fShowWin: TShowWindowOptions;
procedure setExecutable(const aValue: string); procedure setExecutable(const aValue: string);
procedure setWorkDir(const aValue: string);
procedure setOptions(const aValue: TProcessOptions); procedure setOptions(const aValue: TProcessOptions);
procedure setParameters(const aValue: TStringList); procedure setParameters(const aValue: TStringList);
procedure setShowWin(const aValue: TShowWindowOptions); procedure setShowWin(const aValue: TShowWindowOptions);
protected protected
property executable: string read fExecutable write setExecutable; property executable: string read fExecutable write setExecutable;
property workingDirectory: string read fWorkDir write setWorkDir;
property options: TProcessOptions read fOptions write setOptions; property options: TProcessOptions read fOptions write setOptions;
property parameters: TStringList read fParameters write setParameters; property parameters: TStringList read fParameters write setParameters;
property showWindow: TShowWindowOptions read fShowWin write setShowWin; property showWindow: TShowWindowOptions read fShowWin write setShowWin;
@ -271,6 +274,7 @@ type
TCompileProcOptions = class(TCustomProcOptions) TCompileProcOptions = class(TCustomProcOptions)
published published
property executable; property executable;
property workingDirectory;
property options; property options;
property parameters; property parameters;
property showWindow; property showWindow;
@ -282,6 +286,7 @@ type
*) *)
TProjectRunOptions = class(TCustomProcOptions) TProjectRunOptions = class(TCustomProcOptions)
published published
property workingDirectory;
property options; property options;
property parameters; property parameters;
property showWindow; property showWindow;
@ -523,7 +528,7 @@ var
const const
trgKindStr: array[TTargetSystem] of string = ('', '-m32','-m64'); trgKindStr: array[TTargetSystem] of string = ('', '-m32','-m64');
binKindStr: array[TBinaryKind] of string = ('', '-lib', '-shared', '-c'); binKindStr: array[TBinaryKind] of string = ('', '-lib', '-shared', '-c');
bchKindStr: array[TBoundCheckKind] of string = ('on', 'safeonly', 'off'); //bchKindStr: array[TBoundCheckKind] of string = ('on', 'safeonly', 'off');
begin begin
depPatch; depPatch;
// //
@ -946,6 +951,7 @@ begin
aProcess.Executable := fExecutable; aProcess.Executable := fExecutable;
aProcess.ShowWindow := fShowWin; aProcess.ShowWindow := fShowWin;
aProcess.Options := fOptions; aProcess.Options := fOptions;
aProcess.CurrentDirectory := fWorkDir;
aProcess.StartupOptions := aProcess.StartupOptions + [suoUseShowWindow]; aProcess.StartupOptions := aProcess.StartupOptions + [suoUseShowWindow];
end; end;
@ -956,6 +962,13 @@ begin
doChanged; doChanged;
end; end;
procedure TCustomProcOptions.setWorkDir(const aValue: string);
begin
if fWorkDir = aValue then exit;
fWorkDir := aValue;
doChanged;
end;
procedure TCustomProcOptions.setOptions(const aValue: TProcessOptions); procedure TCustomProcOptions.setOptions(const aValue: TProcessOptions);
begin begin
if fOptions = aValue then exit; if fOptions = aValue then exit;

View File

@ -2789,6 +2789,7 @@ object CEMainForm: TCEMainForm
HintHidePause = 1000 HintHidePause = 1000
HintPause = 25 HintPause = 25
HintShortPause = 8 HintShortPause = 8
OnException = ApplicationProperties1Exception
left = 96 left = 96
end end
object LfmSyn: TSynLFMSyn object LfmSyn: TSynLFMSyn

View File

@ -181,6 +181,7 @@ type
procedure actEdUndoExecute(Sender: TObject); procedure actEdUndoExecute(Sender: TObject);
procedure actProjSourceExecute(Sender: TObject); procedure actProjSourceExecute(Sender: TObject);
procedure actEdUnIndentExecute(Sender: TObject); procedure actEdUnIndentExecute(Sender: TObject);
procedure ApplicationProperties1Exception(Sender: TObject; E: Exception);
procedure FormDropFiles(Sender: TObject; const FileNames: array of String); procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
private private
fUpdateCount: NativeInt; fUpdateCount: NativeInt;
@ -200,7 +201,7 @@ type
procedure widgetShowFromAction(sender: TObject); procedure widgetShowFromAction(sender: TObject);
// run & exec sub routines // run & exec sub routines
procedure ProcessOutputToMsg(const aProcess: TProcess); procedure ProcessOutputToMsg(const aProcess: TProcess;aCtxt: TMessageContext = msUnknown);
procedure compileAndRunFile(const edIndex: NativeInt; const runArgs: string = ''); procedure compileAndRunFile(const edIndex: NativeInt; const runArgs: string = '');
procedure compileProject(const aProject: TCEProject); procedure compileProject(const aProject: TCEProject);
procedure runProject(const aProject: TCEProject; const runArgs: string = ''); procedure runProject(const aProject: TCEProject; const runArgs: string = '');
@ -352,6 +353,13 @@ begin
inherited; inherited;
end; end;
procedure TCEMainForm.ApplicationProperties1Exception(Sender: TObject;E: Exception);
begin
if fMesgWidg = nil then
ce_common.dlgOkError(E.Message)
else fMesgWidg.addCeErr(E.Message);
end;
procedure TCEMainForm.ActionsUpdate(AAction: TBasicAction; var Handled: Boolean); procedure TCEMainForm.ActionsUpdate(AAction: TBasicAction; var Handled: Boolean);
var var
curr: TCESynMemo; curr: TCESynMemo;
@ -808,11 +816,10 @@ begin
curr := fEditWidg.currentEditor; curr := fEditWidg.currentEditor;
if assigned(curr) then curr.ExecuteCommand(ecBlockUnIndent, '', nil); if assigned(curr) then curr.ExecuteCommand(ecBlockUnIndent, '', nil);
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION run ******************************************************************} {$REGION run ******************************************************************}
procedure TCEMainForm.ProcessOutputToMsg(const aProcess: TProcess); procedure TCEMainForm.ProcessOutputToMsg(const aProcess: TProcess; aCtxt: TMessageContext = msUnknown);
var var
str: TMemoryStream; str: TMemoryStream;
lns: TStringList; lns: TStringList;
@ -837,7 +844,7 @@ begin
end; end;
Str.SetSize(readSz); Str.SetSize(readSz);
lns.LoadFromStream(Str); lns.LoadFromStream(Str);
for msg in lns do fMesgWidg.addMessage(msg); // proj/file ? for msg in lns do fMesgWidg.addMessage(msg, aCtxt);
finally finally
str.Free; str.Free;
lns.Free; lns.Free;
@ -878,7 +885,7 @@ begin
try try
dmdproc.Execute; dmdproc.Execute;
while dmdproc.Running do if dmdproc.ExitStatus <> 0 then break; while dmdproc.Running do if dmdproc.ExitStatus <> 0 then break;
ProcessOutputToMsg(dmdproc); ProcessOutputToMsg(dmdproc, msEditor);
finally finally
DeleteFile(fname + '.d'); DeleteFile(fname + '.d');
end; end;
@ -896,13 +903,14 @@ begin
runproc.Options:= [poStderrToOutPut, poUsePipes]; runproc.Options:= [poStderrToOutPut, poUsePipes];
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
runproc.Executable := fname + '.exe'; runproc.Executable := fname + '.exe';
runproc.CurrentDirectory := extractFilePath(runProc.Executable);
runproc.Parameters.Text := runArgs; runproc.Parameters.Text := runArgs;
{$ELSE} {$ELSE}
runproc.Executable := fname; runproc.Executable := fname;
{$ENDIF} {$ENDIF}
runproc.Execute; runproc.Execute;
while runproc.Running do if runproc.ExitStatus <> 0 then break; while runproc.Running do if runproc.ExitStatus <> 0 then break;
ProcessOutputToMsg(runproc); ProcessOutputToMsg(runproc, msEditor);
{$IFDEF MSWINDOWS} {$IFDEF MSWINDOWS}
DeleteFile(fname + '.exe'); DeleteFile(fname + '.exe');
DeleteFile(fname + '.obj'); DeleteFile(fname + '.obj');
@ -949,6 +957,8 @@ begin
ppproc := TProcess.Create(nil); ppproc := TProcess.Create(nil);
try try
preBuildProcess.setProcess(ppproc); preBuildProcess.setProcess(ppproc);
if ppproc.CurrentDirectory = '' then
ppproc.CurrentDirectory := extractFilePath(ppproc.Executable);
ppproc.Execute; ppproc.Execute;
finally finally
ppproc.Free; ppproc.Free;
@ -978,7 +988,7 @@ begin
try try
dmdproc.Execute; dmdproc.Execute;
while dmdproc.Running do if dmdproc.ExitStatus <> 0 then break; while dmdproc.Running do if dmdproc.ExitStatus <> 0 then break;
ProcessOutputToMsg(dmdproc); ProcessOutputToMsg(dmdproc, msProject);
finally finally
{$IFDEF MSWINDOWS} // STILL_ACTIVE ambiguity {$IFDEF MSWINDOWS} // STILL_ACTIVE ambiguity
if (dmdProc.ExitStatus = 0) or (dmdProc.ExitStatus = 259) then if (dmdProc.ExitStatus = 0) or (dmdProc.ExitStatus = 259) then
@ -1000,6 +1010,8 @@ begin
ppproc := TProcess.Create(nil); ppproc := TProcess.Create(nil);
try try
postBuildProcess.setProcess(ppproc); postBuildProcess.setProcess(ppproc);
if ppproc.CurrentDirectory = '' then
ppproc.CurrentDirectory := extractFilePath(ppproc.Executable);
ppproc.Execute; ppproc.Execute;
finally finally
ppproc.Free; ppproc.Free;
@ -1028,11 +1040,8 @@ begin
runproc := TProcess.Create(nil); runproc := TProcess.Create(nil);
try try
runproc.Options := aProject.currentConfiguration.runOptions.options; aProject.currentConfiguration.runOptions.setProcess(runProc);
runproc.Parameters := aProject.currentConfiguration.runOptions.parameters;
runproc.ShowWindow := aProject.currentConfiguration.runOptions.showWindow;
runproc.Parameters.AddText(runArgs); runproc.Parameters.AddText(runArgs);
procname := aProject.currentConfiguration.pathsOptions.outputFilename; procname := aProject.currentConfiguration.pathsOptions.outputFilename;
if procname <> '' then procname := aProject.getAbsoluteFilename(procname) if procname <> '' then procname := aProject.getAbsoluteFilename(procname)
else if aProject.Sources.Count > 0 then else if aProject.Sources.Count > 0 then
@ -1053,9 +1062,11 @@ begin
end; end;
runproc.Executable := procname; runproc.Executable := procname;
if runproc.CurrentDirectory = '' then
runproc.CurrentDirectory := extractFilePath(runproc.Executable);
runproc.Execute; runproc.Execute;
while runproc.Running do if runproc.ExitStatus <> 0 then break; while runproc.Running do if runproc.ExitStatus <> 0 then break;
ProcessOutputToMsg(runproc); ProcessOutputToMsg(runproc, msProject);
finally finally
runproc.Free; runproc.Free;

View File

@ -38,6 +38,7 @@ inherited CEMessagesWidget: TCEMessagesWidget
ShowLines = False ShowLines = False
ShowRoot = False ShowRoot = False
TabOrder = 0 TabOrder = 0
OnKeyDown = ListKeyDown
Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoToolTips, tvoThemedDraw] Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoToolTips, tvoThemedDraw]
end end
end end

View File

@ -6,7 +6,8 @@ interface
uses uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls,
ce_widget, ActnList, Menus, clipbrd, AnchorDocking, ce_project, ce_synmemo; lcltype, ce_widget, ActnList, Menus, clipbrd, AnchorDocking, ce_project,
ce_synmemo, LMessages;
type type
@ -22,6 +23,7 @@ type
TCEMessagesWidget = class(TCEWidget) TCEMessagesWidget = class(TCEWidget)
imgList: TImageList; imgList: TImageList;
List: TTreeView; List: TTreeView;
procedure ListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private private
fActClearAll: TAction; fActClearAll: TAction;
fActClearEdi: TAction; fActClearEdi: TAction;
@ -42,7 +44,7 @@ type
procedure listDeletion(Sender: TObject; Node: TTreeNode); procedure listDeletion(Sender: TObject; Node: TTreeNode);
function newMessageItemData(aCtxt: TMessageContext): PMessageItemData; function newMessageItemData(aCtxt: TMessageContext): PMessageItemData;
published published
property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount default 250; property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount default 125;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
// //
@ -82,7 +84,7 @@ uses
constructor TCEMessagesWidget.create(aOwner: TComponent); constructor TCEMessagesWidget.create(aOwner: TComponent);
begin begin
fMaxMessCnt := 250; fMaxMessCnt := 125;
// //
fActClearAll := TAction.Create(self); fActClearAll := TAction.Create(self);
fActClearAll.OnExecute := @actClearAllExecute; fActClearAll.OnExecute := @actClearAllExecute;
@ -147,6 +149,23 @@ begin
List.BottomItem.MakeVisible; List.BottomItem.MakeVisible;
end; end;
procedure TCEMessagesWidget.ListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i: NativeInt;
begin
if Key in [VK_BACK, VK_DELETE] then
begin
if List.SelectionCount > 0 then
begin
for i := List.Items.Count-1 downto 0 do
if List.Items[i].MultiSelected then
List.Items.Delete(List.Items[i]);
end
else ClearAllMessages;
end;
end;
procedure TCEMessagesWidget.filterMessages; procedure TCEMessagesWidget.filterMessages;
var var
itm: TTreeNode; itm: TTreeNode;
@ -327,6 +346,7 @@ begin
end; end;
end; end;
// TODO: link to editor line when possible.
function semanticMsgAna(const aMessg: string): TMessageKind; function semanticMsgAna(const aMessg: string): TMessageKind;
var var
pos: Nativeint; pos: Nativeint;
@ -335,11 +355,13 @@ function checkIdent: TMessageKind;
begin begin
case idt of case idt of
'ERROR', 'error', 'Error', 'Invalid', 'invalid', 'ERROR', 'error', 'Error', 'Invalid', 'invalid',
'illegal', 'Illegal', 'fatal', 'Fatal', 'Critical', 'critical': 'exception', 'Exception', 'illegal', 'Illegal',
'fatal', 'Fatal', 'Critical', 'critical':
exit(msgkError); exit(msgkError);
'Warning', 'warning': 'Warning', 'warning', 'caution', 'Caution':
exit(msgkWarn); exit(msgkWarn);
'Hint', 'hint', 'Tip', 'tip': 'Hint', 'hint', 'Tip', 'tip', 'advice', 'Advice',
'suggestion', 'Suggestion':
exit(msgkHint); exit(msgkHint);
'Information', 'information': 'Information', 'information':
exit(msgkInfo); exit(msgkInfo);

View File

@ -275,7 +275,7 @@ end;
procedure TCEProject.readerPropNoFound(Reader: TReader; Instance: TPersistent; procedure TCEProject.readerPropNoFound(Reader: TReader; Instance: TPersistent;
var PropName: string; IsPath: boolean; var Handled, Skip: Boolean); var PropName: string; IsPath: boolean; var Handled, Skip: Boolean);
begin begin
// continue loading: this method grants the project compat. in case of drastical changes. // continue loading: this method grants the project compat. in case of drastic changes.
Skip := true; Skip := true;
Handled := true; Handled := true;
end; end;

View File

@ -71,6 +71,7 @@ inherited CEStaticExplorerWidget: TCEStaticExplorerWidget
Height = 23 Height = 23
Top = 2 Top = 2
Width = 226 Width = 226
OnAfterFilter = TreeFilterEdit1AfterFilter
ButtonWidth = 23 ButtonWidth = 23
NumGlyphs = 1 NumGlyphs = 1
Align = alCustom Align = alCustom

View File

@ -18,6 +18,7 @@ type
Tree: TTreeView; Tree: TTreeView;
TreeFilterEdit1: TTreeFilterEdit; TreeFilterEdit1: TTreeFilterEdit;
procedure TreeDeletion(Sender: TObject; Node: TTreeNode); procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
procedure TreeFilterEdit1AfterFilter(Sender: TObject);
procedure TreeKeyPress(Sender: TObject; var Key: char); procedure TreeKeyPress(Sender: TObject; var Key: char);
private private
fActRefresh: TAction; fActRefresh: TAction;
@ -32,6 +33,7 @@ type
procedure TreeDblClick(Sender: TObject); procedure TreeDblClick(Sender: TObject);
procedure actRefreshExecute(Sender: TObject); procedure actRefreshExecute(Sender: TObject);
procedure actAutoRefreshExecute(Sender: TObject); procedure actAutoRefreshExecute(Sender: TObject);
procedure updateVisibleCat;
protected protected
procedure UpdateByDelay; override; procedure UpdateByDelay; override;
published published
@ -178,6 +180,26 @@ begin
Dispose(PInt64(node.Data)); Dispose(PInt64(node.Data));
end; end;
procedure TCEStaticExplorerWidget.updateVisibleCat;
begin
ndAlias.Visible := ndAlias.Count > 0;
ndClass.Visible := ndClass.Count > 0;
ndEnum.Visible := ndEnum.Count > 0;
ndFunc.Visible := ndFunc.Count > 0;
ndImp.Visible := ndImp.Count > 0;
ndIntf.Visible := ndIntf.Count > 0;
ndMix.Visible := ndMix.Count > 0;
ndStruct.Visible := ndStruct.Count > 0;
ndTmp.Visible := ndTmp.Count > 0;
ndVar.Visible := ndVar.Count > 0;
end;
procedure TCEStaticExplorerWidget.TreeFilterEdit1AfterFilter(Sender: TObject);
begin
if TreeFilterEdit1.Filter ='' then
updateVisibleCat;
end;
procedure TCEStaticExplorerWidget.TreeKeyPress(Sender: TObject; var Key: char); procedure TCEStaticExplorerWidget.TreeKeyPress(Sender: TObject; var Key: char);
begin begin
if Key = #13 then TreeDblClick(nil); if Key = #13 then TreeDblClick(nil);
@ -244,16 +266,7 @@ begin
ndTmp.DeleteChildren; ndTmp.DeleteChildren;
ndVar.DeleteChildren; ndVar.DeleteChildren;
ndAlias.Visible := false; updateVisibleCat;
ndClass.Visible := false;
ndEnum.Visible := false;
ndFunc.Visible := false;
ndImp.Visible := false;
ndIntf.Visible := false;
ndMix.Visible := false;
ndStruct.Visible := false;
ndTmp.Visible := false;
ndVar.Visible := false;
if fDoc = nil then exit; if fDoc = nil then exit;
if fDoc.Lines.Count = 0 then exit; if fDoc.Lines.Count = 0 then exit;

View File

@ -16,7 +16,7 @@ type
*) *)
ICEMultiDocMonitor = interface ICEMultiDocMonitor = interface
procedure docNew(const aDoc: TCESynMemo); procedure docNew(const aDoc: TCESynMemo);
procedure docFocused(const aDoc: TCESynMemo); procedure docFocused(const aDoc: TCESynMemo); // docSelected or docActivated
procedure docChanged(const aDoc: TCESynMemo); procedure docChanged(const aDoc: TCESynMemo);
procedure docClose(const aDoc: TCESynMemo); procedure docClose(const aDoc: TCESynMemo);
end; end;
@ -41,7 +41,7 @@ type
procedure projRun(const aProject: TCEProject); procedure projRun(const aProject: TCEProject);
// not used yet: (project group) // not used yet: (project group)
procedure projFocused(const aProject: TCEProject); procedure projFocused(const aProject: TCEProject); // projSelected or projActivated
end; end;
implementation implementation