mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-01 18:12:30 +02:00
IDE: added designer menu item Reset to reset to ancestor bounds
git-svn-id: trunk@41911 -
This commit is contained in:
parent
b7e15c36ac
commit
35903c6be8
@ -187,7 +187,6 @@ function TopFromDesignInfo(ADesignInfo: LongInt): SmallInt; inline;
|
||||
function LeftTopToDesignInfo(const ALeft, ATop: SmallInt): LongInt; inline;
|
||||
procedure DesignInfoToLeftTop(ADesignInfo: LongInt; out ALeft, ATop: SmallInt); inline;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
|
@ -222,6 +222,7 @@ type
|
||||
procedure OnMirrorVerticalPopupMenuClick(Sender: TObject);
|
||||
procedure OnScalePopupMenuClick(Sender: TObject);
|
||||
procedure OnSizePopupMenuClick(Sender: TObject);
|
||||
procedure OnResetPopupMenuClick(Sender: TObject);
|
||||
procedure OnAnchorEditorMenuClick(Sender: TObject);
|
||||
procedure OnTabOrderMenuClick(Sender: TObject);
|
||||
procedure OnOrderMoveToFrontMenuClick(Sender: TObject);
|
||||
@ -369,7 +370,8 @@ var
|
||||
DesignerMenuMirrorVertical: TIDEMenuCommand;
|
||||
DesignerMenuScale: TIDEMenuCommand;
|
||||
DesignerMenuSize: TIDEMenuCommand;
|
||||
|
||||
DesignerMenuReset: TIDEMenuCommand;
|
||||
|
||||
DesignerMenuAnchorEditor: TIDEMenuCommand;
|
||||
DesignerMenuTabOrder: TIDEMenuCommand;
|
||||
DesignerMenuOrderMoveToFront: TIDEMenuCommand;
|
||||
@ -534,6 +536,8 @@ begin
|
||||
'Scale',fdmScaleMenu, nil, nil, nil, 'scale');
|
||||
DesignerMenuSize:=RegisterIDEMenuCommand(DesignerMenuSectionAlign,
|
||||
'Size',fdmSizeMenu, nil, nil, nil, 'size');
|
||||
DesignerMenuReset:=RegisterIDEMenuCommand(DesignerMenuSectionAlign,
|
||||
'Reset','Reset ...', nil, nil, nil, '');
|
||||
|
||||
// register tab and z-order section
|
||||
DesignerMenuSectionOrder:=RegisterIDEMenuSection(DesignerMenuRoot,'Order section');
|
||||
@ -2312,7 +2316,7 @@ end;
|
||||
Handles the keydown messages. DEL deletes the selected controls, CTRL-ARROR
|
||||
moves the selection up one, SHIFT-ARROW resizes, etc.
|
||||
}
|
||||
Procedure TDesigner.KeyDown(Sender : TControl; var TheMessage: TLMKEY);
|
||||
procedure TDesigner.KeyDown(Sender: TControl; var TheMessage: TLMKEY);
|
||||
var
|
||||
Shift: TShiftState;
|
||||
Command: word;
|
||||
@ -2415,7 +2419,7 @@ end;
|
||||
|
||||
|
||||
{------------------------------------K E Y U P --------------------------------}
|
||||
Procedure TDesigner.KeyUp(Sender : TControl; var TheMessage: TLMKEY);
|
||||
procedure TDesigner.KeyUp(Sender: TControl; var TheMessage: TLMKEY);
|
||||
var
|
||||
Shift: TShiftState;
|
||||
Begin
|
||||
@ -2632,7 +2636,7 @@ Begin
|
||||
inherited Modified;
|
||||
end;
|
||||
|
||||
Procedure TDesigner.RemovePersistentAndChilds(APersistent: TPersistent);
|
||||
procedure TDesigner.RemovePersistentAndChilds(APersistent: TPersistent);
|
||||
var
|
||||
i: integer;
|
||||
AWinControl: TWinControl;
|
||||
@ -3439,6 +3443,7 @@ begin
|
||||
DesignerMenuMirrorVertical.OnClick := @OnMirrorVerticalPopupMenuClick;
|
||||
DesignerMenuScale.OnClick := @OnScalePopupMenuClick;
|
||||
DesignerMenuSize.OnClick := @OnSizePopupMenuClick;
|
||||
DesignerMenuReset.OnClick := @OnResetPopupMenuClick;
|
||||
|
||||
DesignerMenuAnchorEditor.OnClick:=@OnAnchorEditorMenuClick;
|
||||
DesignerMenuTabOrder.OnClick:=@OnTabOrderMenuClick;
|
||||
@ -3553,6 +3558,7 @@ begin
|
||||
DesignerMenuMirrorVertical.Enabled := MultiCompsAreSelected and not OnlyNonVisualsAreSelected;
|
||||
DesignerMenuScale.Enabled := CompsAreSelected and not OnlyNonVisualsAreSelected;
|
||||
DesignerMenuSize.Enabled := CompsAreSelected and not OnlyNonVisualsAreSelected;
|
||||
DesignerMenuReset.Enabled := CompsAreSelected;
|
||||
|
||||
DesignerMenuAnchorEditor.Enabled := (FLookupRoot is TWinControl) and (TWinControl(FLookupRoot).ControlCount > 0);
|
||||
DesignerMenuTabOrder.Enabled := (FLookupRoot is TWinControl) and (TWinControl(FLookupRoot).ControlCount > 0);
|
||||
@ -3656,6 +3662,75 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDesigner.OnResetPopupMenuClick(Sender: TObject);
|
||||
var
|
||||
ResetComps: TFPList;
|
||||
HasChanged: Boolean;
|
||||
|
||||
procedure ResetControl(AControl: TControl; Recursive: boolean);
|
||||
var
|
||||
Ancestor: TControl;
|
||||
i: Integer;
|
||||
OldBounds: TRect;
|
||||
NewBounds: TRect;
|
||||
begin
|
||||
if ResetComps.IndexOf(AControl)>=0 then exit;
|
||||
ResetComps.Add(AControl);
|
||||
Ancestor:=TControl(TheFormEditor.GetAncestorInstance(AControl));
|
||||
if not (Ancestor is TControl) then exit;
|
||||
OldBounds:=AControl.BoundsRect;
|
||||
NewBounds:=Ancestor.BoundsRect;
|
||||
if not CompareRect(@OldBounds,@NewBounds) then begin
|
||||
AControl.BoundsRect:=NewBounds;
|
||||
HasChanged:=true;
|
||||
end;
|
||||
if Recursive and (AControl is TWinControl) then begin
|
||||
for i:=0 to TWinControl(AControl).ControlCount-1 do
|
||||
ResetControl(TWinControl(AControl).Controls[i],true);
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
MsgResult: TModalResult;
|
||||
i: Integer;
|
||||
Item: TSelectedControl;
|
||||
AComponent: TComponent;
|
||||
AncestorComponent: TComponent;
|
||||
begin
|
||||
MsgResult:=IDEQuestionDialog(lisReset,
|
||||
lisResetLeftTopWidthHeightOfSelectedComponentsToTheir,
|
||||
mtConfirmation, [mrYes, lisSelected, mrYesToAll,
|
||||
lisSelectedAndChildControls, mrCancel]);
|
||||
if not (MsgResult in [mrYes,mrYesToAll]) then exit;
|
||||
HasChanged:=false;
|
||||
Form.DisableAutoSizing;
|
||||
ResetComps:=TFPList.Create;
|
||||
try
|
||||
for i:=0 to ControlSelection.Count-1 do begin
|
||||
Item:=ControlSelection[i];
|
||||
if Item.IsTControl then begin
|
||||
ResetControl(TControl(Item.Persistent),MsgResult=mrYesToAll);
|
||||
end else if Item.IsTComponent then begin
|
||||
AComponent:=TComponent(Item.Persistent);
|
||||
if ResetComps.IndexOf(AComponent)>=0 then continue;
|
||||
ResetComps.Add(AComponent);
|
||||
if Item.IsNonVisualComponent then begin
|
||||
AncestorComponent:=TheFormEditor.GetAncestorInstance(AComponent);
|
||||
if AncestorComponent=nil then continue;
|
||||
if AComponent.DesignInfo=AncestorComponent.DesignInfo then continue;
|
||||
AComponent.DesignInfo:=AncestorComponent.DesignInfo;
|
||||
HasChanged:=true;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
ResetComps.Free;
|
||||
Form.EnableAutoSizing;
|
||||
if HasChanged then
|
||||
Modified;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TDesigner.OnOrderMoveToFrontMenuClick(Sender: TObject);
|
||||
begin
|
||||
DoOrderMoveSelectionToFront;
|
||||
|
@ -1545,6 +1545,7 @@ begin
|
||||
|
||||
if csInline in CurRoot.ComponentState then begin
|
||||
// inline/embedded components (e.g. nested frame)
|
||||
// find the non inlined instance (the IDE always creates one, it may be hidden)
|
||||
CurRoot:=FindJITComponentByClass(TComponentClass(CurRoot.ClassType));
|
||||
if CurRoot=nil then exit;
|
||||
if CurRoot.FindComponent(AComponent.Name)=nil then exit;
|
||||
@ -1567,10 +1568,23 @@ end;
|
||||
|
||||
function TCustomFormEditor.GetAncestorInstance(AComponent: TComponent
|
||||
): TComponent;
|
||||
var
|
||||
aRoot: TComponent;
|
||||
begin
|
||||
Result:=nil;
|
||||
if (AComponent=nil) or (AComponent.ClassType=TComponent) then exit;
|
||||
Result:=FindJITComponentByClass(TComponentClass(AComponent.ClassParent));
|
||||
if AComponent.Owner=nil then begin
|
||||
// root component
|
||||
Result:=FindJITComponentByClass(TComponentClass(AComponent.ClassParent));
|
||||
end else if csInline in AComponent.ComponentState then begin
|
||||
// inline/embedded components (e.g. nested frame)
|
||||
Result:=FindJITComponentByClass(TComponentClass(AComponent.ClassType));
|
||||
end else begin
|
||||
// child component
|
||||
aRoot:=GetAncestorLookupRoot(AComponent);
|
||||
if aRoot=nil then exit;
|
||||
Result:=aRoot.FindComponent(AComponent.Name);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomFormEditor.RegisterDesignerBaseClass(AClass: TComponentClass
|
||||
|
@ -2549,6 +2549,9 @@ resourcestring
|
||||
lisTheComponentEditorOfClassInvokedWithVerbHasCreated = 'The component '
|
||||
+'editor of class %s%s%s%sinvoked with verb #%s %s%s%s%shas created the '
|
||||
+'error:%s%s%s%s';
|
||||
lisReset = 'Reset';
|
||||
lisResetLeftTopWidthHeightOfSelectedComponentsToTheir = 'Reset Left, Top, '
|
||||
+'Width, Height of selected components to their ancestor values?';
|
||||
lisTheComponentEditorOfClassHasCreatedTheError = 'The component editor of '
|
||||
+'class %s%s%s has created the error:%s%s%s%s';
|
||||
fdInvalidMultiselectionText='Multiselected components must be of a single form.';
|
||||
@ -5307,6 +5310,7 @@ resourcestring
|
||||
lisUnableToWriteTheProjectInfoFileError = 'Unable to write the project info '
|
||||
+'file%s%s%s%s.%sError: %s';
|
||||
lisSelected = 'Selected';
|
||||
lisSelectedAndChildControls = 'Selected and child controls';
|
||||
lisDeleteRow = 'Delete row';
|
||||
lisDeleteSetting = 'Delete setting';
|
||||
lisDeleteBuildMode = 'Delete build mode';
|
||||
|
Loading…
Reference in New Issue
Block a user