@@ -15,12 +15,15 @@ Rectangle{
1515 property int m_current_user_selected_index: - 1 ;
1616 // We are only 'clickable' if no joystick usage
1717 property bool m_allow_clickable: false
18+ property bool m_force_callback: false
19+ property string m_close_reason: " "
1820
1921 property var m_parent
2022
2123 function open_choices (x_model ,current_value ,parent ){
2224 // First, find the current selection inside the model
2325 availableChociesModel .clear ();
26+ m_close_reason= " " ;
2427 var current_value_index= 0
2528 var current_value_found_in_model= false ;
2629 for (var i= 0 ;i< x_model .count ;i++ ){
@@ -55,9 +58,17 @@ Rectangle{
5558 m_allow_clickable= clickable;
5659 }
5760
61+ function set_force_callback (force ){
62+ m_force_callback= force;
63+ }
64+
5865 // Calls the parent's update method if there is any change and closes
5966 function close_choices (){
60- if (m_current_user_selected_index!= m_initial_index){
67+ var should_callback = (m_current_user_selected_index!= m_initial_index);
68+ if (m_force_callback && m_close_reason!== " cancel" && m_close_reason!== " discard" ){
69+ should_callback = true ;
70+ }
71+ if (should_callback){
6172 const value_old = availableChociesModel .get (m_initial_index).value ;
6273 const value_new = availableChociesModel .get (m_current_user_selected_index).value ;
6374 console .log (" Changed from [" + m_initial_index+ " :" + value_old+ " ] to [" + m_current_user_selected_index+ " :" + value_new+ " ]" );
@@ -67,6 +78,8 @@ Rectangle{
6778 m_initial_index= - 1 ;
6879 visible= false ;
6980 focus= false ;
81+ m_force_callback= false ;
82+ m_close_reason= " " ;
7083 m_parent .takeover_control ();
7184 }
7285
@@ -76,6 +89,8 @@ Rectangle{
7689 m_initial_index= - 1 ;
7790 visible= false ;
7891 focus= false ;
92+ m_force_callback= false ;
93+ m_close_reason= " discard" ;
7994 }
8095
8196
@@ -84,6 +99,7 @@ Rectangle{
8499 if (event .key == Qt .Key_Left ){
85100 // Either close immediately or go back to the initial choice (don't save)
86101 if (m_current_user_selected_index== m_initial_index){
102+ m_close_reason= " cancel" ;
87103 close_choices ();
88104 }else {
89105 m_current_user_selected_index= m_initial_index;
@@ -92,8 +108,12 @@ Rectangle{
92108 }else if (event .key == Qt .Key_Right ){
93109 // Save and close or do nothing
94110 if (m_current_user_selected_index== m_initial_index){
95- // Do nothing
111+ if (m_force_callback){
112+ m_close_reason= " accept" ;
113+ close_choices ();
114+ }
96115 }else {
116+ m_close_reason= " accept" ;
97117 close_choices ();
98118 }
99119 event .accepted = true ;
@@ -112,6 +132,7 @@ Rectangle{
112132 }
113133 event .accepted = true ;
114134 }else if (event .key == Qt .Key_Enter || event .key == Qt .Key_Return ){
135+ m_close_reason= " accept" ;
115136 close_choices ();
116137 event .accepted = true ;
117138 }
@@ -165,6 +186,7 @@ Rectangle{
165186 anchors .fill : parent
166187 onClicked: {
167188 if (m_allow_clickable){
189+ m_close_reason= " accept" ;
168190 m_current_user_selected_index= index;
169191 close_choices ();
170192 }
0 commit comments