def initialize(self): for i in range(10,0,-1): sleep(1) self.write(ac.clear + ac.move2(12, 40) + str(i)) self.write(ac.clear + ac.move2(12,40) + ac.blink + u'任意键继续') self.pause() data = tidy_anim(self.render_str('movie'), 21) self.anim = self.load(Animation, data, pause=self.pause, start_line=0, callback=self.play_done) self.anim.run(playone=True)
def add(self): self.write("".join([ac.move2(4, 1), ac.kill_line_n(20), ac.move2(5, 1), self.render_str("add_team_hint")])) teams = self.readline(prompt=u"请输入要加入的组,逗号隔开:") if teams: succ = 0 notfound = 0 for t in teams.split(","): if t in self.alias: t = self.alias[t] if manager.team.exists(t): manager.team.join_team(self.euserid, t) succ += 1 else: notfound += 1 self.hint(u"加入成功 %s 个,找不到id共 %s 个" % (succ, notfound)) self.refresh_items()
def initialize(self): self.write(''.join([ac.clear, ac.move2(22,1)])) self.session.charset = 'utf8' while True: username_inputer = self.load(EastAsiaTextInput) username = username_inputer.readln(prompt=u'请输入你的用户名,没有则会注册一个:') if not username : continue password_inputer = self.load(Password) password = password_inputer.readln(prompt=u'请输入你的密码:') if username in USER_POOL : if USER_POOL[username] != password : self.wrong(u'用户名与密码不匹配!') continue self.success(u'登录成功!') else: if len(USER_POOL) >= MAX_REGISTER: self.wrong(u'对不起,已达最大注册人数!') self.close() self.success(u'注册新用户!') USER_POOL[username] = password MSG_BOX[username] = u'欢迎使用!您还没有留言!' break self.session['username'] = username self.pause() self.goto('main_menu')
def readline(self, acceptable=ac.is_safe_char, finish=ac.ks_finish, buf_size=20, prompt=u"", prefix=""): self.write("".join((ac.move2(24, 1), ac.kill_line))) res = super(BaseTableFrame, self).readline(acceptable, finish, buf_size, prompt, prefix=prefix) self.write("\r") self.bottom_bar() self.table.restore_cursor_gently() return res
def read_with_hook(self, hook, buf_size=20, prompt=""): self.write("".join((ac.move2(2, 1), ac.kill_line))) if prompt: self.write(prompt) buf = [] while len(buf) < buf_size: ds = self.read_secret(2) ds = ds or ds[0] if ds == ac.k_backspace: if buf: data = buf.pop() self.write(ac.backspace) continue elif ds in ac.ks_finish: break elif ds == ac.k_ctrl_c: buf = False break else: if ds.isalnum(): buf.append(ds) self.write(ds) hook("".join(buf)) self.write("\r") self.quick_help() self.table.restore_cursor_gently() if buf is False: return buf else: return "".join(buf)
def display(self): self.cls() self.top_bar() self.anim_.lanuch() self.bottom_bar() self.write(ac.move2(11,0)) self.menu_.display()
def bottom_bar(self, msg=u''): self.frame.push(ac.move2(24, 1)) self.frame.render(u'bottom_edit', message=msg, l=self._hover_col, r=self._hover_row) self.fix_cursor()
def bottom_bar(self,repos=False,close=False): if close : self.write(ac.save) if repos : self.write(ac.move2(24,0)) self.write( zh_format(self.bottom_txt, datetime.now().ctime(), self.session.userid)) if close : self.write(ac.restore)
def bottom_bar(self, msg=u''): self.frame.write(''.join([ac.move2(24, 1), ac.kill_to_end, ac.outlook(ac.art_code['bg_blue'], ac.art_code['yellow'], ac.art_code['bold']), msg, ac.reset])) self.fix_cursor()
def initialize(self): self.cls() self.render('nickdata') res = self.select(lambda o : self.write(ac.move2(12,1)+ ac.clear1+ unicode(self.session.user[o])+ ac.move2(10,6) + ac.kill_to_end + config.options['nickdata'][o]), self.options) if res is not False: self.sel = self.options[res] self.suspend('edit_text', callback=self.save_text, filename=config.options['nickdata'][self.sel]) else: self.write(u'\r\n取消设置!') self.pause() self.goto_back()
def bottom_bar(self, s, l, message=''): self.write(ac.move2(24, 1)) percent = (s + 1) * 100 // (l + 1) self.render(u'bottom_view_topic', s=s, percent=percent, message=message)
def read_with_hook(self, hook, pos, buf_size=20): buf = [] while True: self.push(ac.move2(pos[0], pos[1])) ds = self.read_secret() ds = ds or ds[0] if ds == ac.k_backspace: if buf: data = buf.pop() pos[1] -= 1 self.write(ac.backspace) continue elif ds in ac.ks_finish: break elif ds == ac.k_ctrl_c: buf = False break elif len(buf) < buf_size: if ds.isalnum() or ds == '_' : buf.append(ds) self.write(ds) pos[1] += 1 hook(u''.join(buf)) if buf is False : return buf else: return u''.join(buf)
def read_with_hook(self, hook, pos, buf_size=20): buf = [] while True: self.push(ac.move2(pos[0], pos[1])) ds = self.read_secret() ds = ds or ds[0] if ds == ac.k_backspace: if buf: data = buf.pop() pos[1] -= 1 self.write(ac.backspace) continue elif ds in ac.ks_finish: break elif ds == ac.k_ctrl_c: buf = False break elif len(buf) < buf_size: if ds.isalnum() or ds == '_': buf.append(ds) self.write(ds) pos[1] += 1 hook(u''.join(buf)) if buf is False: return buf else: return u''.join(buf)
def initialize(self): # self.write('Welcome to Guest BBS') # self.write(''.join([ac.clear, ac.move2(22, 1)])) self.session.charset = 'utf8' self.set_title(res.welcome_title) self.write(''.join([ac.move2(22, 1)])) while True: username_inputer = self.load(EastAsiaTextInput) username = username_inputer.readln(prompt=res.please_enter_username) if not username: continue elif username == res.register_user_name: self.goto('register') password_inputer = self.load(Password) password = password_inputer.readln(prompt=res.please_enter_password) if user.login(username, password): self.goto('main_menu') else: continue # if username in USER_POOL: # if USER_POOL[username] != password: # self.wrong(u'用户名与密码不匹配!') # continue # self.success(res.login_success) # else: # if len(USER_POOL) >= MAX_REGISTER: # self.wrong(u'对不起,已达最大注册人数!') # self.close() # self.success(u'注册新用户!') # USER_POOL[username] = password # MSG_BOX[username] = u'欢迎使用!您还没有留言!' # break self.session['username'] = username self.pause()
def readline(self): self.push(ac.move2(24, 1)) self.push(ac.kill_line) res = self.safe_readline() self.push(u'\r') self.push(self.render_str('bottom')) self._table.restore_cursor_gently() return res
def restore(self): self.cls() self.top_bar() self.bottom_bar() self.push(ac.move2(self._MENU_START_LINE, 1)) self.push(self._menu_background) self._anim.launch() self._menu.restore()
def set_data(self, real, pos, shortcuts, text): self.real = real self.pos = pos self.shortcuts = shortcuts self.text = text self.content = u''.join([ u'%s %s' % (ac.move2(*p), t) for p,t in zip(pos, text)]) self.len = len(self.real)
def readline(self, prompt=u"", prefix=u"", acceptable=ac.is_safe_char, buf_size=20): self.push(ac.move2(24, 1)) self.push(ac.kill_line) res = self.safe_readline(prompt=prompt, prefix=prefix, acceptable=acceptable, buf_size=buf_size) self.push(u"\r") self.push(self.render_str("bottom")) self._table.restore_cursor_gently() return res
def initialize(self): super(BaseSelectFrame, self).initialize() self.menu = self.load(ColMenu) menu, height, background = self.load_all() self.menu.setup(menu, height, ''.join((ac.move2(self.menu_start_line, 1) , background))) self.restore()
def move_down(self): try: line = self.lines[self._vis_start+self.height] except IndexError: self.callback(True) return self._vis_start += 1 self.frame.write(''.join([ac.move2(self.height+1, 1), ac.kill_line, line, '\r\n']))
def get_update_txt(self, text): row = self.start_line col = 5 buf = [] for d in text[:self.page_limit] : if col == 5 : buf.append('%s%s %s' % (ac.move2(row, 1), ac.kill_to_end, d)) else: buf.append('%s%s' % (ac.move2(row, col), d)) col += 25 if col >= 70: col = 5 row += 1 if not text : buf.append(ac.move2(row, col)) if row < self.start_line + self.height - 1: buf += ['\r\n' + ac.kill_line] * (self.start_line + self.height - 1 - row) return ''.join(buf)
def _load_data(self, data, start_num): self.data = data self.start_num = start_num self.wrapper_data = [ self.formater(x) for x in self.data] self.index_limit = len(self.data) self._screen = ''.join([ac.move2(self.start_line, 1), ac.kill_line, self.seq_lines.join(self.wrapper_data), self.empty_line*(self.height - self.index_limit)])
def readline(self, prompt=u'', prefix=u'', acceptable=ac.is_safe_char, buf_size=20): self.push(ac.move2(24, 1)) self.push(ac.kill_line) res = self.safe_readline(prompt=prompt, prefix=prefix, acceptable=acceptable, buf_size=buf_size) self.push(u'\r') self.push(self.render_str('bottom')) self._table.restore_cursor_gently() return res
def add(self): self.write(''.join([ac.move2(4, 1), ac.kill_line_n(20), ac.move2(5, 1), self.render_str('add_team_hint')])) teams = self.readline(prompt=u'请输入要加入的组,逗号隔开:') if teams : succ = 0 notfound = 0 for t in teams.split(',') : if t in self.alias: t = self.alias[t] if manager.team.exists(t) : manager.team.join_team(self.euserid, t) succ += 1 else: notfound += 1 self.hint(u'加入成功 %s 个,找不到id共 %s 个' % (succ, notfound)) self.refresh_items()
def read_lbd(self, reader): u''' Wrapper real read function. ''' self.write(u''.join((ac.move2(24,1), ac.kill_line))) res = reader() self.write(u'\r') self.bottom_bar() self.table.restore_cursor_gently() return res
def initialize(self): super(BaseMenuFrame, self).initialize() self.menu = self.load(ColMenu) menu,height,background = self.load_all() self.menu.setup(menu, height, ''.join((ac.move2(self.menu_start_line, 1) , background))) anim_data = self.get_anim_data() self.anim = self.load(Animation, anim_data, start_line=self.anim_start_line) self.restore()
def read(self, default=None): if default is None: default = {} for name,text,handler in self.data : self.frame.write(''.join((ac.move2(self.start_line, 1), ac.kill_line_n(self.height), ac.move2(self.start_line, 1), text))) while True: self.frame.write(''.join([ac.move2(self.start_line + self.height, 1), ac.kill_line])) value = self.readline(default.get(name)) if value is False: return try: value = handler(value) except ValueError as e: self.frame.write('%s%s\r\n' % (ac.move2(self.msg_line, 1), e.message)) else: default[name] = value break return default
def load_data(self, start_num): data = self.loader(start_num, self.height) if data : self.data = data self.start_num = start_num self.wrapper_data = [ self.formater(x) for x in self.data] self.index_limit = len(self.data) self._screen = ''.join([ac.move2(self.start_line, 1), ac.kill_line, self.seq_lines.join(self.wrapper_data), self.empty_line*(self.height - self.index_limit)]) else: raise TableLoadNoDataError
def initialize(self, teamname): self.cls() self.teamname = teamname self.members = members = list(manager.team.all_members(teamname)) self.top_bar() self.write( "".join([ac.move2(2, 1), config.str["EDIT_LIST_QUICK_HELP"], "\r\n", config.str["EDIT_LIST_TEAM_THEAD"]]) ) self.listbox = self.load(ListBox, start_line=4) self.listbox.update(members, members) self.prepare_remove = set() if not self.members: self.add()
def debug(self): # self._eval('auth gcc 123') self.write( '\r\n'.join( map(lambda s : ''.join( map(str, range(s, s+20))), range(1,20)))) self.write(ac.move2(10,20)) while True: print '>>', d = self.read() print '[%r]' % d self.write_raw("NEWLINE\241\276 \241\277\312")
def initialize(self, teamname): self.cls() self.teamname = teamname self.members = members = list(manager.team.all_members(teamname)) self.top_bar() self.write(''.join([ac.move2(2,1), config.str['EDIT_LIST_QUICK_HELP'], '\r\n', config.str['EDIT_LIST_TEAM_THEAD']])) self.listbox = self.load(ListBox, start_line=4) self.listbox.update(members, members) self.prepare_remove = set() if not self.members : self.add()
def initialize(self, userid): self.cls() self.euserid = userid self.teams = teams = list(manager.team.user_teams(userid)) self.top_bar() self.write(''.join([ac.move2(2,1), config.str['EDIT_LIST_QUICK_HELP'], '\r\n', config.str['EDIT_LIST_USERTEAM_THEAD']])) self.listbox = self.load(ListBox, start_line=4) self.listbox.update(teams, teams) self.prepare_remove = set() if not teams: self.add()
def initialize(self): self.write(''.join([ ac.clear, ac.move2(10, 50), ac.outlook(ac.art_code['red'], ac.art_code['bold']), 'M M S S G G', ac.reset])) self.menu = self.load(ColMenu) # 记住要先import ColMenu self.menu.setup([ ['show_message', 'set_message', 'delete_self', 'bye'], [(8,20), (10,22), (12, 24), (14, 26)], {'a':0, 'b':1, 'c':2, 'd': 3}, [u'a. 查看留言', u'b. 设置留言', u'c. 删除资料', u'd. 离开系统'], ]) self.menu.restore()
def initialize(self, userid): self.cls() self.euserid = userid self.teams = teams = list(manager.team.user_teams(userid)) self.top_bar() self.write( "".join( [ac.move2(2, 1), config.str["EDIT_LIST_QUICK_HELP"], "\r\n", config.str["EDIT_LIST_USERTEAM_THEAD"]] ) ) self.listbox = self.load(ListBox, start_line=4) self.listbox.update(teams, teams) self.prepare_remove = set() if not teams: self.add()
class BaseFrame(Frame): pause_prompt = '%s%s%s%s' % (ac.move2( 24, 20), ac.outlook(ac.art_code['yellow'], ac.art_code['blink']), '任意键继续', ac.reset) def set_title(self, msg): self.write(''.join([ac.clear, ac.move2(1, 1), msg])) def wrong(self, msg): self.writeln(u'%s%s%s' % (ac.red, msg, ac.reset)) def warnning(self, msg): self.writeln(u'%s%s%s' % (ac.yellow, msg, ac.reset)) def success(self, msg): self.writeln(u'%s%s%s' % (ac.green, msg, ac.reset)) def pause(self): super(BaseFrame, self).pause(prompt=self.pause_prompt)
def initialize(self): self.set_title(res.register_welcome_message) self.write(''.join([ac.move2(22, 1)])) while True: username_inputer = self.load(EastAsiaTextInput) name = username_inputer.readln(prompt=res.please_enter_username) if not name: continue pass_inputer = self.load(Password) password = pass_inputer.readln(prompt=res.please_enter_password) if not password: continue email_inputer = self.load(EastAsiaTextInput) email = email_inputer.readln(prompt=res.please_enter_email) if not email: continue user.register(name, password, email) self.goto('welcome')
def set_start(self,start): if start == self.s: return if (self.s > start) and (self.s <= start + 10): offset = self.s - start self.write(ac.move0 + ac.insertn(offset) + '\r') self.write('\r\n'.join(self.getlines(start,self.s))) self.s = start self.fix_bottom() elif (start > self.s) and (start <= self.s + 10): astart = self.s + self.h # Append Start self.write(ac.move2(self.h+1,0)) self.write(ac.kill_line) self.write('\r\n'.join(self.getlines(astart, start + self.h))) self.write('\r\n') self.s = start self.fix_bottom() else : self.s = start self.restore_screen()
def bottom_do(self, func, *args, **kwargs): self.push(ac.move2(24, 1)) self.push(ac.kill_line) res = func(*args, **kwargs) self.bottom_bar() return res
def set_title(self, msg): self.write(''.join([ac.clear, ac.move2(1, 1), msg]))
def bottom_bar(self, s, l, message=''): self.push(ac.move2(24, 1)) self.render(self.bottom_tpl, s=s, l=l, message=message)
def _fix_cursor(self): self.frame.write('%s %s>' % (ac.movex_d, ac.move2(self.start_line + self.hover, 1)))
def bottom_bar(self, s, l, message=''): self.write(ac.move2(24, 1)) self.render(u'bottom_view_float', s=s, l=l, message=message)
def message(self, msg): self.push(ac.move2(24, 1)) self.push(ac.kill_line) self.push(msg)
def readline(self, prompt): return self.safe_readline(prompt='%s%s\r\n' % (ac.move2(21,1), prompt))
def hint(self, msg): self.writeln('%s%s' % (ac.move2(23, 1), msg)) self.pause()