#ifndef INCLUDED_UILIB_H
#define INCLUDED_UILIB_H
+#include "globaldefs.h"
+
#include <string>
#include <glib-object.h>
struct _GtkTreeModel;
struct _GtkTreePath;
struct _GtkTreeSelection;
+struct _GtkTreeStore;
struct _GtkTreeView;
struct _GtkTreeViewColumn;
struct _GtkVBox;
void process();
- extern class Widget root;
-
- enum class alert_type {
- OK,
- OKCANCEL,
- YESNO,
- YESNOCANCEL,
- NOYES,
- };
-
- enum class alert_icon {
- Default,
- Error,
- Warning,
- Question,
- Asterisk,
- };
-
- enum class alert_response {
- OK,
- CANCEL,
- YES,
- NO,
- };
-
enum class window_type {
TOP,
POPUP
};
}
- extern struct Null {} null;
- extern struct New_t {} New;
+ const struct Null {} null = {};
+ const struct New_t {} New = {};
class Object :
public details::Convertible<Object, _GtkObject *, details::Convert::Explicit>,
public: \
using self = name *; \
using native = T *; \
- explicit name(native h) : super(reinterpret_cast<super::native>(h)) {} \
- explicit name(Null n) : name((native) nullptr) {} \
+ protected: \
+ explicit name(native h) noexcept : super(reinterpret_cast<super::native>(h)) {} \
+ public: \
+ explicit name(Null n) noexcept : name((native) nullptr) {} \
explicit name(New_t); \
+ static name from(native h) { return name(h); } \
static name from(void *ptr) { return name((native) ptr); } \
ctors \
}; \
WRAP(Window, Bin, _GtkWindow, (),
explicit Window(window_type type);
,
- alert_response alert(
- std::string text,
- std::string title = "NetRadiant",
- alert_type type = alert_type::OK,
- alert_icon icon = alert_icon::Default
- );
-
Window create_dialog_window(
const char *title,
void func(),
WRAP(ToggleButton, Button, _GtkToggleButton, (),
,
- bool active();
+ bool active() const;
+ void active(bool value);
);
WRAP(CheckButton, ToggleButton, _GtkCheckButton, (),
,
);
+ struct TableAttach {
+ unsigned int left, right, top, bottom;
+ };
+
+ struct TableAttachOptions {
+ // todo: type safety
+ unsigned int x, y;
+ };
+
+ struct TablePadding {
+ unsigned int x, y;
+ };
+
WRAP(Table, Container, _GtkTable, (),
Table(std::size_t rows, std::size_t columns, bool homogenous);
,
+ // 5 = expand | fill
+ void attach(Widget child, TableAttach attach, TableAttachOptions options = {5, 5}, TablePadding padding = {0, 0});
);
WRAP(TextView, Container, _GtkTextView, (),
void append();
);
+ WRAP(TreeStore, Object, _GtkTreeStore, (ITreeModel),
+ ,
+ );
+
WRAP(TreeSelection, Object, _GtkTreeSelection, (),
,
);
#undef WRAP
+ // global
+
+ enum class alert_response {
+ OK,
+ CANCEL,
+ YES,
+ NO,
+ };
+
+ enum class alert_type {
+ OK,
+ OKCANCEL,
+ YESNO,
+ YESNOCANCEL,
+ NOYES,
+ };
+
+ enum class alert_icon {
+ Default,
+ Error,
+ Warning,
+ Question,
+ Asterisk,
+ };
+
+ extern class Window root;
+
+ alert_response alert(
+ Window parent,
+ std::string text,
+ std::string title = "NetRadiant",
+ alert_type type = alert_type::OK,
+ alert_icon icon = alert_icon::Default
+ );
+
// callbacks
namespace {
}
}
+WARNING_SUPPRESS_CLANG(keyword-macro)
#define this (*static_cast<self>(this))
+WARNING_RESTORE_CLANG(keyword-macro)
template<class Lambda>
gulong Object::connect(char const *detailed_signal, Lambda &&c_handler, void *data)
GtkCallback cb = [](_GtkWidget *widget, void *data) -> void {
using Function = typename std::decay<Lambda>::type;
Function *f = static_cast<Function *>(data);
- (*f)(Widget(widget));
+ (*f)(Widget::from(widget));
};
gtk_container_foreach(this, cb, &lambda);
}