2014-01-20 17:09:13 +01:00
# Copyright (C) 2006, 2013, 2014 Red Hat, Inc.
2007-09-21 16:28:31 -04:00
# Copyright (C) 2006 Hugh O. Brock <hbrock@redhat.com>
#
2018-04-04 14:35:41 +01:00
# This work is licensed under the GNU GPLv2 or later.
2018-03-20 15:00:02 -04:00
# See the COPYING file in the top-level directory.
2011-04-11 18:35:21 -04:00
2014-01-26 18:15:50 -05:00
import logging
2018-03-20 12:18:35 -04:00
from virtinst import DeviceDisk
2017-09-19 16:18:49 +02:00
2014-09-12 16:10:45 -04:00
from . baseclass import vmmGObjectUI
from . mediacombo import vmmMediaCombo
from . storagebrowse import vmmStorageBrowser
from . addstorage import vmmAddStorage
2007-09-21 16:28:31 -04:00
2013-04-13 14:34:52 -04:00
2010-12-08 17:26:19 -05:00
class vmmChooseCD ( vmmGObjectUI ) :
2012-05-14 14:24:56 +01:00
__gsignals__ = {
2018-03-15 08:10:09 -04:00
" cdrom-chosen " : ( vmmGObjectUI . RUN_FIRST , None , [ object , str ] )
2012-05-14 14:24:56 +01:00
}
2011-07-22 12:17:19 -04:00
def __init__ ( self , vm , disk ) :
2013-09-22 16:10:16 -04:00
vmmGObjectUI . __init__ ( self , " choosecd.ui " , " vmm-choose-cd " )
2009-06-18 10:40:37 -04:00
2011-07-22 12:17:19 -04:00
self . vm = vm
2011-07-22 16:43:26 -04:00
self . conn = self . vm . conn
2009-06-18 10:40:37 -04:00
self . storage_browser = None
2014-01-14 17:18:02 -05:00
2018-05-21 20:42:50 +01:00
# This is also overwritten from details.py when targeting a new disk
2014-01-14 17:18:02 -05:00
self . disk = disk
2011-07-22 12:17:19 -04:00
self . media_type = disk . device
2007-09-21 16:28:31 -04:00
2014-01-28 13:51:59 -05:00
self . mediacombo = vmmMediaCombo ( self . conn , self . builder , self . topwin ,
self . media_type )
self . widget ( " media-combo-align " ) . add ( self . mediacombo . top_box )
2013-02-16 13:31:46 -05:00
self . builder . connect_signals ( {
2014-01-28 13:51:59 -05:00
" on_vmm_choose_cd_delete_event " : self . close ,
2007-09-21 16:28:31 -04:00
" on_media_toggled " : self . media_toggled ,
" on_fv_iso_location_browse_clicked " : self . browse_fv_iso_location ,
2014-01-28 13:51:59 -05:00
2007-09-21 16:28:31 -04:00
" on_ok_clicked " : self . ok ,
2011-03-21 11:01:39 -04:00
" on_cancel_clicked " : self . close ,
2011-04-11 18:35:21 -04:00
} )
2007-09-21 16:28:31 -04:00
2008-09-09 07:35:20 -04:00
self . reset_state ( )
2007-09-21 16:28:31 -04:00
2010-11-29 14:06:43 -05:00
def close ( self , ignore1 = None , ignore2 = None ) :
2012-01-31 18:16:54 -05:00
logging . debug ( " Closing media chooser " )
2010-12-08 17:26:19 -05:00
self . topwin . hide ( )
2011-04-11 18:35:21 -04:00
if self . storage_browser :
self . storage_browser . close ( )
2007-09-21 16:28:31 -04:00
return 1
2011-04-14 08:47:42 -04:00
def show ( self , parent ) :
2012-01-31 18:16:54 -05:00
logging . debug ( " Showing media chooser " )
2008-09-09 07:35:20 -04:00
self . reset_state ( )
2011-04-14 08:47:42 -04:00
self . topwin . set_transient_for ( parent )
2012-01-25 10:38:42 -05:00
self . topwin . present ( )
2015-04-07 13:56:48 -04:00
self . conn . schedule_priority_tick ( pollnodedev = True )
2007-09-21 16:28:31 -04:00
2011-07-23 21:16:54 -04:00
def _cleanup ( self ) :
self . vm = None
self . conn = None
self . disk = None
2011-04-11 18:35:21 -04:00
2011-07-23 21:16:54 -04:00
if self . storage_browser :
self . storage_browser . cleanup ( )
self . storage_browser = None
2014-01-28 13:51:59 -05:00
if self . mediacombo :
self . mediacombo . cleanup ( )
self . mediacombo = None
def _init_ui ( self ) :
2015-04-07 13:56:48 -04:00
if self . media_type == vmmMediaCombo . MEDIA_FLOPPY :
2014-01-28 13:51:59 -05:00
self . widget ( " physical-media " ) . set_label ( _ ( " Floppy D_rive " ) )
self . widget ( " iso-image " ) . set_label ( _ ( " Floppy _Image " ) )
2011-04-11 18:35:21 -04:00
2008-09-09 07:35:20 -04:00
def reset_state ( self ) :
2014-01-28 13:51:59 -05:00
self . mediacombo . reset_state ( )
2014-03-19 16:05:54 +01:00
enable_phys = not self . vm . stable_defaults ( )
self . widget ( " physical-media " ) . set_sensitive ( enable_phys )
self . widget ( " physical-media " ) . set_tooltip_text ( " " if enable_phys else
_ ( " Physical CDROM passthrough not supported with this hypervisor " ) )
use_cdrom = ( self . mediacombo . has_media ( ) ) and enable_phys
2009-11-30 12:51:25 -05:00
2014-01-28 13:51:59 -05:00
self . widget ( " physical-media " ) . set_active ( use_cdrom )
self . widget ( " iso-image " ) . set_active ( not use_cdrom )
2008-09-09 07:35:20 -04:00
2010-11-29 14:06:43 -05:00
def ok ( self , ignore1 = None , ignore2 = None ) :
2011-07-14 13:13:13 -04:00
if self . widget ( " iso-image " ) . get_active ( ) :
path = self . widget ( " iso-path " ) . get_text ( )
2007-09-21 16:28:31 -04:00
else :
2014-01-28 13:51:59 -05:00
path = self . mediacombo . get_path ( )
2012-11-08 14:15:02 +01:00
if path == " " or path is None :
2009-07-02 12:43:08 -04:00
return self . err . val_err ( _ ( " Invalid Media Path " ) ,
2008-03-14 13:18:44 -04:00
_ ( " A media path must be specified. " ) )
2007-11-28 17:58:19 -05:00
2018-03-20 12:18:35 -04:00
names = DeviceDisk . path_in_use_by ( self . disk . conn , path )
2014-01-14 17:11:51 -05:00
if names :
res = self . err . yes_no (
_ ( ' Disk " %s " is already in use by other guests %s ' ) %
2017-09-19 16:18:49 +02:00
( path , names ) ,
2014-01-14 17:11:51 -05:00
_ ( " Do you really want to use the disk? " ) )
if not res :
return False
2014-02-10 18:08:59 -05:00
vmmAddStorage . check_path_search ( self , self . conn , path )
2009-12-01 12:35:04 -05:00
2017-09-19 16:18:49 +02:00
try :
self . disk . path = path
except Exception as e :
return self . err . val_err ( _ ( " Invalid Media Path " ) , e )
2011-07-22 12:17:19 -04:00
self . emit ( " cdrom-chosen " , self . disk , path )
2011-03-21 11:01:39 -04:00
self . close ( )
2007-09-21 16:28:31 -04:00
def media_toggled ( self , ignore1 = None , ignore2 = None ) :
2014-01-28 13:51:59 -05:00
is_phys = bool ( self . widget ( " physical-media " ) . get_active ( ) )
self . mediacombo . combo . set_sensitive ( is_phys )
self . widget ( " iso-path " ) . set_sensitive ( not is_phys )
self . widget ( " iso-file-chooser " ) . set_sensitive ( not is_phys )
2007-09-21 16:28:31 -04:00
def browse_fv_iso_location ( self , ignore1 = None , ignore2 = None ) :
2009-11-10 14:30:51 -05:00
self . _browse_file ( )
2007-09-21 16:28:31 -04:00
2010-12-09 11:22:35 -05:00
def set_storage_path ( self , src_ignore , path ) :
2011-07-14 13:13:13 -04:00
self . widget ( " iso-path " ) . set_text ( path )
2009-06-18 10:40:37 -04:00
2009-11-10 14:30:51 -05:00
def _browse_file ( self ) :
2012-11-08 14:15:02 +01:00
if self . storage_browser is None :
2010-12-08 17:26:19 -05:00
self . storage_browser = vmmStorageBrowser ( self . conn )
2014-12-09 18:37:00 -05:00
self . storage_browser . set_finish_cb ( self . set_storage_path )
2009-11-10 14:30:51 -05:00
2015-04-08 18:29:48 -04:00
self . storage_browser . set_stable_defaults ( self . vm . stable_defaults ( ) )
2011-07-22 12:22:09 -04:00
2015-04-07 13:56:48 -04:00
if self . media_type == vmmMediaCombo . MEDIA_FLOPPY :
2011-07-22 19:12:48 -04:00
self . storage_browser . set_browse_reason (
self . config . CONFIG_DIR_FLOPPY_MEDIA )
else :
self . storage_browser . set_browse_reason (
self . config . CONFIG_DIR_ISO_MEDIA )
2015-04-08 18:29:48 -04:00
self . storage_browser . show ( self . topwin )