+import gtk, hildon, gobject
+from gnome import gconf
+import webbrowser
+import osso
+
+def _(str):
+ return str
+
+_gc = gconf.client_get_default()
+prefix = '/apps/maemo/wbl/launch'
+GCONF_KEY_URL = '/apps/maemo/wbl/url_to_open'
+GCONF_KEY_POPUP = '/apps/maemo/wbl/popup'
+
+program = hildon.Program.get_instance()
+
+# Create the main window
+win = hildon.StackableWindow()
+
+def launch_browser(url):
+ osso_context = osso.Context("org.maemo.touchsearch", "1.1", False)
+ osso_rpc = osso.Rpc(osso_context)
+ osso_rpc.rpc_run_with_defaults("osso_browser", "open_new_window", (url,))
+
+def show_about(x):
+ dialog = gtk.Dialog('About', win)
+
+ text = "I got tired of not being able to connect easily to networks guarded by a login page, " + \
+ "so I created this app to scratch that itch. It's free to use, inspect, adapt and share, " + \
+ "licencsed under a BSD type license.\nI hope you enjoy it!"
+ about_label = gtk.Label(text)
+ about_label.set_line_wrap(True)
+ dialog.vbox.add(about_label)
+
+ dialog.add_button(_('File a bug'), 1)
+ dialog.add_button(_('Donate'), 2)
+ dialog.add_button(_('Close'), 3)
+
+ dialog.show_all()
+ result = dialog.run()
+ dialog.hide()
+
+ if result == 1:
+ launch_browser('http://wifi-assistant.garage.maemo.org/bugs/')
+ if result == 2:
+ launch_browser('http://wifi-assistant.garage.maemo.org/donate/')
+
+
+def show_settings(x):
+ checkbox = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
+ checkbox.set_label('Show popup when connected to a new SSID')
+ checkbox.set_active(_gc.get_bool(GCONF_KEY_POPUP))
+
+ url_label = gtk.Label('URL to open when launching browser:') # IMPROVEMENT: caption?
+ url_label.set_alignment(0, 0.5)
+ url_label.set_padding(5, 5)
+ url_field = hildon.Entry(gtk.HILDON_SIZE_AUTO)
+ url_field.set_text(_gc.get_string(GCONF_KEY_URL))
+
+ dialog = gtk.Dialog('Settings', win)
+ dialog.vbox.set_homogeneous(False)
+
+ dialog.vbox.add(checkbox)
+ dialog.vbox.add(url_label)
+ dialog.vbox.add(url_field)
+
+ dialog.add_button(_('Cancel'), gtk.RESPONSE_CANCEL)
+ dialog.add_button(_('Save'), gtk.RESPONSE_YES)
+
+ dialog.show_all()
+ result = dialog.run()
+ dialog.hide()
+
+ if (result == gtk.RESPONSE_YES):
+ _gc.set_string(GCONF_KEY_URL, url_field.get_text())
+ _gc.set_bool(GCONF_KEY_POPUP, checkbox.get_active())
+
+
+def create_menu():
+ menu = hildon.AppMenu()
+
+ settings = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+ command_id = "Settings"
+ settings.set_label(command_id)
+ settings.connect("clicked", show_settings)
+ menu.append(settings)
+
+ about = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
+ command_id = "About"
+ about.set_label(command_id)
+ about.connect("clicked", show_about)
+ menu.append(about)
+
+ menu.show_all()
+ return menu
+
+def create_ssid_model():
+ store = gtk.ListStore(str, gobject.TYPE_BOOLEAN)
+
+ entries = _gc.all_entries(prefix)
+ for entry in entries:
+ ssidName = entry.get_key()[len(prefix) + 1:]
+ launchBrowser = entry.get_value().get_bool()
+ store.append([ssidName, launchBrowser])
+ print ssidName
+ print launchBrowser
+
+ return store
+
+def edit_ssid(ssid, parent, model, iter):
+ dialog = gtk.Dialog(ssid, parent)
+ dialog.vbox.set_homogeneous(False)
+
+ dialog.add_button(_('No'), gtk.RESPONSE_NO)
+ dialog.add_button(_('Yes'), gtk.RESPONSE_YES)
+
+ label = gtk.Label(_('After being connected to ' + ssid + ' do you wish to launch a browser?'))
+ label.set_line_wrap(True)
+ label.set_justify(gtk.JUSTIFY_LEFT)
+ label.set_alignment(0, 0.5)
+ dialog.vbox.add(label)
+
+ dialog.show_all()
+ result = dialog.run()
+ dialog.hide()
+
+ launchBrowser = (result == gtk.RESPONSE_YES)
+ _gc.set_bool('/apps/maemo/wbl/launch/' + ssid, launchBrowser)
+ model.set(iter, 1, launchBrowser)
+
+
+def create_ssid_view():
+ model = create_ssid_model()
+ view = gtk.TreeView(model)
+ view.set_border_width(5)
+
+ tvcolumn = gtk.TreeViewColumn('SSID', gtk.CellRendererText(), text = 0)
+ tvcolumn.set_expand(True)
+ view.append_column(tvcolumn)
+
+ def boolean_func(column, cell, model, iter):
+ if model.get_value(iter, 1):
+ stock_id = 'gtk-yes'
+ else:
+ stock_id = 'gtk-no'
+ cell.set_property('stock-id', stock_id)
+
+ view.insert_column_with_data_func(1, 'Launch', gtk.CellRendererPixbuf(), boolean_func)
+
+ def row_activated(treeview, path, view_column):
+ model = treeview.get_model()
+ iter = model.get_iter(path)
+ ssid = model.get_value(iter, 0)
+ print ssid
+ edit_ssid(ssid, win, model, iter)
+
+ view.connect('row-activated', row_activated)
+ view.set_search_column(0)
+ tvcolumn.set_sort_column_id(0)
+
+ return view
+
+def create_table():
+ table = gtk.Table(rows=10, columns=2)
+ table.set_col_spacings(5)
+ table.set_row_spacings(5)
+ table.set_border_width(5)
+
+ row = 0
+ entries = xrange(5)
+ for entry in entries:
+ def l(i):
+ if (i == 0):
+ return ""
+ return "x" + l(i-1)
+
+ ssid = "SSID " + l(row)
+ ssid_label = gtk.Label(ssid)
+ ssid_label.set_alignment(0, 0.5)
+ table.attach(ssid_label, 0, 1, row, row+1, xoptions=gtk.FILL)
+ table.attach(gtk.Label("On"), 1, 2, row, row+1, xoptions=gtk.SHRINK)
+ row = row + 1
+
+ return table
+
+def main():
+ win.set_title("Browser Launcher Configuration")
+
+# pannable_area = hildon.PannableArea()
+
+ ssid_view = create_ssid_view()
+
+# pannable_area.add_with_viewport(ssid_view)
+
+# win.add(pannable_area)
+ win.add(ssid_view)
+
+ win.set_app_menu(create_menu())
+
+ win.connect("destroy", gtk.main_quit, None)
+
+ win.show_all()
+ gtk.main()
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file