ui/gtk/container.c

Mon, 07 Oct 2024 23:26:52 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 07 Oct 2024 23:26:52 +0200
branch
newapi
changeset 329
08ce6680d1cf
parent 328
059cba080ab4
permissions
-rw-r--r--

merge

4
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
140
c03c338a7dcf refactors value binding system
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 121
diff changeset
4 * Copyright 2017 Olaf Wintermann. All rights reserved.
4
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include <stdio.h>
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 #include <stdlib.h>
165
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
31 #include <limits.h>
4
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 #include "container.h"
165
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
34 #include "toolkit.h"
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
35
4
39b9b86ec452 added simple container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 #include "../common/context.h"
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
37 #include "../common/object.h"
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
38
166
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
39
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
40 void ui_container_begin_close(UiObject *obj) {
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
41 UiContainer *ct = uic_get_current_container(obj);
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
42 ct->close = 1;
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
43 }
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
44
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
45 int ui_container_finish(UiObject *obj) {
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
46 UiContainer *ct = uic_get_current_container(obj);
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
47 if(ct->close) {
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
48 ui_end(obj);
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
49 return 0;
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
50 }
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
51 return 1;
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
52 }
6e48030cf2db add container macros (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 165
diff changeset
53
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
54 GtkWidget* ui_gtk_vbox_new(int spacing) {
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
55 #if GTK_MAJOR_VERSION >= 3
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
56 return gtk_box_new(GTK_ORIENTATION_VERTICAL, spacing);
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
57 #else
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
58 return gtk_vbox_new(FALSE, spacing);
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
59 #endif
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
60 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
61
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
62 GtkWidget* ui_gtk_hbox_new(int spacing) {
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
63 #if GTK_MAJOR_VERSION >= 3
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
64 return gtk_box_new(GTK_ORIENTATION_HORIZONTAL, spacing);
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
65 #else
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
66 return gtk_hbox_new(FALSE, spacing);
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
67 #endif
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
68 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
69
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
70
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
71
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
72 /* -------------------- Box Container -------------------- */
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
73 UiContainer* ui_box_container(UiObject *obj, GtkWidget *box, UiSubContainerType type) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
74 UiBoxContainer *ct = cxCalloc(
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
75 obj->ctx->allocator,
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
76 1,
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
77 sizeof(UiBoxContainer));
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
78 ct->container.widget = box;
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
79 ct->container.add = ui_box_container_add;
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
80 ct->type = type;
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
81 return (UiContainer*)ct;
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
82 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
83
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
84 void ui_box_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
85 UiBoxContainer *bc = (UiBoxContainer*)ct;
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
86 if(ct->layout.fill != UI_LAYOUT_UNDEFINED) {
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
87 fill = ui_lb2bool(ct->layout.fill);
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
88 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
89
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
90 if(bc->has_fill && fill) {
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
91 fprintf(stderr, "UiError: container has 2 filled widgets");
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
92 fill = FALSE;
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
93 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
94 if(fill) {
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
95 bc->has_fill = TRUE;
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
96 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
97
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
98 UiBool expand = fill;
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
99 #if GTK_MAJOR_VERSION >= 4
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
100 gtk_box_append(GTK_BOX(ct->widget), widget);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
101 GtkAlign align = expand ? GTK_ALIGN_FILL : GTK_ALIGN_START;
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
102 if(bc->type == UI_CONTAINER_VBOX) {
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
103 gtk_widget_set_valign(widget, align);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
104 gtk_widget_set_vexpand(widget, expand);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
105 gtk_widget_set_hexpand(widget, TRUE);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
106 } else if(bc->type == UI_CONTAINER_HBOX) {
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
107 gtk_widget_set_halign(widget, align);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
108 gtk_widget_set_hexpand(widget, expand);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
109 gtk_widget_set_vexpand(widget, TRUE);
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
110 }
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
111
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
112 #else
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
113 gtk_box_pack_start(GTK_BOX(ct->widget), widget, expand, fill, 0);
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
114 #endif
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
115
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
116 ui_reset_layout(ct->layout);
75
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
117 ct->current = widget;
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
118 }
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
119
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
120 UiContainer* ui_grid_container(UiObject *obj, GtkWidget *grid) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
121 UiGridContainer *ct = cxCalloc(
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
122 obj->ctx->allocator,
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
123 1,
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
124 sizeof(UiGridContainer));
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
125 ct->container.widget = grid;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
126 ct->container.add = ui_grid_container_add;
305
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
127 UI_GTK_V2(ct->width = 0);
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
128 UI_GTK_V2(ct->height = 1);
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
129 return (UiContainer*)ct;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
130 }
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
131
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
132 #if GTK_MAJOR_VERSION >= 3
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
133 void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
134 UiGridContainer *grid = (UiGridContainer*)ct;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
135
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
136 if(ct->layout.newline) {
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
137 grid->x = 0;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
138 grid->y++;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
139 ct->layout.newline = FALSE;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
140 }
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
141
99
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
142 int hexpand = FALSE;
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
143 int vexpand = FALSE;
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
144 if(ct->layout.hexpand != UI_LAYOUT_UNDEFINED) {
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
145 hexpand = ct->layout.hexpand;
94
d51e334c1439 added checkbox and labels with alignment (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
146 }
99
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
147 if(ct->layout.vexpand != UI_LAYOUT_UNDEFINED) {
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
148 vexpand = ct->layout.vexpand;
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
149 }
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
150
303
dc8b504604f4 fix gtk3/4 grid hexpand/vexpand setting
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 298
diff changeset
151 gtk_widget_set_hexpand(widget, hexpand);
dc8b504604f4 fix gtk3/4 grid hexpand/vexpand setting
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 298
diff changeset
152 gtk_widget_set_vexpand(widget, vexpand);
94
d51e334c1439 added checkbox and labels with alignment (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
153
260
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
154 int colspan = ct->layout.colspan > 0 ? ct->layout.colspan : 1;
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
155 int rowspan = ct->layout.rowspan > 0 ? ct->layout.rowspan : 1;
109
b9808f916687 added gridwidth layout option (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 107
diff changeset
156
260
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
157 gtk_grid_attach(GTK_GRID(ct->widget), widget, grid->x, grid->y, colspan, rowspan);
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
158 grid->x += colspan;
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
159
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
160 ui_reset_layout(ct->layout);
75
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
161 ct->current = widget;
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
162 }
74
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
163 #endif
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
164 #ifdef UI_GTK2
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
165 void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
166 UiGridContainer *grid = (UiGridContainer*)ct;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
167
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
168 if(ct->layout.newline) {
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
169 grid->x = 0;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
170 grid->y++;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
171 ct->layout.newline = FALSE;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
172 }
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
173
100
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
174 int hexpand = FALSE;
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
175 int vexpand = FALSE;
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
176 if(ct->layout.hexpand != UI_LAYOUT_UNDEFINED) {
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
177 hexpand = ct->layout.hexpand;
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
178 }
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
179 if(ct->layout.vexpand != UI_LAYOUT_UNDEFINED) {
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
180 vexpand = ct->layout.vexpand;
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
181 }
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
182 GtkAttachOptions xoptions = hexpand ? GTK_FILL | GTK_EXPAND : GTK_FILL;
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
183 GtkAttachOptions yoptions = vexpand ? GTK_FILL | GTK_EXPAND : GTK_FILL;
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
184
260
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
185 int colspan = ct->layout.colspan > 0 ? ct->layout.colspan : 1;
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
186 int rowspan = ct->layout.rowspan > 0 ? ct->layout.rowspan : 1;
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
187 // TODO: use colspan/rowspan
eebb0626d020 implement grid colspan/rowspan (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 253
diff changeset
188
100
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
189 gtk_table_attach(GTK_TABLE(ct->widget), widget, grid->x, grid->x+1, grid->y, grid->y+1, xoptions, yoptions, 0, 0);
74
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
190 grid->x++;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
191 int nw = grid->x > grid->width ? grid->x : grid->width;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
192 if(grid->x > grid->width || grid->y > grid->height) {
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
193 grid->width = nw;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
194 grid->height = grid->y + 1;
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
195 gtk_table_resize(GTK_TABLE(ct->widget), grid->width, grid->height);
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
196 }
75
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
197
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
198 ui_reset_layout(ct->layout);
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
199 ct->current = widget;
74
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
200 }
55718d4ed227 fixed grid container when using gtk2
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 66
diff changeset
201 #endif
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
202
120
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
203 UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
204 UiContainer *ct = cxCalloc(
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
205 obj->ctx->allocator,
120
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
206 1,
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
207 sizeof(UiContainer));
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
208 ct->widget = scrolledwindow;
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
209 ct->add = ui_scrolledwindow_container_add;
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
210 return ct;
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
211 }
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
212
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
213 void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
121
1cc365c34125 added some special textfields (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 120
diff changeset
214 // TODO: check if the widget implements GtkScrollable
305
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
215 SCROLLEDWINDOW_SET_CHILD(ct->widget, widget);
120
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
216 ui_reset_layout(ct->layout);
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
217 ct->current = widget;
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
218 }
49bc645df8b7 added scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 116
diff changeset
219
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
220 UiContainer* ui_tabview_container(UiObject *obj, GtkWidget *tabview) {
174
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
221 UiTabViewContainer *ct = cxCalloc(
0358f1d9c506 upgrade ucx
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 166
diff changeset
222 obj->ctx->allocator,
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
223 1,
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
224 sizeof(UiTabViewContainer));
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
225 ct->container.widget = tabview;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
226 ct->container.add = ui_tabview_container_add;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
227 return (UiContainer*)ct;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
228 }
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
229
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
230 void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
328
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
231 UiGtkTabView *data = ui_widget_get_tabview_data(ct->widget);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
232 if(!data) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
233 fprintf(stderr, "UI Error: widget is not a tabview");
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
234 return;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
235 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
236 data->add_tab(ct->widget, -1, ct->layout.label, widget);
75
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
237
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
238 ui_reset_layout(ct->layout);
efe2f65bea17 added context menus (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 74
diff changeset
239 ct->current = widget;
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
240 }
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
241
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
242
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
243
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
244 static GtkWidget* box_set_margin(GtkWidget *box, int margin) {
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
245 GtkWidget *ret = box;
304
d554b2a60105 fix gtk box margin
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 303
diff changeset
246 #if GTK_MAJOR_VERSION >= 3
d554b2a60105 fix gtk box margin
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 303
diff changeset
247 #if GTK_MAJOR_VERSION * 1000 + GTK_MINOR_VERSION >= 3012
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
248 gtk_widget_set_margin_start(box, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
249 gtk_widget_set_margin_end(box, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
250 #else
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
251 gtk_widget_set_margin_left(box, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
252 gtk_widget_set_margin_right(box, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
253 #endif
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
254 gtk_widget_set_margin_top(box, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
255 gtk_widget_set_margin_bottom(box, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
256 #elif defined(UI_GTK2)
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
257 GtkWidget *a = gtk_alignment_new(0.5, 0.5, 1, 1);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
258 gtk_alignment_set_padding(GTK_ALIGNMENT(a), margin, margin, margin, margin);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
259 gtk_container_add(GTK_CONTAINER(a), box);
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
260 ret = a;
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
261 #endif
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
262 return ret;
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
263 }
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
264
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
265 UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType type) {
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
266 UiObject *current = uic_current_obj(obj);
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
267 UiContainer *ct = current->container;
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
268 UI_APPLY_LAYOUT1(current, args);
62
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
269
273
1dd2456c51d3 fix hbox (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
270 GtkWidget *box = type == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args.spacing) : ui_gtk_hbox_new(args.spacing);
313
b679cc6059ab add option to name widgets and add css classes (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 305
diff changeset
271 ui_set_name_and_style(box, args.name, args.style_class);
273
1dd2456c51d3 fix hbox (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
272 GtkWidget *widget = args.margin > 0 ? box_set_margin(box, args.margin) : box;
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
273 ct->add(ct, widget, TRUE);
62
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
274
273
1dd2456c51d3 fix hbox (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
275 UiObject *newobj = uic_object_new(obj, box);
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
276 newobj->container = ui_box_container(obj, box, type);
62
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
277 uic_obj_add(obj, newobj);
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
278
107
9aff1dc3990d improved box container and added radio button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 100
diff changeset
279 return widget;
62
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
280 }
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
281
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
282 UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
283 return ui_box_create(obj, args, UI_CONTAINER_VBOX);
62
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
284 }
70d2aee84432 added grid container (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 59
diff changeset
285
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
286 UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
287 return ui_box_create(obj, args, UI_CONTAINER_HBOX);
94
d51e334c1439 added checkbox and labels with alignment (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
288 }
d51e334c1439 added checkbox and labels with alignment (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 75
diff changeset
289
305
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
290 static GtkWidget* create_grid(int colspacing, int rowspacing) {
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
291 #if GTK_MAJOR_VERSION >= 3
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
292 GtkWidget *grid = gtk_grid_new();
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
293 gtk_grid_set_column_spacing(GTK_GRID(grid), colspacing);
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
294 gtk_grid_set_row_spacing(GTK_GRID(grid), rowspacing);
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
295 #else
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
296 GtkWidget *grid = gtk_table_new(1, 1, FALSE);
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
297 gtk_table_set_col_spacings(GTK_TABLE(grid), colspacing);
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
298 gtk_table_set_row_spacings(GTK_TABLE(grid), rowspacing);
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
299 #endif
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
300 return grid;
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
301 }
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
302
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
303 UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
271
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
304 UiObject* current = uic_current_obj(obj);
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
305 UI_APPLY_LAYOUT1(current, args);
100
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
306 GtkWidget *widget;
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
307
305
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
308 GtkWidget *grid = create_grid(args.columnspacing, args.rowspacing);
313
b679cc6059ab add option to name widgets and add css classes (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 305
diff changeset
309 ui_set_name_and_style(grid, args.name, args.style_class);
305
98470af75dcf simplfy macro usage in container.c (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 304
diff changeset
310 widget = box_set_margin(grid, args.margin);
271
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
311 current->container->add(current->container, widget, TRUE);
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
312
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
313 UiObject *newobj = uic_object_new(obj, grid);
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
314 newobj->container = ui_grid_container(obj, grid);
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
315 uic_obj_add(obj, newobj);
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
316
100
d276306d801f improved gtk2 implementation of grid container
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 99
diff changeset
317 return widget;
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
318 }
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
319
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
320
271
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
321 UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) {
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
322 UiObject* current = uic_current_obj(obj);
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
323 UI_APPLY_LAYOUT1(current, args);
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
324
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
325 GtkWidget *sw = SCROLLEDWINDOW_NEW();
313
b679cc6059ab add option to name widgets and add css classes (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 305
diff changeset
326 ui_set_name_and_style(sw, args.name, args.style_class);
271
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
327 UiObject *newobj = uic_object_new(obj, sw);
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
328 newobj->container = ui_scrolledwindow_container(obj, sw);
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
329 uic_obj_add(obj, newobj);
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
330
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
331 return sw;
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
332 }
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
333
94d44bdcad3e add new scrolledwindow (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 267
diff changeset
334
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
335 void ui_select_tab(UIWIDGET tabview, int tab) {
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
336 gtk_notebook_set_current_page(GTK_NOTEBOOK(tabview), tab);
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
337 }
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
338
328
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
339 void ui_notebook_tab_select(UIWIDGET tabview, int tab) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
340 gtk_notebook_set_current_page(GTK_NOTEBOOK(tabview), tab);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
341 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
342
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
343 void ui_notebook_tab_remove(UIWIDGET tabview, int tab) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
344 gtk_notebook_remove_page(GTK_NOTEBOOK(tabview), tab);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
345 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
346
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
347 void ui_notebook_tab_add(UIWIDGET widget, int index, const char *name, UIWIDGET child) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
348 gtk_notebook_insert_page(
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
349 GTK_NOTEBOOK(widget),
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
350 child,
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
351 gtk_label_new(name),
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
352 index);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
353 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
354
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
355 UiGtkTabView* ui_widget_get_tabview_data(UIWIDGET tabview) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
356 return g_object_get_data(G_OBJECT(tabview), "ui_tabview");
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
357 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
358
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
359 UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
360 UiGtkTabView *data = malloc(sizeof(UiGtkTabView));
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
361 data->margin = args.margin;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
362 data->spacing = args.spacing;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
363 data->columnspacing = args.columnspacing;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
364 data->rowspacing = args.rowspacing;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
365
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
366 GtkWidget *widget = NULL;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
367 switch(args.tabview) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
368 case UI_TABVIEW_DOC: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
369 // TODO
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
370 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
371 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
372 case UI_TABVIEW_NAVIGATION_SIDE: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
373 // TODO
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
374 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
375 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
376 case UI_TABVIEW_DEFAULT:
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
377 case UI_TABVIEW_NAVIGATION_TOP:
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
378 case UI_TABVIEW_NAVIGATION_TOP2: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
379 widget = gtk_notebook_new();
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
380 data->select_tab = ui_notebook_tab_select;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
381 data->remove_tab = ui_notebook_tab_remove;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
382 data->add_tab = ui_notebook_tab_add;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
383 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
384 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
385 case UI_TABVIEW_INVISIBLE: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
386 widget = gtk_notebook_new();
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
387 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widget), FALSE);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
388 gtk_notebook_set_show_border(GTK_NOTEBOOK(widget), FALSE);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
389 data->select_tab = ui_notebook_tab_select;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
390 data->remove_tab = ui_notebook_tab_remove;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
391 data->add_tab = ui_notebook_tab_add;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
392 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
393 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
394 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
395
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
396 g_object_set_data(G_OBJECT(widget), "ui_tabview", data);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
397 data->widget = widget;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
398 data->subcontainer = args.subcontainer;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
399
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
400 UiObject* current = uic_current_obj(obj);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
401 UI_APPLY_LAYOUT1(current, args);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
402 current->container->add(current->container, widget, TRUE);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
403
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
404 UiObject *newobj = uic_object_new(obj, widget);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
405 newobj->container = ui_tabview_container(obj, widget);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
406 uic_obj_add(obj, newobj);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
407 data->obj = newobj;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
408
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
409 return widget;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
410 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
411
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
412 void ui_tab_create(UiObject* obj, const char* title) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
413 UiObject* current = uic_current_obj(obj);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
414 UiGtkTabView *data = ui_widget_get_tabview_data(current->widget);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
415 if(!data) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
416 fprintf(stderr, "UI Error: widget is not a tabview\n");
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
417 return;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
418 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
419
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
420 UiObject *newobj = ui_tabview_add(data->widget, title, -1);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
421 current->next = newobj;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
422 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
423
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
424
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
425
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
426 void ui_tabview_select(UIWIDGET tabview, int tab) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
427 UiGtkTabView *data = ui_widget_get_tabview_data(tabview);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
428 if(!data) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
429 fprintf(stderr, "UI Error: widget is not a tabview\n");
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
430 return;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
431 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
432 data->select_tab(tabview, tab);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
433 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
434
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
435 void ui_tabview_remove(UIWIDGET tabview, int tab) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
436 UiGtkTabView *data = ui_widget_get_tabview_data(tabview);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
437 if(!data) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
438 fprintf(stderr, "UI Error: widget is not a tabview\n");
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
439 return;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
440 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
441 data->remove_tab(tabview, tab);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
442 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
443
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
444 UiObject* ui_tabview_add(UIWIDGET tabview, const char *name, int tab_index) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
445 UiGtkTabView *data = ui_widget_get_tabview_data(tabview);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
446 if(!data) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
447 fprintf(stderr, "UI Error: widget is not a tabview\n");
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
448 return NULL;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
449 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
450
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
451 UiObject *newobj = cxCalloc(data->obj->ctx->allocator, 1, sizeof(UiObject));
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
452 newobj->ctx = data->obj->ctx;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
453
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
454 GtkWidget *sub;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
455 switch(data->subcontainer) {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
456 default: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
457 sub = ui_gtk_vbox_new(data->spacing);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
458 newobj->container = ui_box_container(newobj, sub, data->subcontainer);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
459 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
460 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
461 case UI_CONTAINER_HBOX: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
462 sub = ui_gtk_hbox_new(data->spacing);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
463 newobj->container = ui_box_container(newobj, sub, data->subcontainer);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
464 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
465 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
466 case UI_CONTAINER_GRID: {
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
467 sub = create_grid(data->columnspacing, data->rowspacing);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
468 newobj->container = ui_grid_container(newobj, sub);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
469 break;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
470 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
471 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
472 newobj->widget = sub;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
473 GtkWidget *widget = box_set_margin(sub, data->margin);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
474
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
475 data->add_tab(data->widget, tab_index, name, widget);
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
476
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
477 return newobj;
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
478 }
059cba080ab4 implement new tabview (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 313
diff changeset
479
165
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
480 /* -------------------- Splitpane -------------------- */
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
481
165
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
482 static GtkWidget* create_paned(UiOrientation orientation) {
297
a73c60adf188 port container to gtk4
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 273
diff changeset
483 #if GTK_MAJOR_VERSION >= 3
165
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
484 switch(orientation) {
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
485 case UI_HORIZONTAL: return gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
486 case UI_VERTICAL: return gtk_paned_new(GTK_ORIENTATION_VERTICAL);
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
487 }
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
488 #else
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
489 switch(orientation) {
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
490 case UI_HORIZONTAL: return gtk_hpaned_new();
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
491 case UI_VERTICAL: return gtk_vpaned_new();
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
492 }
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
493 #endif
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
494 return NULL;
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
495 }
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
496
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
497
3f32db79a76e add splitpane (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 163
diff changeset
498
33
458831c574f4 added listview, sidebar and toolbar image button (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 4
diff changeset
499
59
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
500
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
501
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
502 /*
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
503 * -------------------- Layout Functions --------------------
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
504 *
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
505 * functions for setting layout attributes for the current container
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
506 *
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
507 */
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
508
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
509 void ui_layout_fill(UiObject *obj, UiBool fill) {
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
510 UiContainer *ct = uic_get_current_container(obj);
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
511 ct->layout.fill = ui_bool2lb(fill);
eb6611be50c7 added box container (GTK)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 52
diff changeset
512 }
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
513
99
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
514 void ui_layout_hexpand(UiObject *obj, UiBool expand) {
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
515 UiContainer *ct = uic_get_current_container(obj);
111
40dbf1a7526a added close handler to UiContext (GTK, Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 110
diff changeset
516 ct->layout.hexpand = expand;
99
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
517 }
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
518
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
519 void ui_layout_vexpand(UiObject *obj, UiBool expand) {
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
520 UiContainer *ct = uic_get_current_container(obj);
111
40dbf1a7526a added close handler to UiContext (GTK, Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 110
diff changeset
521 ct->layout.vexpand = expand;
99
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
522 }
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
523
253
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
524 void ui_layout_colspan(UiObject* obj, int cols) {
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
525 UiContainer* ct = uic_get_current_container(obj);
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
526 ct->layout.colspan = cols;
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
527 }
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
528
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
529 void ui_layout_rowspan(UiObject* obj, int rows) {
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
530 UiContainer* ct = uic_get_current_container(obj);
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
531 ct->layout.rowspan = rows;
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
532 }
087cc9216f28 initial newapi GTK port
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 174
diff changeset
533
65
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
534 void ui_newline(UiObject *obj) {
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
535 UiContainer *ct = uic_get_current_container(obj);
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
536 ct->layout.newline = TRUE;
4697592e24ba added label, grid container, simple tabview and textfield (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 62
diff changeset
537 }
99
ea1a2d5de765 improved grid container (Gtk)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 94
diff changeset
538

mercurial