mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-30 00:22:56 +02:00
New dialog for Change Parent feature.
git-svn-id: trunk@52195 -
This commit is contained in:
parent
58317e2f8a
commit
4d61abe1f8
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1823,6 +1823,8 @@ components/ideintf/actionseditor.pas svneol=native#text/pascal
|
|||||||
components/ideintf/actionseditorstd.lfm svneol=native#text/plain
|
components/ideintf/actionseditorstd.lfm svneol=native#text/plain
|
||||||
components/ideintf/actionseditorstd.pas svneol=native#text/pascal
|
components/ideintf/actionseditorstd.pas svneol=native#text/pascal
|
||||||
components/ideintf/baseideintf.pas svneol=native#text/plain
|
components/ideintf/baseideintf.pas svneol=native#text/plain
|
||||||
|
components/ideintf/changeparentdlg.lfm svneol=native#text/plain
|
||||||
|
components/ideintf/changeparentdlg.pas svneol=native#text/pascal
|
||||||
components/ideintf/checkgroupeditordlg.lfm svneol=native#text/plain
|
components/ideintf/checkgroupeditordlg.lfm svneol=native#text/plain
|
||||||
components/ideintf/checkgroupeditordlg.pas svneol=native#text/plain
|
components/ideintf/checkgroupeditordlg.pas svneol=native#text/plain
|
||||||
components/ideintf/checklistboxeditordlg.lfm svneol=native#text/plain
|
components/ideintf/checklistboxeditordlg.lfm svneol=native#text/plain
|
||||||
|
110
components/ideintf/changeparentdlg.lfm
Normal file
110
components/ideintf/changeparentdlg.lfm
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
object ChangeParentDlg: TChangeParentDlg
|
||||||
|
Left = 550
|
||||||
|
Height = 386
|
||||||
|
Top = 217
|
||||||
|
Width = 248
|
||||||
|
BorderIcons = [biSystemMenu, biMaximize]
|
||||||
|
Caption = 'ChangeParentDlg'
|
||||||
|
ClientHeight = 386
|
||||||
|
ClientWidth = 248
|
||||||
|
OnClose = FormClose
|
||||||
|
OnCreate = FormCreate
|
||||||
|
Position = poScreenCenter
|
||||||
|
LCLVersion = '1.7'
|
||||||
|
object ListFilterEdit: TListFilterEdit
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = Owner
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
Left = 6
|
||||||
|
Height = 21
|
||||||
|
Top = 6
|
||||||
|
Width = 236
|
||||||
|
OnAfterFilter = ListFilterEditAfterFilter
|
||||||
|
ButtonWidth = 23
|
||||||
|
NumGlyphs = 1
|
||||||
|
Anchors = [akTop, akLeft, akRight]
|
||||||
|
BorderSpacing.Around = 6
|
||||||
|
MaxLength = 0
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
|
object ListBox: TListBox
|
||||||
|
AnchorSideLeft.Control = Owner
|
||||||
|
AnchorSideTop.Control = ListFilterEdit
|
||||||
|
AnchorSideTop.Side = asrBottom
|
||||||
|
AnchorSideRight.Control = Owner
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
AnchorSideBottom.Control = chShowClasses
|
||||||
|
Left = 6
|
||||||
|
Height = 260
|
||||||
|
Top = 33
|
||||||
|
Width = 236
|
||||||
|
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||||
|
BorderSpacing.Around = 6
|
||||||
|
ItemHeight = 0
|
||||||
|
OnDblClick = ListBoxDblClick
|
||||||
|
OnSelectionChange = ListBoxSelectionChange
|
||||||
|
TabOrder = 1
|
||||||
|
end
|
||||||
|
object ButtonPanel: TButtonPanel
|
||||||
|
Left = 6
|
||||||
|
Height = 26
|
||||||
|
Top = 354
|
||||||
|
Width = 236
|
||||||
|
OKButton.Name = 'OKButton'
|
||||||
|
OKButton.DefaultCaption = True
|
||||||
|
OKButton.OnClick = OKButtonClick
|
||||||
|
HelpButton.Name = 'HelpButton'
|
||||||
|
HelpButton.DefaultCaption = True
|
||||||
|
CloseButton.Name = 'CloseButton'
|
||||||
|
CloseButton.DefaultCaption = True
|
||||||
|
CancelButton.Name = 'CancelButton'
|
||||||
|
CancelButton.DefaultCaption = True
|
||||||
|
TabOrder = 2
|
||||||
|
ShowButtons = [pbOK, pbCancel]
|
||||||
|
ShowBevel = False
|
||||||
|
end
|
||||||
|
object lblSelectedControls: TLabel
|
||||||
|
AnchorSideLeft.Control = ListBox
|
||||||
|
AnchorSideRight.Control = ListBox
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
AnchorSideBottom.Control = lblCurentParents
|
||||||
|
Left = 6
|
||||||
|
Height = 13
|
||||||
|
Top = 319
|
||||||
|
Width = 236
|
||||||
|
Anchors = [akLeft, akRight, akBottom]
|
||||||
|
BorderSpacing.Bottom = 3
|
||||||
|
Caption = 'lblSelectedControls'
|
||||||
|
ParentColor = False
|
||||||
|
ParentFont = False
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
object lblCurentParents: TLabel
|
||||||
|
AnchorSideLeft.Control = ListBox
|
||||||
|
AnchorSideRight.Control = ListBox
|
||||||
|
AnchorSideRight.Side = asrBottom
|
||||||
|
AnchorSideBottom.Control = ButtonPanel
|
||||||
|
Left = 6
|
||||||
|
Height = 13
|
||||||
|
Top = 335
|
||||||
|
Width = 236
|
||||||
|
Anchors = [akLeft, akRight, akBottom]
|
||||||
|
Caption = 'lblCurentParents'
|
||||||
|
ParentColor = False
|
||||||
|
WordWrap = True
|
||||||
|
end
|
||||||
|
object chShowClasses: TCheckBox
|
||||||
|
AnchorSideLeft.Control = ListBox
|
||||||
|
AnchorSideBottom.Control = lblSelectedControls
|
||||||
|
Left = 6
|
||||||
|
Height = 17
|
||||||
|
Top = 299
|
||||||
|
Width = 91
|
||||||
|
Anchors = [akLeft, akBottom]
|
||||||
|
BorderSpacing.Bottom = 3
|
||||||
|
Caption = 'chShowClasses'
|
||||||
|
OnClick = chShowClassesClick
|
||||||
|
TabOrder = 3
|
||||||
|
end
|
||||||
|
end
|
269
components/ideintf/changeparentdlg.pas
Normal file
269
components/ideintf/changeparentdlg.pas
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
{
|
||||||
|
*****************************************************************************
|
||||||
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
||||||
|
for details about the license.
|
||||||
|
*****************************************************************************
|
||||||
|
|
||||||
|
Author: FTurtle
|
||||||
|
|
||||||
|
Abstract:
|
||||||
|
Dialog for choosing new parent name.
|
||||||
|
}
|
||||||
|
|
||||||
|
unit ChangeParentDlg;
|
||||||
|
|
||||||
|
{$mode objfpc}{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Classes, SysUtils, strutils, FileUtil, ListFilterEdit, PropEditUtils, Forms,
|
||||||
|
Controls, Graphics, Dialogs, StdCtrls, ButtonPanel;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TChangeParentDlg }
|
||||||
|
|
||||||
|
TChangeParentDlg = class(TForm)
|
||||||
|
ButtonPanel: TButtonPanel;
|
||||||
|
chShowClasses: TCheckBox;
|
||||||
|
lblSelectedControls: TLabel;
|
||||||
|
lblCurentParents: TLabel;
|
||||||
|
ListBox: TListBox;
|
||||||
|
ListFilterEdit: TListFilterEdit;
|
||||||
|
procedure chShowClassesClick(Sender: TObject);
|
||||||
|
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||||
|
procedure FormCreate(Sender: TObject);
|
||||||
|
procedure ListBoxDblClick(Sender: TObject);
|
||||||
|
procedure ListBoxSelectionChange(Sender: TObject; User: boolean);
|
||||||
|
procedure ListFilterEditAfterFilter(Sender: TObject);
|
||||||
|
procedure OKButtonClick(Sender: TObject);
|
||||||
|
private
|
||||||
|
class var
|
||||||
|
FSavedWidth: Integer;
|
||||||
|
FSavedHeight: Integer;
|
||||||
|
FSavedShowClasses: Boolean;
|
||||||
|
private
|
||||||
|
FCandidates: TFPList;
|
||||||
|
FIgnoredCandidateName: string;
|
||||||
|
function GetSelectedItem: string;
|
||||||
|
procedure RefreshList;
|
||||||
|
procedure SetSelection(ASelection: TPersistentSelectionList);
|
||||||
|
procedure UpdateOKButtonState;
|
||||||
|
public
|
||||||
|
function ShowModal: Integer; override;
|
||||||
|
public
|
||||||
|
property SelectedItem: string read GetSelectedItem;
|
||||||
|
property Selection: TPersistentSelectionList write SetSelection;
|
||||||
|
property Candidates: TFPList write FCandidates;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ShowChangeParentDlg(ASelection: TPersistentSelectionList;
|
||||||
|
ACandidates: TFPList; out ANewParentName: string): Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses LCLIntf, ObjInspStrConsts;
|
||||||
|
|
||||||
|
{$R *.lfm}
|
||||||
|
|
||||||
|
{ TChangeParentDlg }
|
||||||
|
|
||||||
|
const
|
||||||
|
colon = ': ';
|
||||||
|
|
||||||
|
function ShowChangeParentDlg(ASelection: TPersistentSelectionList;
|
||||||
|
ACandidates: TFPList; out ANewParentName: string): Boolean;
|
||||||
|
begin
|
||||||
|
if not Assigned(ASelection) or not Assigned(ACandidates) then
|
||||||
|
Exit(False);
|
||||||
|
|
||||||
|
with TChangeParentDlg.Create(nil) do
|
||||||
|
try
|
||||||
|
Selection := ASelection;
|
||||||
|
Candidates := ACandidates;
|
||||||
|
Result := (ShowModal = mrOK);
|
||||||
|
if Result then
|
||||||
|
ANewParentName := SelectedItem;
|
||||||
|
finally
|
||||||
|
Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.FormCreate(Sender: TObject);
|
||||||
|
begin
|
||||||
|
Constraints.MinHeight := 250;
|
||||||
|
Constraints.MinWidth := 175;
|
||||||
|
|
||||||
|
Height := FSavedHeight; // see "initialization"
|
||||||
|
Width := FSavedWidth;
|
||||||
|
chShowClasses.Checked := FSavedShowClasses;
|
||||||
|
|
||||||
|
Caption := oisChangeParent;
|
||||||
|
chShowClasses.Caption := oisShowClasses;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$HINTS OFF}
|
||||||
|
procedure TChangeParentDlg.FormClose(Sender: TObject; var CloseAction: TCloseAction);
|
||||||
|
begin
|
||||||
|
FSavedHeight := Height;
|
||||||
|
FSavedWidth := Width;
|
||||||
|
FSavedShowClasses := chShowClasses.Checked;
|
||||||
|
end;
|
||||||
|
{$HINTS ON}
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.chShowClassesClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if Assigned(FCandidates) then
|
||||||
|
RefreshList;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.ListBoxDblClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
ButtonPanel.OKButton.Click;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$HINTS OFF}
|
||||||
|
procedure TChangeParentDlg.ListBoxSelectionChange(Sender: TObject; User: boolean);
|
||||||
|
begin
|
||||||
|
UpdateOKButtonState;
|
||||||
|
end;
|
||||||
|
{$HINTS ON}
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.ListFilterEditAfterFilter(Sender: TObject);
|
||||||
|
begin
|
||||||
|
UpdateOKButtonState;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.OKButtonClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if ListBox.ItemIndex < 0 then
|
||||||
|
ModalResult := mrNone;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TChangeParentDlg.GetSelectedItem: string;
|
||||||
|
var
|
||||||
|
n: Integer;
|
||||||
|
begin
|
||||||
|
if ListBox.ItemIndex < 0 then
|
||||||
|
Exit('');
|
||||||
|
Result := ListBox.Items[ListBox.ItemIndex];
|
||||||
|
n := Pos(colon, Result);
|
||||||
|
if n>0 then
|
||||||
|
SetLength(Result, n-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.RefreshList;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
OldIndex: Integer;
|
||||||
|
|
||||||
|
function MakeItem(ACandidate: TWinControl): string;
|
||||||
|
begin
|
||||||
|
if chShowClasses.Checked then
|
||||||
|
Result := ACandidate.Name + colon + ACandidate.ClassName
|
||||||
|
else
|
||||||
|
Result := ACandidate.Name;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IsIgnoredName: Boolean;
|
||||||
|
begin
|
||||||
|
Result := (TWinControl(FCandidates.Items[i]).Name = FIgnoredCandidateName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
OldIndex := ListBox.ItemIndex;
|
||||||
|
ListFilterEdit.FilteredListbox := nil;
|
||||||
|
ListBox.Items.Clear;
|
||||||
|
for i:=0 to FCandidates.Count-1 do
|
||||||
|
if not IsIgnoredName then
|
||||||
|
ListBox.Items.Add(MakeItem(TWinControl(FCandidates.Items[i])));
|
||||||
|
ListBox.ItemIndex := OldIndex; // if list was filtered it may select other item
|
||||||
|
ListFilterEdit.FilteredListbox := ListBox;
|
||||||
|
ListFilterEdit.Text := '';
|
||||||
|
UpdateOKButtonState;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.SetSelection(ASelection: TPersistentSelectionList);
|
||||||
|
var
|
||||||
|
i, ControlsCount: Integer;
|
||||||
|
sControls, sParents: string;
|
||||||
|
CurParentNameList: TStringList;
|
||||||
|
|
||||||
|
procedure AddControlName(AControlName: string);
|
||||||
|
begin
|
||||||
|
Inc(ControlsCount);
|
||||||
|
if ControlsCount = 1 then
|
||||||
|
sControls := AControlName
|
||||||
|
else
|
||||||
|
sControls := sControls + ', ' + AControlName;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TryAddParentName(AParentName: string);
|
||||||
|
begin
|
||||||
|
if CurParentNameList.IndexOf(AParentName) < 0 then
|
||||||
|
CurParentNameList.Append(AParentName);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetIgnoredCandidateName;
|
||||||
|
var
|
||||||
|
j: Integer;
|
||||||
|
begin
|
||||||
|
FIgnoredCandidateName := CurParentNameList[0];
|
||||||
|
for j:=1 to CurParentNameList.Count-1 do
|
||||||
|
if FIgnoredCandidateName <> CurParentNameList[j] then
|
||||||
|
begin
|
||||||
|
FIgnoredCandidateName := '';
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
ControlsCount := 0;
|
||||||
|
CurParentNameList := TStringList.Create;
|
||||||
|
|
||||||
|
for i:=0 to ASelection.Count-1 do
|
||||||
|
if ASelection.Items[i] is TControl then
|
||||||
|
begin
|
||||||
|
AddControlName(TControl(ASelection.Items[i]).Name);
|
||||||
|
TryAddParentName(TControl(ASelection.Items[i]).Parent.Name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
sControls := IfThen(ControlsCount > 1, oisSelectedControls, oisSelectedControl) +
|
||||||
|
': ' + sControls;
|
||||||
|
|
||||||
|
if CurParentNameList.Count > 0 then
|
||||||
|
begin
|
||||||
|
sParents := IfThen(CurParentNameList.Count > 1, oisCurrentParents, oisCurrentParent) +
|
||||||
|
': ' + CurParentNameList[0];
|
||||||
|
for i:=1 to CurParentNameList.Count-1 do
|
||||||
|
sParents := sParents + ', ' + CurParentNameList[i];
|
||||||
|
SetIgnoredCandidateName;
|
||||||
|
end;
|
||||||
|
|
||||||
|
lblSelectedControls.Caption := sControls;
|
||||||
|
lblCurentParents.Caption := sParents;
|
||||||
|
|
||||||
|
CurParentNameList.Free;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChangeParentDlg.UpdateOKButtonState;
|
||||||
|
begin
|
||||||
|
ButtonPanel.OKButton.Enabled := (ListBox.ItemIndex > -1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TChangeParentDlg.ShowModal: Integer;
|
||||||
|
begin
|
||||||
|
RefreshList;
|
||||||
|
Result := inherited ShowModal;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
TChangeParentDlg.FSavedWidth := 250;
|
||||||
|
TChangeParentDlg.FSavedHeight := 390;
|
||||||
|
TChangeParentDlg.FSavedShowClasses := False;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user