]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/dialog.cpp
Merge branch 'master' into master-merge
[xonotic/netradiant.git] / radiant / dialog.cpp
index 1c628ff17a3ee3c33c7e4cc856a18deae791fd74..0323161b4dcb32682ef048502972a17926c7d4f2 100644 (file)
@@ -256,24 +256,28 @@ public:
        }
 };
 
+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::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);
-        }
-    };
+    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
@@ -442,6 +446,23 @@ EMessageBoxReturn Dialog::DoModal(){
        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 );