public void ReloadList(Action a = null) { flowLayoutPanel1.Controls.Clear(); flowLayoutPanel1.Visible = false; flowLayoutPanel1.SuspendLayout(); this.BackgroundImage = Properties.Resources.loading_text; Task.Factory.StartNew(() => { int i1 = 0; int i2 = 0; foreach (var source in sources) { var mods = source.GetMods(); i1 += mods.Length; if (mods.Length > 0) { var space = new CategorySpacer(source.Name, source.Root); space.ToggleState = source.Enabled; space.Width = this.Width - 20 - SystemInformation.VerticalScrollBarWidth; space.HeaderClick += Space_Click; space.Toggle += Toggle; this.Invoke(new MethodInvoker(() => { flowLayoutPanel1.Controls.Add(space); })); List <ModTile> tiles = new List <ModTile>(); foreach (var d in mods) { i2++; SetStatus("Loading mod " + d.Name + " [" + i2 + " of " + i1 + "]"); ModTile tile = null; this.Invoke(new MethodInvoker(() => { tile = new ModTile(d); tile.Visible = source.Enabled; tile.Tag = space; RevalidateTile(tile); tiles.Add(tile); })); } var arr = tiles.ToArray(); this.Invoke(new MethodInvoker(() => { flowLayoutPanel1.Controls.AddRange(arr); })); } } this.Invoke(new MethodInvoker(() => { flowLayoutPanel1.Visible = true; flowLayoutPanel1.ResumeLayout(); this.BackgroundImage = null; SetStatus("Loaded " + i1 + " elements!"); SetWorker(null); a?.Invoke(); })); }); }
private void Toggle(CategorySpacer sender, bool e) { flowLayoutPanel1.Visible = false; foreach (var ct in flowLayoutPanel1.Controls) { if (ct is ModTile) { var o = (ModTile)ct; if (sender.Equals(o.Tag)) { o.Visible = e; } } } flowLayoutPanel1.Visible = true; TriggerUpdate(); }
private void Space_Click(CategorySpacer sender) { foreach (var ct in flowLayoutPanel1.Controls) { if (ct is ModTile) { var o = (ModTile)ct; if (sender.Equals(o.Tag)) { if (o.Visible) { o.Checked = !sender.SelectionMode; } } } } sender.SelectionMode = !sender.SelectionMode; flowLayoutPanel1.Update(); }