Added TreeView sample
Features: * Sort on header click. * Add, edit, remove value in store (name column). * Children items. * Handlers for store events.
This commit is contained in:
parent
9828244ffc
commit
110d783540
2 changed files with 178 additions and 1 deletions
|
@ -59,7 +59,7 @@ namespace Samples
|
|||
|
||||
_textViewCode = new SourceView();
|
||||
_textViewCode.ShowLineNumbers = true;
|
||||
_textViewCode.Buffer.Language = new LanguageManager().GetLanguage("c-sharp");
|
||||
_textViewCode.Buffer.Language = new LanguageManager().GetLanguage("c-sharp");
|
||||
|
||||
_textViewCode.Margin = 3;
|
||||
scroll2.Child = _textViewCode;
|
||||
|
|
177
Source/Samples/Sections/Widgets/TreeViewSection.cs
Normal file
177
Source/Samples/Sections/Widgets/TreeViewSection.cs
Normal file
|
@ -0,0 +1,177 @@
|
|||
// This is free and unencumbered software released into the public domain.
|
||||
// Happy coding!!! - GtkSharp Team
|
||||
|
||||
using System;
|
||||
using Gtk;
|
||||
|
||||
namespace Samples
|
||||
{
|
||||
[Section(ContentType = typeof(TreeView), Category = Category.Widgets)]
|
||||
class TreeViewSection : Box
|
||||
{
|
||||
const int ColumnIndex = 0;
|
||||
const int ColumnName = 1;
|
||||
const int ColumnIcon = 2;
|
||||
|
||||
TreeView tree;
|
||||
TreeStore store;
|
||||
Entry entry;
|
||||
Gdk.Pixbuf icon = new Gdk.Pixbuf(typeof(ImageSection).Assembly, "Testpic", 32, 32);
|
||||
|
||||
public TreeViewSection() : base(Orientation.Vertical, 3)
|
||||
{
|
||||
CreateTreeView();
|
||||
|
||||
var treeScroll = new ScrolledWindow();
|
||||
treeScroll.Expand = true;
|
||||
treeScroll.Add(tree);
|
||||
|
||||
var boxEdit = new Box(Orientation.Horizontal, 3);
|
||||
|
||||
var btn1 = new Button() { Label = "Add" };
|
||||
btn1.Clicked += OnAddClicked;
|
||||
|
||||
var btn2 = new Button() { Label = "Edit" };
|
||||
btn2.Clicked += OnEditClicked;
|
||||
|
||||
var btn3 = new Button() { Label = "Remove" };
|
||||
btn3.Clicked += OnRemoveClicked;
|
||||
|
||||
entry = new Entry();
|
||||
|
||||
boxEdit.PackStart(entry, true, true, 0);
|
||||
boxEdit.PackStart(btn1, false, true, 0);
|
||||
boxEdit.PackStart(btn2, false, true, 0);
|
||||
boxEdit.PackStart(btn3, false, true, 0);
|
||||
|
||||
PackStart(boxEdit, false, true, 0);
|
||||
PackStart(treeScroll, true, true, 0);
|
||||
}
|
||||
|
||||
void CreateTreeView()
|
||||
{
|
||||
store = new TreeStore(typeof(int), typeof(string), typeof(Gdk.Pixbuf));
|
||||
store.RowInserted += OnStoreRowInserted;
|
||||
store.RowDeleted += OnStoreRowDeleted;
|
||||
store.RowChanged += OnStoreRowChanged;
|
||||
store.RowsReordered += OnStoreRowsReordered;
|
||||
store.RowHasChildToggled += OnStoreRowHasChildToggled;
|
||||
|
||||
tree = new TreeView();
|
||||
|
||||
var col = tree.AppendColumn("Index", new CellRendererText(), "text", ColumnIndex);
|
||||
col.Resizable = true;
|
||||
col.SortColumnId = 0;
|
||||
col = tree.AppendColumn("Name", new CellRendererText(), "text", ColumnName);
|
||||
col.Resizable = true;
|
||||
col.Expand = true;
|
||||
col.SortColumnId = 1;
|
||||
|
||||
col = tree.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", ColumnIcon);
|
||||
col.Resizable = true;
|
||||
col.Expand = true;
|
||||
col.Alignment = .5f;
|
||||
|
||||
FillTreeView();
|
||||
|
||||
tree.Model = store;
|
||||
tree.Selection.Changed += OnTreeSelectionChanged;
|
||||
}
|
||||
|
||||
void FillTreeView()
|
||||
{
|
||||
int idx = 0;
|
||||
|
||||
TreeIter it = store.InsertWithValues(-1, idx++, "Adam", null);
|
||||
store.InsertWithValues(it, -1, idx++, "Adam child 1", null);
|
||||
store.InsertWithValues(it, -1, idx++, "Adam child 2", icon);
|
||||
store.InsertWithValues(it, -1, idx++, "Adam child 3", null);
|
||||
|
||||
store.InsertWithValues(-1, idx++, "Eve", null);
|
||||
store.InsertWithValues(-1, idx++, "Zack", null);
|
||||
store.InsertWithValues(-1, idx++, "John", icon);
|
||||
|
||||
it = store.InsertWithValues(-1, idx++, "Amy", null);
|
||||
store.InsertWithValues(it, -1, idx++, "Amy child 1", null);
|
||||
store.InsertWithValues(it, -1, idx++, "Amy child 2", null);
|
||||
|
||||
store.InsertWithValues(-1, idx++, "William", null);
|
||||
store.InsertWithValues(-1, idx++, "Evelyn", icon);
|
||||
store.InsertWithValues(-1, idx++, "Wyatt", null);
|
||||
}
|
||||
|
||||
private void OnTreeSelectionChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (!tree.Selection.GetSelected(out TreeIter it))
|
||||
return;
|
||||
|
||||
TreePath path = store.GetPath(it);
|
||||
|
||||
var name = (string)store.GetValue(it, ColumnName);
|
||||
entry.Text = name;
|
||||
|
||||
ApplicationOutput.WriteLine(sender, $"SelectionChanged, path {path}, name {name}");
|
||||
}
|
||||
|
||||
private void OnStoreRowInserted(object sender, RowInsertedArgs args)
|
||||
{
|
||||
var name = (string)store.GetValue(args.Iter, ColumnName);
|
||||
ApplicationOutput.WriteLine(sender, $"RowInserted, path {args.Path}, name {name}");
|
||||
}
|
||||
|
||||
private void OnStoreRowDeleted(object sender, RowDeletedArgs args)
|
||||
{
|
||||
ApplicationOutput.WriteLine(sender, $"RowDeleted, path {args.Path}");
|
||||
}
|
||||
|
||||
private void OnStoreRowChanged(object sender, RowChangedArgs args)
|
||||
{
|
||||
var name = (string)store.GetValue(args.Iter, ColumnName);
|
||||
ApplicationOutput.WriteLine(sender, $"RowChanged, path {args.Path}, name {name}");
|
||||
}
|
||||
|
||||
private void OnStoreRowsReordered(object sender, RowsReorderedArgs args)
|
||||
{
|
||||
ApplicationOutput.WriteLine(sender, $"RowsReordered, path {args.Path}");
|
||||
}
|
||||
|
||||
private void OnStoreRowHasChildToggled(object sender, RowHasChildToggledArgs args)
|
||||
{
|
||||
var name = (string)store.GetValue(args.Iter, ColumnName);
|
||||
ApplicationOutput.WriteLine(sender, $"RowHasChildToggled, path {args.Path}, name {name}");
|
||||
}
|
||||
|
||||
private void OnAddClicked(object sender, EventArgs e)
|
||||
{
|
||||
if (!tree.Selection.GetSelected(out TreeIter it))
|
||||
return;
|
||||
|
||||
string txt = entry.Text.Trim();
|
||||
if (string.IsNullOrEmpty(txt))
|
||||
return;
|
||||
|
||||
int idx = Environment.TickCount % 100;
|
||||
store.InsertWithValues(it, -1, idx, txt, null);
|
||||
}
|
||||
|
||||
private void OnEditClicked(object sender, EventArgs e)
|
||||
{
|
||||
if (!tree.Selection.GetSelected(out TreeIter it))
|
||||
return;
|
||||
|
||||
string txt = entry.Text.Trim();
|
||||
if (string.IsNullOrEmpty(txt))
|
||||
return;
|
||||
|
||||
store.SetValue(it, ColumnName, txt);
|
||||
}
|
||||
|
||||
private void OnRemoveClicked(object sender, EventArgs e)
|
||||
{
|
||||
if (!tree.Selection.GetSelected(out TreeIter it))
|
||||
return;
|
||||
|
||||
store.Remove(ref it);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue