mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 03:56:12 +02:00
started IDE command scopes
git-svn-id: trunk@7618 -
This commit is contained in:
parent
5ec7287571
commit
0a3fa50dd0
@ -1114,6 +1114,7 @@ begin
|
|||||||
FreeThenNil(LazProjectDescriptors);
|
FreeThenNil(LazProjectDescriptors);
|
||||||
FreeThenNil(NewIDEItems);
|
FreeThenNil(NewIDEItems);
|
||||||
FreeThenNil(IDEMenuRoots);
|
FreeThenNil(IDEMenuRoots);
|
||||||
|
FreeThenNil(IDECommandScopes);
|
||||||
// IDE options objects
|
// IDE options objects
|
||||||
FreeThenNil(CodeToolsOpts);
|
FreeThenNil(CodeToolsOpts);
|
||||||
FreeThenNil(MiscellaneousOptions);
|
FreeThenNil(MiscellaneousOptions);
|
||||||
@ -1709,6 +1710,8 @@ end;
|
|||||||
|
|
||||||
procedure TMainIDE.SetupStandardIDEMenuItems;
|
procedure TMainIDE.SetupStandardIDEMenuItems;
|
||||||
begin
|
begin
|
||||||
|
CreateStandardIDECommandScopes;
|
||||||
|
|
||||||
IDEMenuRoots:=TIDEMenuRoots.Create;
|
IDEMenuRoots:=TIDEMenuRoots.Create;
|
||||||
RegisterStandardSourceEditorMenuItems;
|
RegisterStandardSourceEditorMenuItems;
|
||||||
RegisterStandardMessagesViewMenuItems;
|
RegisterStandardMessagesViewMenuItems;
|
||||||
|
@ -24,9 +24,13 @@
|
|||||||
|
|
||||||
Commands are sorted into categories. For example:
|
Commands are sorted into categories. For example:
|
||||||
ecCopy is in the category 'Selection'.
|
ecCopy is in the category 'Selection'.
|
||||||
|
This is only to help the user find commands.
|
||||||
|
|
||||||
Every command can have a menu item.
|
Scopes:
|
||||||
|
Command can work globally or only in some IDE windows.
|
||||||
|
For example: When the user presses a key in the source editor, the IDE
|
||||||
|
first searches in all commands with the Scope IDECmdScopeSrcEdit.
|
||||||
|
Then it will search in all commands without scope.
|
||||||
}
|
}
|
||||||
unit IDECommands;
|
unit IDECommands;
|
||||||
|
|
||||||
@ -35,7 +39,7 @@ unit IDECommands;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, LCLType, Menus;
|
Classes, SysUtils, Forms, LCLType, Menus, TextTools;
|
||||||
|
|
||||||
type
|
type
|
||||||
TCommandArea = (
|
TCommandArea = (
|
||||||
@ -55,6 +59,55 @@ const
|
|||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
|
TIDECommandKeys = class;
|
||||||
|
|
||||||
|
{ TIDECommandScope }
|
||||||
|
{ A TIDECommandScope defines a set of IDE windows that will share the same
|
||||||
|
IDE commands. }
|
||||||
|
|
||||||
|
TIDECommandScope = class(TPersistent)
|
||||||
|
private
|
||||||
|
FName: string;
|
||||||
|
FIDEWindows: TFPList;
|
||||||
|
FCommands: TFPList;
|
||||||
|
function GetCommands(Index: integer): TIDECommandKeys;
|
||||||
|
function GetIDEWindows(Index: integer): TCustomForm;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure AddWindow(AnWindow: TCustomForm);
|
||||||
|
function IDEWindowCount: integer;
|
||||||
|
procedure AddCommand(ACommand: TIDECommandKeys);
|
||||||
|
function CommandCount: integer;
|
||||||
|
public
|
||||||
|
property Name: string read FName;
|
||||||
|
property IDEWindows[Index: integer]: TCustomForm read GetIDEWindows;
|
||||||
|
property Commands[Index: integer]: TIDECommandKeys read GetCommands;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TIDECommandScopes }
|
||||||
|
|
||||||
|
TIDECommandScopes = class(TPersistent)
|
||||||
|
private
|
||||||
|
FItems: TFPList;
|
||||||
|
function GetItems(Index: integer): TIDECommandScope;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
destructor Destroy; override;
|
||||||
|
procedure Clear;
|
||||||
|
procedure Add(NewItem: TIDECommandScope);
|
||||||
|
function IndexOf(AnItem: TIDECommandScope): Integer;
|
||||||
|
function IndexByName(const AName: string): Integer;
|
||||||
|
function FindByName(const AName: string): TIDECommandScope;
|
||||||
|
function CreateUniqueName(const AName: string): string;
|
||||||
|
function Count: integer;
|
||||||
|
public
|
||||||
|
property Items[Index: integer]: TIDECommandScope read GetItems;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ TIDEShortCut }
|
||||||
|
|
||||||
TIDEShortCut = record
|
TIDEShortCut = record
|
||||||
Key1: word;
|
Key1: word;
|
||||||
Shift1: TShiftState;
|
Shift1: TShiftState;
|
||||||
@ -62,8 +115,9 @@ type
|
|||||||
Shift2: TShiftState;
|
Shift2: TShiftState;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
{ TIDECommandCategory }
|
||||||
// TIDECommandCategory is used to divide the commands in handy packets
|
{ TIDECommandCategory is used to divide the commands in handy packets }
|
||||||
|
|
||||||
TIDECommandCategory = class(TList)
|
TIDECommandCategory = class(TList)
|
||||||
protected
|
protected
|
||||||
FAreas: TCommandAreas;
|
FAreas: TCommandAreas;
|
||||||
@ -78,9 +132,10 @@ type
|
|||||||
procedure Delete(Index: Integer); virtual;
|
procedure Delete(Index: Integer); virtual;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
// class for storing the keys of a single command
|
{ TIDECommandKeys }
|
||||||
// (shortcut-command relationship)
|
{ class for storing the keys of a single command
|
||||||
|
(shortcut-command relationship) }
|
||||||
TIDECommandKeys = class
|
TIDECommandKeys = class
|
||||||
private
|
private
|
||||||
FCategory: TIDECommandCategory;
|
FCategory: TIDECommandCategory;
|
||||||
@ -124,7 +179,6 @@ type
|
|||||||
TExecuteIDECommand = procedure(Sender: TObject; Command: word) of object;
|
TExecuteIDECommand = procedure(Sender: TObject; Command: word) of object;
|
||||||
|
|
||||||
var
|
var
|
||||||
// will be set by the IDE
|
|
||||||
OnExecuteIDEShortCut: TExecuteIDEShortCut;
|
OnExecuteIDEShortCut: TExecuteIDEShortCut;
|
||||||
OnExecuteIDECommand: TExecuteIDECommand;
|
OnExecuteIDECommand: TExecuteIDECommand;
|
||||||
|
|
||||||
@ -135,6 +189,18 @@ procedure ExecuteIDECommand(Sender: TObject; Command: word);
|
|||||||
|
|
||||||
function IDEShortCutToMenuShortCut(const IDEShortCut: TIDEShortCut): TShortCut;
|
function IDEShortCutToMenuShortCut(const IDEShortCut: TIDEShortCut): TShortCut;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
// will be set by the IDE
|
||||||
|
IDECommandScopes: TIDECommandScopes = nil;
|
||||||
|
var
|
||||||
|
IDECmdScopeSrcEdit: TIDECommandScope;
|
||||||
|
IDECmdScopeDesigner: TIDECommandScope;
|
||||||
|
|
||||||
|
procedure CreateStandardIDECommandScopes;
|
||||||
|
function RegisterIDECommandScope(const Name: string): TIDECommandScope;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
|
||||||
@ -174,11 +240,17 @@ begin
|
|||||||
Result:=ShortCut(VK_UNKNOWN,[]);
|
Result:=ShortCut(VK_UNKNOWN,[]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TIDECommandCategory }
|
procedure CreateStandardIDECommandScopes;
|
||||||
|
|
||||||
procedure TIDECommandCategory.Delete(Index: Integer);
|
|
||||||
begin
|
begin
|
||||||
inherited Delete(Index);
|
IDECommandScopes:=TIDECommandScopes.Create;
|
||||||
|
IDECmdScopeSrcEdit:=RegisterIDECommandScope('SourceEditor');
|
||||||
|
IDECmdScopeDesigner:=RegisterIDECommandScope('Designer');
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RegisterIDECommandScope(const Name: string): TIDECommandScope;
|
||||||
|
begin
|
||||||
|
Result:=TIDECommandScope.Create;
|
||||||
|
IDECommandScopes.Add(Result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TIDECommandKeys }
|
{ TIDECommandKeys }
|
||||||
@ -258,5 +330,127 @@ begin
|
|||||||
Result:=Result+' in "'+Category.Description+'"';
|
Result:=Result+' in "'+Category.Description+'"';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TIDECommandScopes }
|
||||||
|
|
||||||
|
function TIDECommandScopes.GetItems(Index: integer): TIDECommandScope;
|
||||||
|
begin
|
||||||
|
Result:=TIDECommandScope(FItems[Index]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TIDECommandScopes.Create;
|
||||||
|
begin
|
||||||
|
FItems:=TFPList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TIDECommandScopes.Destroy;
|
||||||
|
begin
|
||||||
|
Clear;
|
||||||
|
FItems.Free;
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIDECommandScopes.Clear;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i:=0 to FItems.Count-1 do Items[i].Free;
|
||||||
|
FItems.Clear;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIDECommandScopes.Add(NewItem: TIDECommandScope);
|
||||||
|
begin
|
||||||
|
NewItem.fName:=CreateUniqueName(NewItem.Name);
|
||||||
|
FItems.Add(NewItem);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScopes.IndexOf(AnItem: TIDECommandScope): Integer;
|
||||||
|
begin
|
||||||
|
Result:=FItems.IndexOf(AnItem);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScopes.IndexByName(const AName: string): Integer;
|
||||||
|
begin
|
||||||
|
Result:=Count-1;
|
||||||
|
while (Result>=0) and (CompareText(AName,Items[Result].Name)<>0) do
|
||||||
|
dec(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScopes.FindByName(const AName: string): TIDECommandScope;
|
||||||
|
var
|
||||||
|
i: LongInt;
|
||||||
|
begin
|
||||||
|
i:=IndexByName(AName);
|
||||||
|
if i>=0 then
|
||||||
|
Result:=Items[i]
|
||||||
|
else
|
||||||
|
Result:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScopes.CreateUniqueName(const AName: string): string;
|
||||||
|
begin
|
||||||
|
Result:=AName;
|
||||||
|
if IndexByName(Result)<0 then exit;
|
||||||
|
Result:=CreateFirstIdentifier(Result);
|
||||||
|
while IndexByName(Result)>=0 do
|
||||||
|
Result:=CreateNextIdentifier(Result);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScopes.Count: integer;
|
||||||
|
begin
|
||||||
|
Result:=FItems.Count;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TIDECommandCategory }
|
||||||
|
|
||||||
|
procedure TIDECommandCategory.Delete(Index: Integer);
|
||||||
|
begin
|
||||||
|
inherited Delete(Index);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TIDECommandScope }
|
||||||
|
|
||||||
|
function TIDECommandScope.GetIDEWindows(Index: integer): TCustomForm;
|
||||||
|
begin
|
||||||
|
Result:=TCustomForm(FIDEWindows[Index]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScope.GetCommands(Index: integer): TIDECommandKeys;
|
||||||
|
begin
|
||||||
|
Result:=TIDECommandKeys(FCommands[Index]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TIDECommandScope.Create;
|
||||||
|
begin
|
||||||
|
FIDEWindows:=TFPList.Create;
|
||||||
|
FCommands:=TFPList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TIDECommandScope.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FIDEWindows);
|
||||||
|
FreeAndNil(FCommands);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIDECommandScope.AddWindow(AnWindow: TCustomForm);
|
||||||
|
begin
|
||||||
|
FIDEWindows.Add(AnWindow);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScope.IDEWindowCount: integer;
|
||||||
|
begin
|
||||||
|
Result:=FIDEWindows.Count;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TIDECommandScope.AddCommand(ACommand: TIDECommandKeys);
|
||||||
|
begin
|
||||||
|
FCommands.Add(ACommand);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TIDECommandScope.CommandCount: integer;
|
||||||
|
begin
|
||||||
|
Result:=FCommands.Count;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user