1
0
mirror of synced 2024-11-24 04:20:10 +01:00
TaikoSoundEditor/Commons/Controls/PathSelector.cs
2023-10-01 19:40:41 +03:00

77 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TaikoSoundEditor.Commons.Controls
{
[DefaultEvent("PathChanged")]
public partial class PathSelector : UserControl
{
public PathSelector()
{
InitializeComponent();
}
protected override void SetBoundsCore(
int x, int y, int width, int height, BoundsSpecified specified)
{
// EDIT: ADD AN EXTRA HEIGHT VALIDATION TO AVOID INITIALIZATION PROBLEMS
// BITWISE 'AND' OPERATION: IF ZERO THEN HEIGHT IS NOT INVOLVED IN THIS OPERATION
if ((specified & BoundsSpecified.Height) == 0 || height == DisplayBox.Height)
{
base.SetBoundsCore(x, y, width, DisplayBox.Height, specified);
Button.Width = 2 * DisplayBox.Height;
}
else
{
return; // RETURN WITHOUT DOING ANY RESIZING
}
}
public bool SelectsFolder { get; set; } = false;
public string Path
{
get => DisplayBox.Text;
set
{
DisplayBox.Text = value;
PathChanged?.Invoke(this, new EventArgs());
}
}
public delegate void OnPathChanged(object sender, EventArgs args);
public event OnPathChanged PathChanged;
public string Filter { get; set; } = "All files(*.*)|*.*";
private void Button_Click(object sender, EventArgs e)
{
if (SelectsFolder)
{
var dialog = new FolderPicker();
dialog.InputPath = DisplayBox.Text;
if (dialog.ShowDialog() == true)
{
Path = dialog.ResultPath;
}
}
else
{
var dialog = new OpenFileDialog();
dialog.Filter = Filter;
if (dialog.ShowDialog() == DialogResult.OK)
{
Path = dialog.FileName;
}
}
}
}
}