public FamilyTreeView(GardenData gardenData) { AddColumn("Family/Plant/Variety"); TreeStore treeStore = new TreeStore(typeof(Garden.GardenDataEntry)); foreach (Garden.PlantFamily family in gardenData.Families.Values) { TreeIter familyIter = treeStore.AppendValues(family); foreach (Garden.Plant plant in family.Plants.Values) { TreeIter plantIter = treeStore.AppendValues(familyIter, plant); foreach (Garden.PlantVariety variety in plant.Varieties.Values) { TreeIter varietyIter = treeStore.AppendValues(plantIter, variety); } treeStore.AppendValues(plantIter, new NewVarietyEntry(plant)); } treeStore.AppendValues(familyIter, new NewPlantEntry(family)); } treeStore.AppendValues(new NewFamilyEntry()); treeView.Model = treeStore; treeView.Selection.Changed += (object sender, EventArgs e) => { //System.Console.WriteLine("selected " + GetSelected().Name); GardenDataEntry selected = GetSelected(); if (selected is NewFamilyEntry) { NewFamily?.Invoke(); } else if (selected is NewPlantEntry npe) { NewPlant?.Invoke(npe.Family); } else if (selected is NewVarietyEntry nve) { NewVariety?.Invoke(nve.Plant); } else { SelectedGardenDataEntry?.Invoke(GetSelected()); } }; Add(treeView); }
private void SelectPlantEntry(GardenDataEntry entry) { if (entry == null) { SelectPlantEntry(); return; } string type = ""; if (entry is PlantFamily) { type = "family"; PlantAddButton.Sensitive = false; PlantAddButton.Label = ""; } if (entry is Plant) { type = "plant"; PlantAddButton.Sensitive = false; PlantAddButton.Label = ""; } if (entry is PlantVariety) { type = "variety"; PlantAddButton.Sensitive = GardenDrawingArea.ActiveInstance?.SelectedArea is Planting; PlantAddButton.Label = "Add " + type + " '" + entry.Name + "' to planting"; } PlantEditButton.Label = "Edit " + type + " '" + entry.Name + "'"; PlantInfoButton.Label = "Info for " + type + " '" + entry.Name + "'"; PlantEditButton.Sensitive = true; PlantInfoButton.Sensitive = true; SelectedEntry = entry; }