Skip to content

Commit

Permalink
Fix translation for textboxes contextmenu
Browse files Browse the repository at this point in the history
  • Loading branch information
Ruben2776 committed Feb 2, 2025
1 parent 7383fec commit fb9dd75
Showing 1 changed file with 131 additions and 114 deletions.
245 changes: 131 additions & 114 deletions src/PicView.Avalonia/CustomControls/FuncTextBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,143 +2,160 @@
using Avalonia.Controls;
using Avalonia.Media;
using PicView.Core.Localization;
using Path = Avalonia.Controls.Shapes.Path;

namespace PicView.Avalonia.CustomControls
namespace PicView.Avalonia.CustomControls;

public class FuncTextBox : TextBox
{
public class FuncTextBox : TextBox
private bool _contextMenuLoaded;

public FuncTextBox()
{
public FuncTextBox()
ContextMenu = new ContextMenu();

PointerPressed += (_, e) =>
{
if (!Application.Current.TryGetResource("MainTextColor", Application.Current.RequestedThemeVariant, out var mainTextColor))
if (e.GetCurrentPoint(this).Properties.IsRightButtonPressed)
{
return;
ContextMenu.Open(this);
}
};

var iconBrush = new SolidColorBrush((Color)(mainTextColor ?? Brushes.White));
if (!Application.Current.TryGetResource("CopyGeometry", Application.Current.RequestedThemeVariant, out var copyGeometry))
ContextMenu.Opening += (_, _) =>
{
if (!_contextMenuLoaded)
{
return;
LoadContextMenu();
}
};
}

protected override Type StyleKeyOverride => typeof(TextBox);

private void LoadContextMenu()
{
if (!Application.Current.TryGetResource("MainTextColor", Application.Current.RequestedThemeVariant, out var mainTextColor))
{
return;
}

var iconBrush = new SolidColorBrush((Color)(mainTextColor ?? Brushes.White));
if (!Application.Current.TryGetResource("CopyGeometry", Application.Current.RequestedThemeVariant, out var copyGeometry))
{
return;
}

if (!Application.Current.TryGetResource("CutGeometry", Application.Current.RequestedThemeVariant, out var cutGeometry))
{
return;
}

if (!Application.Current.TryGetResource("RecycleGeometry", Application.Current.RequestedThemeVariant, out var recycleGeometry))
{
return;
}

if (!Application.Current.TryGetResource("PasteGeometry", Application.Current.RequestedThemeVariant, out var pasteGeometry))
{
return;
}

if (!Application.Current.TryGetResource("CutGeometry", Application.Current.RequestedThemeVariant, out var cutGeometry))
if (!Application.Current.TryGetResource("CheckboxOutlineImage", Application.Current.RequestedThemeVariant,
out var checkboxOutlineImage))
{
return;
}

var selectAllMenuItem = new MenuItem
{
Header = TranslationHelper.Translation.SelectAll,
Icon = new Image
{
return;
Width = 12,
Height = 12,
Source = checkboxOutlineImage as DrawingImage ?? null
}
};
selectAllMenuItem.Click += (_, _) => SelectAll();
ContextMenu.Items.Add(selectAllMenuItem);

if (!Application.Current.TryGetResource("RecycleGeometry", Application.Current.RequestedThemeVariant, out var recycleGeometry))
var cutMenuItem = new MenuItem
{
Header = TranslationHelper.Translation.Cut,
Icon = new Path
{
return;
Width = 12,
Height = 12,
Fill = iconBrush,
Stretch = Stretch.Fill,
Data = cutGeometry as Geometry ?? null,
}
};
cutMenuItem.Click += (_, _) => Cut();
ContextMenu.Items.Add(cutMenuItem);

if (!Application.Current.TryGetResource("PasteGeometry", Application.Current.RequestedThemeVariant, out var pasteGeometry))
var copyMenuItem = new MenuItem
{
Header = TranslationHelper.Translation.Copy,
Icon = new Path
{
return;
}
Width = 12,
Height = 12,
Fill = iconBrush,
Stretch = Stretch.Fill,
Data = copyGeometry as Geometry ?? null
},
};
copyMenuItem.Click += (_, _) => Copy();
ContextMenu.Items.Add(copyMenuItem);

if (!Application.Current.TryGetResource("CheckboxOutlineImage", Application.Current.RequestedThemeVariant,
out var checkboxOutlineImage))
var pasteMenuItem = new MenuItem
{
Header = TranslationHelper.Translation.FilePaste,
Icon = new Path
{
return;
Width = 12,
Height = 12,
Fill = iconBrush,
Stretch = Stretch.Fill,
Data = pasteGeometry as Geometry ?? null
}
};
pasteMenuItem.Click += (_, _) => Paste();
ContextMenu.Items.Add(pasteMenuItem);

// TODO fix translations here
var contextMenu = new ContextMenu();
var selectAllMenuItem = new MenuItem
{
Header = TranslationHelper.GetTranslation("Paste"),
Icon = new Image
{
Width = 12,
Height = 12,
Source = checkboxOutlineImage as DrawingImage ?? null
}
};
selectAllMenuItem.Click += (_, _) => SelectAll();
contextMenu.Items.Add(selectAllMenuItem);

var cutMenuItem = new MenuItem
{
Header = TranslationHelper.GetTranslation("Cut"),
Icon = new PathIcon
{
Width = 12,
Height = 12,
Foreground = iconBrush,
Data = cutGeometry as Geometry ?? null
}
};
cutMenuItem.Click += (_, _) => Cut();
contextMenu.Items.Add(cutMenuItem);

var copyMenuItem = new MenuItem
{
Header = TranslationHelper.GetTranslation("Paste"),
Icon = new PathIcon
{
Width = 12,
Height = 12,
Foreground = iconBrush,
Data = copyGeometry as Geometry ?? null
}
};
copyMenuItem.Click += (_, _) => Copy();
contextMenu.Items.Add(copyMenuItem);

var pasteMenuItem = new MenuItem
{
Header = TranslationHelper.GetTranslation("Paste"),
Icon = new PathIcon
{
Width = 12,
Height = 12,
Foreground = iconBrush,
Data = pasteGeometry as Geometry ?? null
}
};
pasteMenuItem.Click += (_, _) => Paste();
contextMenu.Items.Add(pasteMenuItem);

var deleteMenuItem = new MenuItem
var deleteMenuItem = new MenuItem
{
Header = TranslationHelper.Translation.DeleteFile,
Icon = new Path
{
Header = TranslationHelper.GetTranslation("Delete"),
Icon = new PathIcon
{
Width = 12,
Height = 12,
Foreground = iconBrush,
Data = recycleGeometry as Geometry ?? null
}
};
deleteMenuItem.Click += (_, _) => Clear();
contextMenu.Items.Add(deleteMenuItem);

contextMenu.Opened += delegate
Width = 12,
Height = 12,
Fill = iconBrush,
Stretch = Stretch.Fill,
Data = recycleGeometry as Geometry ?? null
}
};
deleteMenuItem.Click += (_, _) => Clear();
ContextMenu.Items.Add(deleteMenuItem);

ContextMenu.Opened += delegate
{
if (IsReadOnly)
{
if (IsReadOnly)
{
deleteMenuItem.IsEnabled = false;
cutMenuItem.IsEnabled = false;
pasteMenuItem.IsEnabled = false;
}
else
{
deleteMenuItem.IsEnabled = true;
cutMenuItem.IsEnabled = true;
pasteMenuItem.IsEnabled = true;
}
};

ContextMenu = contextMenu;

PointerPressed += (_, e) =>
deleteMenuItem.IsEnabled = false;
cutMenuItem.IsEnabled = false;
pasteMenuItem.IsEnabled = false;
}
else
{
if (e.GetCurrentPoint(this).Properties.IsRightButtonPressed)
{
contextMenu.Open(this);
}
};
}

protected override Type StyleKeyOverride => typeof(TextBox);
deleteMenuItem.IsEnabled = true;
cutMenuItem.IsEnabled = true;
pasteMenuItem.IsEnabled = true;
}
};

_contextMenuLoaded = true;
}
}

0 comments on commit fb9dd75

Please sign in to comment.