ide: implement Run without Debugging. Issue #29832

git-svn-id: trunk@51933 -
This commit is contained in:
ondrej 2016-03-14 09:29:58 +00:00
parent b06baa0a9a
commit a43a0c4d4b
12 changed files with 94 additions and 1 deletions

1
.gitattributes vendored
View File

@ -6465,6 +6465,7 @@ images/menu/menu_run.png -text svneol=unset#image/png
images/menu/menu_run_cursor.png -text svneol=unset#image/png
images/menu/menu_run_file.png -text svneol=unset#image/png
images/menu/menu_run_parameters.png -text svneol=unset#image/png
images/menu/menu_run_withoutdebugging.png -text
images/menu/menu_save_all.png -text svneol=unset#image/png
images/menu/menu_saveas.png -text
images/menu/menu_search_files.png -text svneol=unset#image/png

View File

@ -256,6 +256,7 @@ const
ecCleanUpAndBuild = ecFirstLazarus + 403;
ecBuildManyModes = ecFirstLazarus + 404;
ecAbortBuild = ecFirstLazarus + 405;
ecRunWithoutDebugging = ecFirstLazarus + 409;
ecRun = ecFirstLazarus + 410;
ecPause = ecFirstLazarus + 411;
ecStepInto = ecFirstLazarus + 412;
@ -1905,7 +1906,7 @@ begin
end;
const
IDEEditorCommandStrs: array[0..313] of TIdentMapEntry = (
IDEEditorCommandStrs: array[0..314] of TIdentMapEntry = (
// search
(Value: ecFind; Name: 'ecFind'),
(Value: ecFindAgain; Name: 'ecFindAgain'),
@ -2109,6 +2110,7 @@ const
(Value: ecQuickCompile; Name: 'ecQuickCompile'),
(Value: ecCleanUpAndBuild; Name: 'ecCleanUpAndBuild'),
(Value: ecAbortBuild; Name: 'ecAbortBuild'),
(Value: ecRunWithoutDebugging; Name: 'ecRunWithoutDebugging'),
(Value: ecRun; Name: 'ecRun'),
(Value: ecPause; Name: 'ecPause'),
(Value: ecStepInto; Name: 'ecStepInto'),

View File

@ -353,6 +353,7 @@ type
Flags: TProjectBuildFlags;
FinalizeResources: boolean = True): TModalResult; virtual; abstract;
function DoRunProject: TModalResult; virtual; abstract;
function DoRunProjectWithoutDebug: TModalResult; virtual; abstract;
function GetProjectFileForProjectEditor(AEditor: TSourceEditorInterface): TLazProjectFile; virtual; abstract;
function DoCallProjectChangedHandler(HandlerType: TLazarusIDEHandlerType;
AProject: TLazProject): TModalResult;

View File

@ -651,6 +651,7 @@ begin
ecCleanUpAndBuild : Result:= srkmecCleanUpAndBuild;
ecBuildManyModes : Result:= srkmecBuildManyModes;
ecAbortBuild : Result:= srkmecAbortBuild;
ecRunWithoutDebugging : Result:= srkmecRunWithoutDebugging;
ecRun : Result:= srkmecRun;
ecPause : Result:= srkmecPause;
ecShowExecutionPoint : Result:= srkmecShowExecutionPoint;
@ -1281,6 +1282,7 @@ begin
ecCleanUpAndBuild: SetSingle(VK_UNKNOWN,[]);
ecBuildManyModes: SetSingle(VK_UNKNOWN,[]);
ecAbortBuild: SetSingle(VK_UNKNOWN,[]);
ecRunWithoutDebugging: SetSingle(VK_F9, [ssCtrl, ssShift]);
ecRun: SetSingle(VK_F9,[]);
ecPause: SetSingle(VK_UNKNOWN,[]);
ecShowExecutionPoint: SetSingle(VK_UNKNOWN,[]);
@ -1716,6 +1718,7 @@ begin
ecCleanUpAndBuild: SetSingle(VK_UNKNOWN,[]);
ecBuildManyModes: SetSingle(VK_UNKNOWN,[]);
ecAbortBuild: SetSingle(VK_UNKNOWN,[]);
ecRunWithoutDebugging: SetSingle(VK_F9,[ssCtrl, ssShift]);
ecRun: SetSingle(VK_F9,[]);
ecPause: SetSingle(VK_UNKNOWN,[]);
ecShowExecutionPoint: SetSingle(VK_UNKNOWN,[]);
@ -2339,6 +2342,7 @@ begin
ecCleanUpAndBuild: SetSingle(VK_UNKNOWN,[]);
ecBuildManyModes: SetSingle(VK_UNKNOWN,[]);
ecAbortBuild: SetSingle(VK_UNKNOWN,[]);
ecRunWithoutDebugging: SetSingle(VK_R,[ssMeta, ssCtrl]);
ecRun: SetSingle(VK_R,[ssMeta]);
ecPause: SetSingle(VK_UNKNOWN,[]);
ecShowExecutionPoint: SetSingle(VK_UNKNOWN,[]);
@ -3024,6 +3028,7 @@ begin
AddDefault(C, 'Clean up and build', lisKMCleanUpAndBuild, ecCleanUpAndBuild);
AddDefault(C, 'Build many modes', lisKMBuildManyModes, ecBuildManyModes);
AddDefault(C, 'Abort building', lisKMAbortBuilding, ecAbortBuild);
AddDefault(C, 'Run without debugging', lisMenuRunWithoutDebugging, ecRunWithoutDebugging);
AddDefault(C, 'Run program', lisKMRunProgram, ecRun);
AddDefault(C, 'Pause program', lisKMPauseProgram, ecPause);
AddDefault(C, 'Show execution point', n(lisMenuShowExecutionPoint), ecShowExecutionPoint);

View File

@ -520,6 +520,7 @@ resourcestring
lisMenuResetDebugger = 'Reset Debugger';
lisMenuRunParameters = 'Run &Parameters ...';
lisMenuBuildFile = 'Build File';
lisMenuRunWithoutDebugging = 'Run without Degugging';
lisMenuRunFile = 'Run File';
lisKMConfigBuildFile = 'Config "Build File"';
lisKMInspect = 'Inspect';
@ -3184,6 +3185,7 @@ resourcestring
srkmecCleanUpAndBuild = 'clean up and build';
srkmecBuildManyModes = 'build many modes';
srkmecAbortBuild = 'abort build';
srkmecRunWithoutDebugging = 'run without debugging';
srkmecRun = 'run program';
srkmecPause = 'pause program';
srkmecShowExecutionPoint = 'show execution point';

View File

@ -332,6 +332,7 @@ type
procedure mnuCleanUpAndBuildProjectClicked(Sender: TObject);
procedure mnuBuildManyModesClicked(Sender: TObject);
procedure mnuAbortBuildProjectClicked(Sender: TObject);
procedure mnuRunMenuRunWithoutDebugging(Sender: TObject);
procedure mnuRunProjectClicked(Sender: TObject);
procedure mnuPauseProjectClicked(Sender: TObject);
procedure mnuShowExecutionPointClicked(Sender: TObject);
@ -803,6 +804,7 @@ type
procedure DoQuickCompile;
function DoInitProjectRun: TModalResult; override;
function DoRunProject: TModalResult; override;
function DoRunProjectWithoutDebug: TModalResult; override;
function DoSaveProjectToTestDirectory(Flags: TSaveFlags): TModalResult;
function QuitIDE: boolean;
@ -2733,6 +2735,7 @@ begin
itmRunMenuCleanUpAndBuild.OnClick := @mnuCleanUpAndBuildProjectClicked;
itmRunMenuBuildManyModes.OnClick := @mnuBuildManyModesClicked;
itmRunMenuAbortBuild.OnClick := @mnuAbortBuildProjectClicked;
itmRunMenuRunWithoutDebugging.OnClick := @mnuRunMenuRunWithoutDebugging;
itmRunMenuRun.OnClick := @mnuRunProjectClicked;
itmRunMenuPause.OnClick := @mnuPauseProjectClicked;
itmRunMenuShowExecutionPoint.OnClick := @mnuShowExecutionPointClicked;
@ -4196,6 +4199,11 @@ Begin
DoAbortBuild(false);
end;
procedure TMainIDE.mnuRunMenuRunWithoutDebugging(Sender: TObject);
begin
DoRunProjectWithoutDebug;
end;
procedure TMainIDE.mnuRunProjectClicked(Sender: TObject);
var
SrcEdit: TSourceEditor;
@ -6885,6 +6893,75 @@ begin
DebugLn('Hint: (lazarus) [TMainIDE.DoRunProject] END');
end;
function TMainIDE.DoRunProjectWithoutDebug: TModalResult;
var
Tool: TIDEExternalToolOptions;
ExeCmdLine, ExeWorkingDirectory: string;
ExeFileEnd, ExeFileStart: Integer;
begin
if Project1=nil then
Exit(mrNone);
Result := DoBuildProject(crRun,[]);
if Result <> mrOK then
Exit;
Tool := TIDEExternalToolOptions.Create;
try
ExeCmdLine := MainBuildBoss.GetRunCommandLine;
if ExeCmdLine='' then
begin
IDEMessageDialog(lisUnableToRun, lisLaunchingApplicationInvalid,
mtError,[mbCancel]);
Exit(mrNone);
end;
if ExeCmdLine[1]='"' then
begin
ExeFileStart := 2;
ExeFileEnd := PosEx('"', ExeCmdLine, ExeFileStart);
end else
begin
ExeFileStart := 1;
ExeFileEnd := PosEx(' ', ExeCmdLine, ExeFileStart);
if ExeFileEnd<1 then
ExeFileEnd := Length(ExeCmdLine)+1;
end;
Tool.Executable := Copy(ExeCmdLine, ExeFileStart, ExeFileEnd-ExeFileStart);
Tool.CmdLineParams := Copy(ExeCmdLine, ExeFileEnd+ExeFileStart, High(Integer));
if not FileIsExecutable(Tool.Executable) then
begin
IDEMessageDialog(lisLaunchingApplicationInvalid,
Format(lisTheLaunchingApplicationDoesNotExistsOrIsNotExecuta,
[Tool.Executable, LineEnding, LineEnding+LineEnding]),
mtError, [mbOK]);
Exit(mrNone);
end;
ExeWorkingDirectory := Project1.RunParameterOptions.WorkingDirectory;
if not GlobalMacroList.SubstituteStr(ExeWorkingDirectory) then
ExeWorkingDirectory := '';
if ExeWorkingDirectory = '' then
ExeWorkingDirectory := ExtractFilePath(Tool.Executable);
Tool.WorkingDirectory := ExeWorkingDirectory;
if not DirectoryExists(Tool.WorkingDirectory) then
begin
IDEMessageDialog(lisUnableToRun,
Format(lisTheWorkingDirectoryDoesNotExistPleaseCheckTheWorki,
[Tool.WorkingDirectory, LineEnding]),
mtError,[mbCancel]);
Exit(mrNone);
end;
RunExternalTool(Tool);
finally
Tool.Free;
end;
end;
procedure TMainIDE.DoRestart;
{$ifdef darwin}

View File

@ -284,6 +284,7 @@ type
itmRunMenuBuildManyModes: TIDEMenuCommand;
itmRunMenuAbortBuild: TIDEMenuCommand;
//itmRunnning: TIDEMenuSection;
itmRunMenuRunWithoutDebugging: TIDEMenuCommand;
itmRunMenuRun: TIDEMenuCommand;
itmRunMenuPause: TIDEMenuCommand;
itmRunMenuShowExecutionPoint: TIDEMenuCommand;
@ -818,6 +819,7 @@ procedure TMainIDEBar.AllowCompilation(aAllow: Boolean);
// Enables or disables IDE GUI controls associated with compiling and building.
// Does it interfere with DebugBoss.UpdateButtonsAndMenuItems? Maybe should be refactored and combined.
begin
itmRunMenuRunWithoutDebugging.Enabled:=aAllow;
itmRunMenuRun.Enabled:=aAllow;
itmRunMenuCompile.Enabled:=aAllow;
itmRunMenuBuild.Enabled:=aAllow;

View File

@ -1298,6 +1298,7 @@ begin
CreateMenuSeparatorSection(mnuRun,itmRunnning,'itmRunnning');
ParentMI:=itmRunnning;
CreateMenuItem(ParentMI,itmRunMenuRunWithoutDebugging,'itmRunMenuRunWithoutDebugging',lisMenuRunWithoutDebugging,'menu_run_withoutdebugging');
CreateMenuItem(ParentMI,itmRunMenuRun,'itmRunMenuRun',lisMenuProjectRun,'menu_run');
CreateMenuItem(ParentMI,itmRunMenuPause,'itmRunMenuPause',lisPause,'menu_pause', False);
CreateMenuItem(ParentMI,itmRunMenuShowExecutionPoint,'itmRunMenuShowExecutionPoint',
@ -1663,6 +1664,7 @@ begin
itmRunMenuCleanUpAndBuild.Command:=GetCommand(ecCleanUpAndBuild);
itmRunMenuBuildManyModes.Command:=GetCommand(ecBuildManyModes);
itmRunMenuAbortBuild.Command:=GetCommand(ecAbortBuild);
itmRunMenuRunWithoutDebugging.Command:=GetCommand(ecRunWithoutDebugging);
itmRunMenuRun.Command:=GetCommand(ecRun);
itmRunMenuPause.Command:=GetCommand(ecPause);
itmRunMenuStepInto.Command:=GetCommand(ecStepInto);

Binary file not shown.

View File

@ -77,6 +77,7 @@ menu/menu_redo.png
menu/menu_reportingbug.png
menu/menu_reset_debugger.png
menu/menu_run.png
menu/menu_run_withoutdebugging.png
menu/menu_run_cursor.png
menu/menu_run_file.png
menu/menu_run_parameters.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 B

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B