tvplanit: Several further improvements of NavBar component editor (avoid crashes, hopefully; enable/disable buttons).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6371 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-05-02 21:50:54 +00:00
parent 3627e39793
commit 159c1958df
3 changed files with 185 additions and 316 deletions

View File

@ -11,6 +11,7 @@ object frmNavBarEd: TfrmNavBarEd
FormStyle = fsStayOnTop FormStyle = fsStayOnTop
OnClose = FormClose OnClose = FormClose
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '1.9.0.0' LCLVersion = '1.9.0.0'

View File

@ -34,30 +34,17 @@ unit VpNabEd;
interface interface
uses uses
{$IFDEF LCL}
lazlogger, lazlogger,
LCLProc, LCLType, LCLIntf, LCLProc, LCLType, LCLIntf,
PropEdits, LazarusPackageIntf, FieldsEditor, ComponentEditors, PropEdits, LazarusPackageIntf, FieldsEditor, ComponentEditors,
{$ELSE}
Windows, Messages,
{$IFDEF VERSION6}
DesignIntf, DesignEditors,
{$ELSE}
DsgnIntf,
{$ENDIF}
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, StdCtrls, ExtCtrls, Buttons,
VpBase, VpNavBar; VpBase, VpNavBar;
type type
{$IFNDEF LCL}
{$IFDEF VERSION6} { TVpNavBarEditor }
TProtectedSelList = class(TDesignerSelections);
{$ENDIF}
{$ENDIF}
TVpNavBarEditor = class(TComponentEditor) TVpNavBarEditor = class(TComponentEditor)
procedure ExecuteVerb(Index : Integer); override; procedure ExecuteVerb(Index : Integer); override;
@ -105,13 +92,14 @@ type
procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
// procedure FormResize(Sender: TObject); // procedure FormResize(Sender: TObject);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure lbFoldersClick(Sender: TObject); procedure lbFoldersClick(Sender: TObject);
procedure lbItemsMeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
procedure lbItemsClick(Sender: TObject); procedure lbItemsClick(Sender: TObject);
procedure lbItemsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure lbItemsDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
procedure lbItemsMeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
procedure pnlImageViewClick(Sender: TObject); procedure pnlImageViewClick(Sender: TObject);
procedure pnlImageViewPaint(Sender: TObject); procedure pnlImageViewPaint(Sender: TObject);
@ -120,37 +108,30 @@ type
private private
FBar: TVpNavBar; FBar: TVpNavBar;
FDesigner: TIDesigner; FDesigner: TComponentEditorDesigner;
RefreshTimer: TTimer; RefreshTimer: TTimer;
FSelImgIndex: Integer; FSelImgIndex: Integer;
{$IFDEF LCL}
function FindBtnIndex(APersistent: TPersistent): Integer; function FindBtnIndex(APersistent: TPersistent): Integer;
function FindFolderIndex(APersistent: TPersistent): Integer; function FindFolderIndex(APersistent: TPersistent): Integer;
procedure OnGetSelection(const ASelection: TPersistentSelectionList); procedure OnGetSelection(const ASelection: TPersistentSelectionList);
procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean); procedure OnPersistentAdded(APersistent: TPersistent; Select: boolean);
procedure OnPersistentDeleting(APersistent: TPersistent); procedure OnPersistentDeleting(APersistent: TPersistent);
procedure OnSetSelection(const ASelection: TPersistentSelectionList); procedure OnSetSelection(const ASelection: TPersistentSelectionList);
procedure SelectList(SelList: TPersistentSelectionList);
{$ELSE}
{$IFDEF VERSION5}
{$IFDEF VERSION6}
procedure SelectList(SelList: TDesignerSelections);
{$ELSE}
procedure SelectList(SelList: TDesignerSelectionList);
{$ENDIF}
{$ELSE}
procedure SelectList(SelList: TComponentList);
{$ENDIF}
{$ENDIF}
procedure OnTimer(Sender: TObject); procedure OnTimer(Sender: TObject);
procedure SelectionChanged(AOrderChanged: Boolean = false);
procedure SelectList(SelList: TPersistentSelectionList);
procedure UpdateBtnState;
public public
{ Public declarations } { Public declarations }
constructor Create(AOwner: TComponent; ABar: TVpNavBar;
ADesigner: TComponentEditorDesigner); reintroduce;
destructor Destroy; override;
procedure PopulateFolderList; procedure PopulateFolderList;
procedure PopulateItemList; procedure PopulateItemList;
procedure SetData(ADesigner: TIDesigner; ABar: TVpNavBar); procedure SetData(ADesigner: TComponentEditorDesigner; ABar: TVpNavBar);
property Bar: TVpNavBar read FBar; property Bar: TVpNavBar read FBar;
property Designer: TIDesigner read FDesigner; property Designer: TComponentEditorDesigner read FDesigner;
end; end;
var var
@ -158,11 +139,7 @@ var
implementation implementation
{$IFDEF LCL} {$R *.lfm}
{$R *.lfm}
{$ELSE}
{$R *.DFM}
{$ENDIF}
uses uses
PropEditUtils, PropEditUtils,
@ -172,22 +149,23 @@ const
ITEMS_MARGIN = 2; ITEMS_MARGIN = 2;
IMG_MARGIN = 4; IMG_MARGIN = 4;
{$IFDEF LCL} procedure EditNavBar(ADesigner: TComponentEditorDesigner; ABar: TVpNavBar);
procedure EditNavBar(Designer: TIDesigner; Bar: TVpNavBar); var
{$ELSE} editor: TObject;
{$IFDEF VERSION6}
procedure EditNavBar(Designer: TIDesigner; Bar: TVpNavBar);
{$ELSE}
procedure EditNavBar(Designer: TIFormDesigner; Bar: TVpNavBar);
{$ENDIF}
{$ENDIF}
begin begin
if frmNavEd = nil then editor := FindEditorForm(ABar);
frmNavEd := TfrmNavBarEd.Create(Application); if editor = nil then begin
frmNavEd.SetData(Designer, Bar); editor := TfrmNavBarEd.Create(Application, ABar, ADesigner);
frmNavEd.Show; //RegisterEditorForm(editor, ABar); -- wp
end;
if editor <> nil then
with TfrmNavBarEd(editor) do begin
//ComponentEditor := Self;
ShowOnTop;
end;
end; end;
{*** TVpNavBarEditor ***} {*** TVpNavBarEditor ***}
procedure TVpNavBarEditor.ExecuteVerb(Index : Integer); procedure TVpNavBarEditor.ExecuteVerb(Index : Integer);
@ -210,6 +188,53 @@ end;
{*** TfrmNavBarEd ***} {*** TfrmNavBarEd ***}
constructor TfrmNavBarEd.Create(AOwner: TComponent; ABar: TVpNavBar;
ADesigner: TComponentEditorDesigner);
var
w: Integer;
begin
inherited Create(AOwner);
FBar := ABar;
FDesigner := ADesigner;
PopulateFolderList;
if FBar.Images <> nil then begin
w := (FBar.Images.Width + 2*IMG_MARGIN) * FBar.Images.Count;
pnlImageView.ClientWidth := w;
pnlImageView.Constraints.MinHeight := FBar.Images.Height + 2 * IMG_MARGIN + GetScrollbarHeight;
if w > sbImages.ClientWidth then begin
sbImages.HorzScrollbar.Range := w - sbImages.ClientWidth;
sbImages.HorzScrollbar.Visible := true;
end else
sbImages.HorzScrollbar.Visible := false;
end;
FSelImgIndex := -1;
if Assigned(GlobalDesignHook) then
begin
// GlobalDesignHook.AddHandlerComponentRenamed(OnComponentRenamed);
GlobalDesignHook.AddHandlerPersistentDeleting(OnPersistentDeleting);
GlobalDesignHook.AddHandlerGetSelection(OnGetSelection);
GlobalDesignHook.AddHandlerSetSelection(OnSetSelection);
GlobalDesignHook.AddHandlerPersistentAdded(OnPersistentAdded);
end;
SelectionChanged;
end;
destructor TfrmNavBarEd.Destroy;
begin
//UnregisterEditorForm(Self); -- wp
inherited Destroy;
end;
procedure TfrmNavBarEd.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TfrmNavBarEd.FormCreate(Sender: TObject); procedure TfrmNavBarEd.FormCreate(Sender: TObject);
begin begin
Top := (Screen.Height - Height) div 3; Top := (Screen.Height - Height) div 3;
@ -220,18 +245,14 @@ begin
RefreshTimer.Enabled := true; RefreshTimer.Enabled := true;
end; end;
{=====} procedure TfrmNavBarEd.FormDestroy(Sender: TObject);
procedure TfrmNavBarEd.FormClose(Sender: TObject;
var Action: TCloseAction);
begin begin
(* if GlobalDesignHook = nil then
Unused(Action); exit;
RefreshTimer.Free; if Assigned(FBar) and ((lbFolders.SelCount > 0) or (lbItems.SelCount > 0)) then
Release; GlobalDesignHook.SelectOnlyThis(FBar);
*) GlobalDesignHook.RemoveAllHandlersForObject(Self);
end; end;
{=====}
{ Changed} { Changed}
{ Could not find a way to get notification from the IDE that a change had } { Could not find a way to get notification from the IDE that a change had }
@ -241,7 +262,7 @@ procedure TfrmNavBarEd.OnTimer(Sender: TObject);
var var
S : string; S : string;
begin begin
if Bar.ActiveFolder < 0 then if (Bar = nil) or (Bar.ActiveFolder = -1) then
exit; exit;
{ update folder } { update folder }
@ -257,33 +278,15 @@ begin
lbItems.ItemIndex := lbItems.Items.IndexOf(S); lbItems.ItemIndex := lbItems.Items.IndexOf(S);
end; end;
end; end;
{=====}
(*
procedure TfrmNavBarEd.FormResize(Sender: TObject);
begin
pnlFolders.Width := (pnlItems.Width + pnlFolders.Width) div 2;
if Bar.Images <> nil then begin
pnlImages.Height := 25 + (5 * (Bar.Images.Height div 3));
lbImages.Columns := lbImages.ClientWidth div Bar.Images.Width;
{Allow for scrollbar if excessive number of images}
if (lbImages.Width >= Bar.Images.Width) then
pnlImages.Height := pnlImages.Height + 20;
end;
end; *)
procedure TfrmNavBarEd.FormShow(Sender: TObject); procedure TfrmNavBarEd.FormShow(Sender: TObject);
begin begin
if Bar.Images <> nil then begin if (Bar <> nil) and (Bar.Images <> nil) then begin
// sbImages.Constraints.MinHeight := Bar.Images.Height + GetScrollbarHeight + 2*IMG_MARGIN;
pnlImages.Height := Bar.Images.Height + GetScrollbarHeight + 2*IMG_MARGIN + pnlImages.Height := Bar.Images.Height + GetScrollbarHeight + 2*IMG_MARGIN +
Panel8.Height + pnlImages.BorderSpacing.Top + pnlImages.BorderSpacing.Bottom; Panel8.Height + pnlImages.BorderSpacing.Top + pnlImages.BorderSpacing.Bottom;
//lbImages.Columns := lbImages.ClientWidth div Bar.Images.Width;
end; end;
end; end;
{=====}
{$IFDEF LCL}
function TfrmNavBarEd.FindFolderIndex(APersistent: TPersistent): Integer; function TfrmNavBarEd.FindFolderIndex(APersistent: TPersistent): Integer;
begin begin
for Result := 0 to lbFolders.Items.Count-1 do for Result := 0 to lbFolders.Items.Count-1 do
@ -299,9 +302,7 @@ begin
exit; exit;
Result := -1; Result := -1;
end; end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnGetSelection(const ASelection: TPersistentSelectionList); procedure TfrmNavBarEd.OnGetSelection(const ASelection: TPersistentSelectionList);
var var
i: Integer; i: Integer;
@ -322,18 +323,20 @@ begin
ASelection.Add(TPersistent(lbItems.Items.Objects[i])); ASelection.Add(TPersistent(lbItems.Items.Objects[i]));
end; end;
end; end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnPersistentAdded(APersistent: TPersistent; Select: boolean); procedure TfrmNavBarEd.OnPersistentAdded(APersistent: TPersistent; Select: boolean);
var var
i: Integer; i: Integer;
begin begin
if APersistent = nil then
DebugLn('OnPersistentAdded: Persistent = nil');
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);
@ -342,6 +345,7 @@ 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);
@ -349,9 +353,7 @@ begin
end; end;
end; end;
end; end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnPersistentDeleting(APersistent: TPersistent); procedure TfrmNavBarEd.OnPersistentDeleting(APersistent: TPersistent);
var var
i: Integer; i: Integer;
@ -367,9 +369,7 @@ begin
if i <> -1 then lbItems.Items.Delete(i); if i <> -1 then lbItems.Items.Delete(i);
end; end;
end; end;
{$ENDIF}
{$IFDEF LCL}
procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList); procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList);
var var
i, j: Integer; i, j: Integer;
@ -399,7 +399,6 @@ begin
end; end;
end; end;
end; end;
{$ENDIF}
procedure TfrmNavBarEd.PopulateFolderList; procedure TfrmNavBarEd.PopulateFolderList;
var var
@ -414,7 +413,6 @@ begin
lbFolders.Items.AddObject(S, Bar.Folders[I]); lbFolders.Items.AddObject(S, Bar.Folders[I]);
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.PopulateItemList; procedure TfrmNavBarEd.PopulateItemList;
var var
@ -431,9 +429,8 @@ begin
lbItems.Items.AddObject(S,Items[i]); lbItems.Items.AddObject(S,Items[i]);
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.SetData(ADesigner: TIDesigner; ABar: TVpNavBar); procedure TfrmNavBarEd.SetData(ADesigner: TComponentEditorDesigner; ABar: TVpNavBar);
var var
i: Integer; i: Integer;
w: Integer; w: Integer;
@ -458,11 +455,6 @@ begin
sbImages.HorzScrollbar.Visible := true; sbImages.HorzScrollbar.Visible := true;
end else end else
sbImages.HorzScrollbar.Visible := false; sbImages.HorzScrollbar.Visible := false;
(*
lbImages.ItemHeight := Bar.Images.Height + 4;
for i := 0 to pred(FBar.Images.Count) do
lbImages.Items.Add(IntToStr(i));
*)
end; end;
FSelImgIndex := -1; FSelImgIndex := -1;
@ -480,7 +472,6 @@ begin
end; end;
procedure TfrmNavBarEd.lbFoldersClick(Sender: TObject); procedure TfrmNavBarEd.lbFoldersClick(Sender: TObject);
{$IFDEF LCL}
var var
SelList: TPersistentSelectionList; SelList: TPersistentSelectionList;
i: Integer; i: Integer;
@ -492,73 +483,18 @@ begin
SelList := TPersistentSelectionList.Create; SelList := TPersistentSelectionList.Create;
SelList.ForceUpdate := true; SelList.ForceUpdate := true;
for i := 0 to pred(lbFolders.Items.Count) do for i := 0 to pred(lbFolders.Items.Count) do
if lbFolders.Selected[i] then begin if lbFolders.Selected[i] then begin
SelList.Add(TPersistent(lbFolders.Items.Objects[i])); SelList.Add(TPersistent(lbFolders.Items.Objects[i]));
Bar.FolderCollection.DoOnItemSelected(i); Bar.FolderCollection.DoOnItemSelected(i);
end; end;
if not Bar.FolderCollection.ReadOnly then
begin
btnFolderUp.Enabled := SelList.Count = 1;
btnFolderDown.Enabled := btnFolderUp.Enabled;
btnFolderDelete.Enabled := btnFolderUp.Enabled;
end;
if SelList.Count > 0 then
SelectList(SelList);
end;
{$ELSE}
var
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList : TDesignerSelections;
{$ELSE}
SelList : TDesignerSelectionList;
{$ENDIF}
{$ELSE}
SelList : TComponentList;
{$ENDIF}
{%H-}i : Integer;
begin
PopulateItemList;
Bar.ActiveFolder := lbFolders.ItemIndex;
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList := TDesignerSelections.Create;
{$ELSE}
SelList := TDesignerSelectionList.Create;
{$ENDIF}
{$ELSE}
SelList := TComponentList.Create;
{$ENDIF}
for i := 0 to pred(lbFolders.Items.Count) do
if lbFolders.Selected[i] then begin
{$IFDEF VERSION6}
TProtectedSelList(SelList).Add(TComponent(lbFolders.Items.Objects[i]));
{$ELSE}
SelList.Add(TComponent(lbFolders.Items.Objects[i]));
{$ENDIF}
Bar.FolderCollection.DoOnItemSelected(I);
end;
if not Bar.FolderCollection.ReadOnly
then begin
{$IFDEF VERSION6}
btnFolderUp.Enabled := TProtectedSelList(SelList).Count = 1;
{$ELSE}
btnFolderUp.Enabled := SelList.Count = 1;
{$ENDIF}
btnFolderDown.Enabled := btnFolderUp.Enabled;
btnFolderDelete.Enabled := btnFolderUp.Enabled;
end;
{$IFDEF VERSION6}
if TProtectedSelList(SelList).Count > 0 then
{$ELSE}
if SelList.Count > 0 then if SelList.Count > 0 then
{$ENDIF}
SelectList(SelList); SelectList(SelList);
UpdateBtnState;
end; end;
{$ENDIF}
{=====}
procedure TfrmNavBarEd.lbItemsMeasureItem(Control: TWinControl; procedure TfrmNavBarEd.lbItemsMeasureItem(Control: TWinControl;
Index: Integer; var Height: Integer); Index: Integer; var Height: Integer);
@ -567,7 +503,6 @@ begin
if (Bar.Images <> nil) then if (Bar.Images <> nil) then
Height := Bar.Images.Height + 2 * ITEMS_MARGIN; Height := Bar.Images.Height + 2 * ITEMS_MARGIN;
end; end;
{=====}
procedure TfrmNavBarEd.lbItemsDrawItem(Control: TWinControl; procedure TfrmNavBarEd.lbItemsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState); Index: Integer; Rect: TRect; State: TOwnerDrawState);
@ -610,16 +545,14 @@ begin
y := (Rect.Top + Rect.Bottom - lb.Canvas.TextHeight('Tg')) div 2; y := (Rect.Top + Rect.Bottom - lb.Canvas.TextHeight('Tg')) div 2;
lb.Canvas.TextRect(Rect, x, y, lb.Items[Index]); lb.Canvas.TextRect(Rect, x, y, lb.Items[Index]);
end; end;
{=====}
procedure TfrmNavBarEd.lbItemsClick(Sender: TObject); procedure TfrmNavBarEd.lbItemsClick(Sender: TObject);
{$IFDEF LCL}
var var
SelList: TPersistentSelectionList; SelList: TPersistentSelectionList;
i: Integer; i: Integer;
btn: TVpNavBtnItem; btn: TVpNavBtnItem;
begin begin
if (lbItems.ItemIndex <> -1) and (Bar.ActiveFolder <> 1) then if (FBar <> nil) and (FBar.ActiveFolder <> -1) and (lbItems.ItemIndex <> -1) then
begin begin
btn := TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]); btn := TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]);
FSelImgIndex := btn.IconIndex; FSelImgIndex := btn.IconIndex;
@ -632,86 +565,12 @@ begin
SelList.Add(TPersistent(lbItems.Items.Objects[i])); SelList.Add(TPersistent(lbItems.Items.Objects[i]));
Bar.Folders[Bar.ActiveFolder].ItemCollection.DoOnItemSelected(I); Bar.Folders[Bar.ActiveFolder].ItemCollection.DoOnItemSelected(I);
end; end;
if not Bar.Folders[Bar.ActiveFolder].ItemCollection.ReadOnly
then begin
btnItemUp.Enabled := SelList.Count = 1;
btnItemDown.Enabled := btnItemUp.Enabled;
btnItemDelete.Enabled := btnItemUp.Enabled;
end;
if SelList.Count > 0 then if SelList.Count > 0 then
SelectList(SelList); SelectList(SelList);
end; end;
UpdateBtnState;
end; end;
{$ELSE}
var
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList : TDesignerSelections;
{$ELSE}
SelList : TDesignerSelectionList;
{$ENDIF}
{$ELSE}
SelList : TComponentList;
{$ENDIF}
i : Integer;
begin
if (lbItems.ItemIndex <> -1) then begin
lbImages.ItemIndex :=
TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]).IconIndex;
{$IFDEF VERSION5}
{$IFDEF VERSION6}
SelList := TDesignerSelections.Create;
{$ELSE}
SelList := TDesignerSelectionList.Create;
{$ENDIF}
{$ELSE}
SelList := TComponentList.Create;
{$ENDIF}
for i := 0 to pred(lbItems.Items.Count) do
if lbItems.Selected[i] then begin
{$IFDEF VERSION6}
TProtectedSelList(SelList).Add(TComponent(lbItems.Items.Objects[i]));
{$ELSE}
SelList.Add(TComponent(lbItems.Items.Objects[i]));
{$ENDIF}
Bar.Folders[Bar.ActiveFolder].ItemCollection.DoOnItemSelected(I);
end;
if not Bar.Folders[Bar.ActiveFolder].ItemCollection.ReadOnly
then begin
{$IFDEF VERSION6}
btnItemUp.Enabled := TProtectedSelList(SelList).Count = 1;
{$ELSE}
btnItemUp.Enabled := SelList.Count = 1;
{$ENDIF}
btnItemDown.Enabled := btnItemUp.Enabled;
btnItemDelete.Enabled := btnItemUp.Enabled;
end;
{$IFDEF VERSION6}
if TProtectedSelList(SelList).Count > 0 then
SelectList(SelList);
{$ELSE}
if SelList.Count > 0 then
SelectList(SelList);
{$ENDIF}
end;
end;
{$ENDIF}
{=====}
(*
procedure TfrmNavBarEd.lbImagesClick(Sender: TObject);
begin
if (lbImages.ItemIndex <> -1) and (lbItems.ItemIndex <> -1) then begin
TVpNavBtnItem(lbItems.Items.Objects[lbItems.ItemIndex]).IconIndex :=
lbImages.ItemIndex;
lbItems.Invalidate;
if assigned(Designer) then
Designer.Modified;
end;
end; *)
{=====}
procedure TfrmNavBarEd.btnItemUpClick(Sender: TObject); procedure TfrmNavBarEd.btnItemUpClick(Sender: TObject);
var var
@ -724,18 +583,16 @@ begin
if Item.Index > 0 then if Item.Index > 0 then
Item.Index := Item.Index - 1; Item.Index := Item.Index - 1;
PopulateItemList;
UpdateBtnState;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(Item); GlobalDesignHook.SelectOnlyThis(Item);
Designer.Modified; Designer.Modified;
end; end;
PopulateItemList;
lbItems.ItemIndex := SaveItemIndex - 1;
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.btnItemDownClick(Sender: TObject); procedure TfrmNavBarEd.btnItemDownClick(Sender: TObject);
var var
@ -747,18 +604,16 @@ begin
if Item.Index < Pred(lbItems.Items.Count) then if Item.Index < Pred(lbItems.Items.Count) then
Item.Index := Item.Index + 1; Item.Index := Item.Index + 1;
PopulateItemList;
UpdateBtnState;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(Item); GlobalDesignHook.SelectOnlyThis(Item);
Designer.Modified; Designer.Modified;
end; end;
PopulateItemList;
lbItems.ItemIndex := Item.Index;
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.btnFolderUpClick(Sender: TObject); procedure TfrmNavBarEd.btnFolderUpClick(Sender: TObject);
var var
@ -772,18 +627,17 @@ begin
if Folder.Index > 0 then if Folder.Index > 0 then
Folder.Index := Folder.Index - 1; Folder.Index := Folder.Index - 1;
PopulateFolderList;
lbFolders.ItemIndex := SaveItemIndex - 1;
UpdateBtnState;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(folder); GlobalDesignHook.SelectOnlyThis(folder);
Designer.Modified; Designer.Modified;
end; end;
PopulateFolderList;
lbFolders.ItemIndex := SaveItemIndex - 1;
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.btnFolderDownClick(Sender: TObject); procedure TfrmNavBarEd.btnFolderDownClick(Sender: TObject);
var var
@ -795,18 +649,17 @@ begin
if Folder.Index < pred(lbFolders.Items.Count) then if Folder.Index < pred(lbFolders.Items.Count) then
Folder.Index := Folder.Index + 1; Folder.Index := Folder.Index + 1;
PopulateFolderList;
lbFolders.ItemIndex := Folder.Index;
UpdateBtnState;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
GlobalDesignHook.SelectOnlyThis(folder); GlobalDesignHook.SelectOnlyThis(folder);
Designer.Modified; Designer.Modified;
end; end;
PopulateFolderList;
lbFolders.ItemIndex := Folder.Index;
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.btnItemDeleteClick(Sender: TObject); procedure TfrmNavBarEd.btnItemDeleteClick(Sender: TObject);
begin begin
@ -815,11 +668,11 @@ begin
lbItems.ItemIndex := -1; lbItems.ItemIndex := -1;
FSelImgIndex := -1; FSelImgIndex := -1;
PopulateItemList; PopulateItemList;
if assigned(Designer) then if Assigned(Designer) then
Designer.Modified; Designer.Modified;
UpdateBtnState;
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.btnFolderDeleteClick(Sender: TObject); procedure TfrmNavBarEd.btnFolderDeleteClick(Sender: TObject);
begin begin
@ -828,22 +681,23 @@ begin
lbFolders.ItemIndex := -1; lbFolders.ItemIndex := -1;
PopulateFolderList; PopulateFolderList;
PopulateItemList; PopulateItemList;
if assigned(Designer) then if Assigned(Designer) then
Designer.Modified; Designer.Modified;
UpdateBtnState;
end; end;
end; end;
{=====}
procedure TfrmNavBarEd.btnFolderAddClick(Sender: TObject); procedure TfrmNavBarEd.btnFolderAddClick(Sender: TObject);
begin begin
Bar.FolderCollection.Add; Bar.FolderCollection.Add;
PopulateFolderList; PopulateFolderList;
lbFolders.ItemIndex := lbFolders.Items.Count - 1; lbFolders.ItemIndex := lbFolders.Items.Count - 1;
if assigned(Designer) then SelectionChanged(true);
if Assigned(Designer) then
Designer.Modified; Designer.Modified;
lbFoldersClick(Self); lbFoldersClick(Self);
UpdateBtnState;
end; end;
{=====}
procedure TfrmNavBarEd.btnItemAddClick(Sender: TObject); procedure TfrmNavBarEd.btnItemAddClick(Sender: TObject);
begin begin
@ -852,11 +706,12 @@ begin
lbFolders.Items.Objects[lbFolders.ItemIndex]).ItemCollection.Add; lbFolders.Items.Objects[lbFolders.ItemIndex]).ItemCollection.Add;
lbItems.ItemIndex := -1; lbItems.ItemIndex := -1;
PopulateItemList; PopulateItemList;
SelectionChanged(true);
if assigned(Designer) then if assigned(Designer) then
Designer.Modified; Designer.Modified;
end; end;
UpdateBtnState;
end; end;
{=====}
procedure TfrmNavBarEd.pnlImageViewPaint(Sender: TObject); procedure TfrmNavBarEd.pnlImageViewPaint(Sender: TObject);
var var
@ -888,7 +743,7 @@ begin
pnlImageView.Canvas.Brush.Color := clHighlight; pnlImageView.Canvas.Brush.Color := clHighlight;
pnlImageView.Canvas.FillRect(R); pnlImageView.Canvas.FillRect(R);
end; end;
Bar.Images.Draw(pnlImageView.Canvas, x + IMG_MARGIN, y, i, true); FBar.Images.Draw(pnlImageView.Canvas, x + IMG_MARGIN, y, i, true);
inc(i); inc(i);
inc(x, wimg + 2*IMG_MARGIN); inc(x, wimg + 2*IMG_MARGIN);
end; end;
@ -928,7 +783,29 @@ begin
sbImages.HorzScrollbar.Visible := sbImages.ClientWidth < pnlImageView.ClientWidth; sbImages.HorzScrollbar.Visible := sbImages.ClientWidth < pnlImageView.ClientWidth;
end; end;
{$IFDEF LCL} procedure TfrmNavBarEd.SelectionChanged(AOrderChanged: Boolean = false);
var
SelList: TPersistentSelectionList;
begin
{
if (FUpdateSelectionCount>0) or (GlobalDesignHook=nil) then
exit;
}
GlobalDesignHook.RemoveHandlerSetSelection(OnSetSelection);
try
SelList := TPersistentSelectionList.Create;
SelList.ForceUpdate := AOrderChanged;
try
OnGetSelection(SelList);
FDesigner.PropertyEditorHook.SetSelection(SelList) ;
finally
SelList.Free;
end;
finally
GlobalDesignHook.AddHandlerSetSelection(OnSetSelection);
end;
end;
procedure TfrmNavBarEd.Selectlist(SelList: TPersistentSelectionList); procedure TfrmNavBarEd.Selectlist(SelList: TPersistentSelectionList);
begin begin
if GlobalDesignHook <> nil then if GlobalDesignHook <> nil then
@ -938,36 +815,27 @@ begin
end; end;
SelList.Free; SelList.Free;
end; end;
{$ELSE}
{$IFDEF VERSION5} procedure TfrmNavBarEd.UpdateBtnState;
{$IFDEF VERSION6} var
procedure TfrmNavBarEd.SelectList(SelList : TDesignerSelections); canChangeFolders: Boolean;
{$ELSE} canChangeItems: Boolean;
procedure TfrmNavBarEd.SelectList(SelList : TDesignerSelectionList);
{$ENDIF}
{$ELSE}
procedure TfrmNavBarEd.SelectList(SelList : TComponentList);
{$ENDIF}
begin begin
{$IFNDEF Ver80} canChangeFolders := (FBar <> nil);
{$IFDEF VERSION4} canChangeItems := (FBar <> nil) and (FBar.ActiveFolder <> -1) and
if Designer <> nil then not FBar.Folders[FBar.ActiveFolder].ItemCollection.ReadOnly;
{$IFDEF VERSION6}
(Designer as IDesigner).SetSelections(SelList); btnFolderAdd.Enabled := canChangeFolders;
{$ELSE} btnFolderDelete.Enabled := canChangeFolders and (lbFolders.ItemIndex > -1);
(Designer as IFormDesigner).SetSelections(SelList); btnFolderUp.Enabled := canChangeFolders and (lbFolders.ItemIndex > 0);
{$ENDIF} btnFolderDown.Enabled := canChangeFolders and (lbFolders.ItemIndex < lbFolders.Items.Count-1);
{$ELSE}
if Designer <> nil then btnItemAdd.Enabled := canChangeItems;
(Designer as TFormDesigner).SetSelections(SelList); btnItemDelete.Enabled := canChangeItems and (lbItems.ItemIndex > -1);
{$ENDIF} btnItemUp.Enabled := canChangeItems and (lbItems.ItemIndex > 0);
SelList.Free; btnItemDown.Enabled := canChangeItems and (lbItems.ItemIndex < lbItems.Items.Count-1);
{$ELSE}
CompLib.SetSelection(Designer, Designer.Form, SelList);
{$ENDIF}
end; end;
{$ENDIF}
{=====}
end. end.