def __init__(self, initial_buttons):
self.list_stack = [initial_buttons]
self.all_styled_buttons = [urwid.AttrMap(b, None, 'reveal focus')
for b in initial_buttons.items]
self.list_walker = ChooseFromListWalker(self.all_styled_buttons, self)
list_box = ChooseFromListBox(self.list_walker)
column_array = convert_details_to_columns(
initial_buttons.items[0].retrieve_important_details())
self.cols = urwid.Columns(
[('weight', 1, column_array[0]), ('weight', 4, column_array[1])], )
self.detail_view = False
self.base_title_text = self.list_stack[-1].items_title
self.title = urwid.AttrMap(urwid.Text(self.base_title_text + " " + self.EMPTY_FILTER_TEXT), 'title')
self.cols_title = urwid.AttrMap(urwid.Text(u'Attributes'), 'title')
self.body = urwid.Pile([(2, urwid.Filler(self.title, valign='top')), list_box, (
2, urwid.Filler(self.cols_title, valign='top')), self.cols])
self.before_detail = None
self.filter_string = ""
python类AttrMap()的实例源码
def main():
palette = [
('body','black','dark cyan', 'standout'),
('foot','light gray', 'black'),
('key','light cyan', 'black', 'underline'),
('title', 'white', 'black',),
]
footer_text = [
('title', "Fibonacci Set Viewer"), " ",
('key', "UP"), ", ", ('key', "DOWN"), ", ",
('key', "PAGE UP"), " and ", ('key', "PAGE DOWN"),
" move view ",
('key', "Q"), " exits",
]
def exit_on_q(input):
if input in ('q', 'Q'):
raise urwid.ExitMainLoop()
listbox = urwid.ListBox(FibonacciWalker())
footer = urwid.AttrMap(urwid.Text(footer_text), 'foot')
view = urwid.Frame(urwid.AttrWrap(listbox, 'body'), footer=footer)
loop = urwid.MainLoop(view, palette, unhandled_input=exit_on_q)
loop.run()
def __init__(self, data, field_labels, btn_label, callbacks):
self.app = data["app"]
self.error = False
self.fields, self.callbacks = [], callbacks
for label in field_labels:
self.fields.append(InputField(label, next_callback=self.next))
input_fields = urwid.Pile(self.fields)
self.message_field = urwid.Text('')
error_row = urwid.Columns([(17, urwid.Text('')), self.message_field])
buttons = [TextButton(btn_label, on_press=self.next)]
if callbacks['back']:
buttons.insert(0, TextButton('< Back', align='left', on_press=callbacks['back']))
footer = urwid.AttrMap(urwid.Columns(buttons), 'button')
card = Card(urwid.Pile(
[data["content"], input_fields, error_row]), footer=footer)
urwid.WidgetWrap.__init__(self, card)
def welcome(self):
pic = picRead('welcome.bmp', align='right')
text = urwid.Text([
('text bold', self.app.name),
('text', ' is a CLI tool for auditing MongoDB servers, detecting poor security '
'settings and performing automated penetration testing.\n\n'),
('text italic', "\"With great power comes great responsibility\". Unauthorized "
"access to strangers' computer systems is a crime "
"in many countries. Take care.")
])
button = urwid.AttrMap(
TextButton(
"Ok, I'll be careful!", on_press=self.choose_test), 'button')
card = Card(text, header=pic, footer=button)
self.app.render(card)
def make_header(self):
"""Populate the row of board buttons on top."""
# TODO: make it intelligent so it fits in the terminal window
# and doesn't depend on arbitrary values from config.
# Keep count of number of printed boards so we won't print too many.
i = 0
longest = 0
btn_list = []
for board in sorted(self.config.get_boardlist().keys()):
# This `if` block should be removed when the function learns to
# calculate horizontal space required.
if i >= self.config.max_boards:
break
if len(board) > longest:
longest = len(board)
btn_list.append(CleanButton(
"/" + board + "/", self.button_press, board))
i += 1
# `longest + 2` to account for slashes.
return ur.AttrMap(ur.GridFlow(btn_list, longest + 2, 1, 0, "center"),
"reverse")
def quit_prompt(self):
"""Pop-up window that appears when you try to quit."""
# Nothing fancy here.
question = ur.Text(("bold", "Really quit?"), "center")
yes_btn = ur.AttrMap(ur.Button(
"Yes", self.button_press, "quit"), "red", None)
no_btn = ur.AttrMap(ur.Button(
"No", self.button_press, "back"), "green", None)
prompt = ur.LineBox(ur.ListBox(ur.SimpleFocusListWalker(
[question, self.div, self.div, no_btn, yes_btn])))
# The only interesting thing in this method is this Overlay widget.
overlay = MyOverlay(
prompt, self.loop.baseWidget,
"center", 20, "middle", 8,
16, 8,
parent=self)
self.loop.Widget = overlay
def reply_box(self, button, thr_id):
subject = ur.Edit(("blue", "Subject: "), wrap="clip")
name = ur.Edit(("blue", "Name: "), "Anonymous", wrap="clip")
if thr_id == -1:
text = ur.Edit(multiline=True)
else:
text = ur.Edit(edit_text=">>" + thr_id, multiline=True)
post_btn = ur.AttrMap(ur.Button(
"Post", self.add_post, (subject, name, text, thr_id)),
"green", "b_green")
box = ur.LineBox(ur.ListBox(ur.SimpleFocusListWalker(
[name, subject, ur.LineBox(text, "Post text"),
self.parent.div, post_btn])))
self.loop.Widget = MyOverlay(
box, self.loop.baseWidget,
"center", ("relative", 100), "top", ("relative", 100),
None, None,
self.parent.margin, self.parent.margin,
int(self.loop.dimensions[1] * 0.3),
int(self.loop.dimensions[1] * 0.3),
self.parent)
def init_main_screen(self):
self.w_filter_edit = urwid.Edit('Filter ')
aw_filter_edit = urwid.AttrMap(self.w_filter_edit, 'edit', 'edit_focus')
self.w_status_line = urwid.AttrMap(StatusLine(self.store.get_test_stats), 'statusline', '')
urwid.connect_signal(self.w_filter_edit, 'change', self.on_filter_change)
self.init_test_listbox()
self.w_main = urwid.Padding(
urwid.Pile([
('pack', urwid.Text(u'Python Urwid Test Runner', align='center')),
('pack', urwid.Divider()),
('pack', aw_filter_edit),
('pack', urwid.Divider()),
self.w_test_listbox,
('pack', urwid.Divider()),
('pack', self.w_status_line),
]),
left=2, right=2
)
def delete_tab(self, fname):
files = self.display.file_names
# make sure there is more than one file open
if len(files) > 1:
index = files.index(fname)
if index < len(files)-1: # if not last in list
new_name = files[index+1]
else: # if last file in list
new_name = files[index-1]
# delete file and contents from master lists
#del self.display.tab_info[fname]
del files[index]
del self.display.tabs[index]
# reset the footer with new tab amount
foot_col = urwid.Columns(self.display.tabs)
foot = urwid.AttrMap(foot_col, 'footer')
if self.display.layout:
self.display.top.contents['header'] = (foot, None)
else:
self.display.top.contents['footer'] = (foot, None)
self.switch_tabs(new_name)
del self.display.tab_info[fname]
def _sync_widget_lists(self):
"""
Make sure the widget_list for each column contains the same
commodities in the same order as the main commodity map
"""
for column in self.auxiliary_cols:
column.widget_list.clear() # pylint: disable=no-member
for commodity, value in column.data_map.items():
if isinstance(value, int):
formatted_number = format_number(value)
if column.money:
button = IndexedMenuButton('${}'.format(formatted_number))
else:
button = IndexedMenuButton('{}'.format(formatted_number))
else:
if value is None:
value = " "
button = IndexedMenuButton(value)
urwid.connect_signal(button, 'click', partial(self.handle_commodity_select, commodity))
column.widget_list.append(urwid.AttrMap(button, None)) # pylint: disable=no-member
def __init__(self, Telegram_ui):
self.Telegram_ui = Telegram_ui
self.updateLockedauto = False
self.username_list = []
self.buffer_writing_text = {}
# handeling navigation in history
self.history_own_message = {}
self.history_pos = 0
self.cur_text = ""
self.status_bar = urwid.Text(('status_bar', ' '), align='left')
self.attr = urwid.AttrMap(self.status_bar, 'status_bar')
self.widgetEdit = urwid.Edit(TEXT_CAPTION, "", multiline=False)
self.pile = urwid.Pile([self.attr, self.widgetEdit])
super().__init__(self.pile)
self.update_send_widget()
def __init__(self, app, board, topic, callback=None):
super(BoardRow, self).__init__('', on_press=callback,
user_data=(board.key, board.title))
self.app = app
self.mark = False
self._style = None
self.board_key = board.key
if topic:
self.topic_key = topic.key
self.indent = ' '
else:
self.topic_key = None
self.indent = ''
self.board_title = board.title
self.title = mywid.SearchableText('')
self._setTitle(board.title, self.indent)
self.title.set_wrap_mode('clip')
self.active_stories = urwid.Text(u'', align=urwid.RIGHT)
col = urwid.Columns([
self.title,
('fixed', ACTIVE_COL_WIDTH, self.active_stories),
])
self.row_style = urwid.AttrMap(col, '')
self._w = urwid.AttrMap(self.row_style, None, focus_map=self.board_focus_map)
self.update(board)
def __init__(self, app, project, topic, callback=None):
super(ProjectRow, self).__init__('', on_press=callback,
user_data=(project.key, project.name))
self.app = app
self.mark = False
self._style = None
self.project_key = project.key
if topic:
self.topic_key = topic.key
self.indent = ' '
else:
self.topic_key = None
self.indent = ''
self.project_name = project.name
self.name = mywid.SearchableText('')
self._setName(project.name, self.indent)
self.name.set_wrap_mode('clip')
self.active_stories = urwid.Text(u'', align=urwid.RIGHT)
col = urwid.Columns([
self.name,
('fixed', ACTIVE_COL_WIDTH, self.active_stories),
])
self.row_style = urwid.AttrMap(col, '')
self._w = urwid.AttrMap(self.row_style, None, focus_map=self.project_focus_map)
self.update(project)
def __init__(self, topic, callback=None):
super(TopicRow, self).__init__('', on_press=callback,
user_data=(topic.key, topic.name))
self.mark = False
self._style = None
self.topic_key = topic.key
self.name = urwid.Text('')
self._setName(topic.name)
self.name.set_wrap_mode('clip')
self.active_stories = urwid.Text(u'', align=urwid.RIGHT)
col = urwid.Columns([
self.name,
('fixed', ACTIVE_COL_WIDTH, self.active_stories),
])
self.row_style = urwid.AttrMap(col, '')
self._w = urwid.AttrMap(self.row_style, None, focus_map=self.project_focus_map)
self._style = 'subscribed-project'
self.row_style.set_attr_map({None: self._style})
self.update(topic)
def __init__(self, app, story,
enabled_columns, callback=None):
super(StoryRow, self).__init__('', on_press=callback, user_data=story.key)
self.app = app
self.story_key = story.key
self.enabled_columns = enabled_columns
self.title = mywid.SearchableText(u'', wrap='clip')
self.id = mywid.SearchableText(u'')
self.updated = mywid.SearchableText(u'')
self.status = mywid.SearchableText(u'')
self.creator = mywid.SearchableText(u'', wrap='clip')
self.mark = False
self.columns = urwid.Columns([], dividechars=1)
self.row_style = urwid.AttrMap(self.columns, '')
self._w = urwid.AttrMap(self.row_style, None, focus_map=self.story_focus_map)
self.update(story)
def update_columns(self):
cols = []
names = discurses.processing.shorten_channel_names(
self.chat_widget.channels, 100)
for ch in self.chat_widget.channels:
if ch == self.chat_widget.send_channel:
cols.append((urwid.AttrMap(
urwid.Text(
names[ch], align="center"),
"send_channel_selector_sel",
"send_channel_selector_sel_f"),
self.w_cols.options('weight', 1)))
else:
cols.append((urwid.AttrMap(
urwid.Text(
names[ch], align="center"),
"send_channel_selector",
"send_channel_selector_f"),
self.w_cols.options('weight', 1)))
self.w_cols.contents = cols
def __init__(self, data, field_labels, btn_label, callbacks):
self.app = data["app"]
self.error = False
self.fields, self.callbacks = [], callbacks
for label in field_labels:
self.fields.append(InputField(label, next_callback=self.next))
input_fields = urwid.Pile(self.fields)
self.message_field = urwid.Text('')
error_row = urwid.Columns([(17, urwid.Text('')), self.message_field])
buttons = [TextButton(btn_label, on_press=self.next)]
if callbacks['back']:
buttons.insert(0, TextButton('< Back', align='left', on_press=callbacks['back']))
footer = urwid.AttrMap(urwid.Columns(buttons), 'button')
card = Card(urwid.Pile(
[data["content"], input_fields, error_row]), footer=footer)
urwid.WidgetWrap.__init__(self, card)
def welcome(self):
pic = picRead('welcome.bmp', align='right')
text = urwid.Text([
('text bold', self.app.name),
('text', ' is a CLI tool for auditing MongoDB servers, detecting poor security '
'settings and performing automated penetration testing.\n\n'),
('text italic', "\"With great power comes great responsibility\". Unauthorized "
"access to strangers' computer systems is a crime "
"in many countries. Take care.")
])
button = urwid.AttrMap(
TextButton(
"Ok, I'll be careful!", on_press=self.choose_test), 'button')
card = Card(text, header=pic, footer=button)
self.app.render(card)
def __init__(self):
self._text_up = urwid.Text('', align='right')
self._text_up_limit = urwid.Text('')
self._text_dn = urwid.Text('', align='right')
self._text_dn_limit = urwid.Text('')
spacer = urwid.AttrMap(urwid.SolidFill(' '), 'bottombar')
self._spacer_canvas = spacer.render((self._SPACER_WIDTH, 1))
def mkattr(text, attrsname):
return urwid.AttrMap(urwid.Padding(text), attrsname)
self._attr_up = mkattr(self._text_up, 'bottombar.bandwidth.up')
self._attr_up_limit = mkattr(self._text_up_limit, 'bottombar.bandwidth.up')
self._attr_dn = mkattr(self._text_dn, 'bottombar.bandwidth.down')
self._attr_dn_limit = mkattr(self._text_dn_limit, 'bottombar.bandwidth.down')
self._up_limit_width = 0
self._dn_limit_width = 0
self._connected = False
srvapi.status.on_update(self._update_current_rates)
srvapi.settings.on_update(self._update_rate_limits)
def display_help(self, topics, lines):
import urwid
from ...tui.scroll import (Scrollable, ScrollBar)
if hasattr(self, 'title'):
titlew = make_tab_title_widget(str(self.title),
attr_unfocused='tabs.help.unfocused',
attr_focused='tabs.help.focused')
else:
titlew = make_tab_title_widget(','.join(topics),
attr_unfocused='tabs.help.unfocused',
attr_focused='tabs.help.focused')
textw = urwid.AttrMap(Scrollable(urwid.Text('\n'.join(lines))), 'helptext')
contentw = urwid.AttrMap(ScrollBar(textw), 'scrollbar')
self.tui.tabs.load(titlew, contentw)
def __init__(self, connection_name):
try:
self.connection_name = connection_name
frame = self.getFrame()
comp = self.getCommandProcessor()
self.loop = urwid.MainLoop(urwid.AttrMap(frame, 'bg'),
unhandled_input=comp.onInput,
palette=themes['dark'])
self.consoleMonitor = ScreepsConsoleMonitor(connection_name,
self.consoleWidget,
self.listWalker,
self.loop)
comp.setDisplayWidgets(self.loop,
frame,
self.getConsole(),
self.getConsoleListWalker(),
self.getEdit(),
self.consoleMonitor)
self.loop.run()
except KeyboardInterrupt:
exit(0)
def __init__(self, title, command_caption='Command: (Tab to switch focus to upper frame, where you can scroll text)', cmd_cb=None, max_size=1000):
self.header=urwid.Text(title)
self.model=urwid.SimpleListWalker([])
self.body=ListView(self.model, lambda: self._update_focus(False), max_size=max_size )
self.input=Input(lambda: self._update_focus(True))
foot=urwid.Pile([urwid.AttrMap(urwid.Text(command_caption), 'reversed'),
urwid.AttrMap(self.input,'normal')])
urwid.Frame.__init__(self,
urwid.AttrWrap(self.body, 'normal'),
urwid.AttrWrap(self.header, 'reversed'),
foot)
self.set_focus_path(['footer',1])
self._focus=True
urwid.connect_signal(self.input,'line_entered',self.on_line_entered)
self._cmd=cmd_cb
self._output_styles=[s[0] for s in self.PALLETE]
self.eloop=None
def __init__(self, title, command_caption='Command: (Tab to switch focus to upper frame, where you can scroll text)', cmd_cb=None, max_size=1000):
self.header=urwid.Text(title)
self.model=urwid.SimpleListWalker([])
self.body=ListView(self.model, lambda: self._update_focus(False), max_size=max_size )
self.input=Input(lambda: self._update_focus(True))
foot=urwid.Pile([urwid.AttrMap(urwid.Text(command_caption), 'reversed'),
urwid.AttrMap(self.input,'normal')])
urwid.Frame.__init__(self,
urwid.AttrWrap(self.body, 'normal'),
urwid.AttrWrap(self.header, 'reversed'),
foot)
self.set_focus_path(['footer',1])
self._focus=True
urwid.connect_signal(self.input,'line_entered',self.on_line_entered)
self._cmd=cmd_cb
self._output_styles=[s[0] for s in self.PALLETE]
self.eloop=None
def __init__(self):
self.prefs = bbjrc("load")
self.mode = None
self.thread = None
self.usermap = {}
self.window_split = False
self.last_pos = None
# these can be changed and manipulated by other methods
self.walker = urwid.SimpleFocusListWalker([])
self.box = ActionBox(self.walker)
self.body = urwid.AttrMap(
urwid.LineBox(
self.box,
title=self.prefs["frame_title"],
**frame_theme()),
"default"
)
self.loop = urwid.MainLoop(
urwid.Frame(self.body),
palette=colormap,
handle_mouse=self.prefs["mouse_integration"])
def search_prompt(self):
# XXX: remove if when thread search is supported
if self.mode != "index":
return
popup = OptionsMenu(
urwid.ListBox(
urwid.SimpleFocusListWalker([
urwid.Text(("button", "Enter a query:")),
urwid.AttrMap(StringPrompt(self.search_callback), "opt_prompt"),
urwid.Text("Use a blank query to reset the {}.".format(self.mode))
])),
**frame_theme())
self.loop.widget = urwid.Overlay(
popup, self.loop.widget,
align=("relative", 50),
valign=("relative", 25 if self.window_split else 50),
width=("relative", 40), height=6)
def set_escape_key(self, button, args):
mode = args[0]
widget = OptionsMenu(
urwid.ListBox(urwid.SimpleFocusListWalker([
urwid.Text("Press Enter when done"),
urwid.AttrMap(KeyPrompt(
self.prefs["edit_escapes"][mode],
self.save_escape_key,
[mode]
), "opt_prompt")])),
title="Set key for " + mode,
**frame_theme()
)
app.loop.widget = urwid.Overlay(
urwid.AttrMap(widget, "30"),
app.loop.widget,
align=("relative", 50),
valign=("relative", 50),
width=25, height=5
)
def menu(title, SSID):
body = [urwid.Text(title), urwid.Divider()]
options = []
for c in SSID:
button = urwid.Button("[ ] " + c)
options.append(button)
#if SSID_DICT[c] == True:
# button.set_label(u"DH")
urwid.connect_signal(button, 'click', item_chosen, c)
body.append(urwid.AttrMap(button, None, focus_map='reversed'))
swarmify_button = urwid.Button("Swarmify")
options.append(swarmify_button)
urwid.connect_signal(swarmify_button, 'click', swarm_chosen, c)
body.append(urwid.AttrMap(swarmify_button, None, focus_map='reversed'))
return urwid.ListBox(urwid.SimpleFocusListWalker(body))
def item_chosen(button, choice):
if SSID_DICT[choice]:
button.set_label(u"[ ] " + button.get_label()[4:])
SSID_DICT[choice] = False
else:
button.set_label(u"[*] " + button.get_label()[4:])
SSID_DICT[choice] = True
##response = urwid.Text([u'You chose ', str(SSID_DICT[choice]), u'\n'])
##done = urwid.Button(u'Ok')
##urwid.connect_signal(done, 'click', exit_program)
##main.original_widget = urwid.Filler(urwid.Pile([response,
##urwid.AttrMap(done, None, focus_map='reversed')]))
def docfield(self, field):
attr_map = field
return urwid.Columns(
[
(
'fixed',
self.c1width,
urwid.AttrMap(
urwid.Text(field + ':'),
'field',
'field_focus'
)
),
urwid.AttrMap(
self.fields[field],
attr_map
)
]
)
def __init__(self, title,
command_caption='Command: (Tab to switch focus to upper frame, where you can scroll text)',
cmd_cb=None, max_size=1000):
self.header = urwid.Text(title)
self.model = urwid.SimpleListWalker([])
self.body = ListView(self.model, lambda: self._update_focus(False), max_size=max_size)
self.input = Input(lambda: self._update_focus(True))
foot = urwid.Pile([urwid.AttrMap(urwid.Text(command_caption), 'reversed'),
urwid.AttrMap(self.input, 'normal')])
urwid.Frame.__init__(self,
urwid.AttrWrap(self.body, 'normal'),
urwid.AttrWrap(self.header, 'reversed'),
foot)
self.set_focus_path(['footer', 1])
self._focus = True
urwid.connect_signal(self.input, 'line_entered', self.on_line_entered)
self._cmd = cmd_cb
self._output_styles = [s[0] for s in self.PALLETE]
self.eloop = None