private IEnumerator<object> RefreshList(PriorityEntry newSelection) { PriorityEntry[] oldSelectedEntries; if (newSelection != null) oldSelectedEntries = new PriorityEntry[] { newSelection }; else oldSelectedEntries = SelectedEntries.ToArray(); using (new ControlWaitCursor(this)) { List.BeginUpdate(); List.Items.Clear(); List.Groups.Clear(); int[] priorities = null; yield return Program.Database.ExecutePrimitiveArray<int>( "SELECT DISTINCT priority FROM enemyPriorities ORDER BY priority DESC" ).Bind(() => priorities); var priorityGroups = new Dictionary<int, ListViewGroup>(); foreach (int priority in priorities) { if (priorityGroups.ContainsKey(priority)) continue; else if (priority <= 0) continue; List.Groups.Add(priorityGroups[priority] = new ListViewGroup( String.Format("priority:{0}", priority), String.Format("Priority +{0}", priority) )); } List.Groups.Add(priorityGroups[0] = new ListViewGroup( "priority:0", "Default Priority" )); List.Groups.Add(priorityGroups[-1] = new ListViewGroup( "priority:-1", "Never Attack" )); PriorityEntry[] entries = null; yield return Program.Database.ExecuteArray<PriorityEntry>( "SELECT ep.groupID, ep.typeID, ep.priority, g.name AS groupName, t.name AS typeName " + "FROM enemyPriorities ep " + "LEFT OUTER JOIN evedata.groups g ON ep.groupID = g.groupID " + "LEFT OUTER JOIN evedata.types t ON ep.typeID = t.typeID" ).Bind(() => entries); foreach (var entry in entries) { var item = new ListViewItem( entry.TypeName ?? entry.GroupName, (entry.TypeName != null) ? "type" : "group", priorityGroups[Math.Max(entry.Priority, -1)] ); item.Tag = entry; List.Items.Add(item); foreach (var oldEntry in oldSelectedEntries) { if ((oldEntry.TypeID == entry.TypeID) && (oldEntry.GroupID == entry.GroupID)) { item.Selected = true; break; } } } foreach (var group in priorityGroups.Values) { if (group.Items.Count != 0) continue; var nullItem = new ListViewItem( "", group ); nullItem.Tag = null; List.Items.Add(nullItem); } List.EndUpdate(); if (List.SelectedIndices.Count > 0) { List.EnsureVisible(List.SelectedIndices[List.SelectedIndices.Count - 1]); List.EnsureVisible(List.SelectedIndices[0]); } } }
private IEnumerator<object> RemoveItemsTask(PriorityEntry[] items) { using (new ControlWaitCursor(this)) using (var xact = Program.Database.CreateTransaction()) { yield return xact; object[] args; foreach (var item in items) { string sql = "DELETE FROM enemyPriorities WHERE "; if (item.TypeID.HasValue) { sql += "typeID = ? AND groupID = ?"; args = new object[] { item.TypeID.Value, item.GroupID.Value }; } else { sql += "groupID = ? AND typeID IS NULL"; args = new object[] { item.GroupID.Value }; } yield return Program.Database.ExecuteSQL(sql, args); } yield return xact.Commit(); } Script.Preferences.Flush(); yield return LoadConfiguration(); }
private IEnumerator <object> RefreshList(PriorityEntry newSelection) { PriorityEntry[] oldSelectedEntries; if (newSelection != null) { oldSelectedEntries = new PriorityEntry[] { newSelection } } ; else { oldSelectedEntries = SelectedEntries.ToArray(); } using (new ControlWaitCursor(this)) { List.BeginUpdate(); List.Items.Clear(); List.Groups.Clear(); int[] priorities = null; yield return(Program.Database.ExecutePrimitiveArray <int>( "SELECT DISTINCT priority FROM enemyPriorities ORDER BY priority DESC" ).Bind(() => priorities)); var priorityGroups = new Dictionary <int, ListViewGroup>(); foreach (int priority in priorities) { if (priorityGroups.ContainsKey(priority)) { continue; } else if (priority <= 0) { continue; } List.Groups.Add(priorityGroups[priority] = new ListViewGroup( String.Format("priority:{0}", priority), String.Format("Priority +{0}", priority) )); } List.Groups.Add(priorityGroups[0] = new ListViewGroup( "priority:0", "Default Priority" )); List.Groups.Add(priorityGroups[-1] = new ListViewGroup( "priority:-1", "Never Attack" )); PriorityEntry[] entries = null; yield return(Program.Database.ExecuteArray <PriorityEntry>( "SELECT ep.groupID, ep.typeID, ep.priority, g.name AS groupName, t.name AS typeName " + "FROM enemyPriorities ep " + "LEFT OUTER JOIN evedata.groups g ON ep.groupID = g.groupID " + "LEFT OUTER JOIN evedata.types t ON ep.typeID = t.typeID" ).Bind(() => entries)); foreach (var entry in entries) { var item = new ListViewItem( entry.TypeName ?? entry.GroupName, (entry.TypeName != null) ? "type" : "group", priorityGroups[Math.Max(entry.Priority, -1)] ); item.Tag = entry; List.Items.Add(item); foreach (var oldEntry in oldSelectedEntries) { if ((oldEntry.TypeID == entry.TypeID) && (oldEntry.GroupID == entry.GroupID)) { item.Selected = true; break; } } } foreach (var group in priorityGroups.Values) { if (group.Items.Count != 0) { continue; } var nullItem = new ListViewItem( "", group ); nullItem.Tag = null; List.Items.Add(nullItem); } List.EndUpdate(); if (List.SelectedIndices.Count > 0) { List.EnsureVisible(List.SelectedIndices[List.SelectedIndices.Count - 1]); List.EnsureVisible(List.SelectedIndices[0]); } } }