UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2014 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef CONTAINER_H 30 #define CONTAINER_H 31 32 #include "../ui/toolkit.h" 33 #include "../ui/container.h" 34 #include <ucx/list.h> 35 #include <string.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout)) 42 43 typedef struct MotifTabbedPane MotifTabbedPane; 44 typedef struct UiTab UiTab; 45 typedef struct UiBoxContainer UiBoxContainer; 46 typedef struct UiGridContainer UiGridContainer; 47 typedef struct UiTabViewContainer UiTabViewContainer; 48 typedef struct UiLayout UiLayout; 49 50 typedef Widget (*ui_container_add_f)(UiContainer*, Arg*, int*, UiBool); 51 52 typedef enum UiLayoutBool UiLayoutBool; 53 typedef enum UiBoxOrientation UiBoxOrientation; 54 55 56 enum UiLayoutBool { 57 UI_LAYOUT_UNDEFINED = 0, 58 UI_LAYOUT_TRUE, 59 UI_LAYOUT_FALSE, 60 }; 61 62 enum UiBoxOrientation { 63 UI_BOX_VERTICAL = 0, 64 UI_BOX_HORIZONTAL 65 }; 66 67 struct UiLayout { 68 UiLayoutBool fill; 69 UiBool newline; 70 char *label; 71 UiBool hexpand; 72 UiBool vexpand; 73 int gridwidth; 74 }; 75 76 struct UiContainer { 77 Widget widget; 78 Widget (*prepare)(UiContainer*, Arg *, int*, UiBool); 79 void (*add)(UiContainer*, Widget); 80 UiLayout layout; 81 Widget current; 82 Widget menu; 83 }; 84 85 struct UiBoxContainer { 86 UiContainer container; 87 Widget prev_widget; 88 UiBool has_fill; 89 UiBoxOrientation orientation; 90 int margin; 91 int spacing; 92 }; 93 94 struct UiGridContainer { 95 UiContainer container; 96 UcxList *lines; 97 UcxList *current; 98 int columnspacing; 99 int rowspacing; 100 }; 101 102 struct UiTabViewContainer { 103 UiContainer container; 104 UiContext *context; 105 Widget widget; 106 UcxList *tabs; 107 Widget current; 108 }; 109 110 struct MotifTabbedPane { 111 UiTabbedPane view; 112 Widget tabbar; 113 UcxList *tabs; 114 UiTab *current; 115 int index; 116 Pixel bg1; 117 Pixel bg2; 118 int height; 119 }; 120 121 struct UiTab { 122 MotifTabbedPane *tabbedpane; 123 UiObject *content; 124 Widget tab_button; 125 }; 126 127 128 UiContainer* ui_frame_container(UiObject *obj, Widget frame); 129 Widget ui_frame_container_prepare(UiContainer *ct, Arg *args, int *n, UiBool fill); 130 void ui_frame_container_add(UiContainer *ct, Widget widget); 131 132 UiContainer* ui_box_container(UiObject *obj, Widget box, int margin, int spacing, UiBoxOrientation orientation); 133 Widget ui_box_container_prepare(UiContainer *ct, Arg *args, int *n, UiBool fill); 134 void ui_box_container_add(UiContainer *ct, Widget widget); 135 136 UiContainer* ui_grid_container(UiObject *obj, Widget form, int columnspacing, int rowspacing); 137 Widget ui_grid_container_prepare(UiContainer *ct, Arg *args, int *n, UiBool fill); 138 void ui_grid_container_add(UiContainer *ct, Widget widget); 139 140 UiContainer* ui_scrolledwindow_container(UiObject *obj, Widget scrolledwindow); 141 Widget ui_scrolledwindow_container_prepare(UiContainer *ct, Arg *args, int *n, UiBool fill); 142 void ui_scrolledwindow_container_add(UiContainer *ct, Widget widget); 143 144 UiContainer* ui_tabview_container(UiObject *obj, Widget rowcolumn); 145 Widget ui_tabview_container_prepare(UiContainer *ct, Arg *args, int *n, UiBool fill); 146 void ui_tabview_container_add(UiContainer *ct, Widget widget); 147 148 void ui_tab_button_callback(Widget widget, UiTab *tab, XtPointer d); 149 void ui_change_tab(MotifTabbedPane *pane, UiTab *tab); 150 151 void ui_tab_set_document(UiContext *ctx, void *document); 152 void ui_tab_detach_document(UiContext *ctx); 153 154 155 #ifdef __cplusplus 156 } 157 #endif 158 159 #endif /* CONTAINER_H */ 160 161