mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
Use ListView virtual mode in history form
This commit is contained in:
parent
a3f615d72c
commit
bbec9ecef1
3 changed files with 75 additions and 55 deletions
3
ShareX.HistoryLib/Forms/HistoryForm.Designer.cs
generated
3
ShareX.HistoryLib/Forms/HistoryForm.Designer.cs
generated
|
@ -220,8 +220,11 @@ private void InitializeComponent()
|
||||||
this.lvHistory.Name = "lvHistory";
|
this.lvHistory.Name = "lvHistory";
|
||||||
this.lvHistory.UseCompatibleStateImageBehavior = false;
|
this.lvHistory.UseCompatibleStateImageBehavior = false;
|
||||||
this.lvHistory.View = System.Windows.Forms.View.Details;
|
this.lvHistory.View = System.Windows.Forms.View.Details;
|
||||||
|
this.lvHistory.VirtualMode = true;
|
||||||
|
this.lvHistory.CacheVirtualItems += new System.Windows.Forms.CacheVirtualItemsEventHandler(this.lvHistory_CacheVirtualItems);
|
||||||
this.lvHistory.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.lvHistory_ItemDrag);
|
this.lvHistory.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.lvHistory_ItemDrag);
|
||||||
this.lvHistory.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvHistory_ItemSelectionChanged);
|
this.lvHistory.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.lvHistory_ItemSelectionChanged);
|
||||||
|
this.lvHistory.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.lvHistory_RetrieveVirtualItem);
|
||||||
this.lvHistory.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvHistory_KeyDown);
|
this.lvHistory.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvHistory_KeyDown);
|
||||||
this.lvHistory.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvHistory_MouseDoubleClick);
|
this.lvHistory.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvHistory_MouseDoubleClick);
|
||||||
//
|
//
|
||||||
|
|
|
@ -41,9 +41,12 @@ public partial class HistoryForm : Form
|
||||||
|
|
||||||
private HistoryItemManager him;
|
private HistoryItemManager him;
|
||||||
private HistoryItem[] allHistoryItems;
|
private HistoryItem[] allHistoryItems;
|
||||||
|
private HistoryItem[] filteredHistoryItems;
|
||||||
private string defaultTitle;
|
private string defaultTitle;
|
||||||
private Dictionary<string, string> typeNamesLocaleLookup;
|
private Dictionary<string, string> typeNamesLocaleLookup;
|
||||||
private string[] allTypeNames;
|
private string[] allTypeNames;
|
||||||
|
private ListViewItem[] listViewCache;
|
||||||
|
private int listViewFirstItem;
|
||||||
|
|
||||||
public HistoryForm(string historyPath, HistorySettings settings, Action<string> uploadFile = null, Action<string> editImage = null)
|
public HistoryForm(string historyPath, HistorySettings settings, Action<string> uploadFile = null, Action<string> editImage = null)
|
||||||
{
|
{
|
||||||
|
@ -137,7 +140,7 @@ private void RefreshHistoryItems(bool mockData = false)
|
||||||
|
|
||||||
private HistoryItem[] him_GetHistoryItems()
|
private HistoryItem[] him_GetHistoryItems()
|
||||||
{
|
{
|
||||||
return lvHistory.SelectedItems.Cast<ListViewItem>().Select(x => x.Tag as HistoryItem).ToArray();
|
return lvHistory.SelectedIndices.Cast<int>().Select(i => filteredHistoryItems[i]).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private HistoryItem[] GetHistoryItems(bool mockData = false)
|
private HistoryItem[] GetHistoryItems(bool mockData = false)
|
||||||
|
@ -163,8 +166,13 @@ private void ApplyFilter(HistoryFilter filter)
|
||||||
if (allHistoryItems != null && allHistoryItems.Length > 0)
|
if (allHistoryItems != null && allHistoryItems.Length > 0)
|
||||||
{
|
{
|
||||||
IEnumerable<HistoryItem> historyItems = filter.ApplyFilter(allHistoryItems);
|
IEnumerable<HistoryItem> historyItems = filter.ApplyFilter(allHistoryItems);
|
||||||
|
filteredHistoryItems = historyItems.ToArray();
|
||||||
|
|
||||||
AddHistoryItems(historyItems.ToArray());
|
UpdateTitle(filteredHistoryItems);
|
||||||
|
|
||||||
|
listViewCache = null;
|
||||||
|
lvHistory.VirtualListSize = 0;
|
||||||
|
lvHistory.VirtualListSize = filteredHistoryItems.Length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,54 +221,35 @@ private void ApplyFilterAdvanced()
|
||||||
ApplyFilter(filter);
|
ApplyFilter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddHistoryItems(HistoryItem[] historyItems)
|
private ListViewItem CreateListViewItem(int index)
|
||||||
{
|
{
|
||||||
Cursor = Cursors.WaitCursor;
|
HistoryItem hi = filteredHistoryItems[index];
|
||||||
|
|
||||||
UpdateTitle(historyItems);
|
ListViewItem lvi = new ListViewItem();
|
||||||
|
|
||||||
lvHistory.Items.Clear();
|
if (hi.Type.Equals("Image", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
|
||||||
ListViewItem[] listViewItems = new ListViewItem[historyItems.Length];
|
|
||||||
|
|
||||||
for (int i = 0; i < historyItems.Length; i++)
|
|
||||||
{
|
{
|
||||||
HistoryItem hi = historyItems[i];
|
lvi.ImageIndex = 0;
|
||||||
ListViewItem lvi = listViewItems[i] = new ListViewItem();
|
}
|
||||||
|
else if (hi.Type.Equals("Text", StringComparison.InvariantCultureIgnoreCase))
|
||||||
if (hi.Type.Equals("Image", StringComparison.InvariantCultureIgnoreCase))
|
{
|
||||||
{
|
lvi.ImageIndex = 1;
|
||||||
lvi.ImageIndex = 0;
|
}
|
||||||
}
|
else if (hi.Type.Equals("File", StringComparison.InvariantCultureIgnoreCase))
|
||||||
else if (hi.Type.Equals("Text", StringComparison.InvariantCultureIgnoreCase))
|
{
|
||||||
{
|
lvi.ImageIndex = 2;
|
||||||
lvi.ImageIndex = 1;
|
}
|
||||||
}
|
else
|
||||||
else if (hi.Type.Equals("File", StringComparison.InvariantCultureIgnoreCase))
|
{
|
||||||
{
|
lvi.ImageIndex = 3;
|
||||||
lvi.ImageIndex = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lvi.ImageIndex = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
lvi.SubItems.Add(hi.DateTime.ToString()).Tag = hi.DateTime;
|
|
||||||
lvi.SubItems.Add(hi.FileName);
|
|
||||||
lvi.SubItems.Add(hi.URL);
|
|
||||||
lvi.Tag = hi;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lvHistory.Items.AddRange(listViewItems);
|
lvi.SubItems.Add(hi.DateTime.ToString()).Tag = hi.DateTime;
|
||||||
lvHistory.FillLastColumn();
|
lvi.SubItems.Add(hi.FileName);
|
||||||
lvHistory.Focus();
|
lvi.SubItems.Add(hi.URL);
|
||||||
|
lvi.Tag = hi;
|
||||||
|
|
||||||
if (lvHistory.Items.Count > 0)
|
return lvi;
|
||||||
{
|
|
||||||
lvHistory.Items[0].Selected = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Cursor = Cursors.Default;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateTitle(HistoryItem[] historyItems = null)
|
private void UpdateTitle(HistoryItem[] historyItems = null)
|
||||||
|
@ -396,9 +385,7 @@ private string OutputStats(HistoryItem[] historyItems)
|
||||||
private void HistoryForm_Shown(object sender, EventArgs e)
|
private void HistoryForm_Shown(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
Refresh();
|
Refresh();
|
||||||
|
|
||||||
RefreshHistoryItems();
|
RefreshHistoryItems();
|
||||||
|
|
||||||
this.ForceActivate();
|
this.ForceActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,6 +504,35 @@ private void btnAdvancedSearchReset_Click(object sender, EventArgs e)
|
||||||
ApplyFilterAdvanced();
|
ApplyFilterAdvanced();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void lvHistory_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
|
||||||
|
{
|
||||||
|
if (listViewCache != null && e.ItemIndex >= listViewFirstItem && e.ItemIndex < listViewFirstItem + listViewCache.Length)
|
||||||
|
{
|
||||||
|
e.Item = listViewCache[e.ItemIndex - listViewFirstItem];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.Item = CreateListViewItem(e.ItemIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lvHistory_CacheVirtualItems(object sender, CacheVirtualItemsEventArgs e)
|
||||||
|
{
|
||||||
|
if (listViewCache != null && e.StartIndex >= listViewFirstItem && e.EndIndex <= listViewFirstItem + listViewCache.Length)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
listViewFirstItem = e.StartIndex;
|
||||||
|
int length = e.EndIndex - e.StartIndex + 1;
|
||||||
|
listViewCache = new ListViewItem[length];
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
listViewCache[i] = CreateListViewItem(e.StartIndex + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void lvHistory_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
|
private void lvHistory_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
UpdateControls();
|
UpdateControls();
|
||||||
|
@ -539,9 +555,10 @@ private void lvHistory_ItemDrag(object sender, ItemDragEventArgs e)
|
||||||
{
|
{
|
||||||
List<string> selection = new List<string>();
|
List<string> selection = new List<string>();
|
||||||
|
|
||||||
foreach (ListViewItem item in lvHistory.SelectedItems)
|
foreach (int index in lvHistory.SelectedIndices)
|
||||||
{
|
{
|
||||||
HistoryItem hi = (HistoryItem)item.Tag;
|
HistoryItem hi = filteredHistoryItems[index];
|
||||||
|
|
||||||
if (File.Exists(hi.FilePath))
|
if (File.Exists(hi.FilePath))
|
||||||
{
|
{
|
||||||
selection.Add(hi.FilePath);
|
selection.Add(hi.FilePath);
|
||||||
|
|
|
@ -586,7 +586,7 @@
|
||||||
<value>lvHistory</value>
|
<value>lvHistory</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>lvHistory.Type" xml:space="preserve">
|
<data name=">>lvHistory.Type" xml:space="preserve">
|
||||||
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.7.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>lvHistory.Parent" xml:space="preserve">
|
<data name=">>lvHistory.Parent" xml:space="preserve">
|
||||||
<value>tscHistory.ContentPanel</value>
|
<value>tscHistory.ContentPanel</value>
|
||||||
|
@ -718,7 +718,7 @@
|
||||||
<value>3, 0</value>
|
<value>3, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsHistory.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tsHistory.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>508, 25</value>
|
<value>477, 25</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tsHistory.TabIndex" type="System.Int32, mscorlib">
|
<data name="tsHistory.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
|
@ -799,7 +799,7 @@
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pbThumbnail.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="pbThumbnail.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>627, 445</value>
|
<value>627, 442</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pbThumbnail.TabIndex" type="System.Int32, mscorlib">
|
<data name="pbThumbnail.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>3</value>
|
<value>3</value>
|
||||||
|
@ -808,7 +808,7 @@
|
||||||
<value>pbThumbnail</value>
|
<value>pbThumbnail</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>pbThumbnail.Type" xml:space="preserve">
|
<data name=">>pbThumbnail.Type" xml:space="preserve">
|
||||||
<value>ShareX.HelpersLib.MyPictureBox, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>ShareX.HelpersLib.MyPictureBox, ShareX.HelpersLib, Version=13.7.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>pbThumbnail.Parent" xml:space="preserve">
|
<data name=">>pbThumbnail.Parent" xml:space="preserve">
|
||||||
<value>scHistoryItemInfo.Panel1</value>
|
<value>scHistoryItemInfo.Panel1</value>
|
||||||
|
@ -838,7 +838,7 @@
|
||||||
<value>0, 0</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pgHistoryItemInfo.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="pgHistoryItemInfo.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>627, 209</value>
|
<value>627, 212</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="pgHistoryItemInfo.TabIndex" type="System.Int32, mscorlib">
|
<data name="pgHistoryItemInfo.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
|
@ -871,7 +871,7 @@
|
||||||
<value>627, 661</value>
|
<value>627, 661</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="scHistoryItemInfo.SplitterDistance" type="System.Int32, mscorlib">
|
<data name="scHistoryItemInfo.SplitterDistance" type="System.Int32, mscorlib">
|
||||||
<value>445</value>
|
<value>442</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="scHistoryItemInfo.SplitterWidth" type="System.Int32, mscorlib">
|
<data name="scHistoryItemInfo.SplitterWidth" type="System.Int32, mscorlib">
|
||||||
<value>7</value>
|
<value>7</value>
|
||||||
|
@ -883,7 +883,7 @@
|
||||||
<value>scHistoryItemInfo</value>
|
<value>scHistoryItemInfo</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>scHistoryItemInfo.Type" xml:space="preserve">
|
<data name=">>scHistoryItemInfo.Type" xml:space="preserve">
|
||||||
<value>ShareX.HelpersLib.SplitContainerCustomSplitter, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>ShareX.HelpersLib.SplitContainerCustomSplitter, ShareX.HelpersLib, Version=13.7.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>scHistoryItemInfo.Parent" xml:space="preserve">
|
<data name=">>scHistoryItemInfo.Parent" xml:space="preserve">
|
||||||
<value>scMain.Panel2</value>
|
<value>scMain.Panel2</value>
|
||||||
|
@ -922,7 +922,7 @@
|
||||||
<value>scMain</value>
|
<value>scMain</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>scMain.Type" xml:space="preserve">
|
<data name=">>scMain.Type" xml:space="preserve">
|
||||||
<value>ShareX.HelpersLib.SplitContainerCustomSplitter, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
|
<value>ShareX.HelpersLib.SplitContainerCustomSplitter, ShareX.HelpersLib, Version=13.7.0.0, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>scMain.Parent" xml:space="preserve">
|
<data name=">>scMain.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
|
|
Loading…
Reference in a new issue