improve look and feel of services view.

* add 'state' view
 * repack self.box to avoid blank spaces when widgets are hidden



SVN revision: 73442
This commit is contained in:
Gustavo Sverzut Barbieri 2012-07-07 05:52:15 +00:00
parent d982b5a9da
commit 8193f2368b
1 changed files with 72 additions and 13 deletions

View File

@ -6,10 +6,6 @@
# - Proxy
# - Fix connman's PropertyChanged when changing off/manual -> dhcp,
# gateway is not updated.
# - Technology icon
# - Service icon
# - ServiceView should clear self.box contents and re-add items
# whenever visibility changes, otherwise there are some blank places
import elementary as elm
import evas
@ -715,6 +711,28 @@ class ServiceView(ObjectView):
("Gateway", "ipv4_gateway"),
)
top_widgets = (
"connect",
"disconnect",
"forget",
"error",
"auto_connect",
"roaming",
"strength",
"security",
"state",
"nameservers_label",
"nameservers_entry",
"timeservers_label",
"timeservers_entry",
"domains_label",
"domains_entry",
"ipv4_frame",
"proxy_frame",
"ethernet_frame",
"vpn_frame",
)
def create_view(self, properties):
self.type = str(properties.get("Type"))
self.immutable = bool(properties.get("Immutable"))
@ -744,12 +762,26 @@ class ServiceView(ObjectView):
if self.type == "wifi":
self.security = self.add_label(self.box, "Security:")
self.add_readwrite_list("Name Servers:", "Nameservers", properties)
self.add_readwrite_list("Time Servers:", "Timeservers", properties)
self.add_readwrite_list("Domain Names:", "Domains", properties)
self.state = self.add_label(self.box, properties.get("State"))
lb, en = self.add_readwrite_list("Name Servers:", "Nameservers",
properties)
self.nameservers_label = lb
self.nameservers_entry = en
lb, en = self.add_readwrite_list("Time Servers:", "Timeservers",
properties)
self.timeservers_label = lb
self.timeservers_entry = en
lb, en = self.add_readwrite_list("Domain Names:", "Domains",
properties)
self.domains_label = lb
self.domains_entry = en
self.ipv4_properties = {"IPv4": {}, "IPv4.Configuration": {}}
fr, bx = self.add_frame_and_box(self.box, "IPv4")
self.ipv4_frame = fr
self.ipv4_box = bx
options = ("Automatic", "Manual", "Off")
self.ipv4_method, self.ipv4_method_items = self.add_segment_control(
@ -766,6 +798,7 @@ class ServiceView(ObjectView):
self.proxy_properties = {"Proxy": {}, "Proxy.Configuration": {}}
fr, bx = self.add_frame_and_box(self.box, "Proxy")
self.proxy_frame = fr
self.proxy_box = bx
options = ("Direct", "Automatic", "Manual")
self.proxy_method, self.proxy_method_items = self.add_segment_control(
@ -779,9 +812,11 @@ class ServiceView(ObjectView):
# - manual: servers, excludes
if self.type in ("wifi", "ethernet", "wimax", "bluetooth", "cellular"):
self.add_readonly_section("Ethernet", self.eth_fields)
fr, bx = self.add_readonly_section("Ethernet", self.eth_fields)
self.ethernet_frame = fr
elif self.type == "vpn":
self.add_readonly_section("VPN", self.vpn_fields)
fr, bx = self.add_readonly_section("VPN", self.vpn_fields)
self.vpn_frame = fr
def add_readonly_section(self, title, fields):
fr, bx = self.add_frame_and_box(self.box, title)
@ -789,6 +824,7 @@ class ServiceView(ObjectView):
lb, en = self.add_label_and_entry(bx, "%s:" % (name,))
en.editable = False
setattr(self, attr, en)
return fr, bx
def populate_fields(self, fields, value):
for n, a in fields:
@ -831,6 +867,7 @@ class ServiceView(ObjectView):
en.callback_unfocused_add(on_unfocused)
self.readwrite_list_widget[name] = en
self.reload_readwrite_list(name)
return lb, en
def reload_readwrite_list(self, name):
used_value = self.readwrite_list_properties[name]
@ -852,6 +889,9 @@ class ServiceView(ObjectView):
def on_property_changed(self, name, value):
log.debug("Changed %s: %s=%s", self.path, name, value)
visibility_changed = False
if name == "Type":
self.type = str(value)
elif name == "Immutable":
@ -868,13 +908,23 @@ class ServiceView(ObjectView):
elif name == "Favorite":
value = bool(value)
if hasattr(self, "forget"):
self.forget.visible = value
if self.forget.visible != value:
self.forget.visible = value
visibility_changed = True
elif name == "State":
value = str(value)
self.error.visible = (value == "failure")
visible = (value == "failure")
self.state.text = "State: %s" % (value,)
if self.error.visible != visible:
self.error.visible = visible
visibility_changed = True
connected = (value not in ("idle", "failure"))
self.disconnect.visible = connected
self.connect.visible = not connected
if self.disconnect.visible != connected:
self.disconnect.visible = connected
visibility_changed = True
if self.connect.visible == connected:
self.connect.visible = not connected
visibility_changed = True
elif name == "Error":
self.error.text = "Error: %s" % value
elif name == "AutoConnect":
@ -944,6 +994,15 @@ class ServiceView(ObjectView):
elif name in self.readwrite_list_properties:
self.update_readwrite_list(name, value)
if visibility_changed:
self.box.unpack_all()
for attr in self.top_widgets:
if hasattr(self, attr):
wid = getattr(self, attr)
if wid.visible:
self.box.pack_end(wid)
def _disconnect(self, obj):
def on_reply():
log.debug("Disconnected %s", self.path)