プリントダイアログにはカスタムしたタブを追加できます:
タブのタイトルをPrintOperation::set_custom_tab_label()で設定、新しいウィジットを生成し、それをcreate_custom_widgetのシグナルハンドラからリターンしてください。このウィジットは他のウィジットをパックした、コンテナウィジットになるでしょう。
custom_widget_applyのシグナルハンドラ内からウィジットのデータを取得してください。
このようにcustom_widget_applyシグナルは生成したウィジットを提供していますが、物事を単純にするためには、ユーザーからの入力情報を保持しているこのウィジットはクラスメンバにしておいたほうがいいでしょう。次の例では、Gtk::Entry型のm_Entryがそうなっています。これはカスタ厶したCustomPrintOperationクラスのメンバになっています:
Gtk::Widget* CustomPrintOperation::on_create_custom_widget()
{
set_custom_tab_label("My custom tab");
Gtk::HBox* hbox = new Gtk::HBox(false, 8);
hbox->set_border_width(6);
Gtk::Label* label = Gtk::manage(new Gtk::Label("Enter some text: "));
hbox->pack_start(*label, false, false);
label->show();
hbox->pack_start(m_Entry, false, false);
m_Entry.show();
return hbox;
}
void CustomPrintOperation::on_custom_widget_apply(Gtk::Widget* /* widget */)
{
Glib::ustring user_input = m_Entry.get_text();
//...
}
examples/book/printing/advancedの例ではこれをおこなっています。