UltimateZoneBuilder/Source/Core/Windows/PreferencesForm.cs
MaxED a0ae887a72 Thing Edit form: things can now be filtered.
Preferences form: list of actions already using current shortcut was not updated properly when actions list was filtered.
2013-04-04 12:04:52 +00:00

902 lines
No EOL
32 KiB
C#

#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Diagnostics;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.Controls;
using System.Globalization;
using CodeImp.DoomBuilder.Data;
using System.IO;
#endregion
namespace CodeImp.DoomBuilder.Windows
{
internal partial class PreferencesForm : DelayedForm
{
#region ================== Variables
private PreferencesController controller;
private bool allowapplycontrol = false;
private bool disregardshift = false;
private bool disregardcontrol = false;
private List<ListViewItem> actionListItems; //mxd
private List<int> actionListItemsGroupIndices; //mxd
private bool reloadresources = false;
#endregion
#region ================== Properties
public bool ReloadResources { get { return reloadresources; } }
#endregion
#region ================== Constructor
// Constructor
public PreferencesForm()
{
Actions.Action[] actions;
ListViewItem item;
// Initialize
InitializeComponent();
// Interface
imagebrightness.Value = General.Settings.ImageBrightness;
squarethings.Checked = General.Settings.SquareThings;
doublesidedalpha.Value = General.Clamp((int)((1.0f - General.Settings.DoubleSidedAlpha) * 10.0f), doublesidedalpha.Minimum, doublesidedalpha.Maximum);
defaultviewmode.SelectedIndex = General.Settings.DefaultViewMode;
fieldofview.Value = General.Clamp(General.Settings.VisualFOV / 10, fieldofview.Minimum, fieldofview.Maximum);
mousespeed.Value = General.Clamp(General.Settings.MouseSpeed / 100, mousespeed.Minimum, mousespeed.Maximum);
movespeed.Value = General.Clamp(General.Settings.MoveSpeed / 100, movespeed.Minimum, movespeed.Maximum);
viewdistance.Value = General.Clamp((int)(General.Settings.ViewDistance / 200.0f), viewdistance.Minimum, viewdistance.Maximum);
invertyaxis.Checked = General.Settings.InvertYAxis;
scriptfontbold.Checked = General.Settings.ScriptFontBold;
scriptontop.Checked = General.Settings.ScriptOnTop;
scripttabwidth.Text = General.Settings.ScriptTabWidth.ToString();
scriptautoindent.Checked = General.Settings.ScriptAutoIndent;
previewsize.Value = General.Clamp(General.Settings.PreviewImageSize, previewsize.Minimum, previewsize.Maximum);
autoscrollspeed.Value = General.Clamp(General.Settings.AutoScrollSpeed, autoscrollspeed.Minimum, autoscrollspeed.Maximum);
zoomfactor.Value = General.Clamp(General.Settings.ZoomFactor, zoomfactor.Minimum, zoomfactor.Maximum);
animatevisualselection.Checked = General.Settings.AnimateVisualSelection;
dockersposition.SelectedIndex = General.Settings.DockersPosition;
collapsedockers.Checked = General.Settings.CollapseDockers;
toolbar_file.Checked = General.Settings.ToolbarFile;
toolbar_script.Checked = General.Settings.ToolbarScript;
toolbar_undo.Checked = General.Settings.ToolbarUndo;
toolbar_copy.Checked = General.Settings.ToolbarCopy;
toolbar_prefabs.Checked = General.Settings.ToolbarPrefabs;
toolbar_filter.Checked = General.Settings.ToolbarFilter;
toolbar_viewmodes.Checked = General.Settings.ToolbarViewModes;
toolbar_geometry.Checked = General.Settings.ToolbarGeometry;
toolbar_testing.Checked = General.Settings.ToolbarTesting;
showtexturesizes.Checked = General.Settings.ShowTextureSizes;
//mxd
toolbar_gzdoom.Checked = General.Settings.GZToolbarGZDoom;
cbSynchCameras.Checked = General.Settings.GZSynchCameras;
tbDynLightCount.Value = General.Clamp(General.Settings.GZMaxDynamicLights, tbDynLightCount.Minimum, tbDynLightCount.Maximum);
labelDynLightCount.Text = General.Settings.GZMaxDynamicLights.ToString();
tbDynLightSize.Value = General.Clamp((int)(General.Settings.GZDynamicLightRadius * 10), tbDynLightSize.Minimum, tbDynLightSize.Maximum);
labelDynLightSize.Text = General.Settings.GZDynamicLightRadius.ToString();
tbDynLightIntensity.Value = General.Clamp((int)(General.Settings.GZDynamicLightIntensity * 10), tbDynLightIntensity.Minimum, tbDynLightIntensity.Maximum);
labelDynLightIntensity.Text = General.Settings.GZDynamicLightIntensity.ToString();
cbStretchModels.Checked = General.Settings.GZStretchModels;
cbOldHighlightMode.Checked = General.Settings.GZOldHighlightMode;
vertexScale.Value = General.Clamp((int)(General.Settings.GZVertexScale2D), vertexScale.Minimum, vertexScale.Maximum);
vertexScaleLabel.Text = vertexScale.Value * 100 + "%" + (vertexScale.Value == 1 ? " (default)" : "");
cbLoadGameGldefs.Checked = General.Settings.GZLoadDefaultLightDefinitions;
tbNumSectors.Value = General.Clamp(General.Settings.GZNewSectorsCount, tbNumSectors.Minimum, tbNumSectors.Maximum);
numSectorsLabel.Text = tbNumSectors.Value.ToString();
// Fill fonts list
scriptfontname.BeginUpdate();
foreach(FontFamily ff in System.Drawing.FontFamily.Families)
scriptfontname.Items.Add(ff.Name);
scriptfontname.EndUpdate();
// Select script font name
for(int i = 0; i < scriptfontname.Items.Count; i++)
{
if(string.Compare(scriptfontname.Items[i].ToString(), General.Settings.ScriptFontName, true) == 0)
scriptfontname.SelectedIndex = i;
}
// Select script font size
for(int i = 0; i < scriptfontsize.Items.Count; i++)
{
if(string.Compare(scriptfontsize.Items[i].ToString(), General.Settings.ScriptFontSize.ToString(CultureInfo.InvariantCulture), true) == 0)
scriptfontsize.SelectedIndex = i;
}
// Fill actions list with categories
foreach(KeyValuePair<string, string> c in General.Actions.Categories)
listactions.Groups.Add(c.Key, c.Value);
// Fill list of actions
actions = General.Actions.GetAllActions();
actionListItems = new List<ListViewItem>(); //mxd
actionListItemsGroupIndices = new List<int>(); //mxd
foreach(Actions.Action a in actions)
{
// Create item
item = listactions.Items.Add(a.Name, a.Title, 0);
item.SubItems.Add(Actions.Action.GetShortcutKeyDesc(a.ShortcutKey));
item.SubItems[1].Tag = a.ShortcutKey;
// Put in category, if the category exists
if(General.Actions.Categories.ContainsKey(a.Category)) {
item.Group = listactions.Groups[a.Category];
actionListItemsGroupIndices.Add(listactions.Groups.IndexOf(item.Group));
}else{ //mxd
actionListItemsGroupIndices.Add(-1);
}
actionListItems.Add(item); //mxd
}
// Set the colors
// TODO: Make this automated by using the collection
colorbackcolor.Color = General.Colors.Background;
colorvertices.Color = General.Colors.Vertices;
colorlinedefs.Color = General.Colors.Linedefs;
colorhighlight.Color = General.Colors.Highlight;
colorselection.Color = General.Colors.Selection;
colorindication.Color = General.Colors.Indication;
colorgrid.Color = General.Colors.Grid;
colorgrid64.Color = General.Colors.Grid64;
//mxd
colorMD3.Color = General.Colors.ModelWireframe;
colorInfo.Color = General.Colors.InfoLine;
colorNewSectors.Color = General.Colors.NewSector;
colorscriptbackground.Color = General.Colors.ScriptBackground;
colorlinenumbers.Color = General.Colors.LineNumbers;
colorplaintext.Color = General.Colors.PlainText;
colorcomments.Color = General.Colors.Comments;
colorkeywords.Color = General.Colors.Keywords;
colorliterals.Color = General.Colors.Literals;
colorconstants.Color = General.Colors.Constants;
blackbrowsers.Checked = General.Settings.BlackBrowsers;
classicbilinear.Checked = General.Settings.ClassicBilinear;
visualbilinear.Checked = General.Settings.VisualBilinear;
qualitydisplay.Checked = General.Settings.QualityDisplay;
// Paste options
pasteoptions.Setup(General.Settings.PasteOptions.Copy());
// Allow plugins to add tabs
this.SuspendLayout();
controller = new PreferencesController(this);
controller.AllowAddTab = true;
General.Plugins.OnShowPreferences(controller);
controller.AllowAddTab = false;
this.ResumeLayout(true);
// Done
allowapplycontrol = true;
}
#endregion
#region ================== OK / Cancel
// OK clicked
private void apply_Click(object sender, EventArgs e)
{
// Let the plugins know
controller.RaiseAccept();
// Check if we need to reload the resources
reloadresources |= (General.Settings.ImageBrightness != imagebrightness.Value);
reloadresources |= (General.Settings.PreviewImageSize != previewsize.Value);
// Apply interface
General.Settings.ImageBrightness = imagebrightness.Value;
General.Settings.SquareThings = squarethings.Checked;
General.Settings.DoubleSidedAlpha = 1.0f - (float)(doublesidedalpha.Value * 0.1f);
General.Settings.DefaultViewMode = defaultviewmode.SelectedIndex;
General.Settings.VisualFOV = fieldofview.Value * 10;
General.Settings.MouseSpeed = mousespeed.Value * 100;
General.Settings.MoveSpeed = movespeed.Value * 100;
General.Settings.ViewDistance = (float)viewdistance.Value * 200.0f;
General.Settings.InvertYAxis = invertyaxis.Checked;
General.Settings.ScriptFontBold = scriptfontbold.Checked;
General.Settings.ScriptFontName = scriptfontname.Text;
General.Settings.ScriptOnTop = scriptontop.Checked;
General.Settings.ScriptTabWidth = scripttabwidth.GetResult(General.Settings.ScriptTabWidth);
General.Settings.ScriptAutoIndent = scriptautoindent.Checked;
General.Settings.PreviewImageSize = previewsize.Value;
General.Settings.AutoScrollSpeed = autoscrollspeed.Value;
General.Settings.ZoomFactor = zoomfactor.Value;
General.Settings.AnimateVisualSelection = animatevisualselection.Checked;
General.Settings.DockersPosition = dockersposition.SelectedIndex;
General.Settings.CollapseDockers = collapsedockers.Checked;
General.Settings.ToolbarFile = toolbar_file.Checked;
General.Settings.ToolbarScript = toolbar_script.Checked;
General.Settings.ToolbarUndo = toolbar_undo.Checked;
General.Settings.ToolbarCopy = toolbar_copy.Checked;
General.Settings.ToolbarPrefabs = toolbar_prefabs.Checked;
General.Settings.ToolbarFilter = toolbar_filter.Checked;
General.Settings.ToolbarViewModes = toolbar_viewmodes.Checked;
General.Settings.ToolbarGeometry = toolbar_geometry.Checked;
General.Settings.ToolbarTesting = toolbar_testing.Checked;
General.Settings.GZToolbarGZDoom = toolbar_gzdoom.Checked; //mxd
General.Settings.ShowTextureSizes = showtexturesizes.Checked;
// Script font size
int fontsize = 8;
int.TryParse(scriptfontsize.Text, out fontsize);
General.Settings.ScriptFontSize = fontsize;
// Apply control keys to actions
//foreach(ListViewItem item in listactions.Items)
foreach(ListViewItem item in actionListItems) //mxd
General.Actions[item.Name].SetShortcutKey((int)item.SubItems[1].Tag);
// Apply the colors
// TODO: Make this automated by using the collection
General.Colors.Background = colorbackcolor.Color;
General.Colors.Vertices = colorvertices.Color;
General.Colors.Linedefs = colorlinedefs.Color;
General.Colors.Highlight = colorhighlight.Color;
General.Colors.Selection = colorselection.Color;
General.Colors.Indication = colorindication.Color;
General.Colors.Grid = colorgrid.Color;
General.Colors.Grid64 = colorgrid64.Color;
General.Colors.ScriptBackground = colorscriptbackground.Color;
General.Colors.LineNumbers = colorlinenumbers.Color;
General.Colors.PlainText = colorplaintext.Color;
General.Colors.Comments = colorcomments.Color;
General.Colors.Keywords = colorkeywords.Color;
General.Colors.Literals = colorliterals.Color;
General.Colors.Constants = colorconstants.Color;
//mxd
General.Colors.ModelWireframe = colorMD3.Color;
General.Colors.InfoLine = colorInfo.Color;
General.Colors.NewSector = colorNewSectors.Color;
General.Colors.CreateAssistColors();
General.Settings.BlackBrowsers = blackbrowsers.Checked;
General.Settings.ClassicBilinear = classicbilinear.Checked;
General.Settings.VisualBilinear = visualbilinear.Checked;
General.Settings.QualityDisplay = qualitydisplay.Checked;
//mxd
General.Settings.GZSynchCameras = cbSynchCameras.Checked;
General.Settings.GZMaxDynamicLights = tbDynLightCount.Value;
General.Settings.GZDynamicLightRadius = ((float)tbDynLightSize.Value / 10.0f);
General.Settings.GZDynamicLightIntensity = ((float)tbDynLightIntensity.Value / 10.0f);
General.Settings.GZStretchModels = cbStretchModels.Checked;
General.Settings.GZVertexScale2D = (float)vertexScale.Value;
General.Settings.GZOldHighlightMode = cbOldHighlightMode.Checked;
General.Settings.GZLoadDefaultLightDefinitions = cbLoadGameGldefs.Checked;
General.Settings.GZNewSectorsCount = tbNumSectors.Value;
// Paste options
General.Settings.PasteOptions = pasteoptions.GetOptions();
// Let the plugins know we're closing
General.Plugins.OnClosePreferences(controller);
// Close
this.DialogResult = DialogResult.OK;
this.Close();
}
// Cancel clicked
private void cancel_Click(object sender, EventArgs e)
{
// Let the plugins know
controller.RaiseCancel();
// Let the plugins know we're closing
General.Plugins.OnClosePreferences(controller);
// Close
this.DialogResult = DialogResult.Cancel;
this.Close();
}
#endregion
#region ================== Tabs
// This adds a tab page
public void AddTabPage(TabPage tab)
{
tabs.TabPages.Add(tab);
}
// Tab changes
private void tabs_SelectedIndexChanged(object sender, EventArgs e)
{
// Enable/disable stuff with tabs
if(tabs.SelectedTab != tabkeys)
{
this.AcceptButton = apply;
this.CancelButton = cancel;
apply.TabStop = true;
cancel.TabStop = true;
tabs.TabStop = true;
}
else
{
this.AcceptButton = null;
this.CancelButton = null;
apply.TabStop = false;
cancel.TabStop = false;
tabs.TabStop = false;
}
colorsgroup1.Visible = (tabs.SelectedTab == tabcolors);
//colorsgroup2.Visible = (tabs.SelectedTab == tabcolors);
colorsgroup3.Visible = (tabs.SelectedTab == tabcolors);
}
#endregion
#region ================== Interface Panel
private void previewsize_ValueChanged(object sender, EventArgs e)
{
int size = PreviewManager.PREVIEW_SIZES[previewsize.Value];
previewsizelabel.Text = size.ToString() + " x " + size.ToString();
}
private void fieldofview_ValueChanged(object sender, EventArgs e)
{
int value = fieldofview.Value * 10;
fieldofviewlabel.Text = value.ToString() + (char)176;
}
private void mousespeed_ValueChanged(object sender, EventArgs e)
{
int value = mousespeed.Value * 100;
mousespeedlabel.Text = value.ToString();
}
private void movespeed_ValueChanged(object sender, EventArgs e)
{
int value = movespeed.Value * 100;
movespeedlabel.Text = value.ToString();
}
private void viewdistance_ValueChanged(object sender, EventArgs e)
{
int value = viewdistance.Value * 200;
viewdistancelabel.Text = value.ToString() + " mp";
}
private void scriptfontname_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateScriptFontPreview();
}
private void scriptfontsize_SelectedIndexChanged(object sender, EventArgs e)
{
UpdateScriptFontPreview();
}
private void scriptfontbold_CheckedChanged(object sender, EventArgs e)
{
UpdateScriptFontPreview();
}
private void autoscrollspeed_ValueChanged(object sender, EventArgs e)
{
if(autoscrollspeed.Value == 0)
autoscrollspeedlabel.Text = "Off";
else
autoscrollspeedlabel.Text = autoscrollspeed.Value.ToString() + "x";
}
private void zoomfactor_ValueChanged(object sender, EventArgs e)
{
zoomfactorlabel.Text = (zoomfactor.Value * 10).ToString() + "%";
}
//mxd
private void vertexScale_ValueChanged(object sender, EventArgs e) {
vertexScaleLabel.Text = vertexScale.Value * 100 + "%" + (vertexScale.Value == 1 ? " (default)" : "");
}
// This updates the script font preview label
private void UpdateScriptFontPreview()
{
if((scriptfontname.SelectedIndex > -1) &&
(scriptfontsize.SelectedIndex > -1))
{
scriptfontlabel.Text = scriptfontname.Text;
scriptfontlabel.BackColor = General.Colors.ScriptBackground.ToColor();
scriptfontlabel.ForeColor = General.Colors.PlainText.ToColor();
FontFamily ff = new FontFamily(scriptfontname.Text);
FontStyle style = FontStyle.Regular;
if(scriptfontbold.Checked)
{
// Prefer bold over regular
if(ff.IsStyleAvailable(FontStyle.Bold))
style = FontStyle.Bold;
else if(ff.IsStyleAvailable(FontStyle.Regular))
style = FontStyle.Regular;
else if(ff.IsStyleAvailable(FontStyle.Italic))
style = FontStyle.Italic;
else if(ff.IsStyleAvailable(FontStyle.Underline))
style = FontStyle.Underline;
else if(ff.IsStyleAvailable(FontStyle.Strikeout))
style = FontStyle.Strikeout;
}
else
{
// Prefer regular over bold
if(ff.IsStyleAvailable(FontStyle.Regular))
style = FontStyle.Regular;
else if(ff.IsStyleAvailable(FontStyle.Bold))
style = FontStyle.Bold;
else if(ff.IsStyleAvailable(FontStyle.Italic))
style = FontStyle.Italic;
else if(ff.IsStyleAvailable(FontStyle.Underline))
style = FontStyle.Underline;
else if(ff.IsStyleAvailable(FontStyle.Strikeout))
style = FontStyle.Strikeout;
}
int fontsize = 8;
int.TryParse(scriptfontsize.Text, out fontsize);
if(ff.IsStyleAvailable(style))
scriptfontlabel.Font = new Font(scriptfontname.Text, (float)fontsize, style);
}
}
#endregion
#region ================== Controls Panel
// This updates the used keys info
private void UpdateKeyUsedActions()
{
List<string> usedactions = new List<string>();
// Anything selected?
if(listactions.SelectedItems.Count > 0)
{
// Get info
int thiskey = (int)listactions.SelectedItems[0].SubItems[1].Tag;
if(thiskey != 0)
{
// Find actions with same key
foreach(ListViewItem item in actionListItems)
{
// Don't count the selected action
if(item != listactions.SelectedItems[0])
{
Actions.Action a = General.Actions[item.Name];
int akey = (int)item.SubItems[1].Tag;
// Check if the key combination matches
if((thiskey & a.ShortcutMask) == (akey & a.ShortcutMask))
usedactions.Add(a.Title + " (" + General.Actions.Categories[a.Category] + ")");
}
}
}
}
// Update info
if(usedactions.Count == 0)
{
keyusedlabel.Visible = false;
keyusedlist.Visible = false;
keyusedlist.Items.Clear();
}
else
{
keyusedlist.Items.Clear();
foreach(string a in usedactions) keyusedlist.Items.Add(a);
keyusedlabel.Visible = true;
keyusedlist.Visible = true;
}
}
// This fills the list of available controls for the specified action
private void FillControlsList(Actions.Action a)
{
actioncontrol.Items.Clear();
// Fill combobox with special controls
if(a.AllowMouse)
{
actioncontrol.Items.Add(new KeyControl(Keys.LButton, "LButton"));
actioncontrol.Items.Add(new KeyControl(Keys.MButton, "MButton"));
actioncontrol.Items.Add(new KeyControl(Keys.RButton, "RButton"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton1, "XButton1"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton2, "XButton2"));
}
if(a.AllowScroll)
{
actioncontrol.Items.Add(new KeyControl(SpecialKeys.MScrollUp, "ScrollUp"));
actioncontrol.Items.Add(new KeyControl(SpecialKeys.MScrollDown, "ScrollDown"));
}
if(a.AllowMouse && !a.DisregardShift)
{
actioncontrol.Items.Add(new KeyControl(Keys.LButton | Keys.Shift, "Shift+LButton"));
actioncontrol.Items.Add(new KeyControl(Keys.MButton | Keys.Shift, "Shift+MButton"));
actioncontrol.Items.Add(new KeyControl(Keys.RButton | Keys.Shift, "Shift+RButton"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton1 | Keys.Shift, "Shift+XButton1"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton2 | Keys.Shift, "Shift+XButton2"));
}
if(a.AllowScroll && !a.DisregardShift)
{
actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollUp | (int)Keys.Shift, "Shift+ScrollUp"));
actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollDown | (int)Keys.Shift, "Shift+ScrollDown"));
}
if(a.AllowMouse && !a.DisregardControl)
{
actioncontrol.Items.Add(new KeyControl(Keys.LButton | Keys.Control, "Ctrl+LButton"));
actioncontrol.Items.Add(new KeyControl(Keys.MButton | Keys.Control, "Ctrl+MButton"));
actioncontrol.Items.Add(new KeyControl(Keys.RButton | Keys.Control, "Ctrl+RButton"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton1 | Keys.Control, "Ctrl+XButton1"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton2 | Keys.Control, "Ctrl+XButton2"));
}
if(a.AllowScroll && !a.DisregardControl)
{
actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollUp | (int)Keys.Control, "Ctrl+ScrollUp"));
actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollDown | (int)Keys.Control, "Ctrl+ScrollDown"));
}
if(a.AllowMouse && !a.DisregardShift && !a.DisregardControl)
{
actioncontrol.Items.Add(new KeyControl(Keys.LButton | Keys.Shift | Keys.Control, "Ctrl+Shift+LButton"));
actioncontrol.Items.Add(new KeyControl(Keys.MButton | Keys.Shift | Keys.Control, "Ctrl+Shift+MButton"));
actioncontrol.Items.Add(new KeyControl(Keys.RButton | Keys.Shift | Keys.Control, "Ctrl+Shift+RButton"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton1 | Keys.Shift | Keys.Control, "Ctrl+Shift+XButton1"));
actioncontrol.Items.Add(new KeyControl(Keys.XButton2 | Keys.Shift | Keys.Control, "Ctrl+Shift+XButton2"));
}
if(a.AllowScroll && !a.DisregardShift && !a.DisregardControl)
{
actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollUp | (int)Keys.Shift | (int)Keys.Control, "Ctrl+Shift+ScrollUp"));
actioncontrol.Items.Add(new KeyControl((int)SpecialKeys.MScrollDown | (int)Keys.Shift | (int)Keys.Control, "Ctrl+Shift+ScrollDown"));
}
}
// Item selected
private void listactions_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
Actions.Action action;
KeyControl keycontrol;
string disregardkeys = "";
int key;
// Anything selected?
if(listactions.SelectedItems.Count > 0)
{
// Begin updating
allowapplycontrol = false;
// Get the selected action
action = General.Actions[listactions.SelectedItems[0].Name];
key = (int)listactions.SelectedItems[0].SubItems[1].Tag;
disregardshift = action.DisregardShift;
disregardcontrol = action.DisregardControl;
// Enable panel
actioncontrolpanel.Enabled = true;
actiontitle.Text = action.Title;
actiondescription.Text = action.Description;
actioncontrol.SelectedIndex = -1;
actionkey.Text = "";
if(disregardshift && disregardcontrol)
disregardkeys = "Shift and Control";
else if(disregardshift)
disregardkeys = "Shift";
else if(disregardcontrol)
disregardkeys = "Control";
disregardshiftlabel.Text = disregardshiftlabel.Tag.ToString().Replace("%s", disregardkeys);
disregardshiftlabel.Visible = disregardshift | disregardcontrol;
// Fill special controls list
FillControlsList(action);
// See if the key is in the combobox
for(int i = 0; i < actioncontrol.Items.Count; i++)
{
// Select it when the key is found here
keycontrol = (KeyControl)actioncontrol.Items[i];
if(keycontrol.key == key) actioncontrol.SelectedIndex = i;
}
// Otherwise display the key in the textbox
if(actioncontrol.SelectedIndex == -1)
actionkey.Text = Actions.Action.GetShortcutKeyDesc(key);
// Show actions with same key
UpdateKeyUsedActions();
// Focus to the input box
actionkey.Focus();
// Done
allowapplycontrol = true;
}
}
// Key released
private void listactions_KeyUp(object sender, KeyEventArgs e)
{
// Nothing selected?
if(listactions.SelectedItems.Count == 0)
{
// Disable panel
actioncontrolpanel.Enabled = false;
actiontitle.Text = "(select an action from the list)";
actiondescription.Text = "";
actionkey.Text = "";
actioncontrol.SelectedIndex = -1;
disregardshiftlabel.Visible = false;
}
// Show actions with same key
UpdateKeyUsedActions();
}
// Mouse released
private void listactions_MouseUp(object sender, MouseEventArgs e)
{
listactions_KeyUp(sender, new KeyEventArgs(Keys.None));
// Focus to the input box
actionkey.Focus();
}
// Key combination pressed
private void actionkey_KeyDown(object sender, KeyEventArgs e)
{
int key = (int)e.KeyData;
e.SuppressKeyPress = true;
// Leave when not allowed to update
if(!allowapplycontrol) return;
// Anything selected?
if(listactions.SelectedItems.Count > 0)
{
// Begin updating
allowapplycontrol = false;
// Remove modifier keys from the key if needed
if(disregardshift) key &= ~(int)Keys.Shift;
if(disregardcontrol) key &= ~(int)Keys.Control;
// Deselect anything from the combobox
actioncontrol.SelectedIndex = -1;
// Apply the key combination
listactions.SelectedItems[0].SubItems[1].Text = Actions.Action.GetShortcutKeyDesc(key);
listactions.SelectedItems[0].SubItems[1].Tag = key;
actionkey.Text = Actions.Action.GetShortcutKeyDesc(key);
// Show actions with same key
UpdateKeyUsedActions();
// Done
allowapplycontrol = true;
}
}
// Key combination displayed
private void actionkey_TextChanged(object sender, EventArgs e)
{
// Cursor to the end
actionkey.SelectionStart = actionkey.Text.Length;
actionkey.SelectionLength = 0;
}
// Special key selected
private void actioncontrol_SelectedIndexChanged(object sender, EventArgs e)
{
KeyControl key;
// Leave when not allowed to update
if(!allowapplycontrol) return;
// Anything selected?
if((actioncontrol.SelectedIndex > -1) && (listactions.SelectedItems.Count > 0))
{
// Begin updating
allowapplycontrol = false;
// Remove text from textbox
actionkey.Text = "";
// Get the key control
key = (KeyControl)actioncontrol.SelectedItem;
// Apply the key combination
listactions.SelectedItems[0].SubItems[1].Text = Actions.Action.GetShortcutKeyDesc(key.key);
listactions.SelectedItems[0].SubItems[1].Tag = key.key;
// Show actions with same key
UpdateKeyUsedActions();
// Focus to the input box
actionkey.Focus();
// Done
allowapplycontrol = true;
}
}
// Clear clicked
private void actioncontrolclear_Click(object sender, EventArgs e)
{
// Begin updating
allowapplycontrol = false;
// Clear textbox and combobox
actionkey.Text = "";
actioncontrol.SelectedIndex = -1;
// Apply the key combination
listactions.SelectedItems[0].SubItems[1].Text = "";
listactions.SelectedItems[0].SubItems[1].Tag = (int)0;
// Show actions with same key
UpdateKeyUsedActions();
// Focus to the input box
actionkey.Focus();
// Done
allowapplycontrol = true;
}
//mxd
private void bClearActionFilter_Click(object sender, EventArgs e) {
tbFilterActions.Clear();
}
//mxd
private void tbFilterActions_TextChanged(object sender, EventArgs e) {
listactions.BeginUpdate();
//restore everything
if(string.IsNullOrEmpty(tbFilterActions.Text)) {
//restore items
listactions.Items.Clear();
listactions.Items.AddRange(actionListItems.ToArray());
//restore groups
for(int i = 0; i < actionListItems.Count; i++) {
if(actionListItemsGroupIndices[i] != -1)
actionListItems[i].Group = listactions.Groups[actionListItemsGroupIndices[i]];
}
} else { //apply filtering
string match = tbFilterActions.Text.ToUpperInvariant();
for(int i = 0; i < actionListItems.Count; i++) {
if(actionListItems[i].Text.ToUpperInvariant().Contains(match)) {
//ensure visible
if(!listactions.Items.Contains(actionListItems[i])) {
listactions.Items.Add(actionListItems[i]);
//restore group
if(actionListItemsGroupIndices[i] != -1)
actionListItems[i].Group = listactions.Groups[actionListItemsGroupIndices[i]];
}
} else if(listactions.Items.Contains(actionListItems[i])) {
//ensure invisible
listactions.Items.Remove(actionListItems[i]);
}
}
}
listactions.Sort();
listactions.EndUpdate();
}
#endregion
#region ================== Colors Panel
private void imagebrightness_ValueChanged(object sender, EventArgs e)
{
imagebrightnesslabel.Text = "+ " + imagebrightness.Value.ToString() + " y";
}
private void doublesidedalpha_ValueChanged(object sender, EventArgs e)
{
int percent = doublesidedalpha.Value * 10;
doublesidedalphalabel.Text = percent.ToString() + "%";
}
//mxd
private void tbDynLightCount_ValueChanged(object sender, EventArgs e) {
labelDynLightCount.Text = tbDynLightCount.Value.ToString();
}
//mxd
private void tbDynLightSize_ValueChanged(object sender, EventArgs e) {
labelDynLightSize.Text = ((float)tbDynLightSize.Value / 10).ToString();
}
//mxd
private void tbDynLightIntensity_ValueChanged(object sender, EventArgs e) {
labelDynLightIntensity.Text = ((float)tbDynLightIntensity.Value / 10).ToString();
}
//mxd
private void tbNumSectors_ValueChanged(object sender, EventArgs e) {
numSectorsLabel.Text = tbNumSectors.Value.ToString();
}
#endregion
// Help
private void PreferencesForm_HelpRequested(object sender, HelpEventArgs hlpevent)
{
if(!actionkey.Focused)
{
General.ShowHelp("w_preferences.html");
hlpevent.Handled = true;
}
}
/*
// This writes all action help files using a template and some basic info from the actions.
// Also writes actioncontents.txt with all files to be inserted into Contents.hhc.
// Only used during development. Actual button to call this has been removed.
private void gobutton_Click(object sender, EventArgs e)
{
string template = File.ReadAllText(Path.Combine(General.AppPath, "..\\Help\\a_template.html"));
StringBuilder contents = new StringBuilder("\t<UL>\r\n");
string filename;
// Go for all actions
Action[] actions = General.Actions.GetAllActions();
foreach(Action a in actions)
{
StringBuilder actionhtml = new StringBuilder(template);
actionhtml.Replace("ACTIONTITLE", a.Title);
actionhtml.Replace("ACTIONDESCRIPTION", a.Description);
actionhtml.Replace("ACTIONCATEGORY", General.Actions.Categories[a.Category]);
filename = Path.Combine(General.AppPath, "..\\Help\\a_" + a.Name + ".html");
File.WriteAllText(filename, actionhtml.ToString());
contents.Append("\t\t<LI> <OBJECT type=\"text/sitemap\">\r\n");
contents.Append("\t\t\t<param name=\"Name\" value=\"" + a.Title + "\">\r\n");
contents.Append("\t\t\t<param name=\"Local\" value=\"a_" + a.Name + ".html\">\r\n");
contents.Append("\t\t\t</OBJECT>\r\n");
}
contents.Append("\t</UL>\r\n");
filename = Path.Combine(General.AppPath, "..\\Help\\actioncontents.txt");
File.WriteAllText(filename, contents.ToString());
}
*/
}
}