mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-07-05 22:40:41 +12:00
Cleanup and remove of CustomScrollbar
This commit is contained in:
parent
8001a5324a
commit
1245700a13
|
@ -20,6 +20,7 @@ namespace SystemTrayMenu.Business
|
||||||
using SystemTrayMenu.Helper;
|
using SystemTrayMenu.Helper;
|
||||||
using SystemTrayMenu.Helpers;
|
using SystemTrayMenu.Helpers;
|
||||||
using SystemTrayMenu.Utilities;
|
using SystemTrayMenu.Utilities;
|
||||||
|
using static SystemTrayMenu.UserInterface.Menu;
|
||||||
using Menu = SystemTrayMenu.UserInterface.Menu;
|
using Menu = SystemTrayMenu.UserInterface.Menu;
|
||||||
|
|
||||||
internal class Menus : IDisposable
|
internal class Menus : IDisposable
|
||||||
|
@ -62,18 +63,17 @@ namespace SystemTrayMenu.Business
|
||||||
|
|
||||||
if (e.Result == null)
|
if (e.Result == null)
|
||||||
{
|
{
|
||||||
// Clean up menu status IsMenuOpen for previous one
|
// The main menu gets loaded again
|
||||||
|
// Clean up menu status of previous one
|
||||||
ListView dgvMainMenu = menus[0].GetDataGridView();
|
ListView dgvMainMenu = menus[0].GetDataGridView();
|
||||||
#if TODO
|
foreach (ListViewItemData item in dgvMainMenu.Items)
|
||||||
foreach (DataRow row in ((DataTable)dgvMainMenu.DataSource).Rows)
|
|
||||||
{
|
{
|
||||||
RowData rowDataToClear = (RowData)row[2];
|
RowData rowDataToClear = item.data;
|
||||||
rowDataToClear.IsMenuOpen = false;
|
rowDataToClear.IsMenuOpen = false;
|
||||||
rowDataToClear.IsClicking = false;
|
rowDataToClear.IsClicking = false;
|
||||||
rowDataToClear.IsSelected = false;
|
rowDataToClear.IsSelected = false;
|
||||||
rowDataToClear.IsContextMenuOpen = false;
|
rowDataToClear.IsContextMenuOpen = false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
RefreshSelection(dgvMainMenu);
|
RefreshSelection(dgvMainMenu);
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ namespace SystemTrayMenu.Business
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// First time the main menu gets loaded
|
||||||
MenuData menuData = (MenuData)e.Result;
|
MenuData menuData = (MenuData)e.Result;
|
||||||
switch (menuData.Validity)
|
switch (menuData.Validity)
|
||||||
{
|
{
|
||||||
|
@ -267,12 +268,6 @@ namespace SystemTrayMenu.Business
|
||||||
keyboardInput.RowDeselected += waitToOpenMenu.RowDeselected;
|
keyboardInput.RowDeselected += waitToOpenMenu.RowDeselected;
|
||||||
keyboardInput.EnterPressed += waitToOpenMenu.EnterOpensInstantly;
|
keyboardInput.EnterPressed += waitToOpenMenu.EnterOpensInstantly;
|
||||||
keyboardInput.RowSelected += waitToOpenMenu.RowSelected;
|
keyboardInput.RowSelected += waitToOpenMenu.RowSelected;
|
||||||
keyboardInput.RowSelected += AdjustScrollbarToDisplayedRow;
|
|
||||||
void AdjustScrollbarToDisplayedRow(ListView dgv, int index)
|
|
||||||
{
|
|
||||||
Menu menu = (Menu)dgv.GetParentWindow();
|
|
||||||
menu.AdjustScrollbar();
|
|
||||||
}
|
|
||||||
|
|
||||||
joystickHelper = new();
|
joystickHelper = new();
|
||||||
joystickHelper.KeyPressed += (key) => menus[0].Dispatcher.Invoke(keyboardInput.CmdKeyProcessed, new object[] { null, key });
|
joystickHelper.KeyPressed += (key) => menus[0].Dispatcher.Invoke(keyboardInput.CmdKeyProcessed, new object[] { null, key });
|
||||||
|
@ -586,46 +581,7 @@ namespace SystemTrayMenu.Business
|
||||||
|
|
||||||
List<Menu.ListViewItemData> items = new();
|
List<Menu.ListViewItemData> items = new();
|
||||||
ListView lv = menu.GetDataGridView();
|
ListView lv = menu.GetDataGridView();
|
||||||
#if TODO // REMOVE?
|
|
||||||
DataTable dataTable = new();
|
|
||||||
|
|
||||||
foreach (var prop in typeof(Menu.ListViewItemData).GetProperties())
|
|
||||||
{
|
|
||||||
dataTable.Columns.Add(prop.Name, prop.PropertyType);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (RowData rowData in data)
|
|
||||||
{
|
|
||||||
if (!(rowData.IsAddionalItem && Properties.Settings.Default.ShowOnlyAsSearchResult))
|
|
||||||
{
|
|
||||||
if (rowData.ContainsMenu)
|
|
||||||
{
|
|
||||||
foldersCount++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
filesCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rowData.SetData(rowData, dataTable);
|
|
||||||
}
|
|
||||||
|
|
||||||
lv.ItemsSource = dataTable.DefaultView;
|
|
||||||
|
|
||||||
foreach (DataRow row in dataTable.Rows)
|
|
||||||
{
|
|
||||||
RowData rowData = (RowData)row[nameof(Menu.ListViewItemData.data)];
|
|
||||||
if (rowData.IsAddionalItem && Properties.Settings.Default.ShowOnlyAsSearchResult)
|
|
||||||
{
|
|
||||||
row[nameof(Menu.ListViewItemData.SortIndex)] = 99;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
row[nameof(Menu.ListViewItemData.SortIndex)] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
foreach (RowData rowData in data)
|
foreach (RowData rowData in data)
|
||||||
{
|
{
|
||||||
if (!(rowData.IsAddionalItem && Properties.Settings.Default.ShowOnlyAsSearchResult))
|
if (!(rowData.IsAddionalItem && Properties.Settings.Default.ShowOnlyAsSearchResult))
|
||||||
|
@ -649,7 +605,6 @@ namespace SystemTrayMenu.Business
|
||||||
}
|
}
|
||||||
|
|
||||||
lv.ItemsSource = items;
|
lv.ItemsSource = items;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsActive()
|
private bool IsActive()
|
||||||
|
@ -660,17 +615,15 @@ namespace SystemTrayMenu.Business
|
||||||
foreach (Menu menu in menus.Where(m => m != null))
|
foreach (Menu menu in menus.Where(m => m != null))
|
||||||
{
|
{
|
||||||
ListView dgv = menu.GetDataGridView();
|
ListView dgv = menu.GetDataGridView();
|
||||||
#if TODO
|
foreach (ListViewItemData item in dgv.Items)
|
||||||
foreach (DataGridViewRow row in dgv.Items)
|
|
||||||
{
|
{
|
||||||
RowData rowData = (RowData)row.Cells[2].Value;
|
RowData rowData = item.data;
|
||||||
if (rowData != null && rowData.IsContextMenuOpen)
|
if (rowData != null && rowData.IsContextMenuOpen)
|
||||||
{
|
{
|
||||||
isShellContextMenuOpen = true;
|
isShellContextMenuOpen = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (isShellContextMenuOpen)
|
if (isShellContextMenuOpen)
|
||||||
{
|
{
|
||||||
|
@ -771,13 +724,6 @@ namespace SystemTrayMenu.Business
|
||||||
dgv.MouseDoubleClick += Dgv_MouseDoubleClick;
|
dgv.MouseDoubleClick += Dgv_MouseDoubleClick;
|
||||||
dgv.SelectionChanged += Dgv_SelectionChanged;
|
dgv.SelectionChanged += Dgv_SelectionChanged;
|
||||||
dgv.RowPostPaint += Dgv_RowPostPaint;
|
dgv.RowPostPaint += Dgv_RowPostPaint;
|
||||||
dgv.DataError += Dgv_DataError;
|
|
||||||
void Dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)
|
|
||||||
{
|
|
||||||
// WARN Dgv_DataError occured System.ObjectDisposedException: Cannot access a disposed object. Object name: 'Icon'
|
|
||||||
// => Rare times occured (e.g. when focused an close other application => closed and activated at same time)
|
|
||||||
Log.Warn("Dgv_DataError occured", e.Exception);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
menu.SetCounts(foldersCount, filesCount);
|
menu.SetCounts(foldersCount, filesCount);
|
||||||
|
|
||||||
|
@ -857,8 +803,6 @@ namespace SystemTrayMenu.Business
|
||||||
{
|
{
|
||||||
isDragSwipeScrolled = true;
|
isDragSwipeScrolled = true;
|
||||||
dgv.FirstDisplayedScrollingRowIndex = newFirstDisplayedScrollingRowIndex;
|
dgv.FirstDisplayedScrollingRowIndex = newFirstDisplayedScrollingRowIndex;
|
||||||
Menu menu = (Menu)dgv.GetParentWindow();
|
|
||||||
menu.AdjustScrollbar();
|
|
||||||
scrolled = dgv.FirstDisplayedScrollingRowIndex == newFirstDisplayedScrollingRowIndex;
|
scrolled = dgv.FirstDisplayedScrollingRowIndex == newFirstDisplayedScrollingRowIndex;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1120,10 +1064,9 @@ namespace SystemTrayMenu.Business
|
||||||
{
|
{
|
||||||
// Clean up menu status IsMenuOpen for previous one
|
// Clean up menu status IsMenuOpen for previous one
|
||||||
ListView dgvPrevious = menuPrevious.GetDataGridView();
|
ListView dgvPrevious = menuPrevious.GetDataGridView();
|
||||||
#if TODO
|
foreach (ListViewItemData item in dgvPrevious.Items)
|
||||||
foreach (DataRow row in ((DataTable)dgvPrevious.DataSource).Rows)
|
|
||||||
{
|
{
|
||||||
RowData rowDataToClear = (RowData)row[2];
|
RowData rowDataToClear = item.data;
|
||||||
if (rowDataToClear == (RowData)menuToShow.Tag)
|
if (rowDataToClear == (RowData)menuToShow.Tag)
|
||||||
{
|
{
|
||||||
rowDataToClear.IsMenuOpen = keepOrSetIsMenuOpen;
|
rowDataToClear.IsMenuOpen = keepOrSetIsMenuOpen;
|
||||||
|
@ -1133,7 +1076,6 @@ namespace SystemTrayMenu.Business
|
||||||
rowDataToClear.IsMenuOpen = false;
|
rowDataToClear.IsMenuOpen = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
RefreshSelection(dgvPrevious);
|
RefreshSelection(dgvPrevious);
|
||||||
|
|
||||||
|
@ -1356,11 +1298,10 @@ namespace SystemTrayMenu.Business
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<RowData> rowDatas = new();
|
List<RowData> rowDatas = new();
|
||||||
#if TODO
|
ListView dgv = menus[0].GetDataGridView();
|
||||||
DataTable dataTable = (DataTable)menus[0].GetDataGridView().DataSource;
|
foreach (ListViewItemData item in dgv.Items)
|
||||||
foreach (DataRow row in dataTable.Rows)
|
|
||||||
{
|
{
|
||||||
RowData rowData = (RowData)row[2];
|
RowData rowData = item.data;
|
||||||
if (rowData.Path.StartsWith($"{e.OldFullPath}"))
|
if (rowData.Path.StartsWith($"{e.OldFullPath}"))
|
||||||
{
|
{
|
||||||
string path = rowData.Path.Replace(e.OldFullPath, e.FullPath);
|
string path = rowData.Path.Replace(e.OldFullPath, e.FullPath);
|
||||||
|
@ -1386,7 +1327,6 @@ namespace SystemTrayMenu.Business
|
||||||
rowDatas.Add(rowData);
|
rowDatas.Add(rowData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
rowDatas = MenusHelpers.SortItems(rowDatas);
|
rowDatas = MenusHelpers.SortItems(rowDatas);
|
||||||
keyboardInput.ClearIsSelectedByKey();
|
keyboardInput.ClearIsSelectedByKey();
|
||||||
|
@ -1408,29 +1348,25 @@ namespace SystemTrayMenu.Business
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
List<DataRow> rowsToRemove = new();
|
List<ListViewItemData> rowsToRemove = new();
|
||||||
#if TODO
|
|
||||||
ListView dgv = menus[0].GetDataGridView();
|
ListView dgv = menus[0].GetDataGridView();
|
||||||
DataTable dataTable = (DataTable)dgv.DataSource;
|
foreach (ListViewItemData item in dgv.Items)
|
||||||
foreach (DataRow row in dataTable.Rows)
|
|
||||||
{
|
{
|
||||||
RowData rowData = (RowData)row[2];
|
RowData rowData = item.data;
|
||||||
if (rowData.Path == e.FullPath ||
|
if (rowData.Path == e.FullPath ||
|
||||||
rowData.Path.StartsWith($"{e.FullPath}\\"))
|
rowData.Path.StartsWith($"{e.FullPath}\\"))
|
||||||
{
|
{
|
||||||
IconReader.RemoveIconFromCache(rowData.Path);
|
IconReader.RemoveIconFromCache(rowData.Path);
|
||||||
rowsToRemove.Add(row);
|
rowsToRemove.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (DataRow rowToRemove in rowsToRemove)
|
foreach (ListViewItemData rowToRemove in rowsToRemove)
|
||||||
{
|
{
|
||||||
dataTable.Rows.Remove(rowToRemove);
|
dgv.Items.Remove(rowToRemove);
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboardInput.ClearIsSelectedByKey();
|
keyboardInput.ClearIsSelectedByKey();
|
||||||
dgv.DataSource = dataTable;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hideSubmenuDuringRefreshSearch = false;
|
hideSubmenuDuringRefreshSearch = false;
|
||||||
menus[0].ResetHeight();
|
menus[0].ResetHeight();
|
||||||
|
@ -1463,13 +1399,11 @@ namespace SystemTrayMenu.Business
|
||||||
rowData,
|
rowData,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if TODO
|
ListView dgv = menus[0].GetDataGridView();
|
||||||
DataTable dataTable = (DataTable)menus[0].GetDataGridView().DataSource;
|
foreach (ListViewItemData item in dgv.Items)
|
||||||
foreach (DataRow row in dataTable.Rows)
|
|
||||||
{
|
{
|
||||||
rowDatas.Add((RowData)row[2]);
|
rowDatas.Add(item.data);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
rowDatas = MenusHelpers.SortItems(rowDatas);
|
rowDatas = MenusHelpers.SortItems(rowDatas);
|
||||||
keyboardInput.ClearIsSelectedByKey();
|
keyboardInput.ClearIsSelectedByKey();
|
||||||
|
|
|
@ -12,6 +12,7 @@ namespace SystemTrayMenu.Handler
|
||||||
using SystemTrayMenu.DataClasses;
|
using SystemTrayMenu.DataClasses;
|
||||||
using SystemTrayMenu.UserInterface;
|
using SystemTrayMenu.UserInterface;
|
||||||
using SystemTrayMenu.Utilities;
|
using SystemTrayMenu.Utilities;
|
||||||
|
using static SystemTrayMenu.UserInterface.Menu;
|
||||||
using ListView = System.Windows.Controls.ListView;
|
using ListView = System.Windows.Controls.ListView;
|
||||||
using Menu = SystemTrayMenu.UserInterface.Menu;
|
using Menu = SystemTrayMenu.UserInterface.Menu;
|
||||||
|
|
||||||
|
@ -174,7 +175,7 @@ namespace SystemTrayMenu.Handler
|
||||||
{
|
{
|
||||||
if (dgv.Items.Count > rowIndex)
|
if (dgv.Items.Count > rowIndex)
|
||||||
{
|
{
|
||||||
RowData rowData = ((Menu.ListViewItemData)dgv.Items[rowIndex]).data;
|
RowData rowData = ((ListViewItemData)dgv.Items[rowIndex]).data;
|
||||||
Menu menu = (Menu)dgv.GetParentWindow();
|
Menu menu = (Menu)dgv.GetParentWindow();
|
||||||
rowData.Level = menu.Level;
|
rowData.Level = menu.Level;
|
||||||
if (rowData.ContainsMenu)
|
if (rowData.ContainsMenu)
|
||||||
|
@ -198,33 +199,29 @@ namespace SystemTrayMenu.Handler
|
||||||
dgvTmp = null;
|
dgvTmp = null;
|
||||||
this.dgv = dgv;
|
this.dgv = dgv;
|
||||||
this.rowIndex = rowIndex;
|
this.rowIndex = rowIndex;
|
||||||
#if TODO
|
|
||||||
RowData rowData = (RowData)dgv.Items[rowIndex].Cells[2].Value;
|
RowData rowData = ((ListViewItemData)dgv.Items[rowIndex]).data;
|
||||||
if (rowData != null)
|
if (rowData != null)
|
||||||
{
|
{
|
||||||
rowData.IsSelected = true;
|
rowData.IsSelected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
dgv.Items[rowIndex].Selected = false;
|
dgv.SelectedIndex = rowIndex;
|
||||||
dgv.Items[rowIndex].Selected = true;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ResetData(ListView dgv, int rowIndex)
|
private void ResetData(ListView dgv, int rowIndex)
|
||||||
{
|
{
|
||||||
if (dgv != null && dgv.Items.Count > rowIndex)
|
if (dgv != null && dgv.Items.Count > rowIndex)
|
||||||
{
|
{
|
||||||
#if TODO
|
RowData rowData = ((ListViewItemData)dgv.Items[rowIndex]).data;
|
||||||
RowData rowData = (RowData)dgv.Items[rowIndex].Cells[2].Value;
|
|
||||||
if (rowData != null)
|
if (rowData != null)
|
||||||
{
|
{
|
||||||
rowData.IsSelected = false;
|
rowData.IsSelected = false;
|
||||||
rowData.IsClicking = false;
|
rowData.IsClicking = false;
|
||||||
dgv.Items[rowIndex].Selected = false;
|
dgv.SelectedItem = null;
|
||||||
this.dgv = null;
|
this.dgv = null;
|
||||||
this.rowIndex = 0;
|
this.rowIndex = 0;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,26 +147,6 @@ namespace SystemTrayMenu.DataClasses
|
||||||
|
|
||||||
internal bool ProcessStarted { get; set; }
|
internal bool ProcessStarted { get; set; }
|
||||||
|
|
||||||
#if TODO // WPF REMOVE?
|
|
||||||
internal void SetData(RowData data, DataTable dataTable)
|
|
||||||
{
|
|
||||||
DataRow row = dataTable.Rows.Add();
|
|
||||||
data.RowIndex = dataTable.Rows.IndexOf(row);
|
|
||||||
|
|
||||||
if (HiddenEntry)
|
|
||||||
{
|
|
||||||
row[0] = AddIconOverlay(data.Icon, Properties.Resources.White50Percentage);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
row[0] = data.Icon;
|
|
||||||
}
|
|
||||||
|
|
||||||
row[1] = data.Text;
|
|
||||||
row[2] = data;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
internal Icon ReadIcon(bool updateIconInBackground)
|
internal Icon ReadIcon(bool updateIconInBackground)
|
||||||
{
|
{
|
||||||
if (IsFolder || IsLinkToFolder)
|
if (IsFolder || IsLinkToFolder)
|
||||||
|
|
|
@ -104,8 +104,6 @@
|
||||||
<NoWarn>1701;1702;WFAC010;MSB3061</NoWarn>
|
<NoWarn>1701;1702;WFAC010;MSB3061</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="UserInterface\CustomScrollbar\CustomScrollbar.cs" />
|
|
||||||
<Compile Remove="UserInterface\CustomScrollbar\ScrollbarControlDesigner.cs" />
|
|
||||||
<Compile Remove="UserInterface\HotkeyTextboxControl\HotkeyControl.cs" />
|
<Compile Remove="UserInterface\HotkeyTextboxControl\HotkeyControl.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -140,8 +138,6 @@
|
||||||
<Pack>True</Pack>
|
<Pack>True</Pack>
|
||||||
<PackagePath></PackagePath>
|
<PackagePath></PackagePath>
|
||||||
</None>
|
</None>
|
||||||
<None Include="UserInterface\CustomScrollbar\CustomScrollbar.cs" />
|
|
||||||
<None Include="UserInterface\CustomScrollbar\ScrollbarControlDesigner.cs" />
|
|
||||||
<None Include="UserInterface\HotkeyTextboxControl\HotkeyControl.cs" />
|
<None Include="UserInterface\HotkeyTextboxControl\HotkeyControl.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1,745 +0,0 @@
|
||||||
// <copyright file="CustomScrollbar.cs" company="PlaceholderCompany">
|
|
||||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
namespace SystemTrayMenu.UserInterface
|
|
||||||
{
|
|
||||||
using System;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
[Designer(typeof(ScrollbarControlDesigner))]
|
|
||||||
public class CustomScrollbar : UserControl
|
|
||||||
{
|
|
||||||
private readonly Timer timerMouseStillClicked = new();
|
|
||||||
private float largeChange = 10;
|
|
||||||
private float smallChange = 1;
|
|
||||||
private int minimum = 0;
|
|
||||||
private int maximum = 100;
|
|
||||||
private int value = 0;
|
|
||||||
private int lastValue = 0;
|
|
||||||
private int clickPoint;
|
|
||||||
private float sliderTop = 0;
|
|
||||||
private bool sliderDown = false;
|
|
||||||
private bool sliderDragging = false;
|
|
||||||
private bool arrowUpHovered = false;
|
|
||||||
private bool sliderHovered = false;
|
|
||||||
private bool arrowDownHovered = false;
|
|
||||||
private bool trackHovered = false;
|
|
||||||
private bool mouseStillClickedMoveUp = false;
|
|
||||||
private bool mouseStillClickedMoveLarge = false;
|
|
||||||
private int timerMouseStillClickedCounter = 0;
|
|
||||||
private bool paintEnabled = false;
|
|
||||||
private int width;
|
|
||||||
|
|
||||||
public CustomScrollbar()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
SetStyle(ControlStyles.ResizeRedraw, true);
|
|
||||||
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
||||||
SetStyle(ControlStyles.DoubleBuffer, true);
|
|
||||||
timerMouseStillClicked.Interval = 30;
|
|
||||||
timerMouseStillClicked.Tick += TimerMouseStillClicked_Tick;
|
|
||||||
}
|
|
||||||
|
|
||||||
public new event EventHandler Scroll = null;
|
|
||||||
|
|
||||||
public event EventHandler ValueChanged = null;
|
|
||||||
|
|
||||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
|
||||||
[Browsable(true)]
|
|
||||||
[DefaultValue(false)]
|
|
||||||
[Category("Behavior")]
|
|
||||||
[Description("LargeChange")]
|
|
||||||
public float LargeChange
|
|
||||||
{
|
|
||||||
get => largeChange;
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
largeChange = value;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
|
||||||
[Browsable(true)]
|
|
||||||
[DefaultValue(false)]
|
|
||||||
[Category("Behavior")]
|
|
||||||
[Description("SmallChange")]
|
|
||||||
public float SmallChange
|
|
||||||
{
|
|
||||||
get => smallChange;
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
smallChange = value;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
|
||||||
[Browsable(true)]
|
|
||||||
[DefaultValue(false)]
|
|
||||||
[Category("Behavior")]
|
|
||||||
[Description("Minimum")]
|
|
||||||
public int Minimum
|
|
||||||
{
|
|
||||||
get => minimum;
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
minimum = value;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
|
||||||
[Browsable(true)]
|
|
||||||
[DefaultValue(false)]
|
|
||||||
[Category("Behavior")]
|
|
||||||
[Description("Maximum")]
|
|
||||||
public int Maximum
|
|
||||||
{
|
|
||||||
get => maximum;
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
maximum = value;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[EditorBrowsable(EditorBrowsableState.Always)]
|
|
||||||
[Browsable(true)]
|
|
||||||
[DefaultValue(false)]
|
|
||||||
[Category("Behavior")]
|
|
||||||
[Description("Value")]
|
|
||||||
public int Value
|
|
||||||
{
|
|
||||||
get => value;
|
|
||||||
|
|
||||||
set
|
|
||||||
{
|
|
||||||
this.value = value;
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int pixelRange = trackHeight - sliderHeight;
|
|
||||||
int realRange = GetRealRange();
|
|
||||||
float percentage = 0.0f;
|
|
||||||
if (realRange != 0)
|
|
||||||
{
|
|
||||||
percentage = this.value / (float)realRange;
|
|
||||||
}
|
|
||||||
|
|
||||||
float top = percentage * pixelRange;
|
|
||||||
sliderTop = (int)top;
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Delta => Value - lastValue;
|
|
||||||
|
|
||||||
public override bool AutoSize
|
|
||||||
{
|
|
||||||
get => base.AutoSize;
|
|
||||||
|
|
||||||
set => base.AutoSize = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CustomScrollbar_MouseWheel(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.Delta > 0)
|
|
||||||
{
|
|
||||||
MoveUp(SmallChange * MenuDefines.Scrollspeed);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MoveDown(SmallChange * MenuDefines.Scrollspeed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void Reset()
|
|
||||||
{
|
|
||||||
sliderTop = 0;
|
|
||||||
sliderDown = false;
|
|
||||||
sliderDragging = false;
|
|
||||||
arrowUpHovered = false;
|
|
||||||
sliderHovered = false;
|
|
||||||
arrowDownHovered = false;
|
|
||||||
trackHovered = false;
|
|
||||||
mouseStillClickedMoveUp = false;
|
|
||||||
mouseStillClickedMoveLarge = false;
|
|
||||||
timerMouseStillClickedCounter = 0;
|
|
||||||
lastValue = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Show the control
|
|
||||||
/// (workaround, because visible = false, was causing appearing scrollbars).
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="newHeight">newHeight which to paint.</param>
|
|
||||||
internal void PaintEnable(int newHeight)
|
|
||||||
{
|
|
||||||
int newWidth = Math.Max(width, Width);
|
|
||||||
Size = new Size(newWidth, newHeight);
|
|
||||||
paintEnabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Hide the control
|
|
||||||
/// (workaround, because visible = false, was causing appearing scrollbars).
|
|
||||||
/// </summary>
|
|
||||||
internal void PaintDisable()
|
|
||||||
{
|
|
||||||
if (Width > 0)
|
|
||||||
{
|
|
||||||
width = Width;
|
|
||||||
}
|
|
||||||
|
|
||||||
Size = new Size(0, 0);
|
|
||||||
paintEnabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
MouseDown -= CustomScrollbar_MouseDown;
|
|
||||||
MouseMove -= CustomScrollbar_MouseMove;
|
|
||||||
MouseUp -= CustomScrollbar_MouseUp;
|
|
||||||
MouseLeave -= CustomScrollbar_MouseLeave;
|
|
||||||
timerMouseStillClicked.Tick -= TimerMouseStillClicked_Tick;
|
|
||||||
timerMouseStillClicked.Dispose();
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnPaint(PaintEventArgs e)
|
|
||||||
{
|
|
||||||
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
|
|
||||||
|
|
||||||
Color colorArrow;
|
|
||||||
Color colorArrowHoverBackground;
|
|
||||||
Color colorArrowHover;
|
|
||||||
Color colorArrowClick;
|
|
||||||
Color colorArrowClickBackground;
|
|
||||||
Color colorSliderArrowsAndTrackHover;
|
|
||||||
Color colorSlider;
|
|
||||||
Color colorSliderHover;
|
|
||||||
Color colorSliderDragging;
|
|
||||||
Color colorScrollbarBackground;
|
|
||||||
if (Config.IsDarkMode())
|
|
||||||
{
|
|
||||||
colorArrow = AppColors.ArrowDarkMode;
|
|
||||||
colorArrowHoverBackground = AppColors.ArrowHoverBackgroundDarkMode;
|
|
||||||
colorArrowHover = AppColors.ArrowHoverDarkMode;
|
|
||||||
colorArrowClick = AppColors.ArrowClickDarkMode;
|
|
||||||
colorArrowClickBackground = AppColors.ArrowClickBackgroundDarkMode;
|
|
||||||
colorSliderArrowsAndTrackHover = AppColors.SliderArrowsAndTrackHoverDarkMode;
|
|
||||||
colorSlider = AppColors.SliderDarkMode;
|
|
||||||
colorSliderHover = AppColors.SliderHoverDarkMode;
|
|
||||||
colorSliderDragging = AppColors.SliderDraggingDarkMode;
|
|
||||||
colorScrollbarBackground = AppColors.ScrollbarBackgroundDarkMode;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
colorArrow = AppColors.Arrow;
|
|
||||||
colorArrowHoverBackground = AppColors.ArrowHoverBackground;
|
|
||||||
colorArrowHover = AppColors.ArrowHover;
|
|
||||||
colorArrowClick = AppColors.ArrowClick;
|
|
||||||
colorArrowClickBackground = AppColors.ArrowClickBackground;
|
|
||||||
colorSliderArrowsAndTrackHover = AppColors.SliderArrowsAndTrackHover;
|
|
||||||
colorSlider = AppColors.Slider;
|
|
||||||
colorSliderHover = AppColors.SliderHover;
|
|
||||||
colorSliderDragging = AppColors.SliderDragging;
|
|
||||||
colorScrollbarBackground = AppColors.ScrollbarBackground;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!paintEnabled)
|
|
||||||
{
|
|
||||||
e.Graphics.FillRectangle(
|
|
||||||
new SolidBrush(colorScrollbarBackground),
|
|
||||||
new Rectangle(0, 0, Width, Height));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int top = (int)sliderTop + Width;
|
|
||||||
|
|
||||||
// Draw background
|
|
||||||
Brush brushScrollbarBorder = new SolidBrush(colorScrollbarBackground);
|
|
||||||
e.Graphics.FillRectangle(brushScrollbarBorder, new Rectangle(0, 0, Width, Height));
|
|
||||||
|
|
||||||
// Draw arrowUp
|
|
||||||
SolidBrush solidBrushArrowUpBackground;
|
|
||||||
SolidBrush solidBrushArrowUp;
|
|
||||||
Pen penArrowUp;
|
|
||||||
if (timerMouseStillClicked.Enabled &&
|
|
||||||
!mouseStillClickedMoveLarge && mouseStillClickedMoveUp)
|
|
||||||
{
|
|
||||||
solidBrushArrowUpBackground = new SolidBrush(colorArrowClickBackground);
|
|
||||||
solidBrushArrowUp = new SolidBrush(colorArrowClick);
|
|
||||||
penArrowUp = new Pen(colorArrowClick, 2.5F);
|
|
||||||
}
|
|
||||||
else if (arrowUpHovered)
|
|
||||||
{
|
|
||||||
solidBrushArrowUpBackground = new SolidBrush(colorArrowHoverBackground);
|
|
||||||
solidBrushArrowUp = new SolidBrush(colorArrowHover);
|
|
||||||
penArrowUp = new Pen(colorArrowHover, 2.5F);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
solidBrushArrowUpBackground = new SolidBrush(colorScrollbarBackground);
|
|
||||||
solidBrushArrowUp = new SolidBrush(colorArrow);
|
|
||||||
penArrowUp = new Pen(colorArrow, 2.5F);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Graphics.FillRectangle(solidBrushArrowUpBackground, GetUpArrowRectangleWithoutBorder());
|
|
||||||
|
|
||||||
int widthDevidedBy2 = Width / 2;
|
|
||||||
int widthDevidedBy6 = Width / 6;
|
|
||||||
int widthDevidedBy2PluswidthDevidedBy8 = widthDevidedBy2 + (Width / 8);
|
|
||||||
PointF pointArrowUp1 = new(widthDevidedBy2 - widthDevidedBy6, widthDevidedBy2PluswidthDevidedBy8);
|
|
||||||
PointF pointArrowUp2 = new(widthDevidedBy2 + widthDevidedBy6, widthDevidedBy2PluswidthDevidedBy8);
|
|
||||||
PointF pointArrowUp3 = new(widthDevidedBy2, widthDevidedBy2PluswidthDevidedBy8 - widthDevidedBy6);
|
|
||||||
PointF pointArrowUp4 = pointArrowUp1;
|
|
||||||
PointF[] curvePoints =
|
|
||||||
{
|
|
||||||
pointArrowUp1,
|
|
||||||
pointArrowUp2,
|
|
||||||
pointArrowUp3,
|
|
||||||
pointArrowUp4,
|
|
||||||
};
|
|
||||||
|
|
||||||
e.Graphics.FillPolygon(solidBrushArrowUp, curvePoints);
|
|
||||||
e.Graphics.DrawPolygon(penArrowUp, curvePoints);
|
|
||||||
|
|
||||||
// draw slider
|
|
||||||
SolidBrush solidBrushSlider;
|
|
||||||
if (sliderDragging)
|
|
||||||
{
|
|
||||||
solidBrushSlider = new SolidBrush(colorSliderDragging);
|
|
||||||
}
|
|
||||||
else if (sliderHovered)
|
|
||||||
{
|
|
||||||
solidBrushSlider = new SolidBrush(colorSliderHover);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (arrowUpHovered || arrowDownHovered || trackHovered)
|
|
||||||
{
|
|
||||||
solidBrushSlider = new SolidBrush(colorSliderArrowsAndTrackHover);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
solidBrushSlider = new SolidBrush(colorSlider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle rectangleSlider = new(1, top, Width - 2, sliderHeight);
|
|
||||||
e.Graphics.FillRectangle(solidBrushSlider, rectangleSlider);
|
|
||||||
|
|
||||||
// Draw arrowDown
|
|
||||||
SolidBrush solidBrushArrowDownBackground;
|
|
||||||
SolidBrush solidBrushArrowDown;
|
|
||||||
Pen penArrowDown;
|
|
||||||
if (timerMouseStillClicked.Enabled &&
|
|
||||||
!mouseStillClickedMoveLarge && !mouseStillClickedMoveUp)
|
|
||||||
{
|
|
||||||
solidBrushArrowDownBackground = new SolidBrush(colorArrowClickBackground);
|
|
||||||
solidBrushArrowDown = new SolidBrush(colorArrowClick);
|
|
||||||
penArrowDown = new Pen(colorArrowClick, 2.5F);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (arrowDownHovered)
|
|
||||||
{
|
|
||||||
solidBrushArrowDownBackground = new SolidBrush(colorArrowHoverBackground);
|
|
||||||
solidBrushArrowDown = new SolidBrush(colorArrowHover);
|
|
||||||
penArrowDown = new Pen(colorArrowHover, 2.5F);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
solidBrushArrowDownBackground = new SolidBrush(colorScrollbarBackground);
|
|
||||||
solidBrushArrowDown = new SolidBrush(colorArrow);
|
|
||||||
penArrowDown = new Pen(colorArrow, 2.5F);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.Graphics.FillRectangle(solidBrushArrowDownBackground, GetDownArrowRectangleWithoutBorder(trackHeight));
|
|
||||||
|
|
||||||
PointF pointArrowDown1 = new(widthDevidedBy2 - widthDevidedBy6, Height - widthDevidedBy2PluswidthDevidedBy8);
|
|
||||||
PointF pointArrowDown2 = new(widthDevidedBy2 + widthDevidedBy6, Height - widthDevidedBy2PluswidthDevidedBy8);
|
|
||||||
PointF pointArrowDown3 = new(widthDevidedBy2, Height - widthDevidedBy2PluswidthDevidedBy8 + widthDevidedBy6);
|
|
||||||
PointF pointArrowDown4 = pointArrowDown1;
|
|
||||||
PointF[] curvePointsArrowDown =
|
|
||||||
{
|
|
||||||
pointArrowDown1,
|
|
||||||
pointArrowDown2,
|
|
||||||
pointArrowDown3,
|
|
||||||
pointArrowDown4,
|
|
||||||
};
|
|
||||||
|
|
||||||
e.Graphics.FillPolygon(solidBrushArrowDown, curvePointsArrowDown);
|
|
||||||
e.Graphics.DrawPolygon(penArrowDown, curvePointsArrowDown);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TimerMouseStillClicked_Tick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
timerMouseStillClickedCounter++;
|
|
||||||
|
|
||||||
Point pointCursor = PointToClient(Cursor.Position);
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int top = (int)sliderTop + Width;
|
|
||||||
|
|
||||||
Rectangle sliderRectangle = GetSliderRectangle(sliderHeight, top);
|
|
||||||
if (sliderRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
timerMouseStillClicked.Stop();
|
|
||||||
}
|
|
||||||
else if (timerMouseStillClickedCounter > 6)
|
|
||||||
{
|
|
||||||
float change;
|
|
||||||
if (mouseStillClickedMoveLarge)
|
|
||||||
{
|
|
||||||
change = SmallChange * MenuDefines.Scrollspeed;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
change = SmallChange;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mouseStillClickedMoveUp)
|
|
||||||
{
|
|
||||||
MoveUp(change);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MoveDown(change);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
SuspendLayout();
|
|
||||||
Name = "CustomScrollbar";
|
|
||||||
MouseDown += CustomScrollbar_MouseDown;
|
|
||||||
MouseMove += CustomScrollbar_MouseMove;
|
|
||||||
MouseUp += CustomScrollbar_MouseUp;
|
|
||||||
MouseLeave += CustomScrollbar_MouseLeave;
|
|
||||||
ResumeLayout(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CustomScrollbar_MouseLeave(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
arrowUpHovered = false;
|
|
||||||
sliderHovered = false;
|
|
||||||
arrowDownHovered = false;
|
|
||||||
trackHovered = false;
|
|
||||||
Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CustomScrollbar_MouseDown(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
Point pointCursor = PointToClient(Cursor.Position);
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int top = (int)sliderTop + Width;
|
|
||||||
|
|
||||||
Rectangle sliderRectangle = GetSliderRectangle(sliderHeight, top);
|
|
||||||
Rectangle trackRectangle = GetTrackRectangle(trackHeight);
|
|
||||||
if (sliderRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
clickPoint = pointCursor.Y - top;
|
|
||||||
sliderDown = true;
|
|
||||||
}
|
|
||||||
else if (trackRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
if (e.Y < sliderRectangle.Y)
|
|
||||||
{
|
|
||||||
MoveUp(Height);
|
|
||||||
mouseStillClickedMoveUp = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MoveDown(Height);
|
|
||||||
mouseStillClickedMoveUp = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
mouseStillClickedMoveLarge = true;
|
|
||||||
timerMouseStillClickedCounter = 0;
|
|
||||||
timerMouseStillClicked.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle upArrowRectangle = GetUpArrowRectangle();
|
|
||||||
if (upArrowRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
MoveUp(SmallChange);
|
|
||||||
mouseStillClickedMoveUp = true;
|
|
||||||
mouseStillClickedMoveLarge = false;
|
|
||||||
timerMouseStillClickedCounter = 0;
|
|
||||||
timerMouseStillClicked.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle downArrowRectangle = GetDownArrowRectangle(trackHeight);
|
|
||||||
if (downArrowRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
MoveDown(SmallChange);
|
|
||||||
mouseStillClickedMoveUp = false;
|
|
||||||
mouseStillClickedMoveLarge = false;
|
|
||||||
timerMouseStillClickedCounter = 0;
|
|
||||||
timerMouseStillClicked.Start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MoveDown(float change)
|
|
||||||
{
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int realRange = GetRealRange();
|
|
||||||
int pixelRange = trackHeight - sliderHeight;
|
|
||||||
if (realRange > 0)
|
|
||||||
{
|
|
||||||
if (pixelRange > 0)
|
|
||||||
{
|
|
||||||
float changeForOneItem = GetChangeForOneItem(change, pixelRange);
|
|
||||||
|
|
||||||
if ((sliderTop + changeForOneItem) > pixelRange)
|
|
||||||
{
|
|
||||||
sliderTop = pixelRange;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sliderTop += changeForOneItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
CalculateValue(pixelRange);
|
|
||||||
|
|
||||||
if (Value != lastValue)
|
|
||||||
{
|
|
||||||
ValueChanged?.Invoke(this, new EventArgs());
|
|
||||||
Scroll?.Invoke(this, new EventArgs());
|
|
||||||
lastValue = Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MoveUp(float change)
|
|
||||||
{
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int realRange = GetRealRange();
|
|
||||||
int pixelRange = trackHeight - sliderHeight;
|
|
||||||
if (realRange > 0)
|
|
||||||
{
|
|
||||||
if (pixelRange > 0)
|
|
||||||
{
|
|
||||||
float changeForOneItem = GetChangeForOneItem(change, pixelRange);
|
|
||||||
|
|
||||||
if ((sliderTop - changeForOneItem) < 0)
|
|
||||||
{
|
|
||||||
sliderTop = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sliderTop -= changeForOneItem;
|
|
||||||
}
|
|
||||||
|
|
||||||
CalculateValue(pixelRange);
|
|
||||||
|
|
||||||
if (Value != lastValue)
|
|
||||||
{
|
|
||||||
ValueChanged?.Invoke(this, new EventArgs());
|
|
||||||
Scroll?.Invoke(this, new EventArgs());
|
|
||||||
lastValue = Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CustomScrollbar_MouseUp(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
sliderDown = false;
|
|
||||||
sliderDragging = false;
|
|
||||||
timerMouseStillClicked.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CustomScrollbar_MouseMove(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
if (sliderDown == true)
|
|
||||||
{
|
|
||||||
sliderDragging = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sliderDragging)
|
|
||||||
{
|
|
||||||
MoveSlider(e.Y);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Value != lastValue)
|
|
||||||
{
|
|
||||||
ValueChanged?.Invoke(this, new EventArgs());
|
|
||||||
Scroll?.Invoke(this, new EventArgs());
|
|
||||||
lastValue = Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Point pointCursor = PointToClient(Cursor.Position);
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int top = (int)sliderTop + Width;
|
|
||||||
|
|
||||||
Rectangle sliderRectangle = GetSliderRectangle(sliderHeight, top);
|
|
||||||
Rectangle trackRectangle = GetTrackRectangle(trackHeight);
|
|
||||||
if (sliderRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
if (e.Button != MouseButtons.Left)
|
|
||||||
{
|
|
||||||
arrowUpHovered = false;
|
|
||||||
sliderHovered = true;
|
|
||||||
arrowDownHovered = false;
|
|
||||||
trackHovered = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (trackRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
arrowUpHovered = false;
|
|
||||||
sliderHovered = false;
|
|
||||||
arrowDownHovered = false;
|
|
||||||
trackHovered = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle upArrowRectangle = GetUpArrowRectangle();
|
|
||||||
if (upArrowRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
if (e.Button != MouseButtons.Left)
|
|
||||||
{
|
|
||||||
arrowUpHovered = true;
|
|
||||||
sliderHovered = false;
|
|
||||||
arrowDownHovered = false;
|
|
||||||
trackHovered = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle downArrowRectangle = GetDownArrowRectangle(trackHeight);
|
|
||||||
if (downArrowRectangle.Contains(pointCursor))
|
|
||||||
{
|
|
||||||
if (e.Button != MouseButtons.Left)
|
|
||||||
{
|
|
||||||
arrowUpHovered = false;
|
|
||||||
sliderHovered = false;
|
|
||||||
arrowDownHovered = true;
|
|
||||||
trackHovered = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MoveSlider(int y)
|
|
||||||
{
|
|
||||||
int nRealRange = Maximum - Minimum;
|
|
||||||
int trackHeight = GetTrackHeight();
|
|
||||||
int sliderHeight = GetSliderHeight(trackHeight);
|
|
||||||
int spot = clickPoint;
|
|
||||||
int pixelRange = trackHeight - sliderHeight;
|
|
||||||
if (sliderDown && nRealRange > 0)
|
|
||||||
{
|
|
||||||
if (pixelRange > 0)
|
|
||||||
{
|
|
||||||
int newSliderTop = y - (Width + spot);
|
|
||||||
|
|
||||||
if (newSliderTop < 0)
|
|
||||||
{
|
|
||||||
sliderTop = 0;
|
|
||||||
}
|
|
||||||
else if (newSliderTop > pixelRange)
|
|
||||||
{
|
|
||||||
sliderTop = pixelRange;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sliderTop = y - (Width + spot);
|
|
||||||
}
|
|
||||||
|
|
||||||
CalculateValue(pixelRange);
|
|
||||||
|
|
||||||
Invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CalculateValue(int pixelRange)
|
|
||||||
{
|
|
||||||
float percentage = sliderTop / pixelRange;
|
|
||||||
float fValue = percentage * (Maximum - LargeChange);
|
|
||||||
value = (int)fValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Rectangle GetSliderRectangle(int sliderHeight, int top)
|
|
||||||
{
|
|
||||||
return new Rectangle(new Point(0, top), new Size(Width + 1, sliderHeight));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Rectangle GetUpArrowRectangle()
|
|
||||||
{
|
|
||||||
return new Rectangle(new Point(0, 0), new Size(Width + 1, Width));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Rectangle GetUpArrowRectangleWithoutBorder()
|
|
||||||
{
|
|
||||||
return new Rectangle(new Point(1, 0), new Size(Width - 2, Width));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Rectangle GetDownArrowRectangle(int trackHeight)
|
|
||||||
{
|
|
||||||
return new Rectangle(new Point(0, Width + trackHeight), new Size(Width + 1, Width));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Rectangle GetDownArrowRectangleWithoutBorder(int trackHeight)
|
|
||||||
{
|
|
||||||
return new Rectangle(new Point(1, Width + trackHeight), new Size(Width - 2, Width));
|
|
||||||
}
|
|
||||||
|
|
||||||
private Rectangle GetTrackRectangle(int trackHeight)
|
|
||||||
{
|
|
||||||
return new Rectangle(new Point(0, Width), new Size(Width + 1, trackHeight));
|
|
||||||
}
|
|
||||||
|
|
||||||
private int GetRealRange()
|
|
||||||
{
|
|
||||||
return Maximum - Minimum - (int)LargeChange;
|
|
||||||
}
|
|
||||||
|
|
||||||
private float GetChangeForOneItem(float change, int pixelRange)
|
|
||||||
{
|
|
||||||
return change * pixelRange / (Maximum - LargeChange);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int GetTrackHeight()
|
|
||||||
{
|
|
||||||
return Height - (Width + Width);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int GetSliderHeight(int trackHeight)
|
|
||||||
{
|
|
||||||
int sliderHeight = (int)((float)LargeChange / Maximum * trackHeight);
|
|
||||||
|
|
||||||
if (sliderHeight > trackHeight)
|
|
||||||
{
|
|
||||||
sliderHeight = trackHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sliderHeight < 56)
|
|
||||||
{
|
|
||||||
sliderHeight = 56;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sliderHeight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,120 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
</root>
|
|
|
@ -1,35 +0,0 @@
|
||||||
// <copyright file="ScrollbarControlDesigner.cs" company="PlaceholderCompany">
|
|
||||||
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
||||||
// </copyright>
|
|
||||||
|
|
||||||
namespace SystemTrayMenu.UserInterface
|
|
||||||
{
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Windows.Forms.Design;
|
|
||||||
|
|
||||||
internal class ScrollbarControlDesigner : ControlDesigner
|
|
||||||
{
|
|
||||||
public override SelectionRules SelectionRules
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
SelectionRules selectionRules = base.SelectionRules;
|
|
||||||
PropertyDescriptor propDescriptor = TypeDescriptor.GetProperties(Component)["AutoSize"];
|
|
||||||
if (propDescriptor != null)
|
|
||||||
{
|
|
||||||
bool autoSize = (bool)propDescriptor.GetValue(Component);
|
|
||||||
if (autoSize)
|
|
||||||
{
|
|
||||||
selectionRules = SelectionRules.Visible | SelectionRules.Moveable | SelectionRules.BottomSizeable | SelectionRules.TopSizeable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
selectionRules = SelectionRules.Visible | SelectionRules.AllSizeable | SelectionRules.Moveable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return selectionRules;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -129,21 +129,11 @@ namespace SystemTrayMenu.UserInterface
|
||||||
labelItems.FontSize = Scaling.ScaleFontByPoints(7F);
|
labelItems.FontSize = Scaling.ScaleFontByPoints(7F);
|
||||||
dgv.FontSize = Scaling.ScaleFontByPoints(9F);
|
dgv.FontSize = Scaling.ScaleFontByPoints(9F);
|
||||||
|
|
||||||
#if TODO
|
|
||||||
customScrollbar = new CustomScrollbar();
|
|
||||||
|
|
||||||
tableLayoutPanelDgvAndScrollbar.Controls.Add(customScrollbar, 1, 0);
|
|
||||||
#endif
|
|
||||||
MouseDown += Menu_MouseDown;
|
MouseDown += Menu_MouseDown;
|
||||||
MouseUp += Menu_MouseUp;
|
MouseUp += Menu_MouseUp;
|
||||||
MouseMove += Menu_MouseMove;
|
MouseMove += Menu_MouseMove;
|
||||||
#if TODO
|
#if TODO
|
||||||
labelTitle.MouseWheel += new MouseEventHandler(DgvMouseWheel);
|
labelTitle.MouseWheel += new MouseEventHandler(DgvMouseWheel);
|
||||||
|
|
||||||
// customScrollbar
|
|
||||||
customScrollbar.Location = new Point(0, 0);
|
|
||||||
customScrollbar.Name = "customScrollbar";
|
|
||||||
customScrollbar.Size = new Size(Scaling.Scale(15), 40);
|
|
||||||
#endif
|
#endif
|
||||||
SolidColorBrush foreColor = new(Colors.Black);
|
SolidColorBrush foreColor = new(Colors.Black);
|
||||||
SolidColorBrush backColor = AppColors.Background.ToSolidColorBrush();
|
SolidColorBrush backColor = AppColors.Background.ToSolidColorBrush();
|
||||||
|
@ -170,21 +160,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
|
|
||||||
dgv.GotFocus += (_, _) => FocusTextBox();
|
dgv.GotFocus += (_, _) => FocusTextBox();
|
||||||
#if TODO
|
#if TODO
|
||||||
customScrollbar.GotFocus += (sender, e) => FocusTextBox();
|
|
||||||
|
|
||||||
customScrollbar.Margin = new Padding(0);
|
|
||||||
customScrollbar.Scroll += CustomScrollbar_Scroll;
|
|
||||||
void CustomScrollbar_Scroll(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
decimal firstIndex = customScrollbar.Value * dgv.Rows.Count / (decimal)customScrollbar.Maximum;
|
|
||||||
int firstIndexRounded = (int)Math.Ceiling(firstIndex);
|
|
||||||
if (firstIndexRounded > -1 && firstIndexRounded < dgv.RowCount)
|
|
||||||
{
|
|
||||||
dgv.FirstDisplayedScrollingRowIndex = firstIndexRounded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
customScrollbar.MouseEnter += ControlsMouseEnter;
|
|
||||||
dgv.MouseEnter += ControlsMouseEnter;
|
dgv.MouseEnter += ControlsMouseEnter;
|
||||||
labelTitle.MouseEnter += ControlsMouseEnter;
|
labelTitle.MouseEnter += ControlsMouseEnter;
|
||||||
textBoxSearch.MouseEnter += ControlsMouseEnter;
|
textBoxSearch.MouseEnter += ControlsMouseEnter;
|
||||||
|
@ -202,7 +177,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
MouseEnter?.Invoke();
|
MouseEnter?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
customScrollbar.MouseLeave += ControlsMouseLeave;
|
|
||||||
dgv.MouseLeave += ControlsMouseLeave;
|
dgv.MouseLeave += ControlsMouseLeave;
|
||||||
labelTitle.MouseLeave += ControlsMouseLeave;
|
labelTitle.MouseLeave += ControlsMouseLeave;
|
||||||
textBoxSearch.MouseLeave += ControlsMouseLeave;
|
textBoxSearch.MouseLeave += ControlsMouseLeave;
|
||||||
|
@ -343,9 +317,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
{
|
{
|
||||||
dgv.ScrollIntoView(dgv.Items[0]);
|
dgv.ScrollIntoView(dgv.Items[0]);
|
||||||
}
|
}
|
||||||
#if TODO
|
|
||||||
AdjustScrollbar();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void RefreshSearchText()
|
internal void RefreshSearchText()
|
||||||
|
@ -355,9 +326,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
{
|
{
|
||||||
dgv.ScrollIntoView(dgv.Items[0]);
|
dgv.ScrollIntoView(dgv.Items[0]);
|
||||||
}
|
}
|
||||||
#if TODO
|
|
||||||
AdjustScrollbar();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void FocusTextBox()
|
internal void FocusTextBox()
|
||||||
|
@ -772,19 +740,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void AdjustScrollbar()
|
|
||||||
{
|
|
||||||
#if TODO
|
|
||||||
if (dgv.Rows.Count > 0)
|
|
||||||
{
|
|
||||||
customScrollbar.Value = (int)Math.Round(
|
|
||||||
dgv.FirstDisplayedScrollingRowIndex * (decimal)customScrollbar.Maximum / dgv.Rows.Count,
|
|
||||||
0,
|
|
||||||
MidpointRounding.AwayFromZero);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void ResetHeight()
|
internal void ResetHeight()
|
||||||
{
|
{
|
||||||
#if TODO
|
#if TODO
|
||||||
|
@ -870,20 +825,10 @@ namespace SystemTrayMenu.UserInterface
|
||||||
if (dgvHeightByItems > dgvHeightMax)
|
if (dgvHeightByItems > dgvHeightMax)
|
||||||
{
|
{
|
||||||
ScrollbarVisible = true;
|
ScrollbarVisible = true;
|
||||||
customScrollbar.PaintEnable(dgv.Height);
|
|
||||||
if (customScrollbar.Maximum != dgvHeightByItems)
|
|
||||||
{
|
|
||||||
customScrollbar.Reset();
|
|
||||||
customScrollbar.Minimum = 0;
|
|
||||||
customScrollbar.Maximum = dgvHeightByItems;
|
|
||||||
customScrollbar.LargeChange = dgvHeightMax;
|
|
||||||
customScrollbar.SmallChange = Resources["RowHeight"];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ScrollbarVisible = false;
|
ScrollbarVisible = false;
|
||||||
customScrollbar.PaintDisable();
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -944,7 +889,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
#if TODO
|
#if TODO
|
||||||
int widthIcon = dgv.Columns[0].Width;
|
int widthIcon = dgv.Columns[0].Width;
|
||||||
int widthText = dgv.Columns[1].Width;
|
int widthText = dgv.Columns[1].Width;
|
||||||
int widthScrollbar = customScrollbar.Width;
|
|
||||||
|
|
||||||
using Graphics gfx = labelTitle.CreateGraphics();
|
using Graphics gfx = labelTitle.CreateGraphics();
|
||||||
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
|
gfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
|
||||||
|
@ -952,15 +896,15 @@ namespace SystemTrayMenu.UserInterface
|
||||||
txtTitle.Text + "___",
|
txtTitle.Text + "___",
|
||||||
dgv.RowTemplate.DefaultCellStyle.Font).Width + 0.5);
|
dgv.RowTemplate.DefaultCellStyle.Font).Width + 0.5);
|
||||||
|
|
||||||
if (withTitle > (widthIcon + widthText + widthScrollbar))
|
if (withTitle > (widthIcon + widthText))
|
||||||
{
|
{
|
||||||
tableLayoutPanelDgvAndScrollbar.MinimumSize = new Size(withTitle, 0);
|
tableLayoutPanelDgvAndScrollbar.MinimumSize = new Size(withTitle, 0);
|
||||||
dgv.Width = withTitle - widthScrollbar;
|
dgv.Width = withTitle;
|
||||||
dgv.Columns[1].Width = dgv.Width - widthIcon;
|
dgv.Columns[1].Width = dgv.Width - widthIcon;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tableLayoutPanelDgvAndScrollbar.MinimumSize = new Size(widthIcon + widthText + widthScrollbar, 0);
|
tableLayoutPanelDgvAndScrollbar.MinimumSize = new Size(widthIcon + widthText, 0);
|
||||||
dgv.Width = widthIcon + widthText;
|
dgv.Width = widthIcon + widthText;
|
||||||
dgv.Columns[1].Width = dgv.Width - widthIcon;
|
dgv.Columns[1].Width = dgv.Width - widthIcon;
|
||||||
}
|
}
|
||||||
|
@ -974,7 +918,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
private void DgvMouseWheel(object sender, MouseEventArgs e)
|
private void DgvMouseWheel(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
((HandledMouseEventArgs)e).Handled = true;
|
((HandledMouseEventArgs)e).Handled = true;
|
||||||
customScrollbar.CustomScrollbar_MouseWheel(sender, e);
|
|
||||||
MouseWheel?.Invoke();
|
MouseWheel?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -986,8 +929,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
private void TextBoxSearch_TextChanged()
|
private void TextBoxSearch_TextChanged()
|
||||||
{
|
{
|
||||||
#if TODO
|
#if TODO
|
||||||
customScrollbar.Value = 0;
|
|
||||||
|
|
||||||
DataTable data = (DataTable)dgv.DataSource;
|
DataTable data = (DataTable)dgv.DataSource;
|
||||||
#endif
|
#endif
|
||||||
string filterField = nameof(ListViewItemData.ColumnText);
|
string filterField = nameof(ListViewItemData.ColumnText);
|
||||||
|
@ -1347,7 +1288,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
private void ListViewItem_MouseUp(object sender, MouseButtonEventArgs e)
|
private void ListViewItem_MouseUp(object sender, MouseButtonEventArgs e)
|
||||||
{
|
{
|
||||||
CellMouseUp?.Invoke(dgv, dgv.Items.IndexOf(((ListViewItem)sender).Content), e);
|
CellMouseUp?.Invoke(dgv, dgv.Items.IndexOf(((ListViewItem)sender).Content), e);
|
||||||
AdjustScrollbar();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ListViewxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
private void ListViewxItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||||
|
|
|
@ -1197,24 +1197,6 @@ namespace SystemTrayMenu.UserInterface
|
||||||
textBoxColorScrollbarBackgroundDarkMode.Text = "#171717";
|
textBoxColorScrollbarBackgroundDarkMode.Text = "#171717";
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TODO
|
|
||||||
private void StopPlayingDingSoundEnterKeyPressed_KeyDown(object sender, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.KeyCode == Keys.Enter)
|
|
||||||
{
|
|
||||||
e.Handled = e.SuppressKeyPress = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void StopPlayingDingSoundEnterKeyPressed_KeyUp(object sender, KeyEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.KeyCode == Keys.Enter)
|
|
||||||
{
|
|
||||||
e.Handled = e.SuppressKeyPress = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private void ButtonCancel_Click(object sender, RoutedEventArgs e)
|
private void ButtonCancel_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Settings.Default.Reload();
|
Settings.Default.Reload();
|
||||||
|
|
Loading…
Reference in a new issue