@ -256,14 +256,34 @@ gnc_option_test_book_destroy(QofBook* book)
% t y p e m a p ( in ) G n c M u l t i c h o i c e O p t i o n C h o i c e s && (GncMultichoiceOptionChoices choices)
{
using K e y T y p e = G n c O p t i o n M u l t i c h o i c e K e y T y p e ;
a u t o l e n = s c m _ t o _ s i z e _ t ( s c m _ l e n g t h ( $ input ) ) ;
for ( s t d : : s i z e _ t i = 0 ; i < l e n ; + + i )
{
S C M v e c = s c m _ l i s t _ r e f ( $ input , s c m _ f r o m _ s i z e _ t ( i ) ) ;
s t d : : string key { s c m _ t o _ u t f 8 _ s t r i n g ( S C M _ S I M P L E _ V E C T O R _ R E F ( v e c , 0 ) ) } ;
S C M k e y v a l , v _ r e f _ 0 = S C M _ S I M P L E _ V E C T O R _ R E F ( v e c , 0 ) ;
G n c O p t i o n M u l t i c h o i c e K e y T y p e k e y t y p e ;
if ( s c m _ i s _ s y m b o l ( v _ r e f _ 0 ) )
{
k e y v a l = s c m _ s y m b o l _ t o _ s t r i n g ( S C M _ S I M P L E _ V E C T O R _ R E F ( v e c , 0 ) ) ;
k e y t y p e = K e y T y p e : : S Y M B O L ;
}
else if ( s c m _ i s _ s t r i n g ( v _ r e f _ 0 ) )
{
k e y v a l = S C M _ S I M P L E _ V E C T O R _ R E F ( v e c , 0 ) ;
k e y t y p e = K e y T y p e : : STRING ;
}
else if ( s c m _ i s _ i n t e g e r ( v _ r e f _ 0 ) )
{
k e y v a l = s c m _ n u m b e r _ t o _ s t r i n g ( v _ r e f _ 0 , s c m _ f r o m _ u i n t ( 10 u ) ) ;
k e y t y p e = K e y T y p e : : N U M B E R ;
}
else
throw s t d : : i n v a l i d _ a r g u m e n t ( "Unsupported key type in multichoice option." ) ;
s t d : : string key { s c m _ t o _ u t f 8 _ s t r i n g ( k e y v a l ) } ;
s t d : : string name { s c m _ t o _ u t f 8 _ s t r i n g ( S C M _ S I M P L E _ V E C T O R _ R E F ( v e c , 1 ) ) } ;
s t d : : string desc { s c m _ t o _ u t f 8 _ s t r i n g ( S C M _ S I M P L E _ V E C T O R _ R E F ( v e c , 2 ) ) } ;
c h o i c e s . p u s h _ b a c k ( { s t d : : m o v e ( k e y ) , s t d : : m o v e ( n a m e ) , s t d : : m o v e ( d e s c ) } ) ;
c h o i c e s . p u s h _ b a c k ( { s t d : : m o v e ( k e y ) , s t d : : m o v e ( n a m e ) , s t d : : m o v e ( d e s c ) , k e y t y p e }) ;
}
$ 1 = &choices;
}
@ -404,6 +424,45 @@ wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
% i g n o r e g n c _ r e g i s t e r _ s t a r t _ d a t e _ o p t i o n ( G n c O p t i o n D B * , c o n s t char * , c o n s t char * , c o n s t char * , c o n s t char * , b o o l ) ;
% i g n o r e g n c _ r e g i s t e r _ e n d _ d a t e _ o p t i o n ( G n c O p t i o n D B * , c o n s t char * , c o n s t char * , c o n s t char * , c o n s t char * , b o o l ) ;
% i g n o r e G n c O p t i o n M u l t i c h o i c e K e y T y p e ;
/* R e p l a c e G n c O p t i o n M u l t i c h o i c e V a l u e : : g e t _ v a l u e w i t h o n e t h a t r e s t o r e s t h e k e y t y p e t h a t S c h e m e s e n t i t . */
% i n l i n e % {
S C M g e t _ s c m _ v a l u e ( c o n s t G n c O p t i o n M u l t i c h o i c e V a l u e & option)
{
using K e y T y p e = G n c O p t i o n M u l t i c h o i c e K e y T y p e ;
a u t o s c m _ v a l u e = [ ] ( c o n s t char * value , K e y T y p e k e y t y p e ) - > S C M {
a u t o s c m _ s t r { s c m _ f r o m _ u t f 8 _ s t r i n g ( v a l u e ) } ;
s w i t c h ( k e y t y p e )
{
case K e y T y p e : : S Y M B O L :
return s c m _ s t r i n g _ t o _ s y m b o l ( s c m _ s t r ) ;
case K e y T y p e : : STRING :
return s c m _ s t r ;
case K e y T y p e : : N U M B E R :
return s c m _ s t r i n g _ t o _ n u m b e r ( s c m _ s t r , s c m _ f r o m _ i n t ( 10 ) ) ;
} ;
} ;
a u t o i n d e x e s = option . g e t _ m u l t i p l e ( ) ;
if ( i n d e x e s . empty ( ) )
i n d e x e s = option . g e t _ d e f a u l t _ m u l t i p l e ( ) ;
if ( i n d e x e s . empty ( ) )
return S C M _ B O O L _ F ;
if ( i n d e x e s . size ( ) = = 1 ) // FIXME: Should use bool member to decide
return s c m _ v a l u e ( option . p e r m i s s i b l e _ v a l u e ( i n d e x e s [ 0 ] ) ,
option . g e t _ k e y t y p e ( i n d e x e s [ 0 ] ) ) ;
a u t o values { s c m _ l i s t _ 1 ( S C M _ U N D E F I N E D ) } ;
for ( a u t o index : i n d e x e s )
{
a u t o v a l { s c m _ l i s t _ 1 ( s c m _ v a l u e ( o p t i o n . p e r m i s s i b l e _ v a l u e ( i n d e x ) ,
option . g e t _ k e y t y p e ( index ) ) ) } ;
values = s c m _ a p p e n d ( s c m _ l i s t _ 2 ( v a l , values ) ) ;
}
return s c m _ r e v e r s e ( values ) ;
}
% }
% i n c l u d e "gnc-option-date.hpp"
% i n c l u d e "gnc-option.hpp"
% i n c l u d e "gnc-option-impl.hpp"
@ -421,6 +480,9 @@ wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
S C M g e t _ s c m _ v a l u e ( )
{
return s t d : : v i s i t ( [ ] ( c o n s t a u t o & option)->SCM {
if c o n s t e x p r ( s t d : : i s _ s a m e _ v < s t d : : d e c a y _ t < d e c l t y p e ( option ) > ,
G n c O p t i o n M u l t i c h o i c e V a l u e > )
return g e t _ s c m _ v a l u e ( option ) ;
a u t o value { o p t i o n . g e t _ v a l u e ( ) } ;
if c o n s t e x p r ( s t d : : i s _ s a m e _ v < s t d : : d e c a y _ t < d e c l t y p e ( value ) > ,
S C M > )