mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 07:44:09 +02:00
101 lines
2.1 KiB
Beef
101 lines
2.1 KiB
Beef
using System;
|
|
using Beefy.widgets;
|
|
using Beefy.theme;
|
|
using Beefy.theme.dark;
|
|
using System.IO;
|
|
|
|
namespace IDE.ui
|
|
{
|
|
class RecentFileSelector
|
|
{
|
|
class RecentMenuWidget : DarkMenuWidget
|
|
{
|
|
public this(Menu menu) : base(menu)
|
|
{
|
|
|
|
}
|
|
|
|
public override void Update()
|
|
{
|
|
if ((!mWidgetWindow.IsKeyDown(.Control)) &&
|
|
(!mWidgetWindow.IsKeyDown(.Shift)) &&
|
|
(!mWidgetWindow.IsKeyDown(.Menu)))
|
|
{
|
|
SubmitSelection();
|
|
Close();
|
|
}
|
|
}
|
|
}
|
|
|
|
RecentMenuWidget mMenuWidget;
|
|
|
|
public void Show()
|
|
{
|
|
if (gApp.mRecentlyDisplayedFiles.IsEmpty)
|
|
{
|
|
Closed();
|
|
return;
|
|
}
|
|
|
|
bool hadActiveDocument = gApp.GetActiveDocumentPanel() != null;
|
|
|
|
Widget parentWidget = gApp.GetActiveDocumentPanel();
|
|
if (parentWidget != null)
|
|
{
|
|
if (parentWidget.mParent is TabbedView)
|
|
parentWidget = parentWidget.mParent;
|
|
}
|
|
if (parentWidget == null)
|
|
parentWidget = gApp.mMainWindow.mRootWidget;
|
|
|
|
Menu menu = new Menu();
|
|
Menu item;
|
|
|
|
for (var recentItem in gApp.mRecentlyDisplayedFiles)
|
|
{
|
|
String fileName = scope .();
|
|
Path.GetFileName(recentItem, fileName);
|
|
item = menu.AddItem(fileName);
|
|
item.mOnMenuItemSelected.Add(new (menu) =>
|
|
{
|
|
gApp.[Friend]ShowRecentFile(@recentItem.Index);
|
|
mMenuWidget.Close();
|
|
});
|
|
}
|
|
|
|
mMenuWidget = new RecentMenuWidget(menu);
|
|
mMenuWidget.Init(parentWidget, parentWidget.mWidth / 2, GS!(20), .CenterHorz);
|
|
mMenuWidget.mWidgetWindow.mOnWindowKeyDown.Add(new => gApp.[Friend]SysKeyDown);
|
|
mMenuWidget.mOnKeyDown.Add(new (keyboardEvent) =>
|
|
{
|
|
if (keyboardEvent.mKeyCode == .Right)
|
|
{
|
|
if (mMenuWidget.mSelectIdx != -1)
|
|
gApp.[Friend]ShowRecentFile(mMenuWidget.mSelectIdx, false);
|
|
}
|
|
});
|
|
mMenuWidget.mOnRemovedFromParent.Add(new (widget, prevParent, widgetWindow) => Closed());
|
|
|
|
if (!hadActiveDocument)
|
|
mMenuWidget.SetSelection(0);
|
|
else
|
|
mMenuWidget.SetSelection(Math.Min(1, menu.mItems.Count - 1));
|
|
}
|
|
|
|
public void Next()
|
|
{
|
|
mMenuWidget.KeyDown(.Down, false);
|
|
}
|
|
|
|
public void Prev()
|
|
{
|
|
mMenuWidget.KeyDown(.Up, false);
|
|
}
|
|
|
|
void Closed()
|
|
{
|
|
gApp.mRecentFileSelector = null;
|
|
delete this;
|
|
}
|
|
}
|
|
}
|