private void SetupControls(DailyAchievements.Dailies dailies) { if (reusable == null) { reusable = new Util.ReusableControls(); } else { reusable.ReleaseAll(); } var achievements = reusable.CreateOrAll <DailyAchievement>(dailies.Count, delegate { var control = new DailyAchievement() { BackColor = Color.White, NameVisible = true, NameFont = fontName, IconSize = new Size(32, 32), IconVisible = true, Size = new Size(panelContent.Width, 50), Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top, }; control.MouseEnter += control_MouseEnter; control.MouseLeave += control_MouseLeave; return(control); }); var bars = reusable.CreateOrAll <DailyCategoryBar>(dailies.Categories.Length + 1, delegate { var bar = new DailyCategoryBar() { Font = fontBar, BackColor = SystemColors.ControlLight, Size = new Size(panelContent.Width, 35), Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top, }; bar.Collapsed += bar_Collapsed; bar.Expanded += bar_Expanded; return(bar); }); int x = 0, y = 0; //var primaryCategories = 3; //var lowLevel = new List<Control>(4); //int gi = 0, // gii; byte id = 0; var groups = this.groups = new DailyGroup[dailies.Categories.Length + 1]; var lowlevel = new DailyGroup() { id = 0, dailies = new DailyAchievements.Daily[4], collapsed = Settings.HiddenDailyCategories[0].Value, }; bool addedLow = false; int firstIndex = 0, lastIndex = groups.Length - 1; foreach (var c in dailies.Categories) { if (c.Name == "Fractals" && !addedLow) { if (lowlevel.collapsed) { groups[lastIndex--] = lowlevel; } else { groups[firstIndex++] = lowlevel; } addedLow = true; } id++; var group = new DailyGroup() { id = id, dailies = new DailyAchievements.Daily[c.Dailies.Length], collapsed = Settings.HiddenDailyCategories[id].Value, }; foreach (var d in c.Dailies) { if (d.MaxLevel < 80) { lowlevel.dailies[lowlevel.count++] = d; } else { group.dailies[group.count++] = d; } } if (group.count > 0) { var bar = group.bar = bars.GetNext(); bar.SetState(group.collapsed); bar.Text = c.Name; } if (group.collapsed) { groups[lastIndex--] = group; } else { groups[firstIndex++] = group; } } if (lowlevel.count > 0) { var bar = lowlevel.bar = bars.GetNext(); bar.Tag = lowlevel; bar.SetState(lowlevel.collapsed); bar.Text = "Pre level 80"; } if (!addedLow) { groups[firstIndex++] = lowlevel; } if (firstIndex != groups.Length) { var count = groups.Length - firstIndex; if (count > 1) { Array.Reverse(groups, firstIndex, count); } } firstIndex = 0; foreach (var group in groups) { group.index = firstIndex++; if (group.count > 0) { var bar = group.bar; bar.Tag = group; bar.Location = new Point(x, y); bar.Visible = true; y += bar.Height + 1; var visible = !group.collapsed; group.controls = new DailyAchievement[group.count]; for (var i = 0; i < group.count; i++) { var control = group.controls[i] = achievements.GetNext(); var d = group.dailies[i]; control.Daily = d; control.IconValue = d.Icon != null ? d.Icon : imageDefault; control.Location = new Point(x, y); control.Visible = visible; if (visible) { y += control.Height + 1; } } if (visible) { y--; } } } while (bars.HasNext) { bars.GetNext().Visible = false; } while (achievements.HasNext) { achievements.GetNext().Visible = false; } panelContent.Height = y; scrollV.Maximum = y - panelContainer.Height; if (bars.New != null) { panelContent.Controls.AddRange(bars.New); } if (achievements.New != null) { panelContent.Controls.AddRange(achievements.New); } }
private void SetupControls() { var notes = account.Notes; var count = 0; if (notes != null && notes.Count > 0) { if (reusable == null) { reusable = new Util.ReusableControls(); } else { reusable.ReleaseAll(); } var controls = reusable.CreateOrAll <NoteMessage>(notes.Count, delegate { var c = new NoteMessage() { Width = panelContent.Width, Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right, }; c.DeleteClick += message_DeleteClick; c.EditClick += message_EditClick; return(c); }); var now = DateTime.UtcNow; var x = 0; var y = 0; var expired = selectedTab == buttonExpired; Settings.Notes.Note[] _notes; lock (notes) { var index = notes.IndexOf(now); if (expired) { _notes = new Settings.Notes.Note[index]; } else { _notes = new Settings.Notes.Note[notes.Count - index]; } ExpiredCount = index; MessageCount = notes.Count - index; if (_notes.Length > 0) { notes.CopyTo(expired ? 0 : index, _notes, 0, _notes.Length); } } for (var i = 0; i < _notes.Length; i++) { Settings.Notes.Note n; if (expired) { n = _notes[_notes.Length - i - 1]; } else { n = _notes[i]; } var c = controls.GetNext(); c.Location = new Point(x, y); c.Tag = n; c.Expires = n.Expires; string message; strings.TryGetValue(n.SID, out message); c.Message = message; c.Visible = true; y += c.Height + 1; count++; } if (y > 0) { y--; } panelContent.Height = y; while (controls.HasNext) { controls.GetNext().Visible = false; } if (controls.New != null) { panelContent.Controls.AddRange(controls.New); } } else { ExpiredCount = 0; MessageCount = 0; } if (count > 0) { panelContent.Visible = true; labelMessage.Visible = false; scrollV.Maximum = panelContent.Height - panelContainer.Height; } else { panelContent.Visible = false; labelMessage.Text = "No messages"; labelMessage.MaximumSize = new Size(panelContainer.Width * 3 / 4, panelContainer.Height); labelMessage.Location = new Point(panelContainer.Width / 2 - labelMessage.Width / 2, panelContainer.Height / 2 - labelMessage.Height / 2); labelMessage.Visible = true; } }