public void InitObjectListView() { //modlist_objectlistview?.Dispose(); var categoryGroupingDelegate = new GroupKeyGetterDelegate(o => Mods.GetCategory(o as ModEntry)); var categoryFormatterDelegate = new GroupFormatterDelegate((@group, parameters) => { var groupName = group.Key as string; if (groupName == null) { return; } // Restore collapsed state group.Collapsed = Mods.Entries[groupName].Collapsed; // Sort Categories parameters.GroupComparer = Comparer <OLVGroup> .Create((a, b) => Mods.Entries[(string)a.Key].Index.CompareTo(Mods.Entries[(string)b.Key].Index)); }); olvcActive.GroupKeyGetter = categoryGroupingDelegate; olvcActive.GroupFormatter = categoryFormatterDelegate; olvcName.GroupKeyGetter = categoryGroupingDelegate; olvcName.GroupFormatter = categoryFormatterDelegate; olvcID.GroupKeyGetter = categoryGroupingDelegate; olvcID.GroupFormatter = categoryFormatterDelegate; olvcOrder.GroupKeyGetter = categoryGroupingDelegate; olvcOrder.GroupFormatter = categoryFormatterDelegate; olvcCategory.AspectGetter = o => Mods.GetCategory((ModEntry)o); olvcTags.Renderer = new TagRenderer(modlist_ListObjectListView, AvailableTags); olvcTags.AspectPutter = (rowObject, value) => { var tags = ((string)value).Split(';'); tags.All(t => AddTag((ModEntry)rowObject, t.Trim())); }; olvcTags.SearchValueGetter = rowObject => ((ModEntry)rowObject).Tags.Select(s => s.ToLower()).ToArray(); olvcTags.AspectGetter = rowObject => ""; olvcState.AspectGetter = o => { var mod = (ModEntry)o; if (mod.State.HasFlag(ModState.NotLoaded)) { return("Not Loaded"); } if (mod.State.HasFlag(ModState.NotInstalled)) { return("Not Installed"); } if (mod.State.HasFlag(ModState.ModConflict)) { return("Conflict"); } if (mod.State.HasFlag(ModState.DuplicateID)) { return("Duplicate ID"); } if (mod.State.HasFlag(ModState.New)) { return("New"); } if (mod.State.HasFlag(ModState.UpdateAvailable)) { return("Update Available"); } return("OK"); }; olvcSize.AspectToStringConverter = size => ((long)size).FormatAsFileSize(); olvcLastUpdated.DataType = typeof(DateTime?); olvcDateAdded.DataType = typeof(DateTime?); olvcDateCreated.DataType = typeof(DateTime?); olvcPath.GroupKeyGetter = o => Path.GetDirectoryName((o as ModEntry)?.Path); // size groupies var columns = modlist_ListObjectListView.AllColumns.ToArray(); columns.Single(c => c.AspectName == "Size").MakeGroupies( new[] { 1024, 1024 * 1024, (long)50 * 1024 * 1024, (long)100 * 1024 * 1024 }, new[] { "< 1 KB", "< 1MB", "< 50 MB", "< 100 MB", "> 100 MB" } ); columns.Single(c => c.AspectName == "isHidden").MakeGroupies( new [] { false, true }, new [] { "wut?", "Not Hidden", "Hidden" }); columns.Single(c => c.AspectName == "isActive").MakeGroupies( new[] { false, true }, new[] { "wut?", "Disabled", "Enabled" }); olvcActive.AspectToStringConverter = active => ""; olvcActive.GroupFormatter = (g, param) => { param.GroupComparer = Comparer <OLVGroup> .Create((a, b) => (param.GroupByOrder == SortOrder.Descending ? 1 : -1) *a.Header.CompareTo(b.Header)); }; olvcName.AutoCompleteEditor = false; // Sort by Order or WorkshopID column removes groups modlist_ListObjectListView.BeforeSorting += (sender, args) => { modlist_ListObjectListView.ShowGroups = !(args.ColumnToSort.Equals(olvcOrder) || args.ColumnToSort.Equals(olvcWorkshopID)); }; // Init DateTime columns foreach (var column in columns.Where(c => c.DataType == typeof(DateTime?))) { column.AspectToStringConverter = d => (d as DateTime?)?.ToLocalTime().ToString(CultureInfo.CurrentCulture); column.MakeGroupies( new[] { DateTime.Now.Subtract(TimeSpan.FromHours(24 * 30)), DateTime.Now.Subtract(TimeSpan.FromHours(24 * 7)), DateTime.Now.Date }, new[] { "Older Than One Month", "This Month", "This Week", "Today" }); // Sord Desc column.GroupFormatter = (g, param) => { param.GroupComparer = Comparer <OLVGroup> .Create((a, b) => (param.GroupByOrder == SortOrder.Descending ? -1 : 1) *a.Header.CompareTo(b.Header)); }; } // Wrapper ModList = new TypedObjectListView <ModEntry>(modlist_ListObjectListView); // Events //modlist_objectlistview.SelectionChanged += ModListSelectionChanged; //modlist_objectlistview.ItemChecked += ModListItemChecked; //modlist_objectlistview.CellRightClick += ModListCellRightClick; //modlist_objectlistview.CellEditFinished += ModListEditFinished; //modlist_objectlistview.CellToolTipShowing += ModListCellToolTipShowing; //modlist_objectlistview.FormatRow += ModListFormatRow; //modlist_objectlistview.GroupExpandingCollapsing += ModListGroupExpandingCollapsing; //modlist_objectlistview.KeyUp += ModListKeyUp; //modlist_objectlistview.KeyDown += ModListKeyDown; // Restore State if (Settings.Windows.ContainsKey("main") && Settings.Windows["main"].Data != null) { modlist_ListObjectListView.RestoreState(Settings.Windows["main"].Data); } RefreshModList(); // Start out sorted by name modlist_ListObjectListView.Sort(olvcName, SortOrder.Ascending); }
public void InitObjectListView() { modlist_objectlistview?.Dispose(); modlist_objectlistview = new ObjectListView { // General Name = "modlist_objectlistview", Size = new Size(886, 222), Location = new Point(0, 0), Dock = DockStyle.Fill, TabIndex = 0, // Behavior FullRowSelect = true, CellEditActivation = ObjectListView.CellEditActivateMode.DoubleClick, AllowColumnReorder = true, //ShowItemToolTips = true, // Sorting ShowSortIndicators = true, TintSortColumn = true, IsSearchOnSortColumn = false, SortGroupItemsByPrimaryColumn = false, AlwaysGroupBySortOrder = SortOrder.None, // Checkbox CheckBoxes = true, CheckedAspectName = "isActive" }; horizontal_splitcontainer.Panel1.Controls.Add(modlist_objectlistview); //modlist_objectlistview.Update(); var categoryGroupingDelegate = new GroupKeyGetterDelegate(o => Mods.GetCategory(o as ModEntry)); var categoryFormatterDelegate = new GroupFormatterDelegate((@group, parameters) => { var groupName = group.Key as string; if (groupName == null) { return; } // Restore collapsed state group.Collapsed = Mods.Entries[groupName].Collapsed; // Sort Categories parameters.GroupComparer = Comparer <OLVGroup> .Create((a, b) => Mods.Entries[(string)a.Key].Index.CompareTo(Mods.Entries[(string)b.Key].Index)); }); var columns = new[] { // first column is marked as primary column new OLVColumn { Text = "Name", AspectName = "Name", Width = 500, GroupKeyGetter = categoryGroupingDelegate, GroupFormatter = categoryFormatterDelegate, IsEditable = true }, new OLVColumn { Name = "ID", Text = "ID", AspectName = "ID", Width = 200, GroupKeyGetter = categoryGroupingDelegate, GroupFormatter = categoryFormatterDelegate, IsEditable = false }, // State new OLVColumn { Text = "State", IsEditable = false, Width = 40, AspectGetter = o => { var mod = (ModEntry)o; if (mod.State.HasFlag(ModState.NotLoaded)) { return("Not Loaded"); } if (mod.State.HasFlag(ModState.ModConflict)) { return("Conflict"); } if (mod.State.HasFlag(ModState.DuplicateID)) { return("Duplicate ID"); } if (mod.State.HasFlag(ModState.New)) { return("New"); } if (mod.State.HasFlag(ModState.UpdateAvailable)) { return("Update Available"); } return("OK"); } }, new OLVColumn { Text = "Order", AspectName = "Index", TextAlign = HorizontalAlignment.Right, HeaderTextAlign = HorizontalAlignment.Center, Width = 60, MinimumWidth = 40, GroupKeyGetter = categoryGroupingDelegate, GroupFormatter = categoryFormatterDelegate, IsEditable = true, CellEditUseWholeCell = true }, new OLVColumn { Text = "Size", AspectName = "Size", AspectToStringConverter = size => ((long)size).FormatAsFileSize(), TextAlign = HorizontalAlignment.Right, Width = 100, IsEditable = false }, new OLVColumn { Text = "Last Update", AspectName = "DateUpdated", DataType = typeof(DateTime?), Width = 120, TextAlign = HorizontalAlignment.Right, IsEditable = false }, new OLVColumn { Text = "Date Added", AspectName = "DateAdded", DataType = typeof(DateTime?), Width = 120, TextAlign = HorizontalAlignment.Right, IsEditable = false, IsVisible = false }, new OLVColumn { Text = "Date Created", AspectName = "DateCreated", DataType = typeof(DateTime?), Width = 120, TextAlign = HorizontalAlignment.Right, IsEditable = false, IsVisible = false }, new OLVColumn { Text = "Path", AspectName = "Path", Width = 160, IsEditable = false, IsVisible = false, GroupKeyGetter = o => Path.GetDirectoryName((o as ModEntry)?.Path) } }; // size groupies columns.Single(c => c.AspectName == "Size").MakeGroupies( new[] { 1024, 1024 * 1024, (long)50 * 1024 * 1024, (long)100 * 1024 * 1024 }, new[] { "< 1 KB", "< 1MB", "< 50 MB", "< 100 MB", "> 100 MB" } ); // Init DateTime columns foreach (var column in columns.Where(c => c.DataType == typeof(DateTime?))) { column.AspectToStringConverter = d => (d as DateTime?)?.ToLocalTime().ToString(CultureInfo.CurrentCulture); column.MakeGroupies( new[] { DateTime.Now.Subtract(TimeSpan.FromHours(24 * 30)), DateTime.Now.Subtract(TimeSpan.FromHours(24 * 7)), DateTime.Now.Date }, new[] { "Older than one month", "Last Month", "This Week", "Today" } ); // Sord Desc column.GroupFormatter = (g, param) => { param.GroupComparer = Comparer <OLVGroup> .Create((a, b) => (param.GroupByOrder == SortOrder.Descending ? 1 : -1) *a.Id.CompareTo(b.Id)); }; } // Wrapper ModList = new TypedObjectListView <ModEntry>(modlist_objectlistview); // Events modlist_objectlistview.SelectionChanged += ModListSelectionChanged; modlist_objectlistview.ItemChecked += ModListItemChecked; modlist_objectlistview.CellRightClick += ModListCellRightClick; modlist_objectlistview.CellEditFinished += ModListEditFinished; modlist_objectlistview.CellToolTipShowing += ModListCellToolTipShowing; modlist_objectlistview.FormatRow += ModListFormatRow; modlist_objectlistview.GroupExpandingCollapsing += ModListGroupExpandingCollapsing; modlist_objectlistview.KeyUp += ModListKeyUp; modlist_objectlistview.KeyDown += ModListKeyDown; // Content modlist_objectlistview.AllColumns.AddRange(columns); modlist_objectlistview.RebuildColumns(); // move state to the beginning columns.Single(c => c.Text == "State").DisplayIndex = 0; // Restore State if (Settings.Windows.ContainsKey("main") && Settings.Windows["main"].Data != null) { modlist_objectlistview.RestoreState(Settings.Windows["main"].Data); } RefreshModList(); }
public void InitModListView() { var categoryGroupingDelegate = new GroupKeyGetterDelegate(o => Mods.GetCategory(o as ModEntry)); var categoryFormatterDelegate = new GroupFormatterDelegate((@group, parameters) => { var groupName = group.Key as string; if (groupName == null) { return; } // Restore collapsed state group.Collapsed = Mods.Entries[groupName].Collapsed; // Sort Categories parameters.GroupComparer = Comparer <OLVGroup> .Create((a, b) => Mods.Entries[(string)a.Key].Index.CompareTo(Mods.Entries[(string)b.Key].Index)); }); modlist_ListObjectListView.GroupStateChanged += delegate(object o, GroupStateChangedEventArgs args) { // Remember group expanded/collapsed state when grouping by category (name or id column) if (modlist_ListObjectListView.PrimarySortColumn == olvcName || modlist_ListObjectListView.PrimarySortColumn == olvcID) { if (args.Group.Key is string key) { if (Mods.Entries.ContainsKey(key)) { Mods.Entries[key].Collapsed = args.Group.Collapsed; } } } }; olvcActive.GroupKeyGetter = categoryGroupingDelegate; olvcActive.GroupFormatter = categoryFormatterDelegate; olvcName.GroupKeyGetter = categoryGroupingDelegate; olvcName.GroupFormatter = categoryFormatterDelegate; olvcID.GroupKeyGetter = categoryGroupingDelegate; olvcID.GroupFormatter = categoryFormatterDelegate; olvcOrder.GroupKeyGetter = categoryGroupingDelegate; olvcOrder.GroupFormatter = categoryFormatterDelegate; olvcCategory.AspectGetter = o => Mods.GetCategory((ModEntry)o); olvcTags.Renderer = new TagRenderer(modlist_ListObjectListView, AvailableTags); olvcTags.AspectPutter = (rowObject, value) => { var tags = ((string)value).Split(';'); tags.ToList().ForEach(t => AddTag((ModEntry)rowObject, t.Trim())); }; olvcTags.SearchValueGetter = rowObject => ((ModEntry)rowObject).Tags.Select(s => s.ToLower()).ToArray(); olvcTags.AspectGetter = rowObject => ""; olvcState.AspectGetter = StateAspectGetter; olvcSize.AspectToStringConverter = size => ((long)size).FormatAsFileSize(); olvcLastUpdated.DataType = typeof(DateTime?); olvcDateAdded.DataType = typeof(DateTime?); olvcDateCreated.DataType = typeof(DateTime?); olvcPath.GroupKeyGetter = o => Path.GetDirectoryName((o as ModEntry)?.Path); olvcSource.AspectGetter = rowObject => { if (rowObject is ModEntry mod) { switch (mod.Source) { case ModSource.Unknown: return("Unknown"); case ModSource.SteamWorkshop: return("Steam"); case ModSource.Manual: return("Local"); default: throw new ArgumentOutOfRangeException(nameof(mod.Source), "Unhandled ModSource"); } } return(""); }; // size groupies var columns = modlist_ListObjectListView.AllColumns.ToArray(); columns.Single(c => c.AspectName == "Size").MakeGroupies( new[] { 1024, 1024 * 1024, (long)50 * 1024 * 1024, (long)100 * 1024 * 1024 }, new[] { "< 1 KB", "< 1MB", "< 50 MB", "< 100 MB", "> 100 MB" } ); columns.Single(c => c.AspectName == "isHidden").MakeGroupies( new [] { false, true }, new [] { "wut?", "Not Hidden", "Hidden" }); columns.Single(c => c.AspectName == "isActive").MakeGroupies( new[] { false, true }, new[] { "wut?", "Disabled", "Enabled" }); olvcActive.AspectToStringConverter = active => ""; olvcActive.GroupFormatter = (g, param) => { param.GroupComparer = Comparer <OLVGroup> .Create((a, b) => (param.GroupByOrder == SortOrder.Descending ? 1 : -1) *a.Header.CompareTo(b.Header)); }; olvcName.AutoCompleteEditor = false; // Sort by Order or WorkshopID column removes groups modlist_ListObjectListView.BeforeSorting += (sender, args) => { bool isGroupableColumn = CheckIfGroupableColumn(args.ColumnToSort); bool useGrouping = cEnableGrouping.Checked && isGroupableColumn; modlist_ListObjectListView.ShowGroups = useGrouping; modlist_toggleGroupsButton.Enabled = useGrouping; cEnableGrouping.Enabled = isGroupableColumn; }; modlist_ListObjectListView.BooleanCheckStatePutter = ModListBooleanCheckStatePutter; // Init DateTime columns foreach (var column in columns.Where(c => c.DataType == typeof(DateTime?))) { column.AspectToStringConverter = d => (d as DateTime?)?.ToLocalTime().ToString(CultureInfo.CurrentCulture); column.MakeGroupies( new[] { DateTime.Now.Subtract(TimeSpan.FromHours(24 * 30)), DateTime.Now.Subtract(TimeSpan.FromHours(24 * 7)), DateTime.Now.Date }, new[] { "Older Than One Month", "This Month", "This Week", "Today" }); // Sord Desc column.GroupFormatter = (g, param) => { param.GroupComparer = Comparer <OLVGroup> .Create((a, b) => (param.GroupByOrder == SortOrder.Descending ? -1 : 1) *a.Header.CompareTo(b.Header)); }; } // Wrapper ModList = new TypedObjectListView <ModEntry>(modlist_ListObjectListView); // Restore State if (Settings.Windows.ContainsKey("main") && Settings.Windows["main"].Data != null) { modlist_ListObjectListView.RestoreState(Settings.Windows["main"].Data); } RefreshModList(); // Start out sorted by name modlist_ListObjectListView.Sort(olvcName, SortOrder.Ascending); }