}
};
+template<class Widget, class Self, class T, class native>
+struct AddDataCustom_Wrapper {
+ static void Export(const native &self, const Callback<void(T)> &returnz) {
+ native *p = &const_cast<native &>(self);
+ auto widget = Self::from(p);
+ Widget::Get::thunk_(widget, returnz);
+ }
+
+ static void Import(native &self, T value) {
+ native *p = &self;
+ auto widget = Self::from(p);
+ Widget::Set::thunk_(widget, value);
+ }
+};
+
template<class Widget>
void AddDataCustom(DialogDataList &self, typename Widget::Type widget, Property<typename Widget::Other> const &property) {
using Self = typename Widget::Type;
using T = typename Widget::Other;
using native = typename std::remove_pointer<typename Self::native>::type;
- struct Wrapper {
- static void Export(const native &self, const Callback<void(T)> &returnz) {
- native *p = &const_cast<native &>(self);
- auto widget = Self(p);
- Widget::Get::thunk_(widget, returnz);
- }
-
- static void Import(native &self, T value) {
- native *p = &self;
- auto widget = Self(p);
- Widget::Set::thunk_(widget, value);
- }
- };
+ using Wrapper = AddDataCustom_Wrapper<Widget, Self, T, native>;
+
self.push_back(new CallbackDialogData<typename Widget::Other>(
make_property<PropertyAdaptor<native, T, Wrapper>>(*static_cast<native *>(widget)),
property
// =============================================================================
// Dialog class
-Dialog::Dialog() : m_window( 0 ), m_parent( 0 ){
+Dialog::Dialog() : m_window( ui::null ), m_parent( ui::null ){
}
Dialog::~Dialog(){
return m_modal.ret;
}
+ui::VBox Dialog::addSpacer( ui::VBox vbox, int dimension ){
+ auto spacer = ui::VBox( FALSE, 0 );
+ gtk_widget_set_size_request( GTK_WIDGET( spacer ), dimension, dimension );
+ spacer.show();
+
+ DialogVBox_packRow( vbox, spacer );
+ return spacer;
+}
+
+ui::Label Dialog::addLabel( ui::VBox vbox, const char* name, const char* text ){
+ auto label = ui::Label( text );
+ gtk_misc_set_alignment( GTK_MISC( label ), 0.0, 0.5 );
+ label.show();
+
+ DialogVBox_packRow( vbox, ui::Widget(DialogRow_new( name, label ) ));
+ return label;
+}
ui::CheckButton Dialog::addCheckBox( ui::VBox vbox, const char* name, const char* flag, Property<bool> const &cb ){
auto check = ui::CheckButton( flag );
image.show();
table.attach(image, {pos, pos + 1, 0, 1}, {0, 0});
- radio = ui::RadioButton(GTK_RADIO_BUTTON(gtk_radio_button_new( group )));
+ radio = ui::RadioButton::from(gtk_radio_button_new( group ));
radio.show();
table.attach(radio, {pos, pos + 1, 1, 2}, {0, 0});