Files
netch/Netch/Forms/ModeForms/RouteForm.cs
2022-03-22 14:20:23 +08:00

104 lines
3.0 KiB
C#

using Netch.Models.Modes;
using Netch.Models.Modes.TunMode;
using Netch.Properties;
using Netch.Services;
using Netch.Utils;
namespace Netch.Forms.ModeForms;
[Fody.ConfigureAwait(true)]
public partial class RouteForm : BindingForm
{
private readonly bool IsCreateMode;
private readonly TunMode _mode;
public RouteForm(Mode? mode = null)
{
switch (mode)
{
case null:
IsCreateMode = true;
_mode = new TunMode();
break;
case TunMode tunMode:
IsCreateMode = false;
_mode = tunMode;
break;
default:
throw new ArgumentOutOfRangeException();
}
InitializeComponent();
Icon = Resources.icon;
BindTextBox(RemarkTextBox, _ => true, s => _mode.i18NRemark = s, _mode.i18NRemark);
// TODO Options Not implemented
BindTextBox(BypassRuleRichTextBox, s => true, s => _mode.Bypass = s.GetLines().ToList(), string.Join(Constants.EOF, _mode.Bypass));
BindTextBox(HandleRuleRichTextBox, s => true, s => _mode.Handle = s.GetLines().ToList(), string.Join(Constants.EOF, _mode.Handle));
}
private void Route_Load(object sender, EventArgs e)
{
if (!IsCreateMode)
{
Text = "Edit Route Table Rule";
RemarkTextBox.TextChanged -= RemarkTextBox_TextChanged;
RemarkTextBox.Text = _mode.i18NRemark;
FilenameTextBox.Text = ModeService.Instance.GetRelativePath(_mode.FullName);
if (!_mode.FullName.EndsWith(".json"))
ControlButton.Enabled = false;
}
i18N.TranslateForm(this);
}
private void ControlButton_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(RemarkTextBox.Text))
{
MessageBoxX.Show(i18N.Translate("Please enter a mode remark"));
return;
}
SaveBinds();
if (IsCreateMode)
{
var relativePath = FilenameTextBox.Text;
var fullName = ModeService.Instance.GetFullPath(relativePath);
if (File.Exists(fullName))
{
MessageBoxX.Show(i18N.Translate("File already exists.\n Please Change the filename"));
return;
}
_mode.FullName = fullName;
ModeService.Instance.Add(_mode);
MessageBoxX.Show(i18N.Translate("Mode added successfully"));
}
else
{
_mode.WriteFile();
MessageBoxX.Show(i18N.Translate("Mode updated successfully"));
}
Global.MainForm.ModeComboBox.SelectedItem = _mode;
Close();
}
private void RemarkTextBox_TextChanged(object? sender, EventArgs? e)
{
if (!IsHandleCreated)
return;
BeginInvoke(() =>
{
FilenameTextBox.Text = FilenameTextBox.Text = ModeEditorUtils.GetCustomModeRelativePath(RemarkTextBox.Text);
});
}
}