mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 09:19:22 +02:00
LCL: New layout for the TreeView component editor, issue #40748, patch "3_treeeditor_editing" by n7800
This commit is contained in:
parent
43f05f787a
commit
fc844f5fc1
@ -3,7 +3,7 @@ object TreeViewItemsEditorForm: TTreeViewItemsEditorForm
|
|||||||
Height = 326
|
Height = 326
|
||||||
Top = 230
|
Top = 230
|
||||||
Width = 635
|
Width = 635
|
||||||
ActiveControl = btnNewItem
|
ActiveControl = treEditor
|
||||||
BorderIcons = [biSystemMenu, biHelp]
|
BorderIcons = [biSystemMenu, biHelp]
|
||||||
Caption = 'TreeView Items Editor'
|
Caption = 'TreeView Items Editor'
|
||||||
ClientHeight = 326
|
ClientHeight = 326
|
||||||
@ -43,9 +43,9 @@ object TreeViewItemsEditorForm: TTreeViewItemsEditorForm
|
|||||||
BorderSpacing.Top = 5
|
BorderSpacing.Top = 5
|
||||||
BorderSpacing.Bottom = 5
|
BorderSpacing.Bottom = 5
|
||||||
HideSelection = False
|
HideSelection = False
|
||||||
ReadOnly = True
|
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips]
|
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips]
|
||||||
|
OnEditingEnd = treEditorEditingEnd
|
||||||
OnSelectionChanged = treEditorSelectionChanged
|
OnSelectionChanged = treEditorSelectionChanged
|
||||||
end
|
end
|
||||||
object btnNewItem: TButton
|
object btnNewItem: TButton
|
||||||
|
@ -58,6 +58,8 @@ type
|
|||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure btnMoveClick(Sender: TObject);
|
procedure btnMoveClick(Sender: TObject);
|
||||||
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
|
procedure treEditorEditingEnd(Sender: TObject; Node: TTreeNode;
|
||||||
|
Cancel: Boolean);
|
||||||
procedure treEditorSelectionChanged(Sender: TObject);
|
procedure treEditorSelectionChanged(Sender: TObject);
|
||||||
procedure btnApplyClick(Sender: TObject);
|
procedure btnApplyClick(Sender: TObject);
|
||||||
procedure btnDeleteClick(Sender: TObject);
|
procedure btnDeleteClick(Sender: TObject);
|
||||||
@ -70,6 +72,8 @@ type
|
|||||||
procedure SaveToTree;
|
procedure SaveToTree;
|
||||||
procedure UpdateEnabledStates;
|
procedure UpdateEnabledStates;
|
||||||
procedure UpdateImageHints;
|
procedure UpdateImageHints;
|
||||||
|
procedure FinishNodeEditing;
|
||||||
|
procedure CancelNodeEditing;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TTreeViewItemsProperty }
|
{ TTreeViewItemsProperty }
|
||||||
@ -161,6 +165,8 @@ begin
|
|||||||
// form actions
|
// form actions
|
||||||
if (Key = VK_RETURN) and (Shift = [ssCtrl]) then
|
if (Key = VK_RETURN) and (Shift = [ssCtrl]) then
|
||||||
begin
|
begin
|
||||||
|
FinishNodeEditing;
|
||||||
|
|
||||||
ModalResult := mrOK;
|
ModalResult := mrOK;
|
||||||
Key := 0;
|
Key := 0;
|
||||||
end
|
end
|
||||||
@ -171,11 +177,12 @@ begin
|
|||||||
end
|
end
|
||||||
else if (Key = VK_ESCAPE) and (Shift = []) then
|
else if (Key = VK_ESCAPE) and (Shift = []) then
|
||||||
begin
|
begin
|
||||||
if not treEditor.IsEditing then
|
// pressing [Esc] in an open editor cancel text editing
|
||||||
begin
|
if treEditor.IsEditing then
|
||||||
|
CancelNodeEditing
|
||||||
|
else
|
||||||
ModalResult := mrCancel;
|
ModalResult := mrCancel;
|
||||||
Key := 0;
|
Key := 0;
|
||||||
end;
|
|
||||||
end
|
end
|
||||||
// create item
|
// create item
|
||||||
else if (Key = VK_N) and (Shift = [ssCtrl]) then
|
else if (Key = VK_N) and (Shift = [ssCtrl]) then
|
||||||
@ -210,6 +217,25 @@ begin
|
|||||||
btnMoveClick(btnMoveUp); // "Sender" is the pressed button
|
btnMoveClick(btnMoveUp); // "Sender" is the pressed button
|
||||||
Key := 0;
|
Key := 0;
|
||||||
end
|
end
|
||||||
|
// move selection
|
||||||
|
else if (Key in [VK_DOWN, VK_UP]) and (Shift = []) then
|
||||||
|
begin
|
||||||
|
if treEditor.IsEditing then
|
||||||
|
begin
|
||||||
|
// close text editor
|
||||||
|
FinishNodeEditing;
|
||||||
|
// select next
|
||||||
|
if Key = VK_DOWN then
|
||||||
|
treEditor.MoveToNextNode(true)
|
||||||
|
else
|
||||||
|
treEditor.MoveToPrevNode(true);
|
||||||
|
// open text editor
|
||||||
|
if Assigned(treEditor.Selected) then
|
||||||
|
treEditor.Selected.EditText;
|
||||||
|
|
||||||
|
Key := 0;
|
||||||
|
end;
|
||||||
|
end
|
||||||
// save and load in/from file
|
// save and load in/from file
|
||||||
else if (Key = VK_S) and (Shift = [ssCtrl]) then
|
else if (Key = VK_S) and (Shift = [ssCtrl]) then
|
||||||
begin
|
begin
|
||||||
@ -223,10 +249,32 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTreeViewItemsEditorForm.treEditorEditingEnd(Sender: TObject;
|
||||||
|
Node: TTreeNode; Cancel: Boolean);
|
||||||
|
begin
|
||||||
|
// this event can be fired when edtNodeText has already been released
|
||||||
|
if csDestroying in ComponentState then exit;
|
||||||
|
|
||||||
|
if Assigned(treEditor.Selected) then
|
||||||
|
begin
|
||||||
|
// remove event to avoid cyclic calling
|
||||||
|
edtNodeText.OnChange := nil;
|
||||||
|
try
|
||||||
|
// update text
|
||||||
|
edtNodeText.Text := treEditor.Selected.Text;
|
||||||
|
finally
|
||||||
|
// restore event
|
||||||
|
edtNodeText.OnChange := @edtNodeTextChange;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTreeViewItemsEditorForm.btnNewItemClick(Sender: TObject);
|
procedure TTreeViewItemsEditorForm.btnNewItemClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
lNewName: String;
|
lNewName: String;
|
||||||
begin
|
begin
|
||||||
|
FinishNodeEditing;
|
||||||
|
|
||||||
lNewName := sccsTrEdtItem + IntToStr(treEditor.Items.Count);
|
lNewName := sccsTrEdtItem + IntToStr(treEditor.Items.Count);
|
||||||
if Sender = btnNewItem then
|
if Sender = btnNewItem then
|
||||||
treEditor.Selected := treEditor.Items.Add(treEditor.Selected, lNewName)
|
treEditor.Selected := treEditor.Items.Add(treEditor.Selected, lNewName)
|
||||||
@ -235,10 +283,7 @@ begin
|
|||||||
else
|
else
|
||||||
raise Exception.Create('[btnNewItemClick] Unknown Sender');
|
raise Exception.Create('[btnNewItemClick] Unknown Sender');
|
||||||
|
|
||||||
//grpNodeEditor.Enabled := treEditor.Items.Count > 0;
|
UpdateEnabledStates;
|
||||||
|
|
||||||
edtNodeText.SetFocus;
|
|
||||||
//edtNodeText.SelectAll;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTreeViewItemsEditorForm.edtNodeTextChange(Sender: TObject);
|
procedure TTreeViewItemsEditorForm.edtNodeTextChange(Sender: TObject);
|
||||||
@ -251,6 +296,8 @@ procedure TTreeViewItemsEditorForm.btnMoveClick(Sender: TObject);
|
|||||||
var
|
var
|
||||||
lCurNode: TTreeNode;
|
lCurNode: TTreeNode;
|
||||||
begin
|
begin
|
||||||
|
FinishNodeEditing;
|
||||||
|
|
||||||
lCurNode := treEditor.Selected;
|
lCurNode := treEditor.Selected;
|
||||||
if lCurNode = nil then exit;
|
if lCurNode = nil then exit;
|
||||||
|
|
||||||
@ -304,6 +351,8 @@ end;
|
|||||||
|
|
||||||
procedure TTreeViewItemsEditorForm.btnApplyClick(Sender: TObject);
|
procedure TTreeViewItemsEditorForm.btnApplyClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
FinishNodeEditing;
|
||||||
|
|
||||||
SaveToTree;
|
SaveToTree;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -334,6 +383,8 @@ end;
|
|||||||
|
|
||||||
procedure TTreeViewItemsEditorForm.btnLoadClick(Sender: TObject);
|
procedure TTreeViewItemsEditorForm.btnLoadClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
|
FinishNodeEditing;
|
||||||
|
|
||||||
if dlgOpen.Execute then
|
if dlgOpen.Execute then
|
||||||
begin
|
begin
|
||||||
treEditor.LoadFromFile(dlgOpen.FileName);
|
treEditor.LoadFromFile(dlgOpen.FileName);
|
||||||
@ -381,6 +432,8 @@ procedure TTreeViewItemsEditorForm.btnSaveClick(Sender: TObject);
|
|||||||
end;
|
end;
|
||||||
//
|
//
|
||||||
begin
|
begin
|
||||||
|
FinishNodeEditing;
|
||||||
|
|
||||||
if ConfirmImagesLoss and dlgSave.Execute and ConfirmReplace then
|
if ConfirmImagesLoss and dlgSave.Execute and ConfirmReplace then
|
||||||
treEditor.SaveToFile(dlgSave.FileName);
|
treEditor.SaveToFile(dlgSave.FileName);
|
||||||
|
|
||||||
@ -453,6 +506,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTreeViewItemsEditorForm.FinishNodeEditing;
|
||||||
|
begin
|
||||||
|
if treEditor.Items.Count > 0 then
|
||||||
|
treEditor.Items[0].EndEdit(false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TTreeViewItemsEditorForm.CancelNodeEditing;
|
||||||
|
begin
|
||||||
|
if treEditor.Items.Count > 0 then
|
||||||
|
treEditor.Items[0].EndEdit(true);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTreeViewItemsEditorForm.LoadFromTree(aTreeView: TCustomTreeView);
|
procedure TTreeViewItemsEditorForm.LoadFromTree(aTreeView: TCustomTreeView);
|
||||||
begin
|
begin
|
||||||
fTreeView := aTreeView;
|
fTreeView := aTreeView;
|
||||||
|
Loading…
Reference in New Issue
Block a user