add existing code (build system, libs, initial mizucp code)
[mizunara.git] / ui / gtk / container.h
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