public void createSortFlagListFromString(String str) { sortFlags.Clear(); foreach (SortFlag sf in SortFlag.sortedFlagList.Values) { sf.descending = false; } String[] sortKeys = str.Split(','); for (int i = 0; i < sortKeys.Length; i++) { try { SortFlag sf = SortFlag.decode(sortKeys[i]); sf.descending = sortKeys[i].Length == 3 && sortKeys[i].Substring(2, 1).Equals("-"); sortFlags.Add(sf); } catch (Exception e) { Util.LogError(e); } } }
public void lstSortSettings_Selected(object sender, int row, int col) { try { HudList.HudListRowAccessor acc = MainView.lstSortSettings[row]; String code = ((HudStaticText)acc[0]).Text.ToString(); SortFlag flag = SortFlag.decode(code); bool changed = false; if (col < 2) // DUMP PROPERTIES { flag.propertyDumpSelection(); } else if (col == 2) // MOVE UP { if (sortFlags.Contains(flag)) { int index = sortFlags.IndexOf(flag); if (index > 0) { SortFlag f = (SortFlag)sortFlags[index - 1]; sortFlags[index - 1] = sortFlags[index]; sortFlags[index] = f; changed = true; } } } else if (col == 3) // MOVE DOWN { if (sortFlags.Contains(flag)) { int index = sortFlags.IndexOf(flag); if (index < sortFlags.Count - 1) { SortFlag f = (SortFlag)sortFlags[index + 1]; sortFlags[index + 1] = sortFlags[index]; sortFlags[index] = f; changed = true; } } } else if (col == 4) // REMOVE { if (sortFlags.Contains(flag)) { sortFlags.Remove(flag); flag.descending = false; } else { sortFlags.Add(flag); } changed = true; } else if (col == 5) { if (sortFlags.Contains(flag)) { flag.descending = !flag.descending; changed = true; } } if (changed) { MainView.edtSortString.Text = sortFlagListToString(); rebuildLstSortSettings(); } } catch (Exception ex) { Util.LogError(ex); } }
private void Current_RenderFrame_Sort(object sender, EventArgs e) { try { if (CURRENT_STATE == State.IDLE) { CoreManager.Current.RenderFrame -= new EventHandler <EventArgs>(Current_RenderFrame_Sort); } else if (CURRENT_STATE == State.INITIATED) { bool identifying = false; MainView.prgProgressBar.Max = sortList.Count; MainView.prgProgressBar.PreText = "identifying..."; foreach (WorldObject obj in sortList) { if (!obj.HasIdData) { identifying = true; MainView.prgProgressBar.Position = sortList.IndexOf(obj) + 1; break; } } if (!identifying) { CURRENT_STATE = State.BUILDING_LIST; MainView.prgProgressBar.Position = MainView.prgProgressBar.Max; } } else if (CURRENT_STATE == State.BUILDING_LIST) { String[] sortKeys = MainView.edtSortString.Text.Split(','); System.Collections.ArrayList sortValueList = new System.Collections.ArrayList(); for (int i = sortKeys.Length - 1; i >= 0; i--) { foreach (WorldObject worldObject in sortList) { SortFlag sf = SortFlag.decode(sortKeys[i]); String sortMetric = sf.valueOf(worldObject); if (!sortValueList.Contains(sortMetric)) { sortValueList.Add(sortMetric); } } sortValueList.Sort(new AlphanumComparator()); System.Collections.ArrayList newSortList = new System.Collections.ArrayList(); if (!(sortKeys[i].Length == 3 && sortKeys[i].Substring(2, 1).Equals("-"))) { sortValueList.Reverse(); } foreach (Object sortValue in sortValueList) { foreach (WorldObject worldObject in sortList) { String sortMetric = SortFlag.decode(sortKeys[i]).valueOf(worldObject); if (sortMetric.Equals(sortValue)) { newSortList.Add(worldObject); } } } sortList = newSortList; if (i == 0) { if (Properties.Settings.Default.ReverseSortList) { sortList.Reverse(); } foreach (WorldObject worldObject in sortList) { sortQueue.Enqueue(worldObject); } } } Util.WriteToChat(sortQueue.Count + " items in queue..."); CURRENT_STATE = State.MOVING_ITEMS; MainView.prgProgressBar.PreText = "working..."; MainView.prgProgressBar.Max = sortQueue.Count; } else if (CURRENT_STATE == State.MOVING_ITEMS) { if (sortQueue.Count > 0) { if (Core.Actions.BusyState == 0) { MainView.prgProgressBar.Position = MainView.prgProgressBar.Max - sortQueue.Count; WorldObject obj = (WorldObject)sortQueue.Dequeue(); if (containerDest != Core.CharacterFilter.Id && Core.WorldFilter[containerDest].ObjectClass.Equals(ObjectClass.Player)) { Globals.Host.Actions.GiveItem(obj.Id, containerDest); } else { Globals.Host.Actions.MoveItem(obj.Id, containerDest, containerDestSlot, true); } } } else { CURRENT_STATE = State.IDLE; MainView.prgProgressBar.PreText = "done!"; MainView.prgProgressBar.Position = MainView.prgProgressBar.Max; MainView.btnActivate.Text = "Activate"; Util.WriteToChat("done sorting items!"); } } } catch (Exception ex) { Util.LogError(ex); } }