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;