GObject Subclassing в Ruby для пользовательского CellRenderer в GtkTreeView - PullRequest
1 голос
/ 13 января 2010

Я пытаюсь реализовать настроенный 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

1 Ответ

0 голосов
/ 13 января 2010

Я подозреваю, что get_size делегирует width и height свойствам объекта, и родительский виджет использует свойства напрямую, а не метод get_size. get_size не является сигналом, поэтому signal_do_get_size также не будет вызван.

Попробуйте:

set_property("width", 100)
...