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 ImageSource? columnIcon;
|
||||
private string? columnText;
|
||||
private bool isClicked;
|
||||
private bool isSelected;
|
||||
private Menu? subMenu;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="RowData"/> class.
|
||||
|
@ -138,6 +140,19 @@ namespace SystemTrayMenu.DataClasses
|
|||
|
||||
internal bool IsPendingOpenItem { get; set; }
|
||||
|
||||
internal bool IsClicked
|
||||
{
|
||||
get => isClicked;
|
||||
set
|
||||
{
|
||||
if (value != isClicked)
|
||||
{
|
||||
isClicked = value;
|
||||
UpdateColors();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal bool IsSelected
|
||||
{
|
||||
get => isSelected;
|
||||
|
@ -146,7 +161,7 @@ namespace SystemTrayMenu.DataClasses
|
|||
if (value != isSelected)
|
||||
{
|
||||
isSelected = value;
|
||||
CallPropertyChanged();
|
||||
UpdateColors();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +202,18 @@ namespace SystemTrayMenu.DataClasses
|
|||
|
||||
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; }
|
||||
|
||||
|
@ -335,7 +361,12 @@ namespace SystemTrayMenu.DataClasses
|
|||
|
||||
internal void UpdateColors()
|
||||
{
|
||||
if (SubMenu != null)
|
||||
if (IsClicked)
|
||||
{
|
||||
BorderBrush = MenuDefines.ColorIcons;
|
||||
BackgroundBrush = MenuDefines.ColorSelectedItem;
|
||||
}
|
||||
else if (SubMenu != null)
|
||||
{
|
||||
BorderBrush = MenuDefines.ColorOpenFolderBorder;
|
||||
BackgroundBrush = MenuDefines.ColorOpenFolder;
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace SystemTrayMenu.UserInterface
|
|||
|
||||
private readonly string folderPath;
|
||||
|
||||
private Tuple<ListViewItem?, int> detectLeftMouseButtonClicked = new(null, 0);
|
||||
private int countLeftMouseButtonClicked;
|
||||
private bool isShellContextMenuOpen;
|
||||
private bool directionToRight;
|
||||
private Point lastLocation;
|
||||
|
@ -1099,13 +1099,11 @@ namespace SystemTrayMenu.UserInterface
|
|||
foreach (RowData itemData in e.AddedItems)
|
||||
{
|
||||
itemData.IsSelected = true;
|
||||
itemData.UpdateColors();
|
||||
}
|
||||
|
||||
foreach (RowData itemData in e.RemovedItems)
|
||||
{
|
||||
itemData.IsSelected = false;
|
||||
itemData.UpdateColors();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1115,7 +1113,6 @@ namespace SystemTrayMenu.UserInterface
|
|||
foreach (RowData itemData in lv.Items.SourceCollection)
|
||||
{
|
||||
itemData.IsSelected = lv.SelectedItem == itemData;
|
||||
itemData.UpdateColors();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1155,7 +1152,10 @@ namespace SystemTrayMenu.UserInterface
|
|||
|
||||
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)
|
||||
{
|
||||
|
@ -1163,7 +1163,7 @@ namespace SystemTrayMenu.UserInterface
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -1172,20 +1172,25 @@ namespace SystemTrayMenu.UserInterface
|
|||
private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e) =>
|
||||
CellMouseDown?.Invoke((RowData)((ListViewItem)sender).Content);
|
||||
|
||||
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) =>
|
||||
detectLeftMouseButtonClicked = new((ListViewItem)sender, e.ClickCount);
|
||||
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
RowData rowData = (RowData)((ListViewItem)sender).Content;
|
||||
rowData.IsClicked = true;
|
||||
countLeftMouseButtonClicked = e.ClickCount;
|
||||
}
|
||||
|
||||
private void ListViewItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
ListViewItem lvi = (ListViewItem)sender;
|
||||
if (detectLeftMouseButtonClicked.Item1 == lvi)
|
||||
RowData rowData = (RowData)((ListViewItem)sender).Content;
|
||||
if (rowData.IsClicked)
|
||||
{
|
||||
// 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.
|
||||
((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)
|
||||
|
|
Loading…
Reference in a new issue