mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-10 16:37:49 +02:00
ide: implement Run without Debugging. Issue #29832
git-svn-id: trunk@51933 -
This commit is contained in:
parent
b06baa0a9a
commit
a43a0c4d4b
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
|
||||
|
@ -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'),
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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';
|
||||
|
77
ide/main.pp
77
ide/main.pp
@ -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}
|
||||
|
@ -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;
|
||||
|
@ -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.
@ -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 |
BIN
images/menu/menu_run_withoutdebugging.png
Normal file
BIN
images/menu/menu_run_withoutdebugging.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 512 B |
Loading…
Reference in New Issue
Block a user