Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding=utf-8 -*-
- # Semplice Network Manager GTK applet 1.0-alpha1
- # Copyright © 2011 Semplice Team
- import libsmc, ConfigParser, pygtk, gtk, subprocess, gobject, os, sys, dbus, gobject, threading
- from dbus.mainloop.glib import DBusGMainLoop
- import t9n.library
- pygtk.require('2.0')
- __author__ = "Semplice Team"
- __copyright__ = "Copyright © 2011 Semplice Team."
- __credits__ = ["Luca «tuxpenguin» B."]
- __license__ = "GNU GPL v3"
- __version__ = "0.1"
- __status__ = "Prototype"
- #_ = t9n.library.translation_init("semplicenm-applet")
- # Read the configuration file (at the moment it's only a list of connections).
- config = ConfigParser.ConfigParser()
- config.read('~/.config/smc/conn.conf')
- class MainGTK:
- def __init__(self): # That's the main part, which starts the main window and the tray icon.
- # Needed to check the key status in the background.
- self.libmodem = libsmc.MobileBroadband()
- # The UI
- self.builder = gtk.Builder()
- self.builder.add_from_file("smc.ui")
- # The main window
- self.window = self.builder.get_object("SmcMain")
- self.window.connect("delete-event", self.window.hide_on_delete)
- self.menubar_quit = self.builder.get_object("menubar_quit")
- self.menubar_about = self.builder.get_object("menubar_about")
- self.menubar_quit.connect("activate", self.quit)
- self.menubar_about.connect("activate", self.about_window)
- self.lb_currentnet = self.builder.get_object("currentnet_label")
- self.cb_connlist = self.builder.get_object("connlist_cbox")
- self.cb_connlist.set_sensitive(False)
- self.btn_connect = self.builder.get_object("connect_btn")
- self.btn_connect.connect("clicked", self.connect)
- self.btn_connect.set_sensitive(False)
- # The tray icon
- self.statusicon = gtk.StatusIcon()
- self.statusicon.set_from_icon_name("network-offline")
- self.statusicon.connect("activate", self.left_click_event)
- self.statusicon.connect("popup-menu", self.right_click_event)
- self.modem_check()
- # Connect!
- def connect(self, obj):
- print("Clicked!")
- def modem_check(self):
- # Check if and how many internet keys are present
- if self.libmodem.search_modems() == 0:
- # If more than one, let the user choose which key the program should use.
- if len(libsmc.modems) > 1:
- self.internetkey_chooser_dialog()
- self.libmodem.enable_modem(self.modem_n)
- # Else, enable the first key.
- else:
- self.modem_n = 0
- self.libmodem.enable_modem(self.modem_n)
- self.modemstatus = self.libmodem.gsm_inspect(self.modem_n)
- # Get the current network the key is registered to.
- if self.modemstatus['statusn'] == 5:
- self.lb_currentnet.set_label("%s %s (%s)" % (self.modemstatus['accesstech'], self.modemstatus['carrier'], self.modemstatus['status']))
- self.statusicon.set_tooltip("Registered on %s. Signal quality: %s" % (self.modemstatus['carrier'], self.modemstatus['quality'], self.modemstatus['status']))
- else:
- self.lb_currentnet.set_label("%s %s" % (self.modemstatus['accesstech'], self.modemstatus['carrier']))
- self.statusicon.set_tooltip("Registered on %s. Signal quality: %s" % (self.modemstatus['carrier'], self.modemstatus['quality']))
- # Else, warn the user that there isn't any key.
- else:
- self.modem_n = None
- self.err_nomodem_dialog()
- self.lb_currentnet.set_label("No modem")
- # Hide the main window and restore the window.
- def left_click_event(self, obj):
- if self.window.get_visible():
- self.window.hide()
- else:
- self.window.show()
- # The right click menu for the applet.
- def right_click_event(self, icon, button, time):
- self.applet_menu = gtk.Menu()
- self.applet_info_btn = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT)
- self.applet_info_btn.connect("activate", self.quit)
- self.applet_menu.append(self.applet_info_btn)
- self.applet_menu.show_all()
- self.applet_menu.popup(None, None, gtk.status_icon_position_menu, button, time, self.statusicon)
- # The 'no internet key' error dialog.
- def err_nomodem_dialog(self):
- self.about = self.builder.get_object("SmcNoKey")
- self.about.show()
- result = self.about.run()
- self.about.hide()
- # This is the dialog which appears when there are multiple internet keys plugged-in.
- def internetkey_chooser_dialog(self):
- self.multikey_dlg = self.builder.get_object("SmcMultiKey")
- self.multikey_dlg_vbox = self.builder.get_object("dialog-vbox2")
- self.cb_modemlist = gtk.combo_box_new_text()
- cm = 0
- for i in libsmc.modems:
- self.cb_modemlist.append_text("%s %s" % (self.libmodem.get_modem_info(cm)['vendor'], self.libmodem.get_modem_info(cm)['model']))
- cm = cm + 1
- self.multikey_dlg_vbox.pack_start(self.cb_modemlist, True)
- self.multikey_dlg_vbox.reorder_child(self.cb_modemlist, 2)
- self.cb_modemlist.show()
- self.multikey_dlg.show()
- result = self.multikey_dlg.run()
- self.multikey_dlg.hide()
- self.modem_n = self.cb_modemlist.get_active()
- # Just an about window
- def about_window(self, obj):
- self.about = self.builder.get_object("SmcAbout")
- self.about.show()
- result = self.about.run()
- self.about.hide()
- def quit(self, obj):
- sys.exit(0)
- class DbusLoop(threading.Thread):
- def run(self):
- DBusGMainLoop(set_as_default=True)
- loop = gobject.MainLoop()
- bus = dbus.SystemBus()
- manager_proxy = bus.get_object('org.freedesktop.ModemManager', '/org/freedesktop/ModemManager')
- manager_iface = dbus.Interface(manager_proxy, dbus_interface='org.freedesktop.ModemManager')
- manager_iface.connect_to_signal('DeviceAdded',MainGTK().modem_check)
- manager_iface.connect_to_signal('DeviceRemoved',MainGTK().modem_check)
- loop.run()
- main = MainGTK()
- dbus_loop = DbusLoop()
- dbus_loop.start()
- main.window.show()
- gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement