X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=libs%2Fuilib%2Fuilib.h;h=3afaa0cb55ae357fefa0a28c52364dd8c462bf9f;hb=510800cba3d4e30631dfbb0e3e549df91b1f5644;hp=d1b9962c846745be045fa86d6ef274ae6570dd8a;hpb=ba21793b144f56c18cf73a69bf7b32ca582e4a35;p=xonotic%2Fnetradiant.git diff --git a/libs/uilib/uilib.h b/libs/uilib/uilib.h index d1b9962c..3afaa0cb 100644 --- a/libs/uilib/uilib.h +++ b/libs/uilib/uilib.h @@ -3,20 +3,38 @@ #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_textview = struct _GtkTextView; 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; @@ -49,21 +67,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 @@ -76,12 +105,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", @@ -92,7 +121,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; @@ -105,6 +134,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); ); @@ -112,43 +152,106 @@ namespace ui { WRAP(Box, Widget, ui_box,); WRAP(Button, Widget, ui_button, + Button(); 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); ); + WRAP(Menu, Widget, ui_menu, + Menu(); + ); + WRAP(MenuItem, Widget, ui_menuitem, 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(TextView, Widget, ui_textview, + TextView(); + ); 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);