#define INCLUDED_UILIB_H
#include <string>
+#include <glib-object.h>
struct _GdkEventKey;
struct _GtkAccelGroup;
struct _GtkToolItem;
struct _GtkTreeModel;
struct _GtkTreePath;
+struct _GtkTreeSelection;
struct _GtkTreeView;
struct _GtkTreeViewColumn;
struct _GtkVBox;
struct _GtkWindow;
struct _GTypeInstance;
+#if GTK_TARGET == 3
+struct _GtkGLArea;
+#endif
+
+#if GTK_TARGET == 2
+using _GtkGLArea = struct _GtkDrawingArea;
+#endif
+
struct ModalDialog;
namespace ui {
- void init(int argc, char *argv[]);
+ bool init(int *argc, char **argv[], char const *parameter_string, char const **error);
void main();
POPUP
};
+ enum class Shadow {
+ NONE,
+ IN,
+ OUT,
+ ETCHED_IN,
+ ETCHED_OUT
+ };
+
+ enum class Policy {
+ ALWAYS,
+ AUTOMATIC,
+ NEVER
+ };
+
namespace details {
enum class Convert {
public details::Convertible<Object, _GtkObject *, details::Convert::Explicit>,
public details::Convertible<Object, _GTypeInstance *, details::Convert::Explicit> {
public:
+ using self = Object *;
using native = _GtkObject *;
native _handle;
explicit operator void *() const
{ return _handle; }
+
+ void unref()
+ { g_object_unref(_handle); }
+
+ template<class Lambda>
+ gulong connect(char const *detailed_signal, Lambda &&c_handler, void *data);
+
+ template<class Lambda>
+ gulong connect(char const *detailed_signal, Lambda &&c_handler, Object data);
};
static_assert(sizeof(Object) == sizeof(Object::native), "object slicing");
WRAP(Container, Widget, _GtkContainer, (),
,
void add(Widget widget);
+
+ void remove(Widget widget);
+
+ template<class Lambda>
+ void foreach(Lambda &&lambda);
);
WRAP(Bin, Container, _GtkBin, (),
class AccelGroup;
WRAP(Window, Bin, _GtkWindow, (),
- Window();
Window(window_type type);
,
Window create_dialog_window(
void clear();
);
+ WRAP(TreeSelection, Object, _GtkTreeSelection, (),
+ ,
+ );
+
// GBoxed
WRAP(TreePath, Object, _GtkTreePath, (),
,
);
+ // Custom
+
+ WRAP(GLArea, Widget, _GtkGLArea, (),
+ ,
+ guint on_render(GCallback pFunction, void *data);
+ );
+
#undef WRAP
+ // callbacks
+
+ namespace {
+ using GtkCallback = void (*)(_GtkWidget *, void *);
+ extern "C" {
+ void gtk_container_foreach(_GtkContainer *, GtkCallback, void *);
+ }
+ }
+
+#define this (*static_cast<self>(this))
+
+ template<class Lambda>
+ gulong Object::connect(char const *detailed_signal, Lambda &&c_handler, void *data)
+ {
+ return g_signal_connect(G_OBJECT(this), detailed_signal, c_handler, data);
+ }
+
+ template<class Lambda>
+ gulong Object::connect(char const *detailed_signal, Lambda &&c_handler, Object data)
+ {
+ return g_signal_connect(G_OBJECT(this), detailed_signal, c_handler, (_GtkObject *) data);
+ }
+
+ template<class Lambda>
+ void IContainer::foreach(Lambda &&lambda)
+ {
+ GtkCallback cb = [](_GtkWidget *widget, void *data) -> void {
+ using Function = typename std::decay<Lambda>::type;
+ Function *f = static_cast<Function *>(data);
+ (*f)(Widget(widget));
+ };
+ gtk_container_foreach(this, cb, &lambda);
+ }
+
+#undef this
+
}
#endif