JD2022-TU1/main/tools/framework/JD.Timeline/View/Actions/OpenTapeDropDownMenu.cs

90 lines
No EOL
2.8 KiB
C#

using System;
using JD.Reflection.Attributes;
using JD.TeaBoxAddinSystem.Bootstrap;
using JD.Timeline.Plugin;
using TeaBox;
using TeaBox.Actions;
using TeaBox.Bootstrap;
using TeaBox.Gui;
using TD.SandBar;
namespace JD.Timeline.View.Actions
{
public class OpenTapeDropDownMenu : DropDownMenuItemBase
{
public enum OpenType
{
OpenFile,
OpenMaster,
OpenFromEngine
}
private OpenType _defaultOpenType = OpenType.OpenFile;
public OpenTapeDropDownMenu()
: base(typeof(OpenType))
{
Enabled = true;
SelectedMode = _defaultOpenType;
}
protected override bool EnabledWrapAround { get { return false; } }
public override void UpdateState()
{
if (TimelinePlugin.IsCreated())
_defaultOpenType = TimelinePlugin.Instance.IsConnected ? OpenType.OpenMaster : OpenType.OpenFile;
if (SelectedMode == null || (OpenType)SelectedMode != _defaultOpenType)
SelectedMode = _defaultOpenType;
foreach (MenuButtonItem item in Items)
{
item.Enabled = IsEnabledAction((Enum)item.Tag);
}
base.UpdateState();
}
protected override bool IsEnabledAction(Enum @enum)
{
return (OpenType)@enum == OpenType.OpenFile || (TimelinePlugin.IsCreated() && TimelinePlugin.Instance.IsConnected);
}
protected override void Execute()
{
switch ((OpenType)SelectedMode)
{
case OpenType.OpenFromEngine:
OpenFromEngine.OpenTape();
break;
case OpenType.OpenMaster:
TimelinePlugin.Instance.SendGetMasterTape();
break;
case OpenType.OpenFile:
TeaBox.ObjectModel.Application.Main.Open.FromFile();
break;
}
SelectedMode = _defaultOpenType;
}
[Export(typeof(IBootstrapCommand))]
public class ToolbarHijacker : IBootstrapCommand
{
public void Execute()
{
((SimpleAction)TeaBox.ObjectModel.Application.Main.Actions[ApplicationActions.OpenFileFromToolbar]).DefaultHandler = new InvisibleHandler();
((SimpleAction)TeaBox.ObjectModel.Application.Main.Actions[ApplicationActions.OpenFile]).Text = "Open from file...";
}
class InvisibleHandler : ActionHandler
{
public override bool Update(ActionContext context, ActionInfo info)
{
info.Visible = false;
return base.Update(context, info);
}
}
}
}
}