private void ClearControls(bool suspendDrawingAndLayout = true) { // clear pedigree if (suspendDrawingAndLayout) { splitContainer1.Panel2.SuspendDrawing(); SuspendLayout(); } foreach (var pc in _pedigreeControls) { pc.Dispose(); } _pedigreeControls.Clear(); _lines[0].Clear(); _lines[1].Clear(); _lines[2].Clear(); if (PbRegionColors.Image != null) { PbRegionColors.SetImageAndDisposeOld(null); } PbRegionColors.Visible = false; LbCreatureName.Text = null; if (suspendDrawingAndLayout) { ResumeLayout(); splitContainer1.Panel2.ResumeDrawing(); } }
/// <summary> /// Creates the pedigree with creature controls. /// </summary> private void CreatePedigree() { splitContainer1.Panel2.SuspendDrawing(); SuspendLayout(); // clear old pedigreeCreatures ClearControls(false); if (_selectedCreature == null) { NoCreatureSelected(); ResumeLayout(); splitContainer1.Panel2.ResumeDrawing(); return; } pedigreeCreatureHeaders.SetCustomStatNames(_selectedCreature.Species?.statNames); statSelector1.SetStatNames(_selectedCreature.Species); lbPedigreeEmpty.Visible = false; // scroll offsets splitContainer1.Panel2.AutoScrollPosition = Point.Empty; // if not reset there are still offset issues sometimes, just reset the scrolling when creating a pedigree if (_pedigreeViewMode == PedigreeViewMode.Classic) { PedigreeCreation.CreateDetailedView(_selectedCreature, _lines, _pedigreeControls, _enabledColorRegions); _yBottomOfPedigree = 170; } else { _displayedGenerations = Math.Min(_compactGenerations, _selectedCreature.generation + 1); _yBottomOfPedigree = PedigreeCreation.CreateCompactView(_selectedCreature, _lines, _pedigreeControls, _tt, _displayedGenerations, _highlightInheritanceStatIndex, _pedigreeViewMode == PedigreeViewMode.HView); var creatureColorsTop = _yBottomOfPedigree + LbCreatureName.Height; PbRegionColors.Top = creatureColorsTop; PbKeyExplanations.Top = creatureColorsTop; LbCreatureName.Top = creatureColorsTop - LbCreatureName.Height; LbCreatureName.Text = _selectedCreature.name; if (PbKeyExplanations.Image == null) { DrawKey(PbKeyExplanations, _selectedSpecies); } _pedigreeControls.Add(new PedigreeCreature(_selectedCreature, _enabledColorRegions) { Location = new Point(PedigreeCreation.LeftBorder, _yBottomOfPedigree + PedigreeCreation.Margin) }); _yBottomOfPedigree += 50; } // create descendants int row = 0; var yDescendants = _yBottomOfPedigree + 3 * PedigreeCreation.Margin; foreach (Creature c in _creatureChildren) { PedigreeCreature pc = new PedigreeCreature(c, _enabledColorRegions) { Location = new Point(PedigreeCreation.LeftBorder, yDescendants + 35 * row) }; if (c.levelsWild != null && _selectedCreature.levelsWild != null) { for (int s = 0; s < PedigreeCreature.DisplayedStatsCount; s++) { int si = PedigreeCreature.DisplayedStats[s]; if (_selectedCreature.valuesDom[si] > 0 && _selectedCreature.levelsWild[si] >= 0 && _selectedCreature.levelsWild[si] == c.levelsWild[si]) { _lines[0].Add(new[] { PedigreeCreation.LeftBorder + PedigreeCreature.XOffsetFirstStat + PedigreeCreature.HorizontalStatDistance * s, yDescendants + 35 * row + 6, PedigreeCreation.LeftBorder + PedigreeCreature.XOffsetFirstStat + PedigreeCreature.HorizontalStatDistance * s, yDescendants + 35 * row + 15, 0, 0 }); } } } _pedigreeControls.Add(pc); row++; } // add controls foreach (var pc in _pedigreeControls) { splitContainer1.Panel2.Controls.Add(pc); var ipc = (IPedigreeCreature)pc; ipc.CreatureClicked += CreatureClicked; ipc.CreatureEdit += CreatureEdit; ipc.BestBreedingPartners += BestBreedingPartners; } PbRegionColors.SetImageAndDisposeOld(CreatureColored.GetColoredCreature(_selectedCreature.colors, _selectedCreature.Species, _enabledColorRegions, 256, creatureSex: _selectedCreature.sex)); PbRegionColors.Visible = true; ResumeLayout(); splitContainer1.Panel2.ResumeDrawing(); }