1
0
mirror of https://github.com/gryf/wicd.git synced 2026-03-27 06:23:32 +01:00

More pylint fixes

This commit is contained in:
David Paleino
2012-11-17 19:12:25 +01:00
parent 5c4a9c327b
commit 64c6328241
11 changed files with 2107 additions and 1323 deletions

View File

@@ -12,21 +12,20 @@ Also recycles a lot of configscript.py, too. :-)
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
from wicd import misc
from wicd.translations import _
import configscript
from configscript import write_scripts, get_script_info, get_val
from configscript import write_scripts, get_script_info
from configscript import none_to_blank, blank_to_none
import urwid
@@ -41,6 +40,7 @@ post_entry = None
pre_disconnect_entry = None
post_disconnect_entry = None
def main(argv):
""" Main function. """
global ui, frame
@@ -54,17 +54,17 @@ def main(argv):
('focus', 'dark magenta', 'light gray'),
('editcp', 'default', 'default', 'standout'),
('editbx', 'light gray', 'dark blue'),
('editfc', 'white','dark blue', 'bold'),
('editfc', 'white', 'dark blue', 'bold'),
])
network = argv[1]
network_type = argv[2]
script_info = get_script_info(network, network_type)
blank = urwid.Text('')
pre_entry_t = ('body', _('Pre-connection Script') + ': ')
post_entry_t = ('body', _('Post-connection Script') + ': ')
post_entry_t = ('body', _('Post-connection Script') + ': ')
pre_disconnect_entry_t = ('body', _('Pre-disconnection Script') + ': ')
post_disconnect_entry_t = ('body', _('Post-disconnection Script') + ': ')
@@ -74,23 +74,23 @@ def main(argv):
'editbx', 'editfc')
post_entry = urwid.AttrWrap(urwid.Edit(post_entry_t,
none_to_blank(script_info.get('post_entry'))),
'editbx','editfc')
'editbx', 'editfc')
pre_disconnect_entry = urwid.AttrWrap(urwid.Edit(pre_disconnect_entry_t,
none_to_blank(script_info.get('pre_disconnect_entry'))),
'editbx', 'editfc')
post_disconnect_entry = urwid.AttrWrap(urwid.Edit(post_disconnect_entry_t,
none_to_blank(script_info.get('post_disconnect_entry'))),
'editbx','editfc')
'editbx', 'editfc')
# The buttons
ok_button = urwid.AttrWrap(
urwid.Button(_('OK'), ok_callback),
'body','focus'
'body', 'focus'
)
cancel_button = urwid.AttrWrap(
urwid.Button(_('Cancel'), cancel_callback),
'body','focus'
'body', 'focus'
)
button_cols = urwid.Columns([ok_button, cancel_button], dividechars=1)
@@ -101,12 +101,12 @@ def main(argv):
('fixed', 2, urwid.Filler(pre_disconnect_entry)),
('fixed', 2, urwid.Filler(post_disconnect_entry)),
#blank, blank, blank, blank, blank,
urwid.Filler(button_cols,'bottom')
urwid.Filler(button_cols, 'bottom')
])
frame = urwid.Frame(lbox)
result = ui.run_wrapper(run)
if result == True:
if result:
script_info["pre_entry"] = blank_to_none(pre_entry.get_edit_text())
script_info["post_entry"] = blank_to_none(post_entry.get_edit_text())
script_info["pre_disconnect_entry"] = \
@@ -117,13 +117,22 @@ def main(argv):
OK_PRESSED = False
CANCEL_PRESSED = False
def ok_callback(button_object, user_data=None):
""" Callback. """
global OK_PRESSED
OK_PRESSED = True
def cancel_callback(button_object, user_data=None):
""" Callback. """
global CANCEL_PRESSED
CANCEL_PRESSED = True
def run():
""" Run the UI. """
dim = ui.get_cols_rows()
ui.set_mouse_tracking()

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python
# -* coding: utf-8 -*-
""" curses_misc.py: Module for various widgets that are used throughout
""" curses_misc.py: Module for various widgets that are used throughout
wicd-curses.
"""
@@ -11,12 +11,12 @@ wicd-curses.
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
@@ -26,6 +26,7 @@ import urwid
from wicd.translations import _
# Uses code that is towards the bottom
def error(ui, parent, message):
"""Shows an error dialog (or something that resembles one)"""
@@ -35,6 +36,7 @@ def error(ui, parent, message):
dialog = TextDialog(message, 6, 40, ('important', 'ERROR'))
return dialog.run(ui, parent)
class SelText(urwid.Text):
"""A selectable text widget. See urwid.Text."""
@@ -46,11 +48,13 @@ class SelText(urwid.Text):
"""Don't handle any keys."""
return key
class NSelListBox(urwid.ListBox):
""" Non-selectable ListBox. """
def selectable(self):
return False
# This class is annoying. :/
class DynWrap(urwid.AttrWrap):
"""
@@ -62,8 +66,8 @@ class DynWrap(urwid.AttrWrap):
attrs = tuple of (attr_sens,attr_not_sens)
attrfoc = attributes when in focus, defaults to nothing
"""
def __init__(self, w, sensitive=True, attrs=('editbx', 'editnfc'), \
# pylint: disable-msg=W0231
def __init__(self, w, sensitive=True, attrs=('editbx', 'editnfc'),
focus_attr='editfc'):
self._attrs = attrs
self._sensitive = sensitive
@@ -73,11 +77,13 @@ class DynWrap(urwid.AttrWrap):
else:
cur_attr = attrs[1]
# pylint: disable-msg=E1101
self.__super.__init__(w, cur_attr, focus_attr)
def get_sensitive(self):
""" Getter for sensitive property. """
return self._sensitive
def set_sensitive(self, state):
""" Setter for sensitive property. """
if state:
@@ -90,6 +96,7 @@ class DynWrap(urwid.AttrWrap):
def get_attrs(self):
""" Getter for attrs property. """
return self._attrs
def set_attrs(self, attrs):
""" Setter for attrs property. """
self._attrs = attrs
@@ -98,36 +105,47 @@ class DynWrap(urwid.AttrWrap):
def selectable(self):
return self._sensitive
class DynEdit(DynWrap):
""" Edit DynWrap'ed to the most common specifications. """
# pylint: disable-msg=W0231
def __init__(self, caption='', edit_text='', sensitive=True,
attrs=('editbx', 'editnfc'), focus_attr='editfc'):
caption = ('editcp', caption + ': ')
edit = urwid.Edit(caption, edit_text)
# pylint: disable-msg=E1101
self.__super.__init__(edit, sensitive, attrs, focus_attr)
class DynIntEdit(DynWrap):
""" IntEdit DynWrap'ed to the most common specifications. """
# pylint: disable-msg=W0231
def __init__(self, caption='', edit_text='', sensitive=True,
attrs=('editbx', 'editnfc'), focus_attr='editfc'):
caption = ('editcp', caption + ':')
edit = urwid.IntEdit(caption, edit_text)
# pylint: disable-msg=E1101
self.__super.__init__(edit, sensitive, attrs, focus_attr)
class DynRadioButton(DynWrap):
""" RadioButton DynWrap'ed to the most common specifications. """
# pylint: disable-msg=W0231
def __init__(self, group, label, state='first True', on_state_change=None,
user_data=None, sensitive=True, attrs=('body', 'editnfc'),
focus_attr='body'):
#caption = ('editcp', caption + ':')
button = urwid.RadioButton(group, label, state, on_state_change,
user_data)
# pylint: disable-msg=E1101
self.__super.__init__(button, sensitive, attrs, focus_attr)
class MaskingEditException(Exception):
""" Custom exception. """
pass
# Password-style edit
class MaskingEdit(urwid.Edit):
"""
@@ -135,37 +153,47 @@ class MaskingEdit(urwid.Edit):
"always" : everything is a '*' all of the time
"no_focus" : everything is a '*' only when not in focus
"off" : everything is always unmasked
mask_char = the single character that masks all other characters in the field
mask_char = the single character that masks all other characters in the
field
"""
def __init__(self, caption = "", edit_text = "", multiline = False,
align = 'left', wrap = 'space', allow_tab = False,
edit_pos = None, layout=None, mask_mode="always",mask_char='*'):
# pylint: disable-msg=W0231
def __init__(self, caption="", edit_text="", multiline=False, align='left',
wrap='space', allow_tab=False, edit_pos=None, layout=None,
mask_mode="always", mask_char='*'):
self.mask_mode = mask_mode
if len(mask_char) > 1:
raise MaskingEditException('Masks of more than one character are' +\
raise MaskingEditException('Masks of more than one character are' +
' not supported!')
self.mask_char = mask_char
# pylint: disable-msg=E1101
self.__super.__init__(caption, edit_text, multiline, align, wrap,
allow_tab, edit_pos, layout)
def get_caption(self):
""" Return caption. """
return self.caption
def get_mask_mode(self):
""" Getter for mask_mode property. """
return self.mask_mode
def set_mask_mode(self, mode):
""" Setter for mask_mode property."""
self.mask_mode = mode
def get_masked_text(self):
return self.mask_char*len(self.get_edit_text())
""" Get masked out text. """
return self.mask_char * len(self.get_edit_text())
def render(self, (maxcol, ), focus=False):
"""
"""
Render edit widget and return canvas. Include cursor when in
focus.
"""
# If we aren't masking anything ATM, then act like an Edit.
# No problems.
if self.mask_mode == "off" or (self.mask_mode == 'no_focus' and focus):
# pylint: disable-msg=E1101
canv = self.__super.render((maxcol, ), focus)
# The cache messes this thing up, because I am totally changing what
# is displayed.
@@ -173,7 +201,7 @@ class MaskingEdit(urwid.Edit):
return canv
# Else, we have a slight mess to deal with...
self._shift_view_to_cursor = not not focus # force bool
self._shift_view_to_cursor = not not focus # force bool
text, attr = self.get_text()
text = text[:len(self.caption)] + self.get_masked_text()
@@ -186,6 +214,7 @@ class MaskingEdit(urwid.Edit):
return canv
class TabColumns(urwid.WidgetWrap):
"""
Tabbed interface, mostly for use in the Preferences Dialog
@@ -195,13 +224,14 @@ class TabColumns(urwid.WidgetWrap):
attrsel = attribute when active
"""
# FIXME Make the bottom_part optional
# pylint: disable-msg=W0231
def __init__(self, tab_str, tab_wid, title, bottom_part=None,
attr=('body', 'focus'), attrsel='tab active', attrtitle='header'):
#self.bottom_part = bottom_part
#title_wid = urwid.Text((attrtitle, title), align='right')
column_list = []
for w in tab_str:
text, _ = w.get_text()
text, trash = w.get_text()
column_list.append(('fixed', len(text), w))
column_list.append(urwid.Text((attrtitle, title), align='right'))
@@ -212,6 +242,7 @@ class TabColumns(urwid.WidgetWrap):
#self.listbox = urwid.ListBox(walker)
self.gen_pile(tab_wid[0], True)
self.frame = urwid.Frame(self.pile)
# pylint: disable-msg=E1101
self.__super.__init__(self.frame)
def gen_pile(self, lbox, firstrun=False):
@@ -271,6 +302,7 @@ class ComboBoxException(Exception):
""" Custom exception. """
pass
# A "combo box" of SelTexts
# I based this off of the code found here:
# http://excess.org/urwid/browser/contrib/trunk/rbreu_menus.py
@@ -281,6 +313,7 @@ class ComboBox(urwid.WidgetWrap):
"""A ComboBox of text objects"""
class ComboSpace(urwid.WidgetWrap):
"""The actual menu-like space that comes down from the ComboBox"""
# pylint: disable-msg=W0231
def __init__(self, l, body, ui, show_first, pos=(0, 0),
attr=('body', 'focus')):
"""
@@ -291,7 +324,7 @@ class ComboBox(urwid.WidgetWrap):
pos : a tuple of (row,col) where to put the list
attr : a tuple of (attr_no_focus,attr_focus)
"""
#Calculate width and height of the menu widget:
height = len(l)
width = 0
@@ -305,13 +338,14 @@ class ComboBox(urwid.WidgetWrap):
overlay = urwid.Overlay(self._listbox, body, ('fixed left', pos[0]),
width + 2, ('fixed top', pos[1]), height)
# pylint: disable-msg=E1101
self.__super.__init__(overlay)
def show(self, ui, display):
""" Show widget. """
dim = ui.get_cols_rows()
keys = True
#Event loop:
while True:
if keys:
@@ -334,11 +368,12 @@ class ComboBox(urwid.WidgetWrap):
#def get_size(self):
def __init__(self, label='', l=[], attrs=('body', 'editnfc'),
# pylint: disable-msg=W0231
def __init__(self, label='', l=None, attrs=('body', 'editnfc'),
focus_attr='focus', use_enter=True, focus=0, callback=None,
user_args=None):
"""
label : bit of text that preceeds the combobox. If it is "", then
label : bit of text that preceeds the combobox. If it is "", then
ignore it
l : stuff to include in the combobox
body : parent widget
@@ -348,14 +383,16 @@ class ComboBox(urwid.WidgetWrap):
callback : function that takes (combobox,sel_index,user_args=None)
user_args : user_args in the callback
"""
self.DOWN_ARROW = ' vvv'
self.label = urwid.Text(label)
self.attrs = attrs
self.focus_attr = focus_attr
if l is None:
l = []
self.list = l
s, _ = self.label.get_text()
s, trash = self.label.get_text()
self.overlay = None
self.cbox = DynWrap(SelText(self.DOWN_ARROW), attrs=attrs,
@@ -368,6 +405,7 @@ class ComboBox(urwid.WidgetWrap):
)
else:
w = urwid.Columns([self.cbox])
# pylint: disable-msg=E1101
self.__super.__init__(w)
# We need this to pick our keypresses
@@ -387,9 +425,11 @@ class ComboBox(urwid.WidgetWrap):
self.row = None
def set_list(self, l):
""" Populate widget list. """
self.list = l
def set_focus(self, index):
""" Set widget focus. """
if urwid.VERSION < (1, 1, 0):
self.focus = index
else:
@@ -407,15 +447,17 @@ class ComboBox(urwid.WidgetWrap):
self.overlay._listbox.set_focus(index)
def rebuild_combobox(self):
""" Rebuild combobox. """
self.build_combobox(self.parent, self.ui, self.row)
def build_combobox(self, parent, ui, row):
s, _ = self.label.get_text()
""" Build combobox. """
s, trash = self.label.get_text()
if urwid.VERSION < (1, 1, 0):
index = self.focus
else:
index = self._w.focus_position
index = self._w.focus_position # pylint: disable-msg=E1103
self.cbox = DynWrap(SelText([self.list[index] + self.DOWN_ARROW]),
attrs=self.attrs, focus_attr=self.focus_attr)
@@ -437,45 +479,57 @@ class ComboBox(urwid.WidgetWrap):
# If we press space or enter, be a combo box!
def keypress(self, size, key):
""" Handle keypresses. """
activate = key == ' '
if self.use_enter:
activate = activate or key == 'enter'
if activate:
# Die if the user didn't prepare the combobox overlay
if self.overlay == None:
if self.overlay is None:
raise ComboBoxException('ComboBox must be built before use!')
retval = self.overlay.show(self.ui, self.parent)
if retval != None:
if retval is not None:
self.set_focus(self.list.index(retval))
#self.cbox.set_w(SelText(retval+' vvv'))
if self.callback != None:
if self.callback is not None:
self.callback(self, self.overlay._listbox.get_focus()[1],
self.user_args)
return self._w.keypress(size, key)
def selectable(self):
""" Return whether the widget is selectable. """
return self.cbox.selectable()
def get_focus(self):
""" Return widget focus. """
if self.overlay:
return self.overlay._listbox.get_focus()
else:
if urwid.VERSION < (1, 1, 0):
return None, self.focus
else:
return None, self._w.focus_position
return None, self._w.focus_position # pylint: disable-msg=E1103
def get_sensitive(self):
""" Return widget sensitivity. """
return self.cbox.get_sensitive()
def set_sensitive(self, state):
""" Set widget sensitivity. """
self.cbox.set_sensitive(state)
# This is a h4x3d copy of some of the code in Ian Ward's dialog.py example.
class DialogExit(Exception):
""" Custom exception. """
pass
class Dialog2(urwid.WidgetWrap):
def __init__(self, text, height, width, body=None ):
""" Base class for other dialogs. """
def __init__(self, text, height, width, body=None):
self.buttons = None
self.width = int(width)
if width <= 0:
self.width = ('relative', 80)
@@ -499,6 +553,7 @@ class Dialog2(urwid.WidgetWrap):
# buttons: tuple of name,exitcode
def add_buttons(self, buttons):
""" Add buttons. """
l = []
maxlen = 0
for name, exitcode in buttons:
@@ -507,7 +562,7 @@ class Dialog2(urwid.WidgetWrap):
b = urwid.AttrWrap(b, 'body', 'focus')
l.append(b)
maxlen = max(len(name), maxlen)
maxlen += 4 # because of '< ... >'
maxlen += 4 # because of '< ... >'
self.buttons = urwid.GridFlow(l, maxlen, 3, 1, 'center')
self.frame.footer = urwid.Pile([
urwid.Divider(),
@@ -515,9 +570,11 @@ class Dialog2(urwid.WidgetWrap):
], focus_item=1)
def button_press(self, button):
""" Handle button press. """
raise DialogExit(button.exitcode)
def run(self, ui, parent):
""" Run the UI. """
ui.set_mouse_tracking()
size = ui.get_cols_rows()
overlay = urwid.Overlay(
@@ -551,15 +608,18 @@ class Dialog2(urwid.WidgetWrap):
self.unhandled_key(size, k)
except DialogExit, e:
return self.on_exit(e.args[0])
def on_exit(self, exitcode):
""" Handle dialog exit. """
return exitcode, ""
def unhandled_key(self, size, key):
""" Handle keypresses. """
pass
# Simple dialog with text in it and "OK"
class TextDialog(Dialog2):
""" Simple dialog with text and "OK" button. """
def __init__(self, text, height, width, header=None, align='left',
buttons=(_('OK'), 1)):
l = [urwid.Text(text)]
@@ -573,23 +633,27 @@ class TextDialog(Dialog2):
self.add_buttons([buttons])
def unhandled_key(self, size, k):
""" Handle keys. """
if k in ('up', 'page up', 'down', 'page down'):
self.frame.set_focus('body')
self.view.keypress( size, k )
self.view.keypress(size, k)
self.frame.set_focus('footer')
class InputDialog(Dialog2):
""" Simple dialog with text and entry. """
def __init__(self, text, height, width, ok_name=_('OK'), edit_text=''):
self.edit = urwid.Edit(wrap='clip', edit_text=edit_text)
body = urwid.ListBox([self.edit])
body = urwid.AttrWrap(body, 'editbx', 'editfc')
Dialog2.__init__(self, text, height, width, body)
self.frame.set_focus('body')
self.add_buttons([(ok_name, 0), (_('Cancel'), -1)])
def unhandled_key(self, size, k):
""" Handle keys. """
if k in ('up', 'page up'):
self.frame.set_focus('body')
if k in ('down', 'page down'):
@@ -598,28 +662,36 @@ class InputDialog(Dialog2):
# pass enter to the "ok" button
self.frame.set_focus('footer')
self.view.keypress(size, k)
def on_exit(self, exitcode):
""" Handle dialog exit. """
return exitcode, self.edit.get_edit_text()
class ClickCols(urwid.WidgetWrap):
""" Clickable menubar. """
# pylint: disable-msg=W0231
def __init__(self, items, callback=None, args=None):
cols = urwid.Columns(items)
# pylint: disable-msg=E1101
self.__super.__init__(cols)
self.callback = callback
self.args = args
def mouse_event(self, size, event, button, x, y, focus):
""" Handle mouse events. """
if event == "mouse press":
# The keypress dealie in wicd-curses.py expects a list of keystrokes
self.callback([self.args])
# htop-style menu menu-bar on the bottom of the screen
class OptCols(urwid.WidgetWrap):
""" Htop-style menubar on the bottom of the screen. """
# tuples = [(key,desc)], on_event gets passed a key
# attrs = (attr_key,attr_desc)
# handler = function passed the key of the "button" pressed
# mentions of 'left' and right will be converted to <- and -> respectively
# pylint: disable-msg=W0231
def __init__(self, tuples, handler, attrs=('body', 'infobar'), debug=False):
# Find the longest string. Keys for this bar should be no greater than
# 2 characters long (e.g., -> for left)
@@ -628,18 +700,18 @@ class OptCols(urwid.WidgetWrap):
# newmax = len(i[0])+len(i[1])
# if newmax > maxlen:
# maxlen = newmax
# Construct the texts
textList = []
i = 0
# callbacks map the text contents to its assigned callback.
self.callbacks = []
for cmd in tuples:
key = reduce(lambda s, (f, t): s.replace(f, t), [ \
('ctrl ', 'Ctrl+'), ('meta ', 'Alt+'), \
('left', '<-'), ('right', '->'), \
('page up', 'Page Up'), ('page down', 'Page Down'), \
('esc', 'ESC'), ('enter', 'Enter'), ('f10','F10')], cmd[0])
key = reduce(lambda s, (f, t): s.replace(f, t), [
('ctrl ', 'Ctrl+'), ('meta ', 'Alt+'),
('left', '<-'), ('right', '->'),
('page up', 'Page Up'), ('page down', 'Page Down'),
('esc', 'ESC'), ('enter', 'Enter'), ('f10', 'F10')], cmd[0])
if debug:
callback = self.debugClick
@@ -657,12 +729,17 @@ class OptCols(urwid.WidgetWrap):
if debug:
self.debug = urwid.Text("DEBUG_MODE")
textList.append(('fixed', 10, self.debug))
cols = urwid.Columns(textList)
# pylint: disable-msg=E1101
self.__super.__init__(cols)
def debugClick(self, args):
""" Debug clicks. """
self.debug.set_text(args)
def mouse_event(self, size, event, button, x, y, focus):
""" Handle mouse events. """
# Widgets are evenly long (as of current), so...
return self._w.mouse_event(size, event, button, x, y, focus)

View File

@@ -10,19 +10,19 @@
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
import urwid
from curses_misc import TextDialog,DynWrap,MaskingEdit,ComboBox,error
from curses_misc import DynWrap, MaskingEdit, ComboBox, error
import wicd.misc as misc
from wicd.misc import noneToString, stringToNone, noneToBlankString, to_bool
@@ -32,88 +32,124 @@ import os
daemon = None
wired = None
wireless = None
# Call this first!
def dbus_init(dbus_ifaces):
global daemon,wired,wireless
""" Initialize DBus interfaces. """
global daemon, wired, wireless
daemon = dbus_ifaces['daemon']
wired = dbus_ifaces['wired']
wireless = dbus_ifaces['wireless']
# Both the wired and the wireless settings preferences dialogs use some of the
# same fields.
# This will be used to produce the individual network settings dialogs way far below
class AdvancedSettingsDialog(urwid.WidgetWrap):
"""
Settings dialog.
Both the wired and the wireless settings preferences dialogs use some of the
same fields.
This will be used to produce the individual network settings dialogs way far
below.
"""
# pylint: disable-msg=W0231
def __init__(self):
self.ui=None
self.ui = None
self.body = None
self.wired = None
self.networkid = None
self.encryption_info = None
self.encryption_combo = None
self.encrypt_types = None
self.encryption_chkbox = None
static_ip_t = _('Use Static IPs')
ip_t = ('editcp',_('IP')+': ')
netmask_t = ('editcp',_('Netmask')+':')
gateway_t = ('editcp',_('Gateway')+':')
ip_t = ('editcp', _('IP') + ': ')
netmask_t = ('editcp', _('Netmask') + ':')
gateway_t = ('editcp', _('Gateway') + ':')
use_static_dns_t = _('Use Static DNS')
use_global_dns_t = _('Use global DNS servers')
dns_dom_t = ('editcp',_('DNS domain')+': ')
search_dom_t = ('editcp',_('Search domain')+':')
dns1_t = ('editcp',_('DNS server')+ ' 1'+':'+' '*8)
dns2_t = ('editcp',_('DNS server')+ ' 2'+':'+' '*8)
dns3_t = ('editcp',_('DNS server')+ ' 3'+':'+' '*8)
dns_dom_t = ('editcp', _('DNS domain') + ': ')
search_dom_t = ('editcp', _('Search domain') + ':')
dns1_t = ('editcp', _('DNS server') + ' 1' + ':' + ' ' * 8)
dns2_t = ('editcp', _('DNS server') + ' 2' + ':' + ' ' * 8)
dns3_t = ('editcp', _('DNS server') + ' 3' + ':' + ' ' * 8)
use_dhcp_h_t = _('Use DHCP Hostname')
dhcp_h_t = ('editcp',_('DHCP Hostname')+': ')
dhcp_h_t = ('editcp', _('DHCP Hostname') + ': ')
cancel_t = _('Cancel')
ok_t = _('OK')
self.static_ip_cb = urwid.CheckBox(static_ip_t,
on_state_change=self.static_ip_toggle)
self.ip_edit = DynWrap(urwid.Edit(ip_t),False)
self.netmask_edit = DynWrap(urwid.Edit(netmask_t),False)
self.gateway_edit = DynWrap(urwid.Edit(gateway_t),False)
self.ip_edit = DynWrap(urwid.Edit(ip_t), False)
self.netmask_edit = DynWrap(urwid.Edit(netmask_t), False)
self.gateway_edit = DynWrap(urwid.Edit(gateway_t), False)
self.static_dns_cb = DynWrap(
urwid.CheckBox(use_static_dns_t, on_state_change=self.dns_toggle),
True,
('body', 'editnfc'),
None
)
self.global_dns_cb = DynWrap(
urwid.CheckBox(use_global_dns_t, on_state_change=self.dns_toggle),
False,
('body', 'editnfc'),
None
)
self.checkb_cols = urwid.Columns([
self.static_dns_cb,
self.global_dns_cb
])
self.dns_dom_edit = DynWrap(urwid.Edit(dns_dom_t), False)
self.search_dom_edit = DynWrap(urwid.Edit(search_dom_t), False)
self.dns1 = DynWrap(urwid.Edit(dns1_t), False)
self.dns2 = DynWrap(urwid.Edit(dns2_t), False)
self.dns3 = DynWrap(urwid.Edit(dns3_t), False)
self.static_dns_cb = DynWrap(urwid.CheckBox(use_static_dns_t,
on_state_change=self.dns_toggle),True,('body','editnfc'),None)
self.global_dns_cb = DynWrap(urwid.CheckBox(use_global_dns_t,
on_state_change=self.dns_toggle),False,('body','editnfc'),None)
self.checkb_cols = urwid.Columns([self.static_dns_cb,
self.global_dns_cb])
self.dns_dom_edit = DynWrap(urwid.Edit(dns_dom_t) ,False)
self.search_dom_edit = DynWrap(urwid.Edit(search_dom_t),False)
self.dns1 = DynWrap(urwid.Edit(dns1_t) ,False)
self.dns2 = DynWrap(urwid.Edit(dns2_t) ,False)
self.dns3 = DynWrap(urwid.Edit(dns3_t) ,False)
self.use_dhcp_h = urwid.CheckBox(use_dhcp_h_t,False,on_state_change=self.use_dhcp_h_toggle)
self.dhcp_h = DynWrap(urwid.Edit(dhcp_h_t),False)
self.use_dhcp_h = urwid.CheckBox(
use_dhcp_h_t,
False,
on_state_change=self.use_dhcp_h_toggle
)
self.dhcp_h = DynWrap(urwid.Edit(dhcp_h_t), False)
_blank = urwid.Text('')
walker = urwid.SimpleListWalker([self.static_ip_cb,
self.ip_edit,
self.netmask_edit,
self.gateway_edit,
_blank,
self.checkb_cols,
self.dns_dom_edit,self.search_dom_edit,
self.dns1,self.dns2,self.dns3,
_blank,
self.use_dhcp_h,
self.dhcp_h,
_blank
])
walker = urwid.SimpleListWalker([
self.static_ip_cb,
self.ip_edit,
self.netmask_edit,
self.gateway_edit,
_blank,
self.checkb_cols,
self.dns_dom_edit,
self.search_dom_edit,
self.dns1, self.dns2, self.dns3,
_blank,
self.use_dhcp_h,
self.dhcp_h,
_blank
])
self._listbox = urwid.ListBox(walker)
self._frame = urwid.Frame(self._listbox)
# pylint: disable-msg=E1101
self.__super.__init__(self._frame)
def use_dhcp_h_toggle(self,checkb,new_state,user_data=None):
def use_dhcp_h_toggle(self, checkb, new_state, user_data=None):
""" Set sensitivity of widget. """
self.dhcp_h.set_sensitive(new_state)
def static_ip_toggle(self,checkb,new_state,user_data=None):
for w in [ self.ip_edit,self.netmask_edit,self.gateway_edit ]:
def static_ip_toggle(self, checkb, new_state, user_data=None):
""" Set sensitivity of widget. """
for w in [self.ip_edit, self.netmask_edit, self.gateway_edit]:
w.set_sensitive(new_state)
self.static_dns_cb.set_state(new_state)
self.static_dns_cb.set_sensitive(not new_state)
@@ -122,31 +158,46 @@ class AdvancedSettingsDialog(urwid.WidgetWrap):
else:
self.checkb_cols.set_focus(self.static_dns_cb)
def dns_toggle(self,checkb,new_state,user_data=None):
def dns_toggle(self, checkb, new_state, user_data=None):
""" Set sensitivity of widget. """
if checkb == self.static_dns_cb.get_w():
for w in [ self.dns_dom_edit,self.search_dom_edit,
self.dns1,self.dns2,self.dns3 ]:
for w in [
self.dns_dom_edit,
self.search_dom_edit,
self.dns1,
self.dns2,
self.dns3
]:
w.set_sensitive(new_state)
if not new_state:
self.global_dns_cb.set_state(False,do_callback=False)
self.global_dns_cb.set_state(False, do_callback=False)
self.global_dns_cb.set_sensitive(new_state)
# use_global_dns_cb is DynWrapped
if checkb == self.global_dns_cb.get_w():
for w in [self.dns_dom_edit,self.search_dom_edit,
self.dns1,self.dns2,self.dns3 ]:
for w in [self.dns_dom_edit, self.search_dom_edit,
self.dns1, self.dns2, self.dns3 ]:
w.set_sensitive(not new_state)
def set_net_prop(self, option, value):
""" Set network property. MUST BE OVERRIDEN. """
raise NotImplementedError
# Code totally yanked from netentry.py
def save_settings(self):
""" Save settings common to wired and wireless settings dialogs. """
if self.static_ip_cb.get_state():
for i in [self.ip_edit,self.netmask_edit,self.gateway_edit]:
for i in [
self.ip_edit,
self.netmask_edit,
self.gateway_edit
]:
i.set_edit_text(i.get_edit_text().strip())
self.set_net_prop("ip", noneToString(self.ip_edit.get_edit_text()))
self.set_net_prop("netmask", noneToString(self.netmask_edit.get_edit_text()))
self.set_net_prop("gateway", noneToString(self.gateway_edit.get_edit_text()))
self.set_net_prop("netmask",
noneToString(self.netmask_edit.get_edit_text()))
self.set_net_prop("gateway",
noneToString(self.gateway_edit.get_edit_text()))
else:
self.set_net_prop("ip", '')
self.set_net_prop("netmask", '')
@@ -157,11 +208,18 @@ class AdvancedSettingsDialog(urwid.WidgetWrap):
self.set_net_prop('use_static_dns', True)
self.set_net_prop('use_global_dns', False)
# Strip addressses before checking them in the daemon.
for i in [self.dns1, self.dns2,
self.dns3,self.dns_dom_edit, self.search_dom_edit]:
for i in [
self.dns1,
self.dns2,
self.dns3,
self.dns_dom_edit,
self.search_dom_edit
]:
i.set_edit_text(i.get_edit_text().strip())
self.set_net_prop('dns_domain', noneToString(self.dns_dom_edit.get_edit_text()))
self.set_net_prop("search_domain", noneToString(self.search_dom_edit.get_edit_text()))
self.set_net_prop('dns_domain',
noneToString(self.dns_dom_edit.get_edit_text()))
self.set_net_prop("search_domain",
noneToString(self.search_dom_edit.get_edit_text()))
self.set_net_prop("dns1", noneToString(self.dns1.get_edit_text()))
self.set_net_prop("dns2", noneToString(self.dns2.get_edit_text()))
self.set_net_prop("dns3", noneToString(self.dns3.get_edit_text()))
@@ -177,28 +235,32 @@ class AdvancedSettingsDialog(urwid.WidgetWrap):
self.set_net_prop("dns1", '')
self.set_net_prop("dns2", '')
self.set_net_prop("dns3", '')
self.set_net_prop('dhcphostname',self.dhcp_h.get_edit_text())
self.set_net_prop('usedhcphostname',self.use_dhcp_h.get_state())
self.set_net_prop('dhcphostname', self.dhcp_h.get_edit_text())
self.set_net_prop('usedhcphostname', self.use_dhcp_h.get_state())
# Prevent comboboxes from dying.
def ready_widgets(self,ui,body):
def ready_widgets(self, ui, body):
""" Build comboboxes. """
self.ui = ui
self.body = body
self.encryption_combo.build_combobox(body,ui,14)
self.encryption_combo.build_combobox(body, ui, 14)
self.change_encrypt_method()
def combo_on_change(self,combobox,new_index,user_data=None):
def combo_on_change(self, combobox, new_index, user_data=None):
""" Handle change of item in the combobox. """
self.change_encrypt_method()
# More or less ripped from netentry.py
def change_encrypt_method(self):
""" Change encrypt method based on combobox. """
#self.lbox_encrypt = urwid.ListBox()
self.encryption_info = {}
wid,ID = self.encryption_combo.get_focus()
wid, ID = self.encryption_combo.get_focus()
methods = self.encrypt_types
# pylint: disable-msg=E0203
if self._w.body.body.__contains__(self.pile_encrypt):
self._w.body.body.pop(self._w.body.body.__len__()-1)
self._w.body.body.pop(self._w.body.body.__len__() - 1)
# If nothing is selected, select the first entry.
if ID == -1:
@@ -210,16 +272,17 @@ class AdvancedSettingsDialog(urwid.WidgetWrap):
fields = methods[ID][type_]
for field in fields:
try:
edit = MaskingEdit(('editcp',language[field[1].lower().replace(' ','_')]+': '))
text = language[field[1].lower().replace(' ', '_')]
except KeyError:
edit = MaskingEdit(('editcp',field[1].replace(' ','_')+': '))
text = field[1].replace(' ', '_')
edit = MaskingEdit(('editcp', text + ': '))
edit.set_mask_mode('no_focus')
theList.append(edit)
# Add the data to any array, so that the information
# can be easily accessed by giving the name of the wanted
# data.
self.encryption_info[field[0]] = [edit, type_]
if self.wired:
edit.set_edit_text(noneToBlankString(
wired.GetWiredProperty(field[0])))
@@ -229,78 +292,100 @@ class AdvancedSettingsDialog(urwid.WidgetWrap):
#FIXME: This causes the entire pile to light up upon use.
# Make this into a listbox?
self.pile_encrypt = DynWrap(urwid.Pile(theList),attrs=('editbx','editnfc'))
self.pile_encrypt = DynWrap(
urwid.Pile(theList),
attrs=('editbx', 'editnfc')
)
self.pile_encrypt.set_sensitive(self.encryption_chkbox.get_state())
self._w.body.body.insert(self._w.body.body.__len__(),self.pile_encrypt)
self._w.body.body.insert(self._w.body.body.__len__(), self.pile_encrypt)
#self._w.body.body.append(self.pile_encrypt)
def encryption_toggle(self,chkbox,new_state,user_data=None):
def encryption_toggle(self, chkbox, new_state, user_data=None):
""" Set sensitivity of widget. """
self.encryption_combo.set_sensitive(new_state)
self.pile_encrypt.set_sensitive(new_state)
class WiredSettingsDialog(AdvancedSettingsDialog):
def __init__(self,name,parent):
global wired, daemon
""" Settings dialog for wired interface. """
def __init__(self, name, parent):
AdvancedSettingsDialog.__init__(self)
self.wired = True
self.set_default = urwid.CheckBox(_('Use as default profile (overwrites any previous default)'))
#self.cur_default =
self.set_default = urwid.CheckBox(
_('Use as default profile (overwrites any previous default)')
)
#self.cur_default =
# Add widgets to listbox
self._w.body.body.append(self.set_default)
self.parent = parent
encryption_t = _('Use Encryption')
self.encryption_chkbox = urwid.CheckBox(encryption_t,on_state_change=self.encryption_toggle)
self.encryption_chkbox = urwid.CheckBox(
encryption_t,
on_state_change=self.
encryption_toggle
)
self.encryption_combo = ComboBox(callback=self.combo_on_change)
self.pile_encrypt = None
# _w is a Frame, _w.body is a ListBox, _w.body.body is the ListWalker :-)
# _w is a Frame, _w.body is a ListBox, _w.body.body is the ListWalker
# pylint: disable-msg=E1103
self._listbox.body.append(self.encryption_chkbox)
# pylint: disable-msg=E1103
self._listbox.body.append(self.encryption_combo)
self.encrypt_types = misc.LoadEncryptionMethods(wired = True)
self.encrypt_types = misc.LoadEncryptionMethods(wired=True)
self.set_values()
self.prof_name = name
title = _('Configuring preferences for wired profile "$A"').replace('$A',self.prof_name)
self._w.header = urwid.Text( ('header',title),align='right' )
title = _('Configuring preferences for wired profile "$A"'). \
replace('$A', self.prof_name)
self._w.header = urwid.Text(('header', title), align='right')
self.set_values()
def set_net_prop(self,option,value):
wired.SetWiredProperty(option,value)
def set_net_prop(self, option, value):
""" Set network property. """
wired.SetWiredProperty(option, value)
def set_values(self):
""" Load saved values. """
self.ip_edit.set_edit_text(self.format_entry("ip"))
self.netmask_edit.set_edit_text(self.format_entry("netmask"))
self.gateway_edit.set_edit_text(self.format_entry("gateway"))
self.global_dns_cb.set_state(bool(wired.GetWiredProperty('use_global_dns')))
self.static_dns_cb.set_state(bool(wired.GetWiredProperty('use_static_dns')))
self.global_dns_cb.set_state(
bool(wired.GetWiredProperty('use_global_dns'))
)
self.static_dns_cb.set_state(
bool(wired.GetWiredProperty('use_static_dns'))
)
# Set static ip checkbox. Forgot to do this the first time.
if stringToNone(self.ip_edit.get_edit_text()):
self.static_ip_cb.set_state(True)
self.dns1.set_edit_text(self.format_entry( "dns1"))
self.dns2.set_edit_text(self.format_entry( "dns2"))
self.dns3.set_edit_text(self.format_entry( "dns3"))
self.dns1.set_edit_text(self.format_entry("dns1"))
self.dns2.set_edit_text(self.format_entry("dns2"))
self.dns3.set_edit_text(self.format_entry("dns3"))
self.dns_dom_edit.set_edit_text(self.format_entry("dns_domain"))
self.search_dom_edit.set_edit_text(self.format_entry("search_domain"))
self.set_default.set_state(to_bool(wired.GetWiredProperty("default")))
# Throw the encryption stuff into a list
list = []
l = []
activeID = -1 # Set the menu to this item when we are done
for x, enc_type in enumerate(self.encrypt_types):
list.append(enc_type['name'])
l.append(enc_type['name'])
if enc_type['type'] == wired.GetWiredProperty("enctype"):
activeID = x
self.encryption_combo.set_list(list)
self.encryption_combo.set_list(l)
self.encryption_combo.set_focus(activeID)
if wired.GetWiredProperty("encryption_enabled"):
self.encryption_chkbox.set_state(True,do_callback=False)
self.encryption_chkbox.set_state(True, do_callback=False)
self.encryption_combo.set_sensitive(True)
#self.lbox_encrypt_info.set_sensitive(True)
else:
@@ -313,26 +398,34 @@ class WiredSettingsDialog(AdvancedSettingsDialog):
if dhcphname is None:
dhcphname = os.uname()[1]
self.use_dhcp_h.set_state(bool(wired.GetWiredProperty('usedhcphostname')))
self.use_dhcp_h.set_state(
bool(wired.GetWiredProperty('usedhcphostname'))
)
self.dhcp_h.set_sensitive(self.use_dhcp_h.get_state())
self.dhcp_h.set_edit_text(unicode(dhcphname))
def save_settings(self):
""" Save settings to disk. """
# Check encryption info
if self.encryption_chkbox.get_state():
encrypt_info = self.encryption_info
encrypt_methods = self.encrypt_types
self.set_net_prop("enctype",
encrypt_methods[self.encryption_combo.get_focus()[1] ]['type'])
self.set_net_prop(
"enctype",
encrypt_methods[self.encryption_combo.get_focus()[1]]['type'])
self.set_net_prop("encryption_enabled", True)
# Make sure all required fields are filled in.
for entry_info in encrypt_info.itervalues():
if entry_info[0].get_edit_text() == "" \
and entry_info[1] == 'required':
error(self.ui, self.parent,"%s (%s)" \
% (_('Required encryption information is missing.'),
entry_info[0].get_caption()[0:-2] )
)
and entry_info[1] == 'required':
error(
self.ui,
self.parent,
"%s (%s)" % (
_('Required encryption information is missing.'),
entry_info[0].get_caption()[0:-2]
)
)
return False
for entry_key, entry_info in encrypt_info.iteritems():
@@ -341,121 +434,157 @@ class WiredSettingsDialog(AdvancedSettingsDialog):
else:
self.set_net_prop("enctype", "None")
self.set_net_prop("encryption_enabled", False)
AdvancedSettingsDialog.save_settings(self)
if self.set_default.get_state():
wired.UnsetWiredDefault()
if self.set_default.get_state():
bool = True
set_default = True
else:
bool = False
wired.SetWiredProperty("default",bool)
set_default = False
wired.SetWiredProperty("default", set_default)
wired.SaveWiredNetworkProfile(self.prof_name)
return True
def format_entry(self, label):
""" Helper method to fetch and format wired properties. """
return noneToBlankString(wired.GetWiredProperty(label))
def prerun(self,ui,dim,display):
def prerun(self, ui, dim, display):
pass
########################################
class WirelessSettingsDialog(AdvancedSettingsDialog):
def __init__(self,networkID,parent):
global wireless, daemon
""" Settings dialog for wireless interfaces. """
def __init__(self, networkID, parent):
AdvancedSettingsDialog.__init__(self)
self.wired = False
self.bitrates = None
self.networkid = networkID
self.parent = parent
global_settings_t = _('Use these settings for all networks sharing this essid')
global_settings_t = \
_('Use these settings for all networks sharing this essid')
encryption_t = _('Use Encryption')
autoconnect_t = _('Automatically connect to this network')
bitrate_t = _('Wireless bitrate')
allow_lower_bitrates_t = _('Allow lower bitrates')
self.global_settings_chkbox = urwid.CheckBox(global_settings_t)
self.encryption_chkbox = urwid.CheckBox(encryption_t,on_state_change=self.encryption_toggle)
self.encryption_chkbox = urwid.CheckBox(
encryption_t,
on_state_change=self.
encryption_toggle
)
self.encryption_combo = ComboBox(callback=self.combo_on_change)
self.autoconnect_chkbox = urwid.CheckBox(autoconnect_t)
self.bitrate_combo = ComboBox(bitrate_t)
self.allow_lower_bitrates_chkbox = urwid.CheckBox(allow_lower_bitrates_t)
self.allow_lower_bitrates_chkbox = \
urwid.CheckBox(allow_lower_bitrates_t)
self.pile_encrypt = None
# _w is a Frame, _w.body is a ListBox, _w.body.body is the ListWalker :-)
# _w is a Frame, _w.body is a ListBox, _w.body.body is the ListWalker
# pylint: disable-msg=E1103
self._listbox.body.append(self.bitrate_combo)
# pylint: disable-msg=E1103
self._listbox.body.append(self.allow_lower_bitrates_chkbox)
# pylint: disable-msg=E1103
self._listbox.body.append(urwid.Text(''))
# pylint: disable-msg=E1103
self._listbox.body.append(self.global_settings_chkbox)
# pylint: disable-msg=E1103
self._listbox.body.append(self.autoconnect_chkbox)
# pylint: disable-msg=E1103
self._listbox.body.append(self.encryption_chkbox)
# pylint: disable-msg=E1103
self._listbox.body.append(self.encryption_combo)
self.encrypt_types = misc.LoadEncryptionMethods()
self.set_values()
title = _('Configuring preferences for wireless network "$A" ($B)').replace('$A',wireless.GetWirelessProperty(networkID,'essid')).replace('$B',wireless.GetWirelessProperty(networkID,'bssid'))
self._w.header = urwid.Text(('header',title),align='right' )
title = _('Configuring preferences for wireless network "$A" ($B)'). \
replace('$A', wireless.GetWirelessProperty(networkID, 'essid')). \
replace('$B', wireless.GetWirelessProperty(networkID, 'bssid'))
self._w.header = urwid.Text(('header', title), align='right')
def set_values(self):
""" Set the various network settings to the right values. """
networkID = self.networkid
self.ip_edit.set_edit_text(self.format_entry(networkID,"ip"))
self.netmask_edit.set_edit_text(self.format_entry(networkID,"netmask"))
self.gateway_edit.set_edit_text(self.format_entry(networkID,"gateway"))
self.ip_edit.set_edit_text(self.format_entry(networkID, "ip"))
self.netmask_edit.set_edit_text(self.format_entry(networkID, "netmask"))
self.gateway_edit.set_edit_text(self.format_entry(networkID, "gateway"))
self.global_dns_cb.set_state(
bool(wireless.GetWirelessProperty(networkID, 'use_global_dns')))
self.static_dns_cb.set_state(
bool(wireless.GetWirelessProperty(networkID, 'use_static_dns')))
self.global_dns_cb.set_state(bool(wireless.GetWirelessProperty(networkID,
'use_global_dns')))
self.static_dns_cb.set_state(bool(wireless.GetWirelessProperty(networkID,
'use_static_dns')))
if stringToNone(self.ip_edit.get_edit_text()):
self.static_ip_cb.set_state(True)
self.dns1.set_edit_text(self.format_entry(networkID, "dns1"))
self.dns2.set_edit_text(self.format_entry(networkID, "dns2"))
self.dns3.set_edit_text(self.format_entry(networkID, "dns3"))
self.dns_dom_edit.set_edit_text(self.format_entry(networkID, "dns_domain"))
self.search_dom_edit.set_edit_text(self.format_entry(networkID, "search_domain"))
self.autoconnect_chkbox.set_state(to_bool(self.format_entry(networkID, "automatic")))
self.dns_dom_edit.set_edit_text(
self.format_entry(networkID, "dns_domain")
)
self.search_dom_edit.set_edit_text(
self.format_entry(networkID, "search_domain")
)
self.autoconnect_chkbox.set_state(
to_bool(self.format_entry(networkID, "automatic"))
)
self.bitrates = wireless.GetAvailableBitrates()
self.bitrates.append('auto')
self.bitrate_combo.set_list(self.bitrates)
self.bitrate_combo.set_focus(self.bitrates.index(wireless.GetWirelessProperty(networkID, 'bitrate')))
self.allow_lower_bitrates_chkbox.set_state(to_bool(self.format_entry(networkID, 'allow_lower_bitrates')))
self.bitrate_combo.set_focus(
self.bitrates.index(
wireless.GetWirelessProperty(networkID, 'bitrate')
)
)
self.allow_lower_bitrates_chkbox.set_state(
to_bool(self.format_entry(networkID, 'allow_lower_bitrates'))
)
#self.reset_static_checkboxes()
self.encryption_chkbox.set_state(bool(wireless.GetWirelessProperty(networkID,
'encryption')),do_callback=False)
self.global_settings_chkbox.set_state(bool(wireless.GetWirelessProperty(networkID
,'use_settings_globally')))
self.encryption_chkbox.set_state(
bool(wireless.GetWirelessProperty(networkID, 'encryption')),
do_callback=False)
self.global_settings_chkbox.set_state(
bool(wireless.GetWirelessProperty(
networkID,
'use_settings_globally')
)
)
# Throw the encryption stuff into a list
list = []
l = []
activeID = -1 # Set the menu to this item when we are done
for x, enc_type in enumerate(self.encrypt_types):
list.append(enc_type['name'])
if enc_type['type'] == wireless.GetWirelessProperty(networkID, "enctype"):
l.append(enc_type['name'])
if enc_type['type'] == \
wireless.GetWirelessProperty(networkID, "enctype"):
activeID = x
self.encryption_combo.set_list(list)
self.encryption_combo.set_list(l)
self.encryption_combo.set_focus(activeID)
if activeID != -1:
self.encryption_chkbox.set_state(True,do_callback=False)
self.encryption_chkbox.set_state(True, do_callback=False)
self.encryption_combo.set_sensitive(True)
#self.lbox_encrypt_info.set_sensitive(True)
else:
self.encryption_combo.set_focus(0)
self.change_encrypt_method()
dhcphname = wireless.GetWirelessProperty(networkID,"dhcphostname")
dhcphname = wireless.GetWirelessProperty(networkID, "dhcphostname")
if dhcphname is None:
dhcphname = os.uname()[1]
self.use_dhcp_h.set_state(bool(wireless.GetWirelessProperty(networkID,'usedhcphostname')))
self.use_dhcp_h.set_state(
bool(wireless.GetWirelessProperty(networkID, 'usedhcphostname'))
)
self.dhcp_h.set_sensitive(self.use_dhcp_h.get_state())
self.dhcp_h.set_edit_text(unicode(dhcphname))
def set_net_prop(self, option, value):
""" Sets the given option to the given value for this network. """
@@ -467,20 +596,27 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
# Ripped from netentry.py
def save_settings(self):
""" Save settings to disk. """
# Check encryption info
if self.encryption_chkbox.get_state():
encrypt_info = self.encryption_info
encrypt_methods = self.encrypt_types
self.set_net_prop("enctype",
encrypt_methods[self.encryption_combo.get_focus()[1] ]['type'])
self.set_net_prop(
"enctype",
encrypt_methods[self.encryption_combo.get_focus()[1]]['type']
)
# Make sure all required fields are filled in.
for entry_info in encrypt_info.itervalues():
if entry_info[0].get_edit_text() == "" \
and entry_info[1] == 'required':
error(self.ui, self.parent,"%s (%s)" \
% (_('Required encryption information is missing.'),
entry_info[0].get_caption()[0:-2] )
)
error(
self.ui,
self.parent,
"%s (%s)" % (
_('Required encryption information is missing.'),
entry_info[0].get_caption()[0:-2]
)
)
return False
for entry_key, entry_info in encrypt_info.iteritems():
@@ -489,7 +625,11 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
elif not self.encryption_chkbox.get_state() and \
wireless.GetWirelessProperty(self.networkid, "encryption"):
# Encrypt checkbox is off, but the network needs it.
error(self.ui, self.parent, _('This network requires encryption to be enabled.'))
error(
self.ui,
self.parent,
_('This network requires encryption to be enabled.')
)
return False
else:
self.set_net_prop("enctype", "None")
@@ -497,20 +637,27 @@ class WirelessSettingsDialog(AdvancedSettingsDialog):
# Save the autoconnect setting. This is not where it originally was
# in the GTK UI.
self.set_net_prop("automatic",self.autoconnect_chkbox.get_state())
self.set_net_prop("automatic", self.autoconnect_chkbox.get_state())
if self.global_settings_chkbox.get_state():
self.set_net_prop('use_settings_globally', True)
else:
self.set_net_prop('use_settings_globally', False)
wireless.RemoveGlobalEssidEntry(self.networkid)
self.set_net_prop('bitrate', self.bitrates[self.bitrate_combo.get_focus()[1]])
self.set_net_prop('allow_lower_bitrates', self.allow_lower_bitrates_chkbox.get_state())
self.set_net_prop(
'bitrate',
self.bitrates[self.bitrate_combo.get_focus()[1]]
)
self.set_net_prop(
'allow_lower_bitrates',
self.allow_lower_bitrates_chkbox.get_state()
)
wireless.SaveWirelessNetworkProfile(self.networkid)
return True
def ready_widgets(self, ui, body):
""" Build comboboxes. """
AdvancedSettingsDialog.ready_widgets(self, ui, body)
self.ui = ui
self.body = body

View File

@@ -8,12 +8,12 @@
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
#
# 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
@@ -23,25 +23,30 @@ import urwid
import urwid.curses_display
from wicd import misc
from wicd import dbusmanager
from wicd.translations import _
from curses_misc import SelText,DynWrap,DynRadioButton,ComboBox,TabColumns
from curses_misc import SelText, DynWrap, DynRadioButton, ComboBox, TabColumns
daemon = None
wireless = None
wired = None
from wicd.translations import language
class PrefsDialog(urwid.WidgetWrap):
""" Preferences dialog. """
# pylint: disable-msg=W0231
def __init__(self, body, pos, ui, dbus=None):
global daemon, wireless, wired
self.thebackends = None
self.backends = None
self.wpadrivers = None
self.thedrivers = None
daemon = dbus['daemon']
wireless = dbus['wireless']
wired = dbus['wired']
width,height = ui.get_cols_rows()
width, height = ui.get_cols_rows()
height -= 3
#width = 80
#height = 20
@@ -53,7 +58,7 @@ class PrefsDialog(urwid.WidgetWrap):
self.header0 = urwid.AttrWrap(SelText(header0_t), 'tab active', 'focus')
self.header1 = urwid.AttrWrap(SelText(header1_t), 'body', 'focus')
self.header2 = urwid.AttrWrap(SelText(header2_t), 'body', 'focus')
title = _('Preferences')
title = ('Preferences')
# Blank line
_blank = urwid.Text('')
@@ -63,22 +68,21 @@ class PrefsDialog(urwid.WidgetWrap):
####
# General Settings
net_cat_t = ('header', _('Network Interfaces'))
wired_t = ('editcp', _('Wired Interface')+': ')
wless_t = ('editcp', _('Wireless Interface')+':')
always_show_wired_t = _('''Always show wired interface''')
prefer_wired_t = _('''Always switch to wired connection when available''')
net_cat_t = ('header', ('Network Interfaces'))
wired_t = ('editcp', ('Wired Interface') + ': ')
wless_t = ('editcp', ('Wireless Interface') + ':')
always_show_wired_t = _('Always show wired interface')
prefer_wired_t = _('Always switch to wired connection when available')
global_dns_cat_t = ('header', _('Global DNS servers'))
global_dns_t = ('editcp', _('Use global DNS servers'))
dns_dom_t = ('editcp', ' '+_('DNS domain')+': ')
search_dom_t = ('editcp', ' '+_('Search domain')+':')
dns1_t = ('editcp', ' '+_('DNS server')+' 1: ')
dns2_t = ('editcp', ' '+_('DNS server')+' 2: ')
dns3_t = ('editcp', ' '+_('DNS server')+' 3: ')
global_dns_t = ('editcp', _('Use global DNS servers'))
dns_dom_t = ('editcp', ' ' + _('DNS domain') + ': ')
search_dom_t = ('editcp', ' ' + _('Search domain') + ':')
dns1_t = ('editcp', ' ' + _('DNS server') + ' 1: ')
dns2_t = ('editcp', ' ' + _('DNS server') + ' 2: ')
dns3_t = ('editcp', ' ' + _('DNS server') + ' 3: ')
wired_auto_cat_t= ('header', _('Wired Autoconnect Settings'))
wired_auto_cat_t = ('header', _('Wired Autoconnect Settings'))
wired_auto_1_t = _('Use default profile on wired autoconnect')
wired_auto_2_t = _('Prompt for profile on wired autoconnect')
wired_auto_3_t = _('Use last used profile on wired autoconnect')
@@ -91,86 +95,90 @@ class PrefsDialog(urwid.WidgetWrap):
dhcp_header_t = ('header', _('DHCP Client'))
# Automatic
dhcp1_t = 'dhclient'
dhcp2_t = 'dhcpcd'
dhcp3_t = 'pump'
dhcp4_t = 'udhcpc'
dhcp1_t = 'dhclient'
dhcp2_t = 'dhcpcd'
dhcp3_t = 'pump'
dhcp4_t = 'udhcpc'
wired_detect_header_t = ('header', _('Wired Link Detection'))
wired1_t = 'ethtool'
wired2_t = 'mii-tool'
wired1_t = 'ethtool'
wired2_t = 'mii-tool'
flush_header_t = ('header', _('Route Table Flushing'))
flush1_t = 'ip'
flush2_t = 'route'
flush1_t = 'ip'
flush2_t = 'route'
#### Advanced Settings
wpa_cat_t=('header', _('WPA Supplicant'))
wpa_t=('editcp','Driver:')
wpa_cat_t = ('header', _('WPA Supplicant'))
wpa_t = ('editcp', 'Driver:')
wpa_list = []
wpa_warn_t = ('important', _('You should almost always use wext as the WPA supplicant driver'))
wpa_warn_t = ('important',
_('You should almost always use wext as the WPA supplicant driver'))
backend_cat_t = ('header', _('Backend'))
backend_t = _('Backend')+':'
backend_t = _('Backend') + ':'
backend_list = []
debug_cat_t = ('header', _('Debugging'))
debug_mode_t = _('Enable debug mode')
wless_cat_t = ('header', _('Wireless Interface'))
use_dbm_t = _('Use dBm to measure signal strength')
verify_ap_t = _('Ping static gateways after connecting to verify association')
verify_ap_t = \
_('Ping static gateways after connecting to verify association')
####
#### UI Widgets
####
# General Settings
self.net_cat = urwid.Text(net_cat_t)
self.wired_edit = urwid.AttrWrap(urwid.Edit(wired_t),'editbx','editfc')
self.wless_edit = urwid.AttrWrap(urwid.Edit(wless_t),'editbx','editfc')
self.net_cat = urwid.Text(net_cat_t)
self.wired_edit = \
urwid.AttrWrap(urwid.Edit(wired_t), 'editbx', 'editfc')
self.wless_edit = \
urwid.AttrWrap(urwid.Edit(wless_t), 'editbx', 'editfc')
self.prefer_wired_chkbx = urwid.CheckBox(prefer_wired_t)
self.global_dns_cat = urwid.Text(global_dns_cat_t)
# Default the global DNS settings to off. They will be reenabled later
# if so required.
global_dns_state = False
self.global_dns_checkb = urwid.CheckBox(global_dns_t, global_dns_state,
on_state_change=self.global_dns_trigger)
self.global_dns_checkb = urwid.CheckBox(global_dns_t,
global_dns_state,
on_state_change=self.global_dns_trigger
)
self.search_dom = DynWrap(urwid.Edit(search_dom_t), global_dns_state)
self.dns_dom = DynWrap(urwid.Edit(dns_dom_t), global_dns_state)
self.dns1 = DynWrap(urwid.Edit(dns1_t), global_dns_state)
self.dns2 = DynWrap(urwid.Edit(dns2_t), global_dns_state)
self.dns3 = DynWrap(urwid.Edit(dns3_t), global_dns_state)
self.dns_dom = DynWrap(urwid.Edit(dns_dom_t), global_dns_state)
self.dns1 = DynWrap(urwid.Edit(dns1_t), global_dns_state)
self.dns2 = DynWrap(urwid.Edit(dns2_t), global_dns_state)
self.dns3 = DynWrap(urwid.Edit(dns3_t), global_dns_state)
self.always_show_wired_checkb = urwid.CheckBox(always_show_wired_t)
self.wired_auto_l = []
self.wired_auto_cat= urwid.Text(wired_auto_cat_t)
self.wired_auto_1 = urwid.RadioButton(self.wired_auto_l,wired_auto_1_t)
self.wired_auto_2 = urwid.RadioButton(self.wired_auto_l,wired_auto_2_t)
self.wired_auto_3 = urwid.RadioButton(self.wired_auto_l,wired_auto_3_t)
self.wired_auto_l = []
self.wired_auto_cat = urwid.Text(wired_auto_cat_t)
self.wired_auto_1 = urwid.RadioButton(self.wired_auto_l, wired_auto_1_t)
self.wired_auto_2 = urwid.RadioButton(self.wired_auto_l, wired_auto_2_t)
self.wired_auto_3 = urwid.RadioButton(self.wired_auto_l, wired_auto_3_t)
self.auto_reconn_cat = urwid.Text(auto_reconn_cat_t)
self.auto_reconn_cat = urwid.Text(auto_reconn_cat_t)
self.auto_reconn_checkb = urwid.CheckBox(auto_reconn_t)
generalLB = urwid.ListBox([self.net_cat,
self.wless_edit,#_blank,
self.wired_edit,
self.always_show_wired_checkb,
self.prefer_wired_chkbx,_blank,
self.global_dns_cat,
self.global_dns_checkb,#_blank,
self.search_dom,self.dns_dom,
self.dns1,self.dns2,self.dns3,_blank,
self.wired_auto_cat,
self.wired_auto_1,
self.wired_auto_2,
self.wired_auto_3, _blank,
self.auto_reconn_cat,
self.auto_reconn_checkb
])
generalLB = urwid.ListBox([
self.net_cat,
self.wless_edit, # _blank,
self.wired_edit,
self.always_show_wired_checkb,
self.prefer_wired_chkbx, _blank,
self.global_dns_cat,
self.global_dns_checkb, # _blank,
self.search_dom, self.dns_dom,
self.dns1, self.dns2, self.dns3, _blank,
self.wired_auto_cat,
self.wired_auto_1,
self.wired_auto_2,
self.wired_auto_3, _blank,
self.auto_reconn_cat,
self.auto_reconn_checkb
])
#### External Programs tab
automatic_t = _('Automatic (recommended)')
@@ -179,81 +187,84 @@ class PrefsDialog(urwid.WidgetWrap):
self.dhcp_l = []
# Order of these is flipped in the actual interface,
# (2,3,1 -> dhcpcd, pump, dhclient), because dhclient often doesn't like
# to work on several distros.
self.dhcp0 = urwid.RadioButton(self.dhcp_l ,automatic_t)
self.dhcp1 = DynRadioButton(self.dhcp_l, dhcp1_t)
self.dhcp2 = DynRadioButton(self.dhcp_l, dhcp2_t)
self.dhcp3 = DynRadioButton(self.dhcp_l, dhcp3_t)
self.dhcp4 = DynRadioButton(self.dhcp_l, dhcp4_t)
self.dhcp_l = [self.dhcp0,self.dhcp1,self.dhcp2,self.dhcp3,self.dhcp4]
# (2, 3, 1 -> dhcpcd, pump, dhclient), because dhclient often doesn't
# like to work on several distros.
self.dhcp0 = urwid.RadioButton(self.dhcp_l, automatic_t)
self.dhcp1 = DynRadioButton(self.dhcp_l, dhcp1_t)
self.dhcp2 = DynRadioButton(self.dhcp_l, dhcp2_t)
self.dhcp3 = DynRadioButton(self.dhcp_l, dhcp3_t)
self.dhcp4 = DynRadioButton(self.dhcp_l, dhcp4_t)
self.dhcp_l = [
self.dhcp0, self.dhcp1, self.dhcp2, self.dhcp3, self.dhcp4
]
self.wired_l = []
self.wired_detect_header = urwid.Text(wired_detect_header_t)
self.wired0 = urwid.RadioButton(self.wired_l, automatic_t)
self.wired1 = DynRadioButton(self.wired_l, wired1_t)
self.wired2 = DynRadioButton(self.wired_l, wired2_t)
self.wired0 = urwid.RadioButton(self.wired_l, automatic_t)
self.wired1 = DynRadioButton(self.wired_l, wired1_t)
self.wired2 = DynRadioButton(self.wired_l, wired2_t)
self.wired_l = [self.wired0, self.wired1, self.wired2]
self.flush_l = []
self.flush_header = urwid.Text(flush_header_t)
self.flush0 = urwid.RadioButton(self.flush_l,automatic_t)
self.flush1 = DynRadioButton(self.flush_l,flush1_t)
self.flush2 = DynRadioButton(self.flush_l,flush2_t)
self.flush_l = [self.flush0,self.flush1,self.flush2]
externalLB = urwid.ListBox([self.dhcp_header,
self.dhcp0,self.dhcp2,self.dhcp3,self.dhcp1,
self.dhcp4,
_blank,
self.wired_detect_header,
self.wired0,self.wired1,self.wired2,
_blank,
self.flush_header,
self.flush0,self.flush1,self.flush2
])
self.flush_header = urwid.Text(flush_header_t)
self.flush0 = urwid.RadioButton(self.flush_l, automatic_t)
self.flush1 = DynRadioButton(self.flush_l, flush1_t)
self.flush2 = DynRadioButton(self.flush_l, flush2_t)
self.flush_l = [self.flush0, self.flush1, self.flush2]
externalLB = urwid.ListBox([
self.dhcp_header,
self.dhcp0, self.dhcp2, self.dhcp3, self.dhcp1, self.dhcp4,
_blank,
self.wired_detect_header,
self.wired0, self.wired1, self.wired2,
_blank,
self.flush_header,
self.flush0, self.flush1, self.flush2
])
#### Advanced settings
self.wpa_cat = urwid.Text(wpa_cat_t)
self.wpa_cbox = ComboBox(wpa_t)
self.wpa_warn = urwid.Text(wpa_warn_t)
self.backend_cat = urwid.Text(backend_cat_t)
self.backend_cbox = ComboBox(backend_t)
self.debug_cat = urwid.Text(debug_cat_t)
self.debug_mode_checkb = urwid.CheckBox(debug_mode_t)
self.wpa_cat = urwid.Text(wpa_cat_t)
self.wpa_cbox = ComboBox(wpa_t)
self.wpa_warn = urwid.Text(wpa_warn_t)
self.wless_cat = urwid.Text(wless_cat_t)
self.use_dbm_checkb = urwid.CheckBox(use_dbm_t)
self.backend_cat = urwid.Text(backend_cat_t)
self.backend_cbox = ComboBox(backend_t)
self.debug_cat = urwid.Text(debug_cat_t)
self.debug_mode_checkb = urwid.CheckBox(debug_mode_t)
self.wless_cat = urwid.Text(wless_cat_t)
self.use_dbm_checkb = urwid.CheckBox(use_dbm_t)
self.verify_ap_checkb = urwid.CheckBox(verify_ap_t)
advancedLB = urwid.ListBox([
self.wpa_cat,
self.wpa_cbox, self.wpa_warn, _blank,
self.backend_cat,
self.backend_cbox, _blank,
self.debug_cat,
self.debug_mode_checkb, _blank,
self.wless_cat,
self.use_dbm_checkb, _blank,
self.verify_ap_checkb, _blank
])
advancedLB = urwid.ListBox([self.wpa_cat,
self.wpa_cbox,self.wpa_warn,_blank,
self.backend_cat,
self.backend_cbox,_blank,
self.debug_cat,
self.debug_mode_checkb, _blank,
self.wless_cat,
self.use_dbm_checkb, _blank,
self.verify_ap_checkb, _blank
])
headerList = [self.header0,self.header1,self.header2]
lbList = [generalLB,externalLB,advancedLB]
self.tab_map = {self.header0 : generalLB,
self.header1 : externalLB,
self.header2 : advancedLB}
headerList = [self.header0, self.header1, self.header2]
lbList = [generalLB, externalLB, advancedLB]
self.tab_map = {
self.header0: generalLB,
self.header1: externalLB,
self.header2: advancedLB
}
#self.load_settings()
self.tabs = TabColumns(headerList,lbList,_('Preferences'))
self.tabs = TabColumns(headerList, lbList, _('Preferences'))
# pylint: disable-msg=E1101
self.__super.__init__(self.tabs)
def load_settings(self):
def load_settings(self):
""" Load settings to be used in the dialog. """
### General Settings
# ComboBox does not like dbus.Strings as text markups. My fault. :/
wless_iface = unicode(daemon.GetWirelessInterface())
@@ -269,15 +280,16 @@ class PrefsDialog(urwid.WidgetWrap):
theDNS = daemon.GetGlobalDNSAddresses()
i = 0
for w in self.dns1,self.dns2,self.dns3,self.dns_dom,self.search_dom :
for w in self.dns1, self.dns2, self.dns3, self.dns_dom, self.search_dom:
w.set_edit_text(misc.noneToBlankString(theDNS[i]))
i+=1
i += 1
# Wired Automatic Connection
self.wired_auto_l[daemon.GetWiredAutoConnectMethod()-1]
self.wired_auto_l[daemon.GetWiredAutoConnectMethod() - 1]
self.auto_reconn_checkb.set_state(daemon.GetAutoReconnect())
def find_avail(apps):
""" Find available apps. """
for app in apps[1:]:
app.set_sensitive(daemon.GetAppAvailable(app.get_label()))
@@ -285,7 +297,7 @@ class PrefsDialog(urwid.WidgetWrap):
find_avail(self.dhcp_l)
dhcp_method = daemon.GetDHCPClient()
self.dhcp_l[dhcp_method].set_state(True)
find_avail(self.wired_l)
wired_link_method = daemon.GetLinkDetectionTool()
self.wired_l[wired_link_method].set_state(True)
@@ -302,17 +314,17 @@ class PrefsDialog(urwid.WidgetWrap):
# Same as above with the dbus.String
self.thedrivers = [unicode(w) for w in self.wpadrivers]
self.wpa_cbox.set_list(self.thedrivers)
# Pick where to begin first:
def_driver = daemon.GetWPADriver()
try:
self.wpa_cbox.set_focus(self.wpadrivers.index(def_driver))
except ValueError:
pass # It defaults to 0 anyway (I hope)
pass # It defaults to 0 anyway (I hope)
self.backends = daemon.GetBackendList()
self.thebackends= [unicode(w) for w in self.backends]
self.backend_cbox.set_list(self.thebackends)
self.thebackends = [unicode(w) for w in self.backends]
self.backend_cbox.set_list(self.thebackends)
cur_backend = daemon.GetSavedBackend()
try:
self.backend_cbox.set_focus(self.thebackends.index(cur_backend))
@@ -329,17 +341,25 @@ class PrefsDialog(urwid.WidgetWrap):
This exact order is found in prefs.py"""
daemon.SetUseGlobalDNS(self.global_dns_checkb.get_state())
for i in [self.dns1, self.dns2,
self.dns3,self.dns_dom, self.search_dom, self.dns_dom]:
for i in [
self.dns1, self.dns2, self.dns3,
self.dns_dom, self.search_dom, self.dns_dom
]:
i.set_edit_text(i.get_edit_text().strip())
daemon.SetGlobalDNS(self.dns1.get_edit_text(), self.dns2.get_edit_text(),
self.dns3.get_edit_text(), self.dns_dom.get_edit_text(),
self.search_dom.get_edit_text())
daemon.SetGlobalDNS(
self.dns1.get_edit_text(),
self.dns2.get_edit_text(),
self.dns3.get_edit_text(),
self.dns_dom.get_edit_text(),
self.search_dom.get_edit_text()
)
daemon.SetWirelessInterface(self.wless_edit.get_edit_text())
daemon.SetWiredInterface(self.wired_edit.get_edit_text())
daemon.SetWPADriver(self.wpadrivers[self.wpa_cbox.get_focus()[1]])
daemon.SetAlwaysShowWiredInterface(self.always_show_wired_checkb.get_state())
daemon.SetAlwaysShowWiredInterface(
self.always_show_wired_checkb.get_state()
)
daemon.SetAutoReconnect(self.auto_reconn_checkb.get_state())
daemon.SetDebugMode(self.debug_mode_checkb.get_state())
daemon.SetSignalDisplayType(int(self.use_dbm_checkb.get_state()))
@@ -353,7 +373,7 @@ class PrefsDialog(urwid.WidgetWrap):
daemon.SetWiredAutoConnectMethod(1)
daemon.SetBackend(self.backends[self.backend_cbox.get_focus()[1]])
# External Programs Tab
if self.dhcp0.get_state():
dhcp_client = misc.AUTO
@@ -366,7 +386,7 @@ class PrefsDialog(urwid.WidgetWrap):
else:
dhcp_client = misc.UDHCPC
daemon.SetDHCPClient(dhcp_client)
if self.wired0.get_state():
link_tool = misc.AUTO
elif self.wired1.get_state():
@@ -374,7 +394,7 @@ class PrefsDialog(urwid.WidgetWrap):
else:
link_tool = misc.MIITOOL
daemon.SetLinkDetectionTool(link_tool)
if self.flush0.get_state():
flush_tool = misc.AUTO
elif self.flush1.get_state():
@@ -383,11 +403,12 @@ class PrefsDialog(urwid.WidgetWrap):
flush_tool = misc.ROUTE
daemon.SetFlushTool(flush_tool)
# DNS CheckBox callback
def global_dns_trigger(self,check_box,new_state,user_data=None):
for w in self.dns1,self.dns2,self.dns3,self.dns_dom,self.search_dom:
def global_dns_trigger(self, check_box, new_state, user_data=None):
""" DNS CheckBox callback. """
for w in self.dns1, self.dns2, self.dns3, self.dns_dom, self.search_dom:
w.set_sensitive(new_state)
def ready_widgets(self,ui,body):
self.wpa_cbox.build_combobox(body,ui,4)
self.backend_cbox.build_combobox(body,ui,8)
def ready_widgets(self, ui, body):
""" Build comboboxes. """
self.wpa_cbox.build_combobox(body, ui, 4)
self.backend_cbox.build_combobox(body, ui, 8)

File diff suppressed because it is too large Load Diff