New 'Create VM' wizard.

This commit is contained in:
Cole Robinson 2009-03-09 16:16:45 -04:00
parent a650c6c6ec
commit f9dfe4acab
6 changed files with 3048 additions and 4701 deletions

View File

@ -251,6 +251,9 @@ class vmmConnection(gobject.GObject):
def is_read_only(self):
return self.readOnly
def is_active(self):
return self.state == self.STATE_ACTIVE
def get_type(self):
if self.vmm is None:
return None
@ -275,16 +278,56 @@ class vmmConnection(gobject.GObject):
def get_capabilities(self):
return virtinst.CapabilitiesParser.parse(self.vmm.getCapabilities())
def is_kvm_supported(self):
if self.is_qemu_session():
return False
caps = self.get_capabilities()
for guest in caps.guests:
for dom in guest.domains:
if dom.hypervisor_type == "kvm":
return True
return False
def is_remote(self):
return virtinst.util.is_uri_remote(self.uri)
def is_storage_capable(self):
return virtinst.util.is_storage_capable(self.vmm)
def is_qemu_session(self):
(scheme, ignore, ignore, \
(scheme, ignore, ignore,
path, ignore, ignore) = virtinst.util.uri_split(self.uri)
if path == "/session" and scheme.startswith("qemu"):
return True
return False
def is_test_conn(self):
(scheme, ignore, ignore,
ignore, ignore, ignore) = virtinst.util.uri_split(self.uri)
if scheme.startswith("test"):
return True
return False
def get_pretty_desc(self):
(scheme, ignore, hostname,
path, ignore, ignore) = virtinst.util.uri_split(self.uri)
scheme = scheme.split("+")[0]
if scheme == "qemu":
desc = "QEMU"
if self.is_kvm_supported():
desc += "/KVM"
else:
desc = scheme.capitalize()
if path == "/session":
desc += " Usermode"
if hostname:
desc += " (%s)" % hostname
return desc
def get_uri(self):
return self.uri
@ -326,6 +369,12 @@ class vmmConnection(gobject.GObject):
return True
def get_pool_by_path(self, path):
for pool in self.pools.values():
if pool.get_target_path() == path:
return pool
return None
def open(self):
if self.state != self.STATE_DISCONNECTED:
return

File diff suppressed because it is too large Load Diff

View File

@ -125,9 +125,9 @@ class vmmEngine(gobject.GObject):
if self.connections[hvuri]["windowHost"] is not None:
self.connections[hvuri]["windowHost"].close()
self.connections[hvuri]["windowHost"] = None
if self.connections[hvuri]["windowCreate"] is not None:
self.connections[hvuri]["windowCreate"].close()
self.connections[hvuri]["windowCreate"] = None
if (self.windowCreate and self.windowCreate.conn and
self.windowCreate.conn.get_uri() == hvuri):
self.windowCreate.close()
def reschedule_timer(self, ignore1,ignore2,ignore3,ignore4):
self.schedule_timer()
@ -342,21 +342,18 @@ class vmmEngine(gobject.GObject):
return True
def show_create(self, uri):
con = self.get_connection(uri)
if self.connections[uri]["windowCreate"] == None:
create = vmmCreate(self.get_config(), con)
if self.windowCreate == None:
create = vmmCreate(self.get_config(), self)
create.connect("action-show-console", self._do_show_console)
create.connect("action-show-help", self._do_show_help)
self.connections[uri]["windowCreate"] = create
self.connections[uri]["windowCreate"].show()
self.windowCreate = create
self.windowCreate.show(uri)
def add_connection(self, uri, readOnly=None, autoconnect=False):
conn = vmmConnection(self.get_config(), uri, readOnly)
self.connections[uri] = {
"connection": conn,
"windowHost": None,
"windowCreate": None,
"windowDetails": {},
"windowConsole": {},
}

View File

@ -695,7 +695,6 @@ class vmmManager(gobject.GObject):
# Nothing is selected
self.window.get_widget("vm-open").set_sensitive(False)
self.window.get_widget("vm-delete").set_sensitive(False)
self.window.get_widget("vm-new").set_sensitive(False)
self.window.get_widget("menu_edit_details").set_sensitive(False)
self.window.get_widget("menu_edit_delete").set_sensitive(False)
self.window.get_widget("menu_host_details").set_sensitive(False)
@ -710,7 +709,6 @@ class vmmManager(gobject.GObject):
self.window.get_widget("vm-delete").set_sensitive(True)
else:
self.window.get_widget("vm-delete").set_sensitive(False)
self.window.get_widget("vm-new").set_sensitive(False)
self.window.get_widget("menu_edit_details").set_sensitive(True)
self.window.get_widget("menu_edit_delete").set_sensitive(True)
self.window.get_widget("menu_host_details").set_sensitive(True)
@ -723,10 +721,8 @@ class vmmManager(gobject.GObject):
else:
self.window.get_widget("vm-delete").set_sensitive(False)
if conn.get_state() == vmmConnection.STATE_ACTIVE:
self.window.get_widget("vm-new").set_sensitive(True)
self.window.get_widget("menu_file_restore_saved").set_sensitive(True)
else:
self.window.get_widget("vm-new").set_sensitive(False)
self.window.get_widget("menu_file_restore_saved").set_sensitive(False)
self.window.get_widget("menu_edit_details").set_sensitive(False)
self.window.get_widget("menu_edit_delete").set_sensitive(False)
@ -794,8 +790,7 @@ class vmmManager(gobject.GObject):
return False
def new_vm(self, ignore=None):
conn = self.current_connection()
self.emit("action-show-create", conn.get_uri())
self.emit("action-show-create", self.current_connection_uri())
def delete_vm(self, ignore=None):
conn = self.current_connection()

File diff suppressed because it is too large Load Diff

View File

@ -344,7 +344,6 @@ Inactive virtual machines</property>
<child>
<widget class="GtkButton" id="vm-new">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="label">gtk-new</property>