mirror of https://gitlab.com/basile.b/dexed.git
or_1
This commit is contained in:
parent
da52e21153
commit
4a43e6200d
|
@ -135,7 +135,7 @@
|
||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item6>
|
</Item6>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="23">
|
<Units Count="24">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="coedit.lpr"/>
|
<Filename Value="coedit.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
|
@ -281,6 +281,11 @@
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
<UnitName Value="ce_customtools"/>
|
<UnitName Value="ce_customtools"/>
|
||||||
</Unit22>
|
</Unit22>
|
||||||
|
<Unit23>
|
||||||
|
<Filename Value="..\src\ce_observer.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<UnitName Value="ce_observer"/>
|
||||||
|
</Unit23>
|
||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
|
|
|
@ -7,7 +7,7 @@ uses
|
||||||
cthreads,
|
cthreads,
|
||||||
{$ENDIF}{$ENDIF}
|
{$ENDIF}{$ENDIF}
|
||||||
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols,
|
Interfaces, Forms, lazcontrols, runtimetypeinfocontrols,
|
||||||
ce_main, ce_dcd;
|
ce_main, ce_dcd, ce_observer;
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_common;
|
unit ce_common;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_customtools;
|
unit ce_customtools;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_d2syn;
|
unit ce_d2syn;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
@ -465,6 +465,7 @@ end;
|
||||||
//TODO-cstring literals: delimited strings.
|
//TODO-cstring literals: delimited strings.
|
||||||
//TODO-ccomments: correct nested comments handling (inc/dec)
|
//TODO-ccomments: correct nested comments handling (inc/dec)
|
||||||
//TODO-cfeature: something like pascal {$region} : /*folder blabla*/ /*endfolder*/
|
//TODO-cfeature: something like pascal {$region} : /*folder blabla*/ /*endfolder*/
|
||||||
|
//TODO-bugfix: token string, curly brackets pairs must be even.
|
||||||
|
|
||||||
{$BOOLEVAL ON}
|
{$BOOLEVAL ON}
|
||||||
procedure TSynD2Syn.next;
|
procedure TSynD2Syn.next;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
unit ce_dcd;
|
unit ce_dcd;
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_dlang;
|
unit ce_dlang;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_dlangutils;
|
unit ce_dlangutils;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_dmdwrap;
|
unit ce_dmdwrap;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_editor;
|
unit ce_editor;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ uses
|
||||||
Classes, SysUtils, FileUtil, ExtendedNotebook, Forms, Controls, lcltype,
|
Classes, SysUtils, FileUtil, ExtendedNotebook, Forms, Controls, lcltype,
|
||||||
Graphics, SynEditKeyCmds, ComCtrls, SynEditHighlighter, ExtCtrls, Menus,
|
Graphics, SynEditKeyCmds, ComCtrls, SynEditHighlighter, ExtCtrls, Menus,
|
||||||
SynEditHighlighterFoldBase, SynMacroRecorder, SynPluginSyncroEdit, SynEdit,
|
SynEditHighlighterFoldBase, SynMacroRecorder, SynPluginSyncroEdit, SynEdit,
|
||||||
SynHighlighterLFM, SynCompletion, AnchorDocking, ce_widget, ce_d2syn,
|
SynHighlighterLFM, SynCompletion, AnchorDocking, ce_widget, ce_d2syn, ce_widgettypes,
|
||||||
ce_synmemo, ce_dlang, ce_project, ce_common, types, ce_dcd;
|
ce_synmemo, ce_dlang, ce_project, ce_common, types, ce_dcd, ce_observer;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ type
|
||||||
private
|
private
|
||||||
fKeyChanged: boolean;
|
fKeyChanged: boolean;
|
||||||
fProj: TCEProject;
|
fProj: TCEProject;
|
||||||
|
fMultiDocSubject: TCEMultiDocSubject;
|
||||||
|
|
||||||
// http://bugs.freepascal.org/view.php?id=26329
|
// http://bugs.freepascal.org/view.php?id=26329
|
||||||
fSyncEdit: TSynPluginSyncroEdit;
|
fSyncEdit: TSynPluginSyncroEdit;
|
||||||
|
@ -94,10 +95,14 @@ begin
|
||||||
finally
|
finally
|
||||||
bmp.Free;
|
bmp.Free;
|
||||||
end;
|
end;
|
||||||
|
//
|
||||||
|
fMultiDocSubject := TCEMultiDocSubject.create;
|
||||||
|
EntitiesConnector.addSubject(fMultiDocSubject);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCEEditorWidget.destroy;
|
destructor TCEEditorWidget.destroy;
|
||||||
begin
|
begin
|
||||||
|
fMultiDocSubject.Free;
|
||||||
tokLst.Free;
|
tokLst.Free;
|
||||||
errLst.Free;
|
errLst.Free;
|
||||||
inherited;
|
inherited;
|
||||||
|
@ -144,6 +149,8 @@ begin
|
||||||
beginUpdateByDelay;
|
beginUpdateByDelay;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
self.fMultiDocSubject.docFocused(curr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
procedure TCEEditorWidget.PageControlChange(Sender: TObject);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_libman;
|
unit ce_libman;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_libmaneditor;
|
unit ce_libmaneditor;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,8 @@ uses
|
||||||
Dialogs, Menus, ActnList, ExtCtrls, process, XMLPropStorage, ComCtrls, dynlibs,
|
Dialogs, Menus, ActnList, ExtCtrls, process, XMLPropStorage, ComCtrls, dynlibs,
|
||||||
ce_common, ce_dmdwrap, ce_project, ce_dcd, ce_plugin, ce_synmemo, ce_widget,
|
ce_common, ce_dmdwrap, ce_project, ce_dcd, ce_plugin, ce_synmemo, ce_widget,
|
||||||
ce_messages, ce_widgettypes, ce_editor, ce_projinspect, ce_projconf, ce_search,
|
ce_messages, ce_widgettypes, ce_editor, ce_projinspect, ce_projconf, ce_search,
|
||||||
ce_staticexplorer, ce_miniexplorer, ce_libman, ce_libmaneditor, ce_customtools;
|
ce_staticexplorer, ce_miniexplorer, ce_libman, ce_libmaneditor, ce_customtools,
|
||||||
|
ce_observer;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_messages;
|
unit ce_messages;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_miniexplorer;
|
unit ce_miniexplorer;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
unit ce_observer;
|
||||||
|
|
||||||
|
{$MODE OBJFPC}{$H+}
|
||||||
|
{$INTERFACES CORBA}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, Contnrs;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
(**
|
||||||
|
* Manages the connections between the observers and their subjects in the whole program.
|
||||||
|
*)
|
||||||
|
TCEEntitiesConnector = class
|
||||||
|
private
|
||||||
|
fObservers: TObjectList;
|
||||||
|
fSubjects: TObjectList;
|
||||||
|
fUpdating: boolean;
|
||||||
|
procedure updateEntities;
|
||||||
|
public
|
||||||
|
constructor create;
|
||||||
|
destructor destroy; override;
|
||||||
|
//
|
||||||
|
procedure beginUpdate;
|
||||||
|
procedure endUpdate;
|
||||||
|
procedure addObserver(anObserver: TObject);
|
||||||
|
procedure addSubject(aSubject: TObject);
|
||||||
|
procedure removeObserver(anObserver: TObject);
|
||||||
|
procedure removeSubject(aSubject: TObject);
|
||||||
|
end;
|
||||||
|
|
||||||
|
(**
|
||||||
|
* Interface for a Coedit subject. Basically designed to hold a list of observer
|
||||||
|
*)
|
||||||
|
ICESubject = interface
|
||||||
|
// an observer is proposed. anObserver is not necessarly compatible.
|
||||||
|
procedure addObserver(anObserver: TObject);
|
||||||
|
// anObserver must be removed.
|
||||||
|
procedure removeObserver(anObserver: TObject);
|
||||||
|
// optionally implemented to trigger all the methods of the observer interface.
|
||||||
|
procedure updateObservers;
|
||||||
|
end;
|
||||||
|
|
||||||
|
(**
|
||||||
|
* Standard implementation of an ICESubject
|
||||||
|
*)
|
||||||
|
TCECustomSubject = class(ICESubject)
|
||||||
|
protected
|
||||||
|
fObservers: TObjectList;
|
||||||
|
// test for a specific interface when adding an observer.
|
||||||
|
function acceptObserver(aObject: TObject): boolean; virtual;
|
||||||
|
public
|
||||||
|
constructor create;
|
||||||
|
destructor destroy; override;
|
||||||
|
//
|
||||||
|
procedure addObserver(anObserver: TObject);
|
||||||
|
procedure removeObserver(anObserver: TObject);
|
||||||
|
procedure updateObservers; virtual;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ICEObserver = interface
|
||||||
|
//function subjectType: ICESubject;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
EntitiesConnector: TCEEntitiesConnector = nil;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$REGION TCEEntitiesConnector --------------------------------------------------}
|
||||||
|
constructor TCEEntitiesConnector.create;
|
||||||
|
begin
|
||||||
|
fObservers := TObjectList.create(false);
|
||||||
|
fSubjects := TObjectList.create(false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCEEntitiesConnector.destroy;
|
||||||
|
begin
|
||||||
|
fObservers.Free;
|
||||||
|
fSubjects.Free;
|
||||||
|
inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.updateEntities;
|
||||||
|
var
|
||||||
|
i,j: Integer;
|
||||||
|
begin
|
||||||
|
fUpdating := false;
|
||||||
|
for i := 0 to fSubjects.Count-1 do
|
||||||
|
begin
|
||||||
|
if (fSubjects[i] as ICESubject) = nil then
|
||||||
|
continue;
|
||||||
|
for j := 0 to fObservers.Count-1 do
|
||||||
|
begin
|
||||||
|
if (fSubjects[i] as ICEObserver) <> nil then
|
||||||
|
if fSubjects[i] <> fObservers[j] then
|
||||||
|
(fSubjects[i] as ICESubject).addObserver(fObservers[j]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.beginUpdate;
|
||||||
|
begin
|
||||||
|
fUpdating := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.endUpdate;
|
||||||
|
begin
|
||||||
|
updateEntities;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.addObserver(anObserver: TObject);
|
||||||
|
begin
|
||||||
|
if (anObserver as ICEObserver) = nil then
|
||||||
|
exit;
|
||||||
|
if fObservers.IndexOf(anObserver) <> -1 then
|
||||||
|
exit;
|
||||||
|
fUpdating := true;
|
||||||
|
fObservers.Add(anObserver);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.addSubject(aSubject: TObject);
|
||||||
|
begin
|
||||||
|
if (aSubject as ICESubject) = nil then
|
||||||
|
exit;
|
||||||
|
if fSubjects.IndexOf(aSubject) <> -1 then
|
||||||
|
exit;
|
||||||
|
fUpdating := true;
|
||||||
|
fSubjects.Add(aSubject);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.removeObserver(anObserver: TObject);
|
||||||
|
begin
|
||||||
|
fUpdating := true;
|
||||||
|
fObservers.Remove(anObserver);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEntitiesConnector.removeSubject(aSubject: TObject);
|
||||||
|
begin
|
||||||
|
fUpdating := true;
|
||||||
|
fSubjects.Remove(aSubject);
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
{$REGION TCECustomSubject --------------------------------------------------}
|
||||||
|
constructor TCECustomSubject.create;
|
||||||
|
begin
|
||||||
|
fObservers := TObjectList.create(false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TCECustomSubject.destroy;
|
||||||
|
begin
|
||||||
|
fObservers.Free;
|
||||||
|
Inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCECustomSubject.acceptObserver(aObject: TObject): boolean;
|
||||||
|
begin
|
||||||
|
exit(false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCECustomSubject.addObserver(anObserver: TObject);
|
||||||
|
begin
|
||||||
|
if not acceptObserver(anObserver) then
|
||||||
|
exit;
|
||||||
|
if fObservers.IndexOf(anObserver) <> -1 then
|
||||||
|
exit;
|
||||||
|
fObservers.Add(anObserver);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCECustomSubject.removeObserver(anObserver: TObject);
|
||||||
|
begin
|
||||||
|
fObservers.Remove(anObserver);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCECustomSubject.updateObservers;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
{$ENDREGION}
|
||||||
|
|
||||||
|
initialization
|
||||||
|
EntitiesConnector := TCEEntitiesConnector.create;
|
||||||
|
finalization
|
||||||
|
EntitiesConnector.Free;
|
||||||
|
EntitiesConnector := nil;
|
||||||
|
end.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_plugin;
|
unit ce_plugin;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_projconf;
|
unit ce_projconf;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_project;
|
unit ce_project;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_projinspect;
|
unit ce_projinspect;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_search;
|
unit ce_search;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_staticexplorer;
|
unit ce_staticexplorer;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_synmemo;
|
unit ce_synmemo;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit ce_widget;
|
unit ce_widget;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ type
|
||||||
* Base type for an UI module.
|
* Base type for an UI module.
|
||||||
*)
|
*)
|
||||||
PTCEWidget = ^TCEWidget;
|
PTCEWidget = ^TCEWidget;
|
||||||
TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocMonitor, ICEWidgetPersist)
|
TCEWidget = class(TForm, ICEContextualActions, ICEProjectMonitor, ICEMultiDocObserver, ICEWidgetPersist)
|
||||||
Content: TPanel;
|
Content: TPanel;
|
||||||
Back: TPanel;
|
Back: TPanel;
|
||||||
contextMenu: TPopupMenu;
|
contextMenu: TPopupMenu;
|
||||||
|
@ -203,7 +203,7 @@ begin
|
||||||
end;
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION ICEMultiDocMonitor ----------------------------------------------------}
|
{$REGION ICEMultiDocObserver ----------------------------------------------------}
|
||||||
procedure TCEWidget.docNew(const aDoc: TCESynMemo);
|
procedure TCEWidget.docNew(const aDoc: TCESynMemo);
|
||||||
begin
|
begin
|
||||||
end;
|
end;
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
unit ce_widgettypes;
|
unit ce_widgettypes;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$MODE OBJFPC}{$H+}
|
||||||
|
{$INTERFACES CORBA}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, actnList, ce_synmemo, ce_project;
|
Classes, SysUtils, actnList, menus, ce_synmemo, ce_project, ce_observer;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -37,7 +38,7 @@ type
|
||||||
(**
|
(**
|
||||||
* An implementer is informed about the current file(s).
|
* An implementer is informed about the current file(s).
|
||||||
*)
|
*)
|
||||||
ICEMultiDocMonitor = interface
|
ICEMultiDocObserver = interface(ICEObserver)
|
||||||
// the new document aDoc has been created (empty, runnable, project source, ...).
|
// the new document aDoc has been created (empty, runnable, project source, ...).
|
||||||
procedure docNew(const aDoc: TCESynMemo);
|
procedure docNew(const aDoc: TCESynMemo);
|
||||||
// aDoc is the document being edited.
|
// aDoc is the document being edited.
|
||||||
|
@ -48,6 +49,19 @@ type
|
||||||
procedure docClose(const aDoc: TCESynMemo);
|
procedure docClose(const aDoc: TCESynMemo);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
(**
|
||||||
|
* An implementer informs some ICEMultiDocObserver about the current file(s)
|
||||||
|
*)
|
||||||
|
TCEMultiDocSubject = class(TCECustomSubject, ICEMultiDocObserver)
|
||||||
|
protected
|
||||||
|
function acceptObserver(aObject: TObject): boolean; override;
|
||||||
|
public
|
||||||
|
procedure docNew(const aDoc: TCESynMemo);
|
||||||
|
procedure docFocused(const aDoc: TCESynMemo);
|
||||||
|
procedure docChanged(const aDoc: TCESynMemo);
|
||||||
|
procedure docClose(const aDoc: TCESynMemo);
|
||||||
|
end;
|
||||||
|
|
||||||
(**
|
(**
|
||||||
* An implementer is informed about the current project(s).
|
* An implementer is informed about the current project(s).
|
||||||
*)
|
*)
|
||||||
|
@ -66,5 +80,51 @@ type
|
||||||
procedure projFocused(const aProject: TCEProject); // rename: projSelected or projActivated
|
procedure projFocused(const aProject: TCEProject); // rename: projSelected or projActivated
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
(**
|
||||||
|
* An implementer can add a mainmenu entry.
|
||||||
|
*)
|
||||||
|
ICEMainMenuProvider = interface(ICEObserver)
|
||||||
|
// item must contain the full items tree to be added
|
||||||
|
procedure menuDeclare(out item: TMenuItem);
|
||||||
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
function TCEMultiDocSubject.acceptObserver(aObject: TObject): boolean;
|
||||||
|
begin
|
||||||
|
result := (aObject as ICEMultiDocObserver) <> nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMultiDocSubject.docNew(const aDoc: TCESynMemo);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:= 0 to fObservers.Count-1 do
|
||||||
|
(fObservers.Items[i] as ICEMultiDocObserver).docNew(aDoc);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMultiDocSubject.docFocused(const aDoc: TCESynMemo);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:= 0 to fObservers.Count-1 do
|
||||||
|
(fObservers.Items[i] as ICEMultiDocObserver).docFocused(aDoc);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMultiDocSubject.docChanged(const aDoc: TCESynMemo);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:= 0 to fObservers.Count-1 do
|
||||||
|
(fObservers.Items[i] as ICEMultiDocObserver).docChanged(aDoc);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEMultiDocSubject.docClose(const aDoc: TCESynMemo);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:= 0 to fObservers.Count-1 do
|
||||||
|
(fObservers.Items[i] as ICEMultiDocObserver).docClose(aDoc);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
Loading…
Reference in New Issue