Removing GUI related files.
@@ -1211,7 +1211,6 @@ def main():
|
|||||||
# This is a wrapper around a function that calls another a function that
|
# This is a wrapper around a function that calls another a function that
|
||||||
# is a wrapper around a infinite loop. Fun.
|
# is a wrapper around a infinite loop. Fun.
|
||||||
urwid.set_encoding('utf8')
|
urwid.set_encoding('utf8')
|
||||||
|
|
||||||
ui.run_wrapper(run)
|
ui.run_wrapper(run)
|
||||||
|
|
||||||
|
|
||||||
@@ -1276,21 +1275,20 @@ setup_dbus()
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#try:
|
try:
|
||||||
# parser = OptionParser(version="wicd-curses-%s (using wicd %s)" %
|
parser = OptionParser(version="wicd-curses-%s (using wicd %s)" %
|
||||||
# (CURSES_REV, daemon.Hello()),
|
(CURSES_REV, daemon.Hello()),
|
||||||
# prog="wicd-curses")
|
prog="wicd-curses")
|
||||||
#except Exception as e:
|
except Exception as e:
|
||||||
# if "DBus.Error.AccessDenied" in e.get_dbus_name():
|
if "DBus.Error.AccessDenied" in e.get_dbus_name():
|
||||||
# print(_('ERROR: wicd-curses was denied access to the wicd daemon: '
|
print(_('ERROR: wicd-curses was denied access to the wicd daemon: '
|
||||||
# 'please check that your user is in the "$A" group.')
|
'please check that your user is in the "$A" group.')
|
||||||
# .replace('$A', '\033[1;34m' + wpath.wicd_group + '\033[0m'))
|
.replace('$A', '\033[1;34m' + wpath.wicd_group + '\033[0m'))
|
||||||
# sys.exit(1)
|
sys.exit(1)
|
||||||
# else:
|
else:
|
||||||
# raise
|
raise
|
||||||
# parser.add_option("-d", "--debug", action="store_true", dest='debug',
|
# parser.add_option("-d", "--debug", action="store_true", dest='debug',
|
||||||
# help="enable logging of wicd-curses (currently does nothing)")
|
# help="enable logging of wicd-curses (currently does nothing)")
|
||||||
|
|
||||||
parser = OptionParser(prog="wicd-curses")
|
|
||||||
(options, args) = parser.parse_args()
|
(options, args) = parser.parse_args()
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
link /opt/wicd/images/wicd.png
|
|
||||||
1750
data/wicd.ui
@@ -1,29 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2012, David Paleino <d.paleino@gmail.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License Version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
const StatusIconDispatcher = imports.ui.statusIconDispatcher;
|
|
||||||
|
|
||||||
function init(metadata) {
|
|
||||||
}
|
|
||||||
|
|
||||||
function enable() {
|
|
||||||
StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['wicd-client.py'] = 'wicd-gtk';
|
|
||||||
}
|
|
||||||
|
|
||||||
function disable() {
|
|
||||||
StatusIconDispatcher.STANDARD_TRAY_ICON_IMPLEMENTATIONS['wicd-client.py'] = '';
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"shell-version": ["3.4.2"], "uuid": "wicd@code.hanskalabs.net", "name": "WICD Network Manager", "description": "Show status of WICD"}
|
|
||||||
@@ -1,175 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""configscript -- Configure the scripts for a particular network.
|
|
||||||
|
|
||||||
Script for configuring the scripts for a network passed in as a
|
|
||||||
command line argument. This needs to run a separate process because
|
|
||||||
editing scripts requires root access, and the GUI/Tray are typically
|
|
||||||
run as the current user.
|
|
||||||
|
|
||||||
"""
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007-2009 Adam Blackburn
|
|
||||||
# Copyright (C) 2007-2009 Dan O'Reilly
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License Version 2 as
|
|
||||||
# published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import gtk
|
|
||||||
|
|
||||||
from wicd import wpath
|
|
||||||
from wicd.translations import _
|
|
||||||
from wicd import dbusmanager
|
|
||||||
from wicd.configmanager import ConfigManager
|
|
||||||
|
|
||||||
dbus = dbusmanager.DBusManager()
|
|
||||||
dbus.connect_to_dbus()
|
|
||||||
|
|
||||||
wireless = dbus.get_interface("wireless")
|
|
||||||
wired = dbus.get_interface("wired")
|
|
||||||
|
|
||||||
wireless_conf = wpath.etc + 'wireless-settings.conf'
|
|
||||||
wired_conf = wpath.etc + 'wired-settings.conf'
|
|
||||||
|
|
||||||
|
|
||||||
def none_to_blank(text):
|
|
||||||
"""Converts special string cases to a blank string.
|
|
||||||
|
|
||||||
If text is None, 'None', or '' then this method will
|
|
||||||
return '', otherwise it will just return str(text).
|
|
||||||
|
|
||||||
"""
|
|
||||||
if text in (None, "None", ""):
|
|
||||||
return ""
|
|
||||||
else:
|
|
||||||
return str(text)
|
|
||||||
|
|
||||||
|
|
||||||
def blank_to_none(text):
|
|
||||||
"""Convert an empty or null string to 'None'."""
|
|
||||||
if text in ("", None):
|
|
||||||
return "None"
|
|
||||||
else:
|
|
||||||
return str(text)
|
|
||||||
|
|
||||||
|
|
||||||
def get_script_info(network, network_type):
|
|
||||||
"""
|
|
||||||
Read script info from disk and load it into the configuration dialog
|
|
||||||
"""
|
|
||||||
info = {}
|
|
||||||
if network_type == "wired":
|
|
||||||
con = ConfigManager(wired_conf)
|
|
||||||
section = network
|
|
||||||
else:
|
|
||||||
bssid = wireless.GetWirelessProperty(int(network), "bssid")
|
|
||||||
con = ConfigManager(wireless_conf)
|
|
||||||
section = bssid
|
|
||||||
|
|
||||||
if con.has_section(section):
|
|
||||||
info["pre_entry"] = con.get(section, "beforescript", None)
|
|
||||||
info["post_entry"] = con.get(section, "afterscript", None)
|
|
||||||
info["pre_disconnect_entry"] = con.get(section,
|
|
||||||
"predisconnectscript", None)
|
|
||||||
info["post_disconnect_entry"] = con.get(section,
|
|
||||||
"postdisconnectscript", None)
|
|
||||||
return info
|
|
||||||
|
|
||||||
|
|
||||||
def write_scripts(network, network_type, script_info):
|
|
||||||
"""Writes script info to disk and loads it into the daemon."""
|
|
||||||
if network_type == "wired":
|
|
||||||
con = ConfigManager(wired_conf)
|
|
||||||
con.set(network, "beforescript", script_info["pre_entry"])
|
|
||||||
con.set(network, "afterscript", script_info["post_entry"])
|
|
||||||
con.set(network, "predisconnectscript",
|
|
||||||
script_info["pre_disconnect_entry"])
|
|
||||||
con.set(network, "postdisconnectscript",
|
|
||||||
script_info["post_disconnect_entry"])
|
|
||||||
con.write()
|
|
||||||
wired.ReloadConfig()
|
|
||||||
wired.ReadWiredNetworkProfile(network)
|
|
||||||
wired.SaveWiredNetworkProfile(network)
|
|
||||||
else:
|
|
||||||
bssid = wireless.GetWirelessProperty(int(network), "bssid")
|
|
||||||
con = ConfigManager(wireless_conf)
|
|
||||||
con.set(bssid, "beforescript", script_info["pre_entry"])
|
|
||||||
con.set(bssid, "afterscript", script_info["post_entry"])
|
|
||||||
con.set(bssid, "predisconnectscript",
|
|
||||||
script_info["pre_disconnect_entry"])
|
|
||||||
con.set(bssid, "postdisconnectscript",
|
|
||||||
script_info["post_disconnect_entry"])
|
|
||||||
con.write()
|
|
||||||
wireless.ReloadConfig()
|
|
||||||
wireless.ReadWirelessNetworkProfile(int(network))
|
|
||||||
wireless.SaveWirelessNetworkProfile(int(network))
|
|
||||||
|
|
||||||
|
|
||||||
def main(argv):
|
|
||||||
"""Runs the script configuration dialog."""
|
|
||||||
if len(argv) < 2:
|
|
||||||
print('Network id to configure is missing, aborting.')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
network = argv[1]
|
|
||||||
network_type = argv[2]
|
|
||||||
|
|
||||||
script_info = get_script_info(network, network_type)
|
|
||||||
|
|
||||||
gladefile = os.path.join(wpath.gtk, "wicd.ui")
|
|
||||||
wTree = gtk.Builder()
|
|
||||||
wTree.set_translation_domain('wicd')
|
|
||||||
wTree.add_from_file(gladefile)
|
|
||||||
dialog = wTree.get_object("configure_script_dialog")
|
|
||||||
wTree.get_object("pre_label").set_label(_('Pre-connection Script') + ":")
|
|
||||||
wTree.get_object("post_label").set_label(_('Post-connection Script') + ":")
|
|
||||||
wTree.get_object("pre_disconnect_label").\
|
|
||||||
set_label(_('Pre-disconnection Script') + ":")
|
|
||||||
wTree.get_object("post_disconnect_label").\
|
|
||||||
set_label(_('Post-disconnection Script') + ":")
|
|
||||||
wTree.get_object("window1").hide()
|
|
||||||
|
|
||||||
pre_entry = wTree.get_object("pre_entry")
|
|
||||||
post_entry = wTree.get_object("post_entry")
|
|
||||||
pre_disconnect_entry = wTree.get_object("pre_disconnect_entry")
|
|
||||||
post_disconnect_entry = wTree.get_object("post_disconnect_entry")
|
|
||||||
|
|
||||||
pre_entry.set_text(none_to_blank(script_info.get("pre_entry")))
|
|
||||||
post_entry.set_text(none_to_blank(script_info.get("post_entry")))
|
|
||||||
pre_disconnect_entry.set_text(
|
|
||||||
none_to_blank(script_info.get("pre_disconnect_entry"))
|
|
||||||
)
|
|
||||||
post_disconnect_entry.set_text(
|
|
||||||
none_to_blank(script_info.get("post_disconnect_entry"))
|
|
||||||
)
|
|
||||||
|
|
||||||
dialog.show_all()
|
|
||||||
|
|
||||||
result = dialog.run()
|
|
||||||
if result == 1:
|
|
||||||
script_info["pre_entry"] = blank_to_none(pre_entry.get_text())
|
|
||||||
script_info["post_entry"] = blank_to_none(post_entry.get_text())
|
|
||||||
script_info["pre_disconnect_entry"] = \
|
|
||||||
blank_to_none(pre_disconnect_entry.get_text())
|
|
||||||
script_info["post_disconnect_entry"] = \
|
|
||||||
blank_to_none(post_disconnect_entry.get_text())
|
|
||||||
write_scripts(network, network_type, script_info)
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
if os.getuid() != 0:
|
|
||||||
print("Root privileges are required to configure scripts. Exiting.")
|
|
||||||
sys.exit(0)
|
|
||||||
main(sys.argv)
|
|
||||||
962
gtk/gui.py
@@ -1,962 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
"""gui -- The main wicd GUI module.
|
|
||||||
|
|
||||||
Module containing the code for the main wicd GUI.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007-2009 Adam Blackburn
|
|
||||||
# Copyright (C) 2007-2009 Dan O'Reilly
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License Version 2 as
|
|
||||||
# published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import time
|
|
||||||
|
|
||||||
from gi.repository import GLib as gobject
|
|
||||||
import gtk
|
|
||||||
from itertools import chain
|
|
||||||
from dbus import DBusException
|
|
||||||
|
|
||||||
from wicd import misc
|
|
||||||
from wicd import wpath
|
|
||||||
from wicd import dbusmanager
|
|
||||||
from wicd.misc import noneToString
|
|
||||||
from wicd.translations import _, language
|
|
||||||
import prefs
|
|
||||||
from prefs import PreferencesDialog
|
|
||||||
import netentry
|
|
||||||
from netentry import WiredNetworkEntry, WirelessNetworkEntry
|
|
||||||
from guiutil import error, LabelEntry
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
wpath.chdir(__file__)
|
|
||||||
|
|
||||||
proxy_obj = daemon = wireless = wired = bus = None
|
|
||||||
DBUS_AVAIL = False
|
|
||||||
|
|
||||||
|
|
||||||
def setup_dbus(force=True):
|
|
||||||
"""Initialize DBus."""
|
|
||||||
global bus, daemon, wireless, wired, DBUS_AVAIL
|
|
||||||
try:
|
|
||||||
dbusmanager.connect_to_dbus()
|
|
||||||
except DBusException:
|
|
||||||
if force:
|
|
||||||
print("Can't connect to the daemon, ' + \
|
|
||||||
'trying to start it automatically...")
|
|
||||||
if not misc.PromptToStartDaemon():
|
|
||||||
print("Failed to find a graphical sudo program, ' + \
|
|
||||||
'cannot continue.")
|
|
||||||
return False
|
|
||||||
try:
|
|
||||||
dbusmanager.connect_to_dbus()
|
|
||||||
except DBusException:
|
|
||||||
error(None, _("Could not connect to wicd's D-Bus interface. "
|
|
||||||
"Check the wicd log for error messages."))
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
prefs.setup_dbus()
|
|
||||||
netentry.setup_dbus()
|
|
||||||
bus = dbusmanager.get_bus()
|
|
||||||
dbus_ifaces = dbusmanager.get_dbus_ifaces()
|
|
||||||
daemon = dbus_ifaces['daemon']
|
|
||||||
wireless = dbus_ifaces['wireless']
|
|
||||||
wired = dbus_ifaces['wired']
|
|
||||||
DBUS_AVAIL = True
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def handle_no_dbus(from_tray=False):
|
|
||||||
"""Handle the case where no DBus is available."""
|
|
||||||
global DBUS_AVAIL
|
|
||||||
DBUS_AVAIL = False
|
|
||||||
if from_tray:
|
|
||||||
return False
|
|
||||||
print("Wicd daemon is shutting down!")
|
|
||||||
error(None, _('The wicd daemon has shut down. The UI will not function '
|
|
||||||
'properly until it is restarted.'), block=False)
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class WiredProfileChooser:
|
|
||||||
"""Class for displaying the wired profile chooser."""
|
|
||||||
def __init__(self):
|
|
||||||
"""Initializes and runs the wired profile chooser."""
|
|
||||||
# Import and init WiredNetworkEntry to steal some of the
|
|
||||||
# functions and widgets it uses.
|
|
||||||
wired_net_entry = WiredNetworkEntry()
|
|
||||||
|
|
||||||
dialog = gtk.Dialog(
|
|
||||||
title=_('Wired connection detected'),
|
|
||||||
flags=gtk.DIALOG_MODAL,
|
|
||||||
buttons=(gtk.STOCK_CONNECT, 1, gtk.STOCK_CANCEL, 2)
|
|
||||||
)
|
|
||||||
dialog.set_has_separator(False)
|
|
||||||
dialog.set_size_request(400, 150)
|
|
||||||
instruct_label = gtk.Label(
|
|
||||||
_('Select or create a wired profile to connect with') + ':\n'
|
|
||||||
)
|
|
||||||
stoppopcheckbox = gtk.CheckButton(
|
|
||||||
_('Stop Showing Autoconnect pop-up temporarily')
|
|
||||||
)
|
|
||||||
|
|
||||||
wired_net_entry.is_full_gui = False
|
|
||||||
instruct_label.set_alignment(0, 0)
|
|
||||||
stoppopcheckbox.set_active(False)
|
|
||||||
|
|
||||||
# Remove widgets that were added to the normal WiredNetworkEntry
|
|
||||||
# so that they can be added to the pop-up wizard.
|
|
||||||
wired_net_entry.vbox_top.remove(wired_net_entry.hbox_temp)
|
|
||||||
wired_net_entry.vbox_top.remove(wired_net_entry.profile_help)
|
|
||||||
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(instruct_label, fill=False, expand=False)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(wired_net_entry.profile_help, False, False)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(wired_net_entry.hbox_temp, False, False)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(stoppopcheckbox, False, False)
|
|
||||||
dialog.show_all()
|
|
||||||
|
|
||||||
wired_profiles = wired_net_entry.combo_profile_names
|
|
||||||
wired_net_entry.profile_help.hide()
|
|
||||||
if wired_net_entry.profile_list is not None:
|
|
||||||
wired_profiles.set_active(0)
|
|
||||||
print("wired profiles found")
|
|
||||||
else:
|
|
||||||
print("no wired profiles found")
|
|
||||||
wired_net_entry.profile_help.show()
|
|
||||||
|
|
||||||
response = dialog.run()
|
|
||||||
if response == 1:
|
|
||||||
print(('reading profile ', wired_profiles.get_active_text()))
|
|
||||||
wired.ReadWiredNetworkProfile(wired_profiles.get_active_text())
|
|
||||||
wired.ConnectWired()
|
|
||||||
else:
|
|
||||||
if stoppopcheckbox.get_active():
|
|
||||||
daemon.SetForcedDisconnect(True)
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
|
|
||||||
def get_wireless_prop(net_id, prop):
|
|
||||||
"""Get wireless property."""
|
|
||||||
return wireless.GetWirelessProperty(net_id, prop)
|
|
||||||
|
|
||||||
|
|
||||||
class appGui(object):
|
|
||||||
"""The main wicd GUI class."""
|
|
||||||
def __init__(self, standalone=False, tray=None):
|
|
||||||
"""Initializes everything needed for the GUI."""
|
|
||||||
setup_dbus()
|
|
||||||
|
|
||||||
if not daemon:
|
|
||||||
errmsg = _("Error connecting to wicd service via D-Bus. "
|
|
||||||
"Please ensure the wicd service is running.")
|
|
||||||
d = gtk.MessageDialog(parent=None,
|
|
||||||
flags=gtk.DIALOG_MODAL,
|
|
||||||
type=gtk.MESSAGE_ERROR,
|
|
||||||
buttons=gtk.BUTTONS_OK,
|
|
||||||
message_format=errmsg)
|
|
||||||
d.run()
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
self.tray = tray
|
|
||||||
|
|
||||||
gladefile = os.path.join(wpath.gtk, "wicd.ui")
|
|
||||||
self.wTree = gtk.Builder()
|
|
||||||
self.wTree.set_translation_domain('wicd')
|
|
||||||
self.wTree.add_from_file(gladefile)
|
|
||||||
self.window = self.wTree.get_object("window1")
|
|
||||||
width = int(gtk.gdk.screen_width() / 2)
|
|
||||||
if width > 530:
|
|
||||||
width = 530
|
|
||||||
self.window.resize(width, int(gtk.gdk.screen_height() / 1.7))
|
|
||||||
|
|
||||||
dic = {
|
|
||||||
"refresh_clicked": self.refresh_clicked,
|
|
||||||
"quit_clicked": self.exit,
|
|
||||||
"rfkill_clicked": self.switch_rfkill,
|
|
||||||
"disconnect_clicked": self.disconnect_all,
|
|
||||||
"main_exit": self.exit,
|
|
||||||
"cancel_clicked": self.cancel_connect,
|
|
||||||
"hidden_clicked": self.connect_hidden,
|
|
||||||
"preferences_clicked": self.settings_dialog,
|
|
||||||
"about_clicked": self.about_dialog,
|
|
||||||
"create_adhoc_clicked": self.create_adhoc_network,
|
|
||||||
"forget_network_clicked": self.forget_network,
|
|
||||||
}
|
|
||||||
self.wTree.connect_signals(dic)
|
|
||||||
|
|
||||||
# Set some strings in the GUI - they may be translated
|
|
||||||
label_instruct = self.wTree.get_object("label_instructions")
|
|
||||||
label_instruct.set_label(_('Choose from the networks below:'))
|
|
||||||
|
|
||||||
probar = self.wTree.get_object("progressbar")
|
|
||||||
probar.set_text(_('Connecting'))
|
|
||||||
|
|
||||||
self.disconnect_all_button = self.wTree.get_object('disconnect_button')
|
|
||||||
self.rfkill_button = self.wTree.get_object("rfkill_button")
|
|
||||||
self.all_network_list = self.wTree.get_object("network_list_vbox")
|
|
||||||
self.all_network_list.show_all()
|
|
||||||
self.wired_network_box = gtk.VBox(False, 0)
|
|
||||||
self.wired_network_box.show_all()
|
|
||||||
self.network_list = gtk.VBox(False, 0)
|
|
||||||
self.all_network_list.pack_start(self.wired_network_box, False, False)
|
|
||||||
self.all_network_list.pack_start(self.network_list, True, True)
|
|
||||||
self.network_list.show_all()
|
|
||||||
self.status_area = self.wTree.get_object("connecting_hbox")
|
|
||||||
self.status_bar = self.wTree.get_object("statusbar")
|
|
||||||
menu = self.wTree.get_object("menu1")
|
|
||||||
|
|
||||||
self.status_area.hide_all()
|
|
||||||
|
|
||||||
self.window.set_icon_name('wicd-gtk')
|
|
||||||
self.statusID = None
|
|
||||||
self.first_dialog_load = True
|
|
||||||
self.is_visible = True
|
|
||||||
self.pulse_active = False
|
|
||||||
self.pref = None
|
|
||||||
self.standalone = standalone
|
|
||||||
self.wpadrivercombo = None
|
|
||||||
self.connecting = False
|
|
||||||
self.refreshing = False
|
|
||||||
self.prev_state = None
|
|
||||||
self.update_cb = None
|
|
||||||
self._wired_showing = False
|
|
||||||
self.network_list.set_sensitive(False)
|
|
||||||
label = gtk.Label("%s..." % _('Scanning'))
|
|
||||||
self.network_list.pack_start(label)
|
|
||||||
label.show()
|
|
||||||
self.wait_for_events(0.2)
|
|
||||||
self.window.connect('delete_event', self.exit)
|
|
||||||
self.window.connect('key-release-event', self.key_event)
|
|
||||||
daemon.SetGUIOpen(True)
|
|
||||||
bus.add_signal_receiver(self.dbus_scan_finished, 'SendEndScanSignal',
|
|
||||||
'org.wicd.daemon.wireless')
|
|
||||||
bus.add_signal_receiver(self.dbus_scan_started, 'SendStartScanSignal',
|
|
||||||
'org.wicd.daemon.wireless')
|
|
||||||
bus.add_signal_receiver(self.update_connect_buttons, 'StatusChanged',
|
|
||||||
'org.wicd.daemon')
|
|
||||||
bus.add_signal_receiver(self.handle_connection_results,
|
|
||||||
'ConnectResultsSent', 'org.wicd.daemon')
|
|
||||||
bus.add_signal_receiver(lambda: setup_dbus(force=False),
|
|
||||||
"DaemonStarting", "org.wicd.daemon")
|
|
||||||
bus.add_signal_receiver(self._do_statusbar_update, 'StatusChanged',
|
|
||||||
'org.wicd.daemon')
|
|
||||||
if standalone:
|
|
||||||
bus.add_signal_receiver(handle_no_dbus, "DaemonClosing",
|
|
||||||
"org.wicd.daemon")
|
|
||||||
|
|
||||||
self._do_statusbar_update(*daemon.GetConnectionStatus())
|
|
||||||
self.wait_for_events(0.1)
|
|
||||||
self.update_cb = misc.timeout_add(2, self.update_statusbar)
|
|
||||||
self.refresh_clicked()
|
|
||||||
|
|
||||||
def handle_connection_results(self, results):
|
|
||||||
"""Handle connection results."""
|
|
||||||
if results not in ['success', 'aborted'] and self.is_visible:
|
|
||||||
error(self.window, language[results], block=False)
|
|
||||||
|
|
||||||
def create_adhoc_network(self, widget=None):
|
|
||||||
"""Shows a dialog that creates a new adhoc network."""
|
|
||||||
print("Starting the Ad-Hoc Network Creation Process...")
|
|
||||||
dialog = gtk.Dialog(
|
|
||||||
title=_('Create an Ad-Hoc Network'),
|
|
||||||
flags=gtk.DIALOG_MODAL,
|
|
||||||
buttons=(gtk.STOCK_CANCEL, 2, gtk.STOCK_OK, 1)
|
|
||||||
)
|
|
||||||
dialog.set_has_separator(False)
|
|
||||||
dialog.set_size_request(400, -1)
|
|
||||||
self.chkbox_use_encryption = \
|
|
||||||
gtk.CheckButton(_('Use Encryption (WEP only)'))
|
|
||||||
self.chkbox_use_encryption.set_active(False)
|
|
||||||
ip_entry = LabelEntry(_('IP') + ':')
|
|
||||||
essid_entry = LabelEntry(_('ESSID') + ':')
|
|
||||||
channel_entry = LabelEntry(_('Channel') + ':')
|
|
||||||
self.key_entry = LabelEntry(_('Key') + ':')
|
|
||||||
self.key_entry.set_auto_hidden(True)
|
|
||||||
self.key_entry.set_sensitive(False)
|
|
||||||
|
|
||||||
chkbox_use_ics = \
|
|
||||||
gtk.CheckButton(_('Activate Internet Connection Sharing'))
|
|
||||||
|
|
||||||
self.chkbox_use_encryption.connect("toggled",
|
|
||||||
self.toggle_encrypt_check)
|
|
||||||
channel_entry.entry.set_text('3')
|
|
||||||
essid_entry.entry.set_text('My_Adhoc_Network')
|
|
||||||
ip_entry.entry.set_text('169.254.12.10') # Just a random IP
|
|
||||||
|
|
||||||
vbox_ah = gtk.VBox(False, 0)
|
|
||||||
self.wired_network_box = gtk.VBox(False, 0)
|
|
||||||
vbox_ah.pack_start(self.chkbox_use_encryption, False, False)
|
|
||||||
vbox_ah.pack_start(self.key_entry, False, False)
|
|
||||||
vbox_ah.show()
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(essid_entry)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(ip_entry)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(channel_entry)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(chkbox_use_ics)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(vbox_ah)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.set_spacing(5)
|
|
||||||
dialog.show_all()
|
|
||||||
response = dialog.run()
|
|
||||||
if response == 1:
|
|
||||||
wireless.CreateAdHocNetwork(
|
|
||||||
essid_entry.entry.get_text(),
|
|
||||||
channel_entry.entry.get_text(),
|
|
||||||
ip_entry.entry.get_text().strip(),
|
|
||||||
"WEP",
|
|
||||||
self.key_entry.entry.get_text(),
|
|
||||||
self.chkbox_use_encryption.get_active(),
|
|
||||||
False) # chkbox_use_ics.get_active())
|
|
||||||
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
def forget_network(self, widget=None):
|
|
||||||
"""
|
|
||||||
Shows a dialog that lists saved wireless networks, and lets the user
|
|
||||||
delete them.
|
|
||||||
"""
|
|
||||||
wireless.ReloadConfig()
|
|
||||||
dialog = gtk.Dialog(
|
|
||||||
title=_('List of saved networks'),
|
|
||||||
flags=gtk.DIALOG_MODAL,
|
|
||||||
buttons=(gtk.STOCK_DELETE, 1, gtk.STOCK_OK, 2)
|
|
||||||
)
|
|
||||||
dialog.set_has_separator(True)
|
|
||||||
dialog.set_size_request(400, 200)
|
|
||||||
|
|
||||||
networks = gtk.ListStore(str, str)
|
|
||||||
for entry in wireless.GetSavedWirelessNetworks():
|
|
||||||
if entry[1] != 'None':
|
|
||||||
networks.append(entry)
|
|
||||||
else:
|
|
||||||
networks.append((entry[0],
|
|
||||||
_('Global settings for this ESSID')))
|
|
||||||
tree = gtk.TreeView(model=networks)
|
|
||||||
tree.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
|
|
||||||
|
|
||||||
cell = gtk.CellRendererText()
|
|
||||||
|
|
||||||
column = gtk.TreeViewColumn(_('ESSID'), cell, text=0)
|
|
||||||
tree.append_column(column)
|
|
||||||
|
|
||||||
column = gtk.TreeViewColumn(_('BSSID'), cell, text=1)
|
|
||||||
tree.append_column(column)
|
|
||||||
|
|
||||||
scroll = gtk.ScrolledWindow()
|
|
||||||
scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
|
||||||
scroll.add(tree)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(scroll)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.set_spacing(5)
|
|
||||||
dialog.show_all()
|
|
||||||
response = dialog.run()
|
|
||||||
if response == 1:
|
|
||||||
model, pathlist = tree.get_selection().get_selected_rows()
|
|
||||||
to_remove = dict(essid=[], bssid=[])
|
|
||||||
if pathlist:
|
|
||||||
for row in pathlist:
|
|
||||||
it = model.get_iter(path=row)
|
|
||||||
to_remove['essid'].append(
|
|
||||||
misc.noneToString(model.get_value(it, 0))
|
|
||||||
)
|
|
||||||
to_remove['bssid'].append(model.get_value(it, 1))
|
|
||||||
|
|
||||||
confirm = gtk.MessageDialog(
|
|
||||||
flags=gtk.DIALOG_MODAL,
|
|
||||||
type=gtk.MESSAGE_INFO,
|
|
||||||
buttons=gtk.BUTTONS_YES_NO,
|
|
||||||
message_format=_('Are you sure you want to discard '
|
|
||||||
'settings for the selected networks?'))
|
|
||||||
confirm.format_secondary_text('\n'.join(to_remove['essid']))
|
|
||||||
response = confirm.run()
|
|
||||||
if response == gtk.RESPONSE_YES:
|
|
||||||
for x in to_remove['bssid']:
|
|
||||||
wireless.DeleteWirelessNetwork(x)
|
|
||||||
wireless.ReloadConfig()
|
|
||||||
confirm.destroy()
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
def toggle_encrypt_check(self, widget=None):
|
|
||||||
"""Toggles the encryption key entry box for the ad-hoc dialog."""
|
|
||||||
self.key_entry.set_sensitive(self.chkbox_use_encryption.get_active())
|
|
||||||
|
|
||||||
def switch_rfkill(self, widget=None):
|
|
||||||
"""Switches wifi card on/off."""
|
|
||||||
wireless.SwitchRfKill()
|
|
||||||
if wireless.GetRfKillEnabled():
|
|
||||||
self.rfkill_button.set_stock_id(gtk.STOCK_MEDIA_PLAY)
|
|
||||||
self.rfkill_button.set_label(_('Switch On Wi-Fi'))
|
|
||||||
else:
|
|
||||||
self.rfkill_button.set_stock_id(gtk.STOCK_MEDIA_STOP)
|
|
||||||
self.rfkill_button.set_label(_('Switch Off Wi-Fi'))
|
|
||||||
|
|
||||||
def disconnect_all(self, widget=None):
|
|
||||||
"""Disconnects from any active network."""
|
|
||||||
def handler(*args):
|
|
||||||
gobject.idle_add(self.all_network_list.set_sensitive, True)
|
|
||||||
|
|
||||||
self.all_network_list.set_sensitive(False)
|
|
||||||
daemon.Disconnect(reply_handler=handler, error_handler=handler)
|
|
||||||
|
|
||||||
def about_dialog(self, widget, event=None):
|
|
||||||
"""Displays an about dialog."""
|
|
||||||
dialog = gtk.AboutDialog()
|
|
||||||
dialog.set_name("Wicd")
|
|
||||||
dialog.set_version(daemon.Hello())
|
|
||||||
dialog.set_authors([
|
|
||||||
"Tom Van Braeckel",
|
|
||||||
"Adam Blackburn",
|
|
||||||
"Dan O'Reilly",
|
|
||||||
"Andrew Psaltis",
|
|
||||||
"David Paleino"
|
|
||||||
])
|
|
||||||
dialog.set_website("http://launchpad.net/wicd")
|
|
||||||
dialog.run()
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
def key_event(self, widget, event=None):
|
|
||||||
"""Handle key-release-events."""
|
|
||||||
if event.state & gtk.gdk.CONTROL_MASK and \
|
|
||||||
gtk.gdk.keyval_name(event.keyval) in ["w", "q"]:
|
|
||||||
self.exit()
|
|
||||||
|
|
||||||
def settings_dialog(self, widget, event=None):
|
|
||||||
"""Displays a general settings dialog."""
|
|
||||||
if not self.pref:
|
|
||||||
self.pref = PreferencesDialog(self, self.wTree)
|
|
||||||
else:
|
|
||||||
self.pref.load_preferences_diag()
|
|
||||||
if self.pref.run() == 1:
|
|
||||||
self.pref.save_results()
|
|
||||||
self.pref.hide()
|
|
||||||
|
|
||||||
def connect_hidden(self, widget):
|
|
||||||
"""Prompts the user for a hidden network, then scans for it."""
|
|
||||||
dialog = gtk.Dialog(
|
|
||||||
title=('Hidden Network'),
|
|
||||||
flags=gtk.DIALOG_MODAL,
|
|
||||||
buttons=(gtk.STOCK_CONNECT, 1, gtk.STOCK_CANCEL, 2)
|
|
||||||
)
|
|
||||||
dialog.set_has_separator(False)
|
|
||||||
lbl = gtk.Label(_('Hidden Network ESSID'))
|
|
||||||
textbox = gtk.Entry()
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(lbl)
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_start(textbox)
|
|
||||||
dialog.show_all()
|
|
||||||
button = dialog.run()
|
|
||||||
if button == 1:
|
|
||||||
answer = textbox.get_text()
|
|
||||||
dialog.destroy()
|
|
||||||
self.refresh_networks(None, True, answer)
|
|
||||||
else:
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
def cancel_connect(self, widget):
|
|
||||||
"""Alerts the daemon to cancel the connection process."""
|
|
||||||
# should cancel a connection if there is one in progress
|
|
||||||
cancel_button = self.wTree.get_object("cancel_button")
|
|
||||||
cancel_button.set_sensitive(False)
|
|
||||||
daemon.CancelConnect()
|
|
||||||
# Prevents automatic reconnecting if that option is enabled
|
|
||||||
daemon.SetForcedDisconnect(True)
|
|
||||||
|
|
||||||
def pulse_progress_bar(self):
|
|
||||||
"""Pulses the progress bar while connecting to a network."""
|
|
||||||
if not self.pulse_active:
|
|
||||||
return False
|
|
||||||
if not self.is_visible:
|
|
||||||
return True
|
|
||||||
try:
|
|
||||||
gobject.idle_add(self.wTree.get_object("progressbar").pulse)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return True
|
|
||||||
|
|
||||||
def update_statusbar(self):
|
|
||||||
"""Triggers a status update in wicd-monitor."""
|
|
||||||
if not self.is_visible:
|
|
||||||
return True
|
|
||||||
|
|
||||||
daemon.UpdateState()
|
|
||||||
if self.connecting:
|
|
||||||
# If we're connecting, don't wait for the monitor to send
|
|
||||||
# us a signal, since it won't until the connection is made.
|
|
||||||
self._do_statusbar_update(*daemon.GetConnectionStatus())
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _do_statusbar_update(self, state, info):
|
|
||||||
"""Actually perform the statusbar update."""
|
|
||||||
if not self.is_visible:
|
|
||||||
return True
|
|
||||||
|
|
||||||
if state == misc.WIRED:
|
|
||||||
return self.set_wired_state(info)
|
|
||||||
elif state == misc.WIRELESS:
|
|
||||||
return self.set_wireless_state(info)
|
|
||||||
elif state == misc.CONNECTING:
|
|
||||||
return self.set_connecting_state(info)
|
|
||||||
elif state in (misc.SUSPENDED, misc.NOT_CONNECTED):
|
|
||||||
return self.set_not_connected_state(info)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def set_wired_state(self, info):
|
|
||||||
"""Set wired state."""
|
|
||||||
if self.connecting:
|
|
||||||
# Adjust our state from connecting->connected.
|
|
||||||
self._set_not_connecting_state()
|
|
||||||
self.set_status(
|
|
||||||
_('Connected to wired network (IP: $A)').replace('$A', info[0])
|
|
||||||
)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def set_wireless_state(self, info):
|
|
||||||
"""Set wireless state."""
|
|
||||||
if self.connecting:
|
|
||||||
# Adjust our state from connecting->connected.
|
|
||||||
self._set_not_connecting_state()
|
|
||||||
self.set_status(_('Connected to $A at $B (IP: $C)').replace
|
|
||||||
('$A', info[1]).replace
|
|
||||||
('$B', daemon.FormatSignalForPrinting(info[2])).replace
|
|
||||||
('$C', info[0]))
|
|
||||||
return True
|
|
||||||
|
|
||||||
def set_not_connected_state(self, info):
|
|
||||||
"""Set not connected state."""
|
|
||||||
if self.connecting:
|
|
||||||
# Adjust our state from connecting->not-connected.
|
|
||||||
self._set_not_connecting_state()
|
|
||||||
self.set_status(_('Not connected'))
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _set_not_connecting_state(self):
|
|
||||||
"""Set not-connecting state."""
|
|
||||||
if self.connecting:
|
|
||||||
if self.update_cb:
|
|
||||||
gobject.source_remove(self.update_cb)
|
|
||||||
self.update_cb = misc.timeout_add(2, self.update_statusbar)
|
|
||||||
self.connecting = False
|
|
||||||
if self.pulse_active:
|
|
||||||
self.pulse_active = False
|
|
||||||
gobject.idle_add(self.all_network_list.set_sensitive, True)
|
|
||||||
gobject.idle_add(self.status_area.hide_all)
|
|
||||||
if self.statusID:
|
|
||||||
gobject.idle_add(self.status_bar.remove_message, 1, self.statusID)
|
|
||||||
|
|
||||||
def set_connecting_state(self, info):
|
|
||||||
"""Set connecting state."""
|
|
||||||
if not self.connecting:
|
|
||||||
if self.update_cb:
|
|
||||||
gobject.source_remove(self.update_cb)
|
|
||||||
self.update_cb = misc.timeout_add(500, self.update_statusbar,
|
|
||||||
milli=True)
|
|
||||||
self.connecting = True
|
|
||||||
if not self.pulse_active:
|
|
||||||
self.pulse_active = True
|
|
||||||
misc.timeout_add(100, self.pulse_progress_bar, milli=True)
|
|
||||||
gobject.idle_add(self.all_network_list.set_sensitive, False)
|
|
||||||
gobject.idle_add(self.status_area.show_all)
|
|
||||||
if self.statusID:
|
|
||||||
gobject.idle_add(self.status_bar.remove_message, 1, self.statusID)
|
|
||||||
if info[0] == "wireless":
|
|
||||||
stat = wireless.CheckWirelessConnectingMessage()
|
|
||||||
gobject.idle_add(self.set_status, "%s: %s" % (info[1], stat))
|
|
||||||
elif info[0] == "wired":
|
|
||||||
gobject.idle_add(self.set_status, _('Wired Network') + ': ' +
|
|
||||||
wired.CheckWiredConnectingMessage())
|
|
||||||
return True
|
|
||||||
|
|
||||||
def update_connect_buttons(self, state=None, x=None, force_check=False):
|
|
||||||
"""Updates the connect/disconnect buttons for the GUI.
|
|
||||||
|
|
||||||
If force_check is given, update the buttons even if the
|
|
||||||
current network state is the same as the previous.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not DBUS_AVAIL:
|
|
||||||
return
|
|
||||||
if not state:
|
|
||||||
state, x = daemon.GetConnectionStatus()
|
|
||||||
|
|
||||||
self.disconnect_all_button.set_sensitive(
|
|
||||||
state in [misc.WIRED, misc.WIRELESS]
|
|
||||||
)
|
|
||||||
if self.prev_state != state or force_check:
|
|
||||||
apbssid = wireless.GetApBssid()
|
|
||||||
for entry in chain(self.network_list, self.wired_network_box):
|
|
||||||
if hasattr(entry, "update_connect_button"):
|
|
||||||
entry.update_connect_button(state, apbssid)
|
|
||||||
self.prev_state = state
|
|
||||||
|
|
||||||
def set_status(self, msg):
|
|
||||||
"""Sets the status bar message for the GUI."""
|
|
||||||
self.statusID = self.status_bar.push(1, msg)
|
|
||||||
|
|
||||||
def dbus_scan_finished(self):
|
|
||||||
"""Calls for a non-fresh update of the gui window.
|
|
||||||
|
|
||||||
This method is called after a wireless scan is completed.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not DBUS_AVAIL:
|
|
||||||
return
|
|
||||||
gobject.idle_add(self.refresh_networks, None, False, None)
|
|
||||||
|
|
||||||
def dbus_scan_started(self):
|
|
||||||
"""Called when a wireless scan starts."""
|
|
||||||
if not DBUS_AVAIL:
|
|
||||||
return
|
|
||||||
self.network_list.set_sensitive(False)
|
|
||||||
|
|
||||||
def _remove_items_from_vbox(self, vbox):
|
|
||||||
"""Remove items fro a VBox."""
|
|
||||||
for z in vbox:
|
|
||||||
vbox.remove(z)
|
|
||||||
z.destroy()
|
|
||||||
del z
|
|
||||||
|
|
||||||
def refresh_clicked(self, widget=None):
|
|
||||||
"""Kick off an asynchronous wireless scan."""
|
|
||||||
if not DBUS_AVAIL or self.connecting:
|
|
||||||
return
|
|
||||||
self.refreshing = True
|
|
||||||
|
|
||||||
# Remove stuff already in there.
|
|
||||||
self._remove_items_from_vbox(self.wired_network_box)
|
|
||||||
self._remove_items_from_vbox(self.network_list)
|
|
||||||
label = gtk.Label("%s..." % _('Scanning'))
|
|
||||||
self.network_list.pack_start(label)
|
|
||||||
self.network_list.show_all()
|
|
||||||
if wired.CheckPluggedIn() or daemon.GetAlwaysShowWiredInterface():
|
|
||||||
printLine = True # In this case we print a separator.
|
|
||||||
wirednet = WiredNetworkEntry()
|
|
||||||
self.wired_network_box.pack_start(wirednet, False, False)
|
|
||||||
wirednet.connect_button.connect("clicked", self.connect,
|
|
||||||
"wired", 0, wirednet)
|
|
||||||
wirednet.disconnect_button.connect("clicked", self.disconnect,
|
|
||||||
"wired", 0, wirednet)
|
|
||||||
wirednet.advanced_button.connect("clicked",
|
|
||||||
self.edit_advanced, "wired", 0,
|
|
||||||
wirednet)
|
|
||||||
state, x = daemon.GetConnectionStatus()
|
|
||||||
wirednet.update_connect_button(state)
|
|
||||||
|
|
||||||
self._wired_showing = True
|
|
||||||
else:
|
|
||||||
self._wired_showing = False
|
|
||||||
|
|
||||||
wireless.Scan(False)
|
|
||||||
|
|
||||||
def refresh_networks(self, widget=None, fresh=True, hidden=None):
|
|
||||||
"""Refreshes the network list.
|
|
||||||
|
|
||||||
If fresh=True, scans for wireless networks and displays the results.
|
|
||||||
If a ethernet connection is available, or the user has chosen to,
|
|
||||||
displays a Wired Network entry as well.
|
|
||||||
If hidden isn't None, will scan for networks after running
|
|
||||||
iwconfig <wireless interface> essid <hidden>.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if fresh:
|
|
||||||
if hidden:
|
|
||||||
wireless.SetHiddenNetworkESSID(noneToString(hidden))
|
|
||||||
self.refresh_clicked()
|
|
||||||
return
|
|
||||||
print("refreshing...")
|
|
||||||
self.network_list.set_sensitive(False)
|
|
||||||
self._remove_items_from_vbox(self.network_list)
|
|
||||||
self.wait_for_events()
|
|
||||||
printLine = False # We don't print a separator by default.
|
|
||||||
if self._wired_showing:
|
|
||||||
printLine = True
|
|
||||||
num_networks = wireless.GetNumberOfNetworks()
|
|
||||||
instruct_label = self.wTree.get_object("label_instructions")
|
|
||||||
if num_networks > 0:
|
|
||||||
skip_never_connect = not daemon.GetShowNeverConnect()
|
|
||||||
instruct_label.show()
|
|
||||||
for x in range(0, num_networks):
|
|
||||||
if skip_never_connect and \
|
|
||||||
misc.to_bool(get_wireless_prop(x, 'never')):
|
|
||||||
continue
|
|
||||||
if printLine:
|
|
||||||
sep = gtk.HSeparator()
|
|
||||||
self.network_list.pack_start(sep, padding=10, fill=False,
|
|
||||||
expand=False)
|
|
||||||
sep.show()
|
|
||||||
else:
|
|
||||||
printLine = True
|
|
||||||
tempnet = WirelessNetworkEntry(x)
|
|
||||||
self.network_list.pack_start(tempnet, False, False)
|
|
||||||
tempnet.connect_button.connect("clicked",
|
|
||||||
self.connect, "wireless", x,
|
|
||||||
tempnet)
|
|
||||||
tempnet.disconnect_button.connect("clicked",
|
|
||||||
self.disconnect, "wireless",
|
|
||||||
x, tempnet)
|
|
||||||
tempnet.advanced_button.connect("clicked",
|
|
||||||
self.edit_advanced, "wireless",
|
|
||||||
x, tempnet)
|
|
||||||
else:
|
|
||||||
instruct_label.hide()
|
|
||||||
if wireless.GetKillSwitchEnabled():
|
|
||||||
label = gtk.Label(_('Wireless Kill Switch Enabled') + ".")
|
|
||||||
else:
|
|
||||||
label = gtk.Label(_('No wireless networks found.'))
|
|
||||||
self.network_list.pack_start(label)
|
|
||||||
label.show()
|
|
||||||
self.update_connect_buttons(force_check=True)
|
|
||||||
self.network_list.set_sensitive(True)
|
|
||||||
self.refreshing = False
|
|
||||||
|
|
||||||
def save_settings(self, nettype, networkid, networkentry):
|
|
||||||
"""Verifies and saves the settings for the network entry."""
|
|
||||||
entry = networkentry.advanced_dialog
|
|
||||||
opt_entlist = []
|
|
||||||
req_entlist = []
|
|
||||||
|
|
||||||
# First make sure all the Addresses entered are valid.
|
|
||||||
if entry.chkbox_static_ip.get_active():
|
|
||||||
req_entlist = [entry.txt_ip, entry.txt_netmask]
|
|
||||||
opt_entlist = [entry.txt_gateway]
|
|
||||||
|
|
||||||
if entry.chkbox_static_dns.get_active() and \
|
|
||||||
not entry.chkbox_global_dns.get_active():
|
|
||||||
for ent in [entry.txt_dns_1, entry.txt_dns_2, entry.txt_dns_3]:
|
|
||||||
opt_entlist.append(ent)
|
|
||||||
|
|
||||||
# Required entries.
|
|
||||||
for lblent in req_entlist:
|
|
||||||
lblent.set_text(lblent.get_text().strip())
|
|
||||||
if not misc.IsValidIP(lblent.get_text()):
|
|
||||||
error(self.window, _('Invalid address in $A entry.').
|
|
||||||
replace('$A', lblent.label.get_label()))
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Optional entries, only check for validity if they're entered.
|
|
||||||
for lblent in opt_entlist:
|
|
||||||
lblent.set_text(lblent.get_text().strip())
|
|
||||||
if lblent.get_text() and not misc.IsValidIP(lblent.get_text()):
|
|
||||||
error(self.window, _('Invalid address in $A entry.').
|
|
||||||
replace('$A', lblent.label.get_label()))
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Now save the settings.
|
|
||||||
if nettype == "wireless":
|
|
||||||
if not networkentry.save_wireless_settings(networkid):
|
|
||||||
return False
|
|
||||||
|
|
||||||
elif nettype == "wired":
|
|
||||||
if not networkentry.save_wired_settings():
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def edit_advanced(self, widget, ttype, networkid, networkentry):
|
|
||||||
"""Display the advanced settings dialog.
|
|
||||||
|
|
||||||
Displays the advanced settings dialog and saves any changes made.
|
|
||||||
If errors occur in the settings, an error message will be displayed
|
|
||||||
and the user won't be able to save the changes until the errors
|
|
||||||
are fixed.
|
|
||||||
|
|
||||||
"""
|
|
||||||
dialog = networkentry.advanced_dialog
|
|
||||||
dialog.set_values()
|
|
||||||
dialog.show_all()
|
|
||||||
while True:
|
|
||||||
if self.run_settings_dialog(dialog, ttype, networkid,
|
|
||||||
networkentry):
|
|
||||||
break
|
|
||||||
dialog.hide()
|
|
||||||
|
|
||||||
def run_settings_dialog(self, dialog, nettype, networkid, networkentry):
|
|
||||||
"""Runs the settings dialog.
|
|
||||||
|
|
||||||
Runs the settings dialog and returns True if settings are saved
|
|
||||||
successfully, and false otherwise.
|
|
||||||
|
|
||||||
"""
|
|
||||||
result = dialog.run()
|
|
||||||
if result == gtk.RESPONSE_ACCEPT:
|
|
||||||
if self.save_settings(nettype, networkid, networkentry):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def check_encryption_valid(self, networkid, entry):
|
|
||||||
"""Make sure that encryption settings are properly filled in."""
|
|
||||||
# Make sure no entries are left blank
|
|
||||||
if entry.chkbox_encryption.get_active():
|
|
||||||
encryption_info = entry.encryption_info
|
|
||||||
for entry_info in list(encryption_info.values()):
|
|
||||||
if entry_info[0].entry.get_text() == "" and \
|
|
||||||
entry_info[1] == 'required':
|
|
||||||
error(self.window, "%s (%s)" %
|
|
||||||
(_('Required encryption information is missing.'),
|
|
||||||
entry_info[0].label.get_label()))
|
|
||||||
return False
|
|
||||||
# Make sure the checkbox is checked when it should be
|
|
||||||
elif (not entry.chkbox_encryption.get_active() and
|
|
||||||
wireless.GetWirelessProperty(networkid, "encryption")):
|
|
||||||
error(self.window, _('This network requires encryption to be '
|
|
||||||
'enabled.'))
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _wait_for_connect_thread_start(self):
|
|
||||||
"""Wait for the connect thread to start."""
|
|
||||||
self.wTree.get_object("progressbar").pulse()
|
|
||||||
if not self._connect_thread_started:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
misc.timeout_add(2, self.update_statusbar)
|
|
||||||
self.update_statusbar()
|
|
||||||
return False
|
|
||||||
|
|
||||||
def connect(self, widget, nettype, networkid, networkentry):
|
|
||||||
"""Initiates the connection process in the daemon."""
|
|
||||||
def handler(*args):
|
|
||||||
self._connect_thread_started = True
|
|
||||||
|
|
||||||
def setup_interface_for_connection():
|
|
||||||
"""Initialize interface for connection."""
|
|
||||||
cancel_button = self.wTree.get_object("cancel_button")
|
|
||||||
cancel_button.set_sensitive(True)
|
|
||||||
self.all_network_list.set_sensitive(False)
|
|
||||||
if self.statusID:
|
|
||||||
gobject.idle_add(
|
|
||||||
self.status_bar.remove_message, 1, self.statusID)
|
|
||||||
gobject.idle_add(
|
|
||||||
self.set_status, _('Disconnecting active connections...'))
|
|
||||||
gobject.idle_add(self.status_area.show_all)
|
|
||||||
self.wait_for_events()
|
|
||||||
self._connect_thread_started = False
|
|
||||||
|
|
||||||
if nettype == "wireless":
|
|
||||||
if not self.check_encryption_valid(networkid,
|
|
||||||
networkentry.advanced_dialog):
|
|
||||||
self.edit_advanced(None, nettype, networkid, networkentry)
|
|
||||||
return False
|
|
||||||
setup_interface_for_connection()
|
|
||||||
wireless.ConnectWireless(networkid, reply_handler=handler,
|
|
||||||
error_handler=handler)
|
|
||||||
elif nettype == "wired":
|
|
||||||
setup_interface_for_connection()
|
|
||||||
wired.ConnectWired(reply_handler=handler, error_handler=handler)
|
|
||||||
|
|
||||||
gobject.source_remove(self.update_cb)
|
|
||||||
misc.timeout_add(100, self._wait_for_connect_thread_start, milli=True)
|
|
||||||
|
|
||||||
def disconnect(self, widget, nettype, networkid, networkentry):
|
|
||||||
"""Disconnects from the given network.
|
|
||||||
|
|
||||||
Keyword arguments:
|
|
||||||
widget -- The disconnect button that was pressed.
|
|
||||||
event -- unused
|
|
||||||
nettype -- "wired" or "wireless", depending on the network entry type.
|
|
||||||
networkid -- unused
|
|
||||||
networkentry -- The NetworkEntry containing the disconnect button.
|
|
||||||
|
|
||||||
"""
|
|
||||||
def handler(*args):
|
|
||||||
gobject.idle_add(self.all_network_list.set_sensitive, True)
|
|
||||||
gobject.idle_add(self.network_list.set_sensitive, True)
|
|
||||||
|
|
||||||
widget.hide()
|
|
||||||
networkentry.connect_button.show()
|
|
||||||
daemon.SetForcedDisconnect(True)
|
|
||||||
self.network_list.set_sensitive(False)
|
|
||||||
if nettype == "wired":
|
|
||||||
wired.DisconnectWired(reply_handler=handler, error_handler=handler)
|
|
||||||
else:
|
|
||||||
wireless.DisconnectWireless(reply_handler=handler,
|
|
||||||
error_handler=handler)
|
|
||||||
|
|
||||||
def wait_for_events(self, amt=0):
|
|
||||||
"""Wait for any pending gtk events to finish before moving on.
|
|
||||||
|
|
||||||
Keyword arguments:
|
|
||||||
amt -- a number specifying the number of ms to wait before checking
|
|
||||||
for pending events.
|
|
||||||
|
|
||||||
"""
|
|
||||||
time.sleep(amt)
|
|
||||||
while gtk.events_pending():
|
|
||||||
gtk.main_iteration()
|
|
||||||
|
|
||||||
def exit(self, widget=None, event=None):
|
|
||||||
"""Hide the wicd GUI.
|
|
||||||
|
|
||||||
This method hides the wicd GUI and writes the current window size
|
|
||||||
to disc for later use. This method normally does NOT actually
|
|
||||||
destroy the GUI, it just hides it.
|
|
||||||
|
|
||||||
"""
|
|
||||||
self.window.hide()
|
|
||||||
gobject.source_remove(self.update_cb)
|
|
||||||
bus.remove_signal_receiver(self._do_statusbar_update, 'StatusChanged',
|
|
||||||
'org.wicd.daemon')
|
|
||||||
[width, height] = self.window.get_size()
|
|
||||||
try:
|
|
||||||
daemon.SetGUIOpen(False)
|
|
||||||
except DBusException:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if self.standalone:
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
self.is_visible = False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def show_win(self):
|
|
||||||
"""Brings the GUI out of the hidden state.
|
|
||||||
|
|
||||||
Method to show the wicd GUI, alert the daemon that it is open,
|
|
||||||
and refresh the network list.
|
|
||||||
|
|
||||||
"""
|
|
||||||
self.window.present()
|
|
||||||
self.window.deiconify()
|
|
||||||
self.wait_for_events()
|
|
||||||
self.is_visible = True
|
|
||||||
daemon.SetGUIOpen(True)
|
|
||||||
self.wait_for_events(0.1)
|
|
||||||
gobject.idle_add(self.refresh_clicked)
|
|
||||||
self._do_statusbar_update(*daemon.GetConnectionStatus())
|
|
||||||
bus.add_signal_receiver(self._do_statusbar_update, 'StatusChanged',
|
|
||||||
'org.wicd.daemon')
|
|
||||||
self.update_cb = misc.timeout_add(2, self.update_statusbar)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
setup_dbus()
|
|
||||||
app = appGui(standalone=True)
|
|
||||||
mainloop = gobject.MainLoop()
|
|
||||||
mainloop.run()
|
|
||||||
288
gtk/guiutil.py
@@ -1,288 +0,0 @@
|
|||||||
"""guiutil - A collection of commonly used gtk/gui functions and classes."""
|
|
||||||
#
|
|
||||||
# Copyright (C) 2007 - 2009 Adam Blackburn
|
|
||||||
# Copyright (C) 2007 - 2009 Dan O'Reilly
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License Version 2 as
|
|
||||||
# published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
import gtk
|
|
||||||
import os.path
|
|
||||||
|
|
||||||
import wicd.wpath as wpath
|
|
||||||
|
|
||||||
HAS_NOTIFY = True
|
|
||||||
try:
|
|
||||||
import pynotify
|
|
||||||
if not pynotify.init("Wicd"):
|
|
||||||
print('Could not initalize pynotify')
|
|
||||||
HAS_NOTIFY = False
|
|
||||||
except ImportError:
|
|
||||||
print("Importing pynotify failed, notifications disabled.")
|
|
||||||
HAS_NOTIFY = False
|
|
||||||
|
|
||||||
print(("Has notifications support", HAS_NOTIFY))
|
|
||||||
|
|
||||||
if wpath.no_use_notifications:
|
|
||||||
print('Notifications disabled during setup.py configure')
|
|
||||||
|
|
||||||
|
|
||||||
def can_use_notify():
|
|
||||||
"""Check whether WICD is allowed to use notifications."""
|
|
||||||
use_notify = os.path.exists(os.path.join(os.path.expanduser('~/.wicd'),
|
|
||||||
'USE_NOTIFICATIONS')
|
|
||||||
)
|
|
||||||
return use_notify and HAS_NOTIFY and not wpath.no_use_notifications
|
|
||||||
|
|
||||||
|
|
||||||
def error(parent, message, block=True):
|
|
||||||
"""Shows an error dialog."""
|
|
||||||
def delete_event(dialog, i):
|
|
||||||
"""Handle dialog destroy."""
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
if can_use_notify() and not block:
|
|
||||||
notification = pynotify.Notification("ERROR", message, "error")
|
|
||||||
notification.show()
|
|
||||||
return
|
|
||||||
dialog = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR,
|
|
||||||
gtk.BUTTONS_OK)
|
|
||||||
dialog.set_markup(message)
|
|
||||||
if not block:
|
|
||||||
dialog.present()
|
|
||||||
dialog.connect("response", delete_event)
|
|
||||||
else:
|
|
||||||
dialog.run()
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
|
|
||||||
def alert(parent, message, block=True):
|
|
||||||
"""Shows an warning dialog."""
|
|
||||||
def delete_event(dialog, i):
|
|
||||||
"""Handle dialog destroy."""
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
dialog = gtk.MessageDialog(parent, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING,
|
|
||||||
gtk.BUTTONS_OK)
|
|
||||||
dialog.set_markup(message)
|
|
||||||
if not block:
|
|
||||||
dialog.present()
|
|
||||||
dialog.connect("response", delete_event)
|
|
||||||
else:
|
|
||||||
dialog.run()
|
|
||||||
dialog.destroy()
|
|
||||||
|
|
||||||
|
|
||||||
def string_input(prompt, secondary, textbox_label):
|
|
||||||
"""Dialog with a label and an entry."""
|
|
||||||
# based on a version of a PyGTK text entry from
|
|
||||||
# http://ardoris.wordpress.com/2008/07/05/pygtk-text-entry-dialog/
|
|
||||||
|
|
||||||
def dialog_response(entry, dialog, response):
|
|
||||||
"""Handle dialog response."""
|
|
||||||
dialog.response(response)
|
|
||||||
|
|
||||||
dialog = gtk.MessageDialog(
|
|
||||||
None,
|
|
||||||
gtk.DIALOG_MODAL,
|
|
||||||
gtk.MESSAGE_QUESTION,
|
|
||||||
gtk.BUTTONS_OK_CANCEL,
|
|
||||||
None)
|
|
||||||
|
|
||||||
# set the text
|
|
||||||
dialog.set_markup("<span size='larger'><b>" + prompt + "</b></span>")
|
|
||||||
# add the secondary text
|
|
||||||
dialog.format_secondary_markup(secondary)
|
|
||||||
|
|
||||||
entry = gtk.Entry()
|
|
||||||
# allow the user to press enter instead of clicking OK
|
|
||||||
entry.connect("activate", dialog_response, dialog, gtk.RESPONSE_OK)
|
|
||||||
|
|
||||||
# create an hbox and pack the label and entry in
|
|
||||||
hbox = gtk.HBox()
|
|
||||||
hbox.pack_start(gtk.Label(textbox_label), False, 4, 4)
|
|
||||||
hbox.pack_start(entry)
|
|
||||||
|
|
||||||
# pack the boxes and show the dialog
|
|
||||||
# pylint: disable-msg=E1101
|
|
||||||
dialog.vbox.pack_end(hbox, True, True, 0)
|
|
||||||
dialog.show_all()
|
|
||||||
|
|
||||||
if dialog.run() == gtk.RESPONSE_OK:
|
|
||||||
text = entry.get_text()
|
|
||||||
dialog.destroy()
|
|
||||||
return text
|
|
||||||
else:
|
|
||||||
dialog.destroy()
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
class SmallLabel(gtk.Label):
|
|
||||||
"""Small GtkLabel."""
|
|
||||||
def __init__(self, text=''):
|
|
||||||
gtk.Label.__init__(self, text)
|
|
||||||
self.set_size_request(50, -1)
|
|
||||||
|
|
||||||
|
|
||||||
class LeftAlignedLabel(gtk.Label):
|
|
||||||
"""GtkLabel with text aligned to left."""
|
|
||||||
def __init__(self, label=None):
|
|
||||||
gtk.Label.__init__(self, label)
|
|
||||||
self.set_alignment(0.0, 0.5)
|
|
||||||
|
|
||||||
|
|
||||||
class LabelEntry(gtk.HBox):
|
|
||||||
"""A label on the left with a textbox on the right."""
|
|
||||||
def __init__(self, text):
|
|
||||||
gtk.HBox.__init__(self)
|
|
||||||
self.entry = gtk.Entry()
|
|
||||||
self.entry.set_size_request(200, -1)
|
|
||||||
self.label = LeftAlignedLabel()
|
|
||||||
self.label.set_text(text)
|
|
||||||
self.label.set_size_request(170, -1)
|
|
||||||
self.pack_start(self.label, fill=True, expand=True)
|
|
||||||
self.pack_start(self.entry, fill=False, expand=False)
|
|
||||||
self.label.show()
|
|
||||||
self.entry.show()
|
|
||||||
self.entry.connect('focus-out-event', self.hide_characters)
|
|
||||||
self.entry.connect('focus-in-event', self.show_characters)
|
|
||||||
self.auto_hide_text = False
|
|
||||||
self.show()
|
|
||||||
|
|
||||||
def set_text(self, text):
|
|
||||||
"""Set text of the GtkEntry."""
|
|
||||||
# For compatibility...
|
|
||||||
self.entry.set_text(text)
|
|
||||||
|
|
||||||
def get_text(self):
|
|
||||||
"""Get text of the GtkEntry."""
|
|
||||||
return self.entry.get_text()
|
|
||||||
|
|
||||||
def set_auto_hidden(self, value):
|
|
||||||
"""Set auto-hide of the text of GtkEntry."""
|
|
||||||
self.entry.set_visibility(False)
|
|
||||||
self.auto_hide_text = value
|
|
||||||
|
|
||||||
def show_characters(self, widget=None, event=None):
|
|
||||||
"""When the box has focus, show the characters."""
|
|
||||||
if self.auto_hide_text and widget:
|
|
||||||
self.entry.set_visibility(True)
|
|
||||||
|
|
||||||
def set_sensitive(self, value):
|
|
||||||
"""Set sensitivity of the widget."""
|
|
||||||
self.entry.set_sensitive(value)
|
|
||||||
self.label.set_sensitive(value)
|
|
||||||
|
|
||||||
def hide_characters(self, widget=None, event=None):
|
|
||||||
"""When the box looses focus, hide them."""
|
|
||||||
if self.auto_hide_text and widget:
|
|
||||||
self.entry.set_visibility(False)
|
|
||||||
|
|
||||||
|
|
||||||
class GreyLabel(gtk.Label):
|
|
||||||
"""Creates a grey gtk.Label."""
|
|
||||||
def __init__(self):
|
|
||||||
gtk.Label.__init__(self)
|
|
||||||
|
|
||||||
def set_label(self, text):
|
|
||||||
self.set_markup(text)
|
|
||||||
self.set_alignment(0, 0)
|
|
||||||
|
|
||||||
|
|
||||||
class ProtectedLabelEntry(gtk.HBox):
|
|
||||||
"""A LabelEntry with a CheckButton that protects the entry text."""
|
|
||||||
def __init__(self, label_text):
|
|
||||||
gtk.HBox.__init__(self)
|
|
||||||
self.entry = gtk.Entry()
|
|
||||||
self.entry.set_size_request(200, -1)
|
|
||||||
self.entry.set_visibility(False)
|
|
||||||
self.label = LeftAlignedLabel()
|
|
||||||
self.label.set_text(label_text)
|
|
||||||
self.label.set_size_request(165, -1)
|
|
||||||
self.check = gtk.CheckButton()
|
|
||||||
self.check.set_size_request(5, -1)
|
|
||||||
self.check.set_active(False)
|
|
||||||
self.check.set_focus_on_click(False)
|
|
||||||
self.pack_start(self.label, fill=True, expand=True)
|
|
||||||
self.pack_start(self.check, fill=True, expand=True)
|
|
||||||
self.pack_start(self.entry, fill=False, expand=False)
|
|
||||||
self.label.show()
|
|
||||||
self.check.show()
|
|
||||||
self.entry.show()
|
|
||||||
self.check.connect('clicked', self.click_handler)
|
|
||||||
self.show()
|
|
||||||
|
|
||||||
def set_entry_text(self, text):
|
|
||||||
"""Set text of the GtkEntry."""
|
|
||||||
# For compatibility...
|
|
||||||
self.entry.set_text(text)
|
|
||||||
|
|
||||||
def get_entry_text(self):
|
|
||||||
"""Get text of the GtkEntry."""
|
|
||||||
return self.entry.get_text()
|
|
||||||
|
|
||||||
def set_sensitive(self, value):
|
|
||||||
"""Set sensitivity of the widget."""
|
|
||||||
self.entry.set_sensitive(value)
|
|
||||||
self.label.set_sensitive(value)
|
|
||||||
self.check.set_sensitive(value)
|
|
||||||
|
|
||||||
def click_handler(self, widget=None, event=None):
|
|
||||||
"""Handle clicks."""
|
|
||||||
active = self.check.get_active()
|
|
||||||
self.entry.set_visibility(active)
|
|
||||||
|
|
||||||
|
|
||||||
class LabelCombo(gtk.HBox):
|
|
||||||
"""A label on the left with a combobox on the right."""
|
|
||||||
|
|
||||||
def __init__(self, text):
|
|
||||||
gtk.HBox.__init__(self)
|
|
||||||
self.combo = gtk.ComboBox()
|
|
||||||
self.combo.set_size_request(200, -1)
|
|
||||||
self.label = LeftAlignedLabel()
|
|
||||||
self.label.set_text(text)
|
|
||||||
self.label.set_size_request(170, -1)
|
|
||||||
cell = gtk.CellRendererText()
|
|
||||||
self.combo.pack_start(cell, True)
|
|
||||||
self.combo.add_attribute(cell, 'text', 0)
|
|
||||||
self.pack_start(self.label, fill=True, expand=True)
|
|
||||||
self.pack_start(self.combo, fill=False, expand=False)
|
|
||||||
self.label.show()
|
|
||||||
self.combo.show()
|
|
||||||
self.show()
|
|
||||||
|
|
||||||
def get_active(self):
|
|
||||||
"""Return the selected item in the GtkComboBox."""
|
|
||||||
return self.combo.get_active()
|
|
||||||
|
|
||||||
def set_active(self, index):
|
|
||||||
"""Set given item in the GtkComboBox."""
|
|
||||||
self.combo.set_active(index)
|
|
||||||
|
|
||||||
def get_active_text(self):
|
|
||||||
"""Return the selected item's text in the GtkComboBox."""
|
|
||||||
return self.combo.get_active_text()
|
|
||||||
|
|
||||||
def get_model(self):
|
|
||||||
"""Return the GtkComboBox's model."""
|
|
||||||
return self.combo.get_model()
|
|
||||||
|
|
||||||
def set_model(self, model=None):
|
|
||||||
"""Set the GtkComboBox's model."""
|
|
||||||
self.combo.set_model(model)
|
|
||||||
|
|
||||||
def set_sensitive(self, value):
|
|
||||||
"""Set sensitivity of the widget."""
|
|
||||||
self.combo.set_sensitive(value)
|
|
||||||
self.label.set_sensitive(value)
|
|
||||||
1311
gtk/netentry.py
491
gtk/prefs.py
@@ -1,491 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
"""prefs -- Wicd Preferences Dialog.
|
|
||||||
|
|
||||||
Displays the main settings dialog window for wicd and
|
|
||||||
handles recieving/sendings the settings from/to the daemon.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright (C) 2008-2009 Adam Blackburn
|
|
||||||
# Copyright (C) 2008-2009 Dan O'Reilly
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License Version 2 as
|
|
||||||
# published by the Free Software Foundation.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
import os
|
|
||||||
|
|
||||||
import gtk
|
|
||||||
from gi.repository import GObject as gobject
|
|
||||||
try:
|
|
||||||
import pynotify
|
|
||||||
except ImportError:
|
|
||||||
pynotify = None
|
|
||||||
|
|
||||||
from wicd import misc
|
|
||||||
from wicd import wpath
|
|
||||||
from wicd import dbusmanager
|
|
||||||
from wicd.misc import checkboxTextboxToggle, noneToBlankString
|
|
||||||
from wicd.translations import _
|
|
||||||
|
|
||||||
daemon = None
|
|
||||||
wireless = None
|
|
||||||
wired = None
|
|
||||||
|
|
||||||
USER_SETTINGS_DIR = os.path.expanduser('~/.wicd/')
|
|
||||||
|
|
||||||
|
|
||||||
def setup_dbus():
|
|
||||||
"""Initialize DBus."""
|
|
||||||
global daemon, wireless, wired
|
|
||||||
daemon = dbusmanager.get_interface('daemon')
|
|
||||||
wireless = dbusmanager.get_interface('wireless')
|
|
||||||
wired = dbusmanager.get_interface('wired')
|
|
||||||
|
|
||||||
|
|
||||||
class PreferencesDialog(object):
|
|
||||||
"""Class for handling the wicd preferences dialog window."""
|
|
||||||
def __init__(self, parent, wTree):
|
|
||||||
setup_dbus()
|
|
||||||
self.parent = parent
|
|
||||||
self.wTree = wTree
|
|
||||||
|
|
||||||
self.ethtoolradio = None
|
|
||||||
self.miitoolradio = None
|
|
||||||
|
|
||||||
self.wpadrivercombo = None
|
|
||||||
self.wpadrivers = None
|
|
||||||
self.backends = None
|
|
||||||
self.backendcombo = None
|
|
||||||
self.be_descriptions = None
|
|
||||||
self.preferwiredcheckbox = None
|
|
||||||
self.useGlobalDNSCheckbox = None
|
|
||||||
self.displaytypecheckbox = None
|
|
||||||
self.verifyapcheckbox = None
|
|
||||||
self.debugmodecheckbox = None
|
|
||||||
self.wiredcheckbox = None
|
|
||||||
self.showneverconnectcheckbox = None
|
|
||||||
self.reconnectcheckbox = None
|
|
||||||
self.notificationscheckbox = None
|
|
||||||
|
|
||||||
self.usedefaultradiobutton = None
|
|
||||||
self.lastusedradiobutton = None
|
|
||||||
self.showlistradiobutton = None
|
|
||||||
|
|
||||||
self.kdesuradio = None
|
|
||||||
self.gksudoradio = None
|
|
||||||
self.sudoautoradio = None
|
|
||||||
self.ktsussradio = None
|
|
||||||
|
|
||||||
self.dhclientradio = None
|
|
||||||
self.dhcpautoradio = None
|
|
||||||
self.pumpradio = None
|
|
||||||
self.udhcpcradio = None
|
|
||||||
self.dhcpcdradio = None
|
|
||||||
|
|
||||||
self.linkautoradio = None
|
|
||||||
self.routeflushradio = None
|
|
||||||
self.ipflushradio = None
|
|
||||||
self.flushautoradio = None
|
|
||||||
|
|
||||||
self.dialog = None
|
|
||||||
self.entryWiredInterface = None
|
|
||||||
self.entryWirelessInterface = None
|
|
||||||
|
|
||||||
self.dns1Entry = None
|
|
||||||
self.dns2Entry = None
|
|
||||||
self.dns3Entry = None
|
|
||||||
self.searchDomEntry = None
|
|
||||||
self.dnsDomEntry = None
|
|
||||||
|
|
||||||
self.prep_settings_diag()
|
|
||||||
self.load_preferences_diag()
|
|
||||||
|
|
||||||
def _setup_external_app_radios(self, radio_list, get_method, set_method):
|
|
||||||
"""Generic function for setting up external app radios."""
|
|
||||||
# Disable radios for apps that aren't installed.
|
|
||||||
for app in radio_list[1:]:
|
|
||||||
app.set_sensitive(daemon.GetAppAvailable(app.get_label()))
|
|
||||||
selected_app = get_method()
|
|
||||||
# Make sure the app we want to select is actually available.
|
|
||||||
if radio_list[selected_app].get_property("sensitive"):
|
|
||||||
radio_list[selected_app].set_active(True)
|
|
||||||
else:
|
|
||||||
# If it isn't, default to Automatic.
|
|
||||||
set_method(misc.AUTO)
|
|
||||||
radio_list[misc.AUTO].set_active(True)
|
|
||||||
|
|
||||||
def load_preferences_diag(self):
|
|
||||||
"""Loads data into the preferences Dialog."""
|
|
||||||
|
|
||||||
self.wiredcheckbox.set_active(daemon.GetAlwaysShowWiredInterface())
|
|
||||||
self.reconnectcheckbox.set_active(daemon.GetAutoReconnect())
|
|
||||||
self.debugmodecheckbox.set_active(daemon.GetDebugMode())
|
|
||||||
self.displaytypecheckbox.set_active(daemon.GetSignalDisplayType())
|
|
||||||
self.verifyapcheckbox.set_active(daemon.GetShouldVerifyAp())
|
|
||||||
self.preferwiredcheckbox.set_active(daemon.GetPreferWiredNetwork())
|
|
||||||
self.showneverconnectcheckbox.set_active(daemon.GetShowNeverConnect())
|
|
||||||
|
|
||||||
dhcp_list = [self.dhcpautoradio, self.dhclientradio, self.dhcpcdradio,
|
|
||||||
self.pumpradio, self.udhcpcradio]
|
|
||||||
self._setup_external_app_radios(
|
|
||||||
dhcp_list, daemon.GetDHCPClient, daemon.SetDHCPClient)
|
|
||||||
|
|
||||||
wired_link_list = [self.linkautoradio, self.ethtoolradio,
|
|
||||||
self.miitoolradio]
|
|
||||||
self._setup_external_app_radios(
|
|
||||||
wired_link_list,
|
|
||||||
daemon.GetLinkDetectionTool,
|
|
||||||
daemon.SetLinkDetectionTool
|
|
||||||
)
|
|
||||||
|
|
||||||
flush_list = [self.flushautoradio, self.ipflushradio,
|
|
||||||
self.routeflushradio]
|
|
||||||
self._setup_external_app_radios(
|
|
||||||
flush_list, daemon.GetFlushTool, daemon.SetFlushTool)
|
|
||||||
|
|
||||||
sudo_list = [self.sudoautoradio, self.gksudoradio, self.kdesuradio,
|
|
||||||
self.ktsussradio]
|
|
||||||
self._setup_external_app_radios(
|
|
||||||
sudo_list, daemon.GetSudoApp, daemon.SetSudoApp)
|
|
||||||
|
|
||||||
auto_conn_meth = daemon.GetWiredAutoConnectMethod()
|
|
||||||
if auto_conn_meth == 1:
|
|
||||||
self.usedefaultradiobutton.set_active(True)
|
|
||||||
elif auto_conn_meth == 2:
|
|
||||||
self.showlistradiobutton.set_active(True)
|
|
||||||
elif auto_conn_meth == 3:
|
|
||||||
self.lastusedradiobutton.set_active(True)
|
|
||||||
|
|
||||||
self.entryWirelessInterface.set_text(daemon.GetWirelessInterface())
|
|
||||||
self.entryWiredInterface.set_text(daemon.GetWiredInterface())
|
|
||||||
|
|
||||||
def_driver = daemon.GetWPADriver()
|
|
||||||
try:
|
|
||||||
self.wpadrivercombo.set_active(self.wpadrivers.index(def_driver))
|
|
||||||
except ValueError:
|
|
||||||
self.wpadrivercombo.set_active(0)
|
|
||||||
|
|
||||||
self.useGlobalDNSCheckbox.connect(
|
|
||||||
"toggled",
|
|
||||||
checkboxTextboxToggle,
|
|
||||||
(
|
|
||||||
self.dns1Entry, self.dns2Entry, self.dns3Entry,
|
|
||||||
self.dnsDomEntry, self.searchDomEntry
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
dns_addresses = daemon.GetGlobalDNSAddresses()
|
|
||||||
self.useGlobalDNSCheckbox.set_active(daemon.GetUseGlobalDNS())
|
|
||||||
self.dns1Entry.set_text(noneToBlankString(dns_addresses[0]))
|
|
||||||
self.dns2Entry.set_text(noneToBlankString(dns_addresses[1]))
|
|
||||||
self.dns3Entry.set_text(noneToBlankString(dns_addresses[2]))
|
|
||||||
self.dnsDomEntry.set_text(noneToBlankString(dns_addresses[3]))
|
|
||||||
self.searchDomEntry.set_text(noneToBlankString(dns_addresses[4]))
|
|
||||||
|
|
||||||
if not daemon.GetUseGlobalDNS():
|
|
||||||
self.searchDomEntry.set_sensitive(False)
|
|
||||||
self.dnsDomEntry.set_sensitive(False)
|
|
||||||
self.dns1Entry.set_sensitive(False)
|
|
||||||
self.dns2Entry.set_sensitive(False)
|
|
||||||
self.dns3Entry.set_sensitive(False)
|
|
||||||
|
|
||||||
cur_backend = daemon.GetSavedBackend()
|
|
||||||
try:
|
|
||||||
self.backendcombo.set_active(self.backends.index(cur_backend))
|
|
||||||
except ValueError:
|
|
||||||
self.backendcombo.set_active(0)
|
|
||||||
|
|
||||||
self.notificationscheckbox.set_active(
|
|
||||||
os.path.exists(
|
|
||||||
os.path.join(USER_SETTINGS_DIR, 'USE_NOTIFICATIONS')
|
|
||||||
))
|
|
||||||
|
|
||||||
# if pynotify isn't installed disable the option
|
|
||||||
if not pynotify:
|
|
||||||
self.notificationscheckbox.set_active(False)
|
|
||||||
self.notificationscheckbox.set_sensitive(False)
|
|
||||||
|
|
||||||
# if notifications were disabled with the configure flag
|
|
||||||
if wpath.no_use_notifications:
|
|
||||||
self.notificationscheckbox.set_active(False)
|
|
||||||
self.notificationscheckbox.hide()
|
|
||||||
self.wTree.get_object('label2').hide()
|
|
||||||
|
|
||||||
self.wTree.get_object("notebook2").set_current_page(0)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
"""Runs the preferences dialog window."""
|
|
||||||
return self.dialog.run()
|
|
||||||
|
|
||||||
def hide(self):
|
|
||||||
"""Hides the preferences dialog window."""
|
|
||||||
self.dialog.hide()
|
|
||||||
|
|
||||||
def destroy(self):
|
|
||||||
"""Destroy dialog."""
|
|
||||||
self.dialog.destroy()
|
|
||||||
|
|
||||||
def show_all(self):
|
|
||||||
"""Shows the preferences dialog window."""
|
|
||||||
self.dialog.show()
|
|
||||||
|
|
||||||
def save_results(self):
|
|
||||||
"""Pushes the selected settings to the daemon."""
|
|
||||||
daemon.SetUseGlobalDNS(self.useGlobalDNSCheckbox.get_active())
|
|
||||||
# Strip whitespace from DNS entries
|
|
||||||
for i in [self.dns1Entry, self.dns2Entry, self.dns3Entry,
|
|
||||||
self.dnsDomEntry, self.searchDomEntry]:
|
|
||||||
i.set_text(i.get_text().strip())
|
|
||||||
daemon.SetGlobalDNS(
|
|
||||||
self.dns1Entry.get_text(),
|
|
||||||
self.dns2Entry.get_text(),
|
|
||||||
self.dns3Entry.get_text(),
|
|
||||||
self.dnsDomEntry.get_text(),
|
|
||||||
self.searchDomEntry.get_text()
|
|
||||||
)
|
|
||||||
daemon.SetWirelessInterface(self.entryWirelessInterface.get_text())
|
|
||||||
daemon.SetWiredInterface(self.entryWiredInterface.get_text())
|
|
||||||
daemon.SetWPADriver(self.wpadrivers[self.wpadrivercombo.get_active()])
|
|
||||||
daemon.SetAlwaysShowWiredInterface(self.wiredcheckbox.get_active())
|
|
||||||
daemon.SetAutoReconnect(self.reconnectcheckbox.get_active())
|
|
||||||
daemon.SetDebugMode(self.debugmodecheckbox.get_active())
|
|
||||||
daemon.SetSignalDisplayType(int(self.displaytypecheckbox.get_active()))
|
|
||||||
daemon.SetShouldVerifyAp(bool(self.verifyapcheckbox.get_active()))
|
|
||||||
daemon.SetPreferWiredNetwork(
|
|
||||||
bool(self.preferwiredcheckbox.get_active()))
|
|
||||||
daemon.SetShowNeverConnect(
|
|
||||||
bool(self.showneverconnectcheckbox.get_active()))
|
|
||||||
if self.showlistradiobutton.get_active():
|
|
||||||
daemon.SetWiredAutoConnectMethod(2)
|
|
||||||
elif self.lastusedradiobutton.get_active():
|
|
||||||
daemon.SetWiredAutoConnectMethod(3)
|
|
||||||
else:
|
|
||||||
daemon.SetWiredAutoConnectMethod(1)
|
|
||||||
|
|
||||||
daemon.SetBackend(self.backends[self.backendcombo.get_active()])
|
|
||||||
|
|
||||||
# External Programs Tab
|
|
||||||
if self.dhcpautoradio.get_active():
|
|
||||||
dhcp_client = misc.AUTO
|
|
||||||
elif self.dhclientradio.get_active():
|
|
||||||
dhcp_client = misc.DHCLIENT
|
|
||||||
elif self.dhcpcdradio.get_active():
|
|
||||||
dhcp_client = misc.DHCPCD
|
|
||||||
elif self.pumpradio.get_active():
|
|
||||||
dhcp_client = misc.PUMP
|
|
||||||
else:
|
|
||||||
dhcp_client = misc.UDHCPC
|
|
||||||
daemon.SetDHCPClient(dhcp_client)
|
|
||||||
|
|
||||||
if self.linkautoradio.get_active():
|
|
||||||
link_tool = misc.AUTO
|
|
||||||
elif self.ethtoolradio.get_active():
|
|
||||||
link_tool = misc.ETHTOOL
|
|
||||||
else:
|
|
||||||
link_tool = misc.MIITOOL
|
|
||||||
daemon.SetLinkDetectionTool(link_tool)
|
|
||||||
|
|
||||||
if self.flushautoradio.get_active():
|
|
||||||
flush_tool = misc.AUTO
|
|
||||||
elif self.ipflushradio.get_active():
|
|
||||||
flush_tool = misc.IP
|
|
||||||
else:
|
|
||||||
flush_tool = misc.ROUTE
|
|
||||||
daemon.SetFlushTool(flush_tool)
|
|
||||||
|
|
||||||
if self.sudoautoradio.get_active():
|
|
||||||
sudo_tool = misc.AUTO
|
|
||||||
elif self.gksudoradio.get_active():
|
|
||||||
sudo_tool = misc.GKSUDO
|
|
||||||
elif self.kdesuradio.get_active():
|
|
||||||
sudo_tool = misc.KDESU
|
|
||||||
else:
|
|
||||||
sudo_tool = misc.KTSUSS
|
|
||||||
daemon.SetSudoApp(sudo_tool)
|
|
||||||
|
|
||||||
[width, height] = self.dialog.get_size()
|
|
||||||
|
|
||||||
not_path = os.path.join(USER_SETTINGS_DIR, 'USE_NOTIFICATIONS')
|
|
||||||
if self.notificationscheckbox.get_active():
|
|
||||||
if not os.path.exists(not_path):
|
|
||||||
open(not_path, 'w')
|
|
||||||
else:
|
|
||||||
if os.path.exists(not_path):
|
|
||||||
os.remove(not_path)
|
|
||||||
# if this GUI was started by a tray icon,
|
|
||||||
# instantly change the notifications there
|
|
||||||
if self.parent.tray:
|
|
||||||
self.parent.tray.icon_info.use_notify = \
|
|
||||||
self.notificationscheckbox.get_active()
|
|
||||||
|
|
||||||
def set_label(self, glade_str, label):
|
|
||||||
"""Sets the label for the given widget in wicd.glade."""
|
|
||||||
self.wTree.get_object(glade_str).set_label(label)
|
|
||||||
|
|
||||||
def prep_settings_diag(self):
|
|
||||||
"""Set up anything that doesn't have to be persisted later."""
|
|
||||||
def build_combobox(lbl):
|
|
||||||
"""Sets up a ComboBox using the given widget name."""
|
|
||||||
liststore = gtk.ListStore(gobject.TYPE_STRING)
|
|
||||||
combobox = self.wTree.get_object(lbl)
|
|
||||||
combobox.clear()
|
|
||||||
combobox.set_model(liststore)
|
|
||||||
cell = gtk.CellRendererText()
|
|
||||||
combobox.pack_start(cell, True)
|
|
||||||
combobox.add_attribute(cell, 'text', 0)
|
|
||||||
return combobox
|
|
||||||
|
|
||||||
def setup_label(name, lbl=""):
|
|
||||||
"""Sets up a label for the given widget name."""
|
|
||||||
widget = self.wTree.get_object(name)
|
|
||||||
# if lbl:
|
|
||||||
# widget.set_label(lbl)
|
|
||||||
if widget is None:
|
|
||||||
raise ValueError('widget %s does not exist' % name)
|
|
||||||
return widget
|
|
||||||
|
|
||||||
# External Programs tab
|
|
||||||
# self.wTree.get_object("gen_settings_label").set_label(_('General '
|
|
||||||
# 'Settings'))
|
|
||||||
# self.wTree.get_object("ext_prog_label").set_label(_('External '
|
|
||||||
# 'Programs'))
|
|
||||||
# self.wTree.get_object("dhcp_client_label").set_label(_('DHCP '
|
|
||||||
# 'Client'))
|
|
||||||
# self.wTree.get_object("wired_detect_label").set_label(_('Wired Link '
|
|
||||||
# 'Detection'))
|
|
||||||
# self.wTree.get_object("route_flush_label").set_label(_('Route Table '
|
|
||||||
# 'Flushing'))
|
|
||||||
# self.wTree.get_object("pref_backend_label").set_label(_('Backend') +
|
|
||||||
# ":")
|
|
||||||
|
|
||||||
# entryWiredAutoMethod = self.wTree.get_object("pref_wired_auto_label")
|
|
||||||
# entryWiredAutoMethod.set_label('Wired Autoconnect Setting:')
|
|
||||||
# entryWiredAutoMethod.set_alignment(0, 0)
|
|
||||||
# atrlist = pango.AttrList()
|
|
||||||
# atrlist.insert(pango.AttrWeight(pango.WEIGHT_BOLD, 0, 50))
|
|
||||||
# entryWiredAutoMethod.set_attributes(atrlist)
|
|
||||||
|
|
||||||
# self.set_label("pref_dns1_label", "%s 1" % _('DNS server'))
|
|
||||||
# self.set_label("pref_dns2_label", "%s 2" % _('DNS server'))
|
|
||||||
# self.set_label("pref_dns3_label", "%s 3" % _('DNS server'))
|
|
||||||
# self.set_label("pref_search_dom_label", "%s:" % _('Search domain'))
|
|
||||||
# self.set_label("pref_wifi_label", "%s:" % _('Wireless Interface'))
|
|
||||||
# self.set_label("pref_wired_label", "%s:" % _('Wired Interface'))
|
|
||||||
# self.set_label("pref_driver_label", "%s:" % _('WPA Supplicant '
|
|
||||||
# 'Driver'))
|
|
||||||
|
|
||||||
self.dialog = self.wTree.get_object("pref_dialog")
|
|
||||||
self.dialog.set_title(_('Preferences'))
|
|
||||||
self.dialog.set_icon_name('wicd-gtk')
|
|
||||||
width = int(gtk.gdk.screen_width() / 2.4)
|
|
||||||
if width > 450:
|
|
||||||
width = 450
|
|
||||||
self.dialog.resize(width, int(gtk.gdk.screen_height() / 2))
|
|
||||||
|
|
||||||
self.wiredcheckbox = setup_label("pref_always_check",
|
|
||||||
_('''Always show wired interface'''))
|
|
||||||
self.preferwiredcheckbox = setup_label("pref_prefer_wired_check",
|
|
||||||
"prefer_wired")
|
|
||||||
|
|
||||||
self.reconnectcheckbox = setup_label("pref_auto_check",
|
|
||||||
_('Automatically reconnect on '
|
|
||||||
'connection loss'))
|
|
||||||
self.showneverconnectcheckbox = setup_label(
|
|
||||||
"pref_show_never_connect_check", _('Show never connect networks'))
|
|
||||||
self.debugmodecheckbox = setup_label("pref_debug_check",
|
|
||||||
_('Enable debug mode'))
|
|
||||||
self.displaytypecheckbox = setup_label(
|
|
||||||
"pref_dbm_check", _('Use dBm to measure signal strength'))
|
|
||||||
self.verifyapcheckbox = setup_label(
|
|
||||||
"pref_verify_ap_check",
|
|
||||||
_('Ping static gateways after connecting to verify association'))
|
|
||||||
self.usedefaultradiobutton = setup_label(
|
|
||||||
"pref_use_def_radio",
|
|
||||||
_('Use default profile on wired autoconnect'))
|
|
||||||
self.showlistradiobutton = setup_label(
|
|
||||||
"pref_prompt_radio",
|
|
||||||
_('Prompt for profile on wired autoconnect'))
|
|
||||||
self.lastusedradiobutton = setup_label(
|
|
||||||
"pref_use_last_radio",
|
|
||||||
_('Use last used profile on wired autoconnect'))
|
|
||||||
|
|
||||||
self.notificationscheckbox = setup_label(
|
|
||||||
"pref_use_libnotify",
|
|
||||||
_('Display notifications about connection status'))
|
|
||||||
|
|
||||||
# DHCP Clients
|
|
||||||
self.dhcpautoradio = setup_label(
|
|
||||||
"dhcp_auto_radio", _('Automatic (recommended)'))
|
|
||||||
self.dhclientradio = self.wTree.get_object("dhclient_radio")
|
|
||||||
self.pumpradio = self.wTree.get_object("pump_radio")
|
|
||||||
self.dhcpcdradio = self.wTree.get_object("dhcpcd_radio")
|
|
||||||
self.udhcpcradio = self.wTree.get_object("udhcpc_radio")
|
|
||||||
|
|
||||||
# Wired Link Detection Apps
|
|
||||||
self.linkautoradio = setup_label("link_auto_radio",
|
|
||||||
_('Automatic (recommended)'))
|
|
||||||
self.linkautoradio = setup_label("link_auto_radio")
|
|
||||||
self.ethtoolradio = setup_label("ethtool_radio")
|
|
||||||
self.miitoolradio = setup_label("miitool_radio")
|
|
||||||
|
|
||||||
# Route Flushing Apps
|
|
||||||
self.flushautoradio = setup_label("flush_auto_radio",
|
|
||||||
_('Automatic (recommended)'))
|
|
||||||
self.ipflushradio = setup_label("ip_flush_radio")
|
|
||||||
self.routeflushradio = setup_label("route_flush_radio")
|
|
||||||
|
|
||||||
# Graphical Sudo Apps
|
|
||||||
self.sudoautoradio = setup_label("sudo_auto_radio",
|
|
||||||
_('Automatic (recommended)'))
|
|
||||||
self.gksudoradio = setup_label("gksudo_radio")
|
|
||||||
self.kdesuradio = setup_label("kdesu_radio")
|
|
||||||
self.ktsussradio = setup_label("ktsuss_radio")
|
|
||||||
|
|
||||||
# Replacement for the combo box hack
|
|
||||||
self.wpadrivercombo = build_combobox("pref_wpa_combobox")
|
|
||||||
self.wpadrivers = wireless.GetWpaSupplicantDrivers()
|
|
||||||
self.wpadrivers.append("ralink_legacy")
|
|
||||||
self.wpadrivers.append('none')
|
|
||||||
|
|
||||||
for x in self.wpadrivers:
|
|
||||||
self.wpadrivercombo.append_text(x)
|
|
||||||
|
|
||||||
self.entryWirelessInterface = self.wTree.get_object("pref_wifi_entry")
|
|
||||||
self.entryWiredInterface = self.wTree.get_object("pref_wired_entry")
|
|
||||||
|
|
||||||
# Set up global DNS stuff
|
|
||||||
self.useGlobalDNSCheckbox = setup_label("pref_global_check",
|
|
||||||
'use_global_dns')
|
|
||||||
self.searchDomEntry = self.wTree.get_object("pref_search_dom_entry")
|
|
||||||
self.dnsDomEntry = self.wTree.get_object("pref_dns_dom_entry")
|
|
||||||
self.dns1Entry = self.wTree.get_object("pref_dns1_entry")
|
|
||||||
self.dns2Entry = self.wTree.get_object("pref_dns2_entry")
|
|
||||||
self.dns3Entry = self.wTree.get_object("pref_dns3_entry")
|
|
||||||
|
|
||||||
self.backendcombo = build_combobox("pref_backend_combobox")
|
|
||||||
self.backendcombo.connect("changed", self.be_combo_changed)
|
|
||||||
# Load backend combobox
|
|
||||||
self.backends = daemon.GetBackendList()
|
|
||||||
self.be_descriptions = daemon.GetBackendDescriptionDict()
|
|
||||||
|
|
||||||
for x in self.backends:
|
|
||||||
if x:
|
|
||||||
if x == 'ioctl':
|
|
||||||
x = 'ioctl NOT SUPPORTED'
|
|
||||||
self.backendcombo.append_text(x)
|
|
||||||
|
|
||||||
def be_combo_changed(self, combo):
|
|
||||||
"""Update the description label for the given backend."""
|
|
||||||
self.backendcombo.set_tooltip_text(
|
|
||||||
self.be_descriptions[self.backends[combo.get_active()]])
|
|
||||||
1187
gtk/wicd-client.py
|
Before Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 608 B |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 922 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
@@ -1,178 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="720"
|
|
||||||
height="720"
|
|
||||||
id="svg2"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.46"
|
|
||||||
sodipodi:docname="wicd.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
|
||||||
version="1.0">
|
|
||||||
<defs
|
|
||||||
id="defs4">
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient3244">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#969696;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop3246" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop3248" />
|
|
||||||
</linearGradient>
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
id="perspective10" />
|
|
||||||
<inkscape:perspective
|
|
||||||
id="perspective2447"
|
|
||||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
|
||||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
|
||||||
inkscape:vp_y="0 : 1000 : 0"
|
|
||||||
inkscape:vp_x="0 : 526.18109 : 1"
|
|
||||||
sodipodi:type="inkscape:persp3d" />
|
|
||||||
<radialGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient3244"
|
|
||||||
id="radialGradient3250"
|
|
||||||
cx="382.01013"
|
|
||||||
cy="779.00507"
|
|
||||||
fx="382.01013"
|
|
||||||
fy="779.00507"
|
|
||||||
r="150.90694"
|
|
||||||
gradientTransform="matrix(1,0,0,0.7028571,0,231.4758)"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<radialGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient3244"
|
|
||||||
id="radialGradient4978"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1,0,0,0.7028571,0,231.4758)"
|
|
||||||
cx="382.01013"
|
|
||||||
cy="779.00507"
|
|
||||||
fx="382.01013"
|
|
||||||
fy="779.00507"
|
|
||||||
r="150.90694" />
|
|
||||||
<radialGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient3244"
|
|
||||||
id="radialGradient5001"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1,0,0,0.7028571,0,231.4758)"
|
|
||||||
cx="382.01013"
|
|
||||||
cy="779.00507"
|
|
||||||
fx="382.01013"
|
|
||||||
fy="779.00507"
|
|
||||||
r="150.90694" />
|
|
||||||
<radialGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient3244"
|
|
||||||
id="radialGradient5012"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1,0,0,0.7028571,0,231.4758)"
|
|
||||||
cx="382.01013"
|
|
||||||
cy="779.00507"
|
|
||||||
fx="382.01013"
|
|
||||||
fy="779.00507"
|
|
||||||
r="150.90694" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
gridtolerance="10000"
|
|
||||||
guidetolerance="10"
|
|
||||||
objecttolerance="10"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.57982756"
|
|
||||||
inkscape:cx="285.61634"
|
|
||||||
inkscape:cy="371.31656"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="1024"
|
|
||||||
inkscape:window-height="713"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0" />
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(-16,-9.9999999)">
|
|
||||||
<g
|
|
||||||
id="g5056"
|
|
||||||
style="opacity:1;fill:#00ff29;fill-opacity:1"
|
|
||||||
transform="matrix(1.1648659,0,0,0.9712156,4.240438,14.085049)">
|
|
||||||
<path
|
|
||||||
id="path2453"
|
|
||||||
d="M 186.59175,18.498 C 95.429114,33.24071 24.498002,144.28242 24.498,278.9355 C 24.498,419.56035 101.86548,534.42119 198.84175,540.748 C 137.82026,495.75066 95.154254,393.49877 95.154254,274.623 C 95.154254,163.86715 132.18304,67.53565 186.59175,18.498 z"
|
|
||||||
style="fill:#00ff29;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:16.99600029;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
style="fill:#00ff29;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:16.99600029;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
d="M 452.38876,18.498 C 543.5514,33.24071 614.48251,144.28242 614.48251,278.9355 C 614.48251,419.56035 537.11503,534.42119 440.13876,540.748 C 501.16025,495.75066 543.82626,393.49877 543.82626,274.623 C 543.82626,163.86715 506.79747,67.53565 452.38876,18.498 z"
|
|
||||||
id="path3232" />
|
|
||||||
<path
|
|
||||||
id="path3234"
|
|
||||||
d="M 386.35021,146.20734 C 431.4318,153.73978 466.50854,210.47392 466.50854,279.27174 C 466.50854,351.12069 428.2489,409.80612 380.29235,413.03866 C 410.4686,390.04833 431.56772,337.80514 431.56772,277.06836 C 431.56772,220.48028 413.25631,171.26197 386.35021,146.20734 z"
|
|
||||||
style="fill:#00ff29;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:8.54313183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
style="fill:#00ff29;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:8.54313183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
d="M 252.6303,146.20734 C 207.54871,153.73978 172.47197,210.47392 172.47197,279.27174 C 172.47197,351.12069 210.73161,409.80612 258.68816,413.03866 C 228.51191,390.04833 207.41279,337.80514 207.41279,277.06836 C 207.41279,220.48028 225.7242,171.26197 252.6303,146.20734 z"
|
|
||||||
id="path3236" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g5051"
|
|
||||||
transform="translate(56.913473,0)">
|
|
||||||
<path
|
|
||||||
transform="translate(-60.795204,-130.1329)"
|
|
||||||
d="M 443.23521,412.51678 A 62.949749,51.739521 0 1 1 317.33571,412.51678 A 62.949749,51.739521 0 1 1 443.23521,412.51678 z"
|
|
||||||
sodipodi:ry="51.739521"
|
|
||||||
sodipodi:rx="62.949749"
|
|
||||||
sodipodi:cy="412.51678"
|
|
||||||
sodipodi:cx="380.28546"
|
|
||||||
id="path3238"
|
|
||||||
style="stroke:none;stroke-width:16.99600029;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
sodipodi:type="arc" />
|
|
||||||
<rect
|
|
||||||
y="285.83316"
|
|
||||||
x="279.82327"
|
|
||||||
height="408.74219"
|
|
||||||
width="79.333931"
|
|
||||||
id="rect3240"
|
|
||||||
style="fill:#000000;fill-opacity:1;stroke-width:16.99600029;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
|
|
||||||
<rect
|
|
||||||
y="647.3656"
|
|
||||||
x="178.06889"
|
|
||||||
height="81.058578"
|
|
||||||
width="282.84271"
|
|
||||||
id="rect5017"
|
|
||||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:16.99600029;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 512 B |
|
Before Width: | Height: | Size: 521 B |
|
Before Width: | Height: | Size: 517 B |
|
Before Width: | Height: | Size: 519 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1022 B |
|
Before Width: | Height: | Size: 1022 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 946 B |
|
Before Width: | Height: | Size: 946 B |
|
Before Width: | Height: | Size: 1014 B |
|
Before Width: | Height: | Size: 1014 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 978 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 779 B |
|
Before Width: | Height: | Size: 804 B |
|
Before Width: | Height: | Size: 794 B |
|
Before Width: | Height: | Size: 790 B |
|
Before Width: | Height: | Size: 1018 B |
|
Before Width: | Height: | Size: 1018 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 941 B |
|
Before Width: | Height: | Size: 941 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 848 B |
|
Before Width: | Height: | Size: 900 B |
|
Before Width: | Height: | Size: 881 B |
|
Before Width: | Height: | Size: 868 B |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
@@ -1,682 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://web.resource.org/cc/"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
id="svg2"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
inkscape:version="0.45"
|
|
||||||
width="48"
|
|
||||||
height="48"
|
|
||||||
version="1.0"
|
|
||||||
sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/devices"
|
|
||||||
sodipodi:docname="network-wired.svg"
|
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:creator>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title>Lapo Calamandrei</dc:title>
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:creator>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<defs
|
|
||||||
id="defs5">
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7822">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7824" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7826" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7812">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7814" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7816" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7688">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7690" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#000000;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7692" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7660">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7662" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7664" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7652">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#729fcf;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7654" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#729fcf;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7656" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7576">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3465a4;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop7578" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#3465a4;stop-opacity:0"
|
|
||||||
offset="1"
|
|
||||||
id="stop7580" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7438">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7440" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7442" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7430">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7432" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7434" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient7422">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#edd400;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7424" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#edd400;stop-opacity:0;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7426" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7340">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#2e3436;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7342" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#555753;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop7344" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7277">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#555753;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop7279" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#d3d7cf;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop7281" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7269">
|
|
||||||
<stop
|
|
||||||
id="stop7271"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
id="stop7273"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#d3d7cf;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7263">
|
|
||||||
<stop
|
|
||||||
id="stop7265"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#adb0a8;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
id="stop7267"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7257">
|
|
||||||
<stop
|
|
||||||
id="stop7259"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#000000;stop-opacity:1" />
|
|
||||||
<stop
|
|
||||||
id="stop7261"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#000000;stop-opacity:0;" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7245">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#eeeeec;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7247" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7249" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7237">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#eeeeec;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop7239" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#babdb6;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7241" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient7186">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#888a85;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop7188" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop7190" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient6991">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#d3d7cf;stop-opacity:1"
|
|
||||||
offset="0"
|
|
||||||
id="stop6993" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffffff;stop-opacity:1"
|
|
||||||
offset="1"
|
|
||||||
id="stop6995" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient6991"
|
|
||||||
id="linearGradient6047"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(2.0000002,0,0,1.9333333,43.500004,0.533333)"
|
|
||||||
x1="-7.975069"
|
|
||||||
y1="25.357235"
|
|
||||||
x2="-11.005972"
|
|
||||||
y2="-6.5683565" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7340"
|
|
||||||
id="linearGradient7346"
|
|
||||||
x1="32.8125"
|
|
||||||
y1="21"
|
|
||||||
x2="32.8125"
|
|
||||||
y2="26.204767"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.0874899,0,0,1.086371,-1.5809531,-8.9433469)" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7422"
|
|
||||||
id="linearGradient7428"
|
|
||||||
x1="30.3125"
|
|
||||||
y1="27.313059"
|
|
||||||
x2="30.3125"
|
|
||||||
y2="24.6875"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7430"
|
|
||||||
id="linearGradient7436"
|
|
||||||
x1="28.875"
|
|
||||||
y1="29"
|
|
||||||
x2="29"
|
|
||||||
y2="16"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(1,-7)" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7438"
|
|
||||||
id="linearGradient7444"
|
|
||||||
x1="-7.8516631"
|
|
||||||
y1="3.7545938"
|
|
||||||
x2="-5.5098634"
|
|
||||||
y2="18.937717"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7422"
|
|
||||||
id="linearGradient7446"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="30.3125"
|
|
||||||
y1="27.313059"
|
|
||||||
x2="30.3125"
|
|
||||||
y2="24.6875" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7422"
|
|
||||||
id="linearGradient7448"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="30.3125"
|
|
||||||
y1="27.313059"
|
|
||||||
x2="30.3125"
|
|
||||||
y2="24.6875" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7422"
|
|
||||||
id="linearGradient7450"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="30.3125"
|
|
||||||
y1="27.313059"
|
|
||||||
x2="30.3125"
|
|
||||||
y2="24.6875" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7422"
|
|
||||||
id="linearGradient7452"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="30.3125"
|
|
||||||
y1="27.313059"
|
|
||||||
x2="30.3125"
|
|
||||||
y2="24.6875" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7263"
|
|
||||||
id="linearGradient7555"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="1.6256078"
|
|
||||||
y1="55.219357"
|
|
||||||
x2="0.82206726"
|
|
||||||
y2="54.415817" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7269"
|
|
||||||
id="linearGradient7557"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.9642856,0,0,0.9722222,-0.2500008,1.6944444)"
|
|
||||||
x1="-4.2208939"
|
|
||||||
y1="59.878922"
|
|
||||||
x2="-4.2208939"
|
|
||||||
y2="54.707691" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7257"
|
|
||||||
id="linearGradient7559"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(-4,-24)"
|
|
||||||
x1="-1.9887378"
|
|
||||||
y1="51.137787"
|
|
||||||
x2="-3.3587573"
|
|
||||||
y2="54" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7237"
|
|
||||||
id="linearGradient7561"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(-4,-24)"
|
|
||||||
x1="-4.6845822"
|
|
||||||
y1="52.640388"
|
|
||||||
x2="0.88388348"
|
|
||||||
y2="50.563263" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7245"
|
|
||||||
id="linearGradient7563"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(-4,-24)"
|
|
||||||
x1="-5.0823302"
|
|
||||||
y1="50.51907"
|
|
||||||
x2="0.26516503"
|
|
||||||
y2="49.458408" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7186"
|
|
||||||
id="linearGradient7565"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="translate(-4,-24)"
|
|
||||||
x1="-5.96875"
|
|
||||||
y1="52.875"
|
|
||||||
x2="-5.96875"
|
|
||||||
y2="51.812416" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7277"
|
|
||||||
id="linearGradient7567"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1,0,0,1.0285717,-4,-25.142872)"
|
|
||||||
x1="-3.5355339"
|
|
||||||
y1="55.866562"
|
|
||||||
x2="-3.5355339"
|
|
||||||
y2="59.444622" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7269"
|
|
||||||
id="linearGradient7574"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(1.1249999,0,0,1.1666666,15.874999,-34.135417)"
|
|
||||||
x1="-4.1097827"
|
|
||||||
y1="58.807774"
|
|
||||||
x2="-4.1097827"
|
|
||||||
y2="55.000004" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7576"
|
|
||||||
id="linearGradient7582"
|
|
||||||
x1="38.75"
|
|
||||||
y1="40.625"
|
|
||||||
x2="40.125"
|
|
||||||
y2="46.5625"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7652"
|
|
||||||
id="linearGradient7658"
|
|
||||||
x1="37.625"
|
|
||||||
y1="40.3125"
|
|
||||||
x2="38.875"
|
|
||||||
y2="45.0625"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7660"
|
|
||||||
id="linearGradient7666"
|
|
||||||
x1="41.1875"
|
|
||||||
y1="38.3125"
|
|
||||||
x2="42.123722"
|
|
||||||
y2="42.9375"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7688"
|
|
||||||
id="linearGradient7694"
|
|
||||||
x1="28.625"
|
|
||||||
y1="41.125"
|
|
||||||
x2="30.5"
|
|
||||||
y2="47.8125"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7812"
|
|
||||||
id="linearGradient7818"
|
|
||||||
x1="-6.40625"
|
|
||||||
y1="32.4375"
|
|
||||||
x2="-7.78125"
|
|
||||||
y2="34.5625"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<radialGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient7822"
|
|
||||||
id="radialGradient7828"
|
|
||||||
cx="14.363107"
|
|
||||||
cy="34.785942"
|
|
||||||
fx="14.363107"
|
|
||||||
fy="34.785942"
|
|
||||||
r="8.7946405"
|
|
||||||
gradientTransform="matrix(1,0,0,0.6884422,0,10.837832)"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<filter
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="filter5386">
|
|
||||||
<feGaussianBlur
|
|
||||||
inkscape:collect="always"
|
|
||||||
stdDeviation="0.26293105"
|
|
||||||
id="feGaussianBlur5388" />
|
|
||||||
</filter>
|
|
||||||
<filter
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="filter5406">
|
|
||||||
<feGaussianBlur
|
|
||||||
inkscape:collect="always"
|
|
||||||
stdDeviation="0.78208031"
|
|
||||||
id="feGaussianBlur5408" />
|
|
||||||
</filter>
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
inkscape:window-height="792"
|
|
||||||
inkscape:window-width="770"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
guidetolerance="10.0"
|
|
||||||
gridtolerance="10.0"
|
|
||||||
objecttolerance="10.0"
|
|
||||||
borderopacity="1"
|
|
||||||
bordercolor="#e8e8e8"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
id="base"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:showpageshadow="false"
|
|
||||||
gridspacingx="0.5px"
|
|
||||||
gridspacingy="0.5px"
|
|
||||||
gridempspacing="2"
|
|
||||||
showborder="true"
|
|
||||||
inkscape:grid-points="true"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:zoom="1"
|
|
||||||
inkscape:cx="39.213614"
|
|
||||||
inkscape:cy="4.7574714"
|
|
||||||
inkscape:window-x="369"
|
|
||||||
inkscape:window-y="135"
|
|
||||||
inkscape:current-layer="svg2"
|
|
||||||
width="48px"
|
|
||||||
height="48px"
|
|
||||||
inkscape:guide-points="false"
|
|
||||||
inkscape:object-nodes="false"
|
|
||||||
inkscape:object-points="false"
|
|
||||||
inkscape:object-paths="true"
|
|
||||||
inkscape:grid-bbox="true">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid4751" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<path
|
|
||||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642"
|
|
||||||
d="M 5,12 L 8,12 L 10,12 L 7,12 L 5,12 z "
|
|
||||||
id="path7013"
|
|
||||||
sodipodi:nodetypes="ccccc" />
|
|
||||||
<path
|
|
||||||
sodipodi:type="arc"
|
|
||||||
style="opacity:0.45895523;fill:url(#radialGradient7828);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999992;stroke-opacity:1"
|
|
||||||
id="path7820"
|
|
||||||
sodipodi:cx="14.363107"
|
|
||||||
sodipodi:cy="34.785942"
|
|
||||||
sodipodi:rx="8.7946405"
|
|
||||||
sodipodi:ry="6.0546017"
|
|
||||||
d="M 23.157747 34.785942 A 8.7946405 6.0546017 0 1 1 5.5684662,34.785942 A 8.7946405 6.0546017 0 1 1 23.157747 34.785942 z"
|
|
||||||
transform="matrix(1.1559927,0,0,1.1167882,-1.4892394,-5.8125919)" />
|
|
||||||
<rect
|
|
||||||
style="opacity:0.1204819;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642;filter:url(#filter5386)"
|
|
||||||
id="rect7696"
|
|
||||||
width="32.000004"
|
|
||||||
height="29"
|
|
||||||
x="15.375001"
|
|
||||||
y="2.875"
|
|
||||||
rx="3.7225697"
|
|
||||||
ry="3.7225697"
|
|
||||||
transform="matrix(1.015625,0,0,1.015625,-0.4902344,-0.2714844)" />
|
|
||||||
<rect
|
|
||||||
style="fill:url(#linearGradient6047);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642"
|
|
||||||
id="rect5925"
|
|
||||||
width="32.000004"
|
|
||||||
height="29"
|
|
||||||
x="14.500001"
|
|
||||||
y="1.5"
|
|
||||||
rx="2.8766227"
|
|
||||||
ry="2.780735" />
|
|
||||||
<path
|
|
||||||
sodipodi:type="inkscape:offset"
|
|
||||||
inkscape:radius="-0.99866015"
|
|
||||||
inkscape:original="M -12.5 0.5 C -13.608449 0.5 -14.5 1.3915505 -14.5 2.5 L -14.5 13.5 C -14.5 14.608449 -13.60845 15.5 -12.5 15.5 L -0.5 15.5 C 0.60844948 15.5 1.5 14.60845 1.5 13.5 L 1.5 2.5 C 1.5 1.3915505 0.60844948 0.5 -0.5 0.5 L -12.5 0.5 z "
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7444);stroke-width:0.47289537999999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999992000000000;stroke-opacity:0.99236641999999997"
|
|
||||||
id="path6964"
|
|
||||||
d="M -12.5,1.5 C -13.072952,1.5 -13.5,1.9270471 -13.5,2.5 L -13.5,13.5 C -13.5,14.072953 -13.072954,14.5 -12.5,14.5 L -0.5,14.5 C 0.072953444,14.5 0.5,14.072954 0.5,13.5 L 0.5,2.5 C 0.5,1.9270468 0.072953144,1.5 -0.5,1.5 L -12.5,1.5 z "
|
|
||||||
transform="matrix(2.1428572,0,0,2.0867798,44.428572,-0.6301697)" />
|
|
||||||
<path
|
|
||||||
sodipodi:type="inkscape:offset"
|
|
||||||
inkscape:radius="0.50945717"
|
|
||||||
inkscape:original="M 14.8125 31.5 C 14.8125 31.5 10.498126 34.830189 6.59375 38.0625 C 4.6415622 39.678655 2.8956918 41.28355 1.875 42.84375 C 1.3646541 43.62385 0.8878846 44.466971 1.21875 45.625 C 1.3841827 46.204014 1.8301355 46.746216 2.3125 47.03125 C 2.7948645 47.316284 3.2706533 47.437479 3.8125 47.5 C 5.9363798 47.745063 8.5434834 47.106406 11.65625 46.21875 C 14.769017 45.331094 18.325496 44.136387 21.90625 42.96875 C 25.487004 41.801113 29.102635 40.662687 32.25 39.96875 C 35.397365 39.274813 38.085104 39.083776 39.625 39.46875 C 40.353931 39.650983 40.370552 39.769574 40.375 39.78125 C 40.379448 39.792926 40.439577 40.11668 40.15625 40.71875 C 39.589596 41.92289 37.911115 43.835283 35.96875 45.65625 C 32.08402 49.298184 27.125 52.78125 27.125 52.78125 L 28.875 55.21875 C 28.875 55.21875 33.91598 51.701816 38.03125 47.84375 C 40.088885 45.914717 41.910404 43.95211 42.84375 41.96875 C 43.310423 40.97707 43.620552 39.855512 43.1875 38.71875 C 42.754448 37.581988 41.646069 36.849017 40.375 36.53125 C 37.914896 35.916224 34.93076 36.32675 31.59375 37.0625 C 28.25674 37.79825 24.575496 38.917637 20.96875 40.09375 C 17.362004 41.269863 13.840358 42.489218 10.84375 43.34375 C 7.9314529 44.174239 5.5458184 44.563842 4.375 44.46875 C 4.9949332 43.521138 6.6709378 41.915095 8.53125 40.375 C 12.251874 37.294811 16.5 34 16.5 34 L 14.8125 31.5 z "
|
|
||||||
style="opacity:0.31927712;fill:url(#linearGradient7694);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5406)"
|
|
||||||
id="path7678"
|
|
||||||
d="M 14.6875,31 C 14.619177,31.017916 14.555326,31.049841 14.5,31.09375 C 14.5,31.09375 10.195229,34.415989 6.28125,37.65625 C 4.316376,39.282908 2.5162731,40.913519 1.4375,42.5625 C 0.91466802,43.361686 0.33442463,44.404861 0.71875,45.75 C 0.9275427,46.480774 1.4549221,47.109726 2.0625,47.46875 C 2.6167319,47.796251 3.1674141,47.932778 3.75,48 C 6.0211642,48.262057 8.6583138,47.609306 11.78125,46.71875 C 14.911534,45.826099 18.484598,44.604207 22.0625,43.4375 C 25.639946,42.270942 29.261929,41.155126 32.375,40.46875 C 35.48201,39.783711 38.133895,39.627224 39.5,39.96875 C 39.718805,40.023451 39.763413,40.030877 39.84375,40.0625 C 39.824168,40.168535 39.78709,40.288372 39.6875,40.5 C 39.197395,41.541473 37.544362,43.481849 35.625,45.28125 C 31.779852,48.886076 26.84375,52.375 26.84375,52.375 C 26.730444,52.452627 26.653276,52.57271 26.629743,52.708026 C 26.60621,52.843342 26.638304,52.982428 26.71875,53.09375 L 28.46875,55.53125 C 28.637946,55.737822 28.937922,55.778728 29.15625,55.625 C 29.15625,55.625 34.220988,52.113137 38.375,48.21875 C 40.448974,46.2744 42.325551,44.284766 43.3125,42.1875 C 43.80516,41.140598 44.157793,39.847802 43.65625,38.53125 C 43.146184,37.192325 41.882294,36.376823 40.5,36.03125 C 37.894103,35.379776 34.829212,35.821579 31.46875,36.5625 C 28.102571,37.304681 24.425802,38.446749 20.8125,39.625 C 17.200009,40.802986 13.693676,41.995401 10.71875,42.84375 C 8.5379899,43.465629 6.8269173,43.771279 5.59375,43.875 C 6.3789191,42.999609 7.4710187,41.917692 8.84375,40.78125 C 12.555108,37.708732 16.8125,34.40625 16.8125,34.40625 C 17.029502,34.246251 17.084294,33.944894 16.9375,33.71875 L 15.25,31.21875 C 15.130504,31.030679 14.902661,30.942074 14.6875,31 z"
|
|
||||||
transform="translate(0.25,-0.625)" />
|
|
||||||
<g
|
|
||||||
id="g7542"
|
|
||||||
transform="translate(20,0)">
|
|
||||||
<g
|
|
||||||
transform="matrix(1.1666667,0,0,1.2,-3.833333,-36.2)"
|
|
||||||
id="g7162">
|
|
||||||
<path
|
|
||||||
style="fill:url(#linearGradient7555);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642"
|
|
||||||
d="M -2.34375,51 C -2.5485199,51 -2.7249072,51.101237 -2.84375,51.25 L -6.859375,55.25 C -6.8943841,55.381797 -6.9584881,55.521336 -7,55.65625 L -7,61.177083 C -7,61.540646 -6.7034811,61.833333 -6.34375,61.833333 L 0.34375,61.833333 C 0.52361547,61.833333 0.6951329,61.76445 0.8125,61.645833 L 4.8125,57.645833 C 4.9298671,57.527216 5,57.358864 5,57.177083 L 5,51.65625 C 5,51.474469 4.9298671,51.306117 4.8125,51.1875 C 4.6934039,51.068883 4.5236156,51 4.34375,51 L -2.34375,51 z "
|
|
||||||
id="rect6100"
|
|
||||||
sodipodi:nodetypes="cccccccccccscc" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccccccc"
|
|
||||||
style="fill:url(#linearGradient7557);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642"
|
|
||||||
d="M -6.3738568,55.166667 L 0.088142442,55.166667 C 0.43502581,55.166667 0.71428575,55.451224 0.71428575,55.804688 L 0.71428575,61.195312 C 0.71428575,61.548776 0.43502581,61.833333 0.088142442,61.833333 L -6.3738568,61.833333 C -6.7207401,61.833333 -7,61.548776 -7,61.195312 L -7,55.804688 C -7,55.451224 -6.7207401,55.166667 -6.3738568,55.166667 z "
|
|
||||||
id="path6105" />
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccc"
|
|
||||||
id="path7253"
|
|
||||||
d="M -5,25 L -10,30 L -6,30 L -1,25 L -5,25"
|
|
||||||
style="opacity:0.12313433;fill:url(#linearGradient7559);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccc"
|
|
||||||
id="path6126"
|
|
||||||
d="M -1,25 L -10.5,29 L -7,29 L -2,26 L -1,25"
|
|
||||||
style="fill:#babdb6;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="csssccccccssssccsccsccsccccscc"
|
|
||||||
id="path7235"
|
|
||||||
d="M -6.5625,25.5 C -6.586332,25.5 -6.617114,25.506448 -6.71875,25.625 C -6.748761,25.647634 -6.780064,25.668503 -6.8125,25.6875 C -6.832372,25.709273 -6.853227,25.730128 -6.875,25.75 C -6.894872,25.771773 -6.915727,25.792628 -6.9375,25.8125 L -6.96875,25.8125 C -6.988622,25.834273 -7.009477,25.855128 -7.03125,25.875 L -7.21875,26.0625 C -7.325593,26.162845 -7.453812,26.237639 -7.59375,26.28125 L -11.84375,27.5 C -12.244246,27.708356 -12.377785,27.84932 -12.4375,27.96875 C -12.438388,27.970526 -12.403483,28.103321 -12.4375,28.0625 C -12.355653,28.160716 -12.077127,28.314744 -11.59375,28.40625 C -11.253853,28.475121 -10.976692,28.720417 -10.867022,29.049424 C -10.757353,29.378432 -10.831905,29.740965 -11.0625,30 L -11.40625,30.375 C -11.426065,30.462564 -11.460093,30.545084 -11.5,30.6875 C -11.507455,30.714105 -11.491841,30.722726 -11.5,30.75 L -11.5,37.25 C -11.5,37.304188 -11.499624,37.365539 -11.4375,37.4375 C -11.40601,37.473977 -11.334247,37.5 -11.28125,37.5 L -3.4375,37.5 C -3.344928,37.5 -3.269061,37.4898 -3.21875,37.4375 C -3.218918,37.427084 -3.218918,37.416666 -3.21875,37.40625 L 1.4375,32.59375 C 1.489686,32.539502 1.5,32.514607 1.5,32.40625 L 1.5,25.78125 C 1.5,25.6729 1.489688,25.616751 1.4375,25.5625 C 1.400675,25.524775 1.282521,25.5 1.25,25.5 L -6.5625,25.5 z "
|
|
||||||
style="opacity:0.53358208;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccccsssccssccsccccccscc"
|
|
||||||
id="path7229"
|
|
||||||
d="M -6.5625,24.53125 C -6.950241,24.53125 -7.254192,24.749731 -7.46875,25 L -7.5,24.96875 L -7.53125,25.03125 L -7.875,25.34375 L -12.125,26.5625 C -12.157264,26.569585 -12.188688,26.58006 -12.21875,26.59375 C -12.767664,26.868207 -13.120777,27.147804 -13.3125,27.53125 C -13.504223,27.914696 -13.429021,28.397675 -13.1875,28.6875 C -12.859423,29.081192 -12.329894,29.239888 -11.78125,29.34375 L -12.1875,29.78125 C -12.243792,29.832657 -12.286698,29.897016 -12.3125,29.96875 C -12.343846,30.090131 -12.382395,30.284537 -12.4375,30.46875 C -12.45362,30.50878 -12.464136,30.550844 -12.46875,30.59375 L -12.46875,37.25 C -12.46875,37.54887 -12.355519,37.831675 -12.15625,38.0625 C -11.956981,38.293325 -11.645384,38.46875 -11.28125,38.46875 L -3.4375,38.46875 C -3.113867,38.46875 -2.780607,38.352963 -2.53125,38.09375 L 2.125,33.28125 C 2.35088,33.046445 2.46875,32.741604 2.46875,32.40625 L 2.46875,25.78125 C 2.46875,25.445897 2.350877,25.141055 2.125,24.90625 C 1.901344,24.677132 1.573636,24.53125 1.25,24.53125 L -6.5625,24.53125 z "
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#555753;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
id="path7184"
|
|
||||||
d="M -1,25 L -12,27.5 L -10,29 L -7,29 L -2,26 L -1,25"
|
|
||||||
style="fill:url(#linearGradient7561);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="ccccc"
|
|
||||||
id="path7171"
|
|
||||||
d="M -5,25 L -12,27 L -8,27 L -1,25 L -5,25"
|
|
||||||
style="fill:url(#linearGradient7563);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
id="rect7173"
|
|
||||||
d="M -12,27 L -8.2868349,27 L -8,27 C -10,28 -8.5,29 -7,29 L -11,29 C -12.5,29 -14,28 -12,27 z "
|
|
||||||
style="fill:url(#linearGradient7565);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
style="fill:url(#linearGradient7567);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642"
|
|
||||||
d="M -9.5941664,32 L -5.405834,32 C -5.181002,32 -5,32.195125 -5,32.4375 L -5,35.5625 C -5,35.804876 -5.181002,36 -5.405834,36 L -9.5941664,36 C -9.8189979,36 -10,35.804876 -10,35.5625 L -10,32.4375 C -10,32.195125 -9.8189979,32 -9.5941664,32 z "
|
|
||||||
id="path7275" />
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
style="opacity:1;fill:url(#linearGradient7346);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.69999992;stroke-opacity:1"
|
|
||||||
d="M 29.480478,10.068145 C 28.841463,10.068145 28.32502,10.584057 28.32502,11.222414 L 28.32502,11.510202 C 28.32502,11.803424 28.095708,12.053387 27.781275,12.053387 L 26.218008,12.053387 C 25.578993,12.053387 25.06255,12.756799 25.06255,13.395156 L 25.06255,19.840086 C 25.06255,20.478444 25.578994,20.994355 26.218008,20.994355 L 34.781992,20.994355 C 35.421007,20.994355 35.93745,20.478443 35.93745,19.840086 L 35.93745,13.395156 C 35.93745,12.756798 35.421008,12.053387 34.781992,12.053387 L 33.218725,12.053387 C 32.956948,12.071055 32.67498,11.867091 32.67498,11.527176 L 32.67498,11.222414 C 32.67498,10.584056 32.158536,10.068145 31.519522,10.068145 L 29.480478,10.068145 z"
|
|
||||||
id="rect7327"
|
|
||||||
sodipodi:nodetypes="ccccccccccccccccc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7436);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992000000000;stroke-opacity:1"
|
|
||||||
d="M 29.5625,9.4375 C 28.453144,9.4375 27.577814,10.345513 27.5,11.4375 L 26.5625,11.4375 C 25.40342,11.4375 24.4375,12.403421 24.4375,13.5625 L 24.4375,19.4375 C 24.4375,20.59658 25.403421,21.5625 26.5625,21.5625 L 34.4375,21.5625 C 35.59658,21.5625 36.5625,20.596579 36.5625,19.4375 L 36.5625,13.5625 C 36.5625,12.403423 35.596579,11.4375 34.4375,11.4375 L 33.5,11.4375 C 33.422186,10.345512 32.546855,9.4375 31.4375,9.4375 L 29.5625,9.4375 z "
|
|
||||||
id="path7350"
|
|
||||||
sodipodi:nodetypes="ccccccccccccc" />
|
|
||||||
<g
|
|
||||||
id="g7393"
|
|
||||||
style="fill-opacity:1;stroke:url(#linearGradient7428)"
|
|
||||||
transform="translate(1,-8)">
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
id="path7352"
|
|
||||||
d="M 26.5,26.5 L 26.5,24.5"
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7446);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
id="path7362"
|
|
||||||
d="M 28.5,26.5 L 28.5,24.5"
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7448);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
id="path7364"
|
|
||||||
d="M 30.5,26.5 L 30.5,24.5"
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7450);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cc"
|
|
||||||
id="path7366"
|
|
||||||
d="M 32.5,26.5 L 32.5,24.5"
|
|
||||||
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7452);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
style="fill:url(#linearGradient7658);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient7582);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
d="M 14.6875,30.5625 C 14.6875,30.5625 10.498126,33.830189 6.59375,37.0625 C 4.6415622,38.678655 2.8956918,40.28355 1.875,41.84375 C 1.3646541,42.62385 0.8878846,43.466971 1.21875,44.625 C 1.3841827,45.204014 1.8301355,45.746216 2.3125,46.03125 C 2.7948645,46.316284 3.2706533,46.437479 3.8125,46.5 C 5.9363798,46.745063 8.5434834,46.106406 11.65625,45.21875 C 14.769017,44.331094 18.325496,43.136387 21.90625,41.96875 C 25.487004,40.801113 29.102635,39.662687 32.25,38.96875 C 35.397365,38.274813 38.085104,38.083776 39.625,38.46875 C 40.353931,38.650983 40.370552,38.769574 40.375,38.78125 C 40.379448,38.792926 40.439577,39.11668 40.15625,39.71875 C 39.589596,40.92289 37.911115,42.835283 35.96875,44.65625 C 32.08402,48.298184 27.125,51.78125 27.125,51.78125 L 28.875,54.21875 C 28.875,54.21875 33.91598,50.701816 38.03125,46.84375 C 40.088885,44.914717 41.910404,42.95211 42.84375,40.96875 C 43.310423,39.97707 43.620552,38.855512 43.1875,37.71875 C 42.754448,36.581988 41.646069,35.849017 40.375,35.53125 C 37.914896,34.916224 34.93076,35.32675 31.59375,36.0625 C 28.25674,36.79825 24.575496,37.917637 20.96875,39.09375 C 17.362004,40.269863 13.840358,41.489218 10.84375,42.34375 C 7.9314529,43.174239 5.5458184,43.563842 4.375,43.46875 C 4.9949332,42.521138 6.6709378,40.915095 8.53125,39.375 C 12.251874,36.294811 16.5,33 16.5,33 L 14.6875,30.5625 z "
|
|
||||||
id="path7506"
|
|
||||||
sodipodi:nodetypes="cssssssssssssccssssssscscc" />
|
|
||||||
<path
|
|
||||||
style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient7666);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.19029851;fill-opacity:1.0"
|
|
||||||
d="M 15.672335,31.269607 C 15.672335,31.269607 -2.765165,43.957107 3.734835,44.707107 C 10.234835,45.457107 31.734835,34.707107 39.734835,36.707107 C 47.734835,38.707107 27.734835,52.707107 27.734835,52.707107"
|
|
||||||
id="path7502"
|
|
||||||
sodipodi:nodetypes="cssc" />
|
|
||||||
<path
|
|
||||||
style="fill:url(#linearGradient7574);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642"
|
|
||||||
d="M 10.088769,30.03125 L 10.40625,32.03125 L 14.59375,32.03125 C 14.818582,32.03125 15,32.226375 15,32.46875 L 15,35.59375 L 17,35.28125 L 17,30.8125 C 17,30.388343 16.685946,30.03125 16.28125,30.03125 L 10.088769,30.03125 z "
|
|
||||||
id="path7512"
|
|
||||||
sodipodi:nodetypes="ccccccccc" />
|
|
||||||
<path
|
|
||||||
style="fill:url(#linearGradient7818);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0.69999992;stroke-opacity:0.99236642;opacity:0.35447761"
|
|
||||||
d="M -9.5941664,32 L -5.405834,32 C -5.181002,32 -5,32.195125 -5,32.4375 L -5,35.5625 C -5,35.804876 -5.181002,36 -5.405834,36 L -9.5941664,36 C -9.8189979,36 -10,35.804876 -10,35.5625 L -10,32.4375 C -10,32.195125 -9.8189979,32 -9.5941664,32 z "
|
|
||||||
id="path7810"
|
|
||||||
transform="translate(20,0)" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 33 KiB |
@@ -1,156 +0,0 @@
|
|||||||
/* XPM */
|
|
||||||
static char *wicd_client[] = {
|
|
||||||
/* columns rows colors chars-per-pixel */
|
|
||||||
"32 32 118 2",
|
|
||||||
" c black",
|
|
||||||
". c #000100",
|
|
||||||
"X c #000200",
|
|
||||||
"o c #000300",
|
|
||||||
"O c #000301",
|
|
||||||
"+ c #000401",
|
|
||||||
"@ c #000501",
|
|
||||||
"# c #000601",
|
|
||||||
"$ c #000801",
|
|
||||||
"% c #000901",
|
|
||||||
"& c #000902",
|
|
||||||
"* c #000B02",
|
|
||||||
"= c #000F02",
|
|
||||||
"- c #001303",
|
|
||||||
"; c #001403",
|
|
||||||
": c #001804",
|
|
||||||
"> c #001B04",
|
|
||||||
", c #001E05",
|
|
||||||
"< c #001F05",
|
|
||||||
"1 c #002105",
|
|
||||||
"2 c #002205",
|
|
||||||
"3 c #002406",
|
|
||||||
"4 c #002706",
|
|
||||||
"5 c #002907",
|
|
||||||
"6 c #002D07",
|
|
||||||
"7 c #003008",
|
|
||||||
"8 c #003108",
|
|
||||||
"9 c #003408",
|
|
||||||
"0 c #003509",
|
|
||||||
"q c #003709",
|
|
||||||
"w c #003809",
|
|
||||||
"e c #003909",
|
|
||||||
"r c #003A09",
|
|
||||||
"t c #003C0A",
|
|
||||||
"y c #003F0A",
|
|
||||||
"u c #00400A",
|
|
||||||
"i c #00420B",
|
|
||||||
"p c #00440B",
|
|
||||||
"a c #00450B",
|
|
||||||
"s c #00460B",
|
|
||||||
"d c #004A0C",
|
|
||||||
"f c #004C0C",
|
|
||||||
"g c #004E0D",
|
|
||||||
"h c #004F0D",
|
|
||||||
"j c #00520D",
|
|
||||||
"k c #00530D",
|
|
||||||
"l c #00570E",
|
|
||||||
"z c #00590E",
|
|
||||||
"x c #005D0F",
|
|
||||||
"c c #006110",
|
|
||||||
"v c #006410",
|
|
||||||
"b c #006510",
|
|
||||||
"n c #006811",
|
|
||||||
"m c #006A11",
|
|
||||||
"M c #006D11",
|
|
||||||
"N c #006E12",
|
|
||||||
"B c #007012",
|
|
||||||
"V c #007312",
|
|
||||||
"C c #007613",
|
|
||||||
"Z c #007913",
|
|
||||||
"A c #008115",
|
|
||||||
"S c #008215",
|
|
||||||
"D c #008315",
|
|
||||||
"F c #008616",
|
|
||||||
"G c #008716",
|
|
||||||
"H c #008A16",
|
|
||||||
"J c #008B16",
|
|
||||||
"K c #008C16",
|
|
||||||
"L c #008E17",
|
|
||||||
"P c #008F17",
|
|
||||||
"I c #009017",
|
|
||||||
"U c #009117",
|
|
||||||
"Y c #009518",
|
|
||||||
"T c #009D19",
|
|
||||||
"R c #00A01A",
|
|
||||||
"E c #00A61B",
|
|
||||||
"W c #00A71B",
|
|
||||||
"Q c #00A81B",
|
|
||||||
"! c #00A91B",
|
|
||||||
"~ c #00AF1C",
|
|
||||||
"^ c #00B01C",
|
|
||||||
"/ c #00B11D",
|
|
||||||
"( c #00B21D",
|
|
||||||
") c #00B31D",
|
|
||||||
"_ c #00B91E",
|
|
||||||
"` c #00BA1E",
|
|
||||||
"' c #00BB1E",
|
|
||||||
"] c #00BC1E",
|
|
||||||
"[ c #00BF1F",
|
|
||||||
"{ c #00C11F",
|
|
||||||
"} c #00C820",
|
|
||||||
"| c #00CA20",
|
|
||||||
" . c #00CE21",
|
|
||||||
".. c #00D222",
|
|
||||||
"X. c #00D322",
|
|
||||||
"o. c #00D422",
|
|
||||||
"O. c #00D723",
|
|
||||||
"+. c #00DB23",
|
|
||||||
"@. c #00DC23",
|
|
||||||
"#. c #00DD24",
|
|
||||||
"$. c #00E024",
|
|
||||||
"%. c #00E124",
|
|
||||||
"&. c #00E725",
|
|
||||||
"*. c #00ED26",
|
|
||||||
"=. c #00EF26",
|
|
||||||
"-. c #00EF27",
|
|
||||||
";. c #00F127",
|
|
||||||
":. c #00F227",
|
|
||||||
">. c #00F427",
|
|
||||||
",. c #00F527",
|
|
||||||
"<. c #00F828",
|
|
||||||
"1. c #00F928",
|
|
||||||
"2. c #00FB28",
|
|
||||||
"3. c #00FC29",
|
|
||||||
"4. c #00FD29",
|
|
||||||
"5. c #00FE29",
|
|
||||||
"6. c #00FF29",
|
|
||||||
"7. c None",
|
|
||||||
/* pixels */
|
|
||||||
"7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7. ; 7.7.7.7.7.7.7.7.7.7.7.7.7.7. - 7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.5 Q < 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.> Q 6 7.7.7.7.7.",
|
|
||||||
"7.7.7.7.a :.h 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.s >.f 7.7.7.7.",
|
|
||||||
"7.7.7.0 ,.' 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7. ( <.t 7.7.7.",
|
|
||||||
"7.7.* +.6.i 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.e 6.%.= 7.7.",
|
|
||||||
"7.7.Z 6.#.. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7.7. o.6.S 7.7.",
|
|
||||||
"7.@ &.6.P 7.7.7.7.7.v l 7.7.7.7.7.7.7.7.j m 7.7.7.7.7.F 6.*.% 7.",
|
|
||||||
"7.a 6.6.k 7.7.7.7.j { 7.7.7.7.7.7.7.7.7.7.` z 7.7.7.7.d 6.6.g 7.",
|
|
||||||
"7.G 6.6.4 7.7.7.7.| C 7.7.7.7.7.7.7.7.7.7.B ..7.7.7.7., 6.6.I 7.",
|
|
||||||
" ) 6.6.& 7.7.7.y 6.u 7.7.7. 7.7.7.9 6.d 7.7.7.o 3.6.] ",
|
|
||||||
" | 6.1. 7.7.7.M 6.7.7.7. 7.7.7.2.V 7.7.7. -.6.X. ",
|
|
||||||
" .6.<. 7.7.7.V 6.7.7.7. 7.7.7.<.Z 7.7.7. =.6.O. ",
|
|
||||||
" [ 6.6.$ 7.7.7.x 6.7 7.7.7. 7.7.7.1 6.b 7.7.7.X 2.6.} ",
|
|
||||||
"7.T 6.6.3 7.7.7.7.;.n 7.7.7. 7.7.7.c ,.7.7.7.7.> 6.6.E ",
|
|
||||||
"7.b 6.6.h 7.7.7.7.L W 7.7.7. 7.7.7.R Y 7.7.7.7.s 6.6.N 7.",
|
|
||||||
"7.> 3.6.J 7.7.7.7.7.' s 7.7. 7.7.y [ 7.7.7.7.7.A 6.5.2 7.",
|
|
||||||
"7. ~ 6.O. 7.7.7.7.7.z O 7. 7.X l 7.7.7.7.7. .6._ 7.",
|
|
||||||
"7.7.7 2.6.r 7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.8 6.4.q 7.7.",
|
|
||||||
"7.7. D 6./ 7.7.7.7.7.7.7. 7.7.7.7.7.7.7. Q 6.K 7.7.",
|
|
||||||
"7.7.7.O ! 6.p 7.7.7.7.7.7.7. 7.7.7.7.7.7.7.t 5.^ @ 7.7.7.",
|
|
||||||
"7.7.7.7.+ H $.: 7.7.7.7.7.7. 7.7.7.7.7.7.; @.U # 7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.9 V $ 7.7.7.7.7. 7.7.7.7.7.# B w 7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7. 7.7.7.7. 7.7.7.7. 7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7.",
|
|
||||||
"7.7.7.7.7.7.7.7.7.7. 7.7.7.7.7.7.7.7.7.7."
|
|
||||||
};
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Network;Settings;Utility;X-GNOME-NetworkSettings;
|
|
||||||
Exec=wicd-gtk --tray
|
|
||||||
GenericName=Network Manager
|
|
||||||
Icon=wicd-gtk
|
|
||||||
Icon[en_US]=wicd-gtk
|
|
||||||
Name=Wicd Network Manager Tray
|
|
||||||
Name[en_US]=Wicd Network Manager Tray
|
|
||||||
Comment=Display network connection status in the system tray
|
|
||||||
Comment[en_US]=Display network connection status in the system tray
|
|
||||||
Comment[he]=הצגת מצב חיבור רשת במגש מערכת
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
Version=1.0
|
|
||||||
X-GNOME-Autostart-enabled=true
|
|
||||||
X-KDE-autostart-after=panel
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Categories=Network;Settings;Utility;X-GNOME-NetworkSettings;
|
|
||||||
Exec=wicd-gtk --no-tray
|
|
||||||
GenericName=Network Manager
|
|
||||||
Icon=wicd-gtk
|
|
||||||
Icon[en_US]=wicd-gtk
|
|
||||||
Name=Wicd Network Manager
|
|
||||||
Name[en_US]=Wicd Network Manager
|
|
||||||
Comment=Start the Wicd client without system tray icon
|
|
||||||
Comment[en_US]=Start the Wicd client without system tray icon
|
|
||||||
Comment[he]=הפעלת לקוח Wicd בלי סמל מגש מערכת
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
Version=1.0
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# check_firstrun()
|
|
||||||
if [ ! -d "$HOME/.wicd" ]; then
|
|
||||||
mkdir -p "$HOME/.wicd"
|
|
||||||
fi
|
|
||||||
# Make sure the user knows WHEREAREMYFILES ;-)
|
|
||||||
if [ -e "/var/lib/wicd/WHEREAREMYFILES" ] && [ ! -L "$HOME/.wicd/WHEREAREMYFILES" ]; then
|
|
||||||
ln -s "/var/lib/wicd/WHEREAREMYFILES" "$HOME/.wicd/WHEREAREMYFILES"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exec /usr/bin/python3 -O /usr/share/wicd/gtk/wicd-client.py $@
|
|
||||||
41
setup.py
@@ -437,7 +437,6 @@ class clear_generated(Command):
|
|||||||
for item in os.listdir('in'):
|
for item in os.listdir('in'):
|
||||||
if item.endswith('.in'):
|
if item.endswith('.in'):
|
||||||
print('Removing completed', item, end=' ')
|
print('Removing completed', item, end=' ')
|
||||||
original_name = os.path.join('in', item)
|
|
||||||
final_name = item[:-3].replace('=', '/')
|
final_name = item[:-3].replace('=', '/')
|
||||||
print(final_name, '...', end=' ')
|
print(final_name, '...', end=' ')
|
||||||
if os.path.exists(final_name):
|
if os.path.exists(final_name):
|
||||||
@@ -483,43 +482,6 @@ class install(_install):
|
|||||||
(wpath.postconnectscripts, [empty_file])
|
(wpath.postconnectscripts, [empty_file])
|
||||||
])
|
])
|
||||||
|
|
||||||
if not wpath.no_install_gtk:
|
|
||||||
data.append((wpath.desktop, ['other/wicd.desktop']))
|
|
||||||
data.append((wpath.bin, ['scripts/wicd-client']))
|
|
||||||
data.append((wpath.bin, ['scripts/wicd-gtk']))
|
|
||||||
data.append((wpath.gtk, [
|
|
||||||
'gtk/wicd-client.py',
|
|
||||||
'gtk/netentry.py',
|
|
||||||
'gtk/prefs.py',
|
|
||||||
'gtk/gui.py',
|
|
||||||
'gtk/guiutil.py',
|
|
||||||
'data/wicd.ui',
|
|
||||||
'gtk/configscript.py',
|
|
||||||
]))
|
|
||||||
data.append((wpath.autostart, ['other/wicd-tray.desktop']))
|
|
||||||
if not wpath.no_install_man:
|
|
||||||
data.append((wpath.mandir + 'man1/', ['man/wicd-client.1']))
|
|
||||||
for size in os.listdir('icons'):
|
|
||||||
for category in os.listdir(os.path.join('icons', size)):
|
|
||||||
imgdir = os.path.join('icons', size, category)
|
|
||||||
data.append((os.path.join(wpath.icons, size, category),
|
|
||||||
[(os.path.join(imgdir, f))
|
|
||||||
for f in os.listdir(imgdir)
|
|
||||||
if not f.startswith('.')]))
|
|
||||||
for size in os.listdir('images'):
|
|
||||||
for category in os.listdir(os.path.join('images', size)):
|
|
||||||
imgdir = os.path.join('images', size, category)
|
|
||||||
data.append((os.path.join(wpath.images, 'hicolor', size,
|
|
||||||
category),
|
|
||||||
[(os.path.join(imgdir, f))
|
|
||||||
for f in os.listdir(imgdir)
|
|
||||||
if not f.startswith('.')]))
|
|
||||||
data.append((wpath.pixmaps, ['other/wicd-gtk.xpm']))
|
|
||||||
if not wpath.no_install_gnome_shell_extensions:
|
|
||||||
data.append(
|
|
||||||
(wpath.gnome_shell_extensions + 'wicd@code.hanskalabs.net',
|
|
||||||
['gnome-shell/' + f for f in os.listdir('gnome-shell')])
|
|
||||||
)
|
|
||||||
if not wpath.no_install_ncurses:
|
if not wpath.no_install_ncurses:
|
||||||
data.append((wpath.curses, ['curses/curses_misc.py']))
|
data.append((wpath.curses, ['curses/curses_misc.py']))
|
||||||
data.append((wpath.curses, ['curses/prefs_curses.py']))
|
data.append((wpath.curses, ['curses/prefs_curses.py']))
|
||||||
@@ -548,9 +510,6 @@ class install(_install):
|
|||||||
data.append((wpath.docdir, ['INSTALL', 'LICENSE', 'AUTHORS',
|
data.append((wpath.docdir, ['INSTALL', 'LICENSE', 'AUTHORS',
|
||||||
'README', 'CHANGES', ]))
|
'README', 'CHANGES', ]))
|
||||||
data.append((wpath.varlib, ['other/WHEREAREMYFILES']))
|
data.append((wpath.varlib, ['other/WHEREAREMYFILES']))
|
||||||
if not wpath.no_install_kde:
|
|
||||||
if not wpath.no_install_gtk:
|
|
||||||
data.append((wpath.kdedir, ['other/wicd-tray.desktop']))
|
|
||||||
if not wpath.no_install_init:
|
if not wpath.no_install_init:
|
||||||
data.append((wpath.init, [wpath.initfile]))
|
data.append((wpath.init, [wpath.initfile]))
|
||||||
if not wpath.no_install_man:
|
if not wpath.no_install_man:
|
||||||
|
|||||||