IDE: clean build: search files

git-svn-id: trunk@30985 -
This commit is contained in:
mattias 2011-05-31 15:28:08 +00:00
parent 8b67104316
commit efefac194f
12 changed files with 963 additions and 464 deletions

View File

@ -143,7 +143,6 @@ type
procedure SetStrings(const AStringType: TCTDirCacheString;
const AValue: string);
procedure ClearUnitLinks;
procedure UpdateListing;
function GetUnitSourceCacheValue(const UnitSrc: TCTDirectoryUnitSources;
const Search: string; var Filename: string): boolean;
procedure AddToCache(const UnitSrc: TCTDirectoryUnitSources;
@ -171,8 +170,10 @@ type
function FindCompiledUnitInCompletePath(const AnUnitname: string;
AnyCase: boolean): string;
procedure IterateFPCUnitsInSet(const Iterate: TCTOnIterateFile);
procedure UpdateListing;
procedure WriteListing;
procedure Invalidate; inline;
procedure GetFiles(var Files: TStrings);
public
property Directory: string read FDirectory;
property RefCount: integer read FRefCount;
@ -1243,6 +1244,20 @@ begin
FListing.FileTimeStamp:=CTInvalidChangeStamp;
end;
procedure TCTDirectoryCache.GetFiles(var Files: TStrings);
var
ListedFiles: PChar;
i: Integer;
begin
if Files=nil then
Files:=TStringList.Create;
if Directory='' then exit;
UpdateListing;
ListedFiles:=FListing.Files;
for i:=0 to FListing.Count do
Files.Add(PChar(@ListedFiles[FListing.Starts[i]+SizeOf(TCTDirectoryListingTime)]));
end;
{ TCTDirectoryCachePool }
procedure TCTDirectoryCachePool.DoRemove(ACache: TCTDirectoryCache);

View File

@ -1,19 +1,22 @@
object BuildProjectDialog: TBuildProjectDialog
Left = 275
Height = 317
Height = 492
Top = 250
Width = 367
Width = 537
Caption = 'BuildProjectDialog'
ClientHeight = 317
ClientWidth = 367
ClientHeight = 492
ClientWidth = 537
OnClose = FormClose
OnCreate = FormCreate
OnDestroy = FormDestroy
OnResize = FormResize
Position = poScreenCenter
LCLVersion = '0.9.31'
object ButtonPanel1: TButtonPanel
Left = 6
Height = 40
Top = 271
Width = 355
Height = 42
Top = 444
Width = 525
OKButton.Name = 'OKButton'
OKButton.Caption = '&OK'
HelpButton.Name = 'HelpButton'
@ -25,117 +28,153 @@ object BuildProjectDialog: TBuildProjectDialog
TabOrder = 0
ShowButtons = [pbOK, pbCancel, pbHelp]
end
object Panel1: TPanel
Left = 0
Height = 265
Top = 0
Width = 367
Align = alClient
BevelOuter = bvNone
ChildSizing.EnlargeHorizontal = crsScaleChilds
ChildSizing.EnlargeVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ClientHeight = 265
ClientWidth = 367
object ProjOutCheckBox: TCheckBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = ProjOutMaskComboBox
AnchorSideTop.Side = asrCenter
Left = 10
Height = 22
Top = 12
Width = 148
BorderSpacing.Left = 10
Caption = 'ProjOutCheckBox'
Checked = True
OnChange = ProjOutCheckBoxChange
State = cbChecked
TabOrder = 1
object ProjectGroupBox: TGroupBox
Left = 6
Height = 157
Top = 6
Width = 421
BorderSpacing.Around = 6
Caption = 'ProjectGroupBox'
ClientHeight = 138
ClientWidth = 417
end
object ProjSrcCheckBox: TCheckBox
AnchorSideLeft.Control = ProjOutCheckBox
AnchorSideTop.Control = ProjSrcMaskComboBox
AnchorSideTop.Side = asrCenter
Left = 10
Height = 22
Top = 45
Width = 144
Caption = 'ProjSrcCheckBox'
Checked = True
OnChange = ProjSrcCheckBoxChange
State = cbChecked
TabOrder = 2
end
object PkgOutCheckBox: TCheckBox
AnchorSideLeft.Control = ProjOutCheckBox
AnchorSideTop.Control = PkgOutMaskComboBox
AnchorSideTop.Side = asrCenter
Left = 10
Height = 22
Top = 78
Width = 145
Caption = 'PkgOutCheckBox'
Checked = True
OnChange = PkgOutCheckBoxChange
State = cbChecked
TabOrder = 3
end
object PkgSrcCheckBox: TCheckBox
AnchorSideLeft.Control = ProjOutCheckBox
AnchorSideTop.Control = PkgSrcMaskComboBox
AnchorSideTop.Side = asrCenter
Left = 10
Height = 22
Top = 111
Width = 141
Caption = 'PkgSrcCheckBox'
Checked = True
OnChange = PkgSrcCheckBoxChange
State = cbChecked
TabOrder = 4
end
object ProjOutMaskComboBox: TComboBox
AnchorSideTop.Control = Owner
AnchorSideRight.Control = ButtonPanel1
AnchorSideRight.Side = asrBottom
Left = 241
Height = 27
Top = 10
Width = 280
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 10
BorderSpacing.Right = 10
ItemHeight = 0
OnChange = ProjOutMaskComboBoxChange
TabOrder = 9
Text = 'ProjOutMaskComboBox'
end
object ProjSrcMaskComboBox: TComboBox
AnchorSideLeft.Control = ProjOutMaskComboBox
AnchorSideTop.Control = ProjOutMaskComboBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ProjOutMaskComboBox
AnchorSideRight.Side = asrBottom
Left = 241
Height = 27
Top = 43
Width = 280
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
ItemHeight = 0
OnChange = ProjOutMaskComboBoxChange
TabOrder = 5
Text = 'ProjSrcMaskComboBox'
end
object PkgOutMaskComboBox: TComboBox
AnchorSideLeft.Control = ProjOutMaskComboBox
AnchorSideTop.Control = ProjSrcMaskComboBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ProjOutMaskComboBox
AnchorSideRight.Side = asrBottom
Left = 241
Height = 27
Top = 76
Width = 280
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
ItemHeight = 0
OnChange = ProjOutMaskComboBoxChange
TabOrder = 6
Text = 'PkgOutMaskComboBox'
end
object PkgSrcMaskComboBox: TComboBox
AnchorSideLeft.Control = ProjOutMaskComboBox
AnchorSideTop.Control = PkgOutMaskComboBox
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = ProjOutMaskComboBox
AnchorSideRight.Side = asrBottom
Left = 241
Height = 27
Top = 109
Width = 280
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 6
ItemHeight = 0
OnChange = ProjOutMaskComboBoxChange
TabOrder = 7
Text = 'PkgSrcMaskComboBox'
end
object PreviewGroupBox: TGroupBox
AnchorSideTop.Control = PkgSrcMaskComboBox
AnchorSideTop.Side = asrBottom
Left = 6
Height = 292
Top = 146
Width = 525
Align = alBottom
Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.Top = 4
BorderSpacing.Around = 6
Caption = 'PreviewGroupBox'
ClientHeight = 271
ClientWidth = 517
TabOrder = 8
object FilesTreeView: TTreeView
Left = 0
Height = 271
Top = 0
Width = 517
Align = alClient
DefaultItemHeight = 19
TabOrder = 0
object ProjClearOutDirButton: TButton
AnchorSideLeft.Control = ProjectGroupBox
AnchorSideTop.Control = ProjectGroupBox
Left = 6
Height = 29
Top = 6
Width = 156
AutoSize = True
BorderSpacing.Around = 6
Caption = 'ProjClearOutDirButton'
TabOrder = 0
end
object ProjClearSrcDirsButton: TButton
AnchorSideLeft.Control = ProjectGroupBox
AnchorSideTop.Control = ProjClearOutDirButton
AnchorSideTop.Side = asrBottom
Left = 6
Height = 29
Top = 41
Width = 160
AutoSize = True
BorderSpacing.Around = 6
Caption = 'ProjClearSrcDirsButton'
TabOrder = 1
end
object ProjClearSrcDirMaskLabel: TLabel
AnchorSideLeft.Control = ProjClearSrcDirsButton
AnchorSideTop.Control = ProjClearSrcDirsButton
AnchorSideTop.Side = asrBottom
Left = 6
Height = 18
Top = 76
Width = 169
Caption = 'ProjClearSrcDirMaskLabel'
ParentColor = False
end
object ProjClearSrcDirMaskEdit: TEdit
Left = 205
Height = 27
Top = 95
Width = 80
TabOrder = 2
Text = 'ProjClearSrcDirMaskEdit'
end
end
object DependenciesGroupBox: TGroupBox
Left = 6
Height = 90
Top = 169
Width = 421
BorderSpacing.Around = 6
Caption = 'DependenciesGroupBox'
ClientHeight = 71
ClientWidth = 417
Constraints.MinHeight = 30
TabOrder = 1
object PkgClearOutDirsButton: TButton
Left = 106
Height = 25
Top = 3
Width = 75
Caption = 'PkgClearOutDirsButton'
TabOrder = 0
end
object PkgClearSrcDirsButton: TButton
Left = 152
Height = 25
Top = 34
Width = 75
Caption = 'PkgClearSrcDirsButton'
TabOrder = 1
end
object PkgClearSrcDirsMaskLabel: TLabel
Left = 242
Height = 18
Top = 43
Width = 175
Caption = 'PkgClearSrcDirsMaskLabel'
ParentColor = False
end
object PkgClearSrcDirsMaskEdit: TEdit
Left = 285
Height = 27
Top = 27
Width = 80
TabOrder = 2
Text = 'PkgClearSrcDirsMaskEdit'
end
end
end
end

View File

@ -1,3 +1,26 @@
{
***************************************************************************
* *
* This source is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* *
***************************************************************************
Abstract:
Dialog to clean up a project and its packages and to compile the project.
}
unit BuildProjectDlg;
{$mode objfpc}{$H+}
@ -5,41 +28,53 @@ unit BuildProjectDlg;
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ButtonPanel,
ExtCtrls, StdCtrls, IDEDialogs, LazarusIDEStrConsts, Project;
Classes, SysUtils, Math, FileProcs, Forms, Controls, Graphics, Dialogs,
ButtonPanel, ExtCtrls, StdCtrls, ComCtrls, Masks,
CodeToolManager, DirectoryCacher,
IDEDialogs, IDEImagesIntf,
PackageDefs, PackageSystem, InputHistory, LazarusIDEStrConsts, Project;
type
TBuildCleanMode = (
bcmIfNeeded,
bcmNormal,
bcmWithB // with -B
);
TBuildCleanModes = set of TBuildCleanMode;
TBuildCleanParams = record
Mode: TBuildCleanMode;
CleanOutputDirectory: boolean;
CleanSrcDirs: string; // file masks separated by semicolon
end;
{ TBuildProjectDialog }
TBuildProjectDialog = class(TForm)
ButtonPanel1: TButtonPanel;
DependenciesGroupBox: TGroupBox;
Panel1: TPanel;
PkgClearOutDirsButton: TButton;
PkgClearSrcDirsButton: TButton;
PkgClearSrcDirsMaskEdit: TEdit;
PkgClearSrcDirsMaskLabel: TLabel;
ProjClearOutDirButton: TButton;
ProjClearSrcDirMaskEdit: TEdit;
ProjClearSrcDirMaskLabel: TLabel;
ProjClearSrcDirsButton: TButton;
ProjectGroupBox: TGroupBox;
PkgOutCheckBox: TCheckBox;
PkgOutMaskComboBox: TComboBox;
PkgSrcCheckBox: TCheckBox;
PkgSrcMaskComboBox: TComboBox;
PreviewGroupBox: TGroupBox;
FilesTreeView: TTreeView;
ProjOutCheckBox: TCheckBox;
ProjOutMaskComboBox: TComboBox;
ProjSrcCheckBox: TCheckBox;
ProjSrcMaskComboBox: TComboBox;
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure PkgOutCheckBoxChange(Sender: TObject);
procedure PkgSrcCheckBoxChange(Sender: TObject);
procedure ProjOutCheckBoxChange(Sender: TObject);
procedure ProjOutMaskComboBoxChange(Sender: TObject);
procedure ProjSrcCheckBoxChange(Sender: TObject);
private
ImageIndexDirectory: Integer;
ImageIndexFile: Integer;
FIdleConnected: boolean;
procedure SetIdleConnected(const AValue: boolean);
procedure OnIdle(Sender: TObject; var Done: Boolean);
private
FProject: TProject;
FUpdateNeeded: boolean;
procedure UpdateFilesTreeView(Immediately: boolean = false);
procedure AddProjOutDirectory;
procedure AddProjSrcDirectories;
procedure AddPkgOutDirectories;
procedure AddPkgSrcDirectory;
procedure AddDirectory(aTVPath, aDirectory, aFileMask: string);
procedure AddDirectories(aTVPath, aSearchPath, aFileMask: string);
property IdleConnected: boolean read FIdleConnected write SetIdleConnected;
public
procedure Init(AProject: TProject);
end;
@ -67,21 +102,325 @@ end;
procedure TBuildProjectDialog.FormCreate(Sender: TObject);
begin
Caption:='Build Project';
PrProjectGroupBoxaption:='Compile project:';
PrProjectGroupBoxtems.Add('Standard');
PrProjectGroupBoxtems.Add('with -B');
PrProjectGroupBoxtems.Add('Clean output directory');
DeDependenciesGroupBoxaption:='Compile used packages:';
DeDependenciesGroupBoxtems.Add('If needed');
DeDependenciesGroupBoxtems.Add('Compile');
DeDependenciesGroupBoxtems.Add('with -B');
DeDependenciesGroupBoxtems.Add('Clean output directory');
Caption:=lisCleanUpAndBuildProject;
ProjOutCheckBox.Caption:=lisProjectOutputDirectory;
ProjSrcCheckBox.Caption:=lisProjectSourceDirectories;
PkgOutCheckBox.Caption:=lisPackageOutputDirectories;
PkgSrcCheckBox.Caption:=lisPackageSourceDirectories;
PreviewGroupBox.Caption:=lisTheseFilesWillBeDeleted;
ButtonPanel1.OKButton.Caption:=lisBuildProject;
FilesTreeView.Images:=IDEImages.Images_16;
ImageIndexDirectory := IDEImages.LoadImage(16, 'pkg_files');
ImageIndexFile := IDEImages.LoadImage(16, 'laz_delete');
end;
procedure TBuildProjectDialog.FormDestroy(Sender: TObject);
begin
FProject:=nil;
IdleConnected:=false;
end;
procedure TBuildProjectDialog.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
procedure StoreCombo(AComboBox: TComboBox);
begin
// store all masks into one history list
ProjOutMaskComboBox.AddHistoryItem(AComboBox.Text,30,true,false);
end;
begin
FProject.CleanOutputFileMask:=ProjOutMaskComboBox.Text;
FProject.CleanSourcesFileMask:=ProjSrcMaskComboBox.Text;
InputHistories.CleanOutputFileMask:=PkgOutMaskComboBox.Text;
InputHistories.CleanSourcesFileMask:=PkgSrcMaskComboBox.Text;
// combine history lists
StoreCombo(ProjOutMaskComboBox);
StoreCombo(ProjSrcMaskComboBox);
StoreCombo(PkgOutMaskComboBox);
StoreCombo(PkgSrcMaskComboBox);
InputHistories.HistoryLists.GetList(hlCleanBuildFileMask,true).Assign(ProjOutMaskComboBox.Items);
end;
procedure TBuildProjectDialog.FormResize(Sender: TObject);
var
r: Integer;
begin
r:=ProjOutCheckBox.Left
+Max(Max(ProjOutCheckBox.Width,ProjSrcCheckBox.Width),
Max(PkgOutCheckBox.Width,PkgSrcCheckBox.Width));
ProjOutMaskComboBox.Left:=r+10;
end;
procedure TBuildProjectDialog.PkgOutCheckBoxChange(Sender: TObject);
begin
PkgOutMaskComboBox.Enabled:=PkgOutCheckBox.Checked;
UpdateFilesTreeView;
end;
procedure TBuildProjectDialog.PkgSrcCheckBoxChange(Sender: TObject);
begin
PkgSrcMaskComboBox.Enabled:=PkgSrcCheckBox.Checked;
UpdateFilesTreeView;
end;
procedure TBuildProjectDialog.ProjOutCheckBoxChange(Sender: TObject);
begin
ProjOutMaskComboBox.Enabled:=ProjOutCheckBox.Checked;
UpdateFilesTreeView;
end;
procedure TBuildProjectDialog.ProjOutMaskComboBoxChange(Sender: TObject);
begin
UpdateFilesTreeView;
end;
procedure TBuildProjectDialog.ProjSrcCheckBoxChange(Sender: TObject);
begin
ProjSrcMaskComboBox.Enabled:=ProjSrcCheckBox.Checked;
UpdateFilesTreeView;
end;
procedure TBuildProjectDialog.SetIdleConnected(const AValue: boolean);
begin
if FIdleConnected=AValue then exit;
FIdleConnected:=AValue;
if IdleConnected then
Application.AddOnIdleHandler(@OnIdle)
else
Application.RemoveOnIdleHandler(@OnIdle);
end;
procedure TBuildProjectDialog.OnIdle(Sender: TObject; var Done: Boolean);
begin
if FProject=nil then exit;
if not FUpdateNeeded then exit;
IdleConnected:=false;
UpdateFilesTreeView(true);
end;
procedure TBuildProjectDialog.UpdateFilesTreeView(Immediately: boolean);
function CreateTVChildCounts(TVNode: TTreeNode): integer;
var
ChildNode: TTreeNode;
begin
Result:=0;
if TVNode=nil then exit;
ChildNode:=TVNode.GetFirstChild;
while ChildNode<>nil do begin
inc(Result,CreateTVChildCounts(ChildNode));
ChildNode:=ChildNode.GetNextSibling;
end;
if (Result=0) and (TVNode.Count>0) then
// has children, but no grand children => is a directory
inc(Result,TVNode.Count);
if Result>0 then
TVNode.Text:=TVNode.Text+' ('+IntToStr(Result)+' files)';
end;
var
i: Integer;
TVNode: TTreeNode;
begin
if not Immediately then begin
FUpdateNeeded:=true;
IdleConnected:=true;
exit;
end;
FUpdateNeeded:=false;
FilesTreeView.BeginUpdate;
FilesTreeView.Items.Clear;
if FProject<>nil then begin
if ProjOutCheckBox.Checked then AddProjOutDirectory;
if ProjSrcCheckBox.Checked then AddProjSrcDirectories;
if PkgOutCheckBox.Checked then AddPkgOutDirectories;
if PkgSrcCheckBox.Checked then AddPkgSrcDirectory;
end;
for i:=0 to FilesTreeView.Items.TopLvlCount-1 do begin
TVNode:=FilesTreeView.Items.TopLvlItems[i];
CreateTVChildCounts(TVNode);
TVNode.Expand(true);
end;
FilesTreeView.EndUpdate;
end;
procedure TBuildProjectDialog.AddProjOutDirectory;
begin
AddDirectory('Project output directory',
FProject.CompilerOptions.GetUnitOutputDirectory(false),
ProjOutMaskComboBox.Text);
end;
procedure TBuildProjectDialog.AddProjSrcDirectories;
begin
AddDirectories('Project output directory',
FProject.SourceDirectories.CreateSearchPathFromAllFiles,
ProjSrcMaskComboBox.Text);
end;
procedure TBuildProjectDialog.AddPkgOutDirectories;
var
List: TFPList;
i: Integer;
Pkg: TLazPackage;
begin
List:=nil;
try
PackageGraph.GetAllRequiredPackages(FProject.FirstRequiredDependency,List);
if List=nil then exit;
for i:=0 to List.Count-1 do begin
Pkg:=TLazPackage(List[i]);
AddDirectory(Pkg.Name,Pkg.CompilerOptions.GetUnitOutputDirectory(false),
PkgOutMaskComboBox.Text);
end;
finally
List.Free;
end;
end;
procedure TBuildProjectDialog.AddPkgSrcDirectory;
var
List: TFPList;
i: Integer;
Pkg: TLazPackage;
begin
List:=nil;
try
PackageGraph.GetAllRequiredPackages(FProject.FirstRequiredDependency,List);
if List=nil then exit;
for i:=0 to List.Count-1 do begin
Pkg:=TLazPackage(List[i]);
AddDirectories(Pkg.Name,Pkg.SourceDirectories.CreateSearchPathFromAllFiles,
PkgSrcMaskComboBox.Text);
end;
finally
List.Free;
end;
end;
procedure TBuildProjectDialog.AddDirectory(aTVPath, aDirectory,
aFileMask: string);
var
Cache: TCTDirectoryCache;
Files: TStrings;
TVFiles: TStringList;
MaskList: TMaskList;
p: SizeInt;
NodeText: String;
TVNode: TTreeNode;
ParentTVNode: TTreeNode;
i: Integer;
begin
//debugln(['TBuildProjectDialog.AddDirectory aTVPath="',aTVPath,'" aDirectory="',aDirectory,'" aFileMask="',aFileMask,'"']);
if (aDirectory='') or (aFileMask='')
or (not FilenameIsAbsolute(aDirectory))
or (not DirPathExistsCached(aDirectory))
then exit;
// get directory listing from cache
Cache:=CodeToolBoss.DirectoryCachePool.GetCache(aDirectory,true,false);
if Cache=nil then exit;
Files:=TStringList.Create;
TVFiles:=TStringList.Create;
MaskList:=TMaskList.Create(aFileMask,';');
try
if MaskList.Count=0 then exit;
Cache.GetFiles(Files);
//debugln(['TBuildProjectDialog.AddDirectory AllFiles="',Files.Text,'"']);
// filter files
for i:=0 to Files.Count-1 do
if MaskList.Matches(Files[i]) then
TVFiles.Add(Files[i]);
//debugln(['TBuildProjectDialog.AddDirectory FilteredFiles="',TVFiles.Text,'"']);
if TVFiles.Count=0 then exit;
// create tree node for aTVPath
ParentTVNode:=nil;
p:=System.Pos('/',aTVPath);
if p>0 then begin
NodeText:=copy(aTVPath,1,p-1);
aTVPath:=Copy(aTVPath,p+1,length(aTVPath));
end else begin
NodeText:=aTVPath;
end;
if ParentTVNode=nil then
TVNode:=FilesTreeView.Items.FindTopLvlNode(NodeText)
else
TVNode:=ParentTVNode.FindNode(NodeText);
if TVNode=nil then
TVNode:=FilesTreeView.Items.AddChild(ParentTVNode,NodeText);
TVNode.ImageIndex:=ImageIndexDirectory;
TVNode.SelectedIndex:=ImageIndexDirectory;
ParentTVNode:=TVNode;
// create tree node for directory
NodeText:=FProject.GetShortFilename(aDirectory,true);
TVNode:=ParentTVNode.GetFirstChild;
while (TVNode<>nil) and (CompareFilenames(TVNode.Text,NodeText)<0) do
TVNode:=TVNode.GetNextSibling;
if TVNode=nil then
TVNode:=FilesTreeView.Items.AddChild(ParentTVNode,NodeText)
else if (CompareFilenames(TVNode.Text,NodeText)<>0) then
TVNode:=FilesTreeView.Items.Add(TVNode,NodeText);
TVNode.ImageIndex:=ImageIndexDirectory;
TVNode.SelectedIndex:=ImageIndexDirectory;
ParentTVNode:=TVNode;
// add files
for i:=0 to TVFiles.Count-1 do begin
TVNode:=FilesTreeView.Items.AddChild(ParentTVNode,TVFiles[i]);
TVNode.ImageIndex:=ImageIndexFile;
TVNode.SelectedIndex:=ImageIndexFile;
end;
finally
MaskList.Free;
Files.Free;
TVFiles.Free;
end;
end;
procedure TBuildProjectDialog.AddDirectories(aTVPath, aSearchPath,
aFileMask: string);
var
Directory: String;
p: Integer;
begin
p:=1;
while p<=length(aSearchPath) do begin
Directory:=TrimFilename(GetNextDelimitedItem(aSearchPath,';',p));
if FilenameIsAbsolute(Directory) then
AddDirectory(aTVPath,Directory,aFileMask);
end;
end;
procedure TBuildProjectDialog.Init(AProject: TProject);
var
List: THistoryList;
begin
List:=InputHistories.HistoryLists.GetList(hlCleanBuildFileMask,true);
ProjOutMaskComboBox.Items.Assign(List);
ProjOutMaskComboBox.Text:=AProject.CleanOutputFileMask;
ProjSrcMaskComboBox.Items.Assign(List);
ProjSrcMaskComboBox.Text:=AProject.CleanSourcesFileMask;
PkgOutMaskComboBox.Items.Assign(List);
PkgOutMaskComboBox.Text:=InputHistories.CleanOutputFileMask;
PkgSrcMaskComboBox.Items.Assign(List);
PkgSrcMaskComboBox.Text:=InputHistories.CleanSourcesFileMask;
if AProject.CompilerOptions.UnitOutputDirectory='' then begin
ProjOutCheckBox.Enabled:=false;
ProjOutCheckBox.Checked:=false;
ProjOutMaskComboBox.Enabled:=false;
end;
FProject:=AProject;
UpdateFilesTreeView;
end;
end.

View File

@ -36,7 +36,8 @@ interface
uses
Classes, SysUtils, FileUtil, FileProcs, DiffPatch, IDEProcs, AvgLvlTree,
SynEditTypes, Laz_XMLCfg, LazConf, Dialogs, LCLProc, IDEDialogs;
SynEditTypes, Laz_XMLCfg, LazConf, Dialogs, LCLProc,
IDEDialogs, ProjectIntf;
{$ifdef Windows}
{$define CaseInsensitiveFilenames}
@ -56,6 +57,7 @@ const
hlLaunchingApplication = 'LaunchingApplication';
hlCmdLineParameters = 'CommandLineParameters';
hlWorkingDirectory = 'WorkingDirectory';
hlCleanBuildFileMask = 'CleanBuildFileMask';
type
TFileDialogSettings = record
@ -191,6 +193,8 @@ type
TInputHistories = class
private
FCleanOutputFileMask: string;
FCleanSourcesFileMask: string;
FDiffFlags: TTextDiffFlags;
FDiffText2: string;
FDiffText2OnlySelection: boolean;
@ -285,7 +289,9 @@ type
// filedialogs
property FileDialogSettings: TFileDialogSettings
read FFileDialogSettings write FFileDialogSettings;
property CleanOutputFileMask: string read FCleanOutputFileMask write FCleanOutputFileMask;
property CleanSourcesFileMask: string read FCleanSourcesFileMask write FCleanSourcesFileMask;
// various history lists
property HistoryLists: THistoryLists read FHistoryLists;
@ -463,6 +469,8 @@ begin
FFPCConfigCache.Clear;
FLastConvertDelphiProject:='';
FLastConvertDelphiUnit:='';
FCleanOutputFileMask:=DefaultProjectCleanOutputFileMask;
FCleanSourcesFileMask:=DefaultProjectCleanSourcesFileMask;
fFileEncodings.Clear;
FIgnores.Clear;
end;
@ -516,6 +524,10 @@ begin
MaxHistory:=XMLConfig.GetValue(Path+'FileDialog/MaxHistory',20);
LoadRecentList(XMLConfig,HistoryList,Path+'FileDialog/HistoryList/');
end;
FCleanOutputFileMask:=XMLConfig.GetValue(Path+'Clean/OutputFilemask',
DefaultProjectCleanOutputFileMask);
FCleanSourcesFileMask:=XMLConfig.GetValue(Path+'Clean/SourcesFilemask',
DefaultProjectCleanSourcesFileMask);
// history lists
FHistoryLists.LoadFromXMLConfig(XMLConfig,Path+'HistoryLists/');
// diff dialog
@ -584,6 +596,10 @@ begin
XMLConfig.SetDeleteValue(Path+'FileDialog/MaxHistory',MaxHistory,20);
SaveRecentList(XMLConfig,HistoryList,Path+'FileDialog/HistoryList/');
end;
XMLConfig.SetDeleteValue(Path+'Clean/OutputFilemask',FCleanOutputFileMask,
DefaultProjectCleanOutputFileMask);
XMLConfig.SetDeleteValue(Path+'Clean/SourcesFilemask',FCleanSourcesFileMask,
DefaultProjectCleanSourcesFileMask);
// history lists
FHistoryLists.SaveToXMLConfig(XMLConfig,Path+'HistoryLists/');
// diff dialog

View File

@ -235,6 +235,12 @@ procedure GetDefaultKeyForWindowsScheme(Command: word;
TheKeyB:=IDEShortCut(NewKey2A,NewShift2A,NewKey2B,NewShift2B);
end;
procedure SetResult2(
NewKey1A: word; NewShift1A: TShiftState;
NewKey1B: word; NewShift1B: TShiftState);
begin
SetResult2(NewKey1A,NewShift1A,NewKey1B,NewShift1B,VK_UNKNOWN,[],VK_UNKNOWN,[]);
end;
// procedure SetResult(NewKeyA: word; NewShiftA: TShiftState);
// begin
@ -279,12 +285,12 @@ begin
ecSelectAll: SetResult(VK_A,[ssCtrl],VK_UNKNOWN,[]);
ecSelectToBrace: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectCodeBlock: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectWord: SetResult2(VK_K,[SSCtrl],VK_T,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectLine: SetResult2(VK_K,[SSCtrl],VK_L,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectWord: SetResult2(VK_K,[SSCtrl],VK_T,[]);
ecSelectLine: SetResult2(VK_K,[SSCtrl],VK_L,[]);
ecSelectParagraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionUpperCase: SetResult2(VK_K,[SSCtrl],VK_N,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionLowerCase: SetResult2(VK_K,[SSCtrl],VK_O,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionSwapCase: SetResult2(VK_K,[SSCtrl],VK_P,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionUpperCase: SetResult2(VK_K,[SSCtrl],VK_N,[]);
ecSelectionLowerCase: SetResult2(VK_K,[SSCtrl],VK_O,[]);
ecSelectionSwapCase: SetResult2(VK_K,[SSCtrl],VK_P,[]);
ecSelectionTabs2Spaces: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionEnclose: SetResult(VK_N, [ssShift,ssCtrl],VK_UNKNOWN,[]);
ecSelectionComment: SetResult(VK_V, [ssShift,ssCtrl],VK_UNKNOWN,[]);
@ -297,8 +303,8 @@ begin
ecBlockSetBegin : SetResult2(VK_K,[ssCtrl],VK_B,[], VK_K,[ssCtrl],VK_B,[ssCtrl]);
ecBlockSetEnd : SetResult2(VK_K,[ssCtrl],VK_K,[], VK_K,[ssCtrl],VK_K,[ssCtrl]);
ecBlockToggleHide : SetResult2(VK_K,[ssCtrl],VK_H,[], VK_K,[ssCtrl],VK_H,[ssCtrl]);
ecBlockHide : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockShow : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockHide : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockShow : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockMove : SetResult2(VK_K,[ssCtrl],VK_V,[], VK_K,[ssCtrl],VK_V,[ssCtrl]);
ecBlockCopy : SetResult2(VK_K,[ssCtrl],VK_C,[], VK_K,[ssCtrl],VK_C,[ssCtrl]);
ecBlockDelete : SetResult2(VK_K,[ssCtrl],VK_Y,[], VK_K,[ssCtrl],VK_Y,[ssCtrl]);
@ -370,7 +376,7 @@ begin
ecViewJumpHistory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpToPrevError: SetResult(VK_F8,[ssCtrl, ssShift],VK_UNKNOWN,[]);
ecJumpToNextError: SetResult(VK_F8,[ssCtrl],VK_UNKNOWN,[]);
ecOpenFileAtCursor: SetResult2(VK_RETURN,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenFileAtCursor: SetResult2(VK_RETURN,[ssCtrl],VK_UNKNOWN,[]);
ecProcedureList: SetResult(VK_G, [ssAlt],VK_UNKNOWN,[]);
// marker
@ -430,8 +436,8 @@ begin
ecFindProcedureDefinition: SetResult(VK_UP,[ssShift,SSCtrl],VK_UNKNOWN,[]);
ecFindProcedureMethod: SetResult(VK_DOWN,[ssShift,SSCtrl],VK_UNKNOWN,[]);
ecFindDeclaration: SetResult(VK_UP,[ssAlt],VK_UNKNOWN,[]);
ecFindBlockOtherEnd: SetResult2(VK_Q,[ssCtrl],VK_K,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindBlockStart: SetResult2(VK_Q,[ssCtrl],VK_B,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindBlockOtherEnd: SetResult2(VK_Q,[ssCtrl],VK_K,[]);
ecFindBlockStart: SetResult2(VK_Q,[ssCtrl],VK_B,[]);
ecGotoIncludeDirective: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowAbstractMethods: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRemoveEmptyMethods: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -549,6 +555,7 @@ begin
ecCompile: SetResult(VK_F9,[ssCtrl],VK_UNKNOWN,[]);
ecBuild: SetResult(VK_F9,[ssShift],VK_UNKNOWN,[]);
ecQuickCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAbortBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRun: SetResult(VK_F9,[],VK_UNKNOWN,[]);
ecPause: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -708,7 +715,7 @@ begin
ecLineEnd: SetResult(VK_Q, [ssCtrl], VK_D, [], VK_END, [],VK_UNKNOWN,[]);
ecPageUp: SetResult(VK_R, [ssCtrl], VK_UNKNOWN, [], VK_PRIOR, [],VK_UNKNOWN,[]);
ecPageDown: SetResult(VK_C, [ssCtrl], VK_UNKNOWN, [], VK_NEXT, [],VK_UNKNOWN,[]);
ecPageLeft: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPageLeft: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPageRight: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPageTop: SetResult(VK_Q, [ssCtrl], VK_E, [], VK_HOME, [ssCtrl],VK_UNKNOWN,[]);
ecPageBottom: SetResult(VK_Q, [ssCtrl], VK_X, [], VK_END, [ssCtrl],VK_UNKNOWN,[]);
@ -716,8 +723,8 @@ begin
ecEditorBottom: SetResult(VK_Q, [ssCtrl], VK_C, [], VK_NEXT,[ssCtrl],VK_UNKNOWN,[]);
ecScrollUp: SetResult(VK_W, [ssCtrl], VK_UNKNOWN, [], VK_UP, [ssCtrl],VK_UNKNOWN,[]);
ecScrollDown: SetResult(VK_Z, [ssCtrl], VK_UNKNOWN, [], VK_DOWN, [ssCtrl],VK_UNKNOWN,[]);
ecScrollLeft: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecScrollRight: SetResult(VK_UNKNOWN, [], VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecScrollLeft: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecScrollRight: SetResult(VK_UNKNOWN, [], VK_UNKNOWN,[]);
// selection
ecCopy: SetResult(VK_Insert,[ssCtrl],VK_UNKNOWN, [],VK_UNKNOWN, [],VK_UNKNOWN, []);
@ -742,7 +749,7 @@ begin
ecSelectParagraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[], VK_UNKNOWN, [], VK_UNKNOWN, []);
ecSelectionUpperCase: SetResult(VK_K,[ssCtrl],VK_N,[], VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionLowerCase: SetResult(VK_K,[ssCtrl],VK_O,[], VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionSwapCase: SetResult(VK_K,[SSCtrl],VK_P,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionSwapCase: SetResult(VK_K,[SSCtrl],VK_P,[]);
ecSelectionTabs2Spaces: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[], VK_UNKNOWN, [], VK_UNKNOWN, []);
ecSelectionEnclose: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[], VK_UNKNOWN, [], VK_UNKNOWN, []);
ecSelectionComment: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[], VK_UNKNOWN, [], VK_UNKNOWN, []);
@ -755,8 +762,8 @@ begin
ecBlockSetBegin : SetResult(VK_K,[ssCtrl],VK_B,[], VK_K,[ssCtrl],VK_B,[ssCtrl]);
ecBlockSetEnd : SetResult(VK_K,[ssCtrl],VK_K,[], VK_K,[ssCtrl],VK_K,[ssCtrl]);
ecBlockToggleHide : SetResult(VK_K,[ssCtrl],VK_H,[], VK_K,[ssCtrl],VK_H,[ssCtrl]);
ecBlockHide : SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockShow : SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockHide : SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockShow : SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockMove : SetResult(VK_K,[ssCtrl],VK_V,[], VK_K,[ssCtrl],VK_V,[ssCtrl]);
ecBlockCopy : SetResult(VK_K,[ssCtrl],VK_C,[], VK_K,[ssCtrl],VK_C,[ssCtrl]);
ecBlockDelete : SetResult(VK_K,[ssCtrl],VK_Y,[ssCtrl], VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -778,120 +785,120 @@ begin
ecColSelEditorBottom: SetResult(VK_END, [ssAlt, ssShift,ssCtrl], VK_UNKNOWN,[], VK_UNKNOWN,[], VK_UNKNOWN,[]);
// editing
ecBlockIndent: SetResult(VK_K,[ssCtrl],VK_I,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockUnindent: SetResult(VK_K,[ssCtrl],VK_U,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockIndent: SetResult(VK_K,[ssCtrl],VK_I,[]);
ecBlockUnindent: SetResult(VK_K,[ssCtrl],VK_U,[]);
ecDeleteLastChar: SetResult(VK_H,[ssCtrl],VK_UNKNOWN,[],VK_BACK, [],VK_UNKNOWN,[]);
ecDeleteChar: SetResult(VK_DELETE,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteWord: SetResult(VK_T,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteLastWord: SetResult(VK_BACK,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteBOL: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteEOL: SetResult(VK_K,[ssCtrl],VK_Y,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteLine: SetResult(VK_Y,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecClearAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteChar: SetResult(VK_DELETE,[],VK_UNKNOWN,[]);
ecDeleteWord: SetResult(VK_T,[ssCtrl],VK_UNKNOWN,[]);
ecDeleteLastWord: SetResult(VK_BACK,[ssCtrl],VK_UNKNOWN,[]);
ecDeleteBOL: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDeleteEOL: SetResult(VK_K,[ssCtrl],VK_Y,[]);
ecDeleteLine: SetResult(VK_Y,[ssCtrl],VK_UNKNOWN,[]);
ecClearAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecLineBreak: SetResult(VK_RETURN,[],VK_UNKNOWN,[],VK_M,[ssCtrl],VK_UNKNOWN,[]);
ecInsertLine: SetResult(VK_N,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCharacter: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertLGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertModifiedLGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertUserName: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertDateTime: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertChangeLogEntry: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSAuthor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSDate: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSHeader: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSID: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSLog: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSName: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSRevision: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertLine: SetResult(VK_N,[ssCtrl],VK_UNKNOWN,[]);
ecInsertCharacter: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertLGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertModifiedLGPLNotice: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertUserName: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertDateTime: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertChangeLogEntry: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSAuthor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSDate: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSHeader: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSID: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSLog: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSName: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSRevision: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInsertCVSSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// command commands
ecUndo: SetResult(VK_BACK,[ssALT],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRedo: SetResult(VK_BACK,[ssALT,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecUndo: SetResult(VK_BACK,[ssALT],VK_UNKNOWN,[]);
ecRedo: SetResult(VK_BACK,[ssALT,ssShift],VK_UNKNOWN,[]);
// search & replace
ecMatchBracket: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMatchBracket: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFind: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_Q,[SSCtrl],VK_F,[]);
ecFindNext: SetResult(VK_L,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindPrevious: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindInFiles: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecReplace: SetResult(VK_Q,[SSCtrl],VK_A,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecIncrementalFind: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoLineNumber: SetResult(VK_G,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindNextWordOccurrence: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindPrevWordOccurrence: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpBack: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpForward: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddJumpPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewJumpHistory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpToPrevError: SetResult(VK_F7,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpToNextError: SetResult(VK_F8,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenFileAtCursor: SetResult(VK_RETURN,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindNext: SetResult(VK_L,[ssCtrl],VK_UNKNOWN,[]);
ecFindPrevious: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindInFiles: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecReplace: SetResult(VK_Q,[SSCtrl],VK_A,[]);
ecIncrementalFind: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoLineNumber: SetResult(VK_G,[ssCtrl],VK_UNKNOWN,[]);
ecFindNextWordOccurrence: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindPrevWordOccurrence: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpBack: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpForward: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddJumpPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewJumpHistory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecJumpToPrevError: SetResult(VK_F7,[ssAlt],VK_UNKNOWN,[]);
ecJumpToNextError: SetResult(VK_F8,[ssAlt],VK_UNKNOWN,[]);
ecOpenFileAtCursor: SetResult(VK_RETURN,[ssCtrl],VK_UNKNOWN,[]);
// marker
ecSetFreeBookmark: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPrevBookmark: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNextBookmark: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker0: SetResult(VK_Q,[ssCtrl],VK_0,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker1: SetResult(VK_Q,[ssCtrl],VK_1,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker2: SetResult(VK_Q,[ssCtrl],VK_2,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker3: SetResult(VK_Q,[ssCtrl],VK_3,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker4: SetResult(VK_Q,[ssCtrl],VK_4,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker5: SetResult(VK_Q,[ssCtrl],VK_5,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker6: SetResult(VK_Q,[ssCtrl],VK_6,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker7: SetResult(VK_Q,[ssCtrl],VK_7,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker8: SetResult(VK_Q,[ssCtrl],VK_8,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker9: SetResult(VK_Q,[ssCtrl],VK_9,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSetMarker0..ecSetMarker9: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker0: SetResult(VK_K,[ssCtrl],VK_0,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker1: SetResult(VK_K,[ssCtrl],VK_1,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker2: SetResult(VK_K,[ssCtrl],VK_2,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker3: SetResult(VK_K,[ssCtrl],VK_3,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker4: SetResult(VK_K,[ssCtrl],VK_4,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker5: SetResult(VK_K,[ssCtrl],VK_5,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker6: SetResult(VK_K,[ssCtrl],VK_6,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker7: SetResult(VK_K,[ssCtrl],VK_7,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker8: SetResult(VK_K,[ssCtrl],VK_8,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker9: SetResult(VK_K,[ssCtrl],VK_9,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoMarker0: SetResult(VK_Q,[ssCtrl],VK_0,[]);
ecGotoMarker1: SetResult(VK_Q,[ssCtrl],VK_1,[]);
ecGotoMarker2: SetResult(VK_Q,[ssCtrl],VK_2,[]);
ecGotoMarker3: SetResult(VK_Q,[ssCtrl],VK_3,[]);
ecGotoMarker4: SetResult(VK_Q,[ssCtrl],VK_4,[]);
ecGotoMarker5: SetResult(VK_Q,[ssCtrl],VK_5,[]);
ecGotoMarker6: SetResult(VK_Q,[ssCtrl],VK_6,[]);
ecGotoMarker7: SetResult(VK_Q,[ssCtrl],VK_7,[]);
ecGotoMarker8: SetResult(VK_Q,[ssCtrl],VK_8,[]);
ecGotoMarker9: SetResult(VK_Q,[ssCtrl],VK_9,[]);
ecSetMarker0..ecSetMarker9: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMarker0: SetResult(VK_K,[ssCtrl],VK_0,[]);
ecToggleMarker1: SetResult(VK_K,[ssCtrl],VK_1,[]);
ecToggleMarker2: SetResult(VK_K,[ssCtrl],VK_2,[]);
ecToggleMarker3: SetResult(VK_K,[ssCtrl],VK_3,[]);
ecToggleMarker4: SetResult(VK_K,[ssCtrl],VK_4,[]);
ecToggleMarker5: SetResult(VK_K,[ssCtrl],VK_5,[]);
ecToggleMarker6: SetResult(VK_K,[ssCtrl],VK_6,[]);
ecToggleMarker7: SetResult(VK_K,[ssCtrl],VK_7,[]);
ecToggleMarker8: SetResult(VK_K,[ssCtrl],VK_8,[]);
ecToggleMarker9: SetResult(VK_K,[ssCtrl],VK_9,[]);
// codetools
ecAutoCompletion: SetResult(VK_J,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecWordCompletion: SetResult(VK_W,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCompleteCode: SetResult(VK_C,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecIdentCompletion: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowCodeContext: SetResult(VK_SPACE,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecExtractProc: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindIdentifierRefs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRenameIdentifier: SetResult(VK_E,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInvertAssignment: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSyntaxCheck: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGuessUnclosedBlock: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGuessMisplacedIFDEF: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDFM2LFM: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCheckLFM: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAutoCompletion: SetResult(VK_J,[ssCtrl],VK_UNKNOWN,[]);
ecWordCompletion: SetResult(VK_W,[ssShift,ssCtrl],VK_UNKNOWN,[]);
ecCompleteCode: SetResult(VK_C,[ssShift,ssCtrl],VK_UNKNOWN,[]);
ecIdentCompletion: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowCodeContext: SetResult(VK_SPACE,[ssShift,ssCtrl],VK_UNKNOWN,[]);
ecExtractProc: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindIdentifierRefs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRenameIdentifier: SetResult(VK_E,[ssShift,ssCtrl],VK_UNKNOWN,[]);
ecInvertAssignment: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSyntaxCheck: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGuessUnclosedBlock: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGuessMisplacedIFDEF: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDFM2LFM: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCheckLFM: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDelphiUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDelphiProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertDelphiPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConvertEncoding: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindProcedureDefinition: SetResult(VK_UP,[ssShift,SSCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindProcedureMethod: SetResult(VK_DOWN,[ssShift,SSCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindDeclaration: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindBlockOtherEnd: SetResult(VK_Q,[ssCtrl],VK_K,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindBlockStart: SetResult(VK_Q,[ssCtrl],VK_B,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoIncludeDirective: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindProcedureDefinition: SetResult(VK_UP,[ssShift,SSCtrl],VK_UNKNOWN,[]);
ecFindProcedureMethod: SetResult(VK_DOWN,[ssShift,SSCtrl],VK_UNKNOWN,[]);
ecFindDeclaration: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecFindBlockOtherEnd: SetResult(VK_Q,[ssCtrl],VK_K,[]);
ecFindBlockStart: SetResult(VK_Q,[ssCtrl],VK_B,[]);
ecGotoIncludeDirective: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowAbstractMethods: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRemoveEmptyMethods: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// source notebook
ecNextEditor: SetResult(VK_F6,[],VK_UNKNOWN,[],VK_TAB, [ssCtrl], VK_UNKNOWN, []);
ecPrevEditor: SetResult(VK_F6,[ssShift],VK_UNKNOWN,[],VK_TAB, [ssShift,ssCtrl], VK_UNKNOWN, []);
ecResetDebugger: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleBreakPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMoveEditorLeft: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMoveEditorRight: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMoveEditorLeftmost: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMoveEditorRightmost: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecResetDebugger: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleBreakPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMoveEditorLeft: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecMoveEditorRight: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecMoveEditorLeftmost: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecMoveEditorRightmost: SetResult(VK_UNKNOWN, [], VK_UNKNOWN, []);
ecNextSharedEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPrevSharedEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -904,211 +911,212 @@ begin
ecCopyEditorPrevWindow: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCopyEditorNewWindow: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor1: SetResult(VK_1,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor2: SetResult(VK_2,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor3: SetResult(VK_3,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor4: SetResult(VK_4,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor5: SetResult(VK_5,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor6: SetResult(VK_6,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor7: SetResult(VK_7,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor8: SetResult(VK_8,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor9: SetResult(VK_9,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor0: SetResult(VK_0,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecGotoEditor1: SetResult(VK_1,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor2: SetResult(VK_2,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor3: SetResult(VK_3,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor4: SetResult(VK_4,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor5: SetResult(VK_5,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor6: SetResult(VK_6,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor7: SetResult(VK_7,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor8: SetResult(VK_8,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor9: SetResult(VK_9,[ssAlt],VK_UNKNOWN,[]);
ecGotoEditor0: SetResult(VK_0,[ssAlt],VK_UNKNOWN,[]);
ecLockEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel1: SetResult(VK_1,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel2: SetResult(VK_2,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel3: SetResult(VK_3,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel4: SetResult(VK_4,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel5: SetResult(VK_5,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel6: SetResult(VK_6,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel7: SetResult(VK_7,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel8: SetResult(VK_8,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel9: SetResult(VK_9,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel0: SetResult(VK_0,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldCurrent: SetResult(VK_OEM_PLUS,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcUnFoldCurrent: SetResult(VK_OEM_MINUS,[ssAlt,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcToggleMarkupWord: SetResult(VK_M,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
EcFoldLevel1: SetResult(VK_1,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel2: SetResult(VK_2,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel3: SetResult(VK_3,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel4: SetResult(VK_4,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel5: SetResult(VK_5,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel6: SetResult(VK_6,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel7: SetResult(VK_7,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel8: SetResult(VK_8,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel9: SetResult(VK_9,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldLevel0: SetResult(VK_0,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcFoldCurrent: SetResult(VK_OEM_PLUS,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcUnFoldCurrent: SetResult(VK_OEM_MINUS,[ssAlt,ssShift],VK_UNKNOWN,[]);
EcToggleMarkupWord: SetResult(VK_M,[ssAlt],VK_UNKNOWN,[]);
// file menu
ecNew: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewForm: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpen: SetResult(VK_F3,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRevert: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSave: SetResult(VK_F2,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveAs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveAll: SetResult(VK_F2,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecClose: SetResult(VK_F3,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCloseAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanDirectory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRestart: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecQuit: SetResult(VK_X,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNew: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewForm: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpen: SetResult(VK_F3,[],VK_UNKNOWN,[]);
ecRevert: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSave: SetResult(VK_F2,[],VK_UNKNOWN,[]);
ecSaveAs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveAll: SetResult(VK_F2,[ssShift],VK_UNKNOWN,[]);
ecClose: SetResult(VK_F3,[ssAlt],VK_UNKNOWN,[]);
ecCloseAll: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanDirectory: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRestart: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecQuit: SetResult(VK_X,[ssAlt],VK_UNKNOWN,[]);
// view menu
ecToggleObjectInsp: SetResult(VK_F11,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleSourceEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCodeExpl: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleFPDocEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMessages: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleSearchResults: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleWatches: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleBreakPoints: SetResult(VK_F8,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleLocals: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCallStack: SetResult(VK_F3,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleRegisters: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleAssembler: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleDebugEvents: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleDebuggerOut: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewUnitDependencies: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewUnitInfo: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleRestrictionBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleObjectInsp: SetResult(VK_F11,[],VK_UNKNOWN,[]);
ecToggleSourceEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCodeExpl: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleFPDocEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleMessages: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleSearchResults: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleWatches: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleBreakPoints: SetResult(VK_F8,[ssCtrl],VK_UNKNOWN,[]);
ecToggleLocals: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCallStack: SetResult(VK_F3,[ssCtrl],VK_UNKNOWN,[]);
ecToggleRegisters: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleAssembler: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleDebugEvents: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleDebuggerOut: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewUnitDependencies: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewUnitInfo: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[]);
ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleRestrictionBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// project menu
ecNewProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewProjectFromFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenProject: SetResult(VK_F11,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCloseProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveProjectAs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPublishProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecProjectInspector: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddCurUnitToProj: SetResult(VK_F11,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRemoveFromProj: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewProjectUnits: SetResult(VK_F12,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewProjectForms: SetResult(VK_F12,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewProjectSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecProjectOptions: SetResult(VK_F11,[ssShift,ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewProjectFromFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenProject: SetResult(VK_F11,[ssCtrl],VK_UNKNOWN,[]);
ecCloseProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSaveProjectAs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPublishProject: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecProjectInspector: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddCurUnitToProj: SetResult(VK_F11,[ssShift],VK_UNKNOWN,[]);
ecRemoveFromProj: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecViewProjectUnits: SetResult(VK_F12,[ssCtrl],VK_UNKNOWN,[]);
ecViewProjectForms: SetResult(VK_F12,[ssShift],VK_UNKNOWN,[]);
ecViewProjectSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecProjectOptions: SetResult(VK_F11,[ssShift,ssCtrl],VK_UNKNOWN,[]);
// run menu
ecCompile: SetResult(VK_F9,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuild: SetResult(VK_F9,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecQuickCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAbortBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRun: SetResult(VK_F9,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPause: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowExecutionPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepInto: SetResult(VK_F7,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepOver: SetResult(VK_F8,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepIntoInstr: SetResult(VK_F7,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepOverInstr: SetResult(VK_F8,[ssAlt],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepOut: SetResult(VK_F8,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunToCursor: SetResult(VK_F4,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStopProgram: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRemoveBreakPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunParameters: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuildFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigBuildFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInspect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEvaluate: SetResult(VK_F4,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddWatch: SetResult(VK_F7,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCompile: SetResult(VK_F9,[ssCtrl],VK_UNKNOWN,[]);
ecBuild: SetResult(VK_F9,[ssShift],VK_UNKNOWN,[]);
ecQuickCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAbortBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRun: SetResult(VK_F9,[],VK_UNKNOWN,[]);
ecPause: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecShowExecutionPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecStepInto: SetResult(VK_F7,[],VK_UNKNOWN,[]);
ecStepOver: SetResult(VK_F8,[],VK_UNKNOWN,[]);
ecStepIntoInstr: SetResult(VK_F7,[ssAlt],VK_UNKNOWN,[]);
ecStepOverInstr: SetResult(VK_F8,[ssAlt],VK_UNKNOWN,[]);
ecStepOut: SetResult(VK_F8,[ssShift],VK_UNKNOWN,[]);
ecRunToCursor: SetResult(VK_F4,[],VK_UNKNOWN,[]);
ecStopProgram: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRemoveBreakPoint: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunParameters: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuildFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRunFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigBuildFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecInspect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEvaluate: SetResult(VK_F4,[ssCtrl],VK_UNKNOWN,[]);
ecAddWatch: SetResult(VK_F7,[ssCtrl],VK_UNKNOWN,[]);
ecAddBpSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddBpAddress: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// components menu
ecNewPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackageFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackageOfCurUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddCurUnitToPkg: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPackageGraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditInstallPkgs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigCustomComps: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecNewPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackageFile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOpenPackageOfCurUnit: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAddCurUnitToPkg: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecPackageGraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditInstallPkgs: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigCustomComps: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// tools menu
ecExtToolSettings: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuildLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigBuildLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMakeResourceString: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDiff: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecExtToolSettings: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBuildLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecConfigBuildLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecMakeResourceString: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDiff: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// environment menu
ecEnvironmentOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRescanFPCSrcDir: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditCodeTemplates: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCodeToolsDefinesEd: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEnvironmentOptions: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRescanFPCSrcDir: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditCodeTemplates: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCodeToolsDefinesEd: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// help menu
ecAboutLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOnlineHelp: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecContextHelp: SetResult(VK_F1,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecEditContextHelp: SetResult(VK_F1,[ssCtrl,ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecReportingBug: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAboutLazarus: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecOnlineHelp: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecContextHelp: SetResult(VK_F1,[ssCtrl],VK_UNKNOWN,[]);
ecEditContextHelp: SetResult(VK_F1,[ssCtrl,ssShift],VK_UNKNOWN,[]);
ecReportingBug: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
// designer
ecDesignerCopy : SetResult(VK_C,[ssCtrl],VK_UNKNOWN,[],VK_Insert,[ssCtrl],VK_UNKNOWN,[]);
ecDesignerCut : SetResult(VK_X,[ssCtrl],VK_UNKNOWN,[],VK_Delete,[ssShift],VK_UNKNOWN,[]);
ecDesignerPaste : SetResult(VK_V,[ssCtrl],VK_UNKNOWN,[],VK_Insert,[ssShift],VK_UNKNOWN,[]);
ecDesignerSelectParent: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDesignerMoveToFront : SetResult(VK_PRIOR,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDesignerMoveToBack : SetResult(VK_NEXT,[ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDesignerForwardOne : SetResult(VK_PRIOR,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDesignerBackOne : SetResult(VK_NEXT,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecDesignerSelectParent: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[]);
ecDesignerMoveToFront : SetResult(VK_PRIOR,[ssShift],VK_UNKNOWN,[]);
ecDesignerMoveToBack : SetResult(VK_NEXT,[ssShift],VK_UNKNOWN,[]);
ecDesignerForwardOne : SetResult(VK_PRIOR,[ssCtrl],VK_UNKNOWN,[]);
ecDesignerBackOne : SetResult(VK_NEXT,[ssCtrl],VK_UNKNOWN,[]);
else
begin
SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
case TSynPluginTemplateEdit.ConvertCommandToBase(Command) of
// Edit template
ecSynPTmplEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSelRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellHome: SetResult(VK_HOME, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellEnd: SetResult(VK_END, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellSelect: SetResult(VK_A, [ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdFinish: SetResult(VK_RETURN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[]);
ecSynPTmplEdNextCellRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSelRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[]);
ecSynPTmplEdCellHome: SetResult(VK_HOME, [],VK_UNKNOWN,[]);
ecSynPTmplEdCellEnd: SetResult(VK_END, [],VK_UNKNOWN,[]);
ecSynPTmplEdCellSelect: SetResult(VK_A, [ssCtrl],VK_UNKNOWN,[]);
ecSynPTmplEdFinish: SetResult(VK_RETURN,[],VK_UNKNOWN,[]);
ecSynPTmplEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[]);
end;
case TSynPluginTemplateEdit.ConvertCommandToBaseOff(Command) of
// Edit template
ecSynPTmplEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSelRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellHome: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellEnd: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellSelect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdFinish: SetResult(VK_RETURN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[]);
ecSynPTmplEdNextCellRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPTmplEdNextCellSelRotate: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[]);
ecSynPTmplEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[]);
ecSynPTmplEdCellHome: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellEnd: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdCellSelect: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPTmplEdFinish: SetResult(VK_RETURN,[],VK_UNKNOWN,[]);
ecSynPTmplEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[]);
end;
case TSynPluginSyncroEdit.ConvertCommandToBase(Command) of
// SyncroEdit
ecSynPSyncroEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdCellHome: SetResult(VK_HOME, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdCellEnd: SetResult(VK_END, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdCellSelect: SetResult(VK_A, [ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[]);
ecSynPSyncroEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[]);
ecSynPSyncroEdCellHome: SetResult(VK_HOME, [],VK_UNKNOWN,[]);
ecSynPSyncroEdCellEnd: SetResult(VK_END, [],VK_UNKNOWN,[]);
ecSynPSyncroEdCellSelect: SetResult(VK_A, [ssCtrl],VK_UNKNOWN,[]);
ecSynPSyncroEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[]);
end;
case TSynPluginSyncroEdit.ConvertCommandToBaseOff(Command) of
// SyncroEdit
ecSynPSyncroEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdCellHome: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdCellEnd: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdCellSelect: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdNextCell: SetResult(VK_RIGHT,[ssCtrl],VK_UNKNOWN,[]);
ecSynPSyncroEdNextCellSel: SetResult(VK_TAB, [], VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCell: SetResult(VK_LEFT, [ssCtrl],VK_UNKNOWN,[]);
ecSynPSyncroEdPrevCellSel: SetResult(VK_TAB, [ssShift],VK_UNKNOWN,[]);
ecSynPSyncroEdCellHome: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPSyncroEdCellEnd: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPSyncroEdCellSelect: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSynPSyncroEdEscape: SetResult(VK_ESCAPE,[],VK_UNKNOWN,[]);
end;
case TSynPluginSyncroEdit.ConvertCommandToBaseSel(Command) of
// SyncroEdit, during selection
ecSynPSyncroEdStart: SetResult(VK_J,[ssCtrl],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSynPSyncroEdStart: SetResult(VK_J,[ssCtrl],VK_UNKNOWN,[]);
end;
end;
end;
@ -1316,6 +1324,13 @@ procedure GetDefaultKeyForMacOSXScheme(Command: word; var TheKeyA, TheKeyB: TIDE
TheKeyB:=IDEShortCut(NewKey2A,NewShift2A,NewKey2B,NewShift2B);
end;
procedure SetResult2(
NewKey1A: word; NewShift1A: TShiftState;
NewKey1B: word; NewShift1B: TShiftState);
begin
SetResult2(NewKey1A,NewShift1A,NewKey1B,NewShift1B,VK_UNKNOWN,[],VK_UNKNOWN,[]);
end;
begin
case Command of
// moving
@ -1354,12 +1369,12 @@ begin
ecSelectAll: SetResult(VK_A,[ssMeta],VK_UNKNOWN,[]);
ecSelectToBrace: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectCodeBlock: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectWord: SetResult2(VK_K,[SSCtrl],VK_T,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectLine: SetResult2(VK_K,[SSCtrl],VK_L,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectWord: SetResult2(VK_K,[SSCtrl],VK_T,[]);
ecSelectLine: SetResult2(VK_K,[SSCtrl],VK_L,[]);
ecSelectParagraph: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionUpperCase: SetResult2(VK_K,[SSCtrl],VK_N,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionLowerCase: SetResult2(VK_K,[SSCtrl],VK_O,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionSwapCase: SetResult2(VK_K,[SSCtrl],VK_P,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecSelectionUpperCase: SetResult2(VK_K,[SSCtrl],VK_N,[]);
ecSelectionLowerCase: SetResult2(VK_K,[SSCtrl],VK_O,[]);
ecSelectionSwapCase: SetResult2(VK_K,[SSCtrl],VK_P,[]);
ecSelectionTabs2Spaces: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionEnclose: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
ecSelectionComment: SetResult(VK_UNKNOWN, [],VK_UNKNOWN,[]);
@ -1372,8 +1387,8 @@ begin
ecBlockSetBegin : SetResult2(VK_K,[ssCtrl],VK_B,[], VK_K,[ssCtrl],VK_B,[ssCtrl]);
ecBlockSetEnd : SetResult2(VK_K,[ssCtrl],VK_K,[], VK_K,[ssCtrl],VK_K,[ssCtrl]);
ecBlockToggleHide : SetResult2(VK_K,[ssCtrl],VK_H,[], VK_K,[ssCtrl],VK_H,[ssCtrl]);
ecBlockHide : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockShow : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockHide : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockShow : SetResult2(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecBlockMove : SetResult2(VK_K,[ssCtrl],VK_V,[], VK_K,[ssCtrl],VK_V,[ssCtrl]);
ecBlockCopy : SetResult2(VK_K,[ssCtrl],VK_C,[], VK_K,[ssCtrl],VK_C,[ssCtrl]);
ecBlockDelete : SetResult2(VK_K,[ssCtrl],VK_Y,[], VK_K,[ssCtrl],VK_Y,[ssCtrl]);
@ -1615,6 +1630,7 @@ begin
ecCompile: SetResult(VK_B,[ssMeta],VK_UNKNOWN,[]);
ecBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecQuickCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAbortBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRun: SetResult(VK_R,[ssMeta],VK_UNKNOWN,[]);
ecPause: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -1781,6 +1797,7 @@ begin
ecCompile: SetResult(VK_F9,[ssCtrl],VK_F9,[ssCtrl,ssMeta]);
ecBuild: SetResult(VK_F9,[ssShift],VK_UNKNOWN,[]);
ecQuickCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecCleanCompile: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecAbortBuild: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
ecRun: SetResult(VK_F9,[],VK_F9,[ssMeta]);
ecPause: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
@ -2154,6 +2171,7 @@ begin
ecCompile : Result:= srkmecCompile;
ecBuild : Result:= srkmecBuild;
ecQuickCompile : Result:= srkmecQuickCompile;
ecCleanCompile : Result:= srkmecCleanCompile;
ecAbortBuild : Result:= srkmecAbortBuild;
ecRun : Result:= srkmecRun;
ecPause : Result:= srkmecPause;
@ -2802,6 +2820,7 @@ begin
AddDefault(C, 'Compile project/program', lisKMCompileProjectProgram, ecCompile);
AddDefault(C, 'Build project/program', lisKMBuildProjectProgram, ecBuild);
AddDefault(C, 'Quick compile, no linking', lisKMQuickCompileNoLinking, ecQuickCompile);
AddDefault(C, 'Clean up and compile project/program', lisKMCleanCompile, ecCleanCompile);
AddDefault(C, 'Abort building', lisKMAbortBuilding, ecAbortBuild);
AddDefault(C, 'Run program', lisKMRunProgram, ecRun);
AddDefault(C, 'Pause program', lisKMPauseProgram, ecPause);

View File

@ -347,6 +347,7 @@ resourcestring
lisBFBuildCommand = 'Build Command';
lisMenuBuild = 'Build';
lisMenuQuickCompile = 'Quick compile';
lisMenuCleanCompile = 'Clean compile';
lisMenuAbortBuild = 'Abort Build';
lisMenuProjectRun = '&Run';
lisBFAlwaysBuildBeforeRun = 'Always Build before Run';
@ -2681,6 +2682,7 @@ resourcestring
srkmecCompile = 'compile program/project';
srkmecBuild = 'build program/project';
srkmecQuickCompile = 'quick compile, no linking';
srkmecCleanCompile = 'clean up and compile';
srkmecAbortBuild = 'abort build';
srkmecRun = 'run program';
srkmecPause = 'pause program';
@ -2772,6 +2774,7 @@ resourcestring
lisKMCompileProjectProgram = 'Compile project/program';
lisKMBuildProjectProgram = 'Build project/program';
lisKMQuickCompileNoLinking = 'Quick compile, no linking';
lisKMCleanCompile = 'Clean up and compile project/program';
lisKMAbortBuilding = 'Abort building';
lisKMRunProgram = 'Run program';
lisKMPauseProgram = 'Pause program';
@ -5337,6 +5340,13 @@ resourcestring
lisEventLogSaveToFile = 'Save Events to File';
lisEventsLogAddComment = 'Add Comment ...';
lisEventsLogAddComment2 = 'Add Comment';
lisCleanUpAndBuildProject = 'Clean up and build project';
lisProjectOutputDirectory = 'Project output directory';
lisProjectSourceDirectories = 'Project source directories';
lisPackageOutputDirectories = 'Package output directories';
lisPackageSourceDirectories = 'Package source directories';
lisTheseFilesWillBeDeleted = 'These files will be deleted:';
lisBuildProject = 'Build project';
implementation

View File

@ -79,7 +79,7 @@ uses
// protocol
IDEProtocol,
// compile
Compiler, CompilerOptions, CheckCompilerOpts,
Compiler, CompilerOptions, CheckCompilerOpts, BuildProjectDlg,
ApplicationBundle, ImExportCompilerOpts, InfoBuild,
// projects
ProjectResources, Project, ProjectDefs, NewProjectDlg,
@ -318,6 +318,7 @@ type
procedure mnuCompileProjectClicked(Sender: TObject);
procedure mnuBuildProjectClicked(Sender: TObject);
procedure mnuQuickCompileProjectClicked(Sender: TObject);
procedure mnuCleanCompileProjectClicked(Sender: TObject);
procedure mnuAbortBuildProjectClicked(Sender: TObject);
procedure mnuRunProjectClicked(Sender: TObject);
procedure mnuPauseProjectClicked(Sender: TObject);
@ -2600,6 +2601,7 @@ begin
itmRunMenuCompile.OnClick := @mnuCompileProjectClicked;
itmRunMenuBuild.OnClick := @mnuBuildProjectClicked;
itmRunMenuQuickCompile.OnClick := @mnuQuickCompileProjectClicked;
itmRunMenuCleanCompile.OnClick := @mnuCleanCompileProjectClicked;
itmRunMenuAbortBuild.OnClick := @mnuAbortBuildProjectClicked;
itmRunMenuRun.OnClick := @mnuRunProjectClicked;
itmRunMenuPause.OnClick := @mnuPauseProjectClicked;
@ -3214,6 +3216,7 @@ begin
end;
ecBuild: DoBuildProject(crBuild, [pbfCleanCompile, pbfCompileDependenciesClean]);
ecCleanCompile: mnuCleanCompileProjectClicked(nil);
ecQuickCompile: DoQuickCompile;
ecAbortBuild: DoAbortBuild;
@ -4348,6 +4351,12 @@ begin
DoQuickCompile;
end;
procedure TMainIDE.mnuCleanCompileProjectClicked(Sender: TObject);
begin
if ShowBuildProjectDialog(Project1)<>mrOk then exit;
DoBuildProject(crCompile,[]);
end;
Procedure TMainIDE.mnuAbortBuildProjectClicked(Sender: TObject);
Begin
DoAbortBuild;

View File

@ -279,6 +279,7 @@ type
itmRunMenuCompile: TIDEMenuCommand;
itmRunMenuBuild: TIDEMenuCommand;
itmRunMenuQuickCompile: TIDEMenuCommand;
itmRunMenuCleanCompile: TIDEMenuCommand;
itmRunMenuAbortBuild: TIDEMenuCommand;
//itmRunnning: TIDEMenuSection;
itmRunMenuRun: TIDEMenuCommand;

View File

@ -671,6 +671,7 @@ begin
CreateMenuItem(ParentMI,itmRunMenuCompile,'itmRunMenuCompile',lisMenuCompile,'menu_build');
CreateMenuItem(ParentMI,itmRunMenuBuild,'itmRunMenuBuild',lisMenuBuild,'menu_build_all');
CreateMenuItem(ParentMI,itmRunMenuQuickCompile,'itmRunMenuQuickCompile',lisMenuQuickCompile,'menu_quick_compile');
CreateMenuItem(ParentMI,itmRunMenuCleanCompile,'itmRunMenuCleanCompile',lisMenuCleanCompile,'menu_build'{$IFNDEF EnableCleanBuild},true,false,false{$ENDIF});
CreateMenuItem(ParentMI,itmRunMenuAbortBuild,'itmRunMenuAbortBuild',lisMenuAbortBuild,'menu_abort_build');
CreateMenuSeparatorSection(mnuRun,itmRunnning,'itmRunnning');

View File

@ -862,7 +862,7 @@ type
destructor Destroy; override;
class function GetInstance: TAbstractIDEOptions; override;
class function GetGroupCaption: string; override;
procedure Clear;
procedure Clear; override;
procedure BeginUpdate(Change: boolean);
procedure EndUpdate;
procedure UnitModified(AnUnitInfo: TUnitInfo);
@ -2730,6 +2730,10 @@ function TProject.WriteProject(ProjectWriteFlags: TProjectWriteFlags;
ActiveWindowIndexAtStart,-1);
aConfig.SetDeleteValue('SkipCheckLCLInterfaces/Value',
FSkipCheckLCLInterfaces,false);
aConfig.SetDeleteValue(Path+'Build/CleanOutputFileMask/Value',
CleanOutputFileMask,DefaultProjectCleanOutputFileMask);
aConfig.SetDeleteValue(Path+'Build/CleanSourcesFileMask/Value',
CleanSourcesFileMask,DefaultProjectCleanSourcesFileMask);
if (not (pfSaveOnlyProjectUnits in Flags))
and (not (pwfSkipJumpPoints in ProjectWriteFlags)) then begin
@ -2839,7 +2843,7 @@ begin
SaveFlags(XMLConfig,Path);
xmlconfig.SetDeleteValue(Path+'General/SessionStorage/Value',
ProjectSessionStorageNames[SessionStorage],
ProjectSessionStorageNames[pssInProjectInfo]);
ProjectSessionStorageNames[DefaultProjectSessionStorage]);
// properties
xmlconfig.SetValue(Path+'General/MainUnit/Value', MainUnitID); // always write a value to support opening by older IDEs (<=0.9.28). This can be changed in a few released.
@ -2874,7 +2878,7 @@ begin
// save the Publish Options
PublishOptions.SaveToXMLConfig(xmlconfig,Path+'PublishOptions/',fCurStorePathDelim);
// save the Run Parameter Options
// save the Run and Build parameter options
RunParameterOptions.Save(xmlconfig,Path,fCurStorePathDelim);
// save dependencies
@ -3266,6 +3270,10 @@ var
FSkipCheckLCLInterfaces:=xmlconfig.GetValue(
Path+'SkipCheckLCLInterfaces/Value',false);
FJumpHistory.LoadFromXMLConfig(xmlconfig,Path+'');
CleanOutputFileMask:=xmlconfig.GetValue(Path+'Build/CleanOutputFileMask/Value',
DefaultProjectCleanOutputFileMask);
CleanSourcesFileMask:=xmlconfig.GetValue(Path+'Build/CleanSourcesFileMask/Value',
DefaultProjectCleanSourcesFileMask);
// load custom session data
LoadStringToStringTree(xmlconfig,CustomSessionData,Path+'CustomSessionData/');
@ -3369,7 +3377,7 @@ begin
SessionStorage:=StrToProjectSessionStorage(
XMLConfig.GetValue(Path+'General/SessionStorage/Value',
ProjectSessionStorageNames[pssInProjectInfo]));
ProjectSessionStorageNames[DefaultProjectSessionStorage]));
//DebugLn('TProject.ReadProject SessionStorage=',dbgs(ord(SessionStorage)),' ProjectSessionFile=',ProjectSessionFile);
// load properties
@ -3419,7 +3427,7 @@ begin
LoadPkgDependencyList(XMLConfig,Path+'RequiredPackages/',
FFirstRequiredDependency,pdlRequires,Self,true,false);
// load the Run Parameter Options
// load the Run and Build parameter Options
RunParameterOptions.Load(xmlconfig,Path,fPathDelimChanged);
// load the Publish Options
@ -3676,6 +3684,7 @@ procedure TProject.Clear;
var i:integer;
begin
BeginUpdate(true);
inherited Clear;
// break and free removed dependencies
while FFirstRemovedDependency<>nil do

View File

@ -187,7 +187,7 @@ const
ecToggleDebugEvents = ecFirstLazarus + 327;
ecViewPseudoTerminal = ecFirstLazarus + 328;
ecViewThreads = ecFirstLazarus + 329;
ecViewHistory = ecFirstLazarus + 450;
ecViewHistory = ecFirstLazarus + 460;
// sourcenotebook commands
ecNextEditor = ecFirstLazarus + 330;
@ -233,32 +233,33 @@ const
ecCompile = ecFirstLazarus + 400;
ecBuild = ecFirstLazarus + 401;
ecQuickCompile = ecFirstLazarus + 402;
ecAbortBuild = ecFirstLazarus + 403;
ecRun = ecFirstLazarus + 404;
ecPause = ecFirstLazarus + 405;
ecStepInto = ecFirstLazarus + 406;
ecStepOver = ecFirstLazarus + 407;
ecRunToCursor = ecFirstLazarus + 408;
ecStopProgram = ecFirstLazarus + 409;
ecResetDebugger = ecFirstLazarus + 410;
ecBuildLazarus = ecFirstLazarus + 411;
ecBuildFile = ecFirstLazarus + 412;
ecRunFile = ecFirstLazarus + 413;
ecConfigBuildFile = ecFirstLazarus + 414;
ecInspect = ecFirstLazarus + 415;
ecEvaluate = ecFirstLazarus + 416;
ecAddWatch = ecFirstLazarus + 417;
ecShowExecutionPoint = ecFirstLazarus + 418;
ecStepOut = ecFirstLazarus + 419;
ecStepIntoInstr = ecFirstLazarus + 420;
ecStepOverInstr = ecFirstLazarus + 421;
ecStepIntoContext = ecFirstLazarus + 422;
ecStepOverContext = ecFirstLazarus + 423;
ecBuildAdvancedLazarus = ecFirstLazarus + 424;
ecAddBpSource = ecFirstLazarus + 425;
ecAddBpAddress = ecFirstLazarus + 426;
ecCleanCompile = ecFirstLazarus + 403;
ecAbortBuild = ecFirstLazarus + 404;
ecRun = ecFirstLazarus + 410;
ecPause = ecFirstLazarus + 411;
ecStepInto = ecFirstLazarus + 412;
ecStepOver = ecFirstLazarus + 413;
ecRunToCursor = ecFirstLazarus + 414;
ecStopProgram = ecFirstLazarus + 415;
ecResetDebugger = ecFirstLazarus + 416;
ecBuildLazarus = ecFirstLazarus + 420;
ecBuildAdvancedLazarus = ecFirstLazarus + 421;
ecBuildFile = ecFirstLazarus + 431;
ecRunFile = ecFirstLazarus + 432;
ecConfigBuildFile = ecFirstLazarus + 433;
ecInspect = ecFirstLazarus + 440;
ecEvaluate = ecFirstLazarus + 441;
ecAddWatch = ecFirstLazarus + 442;
ecShowExecutionPoint = ecFirstLazarus + 443;
ecStepOut = ecFirstLazarus + 444;
ecStepIntoInstr = ecFirstLazarus + 445;
ecStepOverInstr = ecFirstLazarus + 446;
ecStepIntoContext = ecFirstLazarus + 447;
ecStepOverContext = ecFirstLazarus + 448;
ecAddBpSource = ecFirstLazarus + 449;
ecAddBpAddress = ecFirstLazarus + 450;
// 450++ : used for ecViewHistory (debugger)
// 460++ : used for ecViewHistory (debugger)
// project menu
ecNewProject = ecFirstLazarus + 500;

View File

@ -231,9 +231,7 @@ type
procedure(CompOpts: TLazCompilerOptions) of object;
var
CheckCompOptsAndMainSrcForNewUnitEvent: TCheckCompOptsAndMainSrcForNewUnitEvent; // set by the IDE
type
TLazProject = class;
{ TProjectDescriptor - Template for initializing new projects }
@ -260,6 +258,13 @@ type
);
TProjectSessionStorages = set of TProjectSessionStorage;
const
DefaultProjectCleanOutputFileMask = '*';
DefaultProjectCleanSourcesFileMask = '*.ppu;*.ppl;*.o;*.or;*.a;*.so;*.dll';
DefaultProjectSessionStorage = pssInProjectInfo;
type
TLazProject = class;
{ TProjectDescriptor
- to show an option dialog to the user override the DoInitDescriptor
- to initialize project compiler settings and paths override InitProject
@ -329,6 +334,8 @@ type
TLazProject = class(TAbstractIDEProjectOptions)
private
FCleanOutputFileMask: string;
FCleanSourcesFileMask: string;
FCustomData: TStringToStringTree;
FCustomSessionData: TStringToStringTree;
FExecutableType: TProjectExecutableType;
@ -338,6 +345,8 @@ type
FTitle: String;
FSessionStorage: TProjectSessionStorage;
FLazDocPaths: string;
procedure SetCleanOutputFileMask(const AValue: string);
procedure SetCleanSourcesFileMask(const AValue: string);
procedure SetLazDocPaths(const AValue: string);
protected
FLazCompilerOptions: TLazCompilerOptions;
@ -359,6 +368,7 @@ type
public
constructor Create(ProjectDescription: TProjectDescriptor); virtual;
destructor Destroy; override;
procedure Clear; virtual;
function CreateProjectFile(const Filename: string
): TLazProjectFile; virtual; abstract;
procedure AddFile(ProjectFile: TLazProjectFile;
@ -399,6 +409,8 @@ type
// project session data (not units, data),
// units have their own SessionModified
property LazDocPaths: string read FLazDocPaths write SetLazDocPaths;
property CleanOutputFileMask: string read FCleanOutputFileMask write SetCleanOutputFileMask; // saved in session
property CleanSourcesFileMask: string read FCleanSourcesFileMask write SetCleanSourcesFileMask; // saved in session
property CustomData: TStringToStringTree read FCustomData;
property CustomSessionData: TStringToStringTree read FCustomSessionData;
end;
@ -976,6 +988,20 @@ begin
Modified:=true;
end;
procedure TLazProject.SetCleanOutputFileMask(const AValue: string);
begin
if FCleanOutputFileMask=AValue then exit;
FCleanOutputFileMask:=AValue;
SessionModified:=true;
end;
procedure TLazProject.SetCleanSourcesFileMask(const AValue: string);
begin
if FCleanSourcesFileMask=AValue then exit;
FCleanSourcesFileMask:=AValue;
SessionModified:=true;
end;
function TLazProject.GetModified: boolean;
begin
Result:=fModified;
@ -998,7 +1024,9 @@ end;
constructor TLazProject.Create(ProjectDescription: TProjectDescriptor);
begin
inherited Create;
FSessionStorage:=pssInProjectInfo;
FSessionStorage:=DefaultProjectSessionStorage;
FCleanOutputFileMask:=DefaultProjectCleanOutputFileMask;
FCleanSourcesFileMask:=DefaultProjectCleanSourcesFileMask;
FCustomData:=TStringToStringTree.Create(true);
FCustomSessionData:=TStringToStringTree.Create(true);
end;
@ -1010,6 +1038,18 @@ begin
inherited Destroy;
end;
procedure TLazProject.Clear;
begin
FCleanOutputFileMask:=DefaultProjectCleanOutputFileMask;
FCleanSourcesFileMask:=DefaultProjectCleanSourcesFileMask;
FCustomData.Clear;
FCustomSessionData.Clear;
FExecutableType:=petNone;
FTitle:='';
FSessionStorage:=DefaultProjectSessionStorage;
FLazDocPaths:='';
end;
function TLazProject.ShortDescription: string;
begin
if Title<>'' then