private void selectAllToolStripMenuItem_Click(object sender, EventArgs e) { ListBoxArticle selectedListBox = ActiveControl as ListBoxArticle; if (selectedListBox != null) { selectedListBox.BeginUpdate(); // workaround for Wine issue: use of {HOME} then +{END} leads to 100% CPU and locked application // so use slower SetSelected if on Linux if (Globals.UsingLinux) { for (int i = 0; i < selectedListBox.Items.Count; i++) { selectedListBox.SetSelected(i, true); } } else { SendKeys.SendWait("{HOME}"); SendKeys.SendWait("+{END}"); } selectedListBox.EndUpdate(); } }
public void RemoveSelected() { ListBoxArticle lbArticles = new ListBoxArticle(); const int big = 70000, sel = 5000; // sequential block deletion performance for (int i = 0; i < big; i++) lbArticles.Items.Add(new Article(i.ToString())); for (int j = sel; j > 0; j--) lbArticles.SetSelected(big-j, true); lbArticles.RemoveSelected(true); if (Globals.UsingMono) // Mono implementation of SetSelected does not seem to honour second input to multi-select Assert.AreEqual(lbArticles.Items.Count, big-1); else Assert.AreEqual(lbArticles.Items.Count, big-sel); // single selected item deletion performance lbArticles.Items.Clear(); for (int i = 0; i < big*3; i++) lbArticles.Items.Add(new Article(i.ToString())); lbArticles.SetSelected((int)big/2, true); lbArticles.RemoveSelected(true); Assert.AreEqual(lbArticles.Items.Count, big*3-1); // non-sequential deletion lbArticles.Items.Clear(); for (int i = 0; i < 10; i++) lbArticles.Items.Add(new Article(i.ToString())); lbArticles.SetSelected(1, true); lbArticles.SetSelected(3, true); lbArticles.RemoveSelected(true); if (Globals.UsingMono) { lbArticles.SetSelected(1, true); lbArticles.RemoveSelected(true); } Assert.IsFalse(lbArticles.Items.Contains(new Article("1"))); Assert.IsFalse(lbArticles.Items.Contains(new Article("3"))); Assert.IsTrue(lbArticles.Items.Contains(new Article("2"))); lbArticles.Items.Clear(); for (int i = 0; i < 10; i++) lbArticles.Items.Add(new Article(i.ToString())); lbArticles.SetSelected(1, true); lbArticles.SetSelected(5, true); lbArticles.RemoveSelected(true); if (Globals.UsingMono) { lbArticles.SetSelected(1, true); lbArticles.RemoveSelected(true); } Assert.IsFalse(lbArticles.Items.Contains(new Article("1"))); Assert.IsFalse(lbArticles.Items.Contains(new Article("5"))); Assert.IsTrue(lbArticles.Items.Contains(new Article("2"))); lbArticles.Items.Clear(); lbArticles.Items.Add(new Article("A")); lbArticles.Items.Add(new Article("A")); lbArticles.Items.Add(new Article("B")); lbArticles.SetSelected(2, true); lbArticles.RemoveSelected(false); Assert.AreEqual(lbArticles.Items.Count, 2, "Duplicates not removed if not in duplicate mode"); lbArticles.Items.Clear(); lbArticles.Items.Add(new Article("A")); lbArticles.Items.Add(new Article("B")); lbArticles.Items.Add(new Article("C")); lbArticles.SetSelected(0, true); lbArticles.SetSelected(1, true); lbArticles.SetSelected(2, true); lbArticles.RemoveSelected(false); Assert.AreEqual(lbArticles.Items.Count, 0, "List cleared if all items selected and removed"); }