SlunkCrypt/gui/Controls/PasswordToggleBox.xaml.cs

173 lines
4.4 KiB
C#

/******************************************************************************/
/* SlunkCrypt, by LoRd_MuldeR <MuldeR2@GMX.de> */
/* This work has been released under the CC0 1.0 Universal license! */
/******************************************************************************/
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace com.muldersoft.slunkcrypt.gui.ctrls
{
public partial class PasswordToggleBox : UserControl
{
public event KeyEventHandler Entered;
public static readonly DependencyProperty IsRevealedProperty = DependencyProperty.Register("IsRevealed", typeof(bool), typeof(PasswordToggleBox), new PropertyMetadata(false, OnIsRevealedPropertyChanged));
public PasswordToggleBox()
{
InitializeComponent();
}
public Thickness EditPadding
{
get
{
return Edit_Hidden.Padding;
}
set
{
Edit_Hidden.Padding = Edit_Normal.Padding = value;
}
}
public FontFamily EditFontFamily
{
get
{
return Edit_Hidden.FontFamily;
}
set
{
Edit_Normal.FontFamily = Edit_Hidden.FontFamily = value;
}
}
public char PasswordChar
{
get
{
return Edit_Hidden.PasswordChar;
}
set
{
Edit_Hidden.PasswordChar = value;
}
}
public int MaxLength
{
get
{
return Edit_Hidden.MaxLength;
}
set
{
Edit_Normal.MaxLength = Edit_Hidden.MaxLength = value;
}
}
public bool IsRevealed
{
get
{
return (bool) GetValue(IsRevealedProperty);
}
set
{
SetValue(IsRevealedProperty, value);
}
}
public string Password
{
get
{
return IsRevealed ? Edit_Normal.Text : Edit_Hidden.Password;
}
set
{
if (IsRevealed)
{
Edit_Normal.Text = string.IsNullOrEmpty(value) ? string.Empty : value;
}
else
{
Edit_Hidden.Password = string.IsNullOrEmpty(value) ? string.Empty : value;
}
}
}
public void Clear()
{
Edit_Hidden.Clear();
Edit_Normal.Clear();
}
public void SelectAll()
{
if (IsRevealed)
{
Edit_Normal.SelectAll();
}
else
{
Edit_Hidden.SelectAll();
}
}
private void OnIsRevealedPropertyChanged(bool value)
{
Panel.SetZIndex(Edit_Hidden, value ? 0 : 1);
Panel.SetZIndex(Edit_Normal, value ? 1 : 0);
if (value)
{
Edit_Normal.Text = Edit_Hidden.Password;
Edit_Hidden.Clear();
}
else
{
Edit_Hidden.Password = Edit_Normal.Text;
Edit_Normal.Clear();
};
}
private static void OnIsRevealedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PasswordToggleBox ptb = d as PasswordToggleBox;
if (!ReferenceEquals(ptb, null))
{
bool? newValue = e.NewValue as bool?;
if (newValue.HasValue)
{
ptb.OnIsRevealedPropertyChanged(newValue.Value);
}
}
}
private void Edit_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
Entered?.Invoke(this, e);
e.Handled = true;
}
}
protected override void OnGotFocus(RoutedEventArgs e)
{
if (IsRevealed)
{
Edit_Normal.Focus();
}
else
{
Edit_Hidden.Focus();
}
e.Handled = true;
}
}
}