diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi
index b074b3c4..71c9ac44 100644
--- a/lazproj/coedit.lpi
+++ b/lazproj/coedit.lpi
@@ -176,6 +176,7 @@
+
@@ -188,10 +189,12 @@
+
+
@@ -199,6 +202,7 @@
+
@@ -226,6 +230,7 @@
+
@@ -244,6 +249,7 @@
+
@@ -264,6 +270,7 @@
+
@@ -294,10 +301,12 @@
+
+
@@ -310,7 +319,6 @@
-
@@ -330,6 +338,7 @@
+
@@ -337,7 +346,6 @@
-
diff --git a/src/ce_dcd.pas b/src/ce_dcd.pas
index 1e2f1f23..1c649ce9 100644
--- a/src/ce_dcd.pas
+++ b/src/ce_dcd.pas
@@ -28,16 +28,16 @@ type
fClient, fServer: TProcess;
fAvailable: boolean;
fDoc: TCESynMemo;
- fProj: TCEProject;
+ fProj: TCENativeProject;
procedure killServer;
procedure terminateClient;
procedure waitClient;
//
- procedure projNew(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
//
procedure docNew(aDoc: TCESynMemo);
procedure docFocused(aDoc: TCESynMemo);
@@ -112,18 +112,21 @@ end;
{$ENDREGION}
{$REGION ICEProjectObserver ----------------------------------------------------}
-procedure TCEDcdWrapper.projNew(aProject: TCEProject);
+procedure TCEDcdWrapper.projNew(aProject: ICECommonProject);
begin
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
end;
-procedure TCEDcdWrapper.projChanged(aProject: TCEProject);
+procedure TCEDcdWrapper.projChanged(aProject: ICECommonProject);
var
i: Integer;
fold: string;
folds: TStringList;
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
if fProj = nil then
exit;
@@ -148,18 +151,22 @@ begin
end;
end;
-procedure TCEDcdWrapper.projClosing(aProject: TCEProject);
+procedure TCEDcdWrapper.projClosing(aProject: ICECommonProject);
begin
- if fProj <> aProject then exit;
+ if fProj <> aProject.getProject then
+ exit;
fProj := nil;
end;
-procedure TCEDcdWrapper.projFocused(aProject: TCEProject);
+procedure TCEDcdWrapper.projFocused(aProject: ICECommonProject);
begin
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
end;
-procedure TCEDcdWrapper.projCompiling(aProject: TCEProject);
+procedure TCEDcdWrapper.projCompiling(aProject: ICECommonProject);
begin
end;
{$ENDREGION}
diff --git a/src/ce_interfaces.pas b/src/ce_interfaces.pas
index a7a606c8..834a9114 100644
--- a/src/ce_interfaces.pas
+++ b/src/ce_interfaces.pas
@@ -6,10 +6,45 @@ interface
uses
Classes, SysUtils, actnList, menus, process,
- ce_synmemo, ce_project, ce_observer;
+ ce_synmemo, ce_observer;
type
+ // describes the project kind. Used as a hint to cast ICECommonProject.getProject()
+ TCEProjectKind = (pkNative, pkDub);
+
+ (**
+ * Common project interface
+ *)
+ ICECommonProject = interface
+ ['ICECommonProject']
+ function getKind: TCEProjectKind;
+ // returns an untyped object that can be casted using getSpecialization()
+ function getProject: TObject;
+
+ //// project file
+ //function filename: string;
+ //procedure loadFromFile(const aFilename: string);
+ //procedure saveToFile(const aFilename: string);
+ //procedure save;
+ //
+ //// common project properties
+ //function sourceCount: integer;
+ //function source(index: integer): string;
+ //function stringImportCount: integer;
+ //function stringImport(index: integer): string;
+ //function moduleImportCount: integer;
+ //function moduleImport(index: integer): string;
+ //function configurationCount: integer;
+ //function configuration(index: integer): string;
+ //function outputFilename: string;
+ //
+ //// common actions
+ //function compile: boolean;
+
+
+ end;
+
(**
* An implementer declares some actions on demand.
*)
@@ -55,15 +90,15 @@ type
ICEProjectObserver = interface
['ICEProjectObserver']
// aProject has been created/opened
- procedure projNew(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
// aProject has been modified: switches, source name, ...
- procedure projChanged(aProject: TCEProject);
+ procedure projChanged(aProject: ICECommonProject);
// aProject is about to be closed.
- procedure projClosing(aProject: TCEProject);
+ procedure projClosing(aProject: ICECommonProject);
// not called yet: aProject is always the same
- procedure projFocused(aProject: TCEProject);
+ procedure projFocused(aProject: ICECommonProject);
// aProject is about to be compiled
- procedure projCompiling(aProject: TCEProject);
+ procedure projCompiling(aProject: ICECommonProject);
end;
(**
* An implementer informs some ICEProjectObserver about the current project(s)
@@ -258,11 +293,11 @@ type
(**
* TCEProjectSubject primitives.
*)
- procedure subjProjNew(aSubject: TCEProjectSubject; aProj: TCEProject); {$IFDEF RELEASE}inline;{$ENDIF}
- procedure subjProjClosing(aSubject: TCEProjectSubject; aProj: TCEProject); {$IFDEF RELEASE}inline;{$ENDIF}
- procedure subjProjFocused(aSubject: TCEProjectSubject; aProj: TCEProject); {$IFDEF RELEASE}inline;{$ENDIF}
- procedure subjProjChanged(aSubject: TCEProjectSubject; aProj: TCEProject); {$IFDEF RELEASE}inline;{$ENDIF}
- procedure subjProjCompiling(aSubject: TCEProjectSubject; aProj: TCEProject);{$IFDEF RELEASE}inline;{$ENDIF}
+ procedure subjProjNew(aSubject: TCEProjectSubject; aProj: ICECommonProject); {$IFDEF RELEASE}inline;{$ENDIF}
+ procedure subjProjClosing(aSubject: TCEProjectSubject; aProj: ICECommonProject); {$IFDEF RELEASE}inline;{$ENDIF}
+ procedure subjProjFocused(aSubject: TCEProjectSubject; aProj: ICECommonProject); {$IFDEF RELEASE}inline;{$ENDIF}
+ procedure subjProjChanged(aSubject: TCEProjectSubject; aProj: ICECommonProject); {$IFDEF RELEASE}inline;{$ENDIF}
+ procedure subjProjCompiling(aSubject: TCEProjectSubject; aProj: ICECommonProject);{$IFDEF RELEASE}inline;{$ENDIF}
{
@@ -332,7 +367,7 @@ begin
exit(aObject is ICEProjectObserver);
end;
-procedure subjProjNew(aSubject: TCEProjectSubject; aProj: TCEProject);
+procedure subjProjNew(aSubject: TCEProjectSubject; aProj: ICECommonProject);
var
i: Integer;
begin
@@ -340,7 +375,7 @@ begin
(fObservers.Items[i] as ICEProjectObserver).ProjNew(aProj);
end;
-procedure subjProjClosing(aSubject: TCEProjectSubject; aProj: TCEProject);
+procedure subjProjClosing(aSubject: TCEProjectSubject; aProj: ICECommonProject);
var
i: Integer;
begin
@@ -348,7 +383,7 @@ begin
(fObservers.Items[i] as ICEProjectObserver).projClosing(aProj);
end;
-procedure subjProjFocused(aSubject: TCEProjectSubject; aProj: TCEProject);
+procedure subjProjFocused(aSubject: TCEProjectSubject; aProj: ICECommonProject);
var
i: Integer;
begin
@@ -356,7 +391,7 @@ begin
(fObservers.Items[i] as ICEProjectObserver).projFocused(aProj);
end;
-procedure subjProjChanged(aSubject: TCEProjectSubject; aProj: TCEProject);
+procedure subjProjChanged(aSubject: TCEProjectSubject; aProj: ICECommonProject);
var
i: Integer;
begin
@@ -364,7 +399,7 @@ begin
(fObservers.Items[i] as ICEProjectObserver).projChanged(aProj);
end;
-procedure subjProjCompiling(aSubject: TCEProjectSubject; aProj: TCEProject);
+procedure subjProjCompiling(aSubject: TCEProjectSubject; aProj: ICECommonProject);
var
i: Integer;
begin
diff --git a/src/ce_libmaneditor.pas b/src/ce_libmaneditor.pas
index eed31dd9..2d8e0c50 100644
--- a/src/ce_libmaneditor.pas
+++ b/src/ce_libmaneditor.pas
@@ -36,13 +36,13 @@ type
procedure btnMoveDownClick(Sender: TObject);
procedure ListEdited(Sender: TObject; Item: TListItem; var AValue: string);
private
- fProj: TCEProject;
+ fProj: TCENativeProject;
procedure updateRegistrable;
- procedure projNew(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
//
procedure dataToGrid;
procedure gridToData;
@@ -99,30 +99,37 @@ begin
(FileExists(fProj.Filename))
end;
-procedure TCELibManEditorWidget.projNew(aProject: TCEProject);
+procedure TCELibManEditorWidget.projNew(aProject: ICECommonProject);
begin
- fProj := aProject;
+ if aProject.getKind <> pkNative then
+ exit;
+ fProj := TCENativeProject(aProject.getProject);
end;
-procedure TCELibManEditorWidget.projChanged(aProject: TCEProject);
+procedure TCELibManEditorWidget.projChanged(aProject: ICECommonProject);
begin
+ if fProj = nil then exit;
+ if fProj <> aProject.getProject then exit;
+ //
updateRegistrable;
end;
-procedure TCELibManEditorWidget.projClosing(aProject: TCEProject);
+procedure TCELibManEditorWidget.projClosing(aProject: ICECommonProject);
begin
- if aProject <> fProj then exit;
+ if fProj <> aProject.getProject then exit;
fProj := nil;
updateRegistrable;
end;
-procedure TCELibManEditorWidget.projFocused(aProject: TCEProject);
+procedure TCELibManEditorWidget.projFocused(aProject: ICECommonProject);
begin
- fProj := aProject;
+ if aProject.getKind <> pkNative then
+ exit;
+ fProj := TCENativeProject(aProject.getProject);
updateRegistrable;
end;
-procedure TCELibManEditorWidget.projCompiling(aProject: TCEProject);
+procedure TCELibManEditorWidget.projCompiling(aProject: ICECommonProject);
begin
end;
diff --git a/src/ce_main.pas b/src/ce_main.pas
index f8fc6098..b8b2b15c 100644
--- a/src/ce_main.pas
+++ b/src/ce_main.pas
@@ -189,7 +189,7 @@ type
fMultidoc: ICEMultiDocHandler;
fScCollectCount: Integer;
fUpdateCount: NativeInt;
- fProject: TCEProject;
+ fProject: TCENativeProject;
fProjMru: TCEMRUProjectList;
fFileMru: TCEMRUDocumentList;
fWidgList: TCEWidgetList;
@@ -1733,7 +1733,7 @@ end;
procedure TCEMainForm.newProj;
begin
- fProject := TCEProject.Create(nil);
+ fProject := TCENativeProject.Create(nil);
fProject.Name := 'CurrentProject';
showProjTitle;
end;
diff --git a/src/ce_messages.pas b/src/ce_messages.pas
index 04ae8003..79143cc3 100644
--- a/src/ce_messages.pas
+++ b/src/ce_messages.pas
@@ -83,7 +83,7 @@ type
fActCopyMsg: TAction;
fActSelAll: TAction;
fMaxMessCnt: Integer;
- fProj: TCEProject;
+ fProj: TCENativeProject;
fDoc: TCESynMemo;
fCtxt: TCEAppMessageCtxt;
fAutoSelect: boolean;
@@ -114,11 +114,11 @@ type
procedure setColorBuble(aValue: TColor);
procedure setColorWarning(aValue: TColor);
//
- procedure projNew(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
//
procedure docNew(aDoc: TCESynMemo);
procedure docClosing(aDoc: TCESynMemo);
@@ -584,34 +584,40 @@ end;
{$ENDREGION}
{$REGION ICEProjectObserver ----------------------------------------------------}
-procedure TCEMessagesWidget.projNew(aProject: TCEProject);
+procedure TCEMessagesWidget.projNew(aProject: ICECommonProject);
begin
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
filterMessages(fCtxt);
end;
-procedure TCEMessagesWidget.projClosing(aProject: TCEProject);
+procedure TCEMessagesWidget.projClosing(aProject: ICECommonProject);
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
//
- clearbyData(aProject);
+ clearbyData(fProj);
fProj := nil;
filterMessages(fCtxt);
end;
-procedure TCEMessagesWidget.projFocused(aProject: TCEProject);
+procedure TCEMessagesWidget.projFocused(aProject: ICECommonProject);
begin
- if fProj = aProject then exit;
- fProj := aProject;
+ if fProj = aProject.getProject then exit;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
filterMessages(fCtxt);
end;
-procedure TCEMessagesWidget.projChanged(aProject: TCEProject);
+procedure TCEMessagesWidget.projChanged(aProject: ICECommonProject);
begin
end;
-procedure TCEMessagesWidget.projCompiling(aProject: TCEProject);
+procedure TCEMessagesWidget.projCompiling(aProject: ICECommonProject);
begin
end;
{$ENDREGION}
@@ -789,7 +795,7 @@ begin
Itm.Visible := true
else case msgdt^.ctxt of
amcEdit: itm.Visible := (fDoc = TCESynMemo(msgdt^.data)) and (aCtxt = amcEdit);
- amcProj: itm.Visible := (fProj = TCEProject(msgdt^.data)) and (aCtxt = amcProj);
+ amcProj: itm.Visible := (fProj = TCENativeProject(msgdt^.data)) and (aCtxt = amcProj);
amcApp: itm.Visible := aCtxt = amcApp;
amcMisc: itm.Visible := aCtxt = amcMisc;
end;
diff --git a/src/ce_mru.pas b/src/ce_mru.pas
index eb738ca7..c28820e7 100644
--- a/src/ce_mru.pas
+++ b/src/ce_mru.pas
@@ -63,11 +63,11 @@ type
*)
TCEMRUProjectList = class(TCEMRUFileList, ICEProjectObserver)
private
- procedure projNew(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
public
constructor create; override;
destructor destroy; override;
@@ -192,26 +192,32 @@ begin
inherited;
end;
-procedure TCEMRUProjectList.projNew(aProject: TCEProject);
+procedure TCEMRUProjectList.projNew(aProject: ICECommonProject);
begin
end;
-procedure TCEMRUProjectList.projFocused(aProject: TCEProject);
+procedure TCEMRUProjectList.projFocused(aProject: ICECommonProject);
begin
end;
-procedure TCEMRUProjectList.projChanged(aProject: TCEProject);
+procedure TCEMRUProjectList.projChanged(aProject: ICECommonProject);
begin
end;
-procedure TCEMRUProjectList.projCompiling(aProject: TCEProject);
+procedure TCEMRUProjectList.projCompiling(aProject: ICECommonProject);
begin
end;
-procedure TCEMRUProjectList.projClosing(aProject: TCEProject);
+procedure TCEMRUProjectList.projClosing(aProject: ICECommonProject);
+var
+ natProj: TCENativeProject;
begin
- if FileExists(aProject.fileName) then
- Insert(0, aProject.fileName);
+ if aProject.getProject is TCENativeProject then
+ begin
+ natProj := TCENativeProject(aProject.getProject);
+ if FileExists(natProj.fileName) then
+ Insert(0, natProj.fileName);
+ end;
end;
initialization
diff --git a/src/ce_projconf.pas b/src/ce_projconf.pas
index 33edede8..062e0d6f 100644
--- a/src/ce_projconf.pas
+++ b/src/ce_projconf.pas
@@ -35,7 +35,7 @@ type
procedure TreeChange(Sender: TObject; Node: TTreeNode);
procedure GridFilter(Sender: TObject; aEditor: TPropertyEditor;var aShow: boolean);
private
- fProj: TCEProject;
+ fProj: TCENativeProject;
fSyncroMode: boolean;
fSynchroItem: TStringList;
fSynchroValue: TStringList;
@@ -45,11 +45,11 @@ type
procedure syncroGetPropAsString(const ASection, Item, Value: string);
property syncroMode: boolean read fSyncroMode write setSyncroMode;
//
- procedure projNew(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
protected
procedure updateImperative; override;
procedure SetVisible(Value: boolean); override;
@@ -107,18 +107,21 @@ end;
{$ENDREGION --------------------------------------------------------------------}
{$REGION ICEProjectObserver ----------------------------------------------------}
-procedure TCEProjectConfigurationWidget.projNew(aProject: TCEProject);
+procedure TCEProjectConfigurationWidget.projNew(aProject: ICECommonProject);
begin
beginImperativeUpdate;
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
if Visible then updateImperative;
syncroMode := false;
pnlToolBar.Enabled:=true;
end;
-procedure TCEProjectConfigurationWidget.projClosing(aProject: TCEProject);
+procedure TCEProjectConfigurationWidget.projClosing(aProject: ICECommonProject);
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
inspector.TIObject := nil;
inspector.ItemIndex := -1;
@@ -128,21 +131,27 @@ begin
fProj := nil;
end;
-procedure TCEProjectConfigurationWidget.projChanged(aProject: TCEProject);
+procedure TCEProjectConfigurationWidget.projChanged(aProject: ICECommonProject);
begin
- if fProj <> aProject then exit;
- fProj := aProject;
+ if fProj <> aProject.getProject then exit;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
if Visible then updateImperative;
end;
-procedure TCEProjectConfigurationWidget.projFocused(aProject: TCEProject);
+procedure TCEProjectConfigurationWidget.projFocused(aProject: ICECommonProject);
begin
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub: fProj := nil;
+ end;
pnlToolBar.Enabled:=true;
if Visible then updateImperative;
end;
-procedure TCEProjectConfigurationWidget.projCompiling(aProject: TCEProject);
+procedure TCEProjectConfigurationWidget.projCompiling(aProject: ICECommonProject);
begin
end;
{$ENDREGION --------------------------------------------------------------------}
diff --git a/src/ce_project.pas b/src/ce_project.pas
index 78251218..b2328406 100644
--- a/src/ce_project.pas
+++ b/src/ce_project.pas
@@ -9,7 +9,7 @@ uses
LclProc,
{$ENDIF}
Classes, SysUtils, process, strUtils, ce_common, ce_writableComponent,
- ce_dmdwrap, ce_observer;
+ ce_dmdwrap, ce_observer, ce_interfaces;
type
@@ -21,7 +21,7 @@ type
*
* Basically it' s designed to provide the options for the dmd process.
*)
- TCEProject = class(TWritableLfmTextComponent)
+ TCENativeProject = class(TWritableLfmTextComponent, ICECommonProject)
private
fOnChange: TNotifyEvent;
fModified: boolean;
@@ -51,6 +51,9 @@ type
procedure runProcOutput(sender: TObject);
// passes compilation message as "to be guessed"
procedure compProcOutput(proc: TProcess);
+ //
+ function getKind: TCEProjectKind;
+ function getProject: TObject;
protected
procedure beforeLoad; override;
procedure afterSave; override;
@@ -91,9 +94,9 @@ type
implementation
uses
- ce_interfaces, controls, dialogs, ce_symstring, ce_libman, ce_dcd;
+ controls, dialogs, ce_symstring, ce_libman, ce_dcd;
-constructor TCEProject.create(aOwner: TComponent);
+constructor TCENativeProject.create(aOwner: TComponent);
begin
inherited create(aOwner);
//
@@ -117,7 +120,7 @@ begin
fModified := false;
end;
-destructor TCEProject.destroy;
+destructor TCENativeProject.destroy;
begin
subjProjClosing(TCEProjectSubject(fProjectSubject), self);
fProjectSubject.Free;
@@ -131,13 +134,23 @@ begin
inherited;
end;
-function TCEProject.addConfiguration: TCompilerConfiguration;
+function TCENativeProject.getKind: TCEProjectKind;
+begin
+ exit(pkNative);
+end;
+
+function TCENativeProject.getProject: TObject;
+begin
+ exit(Self);
+end;
+
+function TCENativeProject.addConfiguration: TCompilerConfiguration;
begin
result := TCompilerConfiguration(fOptsColl.Add);
result.onChanged := @subMemberChanged;
end;
-procedure TCEProject.setOptsColl(const aValue: TCollection);
+procedure TCENativeProject.setOptsColl(const aValue: TCollection);
var
i: nativeInt;
begin
@@ -146,7 +159,7 @@ begin
Configuration[i].onChanged := @subMemberChanged;
end;
-procedure TCEProject.addSource(const aFilename: string);
+procedure TCENativeProject.addSource(const aFilename: string);
var
relSrc, absSrc, ext: string;
begin
@@ -163,7 +176,7 @@ begin
fSrcs.Add(ExtractRelativepath(fBasePath, aFilename));
end;
-procedure TCEProject.setRoot(const aValue: string);
+procedure TCENativeProject.setRoot(const aValue: string);
begin
if fRootFolder = aValue then exit;
beginUpdate;
@@ -171,7 +184,7 @@ begin
endUpdate;
end;
-procedure TCEProject.setFilename(const aValue: string);
+procedure TCENativeProject.setFilename(const aValue: string);
var
oldAbs, newRel, oldBase: string;
i: NativeInt;
@@ -194,14 +207,14 @@ begin
endUpdate;
end;
-procedure TCEProject.setLibAliases(const aValue: TStringList);
+procedure TCENativeProject.setLibAliases(const aValue: TStringList);
begin
beginUpdate;
fLibAliases.Assign(aValue);
endUpdate;
end;
-procedure TCEProject.setSrcs(const aValue: TStringList);
+procedure TCENativeProject.setSrcs(const aValue: TStringList);
begin
beginUpdate;
fSrcs.Assign(aValue);
@@ -209,7 +222,7 @@ begin
endUpdate;
end;
-procedure TCEProject.setConfIx(aValue: Integer);
+procedure TCENativeProject.setConfIx(aValue: Integer);
begin
beginUpdate;
if aValue < 0 then aValue := 0;
@@ -218,19 +231,19 @@ begin
endUpdate;
end;
-procedure TCEProject.subMemberChanged(sender : TObject);
+procedure TCENativeProject.subMemberChanged(sender : TObject);
begin
beginUpdate;
fModified := true;
endUpdate;
end;
-procedure TCEProject.beginUpdate;
+procedure TCENativeProject.beginUpdate;
begin
Inc(fUpdateCount);
end;
-procedure TCEProject.endUpdate;
+procedure TCENativeProject.endUpdate;
begin
Dec(fUpdateCount);
if fUpdateCount > 0 then
@@ -244,7 +257,7 @@ begin
doChanged;
end;
-procedure TCEProject.doChanged;
+procedure TCENativeProject.doChanged;
{$IFDEF DEBUG}
var
lst: TStringList;
@@ -267,18 +280,18 @@ begin
{$ENDIF}
end;
-function TCEProject.getConfig(const ix: integer): TCompilerConfiguration;
+function TCENativeProject.getConfig(const ix: integer): TCompilerConfiguration;
begin
result := TCompilerConfiguration(fOptsColl.Items[ix]);
result.onChanged := @subMemberChanged;
end;
-function TCEProject.getCurrConf: TCompilerConfiguration;
+function TCENativeProject.getCurrConf: TCompilerConfiguration;
begin
result := TCompilerConfiguration(fOptsColl.Items[fConfIx]);
end;
-procedure TCEProject.addDefaults;
+procedure TCENativeProject.addDefaults;
begin
with TCompilerConfiguration(fOptsColl.Add) do
begin
@@ -303,7 +316,7 @@ begin
end;
end;
-procedure TCEProject.reset;
+procedure TCENativeProject.reset;
var
defConf: TCompilerConfiguration;
begin
@@ -318,7 +331,7 @@ begin
fModified := false;
end;
-procedure TCEProject.getOpts(const aList: TStrings);
+procedure TCENativeProject.getOpts(const aList: TStrings);
var
rel, abs: string;
i: Integer;
@@ -363,7 +376,7 @@ begin
end;
end;
-function TCEProject.isProjectSource(const aFilename: string): boolean;
+function TCENativeProject.isProjectSource(const aFilename: string): boolean;
var
i: Integer;
begin
@@ -373,31 +386,31 @@ begin
exit(false);
end;
-function TCEProject.getAbsoluteSourceName(aIndex: integer): string;
+function TCENativeProject.getAbsoluteSourceName(aIndex: integer): string;
begin
if aIndex < 0 then exit('');
if aIndex > fSrcs.Count-1 then exit('');
result := expandFileNameEx(fBasePath, fSrcs.Strings[aIndex]);
end;
-function TCEProject.getAbsoluteFilename(const aFilename: string): string;
+function TCENativeProject.getAbsoluteFilename(const aFilename: string): string;
begin
result := expandFileNameEx(fBasePath, aFilename);
end;
-procedure TCEProject.afterSave;
+procedure TCENativeProject.afterSave;
begin
fModified := false;
updateOutFilename;
end;
-procedure TCEProject.beforeLoad;
+procedure TCENativeProject.beforeLoad;
begin
beginUpdate;
Inherited;
end;
-procedure TCEProject.afterLoad;
+procedure TCENativeProject.afterLoad;
var
hasPatched: Boolean;
// either all the source files have moved or only the project file
@@ -499,7 +512,7 @@ begin
if not hasPatched then fModified := false;
end;
-procedure TCEProject.readerPropNoFound(Reader: TReader; Instance: TPersistent;
+procedure TCENativeProject.readerPropNoFound(Reader: TReader; Instance: TPersistent;
var PropName: string; IsPath: Boolean; var Handled, Skip: Boolean);
//var
//idt: string;
@@ -532,7 +545,7 @@ begin
end;
end;
-procedure TCEProject.updateOutFilename;
+procedure TCENativeProject.updateOutFilename;
begin
fOutputFilename := currentConfiguration.pathsOptions.outputFilename;
// field is specified
@@ -573,7 +586,7 @@ begin
fCanBeRun := fileExists(fOutputFilename);
end;
-function TCEProject.runPrePostProcess(const processInfo: TCompileProcOptions): Boolean;
+function TCENativeProject.runPrePostProcess(const processInfo: TCompileProcOptions): Boolean;
var
process: TProcess;
pname: string;
@@ -608,7 +621,7 @@ begin
end;
end;
-function TCEProject.compileProject: Boolean;
+function TCENativeProject.compileProject: Boolean;
var
config: TCompilerConfiguration;
compilproc: TProcess;
@@ -672,7 +685,7 @@ begin
end;
end;
-function TCEProject.runProject(const runArgs: string = ''): Boolean;
+function TCENativeProject.runProject(const runArgs: string = ''): Boolean;
var
prm: string;
i: Integer;
@@ -715,7 +728,7 @@ begin
result := true;
end;
-procedure TCEProject.runProcOutput(sender: TObject);
+procedure TCENativeProject.runProcOutput(sender: TObject);
var
proc: TProcess;
lst: TStringList;
@@ -737,7 +750,7 @@ begin
getprocInputHandler.removeProcess(proc);
end;
-procedure TCEProject.compProcOutput(proc: TProcess);
+procedure TCENativeProject.compProcOutput(proc: TProcess);
var
lst: TStringList;
str: string;
@@ -755,5 +768,5 @@ begin
end;
initialization
- RegisterClasses([TCEProject]);
+ RegisterClasses([TCENativeProject]);
end.
diff --git a/src/ce_projinspect.pas b/src/ce_projinspect.pas
index da2f3f47..56352bc9 100644
--- a/src/ce_projinspect.pas
+++ b/src/ce_projinspect.pas
@@ -34,7 +34,7 @@ type
private
fActOpenFile: TAction;
fActSelConf: TAction;
- fProject: TCEProject;
+ fProject: TCENativeProject;
fFileNode, fConfNode: TTreeNode;
fImpsNode, fInclNode: TTreeNode;
fXtraNode: TTreeNode;
@@ -43,11 +43,11 @@ type
procedure TreeDblClick(sender: TObject);
procedure actOpenFileExecute(sender: TObject);
//
- procedure projNew(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
protected
function contextName: string; override;
function contextActionCount: integer; override;
@@ -146,35 +146,41 @@ end;
{$ENDREGION}
{$REGION ICEProjectMonitor -----------------------------------------------------}
-procedure TCEProjectInspectWidget.projNew(aProject: TCEProject);
+procedure TCEProjectInspectWidget.projNew(aProject: ICECommonProject);
begin
- fProject := aProject;
+ case aProject.getKind of
+ pkNative: fProject := TCENativeProject(aProject.getProject);
+ pkDub:fProject := nil;
+ end;
fLastFileOrFolder := '';
if Visible then updateImperative;
end;
-procedure TCEProjectInspectWidget.projClosing(aProject: TCEProject);
+procedure TCEProjectInspectWidget.projClosing(aProject: ICECommonProject);
begin
- if fProject <> aProject then
+ if fProject <> aProject.getProject then
exit;
fProject := nil;
fLastFileOrFolder := '';
updateImperative;
end;
-procedure TCEProjectInspectWidget.projFocused(aProject: TCEProject);
+procedure TCEProjectInspectWidget.projFocused(aProject: ICECommonProject);
begin
- fProject := aProject;
+ case aProject.getKind of
+ pkNative: fProject := TCENativeProject(aProject.getProject);
+ pkDub:fProject := nil;
+ end;
if Visible then beginDelayedUpdate;
end;
-procedure TCEProjectInspectWidget.projChanged(aProject: TCEProject);
+procedure TCEProjectInspectWidget.projChanged(aProject: ICECommonProject);
begin
- if fProject <> aProject then exit;
+ if fProject <> aProject.getProject then exit;
if Visible then beginDelayedUpdate;
end;
-procedure TCEProjectInspectWidget.projCompiling(aProject: TCEProject);
+procedure TCEProjectInspectWidget.projCompiling(aProject: ICECommonProject);
begin
end;
{$ENDREGION}
diff --git a/src/ce_symstring.pas b/src/ce_symstring.pas
index b28ece15..c4b3ccf6 100644
--- a/src/ce_symstring.pas
+++ b/src/ce_symstring.pas
@@ -20,17 +20,17 @@ type
*)
TCESymbolExpander = class(ICEMultiDocObserver, ICEProjectObserver)
private
- fProj: TCEProject;
+ fProj: TCENativeProject;
fDoc: TCESynMemo;
fNeedUpdate: boolean;
fSymbols: array[TCESymbol] of string;
procedure updateSymbols;
//
- procedure projNew(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
//
procedure docNew(aDoc: TCESynMemo);
procedure docClosing(aDoc: TCESynMemo);
@@ -68,34 +68,40 @@ end;
{$ENDREGION}
{$REGION ICEProjectObserver ----------------------------------------------------}
-procedure TCESymbolExpander.projNew(aProject: TCEProject);
+procedure TCESymbolExpander.projNew(aProject: ICECommonProject);
begin
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
fNeedUpdate := true;
end;
-procedure TCESymbolExpander.projClosing(aProject: TCEProject);
+procedure TCESymbolExpander.projClosing(aProject: ICECommonProject);
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
fProj := nil;
fNeedUpdate := true;
end;
-procedure TCESymbolExpander.projFocused(aProject: TCEProject);
+procedure TCESymbolExpander.projFocused(aProject: ICECommonProject);
begin
- fProj := aProject;
+ case aProject.getKind of
+ pkNative: fProj := TCENativeProject(aProject.getProject);
+ pkDub:fProj := nil;
+ end;
fNeedUpdate := true;
end;
-procedure TCESymbolExpander.projChanged(aProject: TCEProject);
+procedure TCESymbolExpander.projChanged(aProject: ICECommonProject);
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
fNeedUpdate := true;
end;
-procedure TCESymbolExpander.projCompiling(aProject: TCEProject);
+procedure TCESymbolExpander.projCompiling(aProject: ICECommonProject);
begin
end;
diff --git a/src/ce_todolist.pas b/src/ce_todolist.pas
index dffe34b9..5e7e9d27 100644
--- a/src/ce_todolist.pas
+++ b/src/ce_todolist.pas
@@ -82,7 +82,7 @@ type
fToolOutput: TMemoryStream;
fAutoRefresh: Boolean;
fSingleClick: Boolean;
- fProj: TCEProject;
+ fProj: TCENativeProject;
fDoc: TCESynMemo;
fToolProc: TCheckedAsyncProcess;
fTodos: TTodoItems;
@@ -94,11 +94,11 @@ type
procedure docChanged(aDoc: TCESynMemo);
procedure docClosing(aDoc: TCESynMemo);
// ICEProjectObserver
- procedure projNew(aProject: TCEProject);
- procedure projChanged(aProject: TCEProject);
- procedure projClosing(aProject: TCEProject);
- procedure projFocused(aProject: TCEProject);
- procedure projCompiling(aProject: TCEProject);
+ procedure projNew(aProject: ICECommonProject);
+ procedure projChanged(aProject: ICECommonProject);
+ procedure projClosing(aProject: ICECommonProject);
+ procedure projFocused(aProject: ICECommonProject);
+ procedure projCompiling(aProject: ICECommonProject);
// ICEEditableOptions
function optionedWantCategory(): string;
function optionedWantEditorKind: TOptionEditorKind;
@@ -338,38 +338,43 @@ end;
{$ENDREGION}
{$REGION ICEProjectObserver ----------------------------------------------------}
-procedure TCETodoListWidget.projNew(aProject: TCEProject);
+procedure TCETodoListWidget.projNew(aProject: ICECommonProject);
begin
- fProj := aProject;
+ if aProject.getKind <> pkNative then
+ exit;
+ fProj := TCENativeProject(aProject.getProject);
end;
-procedure TCETodoListWidget.projChanged(aProject: TCEProject);
+procedure TCETodoListWidget.projChanged(aProject: ICECommonProject);
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
if Visible and fAutoRefresh then
callToolProcess;
end;
-procedure TCETodoListWidget.projClosing(aProject: TCEProject);
+procedure TCETodoListWidget.projClosing(aProject: ICECommonProject);
begin
- if fProj <> aProject then
+ if fProj <> aProject.getProject then
exit;
fProj := nil;
if Visible and fAutoRefresh then
callToolProcess;
end;
-procedure TCETodoListWidget.projFocused(aProject: TCEProject);
+procedure TCETodoListWidget.projFocused(aProject: ICECommonProject);
begin
- if aProject = fProj then
+ if aProject.getProject = fProj then
exit;
- fProj := aProject;
+ if aProject.getKind <> pkNative then
+ exit;
+ fProj := TCENativeProject(aProject.getProject);
+
if Visible and fAutoRefresh then
callToolProcess;
end;
-procedure TCETodoListWidget.projCompiling(aProject: TCEProject);
+procedure TCETodoListWidget.projCompiling(aProject: ICECommonProject);
begin
end;