mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-03-09 08:58:27 +03:00
storagebrowser: Allow setting browser title.
Also, various refactoring in how we pass options off to the local browser (try to centralize a lot of duplication).
This commit is contained in:
parent
76df6b2fbb
commit
79a20bb5df
@ -884,45 +884,33 @@ class vmmAddHardware(gobject.GObject):
|
||||
|
||||
def browse_storage_partition_address(self, src, ignore=None):
|
||||
textent = self.window.get_widget("storage-partition-address")
|
||||
part = self._browse_file(_("Locate Storage Partition"), textent,
|
||||
"/dev")
|
||||
if part != None:
|
||||
textent.set_text(part)
|
||||
|
||||
self._browse_file(textent)
|
||||
|
||||
def browse_storage_file_address(self, src, ignore=None):
|
||||
textent = self.window.get_widget("storage-file-address")
|
||||
folder = self.config.get_default_image_dir(self.vm.get_connection())
|
||||
filename = self._browse_file(_("Locate or Create New Storage File"),
|
||||
textent, folder=folder,
|
||||
confirm_overwrite=True)
|
||||
if filename != None:
|
||||
textent.set_text(filename)
|
||||
|
||||
def _browse_file(self, dialog_name, textent, folder=None,
|
||||
confirm_overwrite=False):
|
||||
self._browse_file(textent, confirm_overwrite=True)
|
||||
|
||||
def _browse_file(self, textent, confirm_overwrite=False):
|
||||
|
||||
confirm_func = None
|
||||
if confirm_overwrite:
|
||||
confirm_func = self.confirm_overwrite_callback
|
||||
|
||||
if folder and not os.access(folder, os.R_OK):
|
||||
folder = None
|
||||
|
||||
def set_storage_cb(src, path):
|
||||
if path:
|
||||
textent.set_text(path)
|
||||
|
||||
conn = self.vm.get_connection()
|
||||
if self.storage_browser == None:
|
||||
self.storage_browser = vmmStorageBrowser(self.config, conn, False)
|
||||
self.storage_browser = vmmStorageBrowser(self.config, conn)
|
||||
|
||||
self.storage_browser.set_finish_cb(set_storage_cb)
|
||||
self.storage_browser.local_args = { "dialog_name": dialog_name,
|
||||
"confirm_func": confirm_func,
|
||||
"browse_reason":
|
||||
self.config.CONFIG_DIR_IMAGE }
|
||||
self.storage_browser.set_browse_reason(self.config.CONFIG_DIR_IMAGE)
|
||||
self.storage_browser.set_local_arg("confirm_func", confirm_func)
|
||||
|
||||
self.storage_browser.show(conn)
|
||||
return None
|
||||
|
||||
def toggle_storage_size(self, ignore1=None, ignore2=None):
|
||||
filename = self.get_config_disk_image()
|
||||
|
@ -125,7 +125,7 @@ class vmmChooseCD(gobject.GObject):
|
||||
pass
|
||||
|
||||
def browse_fv_iso_location(self, ignore1=None, ignore2=None):
|
||||
self._browse_file(_("Locate ISO Image"))
|
||||
self._browse_file()
|
||||
|
||||
def initialize_opt_media(self):
|
||||
try:
|
||||
@ -139,16 +139,13 @@ class vmmChooseCD(gobject.GObject):
|
||||
def set_storage_path(self, src, path):
|
||||
self.window.get_widget("iso-path").set_text(path)
|
||||
|
||||
def _browse_file(self, dialog_name):
|
||||
def _browse_file(self):
|
||||
if self.storage_browser == None:
|
||||
self.storage_browser = vmmStorageBrowser(self.config, self.conn,
|
||||
True)
|
||||
self.storage_browser = vmmStorageBrowser(self.config, self.conn)
|
||||
self.storage_browser.connect("storage-browse-finish",
|
||||
self.set_storage_path)
|
||||
self.storage_browser.local_args = { "dialog_name": dialog_name,
|
||||
"browse_reason":
|
||||
self.config.CONFIG_DIR_MEDIA }
|
||||
|
||||
self.storage_browser.set_browse_reason(self.config.CONFIG_DIR_MEDIA)
|
||||
self.storage_browser.show(self.conn)
|
||||
return None
|
||||
|
||||
gobject.type_register(vmmChooseCD)
|
||||
|
@ -55,6 +55,22 @@ class vmmConfig:
|
||||
CONFIG_DIR_RESTORE = "restore"
|
||||
CONFIG_DIR_SCREENSHOT = "screenshot"
|
||||
|
||||
# Metadata mapping for browse types. Prob shouldn't go here, but works
|
||||
# for now.
|
||||
browse_reason_data = {
|
||||
CONFIG_DIR_IMAGE : {
|
||||
"enable_create" : True,
|
||||
"storage_title" : _("Locate or create storage volume"),
|
||||
"local_title" : _("Locate existing storage"),
|
||||
},
|
||||
|
||||
CONFIG_DIR_MEDIA : {
|
||||
"enable_create" : False,
|
||||
"storage_title" : _("Locate ISO media volume"),
|
||||
"local_title" : _("Locate ISO media"),
|
||||
}
|
||||
}
|
||||
|
||||
CONSOLE_SCALE_NEVER = 0
|
||||
CONSOLE_SCALE_FULLSCREEN = 1
|
||||
CONSOLE_SCALE_ALWAYS = 2
|
||||
|
@ -1016,8 +1016,7 @@ class vmmCreate(gobject.GObject):
|
||||
nodetect_label.show()
|
||||
|
||||
def browse_iso(self, ignore1=None, ignore2=None):
|
||||
self._browse_file(_("Locate ISO Image"),
|
||||
self.set_iso_storage_path,
|
||||
self._browse_file(self.set_iso_storage_path,
|
||||
is_media=True)
|
||||
self.window.get_widget("install-local-box").activate()
|
||||
|
||||
@ -1025,8 +1024,7 @@ class vmmCreate(gobject.GObject):
|
||||
self.window.get_widget("config-storage-box").set_sensitive(src.get_active())
|
||||
|
||||
def browse_storage(self, ignore1):
|
||||
self._browse_file(_("Locate existing storage"),
|
||||
self.set_disk_storage_path,
|
||||
self._browse_file(self.set_disk_storage_path,
|
||||
is_media=False)
|
||||
|
||||
def toggle_storage_select(self, src):
|
||||
@ -1672,21 +1670,17 @@ class vmmCreate(gobject.GObject):
|
||||
logging.exception("Error detecting distro.")
|
||||
self.detectedDistro = (None, None)
|
||||
|
||||
def _browse_file(self, dialog_name, callback, folder=None, is_media=False):
|
||||
if self.storage_browser == None:
|
||||
self.storage_browser = vmmStorageBrowser(self.config, self.conn,
|
||||
is_media)
|
||||
|
||||
self.storage_browser.set_finish_cb(callback)
|
||||
|
||||
def _browse_file(self, callback, is_media=False):
|
||||
if is_media:
|
||||
reason = self.config.CONFIG_DIR_MEDIA
|
||||
else:
|
||||
reason = self.config.CONFIG_DIR_IMAGE
|
||||
|
||||
self.storage_browser.local_args = { "dialog_name": dialog_name,
|
||||
"start_folder": folder,
|
||||
"browse_reason": reason}
|
||||
if self.storage_browser == None:
|
||||
self.storage_browser = vmmStorageBrowser(self.config, self.conn)
|
||||
|
||||
self.storage_browser.set_finish_cb(callback)
|
||||
self.storage_browser.set_browse_reason(reason)
|
||||
self.storage_browser.show(self.conn)
|
||||
|
||||
def show_help(self, ignore):
|
||||
|
@ -29,6 +29,7 @@ import virtinst
|
||||
import virtManager.host
|
||||
import virtManager.util as util
|
||||
from virtManager.createvol import vmmCreateVolume
|
||||
from virtManager.config import vmmConfig
|
||||
from virtManager.error import vmmErrorDialog
|
||||
|
||||
class vmmStorageBrowser(gobject.GObject):
|
||||
@ -38,7 +39,7 @@ class vmmStorageBrowser(gobject.GObject):
|
||||
gobject.TYPE_NONE, [str]),
|
||||
}
|
||||
|
||||
def __init__(self, config, conn, is_media=False):
|
||||
def __init__(self, config, conn):
|
||||
self.__gobject_init__()
|
||||
self.window = gtk.glade.XML(config.get_glade_dir() + \
|
||||
"/vmm-storage-browse.glade",
|
||||
@ -46,6 +47,7 @@ class vmmStorageBrowser(gobject.GObject):
|
||||
domain="virt-manager")
|
||||
self.config = config
|
||||
self.conn = conn
|
||||
|
||||
self.conn_signal_ids = []
|
||||
self.finish_cb_id = None
|
||||
|
||||
@ -59,14 +61,9 @@ class vmmStorageBrowser(gobject.GObject):
|
||||
# Add Volume wizard
|
||||
self.addvol = None
|
||||
|
||||
if is_media:
|
||||
reason = self.config.CONFIG_DIR_MEDIA
|
||||
else:
|
||||
reason = self.config.CONFIG_DIR_IMAGE
|
||||
|
||||
# Arguments to pass to util.browse_local for local storage
|
||||
self.local_args = {"dialog_name": _("Choose local storage"),
|
||||
"browse_reason": reason, }
|
||||
self.browse_reason = None
|
||||
self.local_args = {}
|
||||
|
||||
self.window.signal_autoconnect({
|
||||
"on_vmm_storage_browse_delete_event" : self.close,
|
||||
@ -95,6 +92,12 @@ class vmmStorageBrowser(gobject.GObject):
|
||||
self.disconnect(self.finish_cb_id)
|
||||
self.finish_cb_id = self.connect("storage-browse-finish", callback)
|
||||
|
||||
def set_browse_reason(self, reason):
|
||||
self.browse_reason = reason
|
||||
|
||||
def set_local_arg(self, arg, val):
|
||||
self.local_args[arg] = val
|
||||
|
||||
def set_initial_state(self):
|
||||
pool_list = self.window.get_widget("pool-list")
|
||||
virtManager.host.init_pool_list(pool_list, self.pool_selected)
|
||||
@ -170,6 +173,18 @@ class vmmStorageBrowser(gobject.GObject):
|
||||
util.tooltip_wrapper(self.window.get_widget("browse-local"),
|
||||
tooltip)
|
||||
|
||||
# Set data based on browse type
|
||||
self.local_args["browse_reason"] = self.browse_reason
|
||||
if not vmmConfig.browse_reason_data.has_key(self.browse_reason):
|
||||
return
|
||||
|
||||
data = vmmConfig.browse_reason_data[self.browse_reason]
|
||||
self.topwin.set_title(data["storage_title"])
|
||||
self.local_args["dialog_name"] = data["local_title"]
|
||||
|
||||
allow_create = data["enable_create"]
|
||||
self.window.get_widget("new-volume").set_sensitive(allow_create)
|
||||
|
||||
# Convenience helpers
|
||||
def current_pool(self):
|
||||
sel = self.window.get_widget("pool-list").get_selection()
|
||||
|
@ -111,15 +111,13 @@ def browse_local(parent, dialog_name, config, conn, start_folder=None,
|
||||
|
||||
"""
|
||||
|
||||
# Initial setup
|
||||
overwrite_confirm = False
|
||||
choose_button = gtk.STOCK_OPEN
|
||||
if dialog_type == gtk.FILE_CHOOSER_ACTION_SAVE:
|
||||
choose_button = gtk.STOCK_SAVE
|
||||
overwrite_confirm = True
|
||||
|
||||
if browse_reason:
|
||||
start_folder = config.get_default_directory(conn, browse_reason)
|
||||
|
||||
fcdialog = gtk.FileChooserDialog(dialog_name, parent,
|
||||
dialog_type,
|
||||
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
|
||||
@ -127,11 +125,13 @@ def browse_local(parent, dialog_name, config, conn, start_folder=None,
|
||||
None)
|
||||
fcdialog.set_default_response(gtk.RESPONSE_ACCEPT)
|
||||
|
||||
# If confirm is set, warn about a file overwrite
|
||||
if confirm_func:
|
||||
overwrite_confirm = True
|
||||
fcdialog.connect("confirm-overwrite", confirm_func)
|
||||
fcdialog.set_do_overwrite_confirmation(overwrite_confirm)
|
||||
|
||||
# Set file match pattern (ex. *.png)
|
||||
if _type != None:
|
||||
pattern = _type
|
||||
name = None
|
||||
@ -145,12 +145,18 @@ def browse_local(parent, dialog_name, config, conn, start_folder=None,
|
||||
f.set_name(name)
|
||||
fcdialog.set_filter(f)
|
||||
|
||||
# Set initial dialog folder
|
||||
if browse_reason:
|
||||
start_folder = config.get_default_directory(conn, browse_reason)
|
||||
|
||||
if start_folder != None:
|
||||
if not os.access(start_folder, os.R_OK):
|
||||
fcdialog.set_current_folder(start_folder)
|
||||
|
||||
# Run the dialog and parse the response
|
||||
response = fcdialog.run()
|
||||
fcdialog.hide()
|
||||
if(response == gtk.RESPONSE_ACCEPT):
|
||||
if (response == gtk.RESPONSE_ACCEPT):
|
||||
filename = fcdialog.get_filename()
|
||||
fcdialog.destroy()
|
||||
ret = filename
|
||||
@ -158,6 +164,7 @@ def browse_local(parent, dialog_name, config, conn, start_folder=None,
|
||||
fcdialog.destroy()
|
||||
ret = None
|
||||
|
||||
# Store the chosen directory in gconf if necessary
|
||||
if ret and browse_reason and not ret.startswith("/dev"):
|
||||
config.set_default_directory(os.path.dirname(ret), browse_reason)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user