237 |
237 |
238 // check type |
238 // check type |
239 if(from->type != to->type) { |
239 if(from->type != to->type) { |
240 fprintf(stderr, "UI Error: var has incompatible type.\n"); |
240 fprintf(stderr, "UI Error: var has incompatible type.\n"); |
241 return; |
241 return; |
|
242 } |
|
243 |
|
244 void *fromvalue = from->value; |
|
245 // update var |
|
246 if(copytodoc) { |
|
247 to->from = from; |
|
248 |
|
249 from->orig_val = from->value; |
|
250 from->value = to->value; |
242 } |
251 } |
243 |
252 |
244 // copy binding |
253 // copy binding |
245 // we don't copy the observer, because the from var has never one |
254 // we don't copy the observer, because the from var has never one |
246 switch(from->type) { |
255 switch(from->type) { |
247 default: fprintf(stderr, "uic_copy_binding: wtf!\n"); break; |
256 default: fprintf(stderr, "uic_copy_binding: wtf!\n"); break; |
248 case UI_VAR_SPECIAL: break; |
257 case UI_VAR_SPECIAL: break; |
249 case UI_VAR_INTEGER: { |
258 case UI_VAR_INTEGER: { |
250 UiInteger *f = from->value; |
259 UiInteger *f = fromvalue; |
251 UiInteger *t = to->value; |
260 UiInteger *t = to->value; |
252 if(!f->obj) break; |
261 if(!f->obj) break; |
253 uic_int_copy(f, t); |
262 uic_int_copy(f, t); |
254 t->set(t, t->value); |
263 t->set(t, t->value); |
255 break; |
264 break; |
256 } |
265 } |
257 case UI_VAR_DOUBLE: { |
266 case UI_VAR_DOUBLE: { |
258 UiDouble *f = from->value; |
267 UiDouble *f = fromvalue; |
259 UiDouble *t = to->value; |
268 UiDouble *t = to->value; |
260 if(!f->obj) break; |
269 if(!f->obj) break; |
261 uic_double_copy(f, t); |
270 uic_double_copy(f, t); |
262 t->set(t, t->value); |
271 t->set(t, t->value); |
263 break; |
272 break; |
264 } |
273 } |
265 case UI_VAR_STRING: { |
274 case UI_VAR_STRING: { |
266 UiString *f = from->value; |
275 UiString *f = fromvalue; |
267 UiString *t = to->value; |
276 UiString *t = to->value; |
268 if(!f->obj) break; |
277 if(!f->obj) break; |
269 uic_string_copy(f, t); |
278 uic_string_copy(f, t); |
270 char *tvalue = t->value.ptr ? t->value.ptr : ""; |
279 char *tvalue = t->value.ptr ? t->value.ptr : ""; |
271 t->set(t, tvalue); |
280 t->set(t, tvalue); |
272 break; |
281 break; |
273 } |
282 } |
274 case UI_VAR_TEXT: { |
283 case UI_VAR_TEXT: { |
275 UiText *f = from->value; |
284 UiText *f = fromvalue; |
276 UiText *t = to->value; |
285 UiText *t = to->value; |
277 if(!f->obj) break; |
286 if(!f->obj) break; |
278 uic_text_copy(f, t); |
287 uic_text_copy(f, t); |
279 char *tvalue = t->value.ptr ? t->value.ptr : ""; |
288 char *tvalue = t->value.ptr ? t->value.ptr : ""; |
280 t->set(t, tvalue); |
289 t->set(t, tvalue); |
281 t->setposition(t, t->pos); |
290 t->setposition(t, t->pos); |
282 break; |
291 break; |
283 } |
292 } |
284 case UI_VAR_LIST: { |
293 case UI_VAR_LIST: { |
285 UiList *f = from->value; |
294 UiList *f = fromvalue; |
286 UiList *t = to->value; |
295 UiList *t = to->value; |
287 if(!f->obj) break; |
296 if(!f->obj) break; |
288 uic_list_copy(f, t); |
297 uic_list_copy(f, t); |
289 t->update(t, -1); |
298 t->update(t, -1); |
290 } |
299 } |
291 case UI_VAR_RANGE: { |
300 case UI_VAR_RANGE: { |
292 UiRange *f = from->value; |
301 UiRange *f = fromvalue; |
293 UiRange *t = to->value; |
302 UiRange *t = to->value; |
294 if(!f->obj) break; |
303 if(!f->obj) break; |
295 uic_range_copy(f, t); |
304 uic_range_copy(f, t); |
296 t->setextent(t, t->extent); |
305 t->setextent(t, t->extent); |
297 t->setrange(t, t->min, t->max); |
306 t->setrange(t, t->min, t->max); |
298 t->set(t, t->value); |
307 t->set(t, t->value); |
299 } |
308 } |
300 } |
|
301 |
|
302 if(copytodoc) { |
|
303 to->from = from; |
|
304 |
|
305 from->orig_val = from->value; |
|
306 from->value = to->value; |
|
307 } |
309 } |
308 } |
310 } |
309 |
311 |
310 void uic_save_var(UiVar *var) { |
312 void uic_save_var(UiVar *var) { |
311 switch(var->type) { |
313 switch(var->type) { |