tvplanit: Remove RefreshTimer from VpNavBar component editor form and replace its function by property hook handler.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6378 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-05-04 09:17:09 +00:00
parent 7416450bf4
commit fb3f45cf2c

View File

@ -108,13 +108,11 @@ type
private
FBar: TVpNavBar;
RefreshTimer: TTimer;
FSelImgIndex: Integer;
function FindBtnIndex(APersistent: TPersistent): Integer;
function FindFolderIndex(APersistent: TPersistent): Integer;
function GetFolderDisplayName(AFolder: TVpNavFolder): String;
function GetItemDisplayName(AItem: TVpNavBtnItem): String;
procedure OnTimer(Sender: TObject);
procedure SelectionChanged(AOrderChanged: Boolean = false);
procedure SelectList(SelList: TPersistentSelectionList);
procedure UpdateBtnStates;
@ -126,6 +124,7 @@ type
procedure OnObjectPropertyChanged(Sender: TObject; ANewObject: TPersistent);
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
procedure OnPersistentDeleting(APersistent: TPersistent);
procedure OnRefreshPropertyValues;
procedure OnSetSelection(const ASelection: TPersistentSelectionList);
public
@ -140,8 +139,6 @@ type
property Designer: TComponentEditorDesigner read FDesigner;
end;
var
frmNavEd: TfrmNavBarEd;
implementation
@ -237,10 +234,11 @@ begin
GlobalDesignHook.RemoveAllHandlersForObject(Self);
if FBar <> nil then
begin
GlobalDesignHook.AddHandlerGetSelection(OnGetSelection);
GlobalDesignHook.AddHandlerObjectPropertyChanged(OnObjectPropertyChanged);
GlobalDesignHook.AddHandlerPersistentAdded(OnPersistentAdded);
GlobalDesignHook.AddHandlerPersistentDeleting(OnPersistentDeleting);
GlobalDesignHook.AddHandlerGetSelection(OnGetSelection);
GlobalDesignHook.AddHandlerRefreshPropertyValues(OnRefreshPropertyValues);
GlobalDesignHook.AddHandlerSetSelection(OnSetSelection);
end;
end;
@ -257,10 +255,6 @@ procedure TfrmNavBarEd.FormCreate(Sender: TObject);
begin
Top := (Screen.Height - Height) div 3;
Left := (Screen.Width - Width) div 2;
RefreshTimer := TTimer.Create(Self);
RefreshTimer.Interval := 1000;
RefreshTimer.OnTimer := OnTimer;
RefreshTimer.Enabled := true;
end;
procedure TfrmNavBarEd.FormDestroy(Sender: TObject);
@ -272,32 +266,6 @@ begin
GlobalDesignHook.RemoveAllHandlersForObject(Self);
end;
{ Changed}
{ Could not find a way to get notification from the IDE that a change had }
{ been made to the component outside of the component editor, so I used a }
{ timer }
procedure TfrmNavBarEd.OnTimer(Sender: TObject);
var
S : string;
begin
if (Bar = nil) or (Bar.ActiveFolder = -1) then
exit;
{ update folder }
S := Bar.Folders[Bar.ActiveFolder].Caption;
if S = '' then
S := Bar.Folders[Bar.ActiveFolder].Name;
lbFolders.Items[Bar.ActiveFolder] := S;
if (lbItems.ItemIndex > -1) then begin
S := lbItems.Items[lbItems.ItemIndex];
PopulateItemList;
if S <> '' then
lbItems.ItemIndex := lbItems.Items.IndexOf(S);
UpdateBtnStates;
end;
end;
procedure TfrmNavBarEd.FormShow(Sender: TObject);
begin
if (Bar <> nil) and (Bar.Images <> nil) then begin
@ -337,6 +305,8 @@ procedure TfrmNavBarEd.OnGetSelection(const ASelection: TPersistentSelectionList
var
i: Integer;
begin
DebugLn('OnGetSelection: ENTERING...');
if not Assigned(ASelection) then
exit;
if ASelection.Count > 0 then
@ -352,6 +322,9 @@ begin
if lbItems.Selected[i] then
ASelection.Add(TPersistent(lbItems.Items.Objects[i]));
end;
if ASelection.Count > 0 then
DebugLn('OnGetSelection EXITING: ASelection[0] = ' + ASelection[0].ClassName + ', ASelection.Count = ' + IntToStr(ASelection.Count));
end;
procedure TfrmNavBarEd.OnObjectPropertyChanged(Sender: TObject; ANewObject: TPersistent);
@ -360,17 +333,25 @@ var
item: TVpNavBtnItem;
folder: TVpNavFolder;
begin
DebugLn('OnObjectPropertyChanged: Sender = ' + Sender.ClassName + ', NewObject = ' + ANewObject.ClassName);
if ANewObject is TVpNavBtnItem then begin
item := TVpNavBtnItem(ANewObject);
i := FindBtnIndex(item);
if i > -1 then
lbItems.Items[i] := GetItemDisplayName(item);
with lbItems.Items do begin
Strings[i] := GetItemDisplayName(item);
Objects[i] := item;
end;
end else
if ANewObject is TVpNavFolder then begin
folder := TVpNavFolder(ANewObject);
i := FindFolderIndex(folder);
if i > -1 then
lbFolders.Items[i] := GetFolderDisplayName(folder);
with lbFolders.Items do begin
Strings[i] := GetFolderDisplayName(folder);
Objects[i] := folder;
end;
end;
end;
@ -379,14 +360,15 @@ var
i: Integer;
begin
if APersistent = nil then
DebugLn('OnPersistentAdded: Persistent = nil');
DebugLn('OnPersistentAdded: Persistent = nil')
else
DebugLn('OnPersistentAdded: Persistent = ' + APersistent.ClassName);
if not Assigned(APersistent) then
exit;
if (APersistent is TVpNavFolder) then
begin
DebugLn('OnPersistentAdded: Persistent is folder');
PopulateFolderList;
if Select then begin
i := FindFolderIndex(APersistent);
@ -395,7 +377,6 @@ begin
end else
if (APersistent is TVpNavBtnItem) then
begin
DebugLn('OnPersistentAdded: Persistent is item');
PopulateItemList;
if Select then begin
i := FindBtnIndex(APersistent);
@ -422,10 +403,35 @@ begin
UpdateBtnStates;
end;
procedure TfrmNavBarEd.OnRefreshPropertyValues;
var
selections: TPersistentSelectionList;
i: Integer;
begin
selections := TPersistentSelectionList.Create;
try
Assert(Assigned(GlobalDesignHook));
GlobalDesignHook.GetSelection(selections);
for i:=0 to selections.Count-1 do begin
if selections[i] is TVpNavFolder then
lbFolders.Items[i] := GetFolderDisplayName(TVpNavFolder(selections[i]))
else if selections[i] is TVpNavBtnItem then
lbItems.Items[i] := GetItemDisplayName(TVpNavBtnItem(selections[i]));
end;
finally
selections.Free;
end;
end;
procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList);
var
i, j: Integer;
begin
if ASelection = nil then
DebugLn('OnSetSelection: ASelection = nil')
else
DebugLn('OnSetSelection: ASelection[0] = ' + ASelection[0].ClassName + ', ASelection.Count = ' + IntToStr(ASelection.Count));
if Assigned(ASelection) and (ASelection.Count > 0) then
begin
if TPersistent(ASelection[0]) is TVpNavFolder then begin