[Gtk-sharp-list] progressbar on a treeview
Andrey Gankov
gankov.andrey at inbox.ru
Fri Dec 18 09:37:51 UTC 2015
nast90210 wrote
> Собственно в событиях dw_StartLoadDP dw_StartDW dw_StepDW и dw_FinishDW я
> и хочу изменять значения прогрессбара в каждой строчке в зависимости от
> currentFileIndex.
Так как ты запланировал работать не будет. Ты не можешь обратится к
конкретному cellRenderer, так как он всего один на се ячейки. Устанавливая
для него значения Value ты устанавливаешь это значение для всех ячеек,
которые будут нарисованы после.
Я не смог до конца вникнуть во весь код. Но основное понятно. Я не вижу где
ты хранишь прогресс для каждого файла. Но ты можешь пойти 2мя путями, смотри
какой тебе удобнее.
Первый хранить всю необхоимую инфу в ListStore. И просто настроить рендер.
При изменении ListStore он сам все перерисует.
Куски которые нужно поменять (Первый способ):
код скорее будет не рабочи, просто что бы показать логику.
//Добавил 3 "колонки" с процентом выполнения и текстом на прогрес баре, и
состоянием visible
detalListStore = new Gtk.ListStore (typeof (int), typeof (string),
typeof(object), typeof (int), typeof (string), typeof (bool));
// Так формируем рендер.
Gtk.TreeViewColumn statusColumn = new Gtk.TreeViewColumn ();
statusColumn.Title = "Статус";
Gtk.CellRendererProgress statusCell = new Gtk.CellRendererProgress
();
// statusCell.Visible = false;
statusColumn.PackStart(statusCell, true);
statusColumn.AddAttribute(statusCell, "value", 3);
statusColumn.AddAttribute(statusCell, "text", 4);
statusColumn.AddAttribute(statusCell, "visible", 5); // Тут не
уверен что название правильное, если не будет работать надо смотреть как это
свойство называется на с в оригинальной библиотеке.
statusColumn.Resizable = true;
//Меняем значение конкретной ячейки так,
protected void dw_StartDW(object sender, DetalWorker.StarDWEventArg e)
{
Application.Invoke(delegate
{
if (e.name == "dp") statusbar1.Push(1, "Чистка...");
else if (e.name == "dm") statusbar1.Push(1, "Парсинг...");
TreeIter iter;
if(!detalListStore.GetIterFirst(out iter))
return false;
do {
if((int)detalListStore.GetValue(iter, 0) ==
currentFileIndex + 1)
{
detalListStore.SetValue(iter, 3, 0); //
вместо cell.Value = 0;
detalListStore.SetValue(iter, 4, "asfas"); //
вместо cell.Text = "asfas";
detalListStore.SetValue(iter, 3, true); //
вместо cell.Visible = true;
}
} while (detalListStore.IterNext (ref iter));
});
}
В dw_StepDW аналогично можно устанавливать значение процентов
для конкретной ячеки. detalListStore.SetValue(iter, 3, 50); // 50 процентов
Второй способ следующим письмом.
--
View this message in context: http://mono.1490590.n4.nabble.com/progressbar-on-a-treeview-tp4667178p4667184.html
Sent from the Mono - Gtk# mailing list archive at Nabble.com.
More information about the Gtk-sharp-list
mailing list