Files
Macro-Deck/MacroDeck/GUI/Dialogs/VariableDialog.cs
Manuel Mayer 9db305266b Improve variable manager (#438)
Improved the performance of the varibable manager and fixed potential issues.
2023-09-17 23:40:30 +02:00

137 lines
4.2 KiB
C#

using System.Windows.Forms;
using SuchByte.MacroDeck.GUI.CustomControls;
using SuchByte.MacroDeck.Language;
using SuchByte.MacroDeck.Variables;
using MessageBox = SuchByte.MacroDeck.GUI.CustomControls.MessageBox;
namespace SuchByte.MacroDeck.GUI.Dialogs;
public partial class VariableDialog : DialogForm
{
public Variable Variable;
private readonly bool _protected;
private readonly bool _edit;
public VariableDialog(Variable variable = null)
{
InitializeComponent();
lblType.Text = LanguageManager.Strings.Type;
lblName.Text = LanguageManager.Strings.Name;
lblValue.Text = LanguageManager.Strings.Value;
btnDelete.Text = LanguageManager.Strings.DeleteVariable;
btnOk.Text = LanguageManager.Strings.Ok;
if (variable == null)
{
Variable = new Variable();
variableName.Enabled = true;
_edit = false;
} else
{
Variable = variable;
variableName.Enabled = false;
_edit = true;
}
_protected = (Variable.Creator != "User");
variableType.Enabled = !_protected;
variableValue.Enabled = !_protected;
}
private void VariableName_TextChanged(object sender, EventArgs e)
{
}
private void BtnOk_Click(object sender, EventArgs e)
{
if (_protected)
{
DialogResult = DialogResult.Cancel;
Close();
return;
}
if (!_edit)
{
if (variableName.Text.Length == 0)
{
variableName.Text = "new_variable";
}
var variableCount = VariableManager.ListVariables.Count(v => v.Name == variableName.Text);
if (variableCount > 0)
{
variableName.Text = string.Format(variableName.Text + " _{0}", variableCount);
}
Variable.Name = VariableManager.ConvertNameString(variableName.Text);
}
Variable.Type = variableType.Text;
switch (Variable.Type)
{
case "Bool":
Variable.Value = (variableValue.Text.ToLower().Equals("true") ? true : false).ToString();
break;
case "Integer":
int.TryParse(variableValue.Text, out var intVal);
Variable.Value = intVal.ToString();
break;
case "Float":
float.TryParse(variableValue.Text, out var floatVal);
Variable.Value = floatVal.ToString();
break;
case "String":
Variable.Value = variableValue.Text;
break;
}
VariableManager.SetValue(Variable.Name, Variable.Value, Variable.VariableType, Variable.Creator);
DialogResult = DialogResult.OK;
Close();
}
private void VariableDialog_Load(object sender, EventArgs e)
{
foreach (var name in Enum.GetNames(typeof(VariableType)))
{
variableType.Items.Add(name);
}
variableType.Text = Variable.Type;
variableName.Text = Variable.Name;
variableValue.Text = Variable.Value;
CenterToScreen();
}
private void BtnDelete_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
using var msgBox = new MessageBox();
if(msgBox.ShowDialog(LanguageManager.Strings.AreYouSure, string.Format(LanguageManager.Strings.VariableXGetsDeleted, Variable.Name), MessageBoxButtons.YesNo) == DialogResult.Yes)
{
VariableManager.DeleteVariable(Variable.Name);
DialogResult = DialogResult.Cancel;
Close();
}
}
private void variableType_SelectedIndexChanged(object sender, EventArgs e)
{
switch (variableType.Text)
{
case "Bool":
variableValue.Text = "false";
break;
case "Integer":
variableValue.Text = "0";
break;
case "Float":
variableValue.Text = "0.0";
break;
case "String":
variableValue.Text = "";
break;
}
}
}