This commit is contained in:
Basile Burg 2014-08-18 23:56:03 +02:00
parent 5987571333
commit 3ae7eae9b3
11 changed files with 59 additions and 42 deletions

View File

@ -106,6 +106,7 @@ end;
destructor TCEEditorWidget.destroy; destructor TCEEditorWidget.destroy;
begin begin
EntitiesConnector.removeObserver(self);
tokLst.Free; tokLst.Free;
errLst.Free; errLst.Free;
inherited; inherited;
@ -120,6 +121,7 @@ end;
procedure TCEEditorWidget.docClosing(const aDoc: TCESynMemo); procedure TCEEditorWidget.docClosing(const aDoc: TCESynMemo);
begin begin
if fDoc <> aDoc then exit;
fDoc := nil; fDoc := nil;
end; end;
@ -146,6 +148,7 @@ end;
procedure TCEEditorWidget.projClosing(const aProject: TCEProject); procedure TCEEditorWidget.projClosing(const aProject: TCEProject);
begin begin
if fProj <> aProject then exit;
fProj := nil; fProj := nil;
end; end;
@ -156,6 +159,7 @@ end;
procedure TCEEditorWidget.projChanged(const aProject: TCEProject); procedure TCEEditorWidget.projChanged(const aProject: TCEProject);
begin begin
fProj := aProject;
end; end;
procedure TCEEditorWidget.projCompile(const aProject: TCEProject); procedure TCEEditorWidget.projCompile(const aProject: TCEProject);
@ -238,14 +242,9 @@ begin
memo.OnKeyUp := @memoKeyDown; memo.OnKeyUp := @memoKeyDown;
memo.OnKeyPress := @memoKeyPress; memo.OnKeyPress := @memoKeyPress;
memo.OnMouseDown := @memoMouseDown; memo.OnMouseDown := @memoMouseDown;
//memo.OnChange := @memoChange;
memo.OnMouseMove := @memoMouseMove; memo.OnMouseMove := @memoMouseMove;
// //
pageControl.ActivePage := sheet; pageControl.ActivePage := sheet;
//http://bugs.freepascal.org/view.php?id=26320
//focusedEditorChanged;
end; end;
procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt); procedure TCEEditorWidget.removeEditor(const aIndex: NativeInt);

View File

@ -127,7 +127,8 @@ type
implementation implementation
uses
ce_main;
function TCEMultiDocSubject.acceptObserver(aObject: TObject): boolean; function TCEMultiDocSubject.acceptObserver(aObject: TObject): boolean;
begin begin

View File

@ -3044,20 +3044,4 @@ object CEMainForm: TCEMainForm
OnShowHint = ApplicationProperties1ShowHint OnShowHint = ApplicationProperties1ShowHint
left = 96 left = 96
end end
object LfmSyn: TSynLFMSyn
DefaultFilter = 'Fichiers fiches Lazarus (*.lfm)|*.lfm'
Enabled = False
CommentAttri.Foreground = clGreen
CommentAttri.FrameEdges = sfeAround
IdentifierAttri.Foreground = clBlack
IdentifierAttri.FrameEdges = sfeAround
KeyAttri.Foreground = clNavy
KeyAttri.FrameEdges = sfeAround
NumberAttri.Foreground = clPurple
NumberAttri.FrameEdges = sfeAround
SpaceAttri.FrameEdges = sfeAround
StringAttri.Foreground = clBlue
StringAttri.FrameEdges = sfeAround
left = 128
end
end end

View File

@ -166,7 +166,6 @@ type
MenuItem7: TMenuItem; MenuItem7: TMenuItem;
MenuItem8: TMenuItem; MenuItem8: TMenuItem;
MenuItem9: TMenuItem; MenuItem9: TMenuItem;
LfmSyn: TSynLFMSyn;
procedure actEdFindExecute(Sender: TObject); procedure actEdFindExecute(Sender: TObject);
procedure actEdFindNextExecute(Sender: TObject); procedure actEdFindNextExecute(Sender: TObject);
procedure actFileAddToProjExecute(Sender: TObject); procedure actFileAddToProjExecute(Sender: TObject);
@ -682,6 +681,7 @@ end;
destructor TCEMainForm.destroy; destructor TCEMainForm.destroy;
begin begin
EntitiesConnector.removeObserver(self);
SaveSettings; SaveSettings;
// //
KillPlugs; KillPlugs;
@ -900,6 +900,7 @@ end;
procedure TCEMainForm.docClosing(const aDoc: TCESynMemo); procedure TCEMainForm.docClosing(const aDoc: TCESynMemo);
begin begin
if aDoc <> fDoc then exit;
fDoc := nil; fDoc := nil;
end; end;
@ -910,6 +911,7 @@ end;
procedure TCEMainForm.docChanged(const aDoc: TCESynMemo); procedure TCEMainForm.docChanged(const aDoc: TCESynMemo);
begin begin
fDoc := aDoc;
end; end;
{$ENDREGION} {$ENDREGION}
@ -1158,7 +1160,6 @@ end;
procedure TCEMainForm.actEdFindExecute(Sender: TObject); procedure TCEMainForm.actEdFindExecute(Sender: TObject);
var var
win: TAnchorDockHostSite; win: TAnchorDockHostSite;
ed: TCESynMemo;
str: string; str: string;
begin begin
win := DockMaster.GetAnchorSite(fFindWidg); win := DockMaster.GetAnchorSite(fFindWidg);
@ -1214,13 +1215,8 @@ begin
dt^.project := fProject; dt^.project := fProject;
dt^.position := getLineFromDmdMessage(msg); dt^.position := getLineFromDmdMessage(msg);
if openFileFromDmdMessage(msg) then if openFileFromDmdMessage(msg) then
dt^.editor := fDoc
else
dt^.editor := nil;
if dt^.editor = nil then
dt^.editor := fDoc
else
dt^.ctxt := mcEditor; dt^.ctxt := mcEditor;
dt^.editor := fDoc;
fEditWidg.endUpdatebyDelay; // messages would be cleared by the delayed module name detection. fEditWidg.endUpdatebyDelay; // messages would be cleared by the delayed module name detection.
fMesgWidg.addMessage(msg, dt); fMesgWidg.addMessage(msg, dt);
application.ProcessMessages; application.ProcessMessages;

View File

@ -33,8 +33,8 @@ type
fActSaveMsg: TAction; fActSaveMsg: TAction;
fActCopyMsg: TAction; fActCopyMsg: TAction;
fActSelAll: TAction; fActSelAll: TAction;
fProj: TCEProject;
fMaxMessCnt: Integer; fMaxMessCnt: Integer;
fProj: TCEProject;
fDoc: TCESynMemo; fDoc: TCESynMemo;
procedure filterMessages; procedure filterMessages;
procedure clearOutOfRangeMessg; procedure clearOutOfRangeMessg;
@ -53,6 +53,7 @@ type
property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount default 125; property maxMessageCount: Integer read fMaxMessCnt write setMaxMessageCount default 125;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override;
// //
procedure scrollToBack; procedure scrollToBack;
procedure addMessage(const aMsg: string; aCtxt: TMessageContext = mcUnknown); procedure addMessage(const aMsg: string; aCtxt: TMessageContext = mcUnknown);
@ -123,6 +124,12 @@ begin
EntitiesConnector.addObserver(self); EntitiesConnector.addObserver(self);
end; end;
destructor TCEMessagesWidget.destroy;
begin
EntitiesConnector.removeObserver(self);
Inherited;
end;
procedure TCEMessagesWidget.listDeletion(Sender: TObject; Node: TTreeNode); procedure TCEMessagesWidget.listDeletion(Sender: TObject; Node: TTreeNode);
begin begin
if node.Data <> nil then if node.Data <> nil then
@ -299,6 +306,7 @@ end;
procedure TCEMessagesWidget.docChanged(const aDoc: TCESynMemo); procedure TCEMessagesWidget.docChanged(const aDoc: TCESynMemo);
begin begin
fDoc := aDoc;
end; end;
{$ENDREGION} {$ENDREGION}
@ -561,7 +569,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);
exit(true); result := true;
end; end;
ident += aMessage[i]; ident += aMessage[i];
end; end;

View File

@ -132,7 +132,8 @@ begin
fUpdating := true; fUpdating := true;
fObservers.Remove(anObserver); fObservers.Remove(anObserver);
for i := 0 to fSubjects.Count-1 do for i := 0 to fSubjects.Count-1 do
(fSubjects[i] as ICESubject).removeObserver(anObserver); if fSubjects[i] <> nil then
(fSubjects[i] as ICESubject).removeObserver(anObserver);
end; end;
procedure TCEEntitiesConnector.removeSubject(aSubject: TObject); procedure TCEEntitiesConnector.removeSubject(aSubject: TObject);

View File

@ -35,6 +35,7 @@ type
procedure UpdateByEvent; override; procedure UpdateByEvent; override;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override;
// //
procedure projNew(const aProject: TCEProject); procedure projNew(const aProject: TCEProject);
procedure projClosing(const aProject: TCEProject); procedure projClosing(const aProject: TCEProject);
@ -54,6 +55,11 @@ begin
EntitiesConnector.addObserver(self); EntitiesConnector.addObserver(self);
end; end;
destructor TCEProjectConfigurationWidget.destroy;
begin
EntitiesConnector.removeObserver(self);
inherited;
end;
procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject); procedure TCEProjectConfigurationWidget.projNew(const aProject: TCEProject);
begin begin

View File

@ -38,6 +38,7 @@ type
procedure actOpenFileExecute(sender: TObject); procedure actOpenFileExecute(sender: TObject);
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override;
// //
procedure projNew(const aProject: TCEProject); procedure projNew(const aProject: TCEProject);
procedure projClosing(const aProject: TCEProject); procedure projClosing(const aProject: TCEProject);
@ -75,6 +76,13 @@ begin
// //
EntitiesConnector.addObserver(self); EntitiesConnector.addObserver(self);
end; end;
destructor TCEProjectInspectWidget.destroy;
begin
EntitiesConnector.removeObserver(self);
inherited;
end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEContextualActions---------------------------------------------------} {$REGION ICEContextualActions---------------------------------------------------}

View File

@ -97,6 +97,7 @@ end;
destructor TCESearchWidget.Destroy; destructor TCESearchWidget.Destroy;
begin begin
EntitiesConnector.removeObserver(self);
fSearchMru.Free; fSearchMru.Free;
fReplaceMru.Free; fReplaceMru.Free;
inherited; inherited;

View File

@ -59,6 +59,7 @@ type
property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus; property refreshOnFocus: boolean read fRefreshOnFocus write fRefreshOnFocus;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override;
// //
procedure docNew(const aDoc: TCESynMemo); procedure docNew(const aDoc: TCESynMemo);
procedure docClosing(const aDoc: TCESynMemo); procedure docClosing(const aDoc: TCESynMemo);
@ -132,6 +133,13 @@ begin
// //
EntitiesConnector.addObserver(self); EntitiesConnector.addObserver(self);
end; end;
destructor TCEStaticExplorerWidget.destroy;
begin
EntitiesConnector.removeObserver(self);
inherited;
end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEWidgetPersist ------------------------------------------------------} {$REGION ICEWidgetPersist ------------------------------------------------------}
@ -225,6 +233,8 @@ end;
{$REGION ICEMultiDocObserver ---------------------------------------------------} {$REGION ICEMultiDocObserver ---------------------------------------------------}
procedure TCEStaticExplorerWidget.docNew(const aDoc: TCESynMemo); procedure TCEStaticExplorerWidget.docNew(const aDoc: TCESynMemo);
begin begin
fDoc := aDoc;
beginUpdateByDelay;
end; end;
procedure TCEStaticExplorerWidget.docClosing(const aDoc: TCESynMemo); procedure TCEStaticExplorerWidget.docClosing(const aDoc: TCESynMemo);

View File

@ -8,7 +8,7 @@ interface
uses uses
Classes, SysUtils, SynEdit, SynMemo, ce_d2syn, SynEditHighlighter, controls, Classes, SysUtils, SynEdit, SynMemo, ce_d2syn, SynEditHighlighter, controls,
lcltype, LazSynEditText, SynPluginSyncroEdit, SynEditKeyCmds, ce_project, lcltype, LazSynEditText, SynPluginSyncroEdit, SynEditKeyCmds, ce_project,
SynEditMouseCmds, ce_common, ce_observer; SynHighlighterLFM, SynEditMouseCmds, ce_common, ce_observer;
type type
TCESynMemo = class(TSynMemo) TCESynMemo = class(TSynMemo)
@ -53,11 +53,12 @@ type
var var
D2Syn: TSynD2Syn; D2Syn: TSynD2Syn;
LfmSyn: TSynLfmSyn;
implementation implementation
uses uses
graphics, ce_main, ce_interfaces; graphics, ce_interfaces;
constructor TCESynMemo.Create(aOwner: TComponent); constructor TCESynMemo.Create(aOwner: TComponent);
begin begin
@ -83,14 +84,12 @@ begin
Highlighter := D2Syn; Highlighter := D2Syn;
D2Syn.FoldKinds := [fkBrackets, fkComments1, fkComments2, fkStrings]; D2Syn.FoldKinds := [fkBrackets, fkComments1, fkComments2, fkStrings];
// //
fTempFileName := GetTempDir(false) + 'temp_' + uniqueObjStr(self) + '.d';
fFilename := '<new document>'; fFilename := '<new document>';
fModified := false; fModified := false;
ShowHint := true; ShowHint := true;
TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify); TextBuffer.AddNotifyHandler(senrUndoRedoAdded, @changeNotify);
//
// avoid many call to get envir.string
fTempFileName := GetTempDir(false) + 'temp_' + uniqueObjStr(self) + '.d';
fMultiDocSubject := TCEMultiDocSubject.create; fMultiDocSubject := TCEMultiDocSubject.create;
subjDocNew(TCEMultiDocSubject(fMultiDocSubject), self); subjDocNew(TCEMultiDocSubject(fMultiDocSubject), self);
end; end;
@ -132,7 +131,7 @@ procedure TCESynMemo.SetHighlighter(const Value: TSynCustomHighlighter);
begin begin
inherited; inherited;
fIsDSource := Highlighter = D2Syn; fIsDSource := Highlighter = D2Syn;
fIsConfig := Highlighter = CEMainForm.LfmSyn; fIsConfig := Highlighter = LfmSyn;
end; end;
procedure TCESynMemo.identifierToD2Syn; procedure TCESynMemo.identifierToD2Syn;
@ -168,7 +167,8 @@ begin
fFilename := aFilename; fFilename := aFilename;
FileAge(fFilename, fFileDate); FileAge(fFilename, fFileDate);
fModified := false; fModified := false;
subjDocChanged(TCEMultiDocSubject(fMultiDocSubject), self); if fFilename <> fTempFileName then
subjDocChanged(TCEMultiDocSubject(fMultiDocSubject), self);
end; end;
procedure TCESynMemo.save; procedure TCESynMemo.save;
@ -176,7 +176,8 @@ begin
Lines.SaveToFile(fFilename); Lines.SaveToFile(fFilename);
FileAge(fFilename, fFileDate); FileAge(fFilename, fFileDate);
fModified := false; fModified := false;
subjDocChanged(TCEMultiDocSubject(fMultiDocSubject), self); if fFilename <> fTempFileName then
subjDocChanged(TCEMultiDocSubject(fMultiDocSubject), self);
end; end;
procedure TCESynMemo.checkFileDate; procedure TCESynMemo.checkFileDate;
@ -219,6 +220,8 @@ end;
initialization initialization
D2Syn := TSynD2Syn.create(nil); D2Syn := TSynD2Syn.create(nil);
LfmSyn := TSynLFMSyn.Create(nil);
finalization finalization
D2Syn.free; D2Syn.free;
LfmSyn.Free;
end. end.