UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2017 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 <string.h> 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 #define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout)) 41 #define ui_lb2bool(b) ((b) == UI_LAYOUT_TRUE ? TRUE : FALSE) 42 #define ui_bool2lb(b) ((b) ? UI_LAYOUT_TRUE : UI_LAYOUT_FALSE) 43 44 typedef void (*ui_container_add_f)(UiContainer*, GtkWidget*, UiBool); 45 46 typedef struct UiDocumentView UiDocumentView; 47 48 typedef struct UiLayout UiLayout; 49 typedef enum UiLayoutBool UiLayoutBool; 50 51 enum UiLayoutBool { 52 UI_LAYOUT_UNDEFINED = 0, 53 UI_LAYOUT_TRUE, 54 UI_LAYOUT_FALSE, 55 }; 56 57 struct UiLayout { 58 UiLayoutBool fill; 59 UiBool newline; 60 char *label; 61 UiBool hexpand; 62 UiBool vexpand; 63 int width; 64 int gridwidth; 65 }; 66 67 struct UiContainer { 68 GtkWidget *widget; 69 GtkMenu *menu; 70 GtkWidget *current; 71 72 void (*add)(UiContainer*, GtkWidget*, UiBool); 73 UiLayout layout; 74 75 int close; 76 }; 77 78 typedef struct UiBoxContainer { 79 UiContainer container; 80 UiBool has_fill; 81 } UiBoxContainer; 82 83 typedef struct UiGridContainer { 84 UiContainer container; 85 int x; 86 int y; 87 #ifdef UI_GTK2 88 int width; 89 int height; 90 #endif 91 } UiGridContainer; 92 93 typedef struct UiPanedContainer { 94 UiContainer container; 95 GtkWidget *current_pane; 96 int orientation; 97 int max; 98 int cur; 99 } UiPanedContainer; 100 101 typedef struct UiTabViewContainer { 102 UiContainer container; 103 } UiTabViewContainer; 104 105 GtkWidget* ui_gtk_vbox_new(int spacing); 106 GtkWidget* ui_gtk_hbox_new(int spacing); 107 108 UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame); 109 void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); 110 111 UiContainer* ui_box_container(UiObject *obj, GtkWidget *box); 112 void ui_box_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); 113 114 UiContainer* ui_grid_container(UiObject *obj, GtkWidget *grid); 115 void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); 116 117 UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow); 118 void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); 119 120 UiContainer* ui_tabview_container(UiObject *obj, GtkWidget *tabview); 121 void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); 122 123 void ui_paned_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill); 124 125 void ui_split_container_add1(UiContainer *ct, GtkWidget *widget, UiBool fill); 126 void ui_split_container_add2(UiContainer *ct, GtkWidget *widget, UiBool fill); 127 128 129 UiObject* ui_add_document_tab(UiDocumentView *view); 130 void ui_tab_set_document(UiContext *ctx, void *document); 131 void ui_tab_detach_document(UiContext *ctx); 132 133 #ifdef __cplusplus 134 } 135 #endif 136 137 #endif /* CONTAINER_H */ 138 139