Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrés Ambrois <andresambrois@gmail.com>2010-06-14 03:32:42 (GMT)
committer Andrés Ambrois <andresambrois@gmail.com>2010-08-30 19:13:16 (GMT)
commit0cd4706de2642dea65fdb4e91784c830442c792e (patch)
tree8fd97917976dadb465d5dc1f68d404acaee2e904
parent668884388062b2e5586897f655c97b009fec6d04 (diff)
Show Country/Provider/Plan comboboxes if DB exists.
Display comboboxes for selecting a data plan for each country and provider if the mobile-broadband-providers-info package is installed. Populate the connection parameters with the info from the selected data plan.
-rw-r--r--extensions/cpsection/modemconfiguration/view.py167
1 files changed, 133 insertions, 34 deletions
diff --git a/extensions/cpsection/modemconfiguration/view.py b/extensions/cpsection/modemconfiguration/view.py
index b236f3f..c6850d3 100644
--- a/extensions/cpsection/modemconfiguration/view.py
+++ b/extensions/cpsection/modemconfiguration/view.py
@@ -14,8 +14,6 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 US
-import os
-import logging
from gettext import gettext as _
import gtk
@@ -31,7 +29,7 @@ class EntryWithLabel(gtk.HBox):
__gtype_name__ = "SugarEntryWithLabel"
def __init__(self, label_text):
- gtk.HBox.__init__(self, spacing=style.DEFAULT_SPACING)
+ gtk.HBox.__init__(self, spacing=style.DEFAULT_SPACING * 2)
self._timeout_sid = 0
self._changed_handler = None
@@ -44,11 +42,11 @@ class EntryWithLabel(gtk.HBox):
self.pack_start(self.label, expand=False)
self.label.show()
- self._entry = gtk.Entry(25)
- self._entry.connect('changed', self.__entry_changed_cb)
- self._entry.set_width_chars(25)
- self.pack_start(self._entry, expand=False)
- self._entry.show()
+ self.entry = gtk.Entry(25)
+ self.entry.connect('changed', self.__entry_changed_cb)
+ self.entry.set_width_chars(25)
+ self.pack_start(self.entry, expand=False)
+ self.entry.show()
def __entry_changed_cb(self, widget, data=None):
if self._timeout_sid:
@@ -59,11 +57,11 @@ class EntryWithLabel(gtk.HBox):
def __timeout_cb(self):
self._timeout_sid = 0
- if self._entry.get_text() == self.get_value():
+ if self.entry.get_text() == self.get_value():
return False
try:
- self.set_value(self._entry.get_text())
+ self.set_value(self.entry.get_text())
except ValueError:
self._is_valid = False
else:
@@ -74,18 +72,20 @@ class EntryWithLabel(gtk.HBox):
return False
def set_text_from_model(self):
- self._entry.set_text(self.get_value())
+ self.entry.set_text(self.get_value())
def get_value(self):
raise NotImplementedError
- def set_value(self):
+ def set_value(self, value):
raise NotImplementedError
def _get_is_valid(self):
return self._is_valid
+
is_valid = gobject.property(type=bool, getter=_get_is_valid, default=True)
+
class UsernameEntry(EntryWithLabel):
def __init__(self, model):
EntryWithLabel.__init__(self, _('Username:'))
@@ -97,6 +97,7 @@ class UsernameEntry(EntryWithLabel):
def set_value(self, username):
self._model.set_username(username)
+
class PasswordEntry(EntryWithLabel):
def __init__(self, model):
EntryWithLabel.__init__(self, _('Password:'))
@@ -108,6 +109,7 @@ class PasswordEntry(EntryWithLabel):
def set_value(self, password):
self._model.set_password(password)
+
class NumberEntry(EntryWithLabel):
def __init__(self, model):
EntryWithLabel.__init__(self, _('Number:'))
@@ -119,6 +121,7 @@ class NumberEntry(EntryWithLabel):
def set_value(self, number):
self._model.set_number(number)
+
class ApnEntry(EntryWithLabel):
def __init__(self, model):
EntryWithLabel.__init__(self, _('Access Point Name (APN):'))
@@ -130,6 +133,7 @@ class ApnEntry(EntryWithLabel):
def set_value(self, apn):
self._model.set_apn(apn)
+
class PinEntry(EntryWithLabel):
def __init__(self, model):
EntryWithLabel.__init__(self, _('Personal Identity Number (PIN):'))
@@ -141,6 +145,7 @@ class PinEntry(EntryWithLabel):
def set_value(self, pin):
self._model.set_pin(pin)
+
class PukEntry(EntryWithLabel):
def __init__(self, model):
EntryWithLabel.__init__(self, _('Personal Unblocking Key (PUK):'))
@@ -160,65 +165,137 @@ class ModemConfiguration(SectionView):
self._model = model
self.restart_alerts = alerts
- self.set_border_width(style.DEFAULT_SPACING)
self.set_spacing(style.DEFAULT_SPACING)
- self._group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
+
+ label_group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
+ combo_group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
+
+ scrolled_win = gtk.ScrolledWindow()
+ scrolled_win.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ scrolled_win.show()
+ self.add(scrolled_win)
+
+ main_box = gtk.VBox(spacing=style.DEFAULT_SPACING)
+ main_box.set_border_width(style.DEFAULT_SPACING)
+ main_box.show()
+ scrolled_win.add_with_viewport(main_box)
explanation = _("You will need to provide the following " \
"information to set up a mobile " \
"broadband connection to a cellular "\
"(3G) network.")
self._text = gtk.Label(explanation)
- self._text.set_width_chars(100)
self._text.set_line_wrap(True)
self._text.set_alignment(0, 0)
- self.pack_start(self._text, False)
+ main_box.pack_start(self._text, False)
self._text.show()
+ if model.has_providers_db():
+ self.__add_provider_information(model, main_box, label_group,
+ combo_group)
+
+ self._lower_box = gtk.VBox(spacing=style.DEFAULT_SPACING)
+ self._lower_box.set_border_width(style.DEFAULT_SPACING)
+ main_box.pack_start(self._lower_box, expand=False)
+ self._lower_box.show()
+
self._username_entry = UsernameEntry(model)
self._username_entry.connect('notify::is-valid',
self.__notify_is_valid_cb)
- self._group.add_widget(self._username_entry.label)
- self.pack_start(self._username_entry, expand=False)
+ label_group.add_widget(self._username_entry.label)
+ combo_group.add_widget(self._username_entry.entry)
+ self._lower_box.pack_start(self._username_entry, fill=False)
self._username_entry.show()
self._password_entry = PasswordEntry(model)
self._password_entry.connect('notify::is-valid',
self.__notify_is_valid_cb)
- self._group.add_widget(self._password_entry.label)
- self.pack_start(self._password_entry, expand=False)
+ label_group.add_widget(self._password_entry.label)
+ combo_group.add_widget(self._password_entry.entry)
+ self._lower_box.pack_start(self._password_entry, fill=False)
self._password_entry.show()
self._number_entry = NumberEntry(model)
self._number_entry.connect('notify::is-valid',
self.__notify_is_valid_cb)
- self._group.add_widget(self._number_entry.label)
- self.pack_start(self._number_entry, expand=False)
+ label_group.add_widget(self._number_entry.label)
+ combo_group.add_widget(self._number_entry.entry)
+ self._lower_box.pack_start(self._number_entry, fill=False)
self._number_entry.show()
self._apn_entry = ApnEntry(model)
self._apn_entry.connect('notify::is-valid',
self.__notify_is_valid_cb)
- self._group.add_widget(self._apn_entry.label)
- self.pack_start(self._apn_entry, expand=False)
+ label_group.add_widget(self._apn_entry.label)
+ combo_group.add_widget(self._apn_entry.entry)
+ self._lower_box.pack_start(self._apn_entry, fill=False)
self._apn_entry.show()
self._pin_entry = PinEntry(model)
self._pin_entry.connect('notify::is-valid',
self.__notify_is_valid_cb)
- self._group.add_widget(self._pin_entry.label)
- self.pack_start(self._pin_entry, expand=False)
+ label_group.add_widget(self._pin_entry.label)
+ self._lower_box.pack_start(self._pin_entry, fill=False)
self._pin_entry.show()
self._puk_entry = PukEntry(model)
self._puk_entry.connect('notify::is-valid',
self.__notify_is_valid_cb)
- self._group.add_widget(self._puk_entry.label)
- self.pack_start(self._puk_entry, expand=False)
+ label_group.add_widget(self._puk_entry.label)
+ combo_group.add_widget(self._puk_entry.entry)
+ self._lower_box.pack_start(self._puk_entry, fill=False)
self._puk_entry.show()
self.setup()
+ def __add_provider_combo(self, parent_box, text, label_group, store, cb):
+ box = gtk.HBox(spacing=style.DEFAULT_SPACING * 2)
+ label = gtk.Label(text)
+ label.set_alignment(1, 0.5)
+ label_group.add_widget(label)
+ box.pack_start(label, False)
+ label.show()
+
+ combo = gtk.ComboBox(store)
+ cell = gtk.CellRendererText()
+ cell.props.xalign = 0.5
+ combo.pack_start(cell)
+ combo.add_attribute(cell, 'text', 0)
+ combo.connect('changed', cb)
+
+ box.pack_start(combo, False)
+ combo.show()
+ parent_box.pack_start(box, False)
+ box.show()
+
+ return combo
+
+ def __add_provider_information(self, model, main_box, label_group,
+ combo_group):
+ upper_box = gtk.VBox(spacing=style.DEFAULT_SPACING)
+ upper_box.set_border_width(style.DEFAULT_SPACING)
+ main_box.pack_start(upper_box, expand=False)
+ upper_box.show()
+
+ country_store = model.CountryListStore()
+ self._country_combo = self.__add_provider_combo(upper_box, _('Country:'),
+ label_group, country_store, self.__country_selected_cb)
+ combo_group.add_widget(self._country_combo)
+
+ self._providers_combo = self.__add_provider_combo(upper_box,
+ _('Provider:'), label_group, None, self.__provider_selected_cb)
+ combo_group.add_widget(self._providers_combo)
+
+ self._plan_combo = self.__add_provider_combo(upper_box, _('Plan:'), label_group, None,
+ self.__plan_selected_cb)
+ combo_group.add_widget(self._plan_combo)
+
+ self._country_combo.set_active(country_store.guess_country_row())
+
+ separator = gtk.HSeparator()
+ main_box.pack_start(separator, False)
+ separator.show()
+
def setup(self):
self._username_entry.set_text_from_model()
self._password_entry.set_text_from_model()
@@ -232,14 +309,37 @@ class ModemConfiguration(SectionView):
def undo(self):
self._model.undo()
+ def __country_selected_cb(self, combo):
+ model = combo.get_model()
+ providers = model.get_row_providers(combo.get_active())
+ self._providers_combo.set_model(
+ self._model.ProviderListStore(providers))
+
+ def __provider_selected_cb(self, combo):
+ model = combo.get_model()
+ plans = model.get_row_plans(combo.get_active())
+ self._plan_combo.set_model(self._model.PlanListStore(plans))
+
+ def __plan_selected_cb(self, combo):
+ model = combo.get_model()
+ plan = model.get_row_plan(combo.get_active())
+ self._username_entry.set_value(plan['username'])
+ self._username_entry.set_text_from_model()
+ self._password_entry.set_value(plan['password'])
+ self._password_entry.set_text_from_model()
+ self._number_entry.set_value(plan['number'])
+ self._number_entry.set_text_from_model()
+ self._apn_entry.set_value(plan['apn'])
+ self._apn_entry.set_text_from_model()
+
def _validate(self):
if self._username_entry.is_valid and \
- self._password_entry.is_valid and \
+ self._password_entry.is_valid and \
self._number_entry.is_valid and \
- self._apn_entry.is_valid and \
- self._pin_entry.is_valid and \
- self._puk_entry.is_valid:
- self.props.is_valid = True
+ self._apn_entry.is_valid and \
+ self._pin_entry.is_valid and \
+ self._puk_entry.is_valid:
+ self.props.is_valid = True
else:
self.props.is_valid = False
@@ -247,4 +347,3 @@ class ModemConfiguration(SectionView):
if entry.is_valid:
self.needs_restart = True
self._validate()
-