Designer: Synchronize property value in Object Inspector with Tab Order dialog

git-svn-id: trunk@30404 -
This commit is contained in:
juha 2011-04-20 16:05:28 +00:00
parent 25505a1b46
commit 79c76f7cd9

View File

@ -50,7 +50,7 @@ type
procedure DownSpeedbuttonCLICK(Sender: TObject); procedure DownSpeedbuttonCLICK(Sender: TObject);
private private
FUpdating: Boolean; FUpdating: Boolean;
procedure SwapNodes(ANode1, ANode2: TTreeNode); procedure SwapNodes(ANode1, ANode2, NewSelected: TTreeNode);
procedure CheckButtonsEnabled; procedure CheckButtonsEnabled;
procedure CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode); procedure CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode);
procedure RefreshTree; procedure RefreshTree;
@ -59,7 +59,6 @@ type
procedure OnPersistentDeleting(APersistent: TPersistent); procedure OnPersistentDeleting(APersistent: TPersistent);
procedure OnDeletePersistent(var APersistent: TPersistent); procedure OnDeletePersistent(var APersistent: TPersistent);
procedure OnSetSelection(const ASelection: TPersistentSelectionList); procedure OnSetSelection(const ASelection: TPersistentSelectionList);
procedure OnRefreshPropertyValues;
end; end;
{ TTabOrderPropEditor } { TTabOrderPropEditor }
@ -89,7 +88,6 @@ begin
GlobalDesignHook.AddHandlerPersistentDeleting(@OnPersistentDeleting); GlobalDesignHook.AddHandlerPersistentDeleting(@OnPersistentDeleting);
GlobalDesignHook.AddHandlerDeletePersistent(@OnDeletePersistent); GlobalDesignHook.AddHandlerDeletePersistent(@OnDeletePersistent);
GlobalDesignHook.AddHandlerSetSelection(@OnSetSelection); GlobalDesignHook.AddHandlerSetSelection(@OnSetSelection);
GlobalDesignHook.AddHandlerRefreshPropertyValues(@OnRefreshPropertyValues);
ArrowDown.LoadGlyphFromLazarusResource('arrow_down'); ArrowDown.LoadGlyphFromLazarusResource('arrow_down');
ArrowUp.LoadGlyphFromLazarusResource('arrow_up'); ArrowUp.LoadGlyphFromLazarusResource('arrow_up');
@ -122,9 +120,7 @@ begin
CurItem := ItemTreeview.Selected; CurItem := ItemTreeview.Selected;
if (CurItem=nil) or (CurItem.GetPrevSibling=nil) then exit; if (CurItem=nil) or (CurItem.GetPrevSibling=nil) then exit;
NewItem := CurItem.GetPrevSibling; NewItem := CurItem.GetPrevSibling;
SwapNodes(NewItem, CurItem); SwapNodes(NewItem, CurItem, CurItem);
ItemTreeview.Selected := CurItem;
CheckButtonsEnabled;
end; end;
procedure TTabOrderDialog.DownSpeedbuttonCLICK(Sender: TObject); procedure TTabOrderDialog.DownSpeedbuttonCLICK(Sender: TObject);
@ -134,24 +130,36 @@ begin
CurItem:=ItemTreeview.Selected; CurItem:=ItemTreeview.Selected;
if (CurItem=nil) or (CurItem.GetNextSibling=nil) then exit; if (CurItem=nil) or (CurItem.GetNextSibling=nil) then exit;
NewItem := CurItem.GetNextSibling; NewItem := CurItem.GetNextSibling;
SwapNodes(CurItem, NewItem); SwapNodes(CurItem, NewItem, CurItem);
ItemTreeview.Selected:=CurItem;
CheckButtonsEnabled;
end; end;
procedure TTabOrderDialog.SwapNodes(ANode1, ANode2: TTreeNode); procedure TTabOrderDialog.SwapNodes(ANode1, ANode2, NewSelected: TTreeNode);
var var
Ctrl1, Ctrl2: TWinControl; Ctrl1, Ctrl2: TWinControl;
TabOrd: TTabOrder; TabOrd: TTabOrder;
begin begin
ANode2.MoveTo(ANode1,naInsert); // Move Node2 in front of Node1. if IsVisible and not FUpdating then
Ctrl1 := TWinControl(ANode1.Data); begin
Ctrl2 := TWinControl(ANode2.Data); FUpdating := true;
TabOrd := Ctrl1.TabOrder; // Swap TabOrder values. ItemTreeview.BeginUpdate;
Ctrl1.TabOrder := Ctrl2.TabOrder; try
Ctrl2.TabOrder := TabOrd; ANode2.MoveTo(ANode1,naInsert); // Move Node2 in front of Node1.
ANode1.Text := Ctrl1.Name + ' (' + IntToStr(Ctrl1.TabOrder) + ')'; Ctrl1 := TWinControl(ANode1.Data);
ANode2.Text := Ctrl2.Name + ' (' + IntToStr(Ctrl2.TabOrder) + ')'; Ctrl2 := TWinControl(ANode2.Data);
TabOrd := Ctrl1.TabOrder; // Swap TabOrder values.
Ctrl1.TabOrder := Ctrl2.TabOrder;
Ctrl2.TabOrder := TabOrd;
ANode1.Text := Ctrl1.Name + ' (' + IntToStr(Ctrl1.TabOrder) + ')';
ANode2.Text := Ctrl2.Name + ' (' + IntToStr(Ctrl2.TabOrder) + ')';
ItemTreeview.Selected := NewSelected;
GlobalDesignHook.Modified(Self);
GlobalDesignHook.RefreshPropertyValues;
CheckButtonsEnabled;
finally
ItemTreeview.EndUpdate;
FUpdating := false;
end;
end;
end; end;
procedure TTabOrderDialog.CheckButtonsEnabled; procedure TTabOrderDialog.CheckButtonsEnabled;
@ -233,21 +241,18 @@ end;
procedure TTabOrderDialog.OnPersistentAdded(APersistent: TPersistent; Select: boolean); procedure TTabOrderDialog.OnPersistentAdded(APersistent: TPersistent; Select: boolean);
begin begin
RefreshTree; OnSomethingChanged;
CheckButtonsEnabled;
end; end;
procedure TTabOrderDialog.OnPersistentDeleting(APersistent: TPersistent); procedure TTabOrderDialog.OnPersistentDeleting(APersistent: TPersistent);
begin begin
RefreshTree; OnSomethingChanged;
CheckButtonsEnabled;
end; end;
procedure TTabOrderDialog.OnDeletePersistent(var APersistent: TPersistent); procedure TTabOrderDialog.OnDeletePersistent(var APersistent: TPersistent);
begin begin
ShowMessage('TTabOrderDialog.OnDeletePersistent is never called for some reason!'); ShowMessage('TTabOrderDialog.OnDeletePersistent is never called for some reason!');
RefreshTree; OnSomethingChanged;
CheckButtonsEnabled;
end; end;
procedure TTabOrderDialog.OnSetSelection(const ASelection: TPersistentSelectionList); procedure TTabOrderDialog.OnSetSelection(const ASelection: TPersistentSelectionList);
@ -273,11 +278,6 @@ begin
ItemTreeview.EndUpdate; ItemTreeview.EndUpdate;
end; end;
procedure TTabOrderDialog.OnRefreshPropertyValues;
begin
DebugLn('OnRefreshPropertyValues: ... never happens');
end;
{ TTabOrderPropEditor } { TTabOrderPropEditor }
{ {
function TTabOrderPropEditor.OrdValueToVisualValue(OrdValue: longint): string; function TTabOrderPropEditor.OrdValueToVisualValue(OrdValue: longint): string;
@ -299,3 +299,4 @@ initialization
RegisterPropertyEditor(TypeInfo(Integer), TControl, 'TabOrder', TTabOrderPropEditor); RegisterPropertyEditor(TypeInfo(Integer), TControl, 'TabOrder', TTabOrderPropEditor);
end. end.