Аккуратный способ удалить изображение из Gtk::TreeStore

У меня есть диалоговое окно с Gtk::TreeView. Этот диалог показывает главное дерево файловой системы и предоставляет возможность выбора папок на диске. Когда пользователь выбирает какую-либо папку, я добавляю изображение Gtk::Stock в строку, представляющую эту папку.

Для этого я создал Gtk::CellRendererPixbuf, связанный с последним столбцом моего дерева:

//appending columns
directory_tree.append_column("Folder List", dir_columns.name);
Gtk::TreeViewColumn *column = directory_tree.get_column(0);
if(column) column->set_expand(true);
Gtk::CellRendererPixbuf *cell = Gtk::manage(new Gtk::CellRendererPixbuf);
directory_tree.append_column("", *cell);
column = directory_tree.get_column(1);
if(column) column->add_attribute(cell->property_stock_id(), dir_columns.stock_id);

Ссылка на этот фрагмент кода: https://github.com/mc-suchecki/Imagine/blob/master/gui/dialogs.cpp#L47

Gtk::CellRendererPixbuf 'транслирует' Gtk::StockId, найденный в 'dir_columns.stock_id', в изображение, расположенное в дереве. Когда я добавляю изображение в строку следующим образом:

//selecting folder
(*folder)[fs_columns.stock_id] = Gtk::StockID(Gtk::Stock::FIND).get_string();
(*folder)[fs_columns.included] = true;

все в порядке, но когда я пытаюсь удалить изображение таким образом:

//unselecting folder
(*folder)[fs_columns.stock_id] = "";
(*folder)[fs_columns.included] = false;

изображение правильно исчезает, но в командной строке есть такие ошибки (это не точное сообщение, я опубликую его, когда смогу запустить свое приложение):

(imagine:9376): Gtk-WARNING **: Gtk StockId not found 

Конечно, причина предупреждения очевидна (нет элемента StockId, связанного с пустым именем), однако мой вопрос: есть ли способ удалить изображение из строки Gtk::TreeView, которое не будет генерировать никаких предупреждений Gtk?

Код, в котором я отменяю выбор папки, находится здесь: https://github.com/mc-suchecki/Imagine/blob/master/core/core.cpp#L207

Заранее большое спасибо и извините за мой английский.


person mc.suchecki    schedule 13.07.2012    source источник


Ответы (1)


Измените свойство visible на false, если вы хотите избавиться от изображения вместо свойства stock-id.

person ptomato    schedule 13.07.2012
comment
Спасибо! Я не заметил, что я могу контролировать видимость каждой ячейки с помощью CellRendererPixbuf. Решение состояло в том, чтобы удалить (*folder)[fs_columns.stock_id] = ""; и добавить эту строку кода: github.com/mc-suchecki/Imagine/blob/master/gui/dialogs.cpp#L56 (к счастью, у меня был столбец с логическим значением, указывающим видимость изображения). - person mc.suchecki; 15.07.2012