This commit is contained in:
Basile Burg 2014-08-18 21:52:49 +02:00
parent c4ec74e3e1
commit 5987571333
11 changed files with 165 additions and 228 deletions

View File

@ -15,8 +15,7 @@ uses
type type
{ TCEEditorWidget } { TCEEditorWidget }
TCEEditorWidget = class(TCEWidget, ICEMultiDocObserver, ICEProjectObserver)
TCEEditorWidget = class(TCEWidget, ICEProjectObserver)
imgList: TImageList; imgList: TImageList;
PageControl: TExtendedNotebook; PageControl: TExtendedNotebook;
macRecorder: TSynMacroRecorder; macRecorder: TSynMacroRecorder;
@ -33,6 +32,7 @@ type
private private
fKeyChanged: boolean; fKeyChanged: boolean;
fProj: TCEProject; fProj: TCEProject;
fDoc: TCESynMemo;
// http://bugs.freepascal.org/view.php?id=26329 // http://bugs.freepascal.org/view.php?id=26329
fSyncEdit: TSynPluginSyncroEdit; fSyncEdit: TSynPluginSyncroEdit;
@ -44,7 +44,6 @@ type
procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure memoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure memoChange(Sender: TObject); procedure memoChange(Sender: TObject);
procedure memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure memoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
function getCurrentEditor: TCESynMemo;
function getEditor(index: NativeInt): TCESynMemo; function getEditor(index: NativeInt): TCESynMemo;
function getEditorCount: NativeInt; function getEditorCount: NativeInt;
function getEditorIndex: NativeInt; function getEditorIndex: NativeInt;
@ -58,16 +57,19 @@ type
procedure focusedEditorChanged; procedure focusedEditorChanged;
function getEditorHint: string; function getEditorHint: string;
// //
procedure docNew(const aDoc: TCESynMemo);
procedure docClosing(const aDoc: TCESynMemo);
procedure docFocused(const aDoc: TCESynMemo);
procedure docChanged(const aDoc: TCESynMemo);
//
procedure projNew(const aProject: TCEProject); procedure projNew(const aProject: TCEProject);
procedure projClosing(const aProject: TCEProject); procedure projClosing(const aProject: TCEProject);
procedure projFocused(const aProject: TCEProject); procedure projFocused(const aProject: TCEProject);
procedure projChanged(const aProject: TCEProject); procedure projChanged(const aProject: TCEProject);
//
procedure projCompile(const aProject: TCEProject); //warning: removed from itf procedure projCompile(const aProject: TCEProject); //warning: removed from itf
procedure projRun(const aProject: TCEProject); //warning: removed from itf procedure projRun(const aProject: TCEProject); //warning: removed from itf
// //
property currentEditor: TCESynMemo read getCurrentEditor;
property editor[index: NativeInt]: TCESynMemo read getEditor; property editor[index: NativeInt]: TCESynMemo read getEditor;
property editorCount: NativeInt read getEditorCount; property editorCount: NativeInt read getEditorCount;
property editorIndex: NativeInt read getEditorIndex; property editorIndex: NativeInt read getEditorIndex;
@ -80,6 +82,7 @@ implementation
uses uses
ce_main, ce_messages; ce_main, ce_messages;
{$REGION Standard Comp/Obj------------------------------------------------------}
constructor TCEEditorWidget.create(aOwner: TComponent); constructor TCEEditorWidget.create(aOwner: TComponent);
var var
bmp: TBitmap; bmp: TBitmap;
@ -97,6 +100,8 @@ begin
finally finally
bmp.Free; bmp.Free;
end; end;
//
EntitiesConnector.addObserver(self);
end; end;
destructor TCEEditorWidget.destroy; destructor TCEEditorWidget.destroy;
@ -105,6 +110,64 @@ begin
errLst.Free; errLst.Free;
inherited; inherited;
end; end;
{$ENDREGION}
{$REGION ICEMultiDocObserver ---------------------------------------------------}
procedure TCEEditorWidget.docNew(const aDoc: TCESynMemo);
begin
fDoc := aDoc;
end;
procedure TCEEditorWidget.docClosing(const aDoc: TCESynMemo);
begin
fDoc := nil;
end;
procedure TCEEditorWidget.docFocused(const aDoc: TCESynMemo);
begin
fDoc := aDoc;
focusedEditorChanged;
end;
procedure TCEEditorWidget.docChanged(const aDoc: TCESynMemo);
begin
if fDoc <> aDoc then exit;
fKeyChanged := true;
beginUpdateByDelay;
UpdateByEvent;
end;
{$ENDREGION}
{$REGION ICEProjectObserver ----------------------------------------------------}
procedure TCEEditorWidget.projNew(const aProject: TCEProject);
begin
fProj := aProject;
end;
procedure TCEEditorWidget.projClosing(const aProject: TCEProject);
begin
fProj := nil;
end;
procedure TCEEditorWidget.projFocused(const aProject: TCEProject);
begin
fProj := aProject;
end;
procedure TCEEditorWidget.projChanged(const aProject: TCEProject);
begin
end;
procedure TCEEditorWidget.projCompile(const aProject: TCEProject);
begin
endUpdateByDelay; // warning not trigered anymore
end;
procedure TCEEditorWidget.projRun(const aProject: TCEProject);
begin
endUpdateByDelay; // warning not trigered anymore
end;
{$ENDREGION}
function TCEEditorWidget.getEditorCount: NativeInt; function TCEEditorWidget.getEditorCount: NativeInt;
begin begin
@ -118,41 +181,27 @@ begin
else result := -1; else result := -1;
end; end;
function TCEEditorWidget.getCurrentEditor: TCESynMemo;
begin
if pageControl.PageCount = 0 then result := nil
else result := TCESynMemo(pageControl.ActivePage.Controls[0]);
end;
function TCEEditorWidget.getEditor(index: NativeInt): TCESynMemo; function TCEEditorWidget.getEditor(index: NativeInt): TCESynMemo;
begin begin
result := TCESynMemo(pageControl.Pages[index].Controls[0]); result := TCESynMemo(pageControl.Pages[index].Controls[0]);
end; end;
procedure TCEEditorWidget.focusedEditorChanged; procedure TCEEditorWidget.focusedEditorChanged;
var
curr: TCESynMemo;
begin begin
curr := getCurrentEditor; if fDoc = nil then exit;
macRecorder.Editor := curr;
fSyncEdit.Editor := curr;
completion.Editor := curr;
// //
if pageControl.ActivePageIndex <> -1 then macRecorder.Editor := fDoc;
begin fSyncEdit.Editor := fDoc;
//CEMainForm.docFocusedNotify(Self, pageControl.ActivePageIndex); completion.Editor := fDoc;
if (pageControl.ActivePage.Caption = '') then if (pageControl.ActivePage.Caption = '') then
begin begin
fKeyChanged := true; fKeyChanged := true;
beginUpdateByDelay; beginUpdateByDelay;
end; end;
end; end;
end;
procedure TCEEditorWidget.PageControlChange(Sender: TObject); procedure TCEEditorWidget.PageControlChange(Sender: TObject);
begin begin
//http://bugs.freepascal.org/view.php?id=26320
focusedEditorChanged;
end; end;
procedure TCEEditorWidget.completionExecute(Sender: TObject); procedure TCEEditorWidget.completionExecute(Sender: TObject);
@ -189,14 +238,14 @@ begin
memo.OnKeyUp := @memoKeyDown; memo.OnKeyUp := @memoKeyDown;
memo.OnKeyPress := @memoKeyPress; memo.OnKeyPress := @memoKeyPress;
memo.OnMouseDown := @memoMouseDown; memo.OnMouseDown := @memoMouseDown;
memo.OnChange := @memoChange; //memo.OnChange := @memoChange;
memo.OnMouseMove := @memoMouseMove; memo.OnMouseMove := @memoMouseMove;
// //
pageControl.ActivePage := sheet; pageControl.ActivePage := sheet;
//http://bugs.freepascal.org/view.php?id=26320 //http://bugs.freepascal.org/view.php?id=26320
focusedEditorChanged; //focusedEditorChanged;
end; end;
procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt); procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt);
@ -222,7 +271,6 @@ end;
procedure TCEEditorWidget.memoKeyPress(Sender: TObject; var Key: char); procedure TCEEditorWidget.memoKeyPress(Sender: TObject; var Key: char);
var var
pt: Tpoint; pt: Tpoint;
curr: TCESynMemo;
begin begin
fKeyChanged := true; fKeyChanged := true;
if Key = '.' then if Key = '.' then
@ -250,65 +298,30 @@ end;
procedure TCEEditorWidget.memoChange(Sender: TObject); procedure TCEEditorWidget.memoChange(Sender: TObject);
begin begin
fKeyChanged := true;
beginUpdateByDelay;
UpdateByEvent;
end;
procedure TCEEditorWidget.projNew(const aProject: TCEProject);
begin
fProj := aProject;
end;
procedure TCEEditorWidget.projClosing(const aProject: TCEProject);
begin
fProj := nil;
end;
procedure TCEEditorWidget.projFocused(const aProject: TCEProject);
begin
fProj := aProject;
end;
procedure TCEEditorWidget.projChanged(const aProject: TCEProject);
begin
end;
procedure TCEEditorWidget.projCompile(const aProject: TCEProject);
begin
endUpdateByDelay; // warning not trigered anymore
end;
procedure TCEEditorWidget.projRun(const aProject: TCEProject);
begin
endUpdateByDelay; // warning not trigered anymore
end; end;
procedure TCEEditorWidget.getSymbolLoc; procedure TCEEditorWidget.getSymbolLoc;
var var
curr: TCESynMemo;
str: TMemoryStream; str: TMemoryStream;
srcpos: Integer; srcpos: Integer;
ftempname, fname: string; ftempname, fname: string;
begin begin
if not dcdOn then exit; if not dcdOn then exit;
// if fDoc = nil then exit;
curr := getCurrentEditor;
if curr = nil then exit;
// //
str := TMemoryStream.Create; str := TMemoryStream.Create;
try try
ftempname := curr.tempFilename; ftempname := fDoc.tempFilename;
curr.Lines.SaveToStream(str); fDoc.Lines.SaveToStream(str);
str.SaveToFile(ftempname); str.SaveToFile(ftempname);
fname := ftempname; fname := ftempname;
srcpos := curr.SelStart; srcpos := fDoc.SelStart;
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then if fDoc.GetWordAtRowCol(fDoc.LogicalCaretXY) <> '' then
ce_dcd.getSymbolLoc(fname, srcpos); ce_dcd.getSymbolLoc(fname, srcpos);
if fname <> ftempname then if fileExists(fname) then if fname <> ftempname then if fileExists(fname) then
CEMainForm.openFile(fname); CEMainForm.openFile(fname);
if srcpos <> -1 then if srcpos <> -1 then
getCurrentEditor.SelStart := srcpos; fDoc.SelStart := srcpos; // fDoc probably not be updated
finally finally
str.Free; str.Free;
end; end;
@ -316,23 +329,20 @@ end;
procedure TCEEditorWidget.getCompletionList; procedure TCEEditorWidget.getCompletionList;
var var
curr: TCESynMemo;
str: TMemoryStream; str: TMemoryStream;
srcpos: NativeInt; srcpos: NativeInt;
fname: string; fname: string;
begin begin
if not dcdOn then exit; if not dcdOn then exit;
// if fDoc = nil then exit;
curr := getCurrentEditor;
if curr = nil then exit;
// //
str := TMemoryStream.Create; str := TMemoryStream.Create;
try try
completion.Position := 0; // previous index could cause an error here. completion.Position := 0; // previous index could cause an error here.
fname := curr.tempFilename; fname := fDoc.tempFilename;
curr.Lines.SaveToStream(str); fDoc.Lines.SaveToStream(str);
str.SaveToFile(fname); str.SaveToFile(fname);
srcpos := curr.SelStart; srcpos := fDoc.SelStart;
completion.ItemList.Clear; completion.ItemList.Clear;
ce_dcd.getCompletion(fname, srcpos, completion.ItemList); ce_dcd.getCompletion(fname, srcpos, completion.ItemList);
finally finally
@ -342,7 +352,6 @@ end;
function TCEEditorWidget.getEditorHint: string; function TCEEditorWidget.getEditorHint: string;
var var
curr: TCESynMemo;
str: TMemoryStream; str: TMemoryStream;
lst: TStringList; lst: TStringList;
srcpos: NativeInt; srcpos: NativeInt;
@ -350,18 +359,16 @@ var
begin begin
result := ''; result := '';
if not dcdOn then exit; if not dcdOn then exit;
// if fDoc = nil then exit;
curr := getCurrentEditor;
if curr = nil then exit;
// //
str := TMemoryStream.Create; str := TMemoryStream.Create;
lst := TStringList.Create; lst := TStringList.Create;
try try
fname := curr.tempFilename; fname := fDoc.tempFilename;
curr.Lines.SaveToStream(str); fDoc.Lines.SaveToStream(str);
str.SaveToFile(fname); str.SaveToFile(fname);
srcpos := curr.SelStart; srcpos := fDoc.SelStart;
if curr.GetWordAtRowCol(curr.LogicalCaretXY) <> '' then if fDoc.GetWordAtRowCol(fDoc.LogicalCaretXY) <> '' then
ce_dcd.getHint(fname, srcpos, lst); ce_dcd.getHint(fname, srcpos, lst);
result := lst.Text; result := lst.Text;
finally finally
@ -373,31 +380,25 @@ end;
procedure TCEEditorWidget.UpdateByEvent; procedure TCEEditorWidget.UpdateByEvent;
const const
modstr: array[boolean] of string = ('...', 'MODIFIED'); modstr: array[boolean] of string = ('...', 'MODIFIED');
var
ed: TCESynMemo;
begin begin
ed := getCurrentEditor; if fDoc = nil then exit;
if ed = nil then exit;
// //
editorStatus.Panels[0].Text := format('%d : %d',[ed.CaretY, ed.CaretX]); editorStatus.Panels[0].Text := format('%d : %d',[fDoc.CaretY, fDoc.CaretX]);
editorStatus.Panels[1].Text := modstr[ed.modified]; editorStatus.Panels[1].Text := modstr[fDoc.modified];
editorStatus.Panels[2].Text := ed.fileName; editorStatus.Panels[2].Text := fDoc.fileName;
end; end;
procedure TCEEditorWidget.UpdateByDelay; procedure TCEEditorWidget.UpdateByDelay;
var var
dt: PMessageItemData; dt: PMessageItemData;
ed: TCESynMemo;
err: TLexError; err: TLexError;
md: string; md: string;
begin begin
ed := getCurrentEditor; if fDoc = nil then exit;
if ed = nil then exit;
if not fKeyChanged then exit; if not fKeyChanged then exit;
// //
fKeyChanged := false; fKeyChanged := false;
//CEMainForm.docChangeNotify(Self, editorIndex); if fDoc.Lines.Count = 0 then exit;
if ed.Lines.Count = 0 then exit;
// //
if fProj = nil then if fProj = nil then
CEMainForm.MessageWidget.ClearMessages(mcEditor) CEMainForm.MessageWidget.ClearMessages(mcEditor)
@ -405,14 +406,14 @@ begin
// if the source is in proj then we want to keep messages to correct mistakes. // if the source is in proj then we want to keep messages to correct mistakes.
end; end;
lex(ed.Lines.Text, tokLst); lex(fDoc.Lines.Text, tokLst);
if ed.isDSource then if fDoc.isDSource then
begin begin
checkSyntacticErrors(tokLst, errLst); checkSyntacticErrors(tokLst, errLst);
for err in errLst do begin for err in errLst do begin
dt := newMessageData; dt := newMessageData;
dt^.editor := ed; dt^.editor := fDoc;
dt^.position := point(err.position.x, err.position.y); dt^.position := point(err.position.x, err.position.y);
dt^.ctxt := mcEditor; dt^.ctxt := mcEditor;
CEMainForm.MessageWidget.addMessage(format( '%s (@line:%.4d @char:%.4d)', CEMainForm.MessageWidget.addMessage(format( '%s (@line:%.4d @char:%.4d)',
@ -421,9 +422,9 @@ begin
end; end;
md := ''; md := '';
if ed.isDSource then if fDoc.isDSource then
md := getModuleName(tokLst); md := getModuleName(tokLst);
if md = '' then md := extractFileName(ed.fileName); if md = '' then md := extractFileName(fDoc.fileName);
pageControl.ActivePage.Caption := md; pageControl.ActivePage.Caption := md;
CEMainForm.MessageWidget.scrollToBack; CEMainForm.MessageWidget.scrollToBack;

View File

@ -1015,7 +1015,7 @@ end;
procedure TCEMainForm.actFileNewRunExecute(Sender: TObject); procedure TCEMainForm.actFileNewRunExecute(Sender: TObject);
begin begin
newFile; newFile;
fEditWidg.currentEditor.Text := fDoc.Text :=
'module runnable;' + LineEnding + 'module runnable;' + LineEnding +
'' + LineEnding + '' + LineEnding +
'import std.stdio;' + LineEnding + 'import std.stdio;' + LineEnding +
@ -1098,80 +1098,61 @@ end;
{$REGION edit ------------------------------------------------------------------} {$REGION edit ------------------------------------------------------------------}
procedure TCEMainForm.actEdCopyExecute(Sender: TObject); procedure TCEMainForm.actEdCopyExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.CopyToClipboard; fDoc.CopyToClipboard;
end; end;
procedure TCEMainForm.actEdCutExecute(Sender: TObject); procedure TCEMainForm.actEdCutExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.CutToClipboard; fDoc.CutToClipboard;
end; end;
procedure TCEMainForm.actEdPasteExecute(Sender: TObject); procedure TCEMainForm.actEdPasteExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.PasteFromClipboard; fDoc.PasteFromClipboard;
end; end;
procedure TCEMainForm.actEdUndoExecute(Sender: TObject); procedure TCEMainForm.actEdUndoExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.Undo; fDoc.Undo;
end; end;
procedure TCEMainForm.actEdRedoExecute(Sender: TObject); procedure TCEMainForm.actEdRedoExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.Redo; fDoc.Redo;
end; end;
procedure TCEMainForm.actEdMacPlayExecute(Sender: TObject); procedure TCEMainForm.actEdMacPlayExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then fEditWidg.macRecorder.PlaybackMacro(curr); fEditWidg.macRecorder.PlaybackMacro(fDoc);
end; end;
procedure TCEMainForm.actEdMacStartStopExecute(Sender: TObject); procedure TCEMainForm.actEdMacStartStopExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then
begin begin
if fEditWidg.macRecorder.State = msRecording then if fEditWidg.macRecorder.State = msRecording then
fEditWidg.macRecorder.Stop fEditWidg.macRecorder.Stop
else fEditWidg.macRecorder.RecordMacro(curr); else fEditWidg.macRecorder.RecordMacro(fDoc);
end; end;
end; end;
procedure TCEMainForm.actEdIndentExecute(Sender: TObject); procedure TCEMainForm.actEdIndentExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.ExecuteCommand(ecBlockIndent, '', nil); fDoc.ExecuteCommand(ecBlockIndent, '', nil);
end; end;
procedure TCEMainForm.actEdUnIndentExecute(Sender: TObject); procedure TCEMainForm.actEdUnIndentExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := fEditWidg.currentEditor; if assigned(fDoc) then
if assigned(curr) then curr.ExecuteCommand(ecBlockUnIndent, '', nil); fDoc.ExecuteCommand(ecBlockUnIndent, '', nil);
end; end;
procedure TCEMainForm.actEdFindExecute(Sender: TObject); procedure TCEMainForm.actEdFindExecute(Sender: TObject);
@ -1184,11 +1165,11 @@ begin
if win = nil then exit; if win = nil then exit;
win.Show; win.Show;
win.BringToFront; win.BringToFront;
ed := fEditWidg.currentEditor; if fDoc = nil then exit;
if ed = nil then exit; //
if ed.SelAvail then if fDoc.SelAvail then
str := ed.SelText str := fDoc.SelText
else str := ed.Identifier; else str := fDoc.Identifier;
ffindwidg.cbToFind.Text := str; ffindwidg.cbToFind.Text := str;
ffindwidg.cbToFindChange(nil); ffindwidg.cbToFindChange(nil);
end; end;
@ -1232,9 +1213,12 @@ begin
dt^.ctxt := aCtxt; dt^.ctxt := aCtxt;
dt^.project := fProject; dt^.project := fProject;
dt^.position := getLineFromDmdMessage(msg); dt^.position := getLineFromDmdMessage(msg);
dt^.editor := getFileFromDmdMessage(msg); if openFileFromDmdMessage(msg) then
dt^.editor := fDoc
else
dt^.editor := nil;
if dt^.editor = nil then if dt^.editor = nil then
dt^.editor := EditWidget.currentEditor dt^.editor := fDoc
else else
dt^.ctxt := mcEditor; dt^.ctxt := mcEditor;
fEditWidg.endUpdatebyDelay; // messages would be cleared by the delayed module name detection. fEditWidg.endUpdatebyDelay; // messages would be cleared by the delayed module name detection.
@ -1479,15 +1463,12 @@ begin
end; end;
procedure TCEMainForm.actFileOpenContFoldExecute(Sender: TObject); procedure TCEMainForm.actFileOpenContFoldExecute(Sender: TObject);
var
curr: TCESynMemo;
begin begin
curr := EditWidget.currentEditor; if fDoc = nil then exit;
if curr = nil then exit; if not fileExists(fDoc.fileName) then exit;
if not fileExists(curr.fileName) then exit;
// //
DockMaster.GetAnchorSite(fExplWidg).Show; DockMaster.GetAnchorSite(fExplWidg).Show;
fExplWidg.expandPath(extractFilePath(curr.fileName)); fExplWidg.expandPath(extractFilePath(fDoc.fileName));
end; end;
procedure TCEMainForm.actProjCompileExecute(Sender: TObject); procedure TCEMainForm.actProjCompileExecute(Sender: TObject);
@ -1695,7 +1676,7 @@ begin
if not fileExists(fProject.fileName) then exit; if not fileExists(fProject.fileName) then exit;
// //
openFile(fProject.fileName); openFile(fProject.fileName);
EditWidget.currentEditor.Highlighter := LfmSyn; fDoc.Highlighter := LfmSyn;
end; end;
procedure TCEMainForm.actProjOptViewExecute(Sender: TObject); procedure TCEMainForm.actProjOptViewExecute(Sender: TObject);
@ -1923,24 +1904,24 @@ begin
'CFF', 'CurrentFileFile': 'CFF', 'CurrentFileFile':
begin begin
result += '`'; result += '`';
if EditWidget.currentEditor <> nil then if fDoc <> nil then
if fileExists(EditWidget.currentEditor.fileName) then if fileExists(fDoc.fileName) then
result += EditWidget.currentEditor.fileName; result += fDoc.fileName;
result += '`'; result += '`';
end; end;
'CFP', 'CurrentFilePath': 'CFP', 'CurrentFilePath':
begin begin
result += '`'; result += '`';
if EditWidget.currentEditor <> nil then if fDoc <> nil then
if fileExists(EditWidget.currentEditor.fileName) then if fileExists(fDoc.fileName) then
result += extractFilePath(EditWidget.currentEditor.fileName); result += extractFilePath(fDoc.fileName);
result += '`'; result += '`';
end; end;
'CI', 'CurrentIdentifier': 'CI', 'CurrentIdentifier':
begin begin
result += '`'; result += '`';
if EditWidget.currentEditor <> nil then if fDoc <> nil then
result += EditWidget.currentEditor.Identifier; result += fDoc.Identifier;
result += '`'; result += '`';
end; end;
'CAF', 'CoeditApplicationFile': 'CAF', 'CoeditApplicationFile':

View File

@ -85,7 +85,7 @@ type
function semanticMsgAna(const aMessg: string): TMessageKind; function semanticMsgAna(const aMessg: string): TMessageKind;
function getLineFromDmdMessage(const aMessage: string): TPoint; function getLineFromDmdMessage(const aMessage: string): TPoint;
function getFileFromDmdMessage(const aMessage: string): TCESynMemo; function openFileFromDmdMessage(const aMessage: string): boolean;
function newMessageData: PMessageItemData; function newMessageData: PMessageItemData;
implementation implementation
@ -250,7 +250,7 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEProjectMonitor -----------------------------------------------------} {$REGION ICEProjectObserver ----------------------------------------------------}
procedure TCEMessagesWidget.projNew(const aProject: TCEProject); procedure TCEMessagesWidget.projNew(const aProject: TCEProject);
begin begin
fProj := aProject; fProj := aProject;
@ -276,7 +276,7 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEMultiDocMonitor ----------------------------------------------------} {$REGION ICEMultiDocObserver ---------------------------------------------------}
procedure TCEMessagesWidget.docNew(const aDoc: TCESynMemo); procedure TCEMessagesWidget.docNew(const aDoc: TCESynMemo);
begin begin
fDoc := aDoc; fDoc := aDoc;
@ -374,7 +374,7 @@ end;
procedure TCEMessagesWidget.ClearMessages(aCtxt: TMessageContext); procedure TCEMessagesWidget.ClearMessages(aCtxt: TMessageContext);
var var
i: NativeInt; i: Integer;
dt: TMessageItemData; dt: TMessageItemData;
begin begin
for i := List.Items.Count-1 downto 0 do for i := List.Items.Count-1 downto 0 do
@ -542,7 +542,7 @@ begin
end; end;
end; end;
function getFileFromDmdMessage(const aMessage: string): TCESynMemo; function openFileFromDmdMessage(const aMessage: string): boolean;
var var
i: NativeInt; i: NativeInt;
ident: string; ident: string;
@ -550,7 +550,7 @@ var
begin begin
ident := ''; ident := '';
i := 0; i := 0;
result := nil; result := false;
while(true) do while(true) do
begin begin
inc(i); inc(i);
@ -561,7 +561,7 @@ begin
ext := extractFileExt(ident); ext := extractFileExt(ident);
if not (ext = '.d') or (ext = '.di') then exit; if not (ext = '.d') or (ext = '.di') then exit;
CEMainForm.openFile(ident); CEMainForm.openFile(ident);
result := CEMainForm.EditWidget.currentEditor; exit(true);
end; end;
ident += aMessage[i]; ident += aMessage[i];
end; end;

View File

@ -7,7 +7,7 @@ interface
uses uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Menus, ComCtrls, Buttons, ce_widget, lcltype, strutils; Menus, ComCtrls, Buttons, lcltype, strutils, ce_widget, ce_common;
type type
TCEMiniExplorerWidget = class(TCEWidget) TCEMiniExplorerWidget = class(TCEWidget)
@ -64,7 +64,7 @@ implementation
{$R *.lfm} {$R *.lfm}
uses uses
ce_main, ce_common; ce_main;
{$REGION Standard Comp/Obj------------------------------------------------------} {$REGION Standard Comp/Obj------------------------------------------------------}
constructor TCEMiniExplorerWidget.create(aIwner: TComponent); constructor TCEMiniExplorerWidget.create(aIwner: TComponent);

View File

@ -54,6 +54,7 @@ begin
EntitiesConnector.addObserver(self); EntitiesConnector.addObserver(self);
end; end;
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject); procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
begin begin
beginUpdateByEvent; beginUpdateByEvent;

View File

@ -6,7 +6,7 @@ unit ce_project;
interface interface
uses uses
Classes, SysUtils, ce_dmdwrap, ce_libman, ce_observer; Classes, SysUtils, ce_common, ce_dmdwrap, ce_libman, ce_observer;
type type
@ -79,7 +79,7 @@ type
implementation implementation
uses uses
ce_common, ce_interfaces, dialogs; ce_interfaces;
constructor TCEProject.create(aOwner: TComponent); constructor TCEProject.create(aOwner: TComponent);
begin begin
@ -92,8 +92,6 @@ begin
fSrcsCop := TStringList.Create; fSrcsCop := TStringList.Create;
fOptsColl := TCollection.create(TCompilerConfiguration); fOptsColl := TCollection.create(TCompilerConfiguration);
// //
//subjProjNew(TCEProjectSubject(fProjectSubject), self);
//
reset; reset;
addDefaults; addDefaults;
// //

View File

@ -43,7 +43,6 @@ type
procedure projClosing(const aProject: TCEProject); procedure projClosing(const aProject: TCEProject);
procedure projFocused(const aProject: TCEProject); procedure projFocused(const aProject: TCEProject);
procedure projChanged(const aProject: TCEProject); procedure projChanged(const aProject: TCEProject);
// //
function contextName: string; override; function contextName: string; override;
function contextActionCount: integer; override; function contextActionCount: integer; override;
@ -107,8 +106,8 @@ end;
{$REGION ICEProjectMonitor -----------------------------------------------------} {$REGION ICEProjectMonitor -----------------------------------------------------}
procedure TCEProjectInspectWidget.projNew(const aProject: TCEProject); procedure TCEProjectInspectWidget.projNew(const aProject: TCEProject);
begin begin
//fProject := aProject; fProject := aProject;
//UpdateByEvent; UpdateByEvent;
end; end;
procedure TCEProjectInspectWidget.projClosing(const aProject: TCEProject); procedure TCEProjectInspectWidget.projClosing(const aProject: TCEProject);

View File

@ -274,7 +274,7 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEMultiDocMonitor ----------------------------------------------------} {$REGION ICEMultiDocObserver ---------------------------------------------------}
procedure TCESearchWidget.docNew(const aDoc: TCESynMemo); procedure TCESearchWidget.docNew(const aDoc: TCESynMemo);
begin begin
fEditor := aDoc; fEditor := aDoc;

View File

@ -14,7 +14,7 @@ uses
type type
{ TCEStaticExplorerWidget } { TCEStaticExplorerWidget }
TCEStaticExplorerWidget = class(TCEWidget) TCEStaticExplorerWidget = class(TCEWidget, ICEProjectObserver, ICEMultiDocObserver)
btnRefresh: TBitBtn; btnRefresh: TBitBtn;
imgList: TImageList; imgList: TImageList;
Panel1: TPanel; Panel1: TPanel;
@ -222,7 +222,7 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEMultiDocMonitor ----------------------------------------------------} {$REGION ICEMultiDocObserver ---------------------------------------------------}
procedure TCEStaticExplorerWidget.docNew(const aDoc: TCESynMemo); procedure TCEStaticExplorerWidget.docNew(const aDoc: TCESynMemo);
begin begin
end; end;
@ -249,7 +249,7 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEProjectMonitor -----------------------------------------------------} {$REGION ICEProjectObserver ----------------------------------------------------}
procedure TCEStaticExplorerWidget.projNew(const aProject: TCEProject); procedure TCEStaticExplorerWidget.projNew(const aProject: TCEProject);
begin begin
fProj := aProject; fProj := aProject;

View File

@ -57,7 +57,7 @@ var
implementation implementation
uses uses
graphics, ce_main, forms, ce_interfaces; graphics, ce_main, ce_interfaces;
constructor TCESynMemo.Create(aOwner: TComponent); constructor TCESynMemo.Create(aOwner: TComponent);
begin begin
@ -118,6 +118,7 @@ begin
inherited; inherited;
if not Visible then exit; if not Visible then exit;
identifierToD2Syn; identifierToD2Syn;
subjDocFocused(TCEMultiDocSubject(fMultiDocSubject), self);
end; end;
procedure TCESynMemo.DoEnter; procedure TCESynMemo.DoEnter;

View File

@ -190,50 +190,6 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEMultiDocObserver ----------------------------------------------------}
//procedure TCEWidget.docNew(const aDoc: TCESynMemo);
//begin
//end;
//
//procedure TCEWidget.docFocused(const aDoc: TCESynMemo);
//begin
//end;
//
//procedure TCEWidget.docChanged(const aDoc: TCESynMemo);
//begin
//end;
//
//procedure TCEWidget.docClose(const aDoc: TCESynMemo);
//begin
//end;
{$ENDREGION}
{$REGION ICEProjectObserver -----------------------------------------------------}
//procedure TCEWidget.projNew(const aProject: TCEProject);
//begin
//end;
//
//procedure TCEWidget.projChange(const aProject: TCEProject);
//begin
//end;
//
//procedure TCEWidget.projClose(const aProject: TCEProject);
//begin
//end;
//
//procedure TCEWidget.projCompile(const aProject: TCEProject);
//begin
//end;
//
//procedure TCEWidget.projRun(const aProject: TCEProject);
//begin
//end;
//
//procedure TCEWidget.projFocused(const aProject: TCEProject);
//begin
//end;
{$ENDREGION}
{$REGION Updaters---------------------------------------------------------------} {$REGION Updaters---------------------------------------------------------------}
procedure TCEWidget.setDelayDur(aValue: Integer); procedure TCEWidget.setDelayDur(aValue: Integer);
begin begin