common project interface - part 1

This commit is contained in:
Basile Burg 2015-06-20 15:00:16 +02:00
parent 3d74bffa3b
commit 9139d8eef7
12 changed files with 284 additions and 176 deletions

View File

@ -176,6 +176,7 @@
<ComponentName Value="CEEditorWidget"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ce_editor"/>
</Unit8>
<Unit9>
<Filename Value="..\src\ce_editoroptions.pas"/>
@ -188,10 +189,12 @@
<Unit11>
<Filename Value="..\src\ce_interfaces.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_interfaces"/>
</Unit11>
<Unit12>
<Filename Value="..\src\ce_libman.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_libman"/>
</Unit12>
<Unit13>
<Filename Value="..\src\ce_libmaneditor.pas"/>
@ -199,6 +202,7 @@
<ComponentName Value="CELibManEditorWidget"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ce_libmaneditor"/>
</Unit13>
<Unit14>
<Filename Value="..\src\ce_main.pas"/>
@ -226,6 +230,7 @@
<Unit17>
<Filename Value="..\src\ce_mru.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_mru"/>
</Unit17>
<Unit18>
<Filename Value="..\src\ce_observer.pas"/>
@ -244,6 +249,7 @@
<ComponentName Value="CEProcInputWidget"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ce_procinput"/>
</Unit20>
<Unit21>
<Filename Value="..\src\ce_projconf.pas"/>
@ -264,6 +270,7 @@
<ComponentName Value="CEProjectInspectWidget"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ce_projinspect"/>
</Unit23>
<Unit24>
<Filename Value="..\src\ce_search.pas"/>
@ -294,10 +301,12 @@
<Unit28>
<Filename Value="..\src\ce_symstring.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_symstring"/>
</Unit28>
<Unit29>
<Filename Value="..\src\ce_synmemo.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_synmemo"/>
</Unit29>
<Unit30>
<Filename Value="..\src\ce_todolist.pas"/>
@ -310,7 +319,6 @@
<Unit31>
<Filename Value="..\src\ce_tools.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_tools"/>
</Unit31>
<Unit32>
<Filename Value="..\src\ce_toolseditor.pas"/>
@ -330,6 +338,7 @@
<Unit35>
<Filename Value="..\src\ce_sharedres.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ce_sharedres"/>
</Unit35>
<Unit36>
<Filename Value="..\src\ce_widget.pas"/>
@ -337,7 +346,6 @@
<ComponentName Value="CEWidget"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ce_widget"/>
</Unit36>
</Units>
</ProjectOptions>

View File

@ -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}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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 --------------------------------------------------------------------}

View File

@ -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.

View File

@ -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}

View File

@ -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;

View File

@ -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;