[Sugar-devel] [PATCH 2/3] Show Country/Provider/Plan comboboxes if DB exists.
Andrés Ambrois
andresambrois at gmail.com
Mon Jun 14 00:14:07 EDT 2010
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.
Signed-off-by: Andrés Ambrois <andresambrois at gmail.com>
diff --git a/extensions/cpsection/modemconfiguration/view.py b/extensions/cpsection/modemconfiguration/view.py
index b236f3f..e2fdd53 100644
--- a/extensions/cpsection/modemconfiguration/view.py
+++ b/extensions/cpsection/modemconfiguration/view.py
@@ -160,61 +160,142 @@ 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)
+
+ 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._upper_box = gtk.VBox(spacing=style.DEFAULT_SPACING)
+ self._upper_box.set_border_width(style.DEFAULT_SPACING)
+ main_box.pack_start(self._upper_box, expand=False)
+ self._upper_box.show()
+
+ combo_group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
+
+ box = gtk.HBox(spacing=style.DEFAULT_SPACING)
+ label = gtk.Label(_('Country:'))
+ label_group.add_widget(label)
+ box.pack_start(label, False)
+ label.show()
+ country_store = model.CountryListStore()
+ country_combo = gtk.ComboBox(country_store)
+ combo_group.add_widget(country_combo)
+ cell = gtk.CellRendererText()
+ cell.props.xalign = 0.5
+ country_combo.pack_start(cell)
+ country_combo.add_attribute(cell, 'text', 0)
+ country_combo.connect('changed', self.__country_selected_cb)
+ box.pack_start(country_combo, False)
+ country_combo.show()
+ self._upper_box.pack_start(box, False)
+ box.show()
+
+ box = gtk.HBox(spacing=style.DEFAULT_SPACING)
+ label = gtk.Label(_('Provider:'))
+ label_group.add_widget(label)
+ box.pack_start(label, False)
+ label.show()
+ self._providers_combo = gtk.ComboBox()
+ combo_group.add_widget(self._providers_combo)
+ cell = gtk.CellRendererText()
+ cell.props.xalign = 0.5
+ self._providers_combo.pack_start(cell)
+ self._providers_combo.add_attribute(cell, 'text', 0)
+ self._providers_combo.connect('changed',
+ self.__provider_selected_cb)
+ box.pack_start(self._providers_combo, False)
+ self._providers_combo.show()
+ self._upper_box.pack_start(box, False)
+ box.show()
+
+ box = gtk.HBox(spacing=style.DEFAULT_SPACING)
+ label = gtk.Label(_('Plan:'))
+ label_group.add_widget(label)
+ box.pack_start(label, False)
+ label.show()
+ self._plan_combo = gtk.ComboBox()
+ combo_group.add_widget(self._plan_combo)
+ cell = gtk.CellRendererText()
+ cell.props.xalign = 0.5
+ self._plan_combo.pack_start(cell)
+ self._plan_combo.add_attribute(cell, 'text', 0)
+ self._plan_combo.connect('changed', self.__plan_selected_cb)
+ box.pack_start(self._plan_combo, False)
+ self._plan_combo.show()
+ self._upper_box.pack_start(box, False)
+ box.show()
+
+ country_combo.set_active(country_store.guess_country_row())
+
+ separator = gtk.HSeparator()
+ main_box.pack_start(separator, False)
+ separator.show()
+
+ 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)
+ 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)
+ 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)
+ 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)
+ 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)
+ self._lower_box.pack_start(self._puk_entry, fill=False)
self._puk_entry.show()
self.setup()
@@ -232,6 +313,29 @@ 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 \
--
1.6.3.3
More information about the Sugar-devel
mailing list