diff --git a/curses/README b/curses/README index afe8d66..a10ba07 100644 --- a/curses/README +++ b/curses/README @@ -29,6 +29,7 @@ H : Raise help dialog S : Provide instructions for configuring scripts delete : Delete selected wired network profile (from the wired ComboBox) F2 : Rename selected wired network profile (from the wired ComboBox) +O : Raise ad-hoc network dialog IN DIALOGS (Meta usually is "Alt"): ESC or Q: Quit dialog without saving information (if present) diff --git a/curses/TODO b/curses/TODO index 129fe2f..9861ba4 100644 --- a/curses/TODO +++ b/curses/TODO @@ -3,5 +3,4 @@ Things to do (in no particular order): * Implement a keyhandler function for the overall frame * Make keystrokes customizable * Make color schemes customizable -* Implement a "make an ad-hoc network" dialog * Perform a mass code cleanup diff --git a/curses/curses_misc.py b/curses/curses_misc.py index 0dfc374..fbe607d 100644 --- a/curses/curses_misc.py +++ b/curses/curses_misc.py @@ -88,6 +88,20 @@ class DynWrap(urwid.AttrWrap): def selectable(self): return self._sensitive +# Just an Edit Dynwrapped to the most common specifications +class DynEdit(DynWrap): + def __init__(self,caption='',edit_text='',sensitive=True,attrs=('editbx','editnfc'),focus_attr='editfc'): + caption = ('editcp',caption + ': ') + edit = urwid.Edit(caption,edit_text) + self.__super.__init__(edit,sensitive,attrs,focus_attr) + +# Just an IntEdit Dynwrapped to the most common specifications +class DynIntEdit(DynWrap): + def __init__(self,caption='',edit_text='',sensitive=True,attrs=('editbx','editnfc'),focus_attr='editfc'): + caption = ('editcp',caption + ':') + edit = urwid.IntEdit(caption,edit_text) + self.__super.__init__(edit,sensitive,attrs,focus_attr) + class MaskingEditException(Exception): pass @@ -436,13 +450,14 @@ class Dialog2(urwid.WidgetWrap): overlay.mouse_event( size, event, button, col, row, focus=True) - if k == 'window resize': - size = ui.get_cols_rows() - k = self.view.keypress( size, k ) - if k == 'esc': - raise DialogExit(-1) - if k: - self.unhandled_key( size, k) + else: + if k == 'window resize': + size = ui.get_cols_rows() + k = self.view.keypress( size, k ) + if k == 'esc': + raise DialogExit(-1) + if k: + self.unhandled_key( size, k) except DialogExit, e: return self.on_exit( e.args[0] ) diff --git a/curses/wicd-curses.py b/curses/wicd-curses.py index 9f7e201..d69e4e2 100644 --- a/curses/wicd-curses.py +++ b/curses/wicd-curses.py @@ -54,7 +54,7 @@ import sys from time import sleep # Curses UIs for other stuff -from curses_misc import SelText,ComboBox,TextDialog,InputDialog,error +from curses_misc import SelText,DynEdit,DynIntEdit,ComboBox,Dialog2,TextDialog,InputDialog,error from prefs_curses import PrefsDialog import netentry_curses from netentry_curses import WirelessSettingsDialog, WiredSettingsDialog @@ -445,6 +445,66 @@ class WiredComboBox(ComboBox): loc = self.get_focus()[1] return self.theList[loc] +# Dialog2 that initiates an Ad-Hoc network connection +class AdHocDialog(Dialog2): + def __init__(self): + essid_t = language['essid'] + ip_t = language['ip'] + channel_t = language['channel'] + key_t = " " + language['key'] + use_ics_t = language['use_ics'] + use_encrypt_t = language['use_wep_encryption'] + + self.essid_edit = DynEdit(essid_t) + self.ip_edit = DynEdit(ip_t) + self.channel_edit = DynIntEdit(channel_t) + self.key_edit = DynEdit(key_t,sensitive=False) + + self.use_ics_chkb = urwid.CheckBox(use_ics_t) + self.use_encrypt_chkb = urwid.CheckBox(use_encrypt_t, + on_state_change=self.encrypt_callback) + + blank = urwid.Text('') + + # Set defaults + self.essid_edit.set_edit_text("My_Adhoc_Network") + self.ip_edit.set_edit_text("169.254.12.10") + self.channel_edit.set_edit_text("3") + + l = [self.essid_edit,self.ip_edit,self.channel_edit,blank, + self.use_ics_chkb,self.use_encrypt_chkb,self.key_edit] + #for line in text: + # l.append( urwid.Text( line,align=align)) + body = urwid.ListBox(l) + #body = urwid.AttrWrap(body, 'body') + + header = ('header',"Create an Ad-Hoc network") + Dialog2.__init__(self, header, 15, 50, body) + self.add_buttons([('OK',1),('Cancel',-1)]) + self.frame.set_focus('body') + + def encrypt_callback(self,chkbox,new_state,user_info=None): + self.key_edit.set_sensitive(new_state) + + def unhandled_key(self, size, k): + if k in ('up','page up'): + self.frame.set_focus('body') + if k in ('down','page down'): + self.frame.set_focus('footer') + if k == 'enter': + # pass enter to the "ok" button + self.frame.set_focus('footer') + self.buttons.set_focus(0) + self.view.keypress( size, k ) + def on_exit(self,exitcode): + data = ( self.essid_edit.get_edit_text(), + self.ip_edit.get_edit_text(), + self.channel_edit.get_edit_text(), + self.use_ics_chkb.get_state(), + self.use_encrypt_chkb.get_state(), + self.key_edit.get_edit_text()) + + return exitcode, data ######################################## ##### APPLICATION INTERFACE CLASS ######################################## @@ -784,6 +844,15 @@ class appGUI(): nettype = 'wireless' netname = str(self.wiredLB.get_focus()[1]) run_configscript(self.frame,netname,nettype) + if "O" in keys: + exitcode,data = AdHocDialog().run(ui,self.frame) + #essid,ip,channel,use_ics,use_encrypt,key_edit + if exitcode == 1: + wireless.CreateAdHocNetwork(data[0], + data[2], + data[1], "WEP", + data[5], + data[4], False) for k in keys: if urwid.is_mouse_event(k): diff --git a/in/man=wicd-curses.8.in b/in/man=wicd-curses.8.in index 944452f..3d69222 100644 --- a/in/man=wicd-curses.8.in +++ b/in/man=wicd-curses.8.in @@ -1,5 +1,5 @@ .\" First revision was r203 -.TH WICD-CURSES "8" "January 2009" "wicd-curses-r250" +.TH WICD-CURSES "8" "January 2009" "wicd-curses-r251" .SH NAME .B wicd-curses \- curses-based wicd(8) controller @@ -57,6 +57,9 @@ Rename the selected wired network profile (from the wired network combo box at t .BR S .\"Bring up the script selector for the selected network (requires superuser privileges) Bring up instructions on how to edit the scripts. I have implemented a way to do this in the interface itself, but making it function with all Linux distros would be difficult. Since you are reading this, you should know how to do what I suggest. ;-) +.TP +.BR O +Raise the Ad-Hoc network creation dialog ".SH "FILES" These are not used yet.