diff --git a/src/ce_ceproject.pas b/src/ce_ceproject.pas index 77151565..c5fcdd9e 100644 --- a/src/ce_ceproject.pas +++ b/src/ce_ceproject.pas @@ -209,7 +209,7 @@ end; function TCENativeProject.getFormat: TCEProjectFormat; begin - exit(pfCE); + exit(pfDEXED); end; function TCENativeProject.getProject: TObject; @@ -271,6 +271,12 @@ begin f := fname; if not FilenameIsAbsolute(f) then f := ExpandFileName(f); + if fname.extractFileExt <> '.dprj' then + begin + dlgOkInfo('project file extension automatically updated to "dprj"'); + f := ChangeFileExt(fname, '.dprj'); + RenameFile(fname, f); + end; fbasePath := f.extractFilePath; inherited customLoadFromFile(f); end; @@ -278,13 +284,15 @@ end; procedure TCENativeProject.customSaveToFile(const fname: string); var oldAbs, newRel, oldBase: string; + f: string; i: NativeInt; begin beginUpdate; - if fname <> fFilename then + f := fname; + if f <> fFilename then inGroup(false); oldBase := fBasePath; - fBasePath := fname.extractFilePath; + fBasePath := f.extractFilePath; // for i:= 0 to fSrcs.Count-1 do begin @@ -293,7 +301,8 @@ begin fSrcs[i] := newRel; end; endUpdate; - inherited customSaveToFile(fname); + f := ChangeFileExt(f, '.dprj'); + inherited customSaveToFile(f); end; procedure TCENativeProject.setLibAliases(value: TStringList); diff --git a/src/ce_ceprojeditor.lfm b/src/ce_ceprojeditor.lfm index 104622cd..657d4b7c 100644 --- a/src/ce_ceprojeditor.lfm +++ b/src/ce_ceprojeditor.lfm @@ -90,7 +90,6 @@ inherited CEProjectConfigurationWidget: TCEProjectConfigurationWidget end end inherited toolbar: TCEToolBar - Height = 28 Width = 437 object btnSyncEdit: TCEToolButton[0] Left = 85 diff --git a/src/ce_ceprojeditor.pas b/src/ce_ceprojeditor.pas index d83bd413..671da5a1 100644 --- a/src/ce_ceprojeditor.pas +++ b/src/ce_ceprojeditor.pas @@ -98,7 +98,7 @@ procedure TCEProjectConfigurationWidget.projNew(project: ICECommonProject); begin fProj := nil; enabled := false; - if project.getFormat <> pfCE then + if project.getFormat <> pfDEXED then exit; enabled := true; // @@ -132,7 +132,7 @@ procedure TCEProjectConfigurationWidget.projFocused(project: ICECommonProject); begin fProj := nil; enabled := false; - if project.getFormat <> pfCE then + if project.getFormat <> pfDEXED then exit; enabled := true; // diff --git a/src/ce_d2synpresets.pas b/src/ce_d2synpresets.pas index f069f336..3403d1bf 100644 --- a/src/ce_d2synpresets.pas +++ b/src/ce_d2synpresets.pas @@ -627,7 +627,7 @@ begin fList.Align:= alClient; fList.BorderSpacing.Around:= 2; fList.Parent := pnl; - fList.ReadOnly:=true; + fList.Style:=csDropDownList; fList.OnSelect:= @lstBoxSelChange; fList.AutoSize := true; updateList; diff --git a/src/ce_editor.pas b/src/ce_editor.pas index b1a1ff21..d357ecfa 100644 --- a/src/ce_editor.pas +++ b/src/ce_editor.pas @@ -603,7 +603,7 @@ begin fDoc.loadFromFile(TrimFilename(fname)); if assigned(fProj) and (fProj.filename = fDoc.fileName) then begin - if fProj.getFormat = pfCE then + if fProj.getFormat = pfDEXED then fDoc.Highlighter := LfmSyn else fDoc.Highlighter := JsSyn; diff --git a/src/ce_interfaces.pas b/src/ce_interfaces.pas index f4fa09f6..5c975099 100644 --- a/src/ce_interfaces.pas +++ b/src/ce_interfaces.pas @@ -11,7 +11,7 @@ uses type // describes the project kind. Used as a hint to cast ICECommonProject.getProject() - TCEProjectFormat = (pfCE, pfDUB); + TCEProjectFormat = (pfDEXED, pfDUB); // describes the binary kind produces when compiling a project TProjectBinaryKind = (executable, staticlib, sharedlib, obj); diff --git a/src/ce_lcldragdrop.pas b/src/ce_lcldragdrop.pas index 3b0dc964..805b1c13 100644 --- a/src/ce_lcldragdrop.pas +++ b/src/ce_lcldragdrop.pas @@ -137,7 +137,7 @@ begin if not fname.fileExists then exit; fmt := projectFormat(fname); - if fmt in [pffCe, pffDub] then + if fmt in [pffDexed, pffDub] then begin if assigned(fFreeProj) then begin @@ -145,7 +145,7 @@ begin exit; fFreeProj.getProject.Free; end; - if fmt = pffCe then + if fmt = pffDexed then TCENativeProject.create(nil) else TCEDubProject.create(nil); diff --git a/src/ce_libmaneditor.lfm b/src/ce_libmaneditor.lfm index 5c1e129b..49d4b294 100644 --- a/src/ce_libmaneditor.lfm +++ b/src/ce_libmaneditor.lfm @@ -111,7 +111,7 @@ inherited CELibManEditorWidget: TCELibManEditorWidget end object button5: TCEToolButton[5] Left = 225 - Height = 28 + Height = 5 Top = 0 AutoSize = True Caption = 'button8' diff --git a/src/ce_libmaneditor.pas b/src/ce_libmaneditor.pas index 62056d53..ac7ded86 100644 --- a/src/ce_libmaneditor.pas +++ b/src/ce_libmaneditor.pas @@ -686,7 +686,7 @@ begin exit; fmt := projectFormat(fname); - if fmt in [pffCe, pffDub] then + if fmt in [pffDexed, pffDub] then begin if assigned(fFreeProj) then begin @@ -694,7 +694,7 @@ begin exit; fFreeProj.getProject.Free; end; - if fmt = pffCe then + if fmt = pffDexed then TCENativeProject.create(nil) else TCEDubProject.create(nil); diff --git a/src/ce_main.lfm b/src/ce_main.lfm index e30d024f..3b0c2e29 100644 --- a/src/ce_main.lfm +++ b/src/ce_main.lfm @@ -12,7 +12,6 @@ object CEMainForm: TCEMainForm OnResize = FormResize OnWindowStateChange = FormWindowStateChange ShowHint = True - LCLVersion = '2.0.0.2' object mainMenu: TMainMenu top = 1 object MenuItem1: TMenuItem diff --git a/src/ce_main.pas b/src/ce_main.pas index ccb4ae25..4c79d59c 100644 --- a/src/ce_main.pas +++ b/src/ce_main.pas @@ -1059,7 +1059,7 @@ begin if assigned(hdl) then mem := hdl.findDocument(dst.fProject.filename); if mem.isNotNil then - if dst.fProject.getFormat = pfCE then + if dst.fProject.getFormat = pfDEXED then mem.Highlighter := LfmSyn else mem.Highlighter := JsSyn; @@ -2412,7 +2412,7 @@ procedure TCEMainForm.projNew(project: ICECommonProject); begin fProject := project; case fProject.getFormat of - pfCE: fNativeProject := TCENativeProject(fProject.getProject); + pfDEXED: fNativeProject := TCENativeProject(fProject.getProject); pfDUB: fDubProject := TCEDubProject(fProject.getProject); end; if not fProject.inGroup then @@ -2440,7 +2440,7 @@ procedure TCEMainForm.projFocused(project: ICECommonProject); begin fProject := project; case fProject.getFormat of - pfCE: fNativeProject := TCENativeProject(fProject.getProject); + pfDEXED: fNativeProject := TCENativeProject(fProject.getProject); pfDUB: fDubProject := TCEDubProject(fProject.getProject); end; if not fProject.inGroup then @@ -2723,7 +2723,7 @@ begin if fProject.filename = fDoc.fileName then exit; - if fProject.getFormat = pfCE then + if fProject.getFormat = pfDEXED then begin if fDoc.fileName.fileExists and not fDoc.isTemporary then fNativeProject.addSource(fDoc.fileName) @@ -3831,8 +3831,13 @@ begin ext := fname.extractFileExt.upperCase; if (ext = '.JSON') or (ext = '.SDL') then newDubProj + else if ext = '.DPRJ' then + newNativeProj else - newNativeProj; + begin + dlgOkError('Unknown project extesion : ' + ext); + exit; + end; fProject.loadFromFile(fname); showProjTitle; @@ -3881,6 +3886,7 @@ begin end; with TSaveDialog.Create(nil) do try + Filter := 'DUB json|*.json|DUB sdl|*.sdl|Dexed project|*.dprj'; if fProject.filename.fileExists then InitialDir := fproject.filename.extractFileDir; if execute then @@ -3916,6 +3922,7 @@ begin exit; with TOpenDialog.Create(nil) do try + Filter := 'DUB json|*.json|DUB sdl|*.sdl|Dexed project|*.dprj'; if execute then openProj(filename.normalizePath); finally @@ -3929,7 +3936,7 @@ var begin if assigned(fProject) then case fProject.getFormat of pfDUB: win := DockMaster.GetAnchorSite(fDubProjWidg); - pfCE: win := DockMaster.GetAnchorSite(fPrjCfWidg); + pfDEXED: win := DockMaster.GetAnchorSite(fPrjCfWidg); end else win := DockMaster.GetAnchorSite(fPrjCfWidg); if win.isNotNil then @@ -3952,7 +3959,7 @@ begin openFile(fProject.filename); fDoc.isProjectDescription := true; - if fProject.getFormat = pfCE then + if fProject.getFormat = pfDEXED then fDoc.Highlighter := LfmSyn else fDoc.Highlighter := JsSyn; @@ -4170,6 +4177,7 @@ begin end; with TOpenDialog.Create(nil) do try + Filter := 'Dexed project groups|*.dgrp'; if execute then begin filename := filename.normalizePath; @@ -4188,6 +4196,7 @@ procedure TCEMainForm.actProjSaveGroupAsExecute(Sender: TObject); begin with TSaveDialog.Create(nil) do try + Filter := 'Dexed project groups|*.dgrp'; if fProjectGroup.groupFilename.fileExists then InitialDir := fProjectGroup.groupFilename.extractFileDir; if execute then diff --git a/src/ce_miniexplorer.pas b/src/ce_miniexplorer.pas index f3ce0d68..ff6db5a1 100644 --- a/src/ce_miniexplorer.pas +++ b/src/ce_miniexplorer.pas @@ -679,7 +679,7 @@ begin if not fname.fileExists then exit; fmt := projectFormat(fname); - if fmt in [pffCe, pffDub] then + if fmt in [pffDexed, pffDub] then begin if assigned(fFreeProj) then begin @@ -687,7 +687,7 @@ begin exit; fFreeProj.getProject.Free; end; - if fmt = pffCe then + if fmt = pffDexed then TCENativeProject.create(nil) else TCEDubProject.create(nil); diff --git a/src/ce_projgroup.lfm b/src/ce_projgroup.lfm index ed82d382..d9776115 100644 --- a/src/ce_projgroup.lfm +++ b/src/ce_projgroup.lfm @@ -160,7 +160,7 @@ inherited CEProjectGroupWidget: TCEProjectGroupWidget end object button0: TCEToolButton[5] Left = 113 - Height = 28 + Height = 5 Top = 0 AutoSize = True Caption = 'button0' diff --git a/src/ce_projgroup.pas b/src/ce_projgroup.pas index e5b0395a..0d50e8be 100644 --- a/src/ce_projgroup.pas +++ b/src/ce_projgroup.pas @@ -5,7 +5,7 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, ExtCtrls, Menus, - Buttons, dialogs, ComCtrls, StdCtrls, + Buttons, dialogs, ComCtrls, StdCtrls, LazFileUtils, ce_widget, ce_common, ce_interfaces, ce_writableComponent, ce_observer, ce_ceproject, ce_dubproject, ce_projutils, ce_sharedres, ce_dsgncontrols, ce_dialogs; @@ -388,9 +388,19 @@ end; procedure TProjectGroup.openGroup(const fname: string); var i: integer; + f: string; begin - fBasePath := fname.extractFilePath; - loadFromFile(fname); + f := fname; + if not FilenameIsAbsolute(f) then + f := ExpandFileName(f); + if fname.extractFileExt <> '.dgrp' then + begin + dlgOkInfo('project file extension automatically updated to "dgrp"'); + f := ChangeFileExt(fname, '.dgrp'); + RenameFile(fname, f); + end; + fBasePath := f.extractFilePath; + loadFromFile(f); for i:= 0 to fItems.Count-1 do getItem(i).fGroup := self; doChanged; @@ -402,8 +412,10 @@ var i: integer; c: boolean = false; n: string; + f: string; begin - n := fname.extractFilePath; + f := fname; + n := f.extractFilePath; if (fBasePath <> '') and (n <> fBasePath) then begin c := true; @@ -415,7 +427,8 @@ begin if c then for i:= 0 to projectCount-1 do getItem(i).fFilename := ExtractRelativepath(n, getItem(i).fFilename); fBasePath := n; - saveToFile(fname); + f := ChangeFileExt(f, '.dgrp'); + saveToFile(f); fModified := false; end; @@ -760,7 +773,7 @@ var prj: TProjectGroupItem; fmt: TCEProjectFormat; const - typeStr: array[TCEProjectFormat] of string = ('CE','DUB'); + typeStr: array[TCEProjectFormat] of string = ('DEXED','DUB'); begin if fUpdating then exit; @@ -777,7 +790,7 @@ begin Data:= prj; fmt := prj.project.getFormat; case fmt of - pfCE: Caption := prj.fFilename.extractFileName; + pfDEXED: Caption := prj.fFilename.extractFileName; pfDUB: Caption := TCEDubProject(prj.project.getProject).packageName; end; SubItems.Add(typeStr[fmt]); @@ -797,7 +810,7 @@ begin begin if fFreeProj.filename.fileExists then case fFreeProj.getFormat of - pfCE: StaticText1.Caption:= 'Free standing: ' + fFreeProj.filename.extractFileName; + pfDEXED: StaticText1.Caption:= 'Free standing: ' + fFreeProj.filename.extractFileName; pfDUB: StaticText1.Caption:= 'Free standing: ' + TCEDubProject(fFreeProj.getProject).packageName; end else diff --git a/src/ce_projinspect.pas b/src/ce_projinspect.pas index 84c75c1f..c2af8c47 100644 --- a/src/ce_projinspect.pas +++ b/src/ce_projinspect.pas @@ -319,7 +319,7 @@ var ce: boolean; sp: integer; begin - ce := fProject.getFormat = pfCE; + ce := fProject.getFormat = pfDEXED; btnRemFold.Visible:= ce; btnAddFold.Visible:= ce; diff --git a/src/ce_projutils.pas b/src/ce_projutils.pas index eebcceff..13ffb4d6 100644 --- a/src/ce_projutils.pas +++ b/src/ce_projutils.pas @@ -9,7 +9,7 @@ uses ce_dlang, ce_stringrange; type - TCEProjectFileFormat = (pffNone, pffCe, pffDub); + TCEProjectFileFormat = (pffNone, pffDexed, pffDub); TLexNameCallback = class private @@ -61,8 +61,10 @@ begin ext := filename.extractFileExt.upperCase; if (ext = '.JSON') or (ext = '.SDL') then result := isValidDubProject(filename) + else if (ext = '.DPRJ') then + result := isValidNativeProject(filename) else - result := isValidNativeProject(filename); + result := false; end; function projectFormat(const filename: string): TCEProjectFileFormat; @@ -76,8 +78,8 @@ begin if isValidDubProject(filename) then result := pffDub; end - else - if isValidNativeProject(filename) then result := pffCe; + else if (ext = '.DPRJ') and isValidNativeProject(filename) then + result := pffDexed; end; function loadProject(const filename: string; discret: boolean): ICECommonProject; diff --git a/src/ce_symstring.pas b/src/ce_symstring.pas index e8b22f43..631270f9 100644 --- a/src/ce_symstring.pas +++ b/src/ce_symstring.pas @@ -97,7 +97,7 @@ procedure TCESymbolExpander.projNew(project: ICECommonProject); begin fProjInterface := project; case project.getFormat of - pfCE: fProj := TCENativeProject(project.getProject); + pfDEXED: fProj := TCENativeProject(project.getProject); pfDUB: fProj := nil; end; fNeedUpdate := true; @@ -116,7 +116,7 @@ procedure TCESymbolExpander.projFocused(project: ICECommonProject); begin fProjInterface := project; case project.getFormat of - pfCE: fProj := TCENativeProject(project.getProject); + pfDEXED: fProj := TCENativeProject(project.getProject); pfDUB: fProj := nil; end; fNeedUpdate := true;