mirror of https://gitlab.com/basile.b/dexed.git
add diloag to create new dub project, deactivated for now
see added comment in main.pas
This commit is contained in:
parent
1b2371a55e
commit
e2118ceabc
|
@ -522,7 +522,7 @@
|
||||||
<PackageName Value="LCL"/>
|
<PackageName Value="LCL"/>
|
||||||
</Item8>
|
</Item8>
|
||||||
</RequiredPackages>
|
</RequiredPackages>
|
||||||
<Units Count="60">
|
<Units Count="61">
|
||||||
<Unit0>
|
<Unit0>
|
||||||
<Filename Value="coedit.lpr"/>
|
<Filename Value="coedit.lpr"/>
|
||||||
<IsPartOfProject Value="True"/>
|
<IsPartOfProject Value="True"/>
|
||||||
|
@ -836,6 +836,12 @@
|
||||||
<HasResources Value="True"/>
|
<HasResources Value="True"/>
|
||||||
<ResourceBaseClass Value="Form"/>
|
<ResourceBaseClass Value="Form"/>
|
||||||
</Unit59>
|
</Unit59>
|
||||||
|
<Unit60>
|
||||||
|
<Filename Value="..\src\ce_newdubproj.pas"/>
|
||||||
|
<IsPartOfProject Value="True"/>
|
||||||
|
<ComponentName Value="CeNewDubProject"/>
|
||||||
|
<ResourceBaseClass Value="Form"/>
|
||||||
|
</Unit60>
|
||||||
</Units>
|
</Units>
|
||||||
</ProjectOptions>
|
</ProjectOptions>
|
||||||
<CompilerOptions>
|
<CompilerOptions>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
object CEMainForm: TCEMainForm
|
object CEMainForm: TCEMainForm
|
||||||
Left = 383
|
Left = 383
|
||||||
Height = 54
|
Height = 35
|
||||||
Top = 610
|
Top = 610
|
||||||
Width = 687
|
Width = 687
|
||||||
AllowDropFiles = True
|
AllowDropFiles = True
|
||||||
Caption = 'Coedit'
|
Caption = 'Coedit'
|
||||||
ClientHeight = 54
|
ClientHeight = 35
|
||||||
ClientWidth = 687
|
ClientWidth = 687
|
||||||
Icon.Data = {
|
Icon.Data = {
|
||||||
F1B500000000010001000000000001002000DBB500001600000089504E470D0A
|
F1B500000000010001000000000001002000DBB500001600000089504E470D0A
|
||||||
|
@ -1472,7 +1472,6 @@ object CEMainForm: TCEMainForm
|
||||||
OnResize = FormResize
|
OnResize = FormResize
|
||||||
OnWindowStateChange = FormWindowStateChange
|
OnWindowStateChange = FormWindowStateChange
|
||||||
ShowHint = True
|
ShowHint = True
|
||||||
LCLVersion = '1.8.4.0'
|
|
||||||
Visible = False
|
Visible = False
|
||||||
object mainMenu: TMainMenu
|
object mainMenu: TMainMenu
|
||||||
top = 1
|
top = 1
|
||||||
|
@ -1634,6 +1633,9 @@ object CEMainForm: TCEMainForm
|
||||||
Caption = 'Project'
|
Caption = 'Project'
|
||||||
object mnuProjNew: TMenuItem
|
object mnuProjNew: TMenuItem
|
||||||
Caption = 'New project'
|
Caption = 'New project'
|
||||||
|
object mnuItemDubDialog: TMenuItem
|
||||||
|
Action = actProjNewDialog
|
||||||
|
end
|
||||||
object MenuItem69: TMenuItem
|
object MenuItem69: TMenuItem
|
||||||
Action = actProjNewDubJson
|
Action = actProjNewDubJson
|
||||||
end
|
end
|
||||||
|
@ -2280,6 +2282,11 @@ object CEMainForm: TCEMainForm
|
||||||
OnExecute = actProjStopCompExecute
|
OnExecute = actProjStopCompExecute
|
||||||
OnUpdate = updateProjectBasedAction
|
OnUpdate = updateProjectBasedAction
|
||||||
end
|
end
|
||||||
|
object actProjNewDialog: TAction
|
||||||
|
Category = 'Project'
|
||||||
|
Caption = 'New project dialog...'
|
||||||
|
OnExecute = actProjNewDialogExecute
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object ApplicationProperties1: TApplicationProperties
|
object ApplicationProperties1: TApplicationProperties
|
||||||
OnActivate = ApplicationProperties1Activate
|
OnActivate = ApplicationProperties1Activate
|
||||||
|
|
|
@ -16,7 +16,7 @@ uses
|
||||||
ce_toolseditor, ce_procinput, ce_optionseditor, ce_symlist, ce_mru, ce_processes,
|
ce_toolseditor, ce_procinput, ce_optionseditor, ce_symlist, ce_mru, ce_processes,
|
||||||
ce_infos, ce_dubproject, ce_dialogs, ce_dubprojeditor,{$IFDEF UNIX} ce_gdb,{$ENDIF}
|
ce_infos, ce_dubproject, ce_dialogs, ce_dubprojeditor,{$IFDEF UNIX} ce_gdb,{$ENDIF}
|
||||||
ce_dfmt, ce_lcldragdrop, ce_projgroup, ce_projutils, ce_stringrange, ce_dastworx,
|
ce_dfmt, ce_lcldragdrop, ce_projgroup, ce_projutils, ce_stringrange, ce_dastworx,
|
||||||
ce_halstead, ce_profileviewer, ce_semver, ce_dsgncontrols, ce_term;
|
ce_halstead, ce_profileviewer, ce_semver, ce_dsgncontrols, ce_term, ce_newdubproj;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ type
|
||||||
actFileCloseAll: TAction;
|
actFileCloseAll: TAction;
|
||||||
actFileNewClip: TAction;
|
actFileNewClip: TAction;
|
||||||
actEdFormat: TAction;
|
actEdFormat: TAction;
|
||||||
|
actProjNewDialog: TAction;
|
||||||
actProjStopComp: TAction;
|
actProjStopComp: TAction;
|
||||||
actProjTest: TAction;
|
actProjTest: TAction;
|
||||||
actLayoutReset: TAction;
|
actLayoutReset: TAction;
|
||||||
|
@ -177,6 +178,7 @@ type
|
||||||
MenuItem112: TMenuItem;
|
MenuItem112: TMenuItem;
|
||||||
MenuItem113: TMenuItem;
|
MenuItem113: TMenuItem;
|
||||||
MenuItem114: TMenuItem;
|
MenuItem114: TMenuItem;
|
||||||
|
mnuItemDubDialog: TMenuItem;
|
||||||
mnuItemHelp: TMenuItem;
|
mnuItemHelp: TMenuItem;
|
||||||
mnuItemAbout: TMenuItem;
|
mnuItemAbout: TMenuItem;
|
||||||
mnuItemCheckUpd: TMenuItem;
|
mnuItemCheckUpd: TMenuItem;
|
||||||
|
@ -305,6 +307,7 @@ type
|
||||||
procedure actProjGroupCompileCustomSyncExecute(Sender: TObject);
|
procedure actProjGroupCompileCustomSyncExecute(Sender: TObject);
|
||||||
procedure actProjGroupCompileExecute(Sender: TObject);
|
procedure actProjGroupCompileExecute(Sender: TObject);
|
||||||
procedure actProjGroupCompileSyncExecute(Sender: TObject);
|
procedure actProjGroupCompileSyncExecute(Sender: TObject);
|
||||||
|
procedure actProjNewDialogExecute(Sender: TObject);
|
||||||
procedure actProjNewDubJsonExecute(Sender: TObject);
|
procedure actProjNewDubJsonExecute(Sender: TObject);
|
||||||
procedure actProjNewGroupExecute(Sender: TObject);
|
procedure actProjNewGroupExecute(Sender: TObject);
|
||||||
procedure actProjNewNativeExecute(Sender: TObject);
|
procedure actProjNewNativeExecute(Sender: TObject);
|
||||||
|
@ -1266,6 +1269,10 @@ begin
|
||||||
getCMdParams;
|
getCMdParams;
|
||||||
fAppliOpts.assignTo(self);
|
fAppliOpts.assignTo(self);
|
||||||
|
|
||||||
|
// waiting for interative mode working when piped:
|
||||||
|
// https://github.com/dlang/dub/issues/1500
|
||||||
|
mnuItemDubDialog.Visible:=false;
|
||||||
|
|
||||||
InitOptionsMenu;
|
InitOptionsMenu;
|
||||||
|
|
||||||
mainMenu.Items.Remove(mnuItemHelp);
|
mainMenu.Items.Remove(mnuItemHelp);
|
||||||
|
@ -3726,6 +3733,25 @@ begin
|
||||||
result := true;
|
result := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEMainForm.actProjNewDialogExecute(Sender: TObject);
|
||||||
|
var
|
||||||
|
r: TModalResult;
|
||||||
|
begin
|
||||||
|
if assigned(fProject) and not fProject.inGroup and fProject.modified and
|
||||||
|
(dlgFileChangeClose(fProject.filename, UnsavedProj) = mrCancel) then
|
||||||
|
exit;
|
||||||
|
if not closeProj then
|
||||||
|
exit;
|
||||||
|
with TCeNewDubProject.create(nil) do
|
||||||
|
try
|
||||||
|
r := ShowModal();
|
||||||
|
if r = mrOk then
|
||||||
|
openProj(ce_newdubproj.createdNewProject);
|
||||||
|
finally
|
||||||
|
free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEMainForm.actProjNewDubJsonExecute(Sender: TObject);
|
procedure TCEMainForm.actProjNewDubJsonExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if assigned(fProject) and not fProject.inGroup and fProject.modified and
|
if assigned(fProject) and not fProject.inGroup and fProject.modified and
|
||||||
|
|
|
@ -0,0 +1,255 @@
|
||||||
|
object CeNewDubProject: TCeNewDubProject
|
||||||
|
Left = 0
|
||||||
|
Height = 419
|
||||||
|
Top = 0
|
||||||
|
Width = 439
|
||||||
|
Caption = 'New DUB project'
|
||||||
|
ClientHeight = 419
|
||||||
|
ClientWidth = 439
|
||||||
|
Position = poMainFormCenter
|
||||||
|
Visible = False
|
||||||
|
object GroupBox1: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 50
|
||||||
|
Top = 4
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project directory'
|
||||||
|
ClientHeight = 32
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 0
|
||||||
|
object edDir: TDirectoryEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'select project directory, mandatory'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
ShowHidden = False
|
||||||
|
ButtonWidth = 23
|
||||||
|
NumGlyphs = 1
|
||||||
|
Flat = True
|
||||||
|
Align = alClient
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
MaxLength = 0
|
||||||
|
TabOrder = 0
|
||||||
|
OnEditingDone = edNameChange
|
||||||
|
end
|
||||||
|
object lblValidDir: TLabel
|
||||||
|
Left = 0
|
||||||
|
Height = 1
|
||||||
|
Top = 31
|
||||||
|
Width = 429
|
||||||
|
Align = alBottom
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox2: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 49
|
||||||
|
Top = 58
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project name'
|
||||||
|
ClientHeight = 31
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 1
|
||||||
|
object edName: TEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'enter project name, optional, no spaces allowed'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
Align = alTop
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
OnChange = edNameChange
|
||||||
|
TabOrder = 0
|
||||||
|
TextHint = 'project name, optional'
|
||||||
|
end
|
||||||
|
object lblValidName: TLabel
|
||||||
|
Left = 0
|
||||||
|
Height = 1
|
||||||
|
Top = 30
|
||||||
|
Width = 429
|
||||||
|
Align = alBottom
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox3: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 49
|
||||||
|
Top = 217
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project license'
|
||||||
|
ClientHeight = 31
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 2
|
||||||
|
object edLic: TEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'license, left empty for proprietary'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
Align = alClient
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
OnChange = edNameChange
|
||||||
|
TabOrder = 0
|
||||||
|
TextHint = 'license, left empty for proprietary'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox4: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 49
|
||||||
|
Hint = 'enter copyright string, optional'
|
||||||
|
Top = 270
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project copyright string'
|
||||||
|
ClientHeight = 31
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 3
|
||||||
|
object edCopyR: TEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'copyright string, optional'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
Align = alClient
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
OnChange = edNameChange
|
||||||
|
TabOrder = 0
|
||||||
|
TextHint = 'copyright string, optional'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox5: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 50
|
||||||
|
Top = 323
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project dependencies'
|
||||||
|
ClientHeight = 32
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 4
|
||||||
|
object edDeps: TEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'enter dependencies, space separated'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
Align = alClient
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
OnChange = edNameChange
|
||||||
|
TabOrder = 0
|
||||||
|
TextHint = 'dependencies, space separated'
|
||||||
|
end
|
||||||
|
object lblValidDeps: TLabel
|
||||||
|
Left = 0
|
||||||
|
Height = 1
|
||||||
|
Top = 31
|
||||||
|
Width = 429
|
||||||
|
Align = alBottom
|
||||||
|
ParentColor = False
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object pnlFooter: TPanel
|
||||||
|
Left = 4
|
||||||
|
Height = 14
|
||||||
|
Top = 401
|
||||||
|
Width = 431
|
||||||
|
Align = alBottom
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
BevelOuter = bvLowered
|
||||||
|
ClientHeight = 14
|
||||||
|
ClientWidth = 431
|
||||||
|
TabOrder = 5
|
||||||
|
OnEnter = edNameChange
|
||||||
|
object btnCancel: TSpeedButton
|
||||||
|
Left = 412
|
||||||
|
Height = 4
|
||||||
|
Hint = 'cancel and revert the modifications of the category'
|
||||||
|
Top = 5
|
||||||
|
Width = 4
|
||||||
|
Align = alRight
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Left = 2
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Flat = True
|
||||||
|
OnClick = btnCancelClick
|
||||||
|
end
|
||||||
|
object btnAccept: TSpeedButton
|
||||||
|
Left = 422
|
||||||
|
Height = 4
|
||||||
|
Hint = 'accept the modifications of the category'
|
||||||
|
Top = 5
|
||||||
|
Width = 4
|
||||||
|
Align = alRight
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Left = 2
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Flat = True
|
||||||
|
OnClick = btnAcceptClick
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox6: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 49
|
||||||
|
Top = 111
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project description'
|
||||||
|
ClientHeight = 31
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 6
|
||||||
|
object edDescr: TEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'enter project description, optional'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
Align = alTop
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
OnChange = edNameChange
|
||||||
|
TabOrder = 0
|
||||||
|
TextHint = 'project description, optional'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object GroupBox7: TGroupBox
|
||||||
|
Left = 4
|
||||||
|
Height = 49
|
||||||
|
Top = 164
|
||||||
|
Width = 431
|
||||||
|
Align = alTop
|
||||||
|
AutoSize = True
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Caption = 'Project author'
|
||||||
|
ClientHeight = 31
|
||||||
|
ClientWidth = 429
|
||||||
|
TabOrder = 7
|
||||||
|
object edAuthor: TEdit
|
||||||
|
Left = 4
|
||||||
|
Height = 23
|
||||||
|
Hint = 'enter project author, optional, current user name will be used'
|
||||||
|
Top = 4
|
||||||
|
Width = 421
|
||||||
|
Align = alTop
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
OnChange = edNameChange
|
||||||
|
TabOrder = 0
|
||||||
|
TextHint = 'project description, optional'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,226 @@
|
||||||
|
unit ce_newdubproj;
|
||||||
|
|
||||||
|
{$I ce_defines.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn,
|
||||||
|
StdCtrls, ExtCtrls, Menus, Buttons, process,
|
||||||
|
ce_common, ce_sharedres, ce_stringrange;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TCeNewDubProject = class(TForm)
|
||||||
|
btnAccept: TSpeedButton;
|
||||||
|
btnCancel: TSpeedButton;
|
||||||
|
edAuthor: TEdit;
|
||||||
|
edName: TEdit;
|
||||||
|
edLic: TEdit;
|
||||||
|
edCopyR: TEdit;
|
||||||
|
edDeps: TEdit;
|
||||||
|
edDescr: TEdit;
|
||||||
|
GroupBox3: TGroupBox;
|
||||||
|
GroupBox4: TGroupBox;
|
||||||
|
GroupBox5: TGroupBox;
|
||||||
|
GroupBox6: TGroupBox;
|
||||||
|
GroupBox7: TGroupBox;
|
||||||
|
lblValidName: TLabel;
|
||||||
|
lblValidDir: TLabel;
|
||||||
|
lblValidDeps: TLabel;
|
||||||
|
pnlFooter: TPanel;
|
||||||
|
ssgsdg: TBoundLabel;
|
||||||
|
edDir: TDirectoryEdit;
|
||||||
|
GroupBox1: TGroupBox;
|
||||||
|
GroupBox2: TGroupBox;
|
||||||
|
procedure btnAcceptClick(Sender: TObject);
|
||||||
|
procedure btnCancelClick(Sender: TObject);
|
||||||
|
procedure edNameChange(Sender: TObject);
|
||||||
|
private
|
||||||
|
deps: array of string;
|
||||||
|
function canCreate: boolean;
|
||||||
|
function isDirValid: boolean;
|
||||||
|
function isNameValid: boolean;
|
||||||
|
function areDepsValid: boolean;
|
||||||
|
procedure updateBtnAccept;
|
||||||
|
public
|
||||||
|
constructor create(aOwner: TComponent); override;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
createdNewProject: string;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
constructor TCeNewDubProject.create(aOwner: TComponent);
|
||||||
|
begin
|
||||||
|
createdNewProject := '';
|
||||||
|
inherited;
|
||||||
|
case GetIconScaledSize of
|
||||||
|
iss16:
|
||||||
|
begin
|
||||||
|
AssignPng(btnCancel, 'CANCEL');
|
||||||
|
AssignPng(btnAccept, 'ACCEPT');
|
||||||
|
end;
|
||||||
|
iss24:
|
||||||
|
begin
|
||||||
|
AssignPng(btnCancel, 'CANCEL24');
|
||||||
|
AssignPng(btnAccept, 'ACCEPT24');
|
||||||
|
end;
|
||||||
|
iss32:
|
||||||
|
begin
|
||||||
|
AssignPng(btnCancel, 'CANCEL32');
|
||||||
|
AssignPng(btnAccept, 'ACCEPT32');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
width := ScaleX(350, 96);
|
||||||
|
height:= ScaleY(400, 96);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCeNewDubProject.isDirValid: boolean;
|
||||||
|
begin
|
||||||
|
lblValidDir.Caption := '';
|
||||||
|
result := edDir.Directory.isEmpty or (edDir.Directory.dirExists
|
||||||
|
and not FileIsInDirectory('dub.json', edDir.Directory)
|
||||||
|
and not FileIsInDirectory('dub.sdl', edDir.Directory)
|
||||||
|
and not FileIsInDirectory('package.json', edDir.Directory)
|
||||||
|
and not FileIsInDirectory('package.sdl', edDir.Directory));
|
||||||
|
if not result then
|
||||||
|
lblValidDir.Caption :=
|
||||||
|
'ERROR: Invalid directory or directory already contains a DUB package';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCeNewDubProject.isNameValid: boolean;
|
||||||
|
var
|
||||||
|
s: string;
|
||||||
|
begin
|
||||||
|
lblValidName.Caption := '';
|
||||||
|
result := true;
|
||||||
|
s := edName.Text;
|
||||||
|
if not s.isEmpty then
|
||||||
|
with TStringRange.create(s) do
|
||||||
|
result := popWhile(['a'..'z', 'A'..'Z', '0'..'9', '-', '_'])^.empty;
|
||||||
|
if not result then
|
||||||
|
lblValidName.Caption :=
|
||||||
|
'ERROR: Invalid name. Name must be empty of made of alphanumeric chars, "-" and "_"';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCeNewDubProject.areDepsValid: boolean;
|
||||||
|
var
|
||||||
|
s: string;
|
||||||
|
d: string;
|
||||||
|
r: TStringRange = (ptr:nil; pos:0; len:0);
|
||||||
|
begin
|
||||||
|
setLength(deps, 0);
|
||||||
|
lblValidDeps.Caption := '';
|
||||||
|
result := true;
|
||||||
|
s := edDeps.Text;
|
||||||
|
if s.isEmpty then
|
||||||
|
exit;
|
||||||
|
r.init(s);
|
||||||
|
while not r.empty do
|
||||||
|
begin
|
||||||
|
r.popWhile([' ']);
|
||||||
|
if not r.empty then
|
||||||
|
if not (r.front in ['a'..'z', 'A'..'Z', '0'..'9', '-', '_']) then
|
||||||
|
begin
|
||||||
|
result := false;
|
||||||
|
lblValidDeps.Caption := 'ERROR: Invalid char found in dependency identifier.';
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
if r.empty then
|
||||||
|
break;
|
||||||
|
d := r.takeWhile(['a'..'z', 'A'..'Z', '0'..'9', '-', '_']).yield;
|
||||||
|
if not d.isEmpty then
|
||||||
|
begin
|
||||||
|
setLength(deps, length(deps) + 1);
|
||||||
|
deps[high(deps)] := d;
|
||||||
|
end;
|
||||||
|
lblValidDeps.Caption := lblValidDeps.Caption + 'dep: ' + d + ' ';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TCeNewDubProject.canCreate: boolean;
|
||||||
|
begin
|
||||||
|
result := isDirValid and isNameValid and areDepsValid;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCeNewDubProject.updateBtnAccept;
|
||||||
|
begin
|
||||||
|
btnAccept.Enabled := canCreate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCeNewDubProject.edNameChange(Sender: TObject);
|
||||||
|
begin
|
||||||
|
updateBtnAccept;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCeNewDubProject.btnCancelClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ModalResult:= mrCancel;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCeNewDubProject.btnAcceptClick(Sender: TObject);
|
||||||
|
var
|
||||||
|
p: TProcess;
|
||||||
|
s: string;
|
||||||
|
i: integer;
|
||||||
|
o: TStringList;
|
||||||
|
begin
|
||||||
|
p := TProcess.Create(nil);
|
||||||
|
o := TStringList.Create;
|
||||||
|
try
|
||||||
|
p.Executable:= 'dub'+ exeExt;
|
||||||
|
p.Options:= p.Options + [poUsePipes, poNoConsole];
|
||||||
|
p.ShowWindow:= swoHIDE;
|
||||||
|
p.Parameters.Add('init');
|
||||||
|
p.Execute;
|
||||||
|
// format
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := 'json'#10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// directory
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := edDir.Directory + #10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// name
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := edName.Text + #10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// description
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := edDescr.Text + #10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// author
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := edAuthor.Text + #10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// license
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := edLic.Text + #10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// copyright
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := edCopyR.Text + #10;
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
// deps
|
||||||
|
for i := 0 to high(deps) do
|
||||||
|
begin
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
s := deps[i];
|
||||||
|
p.Input.Write(s[1], s.length);
|
||||||
|
end;
|
||||||
|
processOutputToStrings(p, o);
|
||||||
|
p.Input.WriteByte(10);
|
||||||
|
p.CloseInput;
|
||||||
|
finally
|
||||||
|
p.Free;
|
||||||
|
o.Free;
|
||||||
|
end;
|
||||||
|
createdNewProject := edDir.Directory + DirectorySeparator + 'dub.json';
|
||||||
|
ModalResult := mrOK;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue