-import random, time
+import random, time, re
import urwid, urwid.curses_display
from csc.apps.urwid.widgets import *
return "%s %s %s" % (cword, eword, oword)
+office_data = {
+ "name" : "Office Staff",
+ "group" : "office"
+}
+
+syscom_data = {
+ "name" : "Systems Committee",
+ "group" : "syscom"
+}
+
def menu_items(items):
- return [ urwid.AttrWrap( ButtonText( cb, txt ), 'menu', 'selected') for (txt, cb) in items ]
+ return [ urwid.AttrWrap( ButtonText( cb, data, txt ), 'menu', 'selected') for (txt, cb, data) in items ]
def main_menu():
menu = [
- ("New Member", new_member),
- ("Renew Membership", renew_member),
- ("Create Club Account", new_club),
- ("Display Member", display_member),
- ("Search", search_members),
- ("Exit", raise_abort),
+ ("New Member", new_member, None),
+ ("Renew Membership", renew_member, None),
+ ("Create Club Account", new_club, None),
+ ("Display Member", display_member, None),
+ ("Search", search_members, None),
+ ("Manage Office Staff", group_members, office_data),
+ ("Manage Systems Committee", group_members, syscom_data),
+ ("Exit", raise_abort, None),
]
listbox = urwid.ListBox( menu_items( menu ) )
push_window( urwid.Filler( urwid.Padding(
urwid.LineBox(wiz), 'center', dimensions[0]),
'middle', dimensions[1] ), name )
-
+
def new_member(*args, **kwargs):
push_wizard("New Member", [
newmember.IntroPage,
renew.EndPage,
])
-def display_member(a):
+def display_member(data):
push_wizard("Display Member", [
renew.UserPage,
info.InfoPage,
], (60, 15))
-def search_members(a):
+def search_members(data):
menu = [
- ("Members by term", search_term),
- ("Members by name", search_name),
- ("Back", raise_back),
+ ("Members by term", search_term, None),
+ ("Members by name", search_name, None),
+ ("Back", raise_back, None),
]
listbox = urwid.ListBox( menu_items( menu ) )
push_window(listbox, "Search")
-def search_name(a):
+def search_name(data):
push_wizard("By Name", [ search.NamePage ])
-def search_term(a):
+def search_term(data):
push_wizard("By Term", [ search.TermPage ])
+def group_members(data):
+ menu = [
+ ("Add %s member" % data["name"].lower(), add_group_member, data),
+ ("Remove %s member" % data["name"].lower(), remove_group_member, data),
+ ("List %s members" % data["name"].lower(), list_group_members, data),
+ ("Back", raise_back, None),
+ ]
+
+ listbox = urwid.ListBox( menu_items( menu ) )
+ push_window(listbox, "Manage %s" % data["name"])
+
+def add_group_member(data):
+ pass
+
+def remove_group_member(data):
+ pass
+
+def list_group_members(data):
+
+ if not members.connected(): members.connect()
+ group_members = members.group_members(data["group"])
+ r = re.compile('^uid=([^,]*)')
+ menu = []
+ for group in group_members:
+ menu.append( (r.match(group).group(1), None, None) )
+ menu.append( ("Back", raise_back, None) )
+
+ listbox = urwid.ListBox( menu_items( menu ) )
+ push_window(listbox, "Members")
+
def run():
push_window( main_menu(), program_name() )
event_loop( ui )
from csc.apps.urwid.ldapfilter import *
class ButtonText(urwid.Text):
- def __init__(self, callback, *args, **kwargs):
+ def __init__(self, callback, data, *args, **kwargs):
self.callback = callback
+ self.data = data
urwid.Text.__init__(self, *args, **kwargs)
def selectable(self):
return True
def keypress(self, size, key):
- if key == 'enter':
- self.callback(self.get_text())
+ if key == 'enter' and self.callback:
+ self.callback(self.data)
else:
return key
self.panels.append( panel )
if len(self.panels) == 1:
self.select(0)
-
+
def select(self, panelno, set_focus=True):
if 0 <= panelno < len(self.panels):
self.selected = panelno
self.pile.set_focus( 0 )
else:
self.pile.set_focus( 1 )
-
+
def next(self, *args, **kwargs):
if self.panels[self.selected].check():
self.select( self.selected )
return
self.select(self.selected + 1)
-
+
def back(self, *args, **kwargs):
self.select(self.selected - 1, False)