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:
Cole Robinson 2009-11-10 14:30:51 -05:00
parent 76df6b2fbb
commit 79a20bb5df
6 changed files with 74 additions and 57 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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

View File

@ -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):

View File

@ -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()

View File

@ -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)