You've already forked lazarus-ccr
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:
@ -108,13 +108,11 @@ type
|
|||||||
|
|
||||||
private
|
private
|
||||||
FBar: TVpNavBar;
|
FBar: TVpNavBar;
|
||||||
RefreshTimer: TTimer;
|
|
||||||
FSelImgIndex: Integer;
|
FSelImgIndex: Integer;
|
||||||
function FindBtnIndex(APersistent: TPersistent): Integer;
|
function FindBtnIndex(APersistent: TPersistent): Integer;
|
||||||
function FindFolderIndex(APersistent: TPersistent): Integer;
|
function FindFolderIndex(APersistent: TPersistent): Integer;
|
||||||
function GetFolderDisplayName(AFolder: TVpNavFolder): String;
|
function GetFolderDisplayName(AFolder: TVpNavFolder): String;
|
||||||
function GetItemDisplayName(AItem: TVpNavBtnItem): String;
|
function GetItemDisplayName(AItem: TVpNavBtnItem): String;
|
||||||
procedure OnTimer(Sender: TObject);
|
|
||||||
procedure SelectionChanged(AOrderChanged: Boolean = false);
|
procedure SelectionChanged(AOrderChanged: Boolean = false);
|
||||||
procedure SelectList(SelList: TPersistentSelectionList);
|
procedure SelectList(SelList: TPersistentSelectionList);
|
||||||
procedure UpdateBtnStates;
|
procedure UpdateBtnStates;
|
||||||
@ -126,6 +124,7 @@ type
|
|||||||
procedure OnObjectPropertyChanged(Sender: TObject; ANewObject: TPersistent);
|
procedure OnObjectPropertyChanged(Sender: TObject; ANewObject: TPersistent);
|
||||||
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
|
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
|
||||||
procedure OnPersistentDeleting(APersistent: TPersistent);
|
procedure OnPersistentDeleting(APersistent: TPersistent);
|
||||||
|
procedure OnRefreshPropertyValues;
|
||||||
procedure OnSetSelection(const ASelection: TPersistentSelectionList);
|
procedure OnSetSelection(const ASelection: TPersistentSelectionList);
|
||||||
|
|
||||||
public
|
public
|
||||||
@ -140,8 +139,6 @@ type
|
|||||||
property Designer: TComponentEditorDesigner read FDesigner;
|
property Designer: TComponentEditorDesigner read FDesigner;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
var
|
|
||||||
frmNavEd: TfrmNavBarEd;
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -237,10 +234,11 @@ begin
|
|||||||
GlobalDesignHook.RemoveAllHandlersForObject(Self);
|
GlobalDesignHook.RemoveAllHandlersForObject(Self);
|
||||||
if FBar <> nil then
|
if FBar <> nil then
|
||||||
begin
|
begin
|
||||||
|
GlobalDesignHook.AddHandlerGetSelection(OnGetSelection);
|
||||||
GlobalDesignHook.AddHandlerObjectPropertyChanged(OnObjectPropertyChanged);
|
GlobalDesignHook.AddHandlerObjectPropertyChanged(OnObjectPropertyChanged);
|
||||||
GlobalDesignHook.AddHandlerPersistentAdded(OnPersistentAdded);
|
GlobalDesignHook.AddHandlerPersistentAdded(OnPersistentAdded);
|
||||||
GlobalDesignHook.AddHandlerPersistentDeleting(OnPersistentDeleting);
|
GlobalDesignHook.AddHandlerPersistentDeleting(OnPersistentDeleting);
|
||||||
GlobalDesignHook.AddHandlerGetSelection(OnGetSelection);
|
GlobalDesignHook.AddHandlerRefreshPropertyValues(OnRefreshPropertyValues);
|
||||||
GlobalDesignHook.AddHandlerSetSelection(OnSetSelection);
|
GlobalDesignHook.AddHandlerSetSelection(OnSetSelection);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -257,10 +255,6 @@ procedure TfrmNavBarEd.FormCreate(Sender: TObject);
|
|||||||
begin
|
begin
|
||||||
Top := (Screen.Height - Height) div 3;
|
Top := (Screen.Height - Height) div 3;
|
||||||
Left := (Screen.Width - Width) div 2;
|
Left := (Screen.Width - Width) div 2;
|
||||||
RefreshTimer := TTimer.Create(Self);
|
|
||||||
RefreshTimer.Interval := 1000;
|
|
||||||
RefreshTimer.OnTimer := OnTimer;
|
|
||||||
RefreshTimer.Enabled := true;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmNavBarEd.FormDestroy(Sender: TObject);
|
procedure TfrmNavBarEd.FormDestroy(Sender: TObject);
|
||||||
@ -272,32 +266,6 @@ begin
|
|||||||
GlobalDesignHook.RemoveAllHandlersForObject(Self);
|
GlobalDesignHook.RemoveAllHandlersForObject(Self);
|
||||||
end;
|
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);
|
procedure TfrmNavBarEd.FormShow(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if (Bar <> nil) and (Bar.Images <> nil) then begin
|
if (Bar <> nil) and (Bar.Images <> nil) then begin
|
||||||
@ -337,6 +305,8 @@ procedure TfrmNavBarEd.OnGetSelection(const ASelection: TPersistentSelectionList
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
DebugLn('OnGetSelection: ENTERING...');
|
||||||
|
|
||||||
if not Assigned(ASelection) then
|
if not Assigned(ASelection) then
|
||||||
exit;
|
exit;
|
||||||
if ASelection.Count > 0 then
|
if ASelection.Count > 0 then
|
||||||
@ -352,6 +322,9 @@ begin
|
|||||||
if lbItems.Selected[i] then
|
if lbItems.Selected[i] then
|
||||||
ASelection.Add(TPersistent(lbItems.Items.Objects[i]));
|
ASelection.Add(TPersistent(lbItems.Items.Objects[i]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if ASelection.Count > 0 then
|
||||||
|
DebugLn('OnGetSelection EXITING: ASelection[0] = ' + ASelection[0].ClassName + ', ASelection.Count = ' + IntToStr(ASelection.Count));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmNavBarEd.OnObjectPropertyChanged(Sender: TObject; ANewObject: TPersistent);
|
procedure TfrmNavBarEd.OnObjectPropertyChanged(Sender: TObject; ANewObject: TPersistent);
|
||||||
@ -360,17 +333,25 @@ var
|
|||||||
item: TVpNavBtnItem;
|
item: TVpNavBtnItem;
|
||||||
folder: TVpNavFolder;
|
folder: TVpNavFolder;
|
||||||
begin
|
begin
|
||||||
|
DebugLn('OnObjectPropertyChanged: Sender = ' + Sender.ClassName + ', NewObject = ' + ANewObject.ClassName);
|
||||||
|
|
||||||
if ANewObject is TVpNavBtnItem then begin
|
if ANewObject is TVpNavBtnItem then begin
|
||||||
item := TVpNavBtnItem(ANewObject);
|
item := TVpNavBtnItem(ANewObject);
|
||||||
i := FindBtnIndex(item);
|
i := FindBtnIndex(item);
|
||||||
if i > -1 then
|
if i > -1 then
|
||||||
lbItems.Items[i] := GetItemDisplayName(item);
|
with lbItems.Items do begin
|
||||||
|
Strings[i] := GetItemDisplayName(item);
|
||||||
|
Objects[i] := item;
|
||||||
|
end;
|
||||||
end else
|
end else
|
||||||
if ANewObject is TVpNavFolder then begin
|
if ANewObject is TVpNavFolder then begin
|
||||||
folder := TVpNavFolder(ANewObject);
|
folder := TVpNavFolder(ANewObject);
|
||||||
i := FindFolderIndex(folder);
|
i := FindFolderIndex(folder);
|
||||||
if i > -1 then
|
if i > -1 then
|
||||||
lbFolders.Items[i] := GetFolderDisplayName(folder);
|
with lbFolders.Items do begin
|
||||||
|
Strings[i] := GetFolderDisplayName(folder);
|
||||||
|
Objects[i] := folder;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -379,14 +360,15 @@ var
|
|||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
if APersistent = nil then
|
if APersistent = nil then
|
||||||
DebugLn('OnPersistentAdded: Persistent = nil');
|
DebugLn('OnPersistentAdded: Persistent = nil')
|
||||||
|
else
|
||||||
|
DebugLn('OnPersistentAdded: Persistent = ' + APersistent.ClassName);
|
||||||
|
|
||||||
if not Assigned(APersistent) then
|
if not Assigned(APersistent) then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
if (APersistent is TVpNavFolder) then
|
if (APersistent is TVpNavFolder) then
|
||||||
begin
|
begin
|
||||||
DebugLn('OnPersistentAdded: Persistent is folder');
|
|
||||||
PopulateFolderList;
|
PopulateFolderList;
|
||||||
if Select then begin
|
if Select then begin
|
||||||
i := FindFolderIndex(APersistent);
|
i := FindFolderIndex(APersistent);
|
||||||
@ -395,7 +377,6 @@ begin
|
|||||||
end else
|
end else
|
||||||
if (APersistent is TVpNavBtnItem) then
|
if (APersistent is TVpNavBtnItem) then
|
||||||
begin
|
begin
|
||||||
DebugLn('OnPersistentAdded: Persistent is item');
|
|
||||||
PopulateItemList;
|
PopulateItemList;
|
||||||
if Select then begin
|
if Select then begin
|
||||||
i := FindBtnIndex(APersistent);
|
i := FindBtnIndex(APersistent);
|
||||||
@ -422,10 +403,35 @@ begin
|
|||||||
UpdateBtnStates;
|
UpdateBtnStates;
|
||||||
end;
|
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);
|
procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList);
|
||||||
var
|
var
|
||||||
i, j: Integer;
|
i, j: Integer;
|
||||||
begin
|
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
|
if Assigned(ASelection) and (ASelection.Count > 0) then
|
||||||
begin
|
begin
|
||||||
if TPersistent(ASelection[0]) is TVpNavFolder then begin
|
if TPersistent(ASelection[0]) is TVpNavFolder then begin
|
||||||
|
Reference in New Issue
Block a user