146 lines
7.2 KiB
C#
146 lines
7.2 KiB
C#
using System;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
|
|
namespace JJServiceManager
|
|
{
|
|
/// <summary>한 줄 입력 (글자 또는 비밀번호)</summary>
|
|
public sealed class TextPrompt : Window
|
|
{
|
|
private readonly TextBox _text;
|
|
private readonly PasswordBox _pw;
|
|
private readonly bool _password;
|
|
|
|
private TextPrompt(string title, string message, string initial, bool password, bool upper)
|
|
{
|
|
_password = password;
|
|
Title = title + AppInstance.TitleTag;
|
|
Width = 460;
|
|
SizeToContent = SizeToContent.Height;
|
|
ResizeMode = ResizeMode.NoResize;
|
|
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
|
ShowInTaskbar = false;
|
|
FontFamily = new FontFamily("Malgun Gothic");
|
|
FontSize = 13;
|
|
AppIcon.Apply(this);
|
|
|
|
var root = new StackPanel { Margin = new Thickness(18) };
|
|
root.Children.Add(new TextBlock { Text = message, TextWrapping = TextWrapping.Wrap, Margin = new Thickness(0, 0, 0, 10) });
|
|
if (password)
|
|
{
|
|
_pw = new PasswordBox { Height = 30, VerticalContentAlignment = VerticalAlignment.Center };
|
|
root.Children.Add(_pw);
|
|
}
|
|
else
|
|
{
|
|
_text = new TextBox
|
|
{
|
|
Height = 30,
|
|
VerticalContentAlignment = VerticalAlignment.Center,
|
|
Text = initial ?? "",
|
|
CharacterCasing = upper ? CharacterCasing.Upper : CharacterCasing.Normal,
|
|
FontFamily = upper ? new FontFamily("Consolas") : FontFamily,
|
|
FontWeight = upper ? FontWeights.Bold : FontWeights.Normal
|
|
};
|
|
root.Children.Add(_text);
|
|
}
|
|
var buttons = new StackPanel { Orientation = Orientation.Horizontal, HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(0, 14, 0, 0) };
|
|
var ok = new Button { Content = "확인", MinWidth = 80, IsDefault = true, FontWeight = FontWeights.Bold };
|
|
var cancel = new Button { Content = "취소", MinWidth = 80, IsCancel = true, Margin = new Thickness(6, 0, 0, 0) };
|
|
ok.Click += (s, e) => DialogResult = true;
|
|
buttons.Children.Add(ok);
|
|
buttons.Children.Add(cancel);
|
|
root.Children.Add(buttons);
|
|
Content = root;
|
|
Loaded += (s, e) =>
|
|
{
|
|
if (_pw != null) _pw.Focus();
|
|
else { _text.Focus(); _text.SelectAll(); }
|
|
};
|
|
}
|
|
|
|
private string Value => _password ? _pw.Password : _text.Text.Trim();
|
|
|
|
/// <summary>입력값 (취소하면 null)</summary>
|
|
public static string Ask(Window owner, string title, string message, string initial = "", bool password = false, bool upper = false)
|
|
{
|
|
var w = new TextPrompt(title, message, initial, password, upper);
|
|
if (owner != null && owner.IsVisible) w.Owner = owner;
|
|
return w.ShowDialog() == true ? w.Value : null;
|
|
}
|
|
}
|
|
|
|
/// <summary>중계 서버 비밀번호 변경 (지금 비밀번호 + 새 비밀번호 두 번)</summary>
|
|
public sealed class ChangePasswordWindow : Window
|
|
{
|
|
private readonly PasswordBox _old, _new1, _new2;
|
|
private readonly TextBlock _msg;
|
|
|
|
public string OldPassword => _old.Password;
|
|
public string NewPassword => _new1.Password;
|
|
|
|
private ChangePasswordWindow(string message, bool askOld)
|
|
{
|
|
Title = "중계 서버 비밀번호 변경" + AppInstance.TitleTag;
|
|
Width = 440;
|
|
SizeToContent = SizeToContent.Height;
|
|
ResizeMode = ResizeMode.NoResize;
|
|
WindowStartupLocation = WindowStartupLocation.CenterOwner;
|
|
ShowInTaskbar = false;
|
|
FontFamily = new FontFamily("Malgun Gothic");
|
|
FontSize = 13;
|
|
AppIcon.Apply(this);
|
|
|
|
var root = new StackPanel { Margin = new Thickness(18) };
|
|
root.Children.Add(new TextBlock { Text = message, TextWrapping = TextWrapping.Wrap, Margin = new Thickness(0, 0, 0, 10) });
|
|
var grid = new Grid();
|
|
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(120) });
|
|
grid.ColumnDefinitions.Add(new ColumnDefinition());
|
|
_old = new PasswordBox { Height = 28, Margin = new Thickness(0, 3, 0, 3) };
|
|
_new1 = new PasswordBox { Height = 28, Margin = new Thickness(0, 3, 0, 3) };
|
|
_new2 = new PasswordBox { Height = 28, Margin = new Thickness(0, 3, 0, 3) };
|
|
int row = 0;
|
|
void Add(string label, Control c)
|
|
{
|
|
grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });
|
|
var t = new TextBlock { Text = label, VerticalAlignment = VerticalAlignment.Center };
|
|
Grid.SetRow(t, row); Grid.SetRow(c, row); Grid.SetColumn(c, 1);
|
|
grid.Children.Add(t); grid.Children.Add(c);
|
|
row++;
|
|
}
|
|
if (askOld) Add("지금 비밀번호", _old);
|
|
Add("새 비밀번호", _new1);
|
|
Add("새 비밀번호 확인", _new2);
|
|
root.Children.Add(grid);
|
|
_msg = new TextBlock { Foreground = Brushes2.Stopped, Margin = new Thickness(0, 8, 0, 0), TextWrapping = TextWrapping.Wrap, Text = "8자 이상" };
|
|
root.Children.Add(_msg);
|
|
var buttons = new StackPanel { Orientation = Orientation.Horizontal, HorizontalAlignment = HorizontalAlignment.Right, Margin = new Thickness(0, 12, 0, 0) };
|
|
var ok = new Button { Content = "변경", MinWidth = 80, IsDefault = true, FontWeight = FontWeights.Bold };
|
|
var cancel = new Button { Content = "취소", MinWidth = 80, IsCancel = true, Margin = new Thickness(6, 0, 0, 0) };
|
|
ok.Click += (s, e) =>
|
|
{
|
|
if (askOld && _old.Password.Length == 0) { _msg.Text = "지금 비밀번호를 입력하세요."; return; }
|
|
if (_new1.Password.Length < 8) { _msg.Text = "새 비밀번호는 8자 이상이어야 합니다."; return; }
|
|
if (_new1.Password != _new2.Password) { _msg.Text = "새 비밀번호와 확인이 다릅니다."; return; }
|
|
if (askOld && _new1.Password == _old.Password) { _msg.Text = "지금과 다른 비밀번호를 입력하세요."; return; }
|
|
DialogResult = true;
|
|
};
|
|
buttons.Children.Add(ok);
|
|
buttons.Children.Add(cancel);
|
|
root.Children.Add(buttons);
|
|
Content = root;
|
|
Loaded += (s, e) => (askOld ? _old : _new1).Focus();
|
|
}
|
|
|
|
/// <summary>(지금 비밀번호, 새 비밀번호) 또는 취소하면 null. askOld=false면 지금 비밀번호는 빈 값</summary>
|
|
public static (string oldPw, string newPw)? Ask(Window owner, string message, bool askOld = true)
|
|
{
|
|
var w = new ChangePasswordWindow(message, askOld);
|
|
if (owner != null && owner.IsVisible) w.Owner = owner;
|
|
return w.ShowDialog() == true ? (w.OldPassword, w.NewPassword) : null;
|
|
}
|
|
}
|
|
}
|