X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=libs%2Fuilib%2Fuilib.h;h=7e943985ac58d2cd839e0318bf9404e3924bf531;hb=cf8c23098eb0687b923e9ce3a50bd9f34bf3089c;hp=4e4da415965ce0e9d76e1d0ab76675eda9446da5;hpb=7cd0bdef874f87aa50eea3202d06b75bb33fd818;p=xonotic%2Fnetradiant.git diff --git a/libs/uilib/uilib.h b/libs/uilib/uilib.h index 4e4da415..7e943985 100644 --- a/libs/uilib/uilib.h +++ b/libs/uilib/uilib.h @@ -3,21 +3,37 @@ #include +using ui_accelgroup = struct _GtkAccelGroup; +using ui_adjustment = struct _GtkAdjustment; using ui_alignment = struct _GtkAlignment; using ui_box = struct _GtkBox; using ui_button = struct _GtkButton; using ui_checkbutton = struct _GtkCheckButton; +using ui_combobox = struct _GtkComboBox; +using ui_cellrenderer = struct _GtkCellRenderer; +using ui_cellrenderertext = struct _GtkCellRendererText; +using ui_entry = struct _GtkEntry; using ui_evkey = struct _GdkEventKey; +using ui_frame = struct _GtkFrame; using ui_hbox = struct _GtkHBox; +using ui_hpaned = struct _GtkHPaned; +using ui_image = struct _GtkImage; using ui_label = struct _GtkLabel; using ui_menu = struct _GtkMenu; using ui_menuitem = struct _GtkMenuItem; using ui_modal = struct ModalDialog; +using ui_object = struct _GtkObject; +using ui_paned = struct _GtkPaned; using ui_scrolledwindow = struct _GtkScrolledWindow; +using ui_spinbutton = struct _GtkSpinButton; +using ui_table = struct _GtkTable; using ui_treemodel = struct _GtkTreeModel; +using ui_treepath = struct _GtkTreePath; using ui_treeview = struct _GtkTreeView; +using ui_treeviewcolumn = struct _GtkTreeViewColumn; using ui_typeinst = struct _GTypeInstance; using ui_vbox = struct _GtkVBox; +using ui_vpaned = struct _GtkVPaned; using ui_widget = struct _GtkWidget; using ui_window = struct _GtkWindow; @@ -50,21 +66,32 @@ namespace ui { NO, }; - template - class Convertible { - public: - T *handle() const - { return (T *) static_cast(this)->_handle; } + enum class window_type { + TOP, + POPUP + }; + template + struct Convertible; + + template + struct Convertible { operator T *() const - { return handle(); } + { return reinterpret_cast(static_cast(this)->_handle); } }; - class Base { + template + struct Convertible { + explicit operator T *() const + { return reinterpret_cast(static_cast(this)->_handle); } + }; + + class Object : public Convertible { public: + using native = ui_object; void *_handle; - Base(void *h) : _handle(h) + Object(void *h) : _handle(h) { } explicit operator bool() const @@ -77,12 +104,12 @@ namespace ui { { return _handle; } }; - static_assert(sizeof(Base) == sizeof(ui_widget *), "object slicing"); + static_assert(sizeof(Object) == sizeof(ui_widget *), "object slicing"); - class Widget : public Base, public Convertible { + class Widget : public Object, public Convertible { public: using native = ui_widget; - explicit Widget(ui_widget *h = nullptr) : Base((void *) h) + explicit Widget(ui_widget *h = nullptr) : Object((void *) h) { } alert_response alert(std::string text, std::string title = "NetRadiant", @@ -93,7 +120,7 @@ namespace ui { bool want_save = false); }; - static_assert(sizeof(Widget) == sizeof(Base), "object slicing"); + static_assert(sizeof(Widget) == sizeof(Object), "object slicing"); extern Widget root; @@ -106,6 +133,17 @@ namespace ui { }; \ static_assert(sizeof(name) == sizeof(super), "object slicing") + WRAP(AccelGroup, Object, ui_accelgroup, + AccelGroup(); + ); + + WRAP(Adjustment, Widget, ui_adjustment, + Adjustment(double value, + double lower, double upper, + double step_increment, double page_increment, + double page_size); + ); + WRAP(Alignment, Widget, ui_alignment, Alignment(float xalign, float yalign, float xscale, float yscale); ); @@ -117,14 +155,37 @@ namespace ui { Button(const char *label); ); + WRAP(CellRenderer, Object, ui_cellrenderer,); + + WRAP(CellRendererText, CellRenderer, ui_cellrenderertext, + CellRendererText(); + ); + WRAP(CheckButton, Widget, ui_checkbutton, CheckButton(const char *label); ); + WRAP(ComboBox, Widget, ui_combobox,); + + ComboBox ComboBoxText(); + + WRAP(Entry, Widget, ui_entry, + Entry(); + Entry(std::size_t max_length); + ); + + WRAP(Frame, Widget, ui_frame, + Frame(const char *label = nullptr); + ); + WRAP(HBox, Box, ui_hbox, HBox(bool homogenous, int spacing); ); + WRAP(Image, Widget, ui_image, + Image(); + ); + WRAP(Label, Widget, ui_label, Label(const char *label); ); @@ -137,24 +198,55 @@ namespace ui { MenuItem(const char *label, bool mnemonic = false); ); + WRAP(Paned, Widget, ui_paned,); + + WRAP(HPaned, Paned, ui_hpaned, + HPaned(); + ); + + WRAP(VPaned, Paned, ui_vpaned, + VPaned(); + ); + WRAP(ScrolledWindow, Widget, ui_scrolledwindow, ScrolledWindow(); ); - WRAP(SpinButton, Widget, ui_widget,); + WRAP(SpinButton, Widget, ui_spinbutton, + SpinButton(Adjustment adjustment, double climb_rate, std::size_t digits); + ); + + WRAP(Table, Widget, ui_table, + Table(std::size_t rows, std::size_t columns, bool homogenous); + ); WRAP(TreeModel, Widget, ui_treemodel,); + WRAP(TreePath, Object, ui_treepath, + TreePath(); + TreePath(const char *path); + ); + WRAP(TreeView, Widget, ui_treeview, + TreeView(); TreeView(TreeModel model); ); + struct TreeViewColumnAttribute { + const char *attribute; + int column; + }; + WRAP(TreeViewColumn, Widget, ui_treeviewcolumn, + TreeViewColumn(const char *title, CellRenderer renderer, std::initializer_list attributes); + ); + WRAP(VBox, Box, ui_vbox, VBox(bool homogenous, int spacing); ); WRAP(Window, Widget, ui_window, Window() : Window(nullptr) {}; + Window(window_type type); Window create_dialog_window(const char *title, void func(), void *data, int default_w = -1, int default_h = -1);