using System; using System.Collections; using Gtk; public class Poet { public string Name; public string Place; public int Year; public Poet(string name, string place, int year) // Клас для опису поета { Name = name; // Ім'я Place = place; // Місце народження Year = year; // Рік народження } } public class SharpApp : Window { ListStore store; // Структура для зберігання даних Statusbar statusbar; enum Column { Name, Place, Year} Poet[] Poets = { new Poet("Іван Котляревський", "місто Полтава", 1769), new Poet("Тарас Шевченко", "село Моринці", 1814), new Poet("Леонід Глібов", "село Веселий Поділ", 1827), new Poet("Степан Руданський", "село Хомутинці", 1834), new Poet("Іван Франко", "село Нагуєвичі", 1856), new Poet("Леся Українка", "місто Новоград-Волинський", 1871), }; public SharpApp() : base ("TreeView") { BorderWidth = 8; SetDefaultSize(520, 270); SetPosition(WindowPosition.Center); DeleteEvent += delegate {Application.Quit();}; VBox vbox = new VBox(false, 8); // Вертикальний контейнер ScrolledWindow sw = new ScrolledWindow(); // Контейнер для отримання одного віджету, // робить його прокручуваним за допомогою доданих смуг прокручування або зовнішньо // пов’язаних налаштувань, і додатково малює рамку навколо дочірнього віджету sw.ShadowType = ShadowType.EtchedIn; sw.SetPolicy(PolicyType.Automatic, PolicyType.Automatic); vbox.PackStart(sw, true, true, 0); // Вкладення ScrolledWindow sw у вертикальний контейнер store = CreateModel(); // Заповнення сховища даних TreeView treeView = new TreeView (store);// Створення представника TreeView за даними store treeView.RulesHint = true; treeView.RowActivated += OnRowActivated; // Вказання обробника події клацання на рядку sw.Add(treeView); // Вкладення treeView у контейнер ScrolledWindow sw AddColumns(treeView); // Додавання 3 стовпчиків до представника TreeView statusbar = new Statusbar(); // Створення рядка стану vbox.PackStart(statusbar, false, false, 0);// Вкладення рядка стану у вертикальний контейнер Add(vbox); // Додавання контейнера ShowAll(); // Показ усього наявного } void OnRowActivated (object sender, RowActivatedArgs args) // Обробник події клацання на рядку { TreeIter iter; TreeView view = (TreeView) sender; if (view.Model.GetIter(out iter, args.Path)) { string row = (string) view.Model.GetValue(iter, (int) Column.Name) + ", " + (string) view.Model.GetValue(iter, (int) Column.Place) + ", " + view.Model.GetValue(iter, (int) Column.Year); statusbar.Push(0, row); // Перенесення у рядок стану даних виділеного рядка } } void AddColumns(TreeView treeView) // Додавання 3 стовпчиків до представника TreeView { CellRendererText rendererText = new CellRendererText(); TreeViewColumn column = new TreeViewColumn("Ім'я", rendererText,"text", Column.Name); column.SortColumnId = (int) Column.Name; treeView.AppendColumn(column); rendererText = new CellRendererText(); column = new TreeViewColumn("Місце народження", rendererText, "text", Column.Place); column.SortColumnId = (int) Column.Place; treeView.AppendColumn(column); rendererText = new CellRendererText(); column = new TreeViewColumn("Рік", rendererText, "text", Column.Year); column.SortColumnId = (int) Column.Year; treeView.AppendColumn(column); } // Створення моделі даних віджета TreeView - сховища для списку, // що має три параметри: ім'я, місце й рік народження. ListStore CreateModel() { ListStore store = new ListStore( typeof(string), typeof(string), typeof(int) ); foreach (Poet act in Poets) store.AppendValues(act.Name, act.Place, act.Year ); return store; } public static void Main() { Application.Init(); new SharpApp(); Application.Run(); } }