Я пытаюсь реализовать настроенный CellRenderer в Ruby / GTK, и я уже нашел это предложение:
Подклассы GObject в Ruby
Однако, когда я пытаюсь сделать следующее:
class CellRendererCustom < Gtk::CellRendererText
type_register #register within gobject system?
def initialize
super
end
def get_size(widget, cell_area)
puts "Never called :-("
return 0,0,100,100
end
def signal_do_get_size(widget, cell_area)
puts "Never called :-("
return 0,0,100,100
end
def signal_do_on_get_size(widget, cell_area)
puts "Never called :-("
return 0,0,100,100
end
def on_get_size(widget, cell_area)
puts "Never called :-("
return 0,0,100,100
end
end
Эти сигналы никогда не называются. Я думаю, что это как-то связано с тем, как Ruby подключен к GObject API, но, честно говоря, я понятия не имею, как все это работает.
То, что я хочу сделать, это создать подкласс CellRendererText и переписать метод, в этом примере get_size, который вызывается TreeView. Однако я думаю, что поскольку CellRendererText является модулем C, а не классом ruby, я не могу перезаписать его методы, фактически не уведомив об этом систему.
Кроме того, я должен назначить CellRendereser TreeViewColumn, который затем вызывает get_size и другие методы.
Насколько я знаю, похожая проблема существовала в PyGtk, где ее каким-то образом обошли, добавив класс GenericCellRenderer
:
http://faq.pygtk.org/index.py?req=show&file=faq13.045.htp