| 41 char buf[32]; |
41 char buf[32]; |
| 42 snprintf(buf, 32, "%d", id); |
42 snprintf(buf, 32, "%d", id); |
| 43 |
43 |
| 44 doc->id = ui_string_new(ctx, "id"); |
44 doc->id = ui_string_new(ctx, "id"); |
| 45 doc->name = ui_string_new(ctx, "name"); |
45 doc->name = ui_string_new(ctx, "name"); |
| 46 |
|
| 47 doc->input_name = ui_string_new(ctx, "input_name"); |
46 doc->input_name = ui_string_new(ctx, "input_name"); |
| |
47 doc->subdocuments = ui_list_new(ctx, "subdocuments"); |
| 48 |
48 |
| 49 ui_set(doc->id, buf); |
49 ui_set(doc->id, buf); |
| |
50 |
| |
51 // create some sub documents |
| |
52 for(int i=0;i<3;i++) { |
| |
53 SubDocument *sub = ui_document_new(sizeof(SubDocument)); |
| |
54 UiContext *subctx = ui_document_context(sub); |
| |
55 sub->id = ui_string_new(subctx, "sub_id"); |
| |
56 sub->name = ui_string_new(subctx, "sub_name"); |
| |
57 sub->input_name = ui_string_new(subctx, "sub_input_name"); |
| |
58 |
| |
59 snprintf(buf, 32, "%d.%d", id, i); |
| |
60 ui_set(sub->id, buf); |
| |
61 |
| |
62 ui_list_append(doc->subdocuments, sub); |
| |
63 } |
| 50 |
64 |
| 51 return doc; |
65 return doc; |
| 52 } |
66 } |
| 53 |
67 |
| 54 void update_name(UiEvent *event, void *userdata) { |
68 void update_name(UiEvent *event, void *userdata) { |
| 74 ui_attach_document(event->obj->ctx, doc); |
88 ui_attach_document(event->obj->ctx, doc); |
| 75 |
89 |
| 76 } |
90 } |
| 77 } |
91 } |
| 78 |
92 |
| |
93 void switch_subdocument(UiEvent *event, void *userdata) { |
| |
94 MainWindow *wdata = event->window; |
| |
95 Document *doc = event->document; |
| |
96 UiContext *ctx = ui_document_context(doc); |
| |
97 if(doc->current_sub) { |
| |
98 ui_detach_document(ctx, doc->current_sub); |
| |
99 doc->current_sub = NULL; |
| |
100 } |
| |
101 |
| |
102 SubDocument *sub = ui_list_get(doc->subdocuments, event->intval); |
| |
103 if(sub) { |
| |
104 char *s1 = ui_get(sub->id); |
| |
105 char *s2 = ui_get(sub->name); |
| |
106 printf("sub %s - %s\n", s1, s2); |
| |
107 ui_attach_document(ctx, sub); |
| |
108 doc->current_sub = sub; |
| |
109 |
| |
110 } |
| |
111 } |
| |
112 |
| 79 void* doclist_get_value(void *elm, int col) { |
113 void* doclist_get_value(void *elm, int col) { |
| 80 Document *doc = elm; |
114 Document *doc = elm; |
| |
115 return ui_get(doc->id); |
| |
116 } |
| |
117 |
| |
118 void* sublist_get_value(void *elm, int col) { |
| |
119 SubDocument *doc = elm; |
| 81 return ui_get(doc->id); |
120 return ui_get(doc->id); |
| 82 } |
121 } |
| 83 |
122 |
| 84 void application_startup(UiEvent *event, void *data) { |
123 void application_startup(UiEvent *event, void *data) { |
| 85 UiObject *obj = ui_simple_window("Bindings Demo", NULL); |
124 UiObject *obj = ui_simple_window("Bindings Demo", NULL); |
| 95 |
134 |
| 96 ui_rlabel(obj, .label = "Name:"); |
135 ui_rlabel(obj, .label = "Name:"); |
| 97 ui_llabel(obj, .varname = "name", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); |
136 ui_llabel(obj, .varname = "name", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); |
| 98 ui_newline(obj); |
137 ui_newline(obj); |
| 99 |
138 |
| |
139 ui_rlabel(obj, .label = "Sub Document:"); |
| |
140 ui_llabel(obj, .varname = "sub_id", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); |
| |
141 ui_newline(obj); |
| |
142 |
| |
143 ui_rlabel(obj, .label = "Name:"); |
| |
144 ui_llabel(obj, .varname = "sub_name", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE); |
| |
145 ui_newline(obj); |
| |
146 |
| 100 ui_combobox(obj, .varname = "doclist", .colspan = 2, .onactivate = switch_document, .getvalue = doclist_get_value, .colspan = 2, .hfill = TRUE); |
147 ui_combobox(obj, .varname = "doclist", .colspan = 2, .onactivate = switch_document, .getvalue = doclist_get_value, .colspan = 2, .hfill = TRUE); |
| 101 ui_newline(obj); |
148 ui_newline(obj); |
| 102 |
149 |
| 103 ui_frame(obj, .label = "Document", .colspan = 2, .fill = TRUE, .subcontainer = UI_CONTAINER_GRID, .columnspacing = 10, .rowspacing = 10, .padding = 10) { |
150 ui_frame(obj, .label = "Document", .colspan = 2, .fill = TRUE, .subcontainer = UI_CONTAINER_GRID, .columnspacing = 10, .rowspacing = 10, .padding = 10) { |
| 104 ui_rlabel(obj, .label = "Name:", .vfill = TRUE); |
151 ui_rlabel(obj, .label = "Name:", .vfill = TRUE); |
| 105 ui_textfield(obj, .varname = "input_name", .onchange = update_name); |
152 ui_textfield(obj, .varname = "input_name", .onchange = update_name); |
| |
153 ui_newline(obj); |
| |
154 ui_separator(obj, .colspan = 2, .hfill = TRUE); |
| |
155 ui_newline(obj); |
| |
156 ui_combobox(obj, .varname = "subdocuments", .getvalue = sublist_get_value, .onactivate = switch_subdocument, .colspan = 2, .hfill = TRUE); |
| 106 } |
157 } |
| 107 } |
158 } |
| 108 |
159 |
| 109 for(int i=0;i<10;i++) { |
160 for(int i=0;i<10;i++) { |
| 110 Document *doc = document_create(i); |
161 Document *doc = document_create(i); |