102 lines
3.0 KiB
C#
102 lines
3.0 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Graphing.Forms;
|
|
|
|
public partial class SetZoomForm : Form
|
|
{
|
|
private readonly GraphForm refForm;
|
|
|
|
private bool boxSelectEnabled;
|
|
|
|
public SetZoomForm(GraphForm refForm)
|
|
{
|
|
InitializeComponent();
|
|
this.refForm = refForm;
|
|
|
|
refForm.Paint += (o, e) => RedeclareValues();
|
|
RedeclareValues();
|
|
}
|
|
|
|
private void EnableBoxSelect_Click(object? sender, EventArgs e)
|
|
{
|
|
boxSelectEnabled = !boxSelectEnabled;
|
|
refForm.canBoxSelect = boxSelectEnabled;
|
|
|
|
if (boxSelectEnabled)
|
|
{
|
|
EnableBoxSelect.Text = $"Cancel ...";
|
|
refForm.Focus();
|
|
}
|
|
else
|
|
{
|
|
EnableBoxSelect.Text = "Box Select";
|
|
}
|
|
}
|
|
private void MatchAspectButton_Click(object? sender, EventArgs e)
|
|
{
|
|
double zoomXFactor = refForm.ZoomLevel.x / refForm.ZoomLevel.y;
|
|
double actualXFactor = refForm.ClientRectangle.Width / refForm.ClientRectangle.Height;
|
|
|
|
double diff = actualXFactor / zoomXFactor;
|
|
int newWidth = (int)(refForm.Width / diff);
|
|
refForm.ZoomLevel = new(refForm.ZoomLevel.x * diff, refForm.ZoomLevel.y);
|
|
|
|
int maxScreenWidth = Screen.FromControl(refForm).WorkingArea.Width;
|
|
if (newWidth >= maxScreenWidth)
|
|
{
|
|
refForm.Location = new(0, refForm.Location.Y);
|
|
|
|
double xScaleFactor = (double)maxScreenWidth / newWidth;
|
|
newWidth = maxScreenWidth;
|
|
refForm.Height = (int)(refForm.Height * xScaleFactor);
|
|
refForm.ZoomLevel = new(refForm.ZoomLevel.x * xScaleFactor, refForm.ZoomLevel.y * xScaleFactor);
|
|
}
|
|
|
|
refForm.Width = newWidth;
|
|
}
|
|
private void NormalizeButton_Click(object? sender, EventArgs e)
|
|
{
|
|
double factor = 1 / Math.Min(refForm.ZoomLevel.x, refForm.ZoomLevel.y);
|
|
refForm.ZoomLevel = new(factor * refForm.ZoomLevel.x, factor * refForm.ZoomLevel.y);
|
|
}
|
|
private void ResetButton_Click(object? sender, EventArgs e)
|
|
{
|
|
refForm.ResetAllViewport();
|
|
}
|
|
|
|
private void RedeclareValues()
|
|
{
|
|
bool enabled = !refForm.ViewportLocked;
|
|
|
|
Float2 minGraph = refForm.MinVisibleGraph,
|
|
maxGraph = refForm.MaxVisibleGraph;
|
|
|
|
MinBoxX.Text = $"{minGraph.x:0.000}";
|
|
MaxBoxX.Text = $"{maxGraph.x:0.000}";
|
|
MinBoxY.Text = $"{minGraph.y:0.000}";
|
|
MaxBoxY.Text = $"{maxGraph.y:0.000}";
|
|
|
|
ViewportLock.Checked = !enabled;
|
|
EnableBoxSelect.Enabled = enabled;
|
|
MatchAspectButton.Enabled = enabled;
|
|
NormalizeButton.Enabled = enabled;
|
|
ResetButton.Enabled = enabled;
|
|
MinBoxX.Enabled = enabled;
|
|
MaxBoxX.Enabled = enabled;
|
|
MinBoxY.Enabled = enabled;
|
|
MaxBoxY.Enabled = enabled;
|
|
}
|
|
|
|
internal void CompleteBoxSelection()
|
|
{
|
|
if (boxSelectEnabled) EnableBoxSelect_Click(null, new());
|
|
}
|
|
|
|
private void ViewportLock_CheckedChanged(object? sender, EventArgs e)
|
|
{
|
|
refForm.ViewportLocked = ViewportLock.Checked;
|
|
RedeclareValues();
|
|
}
|
|
}
|