summaryrefslogtreecommitdiff
path: root/grapher/Models/Options
diff options
context:
space:
mode:
authorJacobPalecki <[email protected]>2021-01-20 20:13:33 -0800
committerGitHub <[email protected]>2021-01-20 20:13:33 -0800
commit5b6479013c8f35df933dd57c680063f4db1e4028 (patch)
tree60dd7c67a0f163457da2519b42553382a39a591b /grapher/Models/Options
parentshow custom dialog on bad input (#63) (diff)
parentGuard against bad anisotropy args (diff)
downloadrawaccel-5b6479013c8f35df933dd57c680063f4db1e4028.tar.xz
rawaccel-5b6479013c8f35df933dd57c680063f4db1e4028.zip
Merge pull request #65 from JacobPalecki/Directional
Directionality Features + Graph Fidelity
Diffstat (limited to 'grapher/Models/Options')
-rw-r--r--grapher/Models/Options/AccelTypeOptions.cs1
-rw-r--r--grapher/Models/Options/ActiveValueLabelXY.cs12
-rw-r--r--grapher/Models/Options/ApplyOptions.cs49
-rw-r--r--grapher/Models/Options/Directionality/DirectionalityOptions.cs213
-rw-r--r--grapher/Models/Options/Option.cs10
-rw-r--r--grapher/Models/Options/OptionXY.cs26
6 files changed, 284 insertions, 27 deletions
diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs
index 4410a12..8d3fecb 100644
--- a/grapher/Models/Options/AccelTypeOptions.cs
+++ b/grapher/Models/Options/AccelTypeOptions.cs
@@ -289,7 +289,6 @@ namespace grapher
Limit,
Exponent,
Midpoint,
- WriteButton,
top);
}
diff --git a/grapher/Models/Options/ActiveValueLabelXY.cs b/grapher/Models/Options/ActiveValueLabelXY.cs
index 381779c..f5b593e 100644
--- a/grapher/Models/Options/ActiveValueLabelXY.cs
+++ b/grapher/Models/Options/ActiveValueLabelXY.cs
@@ -140,6 +140,18 @@ namespace grapher.Models.Options
}
}
+ public void Hide()
+ {
+ X.Hide();
+ Y.Hide();
+ }
+
+ public void Show()
+ {
+ X.Show();
+ Y.Show();
+ }
+
private void Align (int width)
{
FullWidth = width;
diff --git a/grapher/Models/Options/ApplyOptions.cs b/grapher/Models/Options/ApplyOptions.cs
index b8cc9bf..ffe430d 100644
--- a/grapher/Models/Options/ApplyOptions.cs
+++ b/grapher/Models/Options/ApplyOptions.cs
@@ -1,4 +1,5 @@
-using grapher.Models.Serialized;
+using grapher.Models.Options.Directionality;
+using grapher.Models.Serialized;
using System;
using System.Drawing;
using System.Windows.Forms;
@@ -10,24 +11,24 @@ namespace grapher.Models.Options
#region Constructors
public ApplyOptions(
- ToolStripMenuItem wholeVectorMenuItem,
- ToolStripMenuItem byComponentMenuItem,
CheckBox byComponentVectorXYLock,
AccelOptionSet optionSetX,
AccelOptionSet optionSetY,
+ DirectionalityOptions directionalityOptions,
OptionXY sensitivity,
Option rotation,
Label lockXYLabel,
AccelCharts accelCharts)
{
- WholeVectorMenuItem = wholeVectorMenuItem;
- ByComponentVectorMenuItem = byComponentMenuItem;
+ Directionality = directionalityOptions;
+ WholeVectorCheckBox = Directionality.WholeCheckBox;
+ ByComponentVectorCheckBox = Directionality.ByComponentCheckBox;
- WholeVectorMenuItem.Click += new System.EventHandler(OnWholeClicked);
- ByComponentVectorMenuItem.Click += new System.EventHandler(OnByComponentClicked);
+ WholeVectorCheckBox.Click += new System.EventHandler(OnWholeClicked);
+ ByComponentVectorCheckBox.Click += new System.EventHandler(OnByComponentClicked);
- WholeVectorMenuItem.CheckedChanged += new System.EventHandler(OnWholeCheckedChange);
- ByComponentVectorMenuItem.CheckedChanged += new System.EventHandler(OnByComponentCheckedChange);
+ WholeVectorCheckBox.CheckedChanged += new System.EventHandler(OnWholeCheckedChange);
+ ByComponentVectorCheckBox.CheckedChanged += new System.EventHandler(OnByComponentCheckedChange);
ByComponentVectorXYLock = byComponentVectorXYLock;
OptionSetX = optionSetX;
@@ -52,9 +53,9 @@ namespace grapher.Models.Options
#region Properties
- public ToolStripMenuItem WholeVectorMenuItem { get; }
+ public CheckBox WholeVectorCheckBox { get; }
- public ToolStripMenuItem ByComponentVectorMenuItem { get; }
+ public CheckBox ByComponentVectorCheckBox { get; }
public CheckBox ByComponentVectorXYLock { get; }
@@ -62,6 +63,8 @@ namespace grapher.Models.Options
public AccelOptionSet OptionSetY { get; }
+ public DirectionalityOptions Directionality { get; }
+
public OptionXY Sensitivity { get; }
public Option Rotation { get; }
@@ -114,8 +117,8 @@ namespace grapher.Models.Options
Sensitivity.SetActiveValues(xSens, ySens);
Rotation.SetActiveValue(rotation);
OptionSetX.SetActiveValues(xMode, xArgs);
- WholeVectorMenuItem.Checked = isWhole;
- ByComponentVectorMenuItem.Checked = !isWhole;
+ WholeVectorCheckBox.Checked = isWhole;
+ ByComponentVectorCheckBox.Checked = !isWhole;
ByComponentVectorXYLock.Checked = xArgs.Equals(yArgs);
OptionSetY.SetActiveValues(yMode, yArgs);
}
@@ -132,6 +135,8 @@ namespace grapher.Models.Options
settings.args.y,
settings.combineMagnitudes);
+ Directionality.SetActiveValues(settings);
+
AccelCharts.SetLogarithmic(
OptionSetX.Options.AccelerationType.LogarithmicCharts,
OptionSetY.Options.AccelerationType.LogarithmicCharts);
@@ -139,25 +144,27 @@ namespace grapher.Models.Options
public void OnWholeClicked(object sender, EventArgs e)
{
- if (!WholeVectorMenuItem.Checked)
+ if (!WholeVectorCheckBox.Checked)
{
- WholeVectorMenuItem.Checked = true;
- ByComponentVectorMenuItem.Checked = false;
+ WholeVectorCheckBox.Checked = true;
+ ByComponentVectorCheckBox.Checked = false;
+ Directionality.ToWhole();
}
}
public void OnByComponentClicked(object sender, EventArgs e)
{
- if (!ByComponentVectorMenuItem.Checked)
+ if (!ByComponentVectorCheckBox.Checked)
{
- WholeVectorMenuItem.Checked = false;
- ByComponentVectorMenuItem.Checked = true;
+ WholeVectorCheckBox.Checked = false;
+ ByComponentVectorCheckBox.Checked = true;
+ Directionality.ToByComponent();
}
}
public void OnWholeCheckedChange(object sender, EventArgs e)
{
- if (WholeVectorMenuItem.Checked)
+ if (WholeVectorCheckBox.Checked)
{
EnableWholeApplication();
}
@@ -165,7 +172,7 @@ namespace grapher.Models.Options
public void OnByComponentCheckedChange(object sender, EventArgs e)
{
- if (ByComponentVectorMenuItem.Checked)
+ if (ByComponentVectorCheckBox.Checked)
{
EnableByComponentApplication();
}
diff --git a/grapher/Models/Options/Directionality/DirectionalityOptions.cs b/grapher/Models/Options/Directionality/DirectionalityOptions.cs
new file mode 100644
index 0000000..c21b932
--- /dev/null
+++ b/grapher/Models/Options/Directionality/DirectionalityOptions.cs
@@ -0,0 +1,213 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace grapher.Models.Options.Directionality
+{
+ public class DirectionalityOptions
+ {
+ public DirectionalityOptions(
+ Panel containingPanel,
+ Label directionalityLabel,
+ Label directionalityX,
+ Label directionalityY,
+ Label directionalityActiveValueTitle,
+ Option lpNorm,
+ OptionXY domain,
+ OptionXY range,
+ CheckBox wholeCheckBox,
+ CheckBox byComponentCheckBox,
+ int top)
+ {
+ ContainingPanel = containingPanel;
+ DirectionalityLabel = directionalityLabel;
+ DirectionalityX = directionalityX;
+ DirectionalityY = directionalityY;
+ DirectionalityActiveValueTitle = directionalityActiveValueTitle;
+ LpNorm = lpNorm;
+ Domain = domain;
+ Range = range;
+ WholeCheckBox = wholeCheckBox;
+ ByComponentCheckBox = byComponentCheckBox;
+
+ ContainingPanel.Paint += Panel_Paint;
+ DirectionalityLabel.Click += Title_click;
+ ContainingPanel.Top = top;
+ DirectionalityLabel.Left = Constants.DirectionalityTitlePad;
+ DirectionalityLabel.Top = Constants.DirectionalityTitlePad;
+ IsHidden = false;
+ ToWhole();
+ Hide();
+ }
+
+ public Panel ContainingPanel { get; }
+
+ public Label DirectionalityLabel { get; }
+
+ public Label DirectionalityX { get; }
+
+ public Label DirectionalityY { get; }
+
+ public Label DirectionalityActiveValueTitle { get; }
+
+ public Option LpNorm { get; }
+
+ public OptionXY Domain { get; }
+
+ public OptionXY Range { get; }
+
+ public CheckBox WholeCheckBox { get; }
+
+ public CheckBox ByComponentCheckBox { get; }
+
+ public int OpenHeight { get => WholeCheckBox.Bottom - DirectionalityLabel.Top + 2 * Constants.DirectionalityTitlePad; }
+
+ public int ClosedHeight { get => DirectionalityLabel.Height + 2 * Constants.DirectionalityTitlePad; }
+
+ private bool IsHidden { get; set; }
+
+ public DomainArgs GetDomainArgs()
+ {
+ if (!ByComponentCheckBox.Checked)
+ {
+ return new DomainArgs
+ {
+ domainXY = new Vec2<double>
+ {
+ x = Domain.Fields.X,
+ y = Domain.Fields.Y,
+ },
+ lpNorm = LpNorm.Field.Data,
+ };
+ }
+ else
+ {
+ return new DomainArgs
+ {
+ domainXY = new Vec2<double>
+ {
+ x = 1,
+ y = 1,
+ },
+ lpNorm = 2,
+ };
+
+ }
+ }
+
+ public Vec2<double> GetRangeXY()
+ {
+ if (!ByComponentCheckBox.Checked)
+ {
+ return new Vec2<double>
+ {
+ x = Range.Fields.X,
+ y = Range.Fields.Y,
+ };
+ }
+ else
+ {
+ return new Vec2<double>
+ {
+ x = 1,
+ y = 1,
+ };
+ }
+
+ }
+
+ public void SetActiveValues(DriverSettings settings)
+ {
+ Domain.SetActiveValues(settings.domainArgs.domainXY.x, settings.domainArgs.domainXY.y);
+ LpNorm.SetActiveValue(settings.domainArgs.lpNorm);
+ Range.SetActiveValues(settings.rangeXY.x, settings.rangeXY.y);
+ }
+
+ public void Hide()
+ {
+ if (!IsHidden)
+ {
+ DirectionalityX.Hide();
+ DirectionalityY.Hide();
+ DirectionalityActiveValueTitle.Hide();
+ LpNorm.Hide();
+ Domain.Hide();
+ Range.Hide();
+ WholeCheckBox.Hide();
+ ByComponentCheckBox.Hide();
+ DirectionalityLabel.Text = Constants.DirectionalityTitleClosed;
+ DrawHidden();
+ IsHidden = true;
+ }
+ }
+
+ public void Show()
+ {
+ if (IsHidden)
+ {
+ DirectionalityX.Show();
+ DirectionalityY.Show();
+ DirectionalityActiveValueTitle.Show();
+ LpNorm.Show();
+ Domain.Show();
+ Range.Show();
+ Range.Fields.LockCheckBox.Hide();
+ WholeCheckBox.Show();
+ ByComponentCheckBox.Show();
+ DirectionalityLabel.Text = Constants.DirectionalityTitleOpen;
+ DrawShown();
+ IsHidden = false;
+ }
+ }
+
+ public void ToByComponent()
+ {
+ LpNorm.SetToUnavailable();
+ Domain.SetToUnavailable();
+ Range.SetToUnavailable();
+ }
+
+ public void ToWhole()
+ {
+ LpNorm.SetToAvailable();
+ Domain.SetToAvailable();
+ Range.SetToAvailable();
+ }
+
+ private void DrawHidden()
+ {
+ ContainingPanel.Height = ClosedHeight;
+ ContainingPanel.Invalidate();
+ }
+
+ private void DrawShown()
+ {
+ ContainingPanel.Height = OpenHeight;
+ ContainingPanel.Invalidate();
+ }
+
+ private void Panel_Paint(object sender, PaintEventArgs e)
+ {
+ Color col = Color.DarkGray;
+ ButtonBorderStyle bbs = ButtonBorderStyle.Dashed;
+ int thickness = 2;
+ ControlPaint.DrawBorder(e.Graphics, this.ContainingPanel.ClientRectangle, col, thickness, bbs, col, thickness, bbs, col, thickness, bbs, col, thickness, bbs);
+ }
+
+ private void Title_click(object sender, EventArgs e)
+ {
+ if (IsHidden)
+ {
+ Show();
+ }
+ else
+ {
+ Hide();
+ }
+ }
+ }
+}
diff --git a/grapher/Models/Options/Option.cs b/grapher/Models/Options/Option.cs
index d5129d5..c6b68ba 100644
--- a/grapher/Models/Options/Option.cs
+++ b/grapher/Models/Options/Option.cs
@@ -171,6 +171,16 @@ namespace grapher
ActiveValueLabel.Align();
}
+ public void SetToUnavailable()
+ {
+ Field.SetToUnavailable();
+ }
+
+ public void SetToAvailable()
+ {
+ Field.SetToDefault();
+ }
+
#endregion Methods
}
}
diff --git a/grapher/Models/Options/OptionXY.cs b/grapher/Models/Options/OptionXY.cs
index b4a2b27..102d05d 100644
--- a/grapher/Models/Options/OptionXY.cs
+++ b/grapher/Models/Options/OptionXY.cs
@@ -22,8 +22,9 @@ namespace grapher
Form containingForm,
double defaultData,
Label label,
- ActiveValueLabelXY activeValueLabels)
- : this(new FieldXY(xBox, yBox, lockCheckBox, containingForm, defaultData), label, activeValueLabels)
+ ActiveValueLabelXY activeValueLabels,
+ bool allowCombined = true)
+ : this(new FieldXY(xBox, yBox, lockCheckBox, containingForm, defaultData, allowCombined), label, activeValueLabels)
{
}
@@ -35,7 +36,8 @@ namespace grapher
double defaultData,
Label label,
ActiveValueLabelXY activeValueLabels,
- string startingName):
+ string startingName,
+ bool allowCombined = true):
this(
xBox,
yBox,
@@ -43,7 +45,8 @@ namespace grapher
containingForm,
defaultData,
label,
- activeValueLabels)
+ activeValueLabels,
+ allowCombined)
{
SetName(startingName);
}
@@ -124,7 +127,6 @@ namespace grapher
{
ActiveValueLabels.SetValues(x, y);
Fields.SetActive(x, y);
-
}
public override void AlignActiveValues()
@@ -137,6 +139,7 @@ namespace grapher
Fields.Hide();
Fields.LockCheckBox.Hide();
Label.Hide();
+ ActiveValueLabels.Hide();
}
public void Show()
@@ -144,6 +147,7 @@ namespace grapher
Fields.Show();
Fields.LockCheckBox.Show();
Label.Show();
+ ActiveValueLabels.Show();
}
public override void Show(string name)
@@ -153,6 +157,18 @@ namespace grapher
Show();
}
+ public void SetToUnavailable()
+ {
+ Fields.XField.SetToUnavailable();
+ Fields.YField.SetToUnavailable();
+ }
+
+ public void SetToAvailable()
+ {
+ Fields.XField.SetToDefault();
+ Fields.YField.SetToDefault();
+ }
+
#endregion Methods
}
}