53 lines
1.2 KiB
C#
53 lines
1.2 KiB
C#
|
using Gtk;
|
||
|
using System;
|
||
|
namespace Samples
|
||
|
{
|
||
|
|
||
|
[Section (ContentType = typeof(CustomCellRenderer), Category = Category.Widgets)]
|
||
|
class CellRendererSection : ListSection
|
||
|
{
|
||
|
public CellRendererSection ()
|
||
|
{
|
||
|
AddItem (CreateCellRenderer ());
|
||
|
|
||
|
}
|
||
|
ListStore liststore;
|
||
|
|
||
|
public (string, Widget) CreateCellRenderer ()
|
||
|
{
|
||
|
liststore = new ListStore (typeof (float), typeof (string));
|
||
|
liststore.AppendValues (0.5f, "50%");
|
||
|
|
||
|
TreeView view = new TreeView (liststore);
|
||
|
|
||
|
view.AppendColumn ("Progress", new CellRendererText (), "text", 1);
|
||
|
view.AppendColumn ("Progress", new CustomCellRenderer (), "percent", 0);
|
||
|
GLib.Timeout.Add (50, new GLib.TimeoutHandler (update_percent));
|
||
|
|
||
|
return (nameof(CustomCellRenderer), view);
|
||
|
}
|
||
|
|
||
|
bool increasing = true;
|
||
|
bool update_percent ()
|
||
|
{
|
||
|
TreeIter iter;
|
||
|
liststore.GetIterFirst (out iter);
|
||
|
float perc = (float) liststore.GetValue (iter, 0);
|
||
|
|
||
|
if ((perc > 0.99) || (perc < 0.01 && perc > 0)) {
|
||
|
increasing = !increasing;
|
||
|
}
|
||
|
|
||
|
if (increasing)
|
||
|
perc += 0.01f;
|
||
|
else
|
||
|
perc -= 0.01f;
|
||
|
|
||
|
liststore.SetValue (iter, 0, perc);
|
||
|
liststore.SetValue (iter, 1, Convert.ToInt32 (perc * 100) + "%");
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|