示例#1
0
        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();
                }));
            });
        }
示例#2
0
 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();
 }
示例#3
0
 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();
 }