/// <summary> /// /// </summary> /// <param name="menu"></param> public virtual void ItemSelected(SelectMenu menu) { if (menu == this.CategoryMenu) // category changed, so update the sample menu, carousel, and slider { for (int i = 0; i < this.Thumbs.Count; i++) // destroy all thumbnails in carousel { MaterialManager.Instance.Remove(this.Thumbs[i].Name); Widget.NukeOverlayElement(this.Thumbs[i]); } this.Thumbs.Clear(); OverlayManager om = OverlayManager.Instance; String selectedCategory = string.Empty; if (menu.SelectionIndex != -1) { selectedCategory = menu.SelectedItem; } else { this.TitleLabel.Caption = ""; this.DescBox.Text = ""; } bool all = selectedCategory == "All"; var sampleTitles = new List <string>(); var templateMat = (Material)MaterialManager.Instance.GetByName("SampleThumbnail"); // populate the sample menu and carousel with filtered samples foreach (Sample i in this.LoadedSamples) { Collections.NameValuePairList info = i.Metadata; if (all || info["Category"] == selectedCategory) { String name = "SampleThumb" + sampleTitles.Count + 1; // clone a new material for sample thumbnail Material newMat = templateMat.Clone(name); TextureUnitState tus = newMat.GetTechnique(0).GetPass(0).GetTextureUnitState(0); if (ResourceGroupManager.Instance.ResourceExists("Essential", info["Thumbnail"])) { tus.SetTextureName(info["Thumbnail"]); } else { tus.SetTextureName("thumb_error.png"); } // create sample thumbnail overlay var bp = (Overlays.Elements.BorderPanel)om.Elements.CreateElementFromTemplate("SdkTrays/Picture", "BorderPanel", name); bp.HorizontalAlignment = HorizontalAlignment.Right; bp.VerticalAlignment = VerticalAlignment.Center; bp.MaterialName = name; bp.UserData = i; this.TrayManager.TraysLayer.AddElement(bp); // add sample thumbnail and title this.Thumbs.Add(bp); sampleTitles.Add(i.Metadata["Title"]); } } this.CarouselPlace = 0; // reset carousel this.SampleMenu.Items = sampleTitles; if (this.SampleMenu.ItemsCount != 0) { ItemSelected(this.SampleMenu); } this.SampleSlider.SetRange(1, sampleTitles.Count, sampleTitles.Count); } else if (menu == this.SampleMenu) // sample changed, so update slider, label and description { if (this.SampleSlider.Value != menu.SelectionIndex + 1) { this.SampleSlider.Value = menu.SelectionIndex + 1; } var s = (Sample)(this.Thumbs[menu.SelectionIndex].UserData); this.TitleLabel.Caption = menu.SelectedItem; this.DescBox.Text = "Category: " + s.Metadata["Category"] + "\nDescription: " + s.Metadata["Description"]; if (CurrentSample != s) { ((Button)this.TrayManager.GetWidget("StartStop")).Caption = "Start Sample"; } else { ((Button)this.TrayManager.GetWidget("StartStop")).Caption = "Stop Sample"; } } else if (menu == this.RendererMenu) // renderer selected, so update all settings { while (this.TrayManager.GetWidgetCount(this.RendererMenu.TrayLocation) > 3) { this.TrayManager.DestroyWidget(this.RendererMenu.TrayLocation, 3); } var options = Root.RenderSystems[menu.SelectionIndex].ConfigOptions; int i = 0; // create all the config option select menus foreach (Configuration.ConfigOption it in options) { SelectMenu optionMenu = this.TrayManager.CreateLongSelectMenu(TrayLocation.Left, "ConfigOption" + i++, it.Name, 450, 240, 10); optionMenu.Items = (List <string>)it.PossibleValues.Values.ToList(); // if the current config value is not in the menu, add it try { optionMenu.SelectItem(it.Value); } catch (Exception) { optionMenu.AddItem(it.Value); optionMenu.SelectItem(it.Value); } } WindowResized(RenderWindow); } }