[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