From ed53817b9902adcfda6ac01c90c160f4e92ac64a Mon Sep 17 00:00:00 2001 From: Pedro Larouca Date: Wed, 21 Mar 2018 02:27:44 +0000 Subject: [PATCH] [Samples] ComboBox samples, still missing some major combo features. --- Source/Samples/Samples.csproj | 47 +++++++++ .../Sections/Widgets/ComboBoxSection.cs | 97 +++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 Source/Samples/Sections/Widgets/ComboBoxSection.cs diff --git a/Source/Samples/Samples.csproj b/Source/Samples/Samples.csproj index 6d8640523..79e9f4006 100644 --- a/Source/Samples/Samples.csproj +++ b/Source/Samples/Samples.csproj @@ -25,4 +25,51 @@ + + + GtkSharp.Samples.Category.cs + + + GtkSharp.Samples.ListSection.cs + + + GtkSharp.Samples.SectionAttribute.cs + + + GtkSharp.Samples.AboutDialogSection.cs + + + GtkSharp.Samples.ButtonSection.cs + + + GtkSharp.Samples.ColorButtonSection.cs + + + GtkSharp.Samples.EntrySection.cs + + + GtkSharp.Samples.LabelSection.cs + + + GtkSharp.Samples.LevelBarSection.cs + + + GtkSharp.Samples.LinkButtonSection.cs + + + GtkSharp.Samples.ProgressBarSection.cs + + + GtkSharp.Samples.SpinButtonSection.cs + + + GtkSharp.Samples.SpinnerSection.cs + + + GtkSharp.Samples.SwitchSection.cs + + + GtkSharp.Samples.ToggleButtonSection.cs + + diff --git a/Source/Samples/Sections/Widgets/ComboBoxSection.cs b/Source/Samples/Sections/Widgets/ComboBoxSection.cs new file mode 100644 index 000000000..0f8d0d4cc --- /dev/null +++ b/Source/Samples/Sections/Widgets/ComboBoxSection.cs @@ -0,0 +1,97 @@ +// This is free and unencumbered software released into the public domain. +// Happy coding!!! - GtkSharp Team + +using Gtk; + +namespace Samples +{ + [Section(ContentType = typeof(ComboBox), Category = Category.Widgets)] + class ComboBoxSection : ListSection + { + public ComboBoxSection() + { + AddItem(CreateSimpleComboBox()); + AddItem(CreateMultiColumnComboBox()); + AddItem(CreateEditableComboBox()); + } + + public (string, Widget) CreateSimpleComboBox() + { + // initialize with a simple string list + var combo = new ComboBox( + new string[] + { + "Combo Entry 1", + "Combo Entry 2", + "Combo Entry 3", + "Combo Entry 4" + } + ); + + // event to notify for index changes in our combo + combo.Changed += (sender, e) => + ApplicationOutput.WriteLine(sender, $"Index changed to:{((ComboBox)sender).Active}"); + + // set the active selection to index 2 (Combo Entry 3) + combo.Active = 2; + + return ("Simple combo:", combo); + } + + public (string, Widget) CreateMultiColumnComboBox() + { + // create a store for our combo + var store = new ListStore(typeof(string), typeof(string), typeof(bool)); + + // lets append some stock icons, passing the icon names, and a simple text column + store.AppendValues("dialog-warning", "Warning", true); + store.AppendValues("process-stop", "Stop", false); + store.AppendValues("document-new", "New", true); + store.AppendValues("edit-clear", "Clear", true); + + // create cells + var imageCell = new CellRendererPixbuf(); + var textCell = new CellRendererText(); + + // create the combo and pass the values in + var combo = new ComboBox(store); + combo.PackStart(imageCell, true); + combo.PackStart(textCell, true); + + // add combo attributes to show in columns + combo.AddAttribute(imageCell, "icon-name", 0); + combo.AddAttribute(textCell, "text", 1); + + // lets use the store bool values to control sensitive rows + // Process-stop (store index one) should be disabled in this sample + // For a ComboBox item to be disabled, all cell renderers for the item need to have + // their sensitivity disabled + combo.AddAttribute(imageCell, "sensitive", 2); + combo.AddAttribute(textCell, "sensitive", 2); + + // listen to index changed on combo + combo.Changed += (sender, e) => + ApplicationOutput.WriteLine(sender, $"Index changed to:{((ComboBox)sender).Active}"); + + // lets preselect the first option + combo.Active = 0; + + return ("Combo with Icons and Text:", combo); + } + + public (string, Widget) CreateEditableComboBox() + { + var combo = ComboBoxText.NewWithEntry(); + combo.AppendText("Example 1"); + combo.AppendText("Example 2"); + combo.AppendText("Example 3"); + combo.AppendText("Example 4"); + + // combos with entry have a real entry inside it + // we can use it by + combo.Entry.PlaceholderText = "Write something"; + + return ("Combo with entry:", combo); + } + } +}