Skip to content

Commit

Permalink
TopView Option - EnableRightClickWaitTimer
Browse files Browse the repository at this point in the history
workaround for anomalous behavior (discovered on a Win10 system) when using
RMB click/double-click to place or clear tileslots ...
  • Loading branch information
kevL committed Oct 4, 2019
1 parent 71a0b5c commit 4f0d8b6
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 23 deletions.
7 changes: 3 additions & 4 deletions MapView/Forms/Observers/TopView/QuadrantPanel.cs
Expand Up @@ -165,23 +165,22 @@ protected override void OnMouseDown(MouseEventArgs e)
/// </summary>
/// <param name="button"></param>
/// <param name="clicks"></param>
/// <param name= "keySelectQuadrant"></param>
/// <param name="keySelectQuadrant">true if invoked by keyboard-input</param>
internal void Operate(MouseButtons button, int clicks, bool keySelectQuadrant = false)
{
if (Tile != null)
{
switch (button)
{
case MouseButtons.Left:
// clicks=1 is done by caller.
case MouseButtons.Left: // NOTE: clicks=1 is handled by caller.
if (clicks == 2)
ObserverManager.TileView.Control.SelectedTilepart = Tile[SelectedQuadrant];
break;

case MouseButtons.Right:
if (MainViewOverlay.that.FirstClick) // do not set a part in a quad unless a tile is selected.
{
if (!keySelectQuadrant)
if (!keySelectQuadrant && TopView.Optionables.EnableRightClickWaitTimer)
{
_t1.Stop();
++_t1Clicks;
Expand Down
12 changes: 10 additions & 2 deletions MapView/Forms/Observers/TopView/TopPanel.cs
Expand Up @@ -481,8 +481,16 @@ protected override void OnMouseDown(MouseEventArgs e)
case MouseButtons.Right:
if (MainViewOverlay.that.FirstClick)
{
ObserverManager.TopView .Control .QuadrantPanel.Operate(MouseButtons.Right, 1);
ObserverManager.TopRouteView.ControlTop.QuadrantPanel.Operate(MouseButtons.Right, 1);
int clicks;
if (TopView.Optionables.EnableRightClickWaitTimer)
{
clicks = 1;
}
else
clicks = e.Clicks;

ObserverManager.TopView .Control .QuadrantPanel.Operate(MouseButtons.Right, clicks);
ObserverManager.TopRouteView.ControlTop.QuadrantPanel.Operate(MouseButtons.Right, clicks);
}
break;
}
Expand Down
77 changes: 60 additions & 17 deletions MapView/Forms/Observers/TopView/TopViewOptionables.cs
Expand Up @@ -319,6 +319,31 @@ public Color SelectedQuadColor
get { return _selectedQuadColor; }
set { _selectedQuadColor = value; }
}



private const string cat_General = "General";

private const string str_EnableRightClickWaitTimer = "EnableRightClickWaitTimer";
private const bool def_EnableRightClickWaitTimer = false;

private bool _enablewait = def_EnableRightClickWaitTimer;
[Category(cat_General)]
[Description("If true then right-clicking or double right-clicking on"
+ " either a tile or a quadrant slot causes a very short delay"
+ " in order to detect whether a single or double click happened."
+ " This delay is used to bypass a single-click event [place"
+ " tilepart] if a double-click [clear tilepart] is detected"
+ " instead. If this option is false (default) then a double"
+ " right-click causes a tilepart to be placed and cleared in rapid"
+ " succession. WARNING: Enabling this option could cause TopView"
+ " to exhibit unstable behavior")]
[DefaultValue(def_EnableRightClickWaitTimer)]
public bool EnableRightClickWaitTimer
{
get { return _enablewait; }
set { _enablewait = value; }
}
#endregion Properties (optionable)


Expand Down Expand Up @@ -364,23 +389,25 @@ internal void LoadDefaults(Options options)

OptionChangedEvent changer = OnOptionChanged;

options.AddOptionDefault(str_GridLineColor, def_GridLineColor, changer);
options.AddOptionDefault(str_GridLineWidth, def_GridLineWidth, changer);
options.AddOptionDefault(str_GridLine10Color, def_GridLine10Color, changer);
options.AddOptionDefault(str_GridLine10Width, def_GridLine10Width, changer);

options.AddOptionDefault(str_FloorColor, def_FloorColor, changer);
options.AddOptionDefault(str_WestColor, def_WestColor, changer);
options.AddOptionDefault(str_WestWidth, def_WestWidth, changer);
options.AddOptionDefault(str_NorthColor, def_NorthColor, changer);
options.AddOptionDefault(str_NorthWidth, def_NorthWidth, changer);
options.AddOptionDefault(str_ContentColor, def_ContentColor, changer);

options.AddOptionDefault(str_SelectorColor, def_SelectorColor, changer);
options.AddOptionDefault(str_SelectorWidth, def_SelectorWidth, changer);
options.AddOptionDefault(str_SelectedColor, def_SelectedColor, changer);
options.AddOptionDefault(str_SelectedWidth, def_SelectedWidth, changer);
options.AddOptionDefault(str_SelectedQuadColor, def_SelectedQuadColor, OnQuadColorChanged);
options.AddOptionDefault(str_GridLineColor, def_GridLineColor, changer);
options.AddOptionDefault(str_GridLineWidth, def_GridLineWidth, changer);
options.AddOptionDefault(str_GridLine10Color, def_GridLine10Color, changer);
options.AddOptionDefault(str_GridLine10Width, def_GridLine10Width, changer);

options.AddOptionDefault(str_FloorColor, def_FloorColor, changer);
options.AddOptionDefault(str_WestColor, def_WestColor, changer);
options.AddOptionDefault(str_WestWidth, def_WestWidth, changer);
options.AddOptionDefault(str_NorthColor, def_NorthColor, changer);
options.AddOptionDefault(str_NorthWidth, def_NorthWidth, changer);
options.AddOptionDefault(str_ContentColor, def_ContentColor, changer);

options.AddOptionDefault(str_SelectorColor, def_SelectorColor, changer);
options.AddOptionDefault(str_SelectorWidth, def_SelectorWidth, changer);
options.AddOptionDefault(str_SelectedColor, def_SelectedColor, changer);
options.AddOptionDefault(str_SelectedWidth, def_SelectedWidth, changer);
options.AddOptionDefault(str_SelectedQuadColor, def_SelectedQuadColor, OnQuadColorChanged);

options.AddOptionDefault(str_EnableRightClickWaitTimer, def_EnableRightClickWaitTimer, OnFlagChanged);
}
#endregion Methods

Expand Down Expand Up @@ -430,6 +457,22 @@ private void OnQuadColorChanged(string key, object val)
ObserverManager.TopView .Control .QuadrantPanel.Invalidate();
ObserverManager.TopRouteView.ControlTop.QuadrantPanel.Invalidate();
}

/// <summary>
/// Sets the value of an optionable property but doesn't invalidate
/// anything.
/// </summary>
/// <param name="key">one of the standard keys of an optionable</param>
/// <param name="val">the value to set it to</param>
internal void OnFlagChanged(string key, object val)
{
// switch (key)
// {
// case str_EnableRightClickWaitTimer:
EnableRightClickWaitTimer = (bool)val;
// break;
// }
}
#endregion Events


Expand Down

0 comments on commit 4f0d8b6

Please sign in to comment.