tvplanit: Fix crash of IDE when a folder is added and deleted to an empty JvNavBar. Issue #33676. Patch by Hichem.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@6374 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2018-05-03 13:19:15 +00:00
parent 8b3da42703
commit 166dae1e7f

View File

@@ -117,7 +117,7 @@ type
procedure OnTimer(Sender: TObject); procedure OnTimer(Sender: TObject);
procedure SelectionChanged(AOrderChanged: Boolean = false); procedure SelectionChanged(AOrderChanged: Boolean = false);
procedure SelectList(SelList: TPersistentSelectionList); procedure SelectList(SelList: TPersistentSelectionList);
procedure UpdateBtnState; procedure UpdateBtnStates;
private private
FDesigner: TComponentEditorDesigner; FDesigner: TComponentEditorDesigner;
@@ -233,6 +233,7 @@ begin
AddDesignHookHandlers; AddDesignHookHandlers;
SelectionChanged; SelectionChanged;
UpdateBtnStates;
end; end;
destructor TfrmNavBarEd.Destroy; destructor TfrmNavBarEd.Destroy;
@@ -301,10 +302,11 @@ begin
lbFolders.Items[Bar.ActiveFolder] := S; lbFolders.Items[Bar.ActiveFolder] := S;
if (lbItems.ItemIndex > -1) then begin if (lbItems.ItemIndex > -1) then begin
S := lbItems.Items.Strings[lbItems.ItemIndex]; S := lbItems.Items[lbItems.ItemIndex];
PopulateItemList; PopulateItemList;
if S <> '' then if S <> '' then
lbItems.ItemIndex := lbItems.Items.IndexOf(S); lbItems.ItemIndex := lbItems.Items.IndexOf(S);
UpdateBtnStates;
end; end;
end; end;
@@ -411,6 +413,7 @@ begin
lbItems.ItemIndex := i; lbItems.ItemIndex := i;
end; end;
end; end;
UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.OnPersistentDeleting(APersistent: TPersistent); procedure TfrmNavBarEd.OnPersistentDeleting(APersistent: TPersistent);
@@ -427,6 +430,7 @@ begin
i := FindBtnIndex(APersistent); i := FindBtnIndex(APersistent);
if i <> -1 then lbItems.Items.Delete(i); if i <> -1 then lbItems.Items.Delete(i);
end; end;
UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList); procedure TfrmNavBarEd.OnSetSelection(const ASelection: TPersistentSelectionList);
@@ -514,6 +518,7 @@ begin
FSelImgIndex := -1; FSelImgIndex := -1;
AddDesignHookHandlers; AddDesignHookHandlers;
UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.lbFoldersClick(Sender: TObject); procedure TfrmNavBarEd.lbFoldersClick(Sender: TObject);
@@ -538,7 +543,7 @@ begin
if SelList.Count > 0 then if SelList.Count > 0 then
SelectList(SelList); SelectList(SelList);
UpdateBtnState; UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.lbItemsMeasureItem(Control: TWinControl; procedure TfrmNavBarEd.lbItemsMeasureItem(Control: TWinControl;
@@ -614,7 +619,7 @@ begin
SelectList(SelList); SelectList(SelList);
end; end;
UpdateBtnState; UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.btnItemUpClick(Sender: TObject); procedure TfrmNavBarEd.btnItemUpClick(Sender: TObject);
@@ -629,7 +634,7 @@ begin
Item.Index := Item.Index - 1; Item.Index := Item.Index - 1;
PopulateItemList; PopulateItemList;
UpdateBtnState; UpdateBtnStates;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
@@ -650,7 +655,7 @@ begin
Item.Index := Item.Index + 1; Item.Index := Item.Index + 1;
PopulateItemList; PopulateItemList;
UpdateBtnState; UpdateBtnStates;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
@@ -674,7 +679,7 @@ begin
PopulateFolderList; PopulateFolderList;
lbFolders.ItemIndex := SaveItemIndex - 1; lbFolders.ItemIndex := SaveItemIndex - 1;
UpdateBtnState; UpdateBtnStates;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
@@ -696,7 +701,7 @@ begin
PopulateFolderList; PopulateFolderList;
lbFolders.ItemIndex := Folder.Index; lbFolders.ItemIndex := Folder.Index;
UpdateBtnState; UpdateBtnStates;
if Assigned(Designer) then begin if Assigned(Designer) then begin
GlobalDesignHook.SelectOnlyThis(nil); GlobalDesignHook.SelectOnlyThis(nil);
@@ -715,7 +720,7 @@ begin
PopulateItemList; PopulateItemList;
if Assigned(Designer) then if Assigned(Designer) then
Designer.Modified; Designer.Modified;
UpdateBtnState; UpdateBtnStates;
end; end;
end; end;
@@ -724,11 +729,13 @@ begin
if (lbFolders.ItemIndex <> -1) then begin if (lbFolders.ItemIndex <> -1) then begin
TVpNavFolder(lbFolders.Items.Objects[lbFolders.ItemIndex]).Free; TVpNavFolder(lbFolders.Items.Objects[lbFolders.ItemIndex]).Free;
lbFolders.ItemIndex := -1; lbFolders.ItemIndex := -1;
FBar.Activefolder := -1;
FSelImgIndex := -1;
PopulateFolderList; PopulateFolderList;
PopulateItemList; PopulateItemList;
if Assigned(Designer) then if Assigned(Designer) then
Designer.Modified; Designer.Modified;
UpdateBtnState; UpdateBtnStates;
end; end;
end; end;
@@ -741,7 +748,7 @@ begin
if Assigned(Designer) then if Assigned(Designer) then
Designer.Modified; Designer.Modified;
lbFoldersClick(Self); lbFoldersClick(Self);
UpdateBtnState; UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.btnItemAddClick(Sender: TObject); procedure TfrmNavBarEd.btnItemAddClick(Sender: TObject);
@@ -750,12 +757,13 @@ begin
TVpNavFolder( TVpNavFolder(
lbFolders.Items.Objects[lbFolders.ItemIndex]).ItemCollection.Add; lbFolders.Items.Objects[lbFolders.ItemIndex]).ItemCollection.Add;
lbItems.ItemIndex := -1; lbItems.ItemIndex := -1;
FSelImgIndex := -1;
PopulateItemList; PopulateItemList;
SelectionChanged(true); SelectionChanged(true);
if assigned(Designer) then if assigned(Designer) then
Designer.Modified; Designer.Modified;
end; end;
UpdateBtnState; UpdateBtnStates;
end; end;
procedure TfrmNavBarEd.pnlImageViewPaint(Sender: TObject); procedure TfrmNavBarEd.pnlImageViewPaint(Sender: TObject);
@@ -861,7 +869,7 @@ begin
SelList.Free; SelList.Free;
end; end;
procedure TfrmNavBarEd.UpdateBtnState; procedure TfrmNavBarEd.UpdateBtnStates;
var var
canChangeFolders: Boolean; canChangeFolders: Boolean;
canChangeItems: Boolean; canChangeItems: Boolean;