application/demo_bindings.c

changeset 915
ddbbceb8c3a5
parent 914
4d5aa85bc5ed
child 958
749a8a36d74b
equal deleted inserted replaced
914:4d5aa85bc5ed 915:ddbbceb8c3a5
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);

mercurial