1+ use i_slint_core:: model:: Model ;
12use ring_lang_rs:: { ffi, * } ;
23use slint_interpreter:: { Struct , Value } ;
34
@@ -22,7 +23,13 @@ pub fn ring_list_to_args(list: RingList) -> Vec<Value> {
2223 }
2324 ffi:: ITEMTYPE_STRING => {
2425 let s = ring_list_getstring_str ( list, i) ;
25- Value :: String ( SharedString :: from ( s) )
26+ if s == "true" {
27+ Value :: Bool ( true )
28+ } else if s == "false" {
29+ Value :: Bool ( false )
30+ } else {
31+ Value :: String ( SharedString :: from ( s) )
32+ }
2633 }
2734 ffi:: ITEMTYPE_LIST => {
2835 let sublist = ring_list_getlist ( list, i) ;
@@ -41,7 +48,13 @@ pub fn ring_list_to_slint_value(p: *mut libc::c_void, param: i32) -> Value {
4148 Value :: Number ( ring_api_getnumber ( p, param) )
4249 } else if ring_api_isstring ( p, param) {
4350 let s = ring_api_getstring_str ( p, param) ;
44- Value :: String ( SharedString :: from ( s) )
51+ if s == "true" {
52+ Value :: Bool ( true )
53+ } else if s == "false" {
54+ Value :: Bool ( false )
55+ } else {
56+ Value :: String ( SharedString :: from ( s) )
57+ }
4558 } else if ring_api_islist ( p, param) {
4659 let list = ring_api_getlist ( p, param) ;
4760 ring_list_to_slint_model_or_struct ( list)
@@ -203,8 +216,13 @@ pub fn slint_value_to_ring(p: *mut libc::c_void, value: &Value) {
203216 Value :: Void => {
204217 ring_ret_number ! ( p, 0.0 ) ;
205218 }
206- Value :: Model ( _model ) => {
219+ Value :: Model ( model ) => {
207220 let list = ring_new_list ! ( p) ;
221+ for row in 0 ..model. row_count ( ) {
222+ if let Some ( val) = model. row_data ( row) {
223+ add_slint_value_to_ring_list ( list, & val) ;
224+ }
225+ }
208226 ring_ret_list ! ( p, list) ;
209227 }
210228 Value :: Struct ( s) => {
@@ -233,6 +251,25 @@ fn add_slint_value_to_ring_list(list: RingList, value: &Value) {
233251 Value :: Bool ( b) => {
234252 ring_list_addint ( list, if * b { 1 } else { 0 } ) ;
235253 }
254+ Value :: Void => {
255+ ring_list_addint ( list, 0 ) ;
256+ }
257+ Value :: Struct ( s) => {
258+ let sublist = ring_list_newlist ( list) ;
259+ for ( key, val) in s. iter ( ) {
260+ let pair = ring_list_newlist ( sublist) ;
261+ ring_list_addstring_str ( pair, key) ;
262+ add_slint_value_to_ring_list ( pair, val) ;
263+ }
264+ }
265+ Value :: Model ( model) => {
266+ let sublist = ring_list_newlist ( list) ;
267+ for row in 0 ..model. row_count ( ) {
268+ if let Some ( val) = model. row_data ( row) {
269+ add_slint_value_to_ring_list ( sublist, & val) ;
270+ }
271+ }
272+ }
236273 _ => {
237274 ring_list_addint ( list, 0 ) ;
238275 }
0 commit comments