addconn: Use a combo box entry for hostname + avahi

Shrinks the UI a whole bunch, and the always visible list wasn't useful
since the vast majority of people aren't using the functionality
This commit is contained in:
Cole Robinson 2010-08-22 14:10:01 -04:00
parent 73e99cd2ba
commit 695d9f46ec
2 changed files with 43 additions and 67 deletions

View File

@ -49,6 +49,9 @@ class vmmConnect(gobject.GObject):
self.window.signal_autoconnect({
"on_connection_changed": self.update_widget_states,
"on_hostname_combo_changed": self.hostname_combo_changed,
"on_cancel_clicked": self.cancel,
"on_connect_clicked": self.open_connection,
"on_vmm_open_connection_delete_event": self.cancel,
@ -72,24 +75,19 @@ class vmmConnect(gobject.GObject):
self.window.get_widget("autoconnect").set_active(True)
connListModel = gtk.ListStore(str, str, str)
self.window.get_widget("conn-list").set_model(connListModel)
nameCol = gtk.TreeViewColumn(_("Name"))
name_txt = gtk.CellRendererText()
nameCol.pack_start(name_txt, True)
nameCol.add_attribute(name_txt, "text", 2)
nameCol.set_sort_column_id(2)
self.window.get_widget("conn-list").append_column(nameCol)
host = self.window.get_widget("hostname")
host.set_model(connListModel)
host.set_text_column(2)
connListModel.set_sort_column_id(2, gtk.SORT_ASCENDING)
self.window.get_widget("conn-list").get_selection().connect("changed", self.conn_selected)
self.bus = None
self.server = None
self.can_browse = False
try:
self.bus = dbus.SystemBus()
self.server = dbus.Interface(self.bus.get_object("org.freedesktop.Avahi", "/"), "org.freedesktop.Avahi.Server")
self.server = dbus.Interface(
self.bus.get_object("org.freedesktop.Avahi", "/"),
"org.freedesktop.Avahi.Server")
self.can_browse = True
except Exception, e:
logging.debug("Couldn't contact avahi: %s" % str(e))
@ -115,9 +113,8 @@ class vmmConnect(gobject.GObject):
self.set_default_hypervisor()
self.window.get_widget("autoconnect").set_sensitive(True)
self.window.get_widget("autoconnect").set_active(True)
self.window.get_widget("conn-list").set_sensitive(False)
self.window.get_widget("conn-list").get_model().clear()
self.window.get_widget("hostname").set_text("")
self.window.get_widget("hostname").get_model().clear()
self.window.get_widget("hostname").child.set_text("")
self.stop_browse()
def set_default_hypervisor(self):
@ -135,12 +132,10 @@ class vmmConnect(gobject.GObject):
self.window.get_widget("autoconnect").set_active(False)
self.window.get_widget("autoconnect").set_sensitive(True)
if self.can_browse:
self.window.get_widget("conn-list").set_sensitive(True)
self.start_browse()
else:
self.window.get_widget("conn-list").set_sensitive(False)
self.window.get_widget("hostname").set_sensitive(False)
self.window.get_widget("hostname").set_text("")
self.window.get_widget("hostname").child.set_text("")
self.window.get_widget("autoconnect").set_sensitive(True)
self.window.get_widget("autoconnect").set_active(True)
self.stop_browse()
@ -162,7 +157,7 @@ class vmmConnect(gobject.GObject):
def remove_service(self, interface, protocol, name, type, domain, flags):
try:
model = self.window.get_widget("conn-list").get_model()
model = self.window.get_widget("hostname").get_model()
name = str(name)
for row in model:
if row[0] == name:
@ -173,14 +168,14 @@ class vmmConnect(gobject.GObject):
def add_conn_to_list(self, interface, protocol, name, type, domain,
host, aprotocol, address, port, text, flags):
try:
model = self.window.get_widget("conn-list").get_model()
model = self.window.get_widget("hostname").get_model()
for row in model:
if row[2] == str(name):
# Already present in list
return
host = self.sanitize_hostname(str(host))
model.append([str(address), self.sanitize_hostname(str(host)),
str(name)])
model.append([str(address), str(host), str(name)])
except Exception, e:
logging.exception(e)
@ -209,22 +204,31 @@ class vmmConnect(gobject.GObject):
del(self.browser)
self.browser = None
def conn_selected(self, src):
active = src.get_selected()
if active[1] == None:
def hostname_combo_changed(self, src):
model = src.get_model()
txt = src.child.get_text()
row = None
for currow in model:
if currow[2] == txt:
row = currow
break
if not row:
return
ip = active[0].get_value(active[1], 0)
host = active[0].get_value(active[1], 1)
host = self.sanitize_hostname(host)
ip = row[0]
host = row[1]
entry = host
if not entry:
entry = ip
self.window.get_widget("hostname").set_text(entry)
self.window.get_widget("hostname").child.set_text(entry)
def open_connection(self, src):
hv = self.window.get_widget("hypervisor").get_active()
conn = self.window.get_widget("connection").get_active()
host = self.window.get_widget("hostname").get_text()
host = self.window.get_widget("hostname").child.get_text()
auto = False
if self.window.get_widget("autoconnect").get_property("sensitive"):
auto = self.window.get_widget("autoconnect").get_active()

View File

@ -18,7 +18,7 @@
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="border_width">6</property>
<property name="n_rows">5</property>
<property name="n_rows">4</property>
<property name="n_columns">2</property>
<property name="column_spacing">6</property>
<property name="row_spacing">6</property>
@ -33,8 +33,8 @@
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
@ -48,26 +48,9 @@
<property name="mnemonic_widget">autoconnect</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="hostname">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<accessibility>
<atkproperty name="AtkObject::accessible-name" translatable="yes">Hostname Field</atkproperty>
</accessibility>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
@ -77,11 +60,10 @@
<property name="xalign">0</property>
<property name="label" translatable="yes">H_ostname:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">hostname</property>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
@ -153,26 +135,16 @@ Remote tunnel over SSH</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<property name="width_request">70</property>
<property name="height_request">220</property>
<widget class="GtkComboBoxEntry" id="hostname">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">3</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<property name="shadow_type">in</property>
<child>
<widget class="GtkTreeView" id="conn-list">
<property name="visible">True</property>
<property name="can_focus">True</property>
</widget>
</child>
<signal name="changed" handler="on_hostname_combo_changed"/>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
</widget>