Skip to content
This repository has been archived by the owner on Sep 11, 2023. It is now read-only.

Commit

Permalink
improve macro inserting in configs (closes #114)
Browse files Browse the repository at this point in the history
  • Loading branch information
maxijabase committed Jan 7, 2022
1 parent 60aa6cb commit be36c06
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 79 deletions.
1 change: 0 additions & 1 deletion Interop/ConfigControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ public static Config[] Load()
FTPUser = _FTPUser,
FTPPassword = _FTPPW,
FTPDir = _FTPDir,
RConUseSourceEngine = _RConEngineTypeSource,
RConIP = _RConIP,
RConPort = _RConPort,
RConPassword = _RConPassword,
Expand Down
26 changes: 7 additions & 19 deletions UI/Windows/ConfigWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@
Style="{StaticResource SearchMetroTextBox}"
controls:TextBoxHelper.ButtonCommand="{Binding TextBoxButtonFileCmd, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" />
<TextBox Name="C_ServerArgs" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,186,5,0" TextChanged="C_ServerArgs_TextChanged" />
<TextBox Name="C_PreBuildCmd" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="5,246,5,0" Height="80" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextChanged="C_PreBuildCmd_TextChanged" />
<TextBox Name="C_PostBuildCmd" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="5,351,5,0" Height="80" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextChanged="C_PostBuildCmd_TextChanged" />
<TextBox Name="C_PreBuildCmd" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="5,246,5,0" Height="80" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextChanged="C_PreBuildCmd_TextChanged" GotFocus="BuildCommandsBoxes_OnFocus" />
<TextBox Name="C_PostBuildCmd" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="5,351,5,0" Height="80" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextChanged="C_PostBuildCmd_TextChanged" GotFocus="BuildCommandsBoxes_OnFocus" />
<Slider Name="C_OptimizationLevel" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="195,436,0,0" Width="75" Minimum="0" Maximum="2" TickFrequency="2" IsSnapToTickEnabled="True" TickPlacement="BottomRight" AutoToolTipPlacement="TopLeft" ValueChanged="C_OptimizationLevel_ValueChanged" />
<Slider Name="C_VerboseLevel" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="195,466,0,0" Width="75" Minimum="0" Maximum="2" TickFrequency="1" IsSnapToTickEnabled="True" TickPlacement="BottomRight" AutoToolTipPlacement="TopLeft" ValueChanged="C_VerboseLevel_ValueChanged" />
<TextBlock Name="FTPHostBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,501,0,0" Text="FTP Host:" IsHitTestVisible="False" />
Expand All @@ -73,32 +73,20 @@
<TextBox Name="C_FTPUser" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,526,5,0" TextChanged="C_FTPUser_TextChanged" />
<PasswordBox Name="C_FTPPW" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,556,5,0" PasswordChanged="C_FTPPW_TextChanged" />
<TextBox Name="C_FTPDir" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,586,5,0" TextChanged="C_FTPDir_TextChanged" />
<ComboBox Name="CMD_ItemC" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,216,5,0" Text="Commandline variables" Width="200" SelectedIndex="0">
<ComboBoxItem Name="ItemC_EditorDir" Content="{}{editordir} - Directory of the SPEdit binary" />
<ComboBoxItem Name="ItemC_ScriptDir" Content="{}{scriptdir} - Directory of the Compiling script" />
<ComboBoxItem Name="ItemC_CopyDir" Content="{}{copydir} - Directory where the smx should be copied" />
<ComboBoxItem Name="ItemC_ScriptFile" Content="{}{scriptfile} - Full Directory and Name of the script" />
<ComboBoxItem Name="ItemC_ScriptName" Content="{}{scriptname} - File Name of the script" />
<ComboBoxItem Name="ItemC_PluginFile" Content="{}{pluginfile} - Full Directory and Name of the compiled script" />
<ComboBoxItem Name="ItemC_PluginName" Content="{}{pluginname} - File Name of the compiled script" />
<ComboBox Name="CMD_ItemC" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,216,5,0" Width="200" SelectedIndex="0">
<ComboBoxItem Visibility="Collapsed">Macros</ComboBoxItem>
</ComboBox>
<TextBlock Name="RConEngineBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,636,0,0" Text="RCon Server Engine:" IsHitTestVisible="False" />
<TextBlock Name="RConIPBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,666,0,0" Text="RCon Server IP:" IsHitTestVisible="False" />
<TextBlock Name="RConPortBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,696,0,0" Text="RCon Server Port:" IsHitTestVisible="False" />
<TextBlock Name="RConPWBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,726,0,0" Text="RCon Password:" IsHitTestVisible="False" />
<TextBlock Name="RConComBlock" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5,756,0,0" Text="RCon Commands:" IsHitTestVisible="False" />
<ComboBox Name="C_RConEngine" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,631,5,0" SelectionChanged="C_RConEngine_Changed">
<ComboBoxItem Content="Source Engine" IsSelected="True" />
<ComboBoxItem Content="Gold Source Engine" />
</ComboBox>
<TextBox Name="C_RConIP" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,661,5,0" TextChanged="C_RConIP_TextChanged" />
<TextBox Name="C_RConPort" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,691,5,0" TextChanged="C_RConPort_TextChanged" />
<PasswordBox Name="C_RConPW" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="195,721,5,0" PasswordChanged="C_RConPW_TextChanged" />
<ComboBox Name="Rcon_MenuC" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,751,5,0" Text="Rcon commandline variables" Width="200" SelectedIndex="0">
<ComboBoxItem Name="MenuC_PluginsReload" Content="{}{plugins_reload} - Reloads all compiled plugins" />
<ComboBoxItem Name="MenuC_PluginsLoad" Content="{}{plugins_load} - Loads all compiled plugins" />
<ComboBoxItem Name="MenuC_PluginsUnload" Content="{}{plugins_unload} - Unloads all compiled plugins" />
<ComboBox Name="Rcon_MenuC" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,751,5,0" Width="200" SelectedIndex="0">
<ComboBoxItem Visibility="Collapsed">Macros</ComboBoxItem>
</ComboBox>

<TextBox Name="C_RConCmds" HorizontalAlignment="Stretch" VerticalAlignment="Top" Margin="5,781,5,0" Height="80" AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextChanged="C_RConCmds_TextChanged" />
<Rectangle Fill="#FFCCCCCC" HorizontalAlignment="Left" Height="93" Margin="195,30,0,0" Stroke="#FFCCCCCC" VerticalAlignment="Top" Width="668"/>
<ListBox x:Name="C_SMDir" Height="91" Margin="196,31,6,0" VerticalAlignment="Top" SelectionMode="Extended"/>
Expand Down
124 changes: 79 additions & 45 deletions UI/Windows/ConfigWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,28 @@ public partial class ConfigWindow
private bool NeedsSMDefInvalidation;

private ICommand textBoxButtonFileCmd;

private ICommand textBoxButtonFolderCmd;

private static TextBox SelectedBox;

private readonly string[] CompileMacros =
{
"{editordir} - Directory of the SPCode binary",
"{scriptdir} - Directory of the compiling script",
"{copydir} - Directory where the .smx should be copied",
"{scriptfile} - Full directory and name of the script",
"{scriptname} - File name of the script",
"{pluginfile} - Full directory and name of the compiled script",
"{pluginname} - File name of the compiled script"
};

private readonly string[] CommandMacros =
{
"{plugins_reload} - Reloads all compiled plugins",
"{plugins_load} - Loads all compiled plugins",
"{plugins_unload} - Unloads all compiled plugins"
};

public ConfigWindow()
{
InitializeComponent();
Expand All @@ -43,7 +62,14 @@ public ConfigWindow()
ConfigListBox.Items.Add(new ListBoxItem { Content = config.Name });
}

SelectedBox = C_PreBuildCmd;

ConfigListBox.SelectedIndex = Program.SelectedConfig;

CompileMacros.ToList().ForEach(x => CMD_ItemC.Items.Add(x));
CMD_ItemC.SelectionChanged += CompileMacros_OnClickedItem;
CommandMacros.ToList().ForEach(x => Rcon_MenuC.Items.Add(x));
Rcon_MenuC.SelectionChanged += CommandMacros_OnClickedItem;
}

public ICommand TextBoxButtonFolderCmd
Expand Down Expand Up @@ -130,6 +156,49 @@ private void ConfigListBox_SelectionChanged(object sender, SelectionChangedEvent
LoadConfigToUI(ConfigListBox.SelectedIndex);
}

private void CompileMacros_OnClickedItem(object sender, SelectionChangedEventArgs e)
{
if (CMD_ItemC.SelectedItem is not string content)
{
return;
}

SelectedBox.AppendText(content.Substring(0, content.IndexOf('}') + 1));
var item = new ComboBoxItem()
{
Visibility = Visibility.Collapsed,
Content = "Macros",
};
CMD_ItemC.Items.Insert(0, item);
CMD_ItemC.SelectedIndex = 0;
SelectedBox.Focus();
SelectedBox.Select(SelectedBox.Text.Length, 0);
}

private void CommandMacros_OnClickedItem(object sender, SelectionChangedEventArgs e)
{
if (Rcon_MenuC.SelectedItem is not string content)
{
return;
}

C_RConCmds.AppendText(content.Substring(0, content.IndexOf('}') + 1));
var item = new ComboBoxItem()
{
Visibility = Visibility.Collapsed,
Content = "Macros",
};
Rcon_MenuC.Items.Insert(0, item);
Rcon_MenuC.SelectedIndex = 0;
C_RConCmds.Focus();
C_RConCmds.Select(C_RConCmds.Text.Length, 0);
}

private void BuildCommandsBoxes_OnFocus(object sender, RoutedEventArgs e)
{
SelectedBox = sender as TextBox;
}

private void LoadConfigToUI(int index)
{
if (index < 0 || index >= Program.Configs.Length)
Expand Down Expand Up @@ -157,7 +226,6 @@ private void LoadConfigToUI(int index)
C_FTPUser.Text = c.FTPUser;
C_FTPPW.Password = c.FTPPassword;
C_FTPDir.Text = c.FTPDir;
C_RConEngine.SelectedIndex = c.RConUseSourceEngine ? 0 : 1;
C_RConIP.Text = c.RConIP;
C_RConPort.Text = c.RConPort.ToString();
C_RConPW.Password = c.RConPassword;
Expand Down Expand Up @@ -227,7 +295,7 @@ private void AddSMDirButton_Click(object sender, RoutedEventArgs e)
catch (UnauthorizedAccessException)
{
this.ShowMessageAsync("Access error",
"The directory you just specified could not be accessed properly by SPCode. You might have trouble using the includes from this directory.",
"The directory you just specified could not be accessed properly by SPCode. You may have trouble using the includes from this directory.",
MessageDialogStyle.Affirmative, Program.MainWindow.MetroDialogOptions);
}

Expand Down Expand Up @@ -415,19 +483,6 @@ private void C_FTPDir_TextChanged(object sender, TextChangedEventArgs e)
Program.Configs[ConfigListBox.SelectedIndex].FTPDir = C_FTPDir.Text;
}

private void C_RConEngine_Changed(object sender, RoutedEventArgs e)
{
if (!AllowChange)
{
return;
}

if (ConfigListBox.SelectedIndex >= 0)
{
Program.Configs[ConfigListBox.SelectedIndex].RConUseSourceEngine = C_RConEngine.SelectedIndex == 0;
}
}

private void C_RConIP_TextChanged(object sender, RoutedEventArgs e)
{
if (!AllowChange)
Expand Down Expand Up @@ -476,7 +531,6 @@ private void C_RConCmds_TextChanged(object sender, RoutedEventArgs e)

private void MetroWindow_Closing(object sender, CancelEventArgs e)
{
// TODO: find out what is this for
if (NeedsSMDefInvalidation)
{
foreach (var config in Program.Configs)
Expand All @@ -485,31 +539,23 @@ private void MetroWindow_Closing(object sender, CancelEventArgs e)
}
}

// Fill a list with all configs from the ListBox

var configsList = new List<string>();

foreach (ListBoxItem item in ConfigListBox.Items)
{
configsList.Add(item.Content.ToString());
}

// Check for empty named configs and disallow saving configs

foreach (var cfg in configsList)
// Check for empty named configs
if (configsList.Any(x => string.IsNullOrEmpty(x)))
{
if (cfg == string.Empty)
{
e.Cancel = true;
this.ShowMessageAsync(Program.Translations.Get("ErrorSavingConfigs"),
Program.Translations.Get("EmptyConfigNames"), MessageDialogStyle.Affirmative,
Program.MainWindow.MetroDialogOptions);
return;
}
e.Cancel = true;
this.ShowMessageAsync(Program.Translations.Get("ErrorSavingConfigs"),
Program.Translations.Get("EmptyConfigNames"), MessageDialogStyle.Affirmative,
Program.MainWindow.MetroDialogOptions);
return;
}

// Check for duplicate names in the config list and disallow saving configs

// Check for duplicate names in the config list
if (configsList.Count != configsList.Distinct().Count())
{
e.Cancel = true;
Expand Down Expand Up @@ -559,7 +605,6 @@ private void MetroWindow_Closing(object sender, CancelEventArgs e)
writer.WriteAttributeString("FTPUser", c.FTPUser);
writer.WriteAttributeString("FTPPassword", ManagedAES.Encrypt(c.FTPPassword));
writer.WriteAttributeString("FTPDir", c.FTPDir);
writer.WriteAttributeString("RConSourceEngine", c.RConUseSourceEngine ? "1" : "0");
writer.WriteAttributeString("RConIP", c.RConIP);
writer.WriteAttributeString("RConPort", c.RConPort.ToString());
writer.WriteAttributeString("RConPassword", ManagedAES.Encrypt(c.RConPassword));
Expand Down Expand Up @@ -604,22 +649,11 @@ private void Language_Translate()
FTPPWBlock.Text = Program.Translations.Get("FTPPw");
FTPDirBlock.Text = Program.Translations.Get("FTPDir");
CMD_ItemC.Text = Program.Translations.Get("CMDLineCom");
ItemC_EditorDir.Content = "{editordir} - " + Program.Translations.Get("ComEditorDir");
ItemC_ScriptDir.Content = "{scriptdir} - " + Program.Translations.Get("ComScriptDir");
ItemC_CopyDir.Content = "{copydir} - " + Program.Translations.Get("ComCopyDir");
ItemC_ScriptFile.Content = "{scriptfile} - " + Program.Translations.Get("ComScriptFile");
ItemC_ScriptName.Content = "{scriptname} - " + Program.Translations.Get("ComScriptName");
ItemC_PluginFile.Content = "{pluginfile} - " + Program.Translations.Get("ComPluginFile");
ItemC_PluginName.Content = "{pluginname} - " + Program.Translations.Get("ComPluginName");
RConEngineBlock.Text = Program.Translations.Get("RConEngine");
RConIPBlock.Text = Program.Translations.Get("RConIP");
RConPortBlock.Text = Program.Translations.Get("RconPort");
RConPWBlock.Text = Program.Translations.Get("RconPw");
RConComBlock.Text = Program.Translations.Get("RconCom");
Rcon_MenuC.Text = Program.Translations.Get("RConCMDLineCom");
MenuC_PluginsReload.Content = "{plugins_reload} - " + Program.Translations.Get("ComPluginsReload");
MenuC_PluginsLoad.Content = "{plugins_load} - " + Program.Translations.Get("ComPluginsLoad");
MenuC_PluginsUnload.Content = "{plugins_unload} - " + Program.Translations.Get("ComPluginsUnload");
}


Expand Down
4 changes: 2 additions & 2 deletions UI/Windows/OptionsWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@
<ComboBox Name="AccentColor" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="425,5,0,0" Width="200" SelectionChanged="AccentColor_Changed" />
<Label Name="LanguageLabel" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="333,37,0,0" Content="Language:" />
<ComboBox Name="LanguageBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="425,37,0,0" Width="200" SelectionChanged="LanguageBox_Changed" />
<Label Name="ActionOnCloseLabel" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="333,72,0,0" Content="On close:" />
<ComboBox Name="ActionOnCloseBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="425,72,0,0" Width="200" SelectionChanged="ActionOnCloseBox_Changed" />
<Label Name="ActionOnCloseLabel" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="333,69,0,0" Content="On close:" />
<ComboBox Name="ActionOnCloseBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="425,69,0,0" Width="200" SelectionChanged="ActionOnCloseBox_Changed" />
</Grid>
</ScrollViewer>
</controls:MetroTabItem>
Expand Down
12 changes: 0 additions & 12 deletions Utils/Models/Config.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SourcepawnCondenser.SourcemodDefinition;
using SPCode.Interop;

namespace SPCode.Utils
{
Expand All @@ -12,30 +10,20 @@ public class Config
public bool AutoCopy;
public bool AutoUpload;
public bool AutoRCON;

public string CopyDirectory = string.Empty;

public bool DeleteAfterCopy;
public string FTPDir = string.Empty;

public string FTPHost = "ftp://localhost/";

// securestring? No! Because it's saved in plaintext and if you want to keep it a secret, you shouldn't automatically upload it anyways...
public string FTPPassword = string.Empty;

public string FTPUser = string.Empty;
public string Name = string.Empty;

public int OptimizeLevel = 2;

public string PostCmd = string.Empty;
public string PreCmd = string.Empty;
public string RConCommands = string.Empty;
public string RConIP = "127.0.0.1";
public string RConPassword = string.Empty;
public ushort RConPort = 27015;

public bool RConUseSourceEngine = true;
public string ServerArgs = string.Empty;
public string ServerFile = string.Empty;

Expand Down

0 comments on commit be36c06

Please sign in to comment.