@@ -210,177 +210,6 @@ def get_model(self) -> TraitSelector:
210210 return self .model
211211
212212
213- class PreloadDispvmHandler (AbstractTraitHolder ):
214- """Handler for preloaded disposables. Requires SpinButton widgets:
215- 'basics_preload_dispvm'"""
216-
217- def __init__ (
218- self ,
219- qapp : qubesadmin .Qubes ,
220- gtk_builder : Gtk .Builder ,
221- defdispvm_model : VMListModeler ,
222- ):
223- self .qapp = qapp
224- self .defdispvm_model = defdispvm_model
225- self .preload_dispvm_spin : Gtk .SpinButton = gtk_builder .get_object (
226- "basics_preload_dispvm"
227- )
228- self .preload_dispvm_threshold_spin : Gtk .SpinButton = gtk_builder .get_object (
229- "basics_preload_dispvm_threshold"
230- )
231- self .preload_dispvm_check : Gtk .CheckButton = gtk_builder .get_object (
232- "basics_preload_dispvm_check"
233- )
234-
235- self .defdispvm_model .connect_change_callback (self .on_defdispvm_changed )
236- self .preload_dispvm_check .connect ("toggled" , self .on_check_changed )
237-
238- self .default_max = 1
239- self .preload_dispvm_spin .props .numeric = True
240- self .preload_dispvm_spin_adjustment = Gtk .Adjustment ()
241- self .preload_dispvm_spin_adjustment .configure (0 , 0 , 9999 , 1 , 5 , 0 )
242- self .preload_dispvm_spin .configure (self .preload_dispvm_spin_adjustment , 0.1 , 0 )
243-
244- self .preload_dispvm_threshold_spin .props .numeric = True
245- self .preload_dispvm_threshold_spin_adjustment = Gtk .Adjustment ()
246- self .preload_dispvm_threshold_spin_adjustment .configure (
247- 0 , 0 , 999999 , 100 , 1000 , 0
248- )
249- self .preload_dispvm_threshold_spin .configure (
250- self .preload_dispvm_threshold_spin_adjustment , 0.1 , 0
251- )
252-
253- self .on_defdispvm_changed ()
254- self .on_check_changed ()
255- self .initial_preload_dispvm_spin_sensitive = (
256- self .preload_dispvm_spin .is_sensitive ()
257- )
258- self .preload_dispvm_threshold_spin .set_value (self .get_current_threshold_value ())
259-
260- def on_defdispvm_changed (self ):
261- defdispvm = self .defdispvm_model .get_selected ()
262- if defdispvm :
263- self .preload_dispvm_check .set_sensitive (True )
264- self .preload_dispvm_check .set_active (self .get_feat_value () is not None )
265- else :
266- self .preload_dispvm_check .set_sensitive (False )
267- self .preload_dispvm_check .set_active (False )
268-
269- def on_check_changed (self , * args ): # pylint: disable=unused-argument
270- defdispvm = self .defdispvm_model .get_selected ()
271- preloadcheck = self .preload_dispvm_check .get_active ()
272- if defdispvm and preloadcheck :
273- if self .get_feat_value () is None :
274- value = self .default_max
275- else :
276- value = self .get_current_value ()
277- self .preload_dispvm_spin .set_value (value )
278- self .preload_dispvm_spin .set_sensitive (True )
279- else :
280- self .preload_dispvm_spin .set_value (0 )
281- self .preload_dispvm_spin .set_sensitive (False )
282-
283- @staticmethod
284- def get_readable_description () -> str : # pylint: disable=arguments-differ
285- """Get human-readable description of the widget"""
286- # the pylint: disable above is because pylint does not understand
287- # static methods
288- return _ ("Number of preloaded disposables from default dispvm" )
289-
290- def get_feat_value (self ):
291- """Get current system value as is"""
292- return get_feature (self .qapp .domains ["dom0" ], "preload-dispvm-max" )
293-
294- def get_feat_threshold_value (self ):
295- """Get current system threshold value as is"""
296- return get_feature (self .qapp .domains ["dom0" ], "preload-dispvm-threshold" )
297-
298- def get_current_value (self ):
299- """Get current system value of the handled feature"""
300- return int (self .get_feat_value () or 0 )
301-
302- def get_current_threshold_value (self ):
303- """Get current system value of the handled feature"""
304- return int (self .get_feat_threshold_value () or 0 )
305-
306- def is_max_changed (self ) -> bool :
307- """Has the user selected something different from the initial value?"""
308- if (
309- self .initial_preload_dispvm_spin_sensitive
310- != self .preload_dispvm_spin .is_sensitive ()
311- ):
312- return True
313- if self .preload_dispvm_spin .get_value_as_int () != self .get_current_value ():
314- return True
315- return False
316-
317- def is_threshold_changed (self ) -> bool :
318- """Has the user selected something different from the initial value?"""
319- return (
320- self .preload_dispvm_threshold_spin .get_value_as_int ()
321- != self .get_current_threshold_value ()
322- )
323-
324- def is_changed (self ) -> bool :
325- """Has the user selected something different from the initial value?"""
326- if self .is_max_changed () or self .is_threshold_changed ():
327- return True
328- return False
329-
330- def get_unsaved (self ):
331- """Get human-readable description of unsaved changes, or
332- empty string if none were found."""
333- if self .is_changed ():
334- return self .get_readable_description ()
335- return ""
336-
337- def save (self ):
338- """Save changes: update system value and mark it as new initial value"""
339- if not self .is_changed ():
340- return
341-
342- if self .is_threshold_changed ():
343- threshold_value = str (self .preload_dispvm_threshold_spin .get_value_as_int ())
344- apply_feature_change (
345- self .qapp .domains ["dom0" ],
346- "preload-dispvm-threshold" ,
347- threshold_value ,
348- )
349-
350- # Every other feature must be set before "max" (prior to preload routine).
351- if self .is_max_changed ():
352- if self .preload_dispvm_spin .is_sensitive ():
353- value = str (self .preload_dispvm_spin .get_value_as_int ())
354- else :
355- value = None
356- apply_feature_change (
357- self .qapp .domains ["dom0" ],
358- "preload-dispvm-max" ,
359- value ,
360- )
361- if value is None :
362- self .initial_preload_dispvm_spin_sensitive = False
363- else :
364- self .initial_preload_dispvm_spin_sensitive = True
365-
366- def reset (self ):
367- """Reset selection to the initial value."""
368- if self .preload_dispvm_spin .is_sensitive ():
369- self .preload_dispvm_spin .set_value (self .get_current_value ())
370- if self .preload_dispvm_threshold_spin .is_sensitive ():
371- self .preload_dispvm_threshold_spin .set_value (
372- self .get_current_threshold_value ()
373- )
374-
375- def update_current_value (self ):
376- """This should never be called."""
377- raise NotImplementedError
378-
379- def get_model (self ) -> TraitSelector :
380- """This should never be called."""
381- raise NotImplementedError
382-
383-
384213class QMemManHelper :
385214 """Helper class to handle the ugliness of managing qmemman config."""
386215
@@ -622,9 +451,6 @@ def __init__(self, gtk_builder: Gtk.Builder, qapp: qubesadmin.Qubes):
622451 self .defnetvm_combo : Gtk .ComboBox = gtk_builder .get_object (
623452 "basics_defnetvm_combo"
624453 )
625- self .defdispvm_combo : Gtk .ComboBox = gtk_builder .get_object (
626- "basics_defdispvm_combo"
627- )
628454 self .fullscreen_combo : Gtk .ComboBoxText = gtk_builder .get_object (
629455 "basics_fullscreen_combo"
630456 )
@@ -671,25 +497,7 @@ def __init__(self, gtk_builder: Gtk.Builder, qapp: qubesadmin.Qubes):
671497 additional_options = NONE_CATEGORY ,
672498 )
673499 )
674- self .handlers .append (
675- PropertyHandler (
676- qapp = self .qapp ,
677- trait_holder = self .qapp ,
678- trait_name = "default_dispvm" ,
679- widget = self .defdispvm_combo ,
680- vm_filter = self ._default_dispvm_filter ,
681- readable_name = _ ("Default disposable qube template" ),
682- additional_options = NONE_CATEGORY ,
683- )
684- )
685- defdispvm_model : VMListModeler = self .handlers [- 1 ].get_model () # type: ignore
686- self .handlers .append (
687- PreloadDispvmHandler (
688- qapp = self .qapp ,
689- gtk_builder = gtk_builder ,
690- defdispvm_model = defdispvm_model ,
691- )
692- )
500+
693501 self .handlers .append (
694502 FeatureHandler (
695503 trait_holder = self .vm ,
@@ -752,10 +560,6 @@ def _default_template_filter(vm) -> bool:
752560 def _default_netvm_filter (vm ) -> bool :
753561 return getattr (vm , "provides_network" , False )
754562
755- @staticmethod
756- def _default_dispvm_filter (vm ) -> bool :
757- return getattr (vm , "template_for_dispvms" , False )
758-
759563 def save (self ):
760564 for handler in self .handlers :
761565 handler .save ()
0 commit comments