designer: add SelectAll menu item, Ctrl+A key handling (implements issue #0001776)

git-svn-id: trunk@18757 -
This commit is contained in:
paul 2009-02-19 03:43:00 +00:00
parent 2b2c44b007
commit e8e122df26
3 changed files with 48 additions and 6 deletions

View File

@ -483,6 +483,8 @@ type
property RubberbandSelectionColor: TColor read GetRubberbandSelectionColor; property RubberbandSelectionColor: TColor read GetRubberbandSelectionColor;
property RubberbandCreationColor: TColor read GetRubberbandCreationColor; property RubberbandCreationColor: TColor read GetRubberbandCreationColor;
procedure DrawRubberband(DC: TDesignerDeviceContext); procedure DrawRubberband(DC: TDesignerDeviceContext);
procedure SelectAll(ALookupRoot: TComponent);
procedure SelectWithRubberBand(ALookupRoot: TComponent; procedure SelectWithRubberBand(ALookupRoot: TComponent;
ClearBefore, ExclusiveOr: boolean; ClearBefore, ExclusiveOr: boolean;
var SelectionChanged: boolean; var SelectionChanged: boolean;
@ -2367,10 +2369,24 @@ begin
DrawInvertFrameRect(Left-Diff.X,Top-Diff.Y,Right-Diff.X,Bottom-Diff.Y); DrawInvertFrameRect(Left-Diff.X,Top-Diff.Y,Right-Diff.X,Bottom-Diff.Y);
end; end;
procedure TControlSelection.SelectAll(ALookupRoot: TComponent);
var
i: integer;
AComponent: TComponent;
begin
for i := 0 to ALookupRoot.ComponentCount - 1 do
begin
AComponent := ALookupRoot.Components[i];
if not IsSelected(AComponent) then
Add(AComponent);
end;
end;
procedure TControlSelection.SelectWithRubberBand(ALookupRoot: TComponent; procedure TControlSelection.SelectWithRubberBand(ALookupRoot: TComponent;
ClearBefore, ExclusiveOr:boolean; var SelectionChanged: boolean; ClearBefore, ExclusiveOr:boolean; var SelectionChanged: boolean;
MaxParentControl: TControl); MaxParentControl: TControl);
var i:integer; var
i: integer;
AComponent: TComponent; AComponent: TComponent;
function ControlInRubberBand(AComponent: TComponent): boolean; function ControlInRubberBand(AComponent: TComponent): boolean;

View File

@ -160,6 +160,7 @@ type
// procedures for working with components and persistents // procedures for working with components and persistents
function GetDesignControl(AControl: TControl): TControl; function GetDesignControl(AControl: TControl): TControl;
function DoDeleteSelectedPersistents: boolean; function DoDeleteSelectedPersistents: boolean;
procedure DoSelectAll;
procedure DoDeletePersistent(APersistent: TPersistent; FreeIt: boolean); procedure DoDeletePersistent(APersistent: TPersistent; FreeIt: boolean);
procedure MarkPersistentForDeletion(APersistent: TPersistent); procedure MarkPersistentForDeletion(APersistent: TPersistent);
function PersistentIsMarkedForDeletion(APersistent: TPersistent): boolean; function PersistentIsMarkedForDeletion(APersistent: TPersistent): boolean;
@ -204,6 +205,7 @@ type
procedure OnCutMenuClick(Sender: TObject); procedure OnCutMenuClick(Sender: TObject);
procedure OnPasteMenuClick(Sender: TObject); procedure OnPasteMenuClick(Sender: TObject);
procedure OnDeleteSelectionMenuClick(Sender: TObject); procedure OnDeleteSelectionMenuClick(Sender: TObject);
procedure OnSelectAllMenuClick(Sender: TObject);
procedure OnChangeClassMenuClick(Sender: TObject); procedure OnChangeClassMenuClick(Sender: TObject);
procedure OnChangeParentMenuClick(Sender: TObject); procedure OnChangeParentMenuClick(Sender: TObject);
procedure OnSnapToGridOptionMenuClick(Sender: TObject); procedure OnSnapToGridOptionMenuClick(Sender: TObject);
@ -342,6 +344,7 @@ var
DesignerMenuCopy: TIDEMenuCommand; DesignerMenuCopy: TIDEMenuCommand;
DesignerMenuPaste: TIDEMenuCommand; DesignerMenuPaste: TIDEMenuCommand;
DesignerMenuDeleteSelection: TIDEMenuCommand; DesignerMenuDeleteSelection: TIDEMenuCommand;
DesignerMenuSelectAll: TIDEMenuCommand;
DesignerMenuChangeClass: TIDEMenuCommand; DesignerMenuChangeClass: TIDEMenuCommand;
DesignerMenuChangeParent: TIDEMenuSection; DesignerMenuChangeParent: TIDEMenuSection;
@ -420,7 +423,9 @@ begin
DesignerMenuPaste:=RegisterIDEMenuCommand(DesignerMenuSectionClipboard, DesignerMenuPaste:=RegisterIDEMenuCommand(DesignerMenuSectionClipboard,
'Paste',lisMenuPaste, nil, nil, nil, 'laz_paste'); 'Paste',lisMenuPaste, nil, nil, nil, 'laz_paste');
DesignerMenuDeleteSelection:=RegisterIDEMenuCommand(DesignerMenuSectionClipboard, DesignerMenuDeleteSelection:=RegisterIDEMenuCommand(DesignerMenuSectionClipboard,
'Delete selection',fdmDeleteSelection, nil, nil, nil, 'delete_selection'); 'Delete Selection',fdmDeleteSelection, nil, nil, nil, 'delete_selection');
DesignerMenuSelectAll:=RegisterIDEMenuCommand(DesignerMenuSectionClipboard,
'Select All',fdmSelectAll, nil, nil, nil, 'menu_select_all');
// register miscellaneous section // register miscellaneous section
DesignerMenuSectionMisc:=RegisterIDEMenuSection(DesignerMenuRoot, DesignerMenuSectionMisc:=RegisterIDEMenuSection(DesignerMenuRoot,
@ -1854,7 +1859,7 @@ var
NudgeSize(x, y); NudgeSize(x, y);
end; end;
Begin begin
{$IFDEF VerboseDesigner} {$IFDEF VerboseDesigner}
DebugLn(['TDesigner.KEYDOWN ',TheMessage.CharCode,' ',TheMessage.KeyData]); DebugLn(['TDesigner.KEYDOWN ',TheMessage.CharCode,' ',TheMessage.KeyData]);
{$ENDIF} {$ENDIF}
@ -1870,7 +1875,7 @@ Begin
if not Handled then if not Handled then
begin begin
Handled:=true; Handled := True;
case TheMessage.CharCode of case TheMessage.CharCode of
VK_DELETE: VK_DELETE:
if not ControlSelection.OnlyInvisiblePersistentsSelected then if not ControlSelection.OnlyInvisiblePersistentsSelected then
@ -1888,6 +1893,11 @@ Begin
VK_LEFT: VK_LEFT:
Nudge(-1,0); Nudge(-1,0);
VK_A:
if Shift = [ssCtrl] then
DoSelectAll
else
Handled := False;
else else
Handled:=false; Handled:=false;
end; end;
@ -1974,6 +1984,15 @@ begin
Result:=true; Result:=true;
end; end;
procedure TDesigner.DoSelectAll;
begin
ControlSelection.BeginUpdate;
ControlSelection.Clear;
ControlSelection.SelectAll(FLookupRoot);
ControlSelection.EndUpdate;
Form.Invalidate;
end;
procedure TDesigner.DoDeletePersistent(APersistent: TPersistent; procedure TDesigner.DoDeletePersistent(APersistent: TPersistent;
FreeIt: boolean); FreeIt: boolean);
var var
@ -2279,6 +2298,11 @@ begin
DoDeleteSelectedPersistents; DoDeleteSelectedPersistents;
end; end;
procedure TDesigner.OnSelectAllMenuClick(Sender: TObject);
begin
DoSelectAll;
end;
procedure TDesigner.OnChangeClassMenuClick(Sender: TObject); procedure TDesigner.OnChangeClassMenuClick(Sender: TObject);
begin begin
DoShowChangeClassDialog; DoShowChangeClassDialog;
@ -2803,6 +2827,7 @@ begin
DesignerMenuCopy.OnClick:=@OnCopyMenuClick; DesignerMenuCopy.OnClick:=@OnCopyMenuClick;
DesignerMenuPaste.OnClick:=@OnPasteMenuClick; DesignerMenuPaste.OnClick:=@OnPasteMenuClick;
DesignerMenuDeleteSelection.OnClick:=@OnDeleteSelectionMenuClick; DesignerMenuDeleteSelection.OnClick:=@OnDeleteSelectionMenuClick;
DesignerMenuSelectAll.OnClick:=@OnSelectAllMenuClick;
DesignerMenuChangeClass.OnClick:=@OnChangeClassMenuClick; DesignerMenuChangeClass.OnClick:=@OnChangeClassMenuClick;
DesignerMenuViewLFM.OnClick:=@OnViewLFMMenuClick; DesignerMenuViewLFM.OnClick:=@OnViewLFMMenuClick;

View File

@ -1776,7 +1776,8 @@ resourcestring
fdmOrderMoveToback='Move to back'; fdmOrderMoveToback='Move to back';
fdmOrderForwardOne='Forward one'; fdmOrderForwardOne='Forward one';
fdmOrderBackOne='Back one'; fdmOrderBackOne='Back one';
fdmDeleteSelection='Delete selection'; fdmDeleteSelection='Delete Selection';
fdmSelectAll='Select All';
lisChangeClass = 'Change Class'; lisChangeClass = 'Change Class';
fdmSnapToGridOption='Option: Snap to grid'; fdmSnapToGridOption='Option: Snap to grid';
lisViewSourceLfm = 'View Source (.lfm)'; lisViewSourceLfm = 'View Source (.lfm)';