Add new popup menu for connection line. Remove 'create' button from bottom row since it is now in the connection line. Hook up the 'disconnect' action from the popup menu as well.

This commit is contained in:
Hugh O. Brock 2007-08-13 17:13:39 -04:00
parent 82bc8086de
commit eae65ea694
3 changed files with 41 additions and 60 deletions

View File

@ -196,8 +196,8 @@ class vmmEngine:
self.show_connect()
def _do_show_details(self, src, uri, uuid):
self.show_details(uri, uuid)
def _do_show_create(self, src):
self.show_create()
def _do_show_create(self, src, uri):
self.show_create(uri)
def _do_show_help(self, src, index):
self.show_help(index)
def _do_show_console(self, src, uri, uuid):
@ -305,12 +305,15 @@ class vmmEngine:
def show_manager(self):
self.get_manager().show()
def show_create(self):
def show_create(self, uri):
if self.windowCreate == None:
self.windowCreate = vmmCreate(self.get_config(), self.connections)
self.windowCreate.connect("action-show-console", self._do_show_console)
self.windowCreate.connect("action-show-terminal", self._do_show_terminal)
self.windowCreate.connect("action-show-help", self._do_show_help)
self.windowCreate = vmmCreate(self.get_config(), self.get_connection(uri, False))
self.windowCreate.connect("action-show-console", self._do_show_console)
self.windowCreate.connect("action-show-terminal", self._do_show_terminal)
self.windowCreate.connect("action-show-help", self._do_show_help)
self.windowCreate.reset_state()
else:
self.windowCreate.connection = self.get_connection(uri, False)
self.windowCreate.reset_state()
self.windowCreate.show()

View File

@ -143,6 +143,20 @@ class vmmManager(gobject.GObject):
# allow O(1) access instead of O(n)
self.rows = {}
self.connmenu = gtk.Menu()
self.connmenu_items = {}
self.connmenu_items["create"] = gtk.ImageMenuItem(gtk.STOCK_NEW)
self.connmenu_items["create"].show()
self.connmenu_items["create"].connect("activate", self.show_vm_create)
self.connmenu.add(self.connmenu_items["create"])
self.connmenu_items["disconnect"] = gtk.ImageMenuItem(gtk.STOCK_DISCONNECT)
self.connmenu_items["disconnect"].show()
self.connmenu_items["disconnect"].connect("activate", self.destroy_connection)
self.connmenu.add(self.connmenu_items["disconnect"])
self.connmenu.show()
self.window.signal_autoconnect({
"on_menu_view_domain_id_activate" : self.toggle_domain_id_visible_conf,
"on_menu_view_status_activate" : self.toggle_status_visible_conf,
@ -154,14 +168,12 @@ class vmmManager(gobject.GObject):
"on_vm_manager_delete_event": self.close,
"on_menu_file_open_connection_activate": self.open_connection,
"on_menu_file_new_activate": self.show_vm_create,
"on_menu_file_quit_activate": self.exit_app,
"on_menu_file_close_activate": self.close,
"on_menu_restore_saved_activate": self.restore_saved,
"on_vmm_close_clicked": self.close,
"on_vm_details_clicked": self.show_vm_details,
"on_vm_open_clicked": self.open_vm_console,
"on_vm_new_clicked": self.show_vm_create,
"on_vm_delete_clicked": self.delete_vm,
"on_menu_edit_delete_activate" : self.delete_vm,
"on_menu_edit_details_activate": self.show_vm_details,
@ -425,7 +437,7 @@ class vmmManager(gobject.GObject):
return active[0].get_value(active[1], 0)
return None
def current_connection(self):
def get_current_connection(self):
vmlist = self.window.get_widget("vm-list")
selection = vmlist.get_selection()
active = selection.get_selected()
@ -461,7 +473,10 @@ class vmmManager(gobject.GObject):
self.emit("action-show-details", conn.get_uri(), self.current_vmuuid())
def show_vm_create(self,ignore):
self.emit("action-show-create", self.connections)
self.emit("action-show-create", self.get_current_connection().get_uri())
def destroy_connection(self, ignore):
self.get_current_connection().close()
def open_vm_console(self,ignore,ignore2=None,ignore3=None):
self.emit("action-show-console", self.connection.get_uri(), self.current_vmuuid())
@ -486,7 +501,7 @@ class vmmManager(gobject.GObject):
self.window.get_widget("vm-open").set_sensitive(True)
self.window.get_widget("menu_edit_details").set_sensitive(True)
else:
connection = self.current_connection()
connection = self.get_current_connection()
self.set_menu_visibility(connection)
self.window.get_widget("vm-delete").set_sensitive(False)
self.window.get_widget("vm-details").set_sensitive(False)
@ -495,9 +510,10 @@ class vmmManager(gobject.GObject):
self.window.get_widget("menu_edit_details").set_sensitive(False)
self.window.get_widget("vm-delete").set_sensitive(False)
self.window.get_widget("menu_edit_delete").set_sensitive(False)
def popup_vm_menu(self, widget, event):
vm = self.current_vm()
connection = self.current_connection()
connection = self.get_current_connection()
if vm != None:
# Update popup menu based upon vm status
@ -533,9 +549,8 @@ class vmmManager(gobject.GObject):
if event.button == 3:
self.vmmenu.popup(None, None, None, 0, event.time)
elif connection is not None:
# later, add "disconnect" item
if event.button == 3:
self.vmmenu.popup(None, None, None, 0, event.time)
self.connmenu.popup(None, None, None, 0, event.time)
def show_about(self, src):
@ -782,12 +797,10 @@ class vmmManager(gobject.GObject):
def set_menu_visibility(self, connection):
if connection is None or connection.is_read_only():
self.window.get_widget("menu_file_new").set_sensitive(False)
self.window.get_widget("menu_file_restore_saved").set_sensitive(False)
self.window.get_widget("vm-new").set_sensitive(False)
else:
self.window.get_widget("menu_file_new").set_sensitive(True)
self.window.get_widget("vm-new").set_sensitive(True)
self.window.get_widget("menu_file_restore_saved").set_sensitive(True)
# XXX setting this false because save/restore is broken until
# XXX we deal with multiple connections properly
self.window.get_widget("menu_file_restore_saved").set_sensitive(False)
gobject.type_register(vmmManager)

View File

@ -43,28 +43,6 @@
<child>
<widget class="GtkMenu" id="menuitem4_menu">
<child>
<widget class="GtkImageMenuItem" id="menu_file_new">
<property name="visible">True</property>
<property name="label" translatable="yes">New machine...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menu_file_new_activate" last_modification_time="Tue, 28 Mar 2006 17:06:34 GMT"/>
<accelerator key="n" modifiers="GDK_MOD1_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image118">
<property name="visible">True</property>
<property name="stock">gtk-new</property>
<property name="icon_size">1</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menu_file_restore_saved">
<property name="visible">True</property>
@ -75,7 +53,7 @@
<accelerator key="r" modifiers="GDK_MOD1_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image119">
<widget class="GtkImage" id="image123">
<property name="visible">True</property>
<property name="stock">gtk-open</property>
<property name="icon_size">1</property>
@ -102,7 +80,7 @@
<signal name="activate" handler="on_menu_file_open_connection_activate" last_modification_time="Mon, 12 Jun 2006 20:34:47 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image120">
<widget class="GtkImage" id="image124">
<property name="visible">True</property>
<property name="stock">gtk-connect</property>
<property name="icon_size">1</property>
@ -169,7 +147,7 @@
<signal name="activate" handler="on_menu_edit_details_activate" last_modification_time="Tue, 28 Mar 2006 17:06:34 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image121">
<widget class="GtkImage" id="image125">
<property name="visible">True</property>
<property name="stock">gtk-properties</property>
<property name="icon_size">1</property>
@ -190,7 +168,7 @@
<signal name="activate" handler="on_menu_edit_delete_activate" last_modification_time="Tue, 28 Mar 2006 17:06:34 GMT"/>
<child internal-child="image">
<widget class="GtkImage" id="image122">
<widget class="GtkImage" id="image126">
<property name="visible">True</property>
<property name="stock">gtk-delete</property>
<property name="icon_size">1</property>
@ -323,7 +301,7 @@
<accelerator key="F1" modifiers="0" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image123">
<widget class="GtkImage" id="image127">
<property name="visible">True</property>
<property name="stock">gtk-help</property>
<property name="icon_size">1</property>
@ -467,19 +445,6 @@ Inactive virtual machines</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="vm-new">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-new</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_vm_new_clicked" last_modification_time="Tue, 28 Mar 2006 17:03:39 GMT"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="vm-details">
<property name="visible">True</property>