Как добавить поддержку ScrolledWindow в пользовательский виджет в GtkMM? - PullRequest
1 голос
/ 01 февраля 2010

Я пишу собственный виджет для Gtkmm, который должен отображать огромный набор данных (представьте что-то вроде таблицы данных размером 4096x256 символов).

Главным образом по причинам элегантности, но также и для возможного использования в редакторе Glade / Gtk-Builder, я хочу, чтобы этот виджет изначально поддерживал ScrolledWindow, то есть, если он задан как дочерний элемент ScrolledWindow, он распознается прокручиваемый виджет, позволяющий устанавливать на него горизонтальные и вертикальные корректирующие объекты, которые он впоследствии может изменять.

Кажется, для этого мне нужно сделать что-то подобное в конструкторе моего виджета:

// get Gtk C type from wrapper class
GtkWidget* gwidget = this->gobj();

// imagine code here that magically creates a gobject signal, 
// that we can catch in C++.
// this is actually the part which I don't know how to do.
guint my_signal = magic_way_to_create_this_signal(
                   &MyClass::rainbow_unicorn_signal_handler);

// make ScrolledWindow recognize this window as scrollable
GTK_WIDGET_GET_CLASS(gwidget)->set_scroll_adjustments_signal = my_signal;

Позже, сигнал, излучаемый ScrolledWindow при добавлении виджета, должен быть перехвачен моим виджетом через метод прокси-сигнала или что-то еще? Понятия не имею.

Как я могу это сделать?

1 Ответ

1 голос
/ 05 февраля 2010

magic_way_to_create_this_signal - g_signal_new().Вы вызываете его в функции my_widget_class_init() вашего виджета, которая является частью способа определения класса GObject.Я не совсем уверен, что такое эквивалент в Gtkmm.

См. Также сноску в документации GTK, где объясняется, почему создание виджетов с естественной прокруткой является такой проблемой.

Вы также можете поместить свой виджет в Gtk::Viewport, который добавляет возможности прокрутки к его дочернему виджету.

...