1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-18 08:06:04 +02:00
Beef/IDE/src/ui/BookmarksPanel.bf

575 lines
16 KiB
Beef
Raw Normal View History

2022-06-08 20:11:39 +02:00
using Beefy.theme.dark;
using Beefy.utils;
using Beefy.widgets;
using System;
using System.Collections;
using Beefy.theme;
using Beefy.events;
2022-06-09 12:25:48 +02:00
using System.Diagnostics;
2022-06-09 18:23:57 +02:00
using Beefy.theme.dark;
using Beefy.gfx;
using Beefy.geom;
2022-06-08 20:11:39 +02:00
namespace IDE.ui
{
2022-06-09 12:25:48 +02:00
public class BookmarksListView : IDEListView
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
protected override ListViewItem CreateListViewItem()
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
return new BookmarksListViewItem();
}
protected override void SetScaleData()
{
base.SetScaleData();
mIconX = GS!(200);
mOpenButtonX = GS!(0);
mLabelX = GS!(0);
//mChildIndent = GS!(16);
mHiliteOffset = GS!(-2);
2022-06-08 20:11:39 +02:00
}
2022-06-09 12:25:48 +02:00
}
public class BookmarksListViewItem : IDEListViewItem
{
public Object RefObject;
public String BookmarkLine ~ delete _;
public float mLabelOffsetFolder = GS!(16);
public float mLabelOffsetBookmark = GS!(0);
2022-06-08 20:11:39 +02:00
2022-06-09 12:25:48 +02:00
public override void RehupScale(float oldScale, float newScale)
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
base.RehupScale(oldScale, newScale);
2022-06-08 20:11:39 +02:00
2022-06-09 12:25:48 +02:00
mLabelOffsetFolder = GS!(16);
mLabelOffsetBookmark = GS!(0);
}
protected override float GetLabelOffset()
{
if (RefObject is BookmarkFolder)
{
return mLabelOffsetFolder;
}
return mLabelOffsetBookmark;
}
public void Goto()
{
if (Bookmark bookmark = RefObject as Bookmark)
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
gApp.mBookmarkManager.GotoBookmark(bookmark);
2022-06-08 20:11:39 +02:00
}
}
2022-06-09 12:25:48 +02:00
}
class BookmarksPanel : Panel
{
2022-06-09 18:23:57 +02:00
public DarkIconButton mBtnCreateBookmarkFolder;
public DarkIconButton mBtnPrevBookmark;
public DarkIconButton mBtnNextBookmark;
public DarkIconButton mBtnPrevBookmarkInFolder;
public DarkIconButton mBtnNextBookmarkInFolder;
2022-06-08 20:11:39 +02:00
2022-06-09 18:23:57 +02:00
public BookmarksListView mBookmarksListView;
2022-06-08 20:11:39 +02:00
public this()
{
2022-06-09 18:23:57 +02:00
mBtnCreateBookmarkFolder = new DarkIconButton();
mBtnCreateBookmarkFolder.Icon = DarkTheme.sDarkTheme.GetImage(.NewBookmarkFolder);
mBtnCreateBookmarkFolder.mOnMouseClick.Add(new (args) => gApp.mBookmarkManager.CreateFolder());
AddWidget(mBtnCreateBookmarkFolder);
float iconButtonWidth = mBtnCreateBookmarkFolder.Width;
mBtnPrevBookmark = new DarkIconButton();
mBtnPrevBookmark.Icon = DarkTheme.sDarkTheme.GetImage(.PrevBookmark);
mBtnPrevBookmark.mOnMouseClick.Add(new (args) => gApp.Cmd_PrevBookmark());
mBtnPrevBookmark.X = GS!(1) + iconButtonWidth;
AddWidget(mBtnPrevBookmark);
mBtnNextBookmark = new DarkIconButton();
mBtnNextBookmark.Icon = DarkTheme.sDarkTheme.GetImage(.NextBookmark);
mBtnNextBookmark.mOnMouseClick.Add(new (args) => gApp.Cmd_NextBookmark());
mBtnNextBookmark.X = (GS!(1) + iconButtonWidth) * 2;
AddWidget(mBtnNextBookmark);
mBtnPrevBookmarkInFolder = new DarkIconButton();
mBtnPrevBookmarkInFolder.Icon = DarkTheme.sDarkTheme.GetImage(.PrevBookmarkInFolder);
mBtnPrevBookmarkInFolder.mOnMouseClick.Add(new (args) => gApp.Cmd_PrevBookmarkInFolder());
mBtnPrevBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 3;
AddWidget(mBtnPrevBookmarkInFolder);
mBtnNextBookmarkInFolder = new DarkIconButton();
mBtnNextBookmarkInFolder.Icon = DarkTheme.sDarkTheme.GetImage(.NextBookmarkInFolder);
mBtnNextBookmarkInFolder.mOnMouseClick.Add(new (args) => gApp.Cmd_NextBookmarkInFolder());
mBtnNextBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 4;
AddWidget(mBtnNextBookmarkInFolder);
2022-06-09 12:25:48 +02:00
2022-06-08 20:11:39 +02:00
2022-06-09 18:23:57 +02:00
mBookmarksListView = new .();
mBookmarksListView.mOnEditDone.Add(new => HandleEditDone);
2022-06-08 20:11:39 +02:00
2022-06-09 18:23:57 +02:00
mBookmarksListView.InitScrollbars(true, true);
mBookmarksListView.mLabelX = GS!(6);
mBookmarksListView.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked);
2022-06-08 20:11:39 +02:00
2022-06-09 18:23:57 +02:00
mBookmarksListView.AddColumn(200, "Bookmark");
mBookmarksListView.AddColumn(400, "File");
mBookmarksListView.AddColumn(120, "Line");
2022-06-09 12:25:48 +02:00
2022-06-09 18:23:57 +02:00
mBookmarksListView.mOnDragEnd.Add(new => BookmarksLV_OnDragEnd);
mBookmarksListView.mOnDragUpdate.Add(new => BookmarksLV_OnDragUpdate);
mBookmarksListView.mOnItemMouseDown.Add(new (item, x, y, btnNum, btnCount) =>
2022-06-08 20:11:39 +02:00
{
if ((btnNum == 0) && (btnCount == 2))
{
let mainItem = (BookmarksListViewItem)item.GetSubItem(0);
mainItem.Goto();
}
ListViewItemMouseDown(item, x, y, btnNum, btnCount);
});
2022-06-09 18:23:57 +02:00
mBookmarksListView.mOnItemMouseClicked.Add(new => ListViewItemMouseClicked);
mBookmarksListView.mOnKeyDown.Add(new => BookmarksLV_OnKeyDown);
2022-06-08 20:11:39 +02:00
2022-06-09 18:23:57 +02:00
AddWidget(mBookmarksListView);
2022-06-11 16:45:16 +02:00
gApp.mBookmarkManager.mBookmarksChangedDelegate.Add(new => BookmarksChanged);
2022-06-08 20:11:39 +02:00
}
private void BookmarksLV_OnKeyDown(KeyDownEvent event)
{
2022-06-09 12:25:48 +02:00
if (event.mKeyCode == KeyCode.Delete)
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
DeleteSelectedItems();
2022-06-08 20:11:39 +02:00
}
ListViewKeyDown_ShowMenu(event);
}
2022-06-09 12:25:48 +02:00
public override void RehupScale(float oldScale, float newScale)
{
2022-06-09 18:23:57 +02:00
mBookmarksListView.mOpenButtonX = GS!(4);
float iconButtonWidth = mBtnCreateBookmarkFolder.Width;
mBtnPrevBookmark.X = GS!(1) + iconButtonWidth;
mBtnNextBookmark.X = (GS!(1) + iconButtonWidth) * 2;
mBtnPrevBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 3;
mBtnNextBookmarkInFolder.X = (GS!(1) + iconButtonWidth) * 4;
2022-06-09 12:25:48 +02:00
base.RehupScale(oldScale, newScale);
}
private void BookmarksLV_OnDragUpdate(DragEvent evt)
{
var dragKind = evt.mDragKind;
evt.mDragKind = .None;
var dragSource = evt.mSender as BookmarksListViewItem;
var dragTarget = evt.mDragTarget as BookmarksListViewItem;
// Folders can only be dragged onto other folders
if (dragSource.RefObject is BookmarkFolder && (!dragTarget.RefObject is BookmarkFolder))
return;
if (dragSource == null)
return;
if (dragTarget == null)
return;
evt.mDragKind = .After;
if ((dragTarget.mLabel == "") && (dragKind == .After))
dragKind = .Before;
if (dragKind == .None)
return;
evt.mDragKind = dragKind;
}
private void BookmarksLV_OnDragEnd(DragEvent theEvent)
{
if (theEvent.mDragKind == .None)
return;
if (theEvent.mDragTarget is BookmarksListViewItem)
{
var source = (BookmarksListViewItem)theEvent.mSender;
var target = (BookmarksListViewItem)theEvent.mDragTarget;
if (source.mListView == target.mListView)
{
if (source == target)
return;
List<BookmarksListViewItem> selectedItems = scope .();
2022-06-09 18:23:57 +02:00
mBookmarksListView.GetRoot().WithSelectedItems(scope [&] (selectedItem) =>
2022-06-09 12:25:48 +02:00
{
selectedItems.Add((BookmarksListViewItem)selectedItem);
});
for (BookmarksListViewItem item in selectedItems)
{
if (var sourceBookmark = item.RefObject as Bookmark)
{
if (var targetBookmark = target.RefObject as Bookmark)
{
if (theEvent.mDragKind == .After)
{
int index = targetBookmark.mFolder.mBookmarkList.IndexOf(targetBookmark);
index++;
Bookmark prevBookmark = null;
if (index < targetBookmark.mFolder.mBookmarkList.Count)
{
prevBookmark = targetBookmark.mFolder.mBookmarkList[index];
}
gApp.mBookmarkManager.MoveBookmarkToFolder(sourceBookmark, targetBookmark.mFolder, prevBookmark);
}
else if (theEvent.mDragKind == .Before)
{
gApp.mBookmarkManager.MoveBookmarkToFolder(sourceBookmark, targetBookmark.mFolder, targetBookmark);
}
}
else if (var targetFolder = target.RefObject as BookmarkFolder)
{
if (theEvent.mDragKind == .Before)
{
// Drop before folder -> Drop to root
gApp.mBookmarkManager.MoveBookmarkToFolder(sourceBookmark, gApp.mBookmarkManager.mRootFolder);
}
else if (theEvent.mDragKind == .After || theEvent.mDragKind == .Inside)
{
gApp.mBookmarkManager.MoveBookmarkToFolder(sourceBookmark, targetFolder);
}
}
}
else if (var sourceFolder = item.RefObject as BookmarkFolder)
{
if (var targetFolder = target.RefObject as BookmarkFolder)
{
if (theEvent.mDragKind == .Before)
{
gApp.mBookmarkManager.MoveFolder(sourceFolder, .Before, targetFolder);
}
else if (theEvent.mDragKind == .After)
{
gApp.mBookmarkManager.MoveFolder(sourceFolder, .After, targetFolder);
}
}
}
}
}
}
}
2022-06-08 20:11:39 +02:00
/// Tries to rename the currently selected bookmark
public void TryRenameItem()
{
2022-06-09 18:23:57 +02:00
ListViewItem selectedItem = mBookmarksListView.GetRoot().FindFirstSelectedItem();
2022-06-09 12:25:48 +02:00
2022-06-08 20:11:39 +02:00
RenameItem(selectedItem);
}
2022-06-09 12:25:48 +02:00
private void HandleEditDone(EditWidget editWidget, bool cancelled)
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
String newValue = scope String();
editWidget.GetText(newValue);
newValue.Trim();
2022-06-08 20:11:39 +02:00
2022-06-09 18:23:57 +02:00
ListViewItem listViewItem = mBookmarksListView.mEditingItem;
2022-06-08 20:11:39 +02:00
if (var item = listViewItem as BookmarksListViewItem)
{
2022-06-09 12:25:48 +02:00
if (var bookmark = item.RefObject as Bookmark)
{
bookmark.mTitle.Clear();
bookmark.mTitle.Append(newValue);
listViewItem.Label = bookmark.mTitle;
}
else if (var folder = item.RefObject as BookmarkFolder)
{
folder.mTitle.Clear();
folder.mTitle.Append(newValue);
listViewItem.Label = folder.mTitle;
}
2022-06-08 20:11:39 +02:00
}
}
protected override void ShowRightClickMenu(Widget relWidget, float x, float y)
{
base.ShowRightClickMenu(relWidget, x, y);
var root = relWidget as ListViewItem;
var listView = root.mListView;
if (listView.GetRoot().FindFirstSelectedItem() != null)
{
Menu menu = new Menu();
2022-06-09 12:25:48 +02:00
Menu anItem;
2022-06-08 20:11:39 +02:00
anItem = menu.AddItem("Delete");
anItem.mOnMenuItemSelected.Add(new (item) =>
{
listView.GetRoot().WithSelectedItems(scope (item) =>
{
if (var bookmarkItem = item as BookmarksListViewItem)
{
2022-06-09 12:25:48 +02:00
if (var bookmark = bookmarkItem.RefObject as Bookmark)
gApp.mBookmarkManager.DeleteBookmark(bookmark);
else if (var folder = bookmarkItem.RefObject as BookmarkFolder)
gApp.mBookmarkManager.DeleteFolder(folder);
2022-06-08 20:11:39 +02:00
}
});
});
2022-06-09 12:25:48 +02:00
anItem = menu.AddItem("Rename");
2022-06-08 20:11:39 +02:00
anItem.mOnMenuItemSelected.Add(new (item) =>
2022-06-09 12:25:48 +02:00
{
2022-06-09 18:23:57 +02:00
var selectedItem = mBookmarksListView.GetRoot().FindFirstSelectedItem();
2022-06-08 20:11:39 +02:00
if (selectedItem != null)
2022-06-09 12:25:48 +02:00
RenameItem(selectedItem);
});
2022-06-08 20:11:39 +02:00
menu.AddItem();
if (gApp.mBookmarkManager.AllBookmarksDisabled)
{
anItem = menu.AddItem("Enable all Bookmarks");
anItem.mOnMenuItemSelected.Add(new (item) =>
2022-06-09 12:25:48 +02:00
{
gApp.mBookmarkManager.AllBookmarksDisabled = false;
});
2022-06-08 20:11:39 +02:00
}
else
{
anItem = menu.AddItem("Disable all Bookmarks");
anItem.mOnMenuItemSelected.Add(new (item) =>
2022-06-09 12:25:48 +02:00
{
gApp.mBookmarkManager.AllBookmarksDisabled = true;
});
2022-06-08 20:11:39 +02:00
}
MenuWidget menuWidget = ThemeFactory.mDefault.CreateMenuWidget(menu);
menuWidget.Init(relWidget, x, y);
}
}
2022-06-09 12:25:48 +02:00
2022-06-08 20:11:39 +02:00
void EditListViewItem(ListViewItem listViewItem)
{
2022-06-09 18:23:57 +02:00
mBookmarksListView.EditListViewItem(listViewItem);
2022-06-08 20:11:39 +02:00
}
2022-06-09 12:25:48 +02:00
void RenameItem(ListViewItem listViewItem)
{
if (listViewItem != null)
EditListViewItem(listViewItem);
}
2022-06-08 20:11:39 +02:00
public override void Serialize(StructuredData data)
{
2022-06-09 12:25:48 +02:00
base.Serialize(data);
2022-06-08 20:11:39 +02:00
2022-06-09 12:25:48 +02:00
data.Add("Type", "BookmarksPanel");
2022-06-08 20:11:39 +02:00
}
2022-06-09 12:25:48 +02:00
2022-06-08 20:11:39 +02:00
public override void Resize(float x, float y, float width, float height)
{
base.Resize(x, y, width, height);
2022-06-09 12:25:48 +02:00
2022-06-09 18:23:57 +02:00
float buttonHeight = mBtnCreateBookmarkFolder.mHeight;
2022-06-09 12:25:48 +02:00
2022-06-09 18:23:57 +02:00
mBookmarksListView.Resize(0, buttonHeight, width, Math.Max(mHeight - buttonHeight, 0));
2022-06-08 20:11:39 +02:00
}
2022-06-11 16:45:16 +02:00
private bool mBookmarksDirty;
/// Marks the bookmarks list view as dirty so that it will be rebuild in the next update.
private void BookmarksChanged()
{
mBookmarksDirty = true;
}
2022-06-08 20:11:39 +02:00
public override void Update()
{
if (mBookmarksDirty)
UpdateBookmarks();
2022-06-09 18:23:57 +02:00
ShowTooltip(mBtnCreateBookmarkFolder, "Create a new folder.");
ShowTooltip(mBtnPrevBookmark, "Move the cursor to previous bookmark.");
ShowTooltip(mBtnNextBookmark, "Move the cursor to next bookmark.");
ShowTooltip(mBtnPrevBookmarkInFolder, "Move the cursor to previous bookmark in the current folder.");
ShowTooltip(mBtnNextBookmarkInFolder, "Move the cursor to next bookmark in the current folder.");
2022-06-08 20:11:39 +02:00
base.Update();
}
2022-06-11 16:45:16 +02:00
/// Clears the Panel (does NOT clear the actual bookmarks).
2022-06-09 18:23:57 +02:00
public void Clear()
{
2022-06-11 16:45:16 +02:00
mBookmarksListView.GetRoot().Clear();
2022-06-09 18:23:57 +02:00
mBookmarksDirty = true;
}
2022-06-11 16:45:16 +02:00
/// Shows a tooltip with the given text for the specified widget if the widget is hovered.
2022-06-09 18:23:57 +02:00
private void ShowTooltip(Widget widget, String text)
{
2022-06-11 16:45:16 +02:00
if (DarkTooltipManager.CheckMouseover(widget, 20, let mousePoint))
2022-06-09 18:23:57 +02:00
{
DarkTooltipManager.ShowTooltip(text, widget, mousePoint.x, mousePoint.y);
}
}
2022-06-11 16:45:16 +02:00
/// Rebuilds the list view.
2022-06-08 20:11:39 +02:00
private void UpdateBookmarks()
{
2022-06-11 16:45:16 +02:00
var root = (BookmarksListViewItem)mBookmarksListView.GetRoot();
var openFolders = scope List<BookmarkFolder>();
if (root.mChildItems != null)
{
// Find all open Folders so that we can open them again after rebuilding the list view
for (var child in root.mChildItems)
{
if (!child.IsOpen)
continue;
if (var bookmarkFolder = ((BookmarksListViewItem)child).RefObject as BookmarkFolder)
{
openFolders.Add(bookmarkFolder);
}
}
}
2022-06-08 20:11:39 +02:00
root.Clear();
2022-06-09 12:25:48 +02:00
for (BookmarkFolder folder in gApp.mBookmarkManager.mBookmarkFolders)
2022-06-08 20:11:39 +02:00
{
2022-06-09 12:25:48 +02:00
bool isRoot = (folder == IDEApp.sApp.mBookmarkManager.mRootFolder);
BookmarksListViewItem FolderItem = null;
if (!isRoot)
{
2022-06-11 16:45:16 +02:00
FolderItem = AddFolderToListView(root, folder);
2022-06-09 12:25:48 +02:00
}
else
{
FolderItem = (BookmarksListViewItem)root;
}
for (Bookmark bookmark in folder.mBookmarkList)
{
2022-06-11 16:45:16 +02:00
AddBookmarkToListView(FolderItem, bookmark);
}
if (!isRoot)
{
// Open folder if it was open before recreating the list view.
int idx = openFolders.IndexOf(folder);
if (idx >= 0)
{
openFolders.RemoveAtFast(idx);
FolderItem.Open(true, true);
}
2022-06-09 12:25:48 +02:00
}
2022-06-08 20:11:39 +02:00
}
mBookmarksDirty = false;
}
2022-06-11 16:45:16 +02:00
/// Creates a new ListViewItem for the given folder.
private BookmarksListViewItem AddFolderToListView(BookmarksListViewItem parent, BookmarkFolder folder)
2022-06-09 12:25:48 +02:00
{
2022-06-11 16:45:16 +02:00
var listViewItem = (BookmarksListViewItem)parent.CreateChildItem();
2022-06-09 12:25:48 +02:00
listViewItem.RefObject = folder;
2022-06-11 16:45:16 +02:00
listViewItem.AllowDragging = true;
2022-06-09 12:25:48 +02:00
var subViewItem = (DarkListViewItem)listViewItem.GetOrCreateSubItem(0);
DarkCheckBox cb = new DarkCheckBox();
cb.Checked = !folder.IsDisabled;
cb.Resize(GS!(-16), 0, GS!(22), GS!(22));
cb.mOnValueChanged.Add(new () =>
{
folder.IsDisabled = !cb.Checked;
});
subViewItem.AddWidget(cb);
subViewItem.Label = folder.mTitle;
subViewItem.Resize(GS!(22), 0, 0, 0);
2022-06-11 16:45:16 +02:00
return listViewItem;
2022-06-09 12:25:48 +02:00
}
2022-06-11 16:45:16 +02:00
/// Creates a new ListViewItem for the given bookmark.
private BookmarksListViewItem AddBookmarkToListView(BookmarksListViewItem parent, Bookmark bookmark)
2022-06-08 20:11:39 +02:00
{
2022-06-11 16:45:16 +02:00
var listViewItem = (BookmarksListViewItem)(parent.CreateChildItem());
2022-06-09 12:25:48 +02:00
listViewItem.RefObject = bookmark;
2022-06-11 16:45:16 +02:00
listViewItem.AllowDragging = true;
2022-06-08 20:11:39 +02:00
var subViewItem = (DarkListViewItem)listViewItem.GetOrCreateSubItem(0);
DarkCheckBox cb = new DarkCheckBox();
cb.Checked = !bookmark.mIsDisabled;
cb.Resize(GS!(-16), 0, GS!(22), GS!(22));
2022-06-09 12:25:48 +02:00
cb.mOnValueChanged.Add(new () =>
{
bookmark.mIsDisabled = !cb.Checked;
});
2022-06-08 20:11:39 +02:00
subViewItem.AddWidget(cb);
subViewItem.Label = bookmark.mTitle;
subViewItem.Resize(GS!(22), 0, 0, 0);
2022-06-09 12:25:48 +02:00
subViewItem = (DarkListViewItem)listViewItem.GetOrCreateSubItem(1);
subViewItem.Label = bookmark.mFileName;
2022-06-08 20:11:39 +02:00
// Internally lines are 0-based -> add one for display
listViewItem.BookmarkLine = new $"{bookmark.mLineNum + 1}";
2022-06-09 12:25:48 +02:00
subViewItem = (DarkListViewItem)listViewItem.GetOrCreateSubItem(2);
subViewItem.Label = listViewItem.BookmarkLine;
2022-06-11 16:45:16 +02:00
return listViewItem;
2022-06-08 20:11:39 +02:00
}
public override void KeyDown(KeyCode keyCode, bool isRepeat)
{
2022-06-09 18:23:57 +02:00
mBookmarksListView.KeyDown(keyCode, isRepeat);
2022-06-09 12:25:48 +02:00
2022-06-08 20:11:39 +02:00
base.KeyDown(keyCode, isRepeat);
}
private void DeleteSelectedItems()
{
2022-06-09 18:23:57 +02:00
var root = mBookmarksListView.GetRoot();
2022-06-09 12:25:48 +02:00
List<ListViewItem> selectedItems = scope List<ListViewItem>();
2022-06-08 20:11:39 +02:00
root.WithSelectedItems(scope (listViewItem) =>
2022-06-09 12:25:48 +02:00
{
selectedItems.Add(listViewItem);
});
2022-06-08 20:11:39 +02:00
// Go through in reverse, to process children before their parents
for (int itemIdx = selectedItems.Count - 1; itemIdx >= 0; itemIdx--)
{
BookmarksListViewItem item = (.)selectedItems[itemIdx];
2022-06-09 12:25:48 +02:00
if (var bookmark = item.RefObject as Bookmark)
gApp.mBookmarkManager.DeleteBookmark(bookmark);
else if (var folder = item.RefObject as BookmarkFolder)
gApp.mBookmarkManager.DeleteFolder(folder);
2022-06-08 20:11:39 +02:00
}
}
}
2022-06-09 12:25:48 +02:00
}