diff --git a/MapView/Forms/Observers/TopView/QuadrantPanel.cs b/MapView/Forms/Observers/TopView/QuadrantPanel.cs index 93e765e0..e5ef292d 100644 --- a/MapView/Forms/Observers/TopView/QuadrantPanel.cs +++ b/MapView/Forms/Observers/TopView/QuadrantPanel.cs @@ -165,15 +165,14 @@ protected override void OnMouseDown(MouseEventArgs e) /// /// /// - /// + /// true if invoked by keyboard-input 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; @@ -181,7 +180,7 @@ internal void Operate(MouseButtons button, int clicks, bool keySelectQuadrant = 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; diff --git a/MapView/Forms/Observers/TopView/TopPanel.cs b/MapView/Forms/Observers/TopView/TopPanel.cs index 4b701bcb..57c58d50 100644 --- a/MapView/Forms/Observers/TopView/TopPanel.cs +++ b/MapView/Forms/Observers/TopView/TopPanel.cs @@ -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; } diff --git a/MapView/Forms/Observers/TopView/TopViewOptionables.cs b/MapView/Forms/Observers/TopView/TopViewOptionables.cs index 730be298..f534edde 100644 --- a/MapView/Forms/Observers/TopView/TopViewOptionables.cs +++ b/MapView/Forms/Observers/TopView/TopViewOptionables.cs @@ -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) @@ -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 @@ -430,6 +457,22 @@ private void OnQuadColorChanged(string key, object val) ObserverManager.TopView .Control .QuadrantPanel.Invalidate(); ObserverManager.TopRouteView.ControlTop.QuadrantPanel.Invalidate(); } + + /// + /// Sets the value of an optionable property but doesn't invalidate + /// anything. + /// + /// one of the standard keys of an optionable + /// the value to set it to + internal void OnFlagChanged(string key, object val) + { +// switch (key) +// { +// case str_EnableRightClickWaitTimer: + EnableRightClickWaitTimer = (bool)val; +// break; +// } + } #endregion Events