mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-10-05 04:24:38 +13:00
Support for clicked state color of list items
Minor improvement of color updates
This commit is contained in:
parent
72c225a912
commit
80158ce947
2 changed files with 51 additions and 15 deletions
|
@ -23,7 +23,9 @@ namespace SystemTrayMenu.DataClasses
|
||||||
private Brush? borderBrush;
|
private Brush? borderBrush;
|
||||||
private ImageSource? columnIcon;
|
private ImageSource? columnIcon;
|
||||||
private string? columnText;
|
private string? columnText;
|
||||||
|
private bool isClicked;
|
||||||
private bool isSelected;
|
private bool isSelected;
|
||||||
|
private Menu? subMenu;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="RowData"/> class.
|
/// Initializes a new instance of the <see cref="RowData"/> class.
|
||||||
|
@ -138,6 +140,19 @@ namespace SystemTrayMenu.DataClasses
|
||||||
|
|
||||||
internal bool IsPendingOpenItem { get; set; }
|
internal bool IsPendingOpenItem { get; set; }
|
||||||
|
|
||||||
|
internal bool IsClicked
|
||||||
|
{
|
||||||
|
get => isClicked;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != isClicked)
|
||||||
|
{
|
||||||
|
isClicked = value;
|
||||||
|
UpdateColors();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal bool IsSelected
|
internal bool IsSelected
|
||||||
{
|
{
|
||||||
get => isSelected;
|
get => isSelected;
|
||||||
|
@ -146,7 +161,7 @@ namespace SystemTrayMenu.DataClasses
|
||||||
if (value != isSelected)
|
if (value != isSelected)
|
||||||
{
|
{
|
||||||
isSelected = value;
|
isSelected = value;
|
||||||
CallPropertyChanged();
|
UpdateColors();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -187,7 +202,18 @@ namespace SystemTrayMenu.DataClasses
|
||||||
|
|
||||||
internal Menu? Owner { get; set; }
|
internal Menu? Owner { get; set; }
|
||||||
|
|
||||||
internal Menu? SubMenu { get; set; }
|
internal Menu? SubMenu
|
||||||
|
{
|
||||||
|
get => subMenu;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != subMenu)
|
||||||
|
{
|
||||||
|
subMenu = value;
|
||||||
|
UpdateColors();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal bool HiddenEntry { get; set; }
|
internal bool HiddenEntry { get; set; }
|
||||||
|
|
||||||
|
@ -335,7 +361,12 @@ namespace SystemTrayMenu.DataClasses
|
||||||
|
|
||||||
internal void UpdateColors()
|
internal void UpdateColors()
|
||||||
{
|
{
|
||||||
if (SubMenu != null)
|
if (IsClicked)
|
||||||
|
{
|
||||||
|
BorderBrush = MenuDefines.ColorIcons;
|
||||||
|
BackgroundBrush = MenuDefines.ColorSelectedItem;
|
||||||
|
}
|
||||||
|
else if (SubMenu != null)
|
||||||
{
|
{
|
||||||
BorderBrush = MenuDefines.ColorOpenFolderBorder;
|
BorderBrush = MenuDefines.ColorOpenFolderBorder;
|
||||||
BackgroundBrush = MenuDefines.ColorOpenFolder;
|
BackgroundBrush = MenuDefines.ColorOpenFolder;
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace SystemTrayMenu.UserInterface
|
||||||
|
|
||||||
private readonly string folderPath;
|
private readonly string folderPath;
|
||||||
|
|
||||||
private Tuple<ListViewItem?, int> detectLeftMouseButtonClicked = new(null, 0);
|
private int countLeftMouseButtonClicked;
|
||||||
private bool isShellContextMenuOpen;
|
private bool isShellContextMenuOpen;
|
||||||
private bool directionToRight;
|
private bool directionToRight;
|
||||||
private Point lastLocation;
|
private Point lastLocation;
|
||||||
|
@ -1099,13 +1099,11 @@ namespace SystemTrayMenu.UserInterface
|
||||||
foreach (RowData itemData in e.AddedItems)
|
foreach (RowData itemData in e.AddedItems)
|
||||||
{
|
{
|
||||||
itemData.IsSelected = true;
|
itemData.IsSelected = true;
|
||||||
itemData.UpdateColors();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (RowData itemData in e.RemovedItems)
|
foreach (RowData itemData in e.RemovedItems)
|
||||||
{
|
{
|
||||||
itemData.IsSelected = false;
|
itemData.IsSelected = false;
|
||||||
itemData.UpdateColors();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1115,7 +1113,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
foreach (RowData itemData in lv.Items.SourceCollection)
|
foreach (RowData itemData in lv.Items.SourceCollection)
|
||||||
{
|
{
|
||||||
itemData.IsSelected = lv.SelectedItem == itemData;
|
itemData.IsSelected = lv.SelectedItem == itemData;
|
||||||
itemData.UpdateColors();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1155,7 +1152,10 @@ namespace SystemTrayMenu.UserInterface
|
||||||
|
|
||||||
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e)
|
private void ListViewItem_MouseLeave(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
detectLeftMouseButtonClicked = new (null, 0);
|
RowData rowData = (RowData)((ListViewItem)sender).Content;
|
||||||
|
rowData.IsClicked = false;
|
||||||
|
|
||||||
|
countLeftMouseButtonClicked = 0;
|
||||||
|
|
||||||
if (!isShellContextMenuOpen)
|
if (!isShellContextMenuOpen)
|
||||||
{
|
{
|
||||||
|
@ -1163,7 +1163,7 @@ namespace SystemTrayMenu.UserInterface
|
||||||
|
|
||||||
if (e.LeftButton == MouseButtonState.Pressed)
|
if (e.LeftButton == MouseButtonState.Pressed)
|
||||||
{
|
{
|
||||||
string[] files = new string[] { ((RowData)((ListViewItem)sender).Content).Path };
|
string[] files = new string[] { rowData.Path };
|
||||||
DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy);
|
DragDrop.DoDragDrop(this, new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1172,20 +1172,25 @@ namespace SystemTrayMenu.UserInterface
|
||||||
private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e) =>
|
private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e) =>
|
||||||
CellMouseDown?.Invoke((RowData)((ListViewItem)sender).Content);
|
CellMouseDown?.Invoke((RowData)((ListViewItem)sender).Content);
|
||||||
|
|
||||||
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) =>
|
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||||
detectLeftMouseButtonClicked = new((ListViewItem)sender, e.ClickCount);
|
{
|
||||||
|
RowData rowData = (RowData)((ListViewItem)sender).Content;
|
||||||
|
rowData.IsClicked = true;
|
||||||
|
countLeftMouseButtonClicked = e.ClickCount;
|
||||||
|
}
|
||||||
|
|
||||||
private void ListViewItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
private void ListViewItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||||
{
|
{
|
||||||
ListViewItem lvi = (ListViewItem)sender;
|
RowData rowData = (RowData)((ListViewItem)sender).Content;
|
||||||
if (detectLeftMouseButtonClicked.Item1 == lvi)
|
if (rowData.IsClicked)
|
||||||
{
|
{
|
||||||
// Same row has been called with PreviewMouseLeftButtonDown without leaving the item, so we can call it a "click".
|
// Same row has been called with PreviewMouseLeftButtonDown without leaving the item, so we can call it a "click".
|
||||||
// The click count is also taken from Down event as it seems not being correct in Up event.
|
// The click count is also taken from Down event as it seems not being correct in Up event.
|
||||||
((RowData)lvi.Content).OpenItem(detectLeftMouseButtonClicked.Item2);
|
rowData.OpenItem(countLeftMouseButtonClicked);
|
||||||
}
|
}
|
||||||
|
|
||||||
detectLeftMouseButtonClicked = new(null, 0);
|
countLeftMouseButtonClicked = 0;
|
||||||
|
rowData.IsClicked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ListViewItem_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
|
private void ListViewItem_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
|
||||||
|
|
Loading…
Reference in a new issue