Added/updated test-only files
This commit is contained in:
112
src/dialogs.py
Normal file
112
src/dialogs.py
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
import urwid
|
||||||
|
|
||||||
|
|
||||||
|
class DialogExit(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class DialogDisplay:
|
||||||
|
palette = [
|
||||||
|
('body','black','light gray', 'standout'),
|
||||||
|
('border','black','dark blue'),
|
||||||
|
('shadow','white','black'),
|
||||||
|
('selectable','black', 'dark cyan'),
|
||||||
|
('focus','white','dark blue','bold'),
|
||||||
|
('focustext','light gray','dark blue'),
|
||||||
|
]
|
||||||
|
|
||||||
|
def __init__(self, text, height, width, body=None):
|
||||||
|
width = int(width)
|
||||||
|
if width <= 0:
|
||||||
|
width = ('relative', 80)
|
||||||
|
height = int(height)
|
||||||
|
if height <= 0:
|
||||||
|
height = ('relative', 80)
|
||||||
|
|
||||||
|
self.body = body
|
||||||
|
if body is None:
|
||||||
|
# fill space with nothing
|
||||||
|
body = urwid.Filler(urwid.Divider(),'top')
|
||||||
|
|
||||||
|
self.frame = urwid.Frame( body, focus_part='footer')
|
||||||
|
if text is not None:
|
||||||
|
self.frame.header = urwid.Pile( [urwid.Text(text),
|
||||||
|
urwid.Divider()] )
|
||||||
|
w = self.frame
|
||||||
|
|
||||||
|
# pad area around listbox
|
||||||
|
w = urwid.Padding(w, ('fixed left',2), ('fixed right',2))
|
||||||
|
w = urwid.Filler(w, ('fixed top',1), ('fixed bottom',1))
|
||||||
|
w = urwid.AttrWrap(w, 'body')
|
||||||
|
|
||||||
|
# "shadow" effect
|
||||||
|
w = urwid.Columns( [w,('fixed', 2, urwid.AttrWrap(
|
||||||
|
urwid.Filler(urwid.Text(('border',' ')), "top")
|
||||||
|
,'shadow'))])
|
||||||
|
w = urwid.Frame( w, footer =
|
||||||
|
urwid.AttrWrap(urwid.Text(('border',' ')),'shadow'))
|
||||||
|
|
||||||
|
# outermost border area
|
||||||
|
w = urwid.Padding(w, 'center', width )
|
||||||
|
w = urwid.Filler(w, 'middle', height )
|
||||||
|
w = urwid.AttrWrap( w, 'border' )
|
||||||
|
|
||||||
|
self.view = w
|
||||||
|
|
||||||
|
|
||||||
|
def add_buttons(self, buttons):
|
||||||
|
l = []
|
||||||
|
for name, exitcode in buttons:
|
||||||
|
b = urwid.Button( name, self.button_press )
|
||||||
|
b.exitcode = exitcode
|
||||||
|
b = urwid.AttrWrap( b, 'selectable','focus' )
|
||||||
|
l.append( b )
|
||||||
|
self.buttons = urwid.GridFlow(l, 10, 3, 1, 'center')
|
||||||
|
self.frame.footer = urwid.Pile( [ urwid.Divider(),
|
||||||
|
self.buttons ], focus_item = 1)
|
||||||
|
|
||||||
|
def button_press(self, button):
|
||||||
|
raise DialogExit(button.exitcode)
|
||||||
|
|
||||||
|
def main(self):
|
||||||
|
self.loop = urwid.MainLoop(self.view, self.palette)
|
||||||
|
try:
|
||||||
|
self.loop.run()
|
||||||
|
except DialogExit:
|
||||||
|
return self.on_exit( e.args[0] )
|
||||||
|
|
||||||
|
def on_exit(self, exitcode):
|
||||||
|
return exitcode, ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class InputDialogDisplay(DialogDisplay):
|
||||||
|
def __init__(self, text, height, width):
|
||||||
|
self.edit = urwid.Edit()
|
||||||
|
body = urwid.ListBox([self.edit])
|
||||||
|
body = urwid.AttrWrap(body, 'selectable','focustext')
|
||||||
|
|
||||||
|
DialogDisplay.__init__(self, text, height, width, body)
|
||||||
|
|
||||||
|
self.frame.set_focus('body')
|
||||||
|
|
||||||
|
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.view.keypress( size, k )
|
||||||
|
|
||||||
|
def on_exit(self, exitcode):
|
||||||
|
return exitcode, self.edit.get_edit_text()
|
||||||
|
|
||||||
|
def do_inputbox(text, height, width):
|
||||||
|
d = InputDialogDisplay( text, height, width )
|
||||||
|
d.add_buttons([ ("Exit", 0) ])
|
||||||
|
return d
|
||||||
30
src/fileChoserDialog.py
Normal file
30
src/fileChoserDialog.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
from selectionDialog import SelectionDialog
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def openFileChoserDialog(title, path, preview = True):
|
||||||
|
choices = list()
|
||||||
|
file_list = list()
|
||||||
|
|
||||||
|
for filename in os.listdir(path):
|
||||||
|
fullpath = path + "/" + filename
|
||||||
|
file_list.append(fullpath)
|
||||||
|
with open(fullpath, "r") as fhandle:
|
||||||
|
appendstring = ""
|
||||||
|
if preview:
|
||||||
|
line = fhandle.readline()
|
||||||
|
line = line.rstrip()
|
||||||
|
if len(line) > 20:
|
||||||
|
line = line[:17]
|
||||||
|
line += "..."
|
||||||
|
appendstring += line + "\n("
|
||||||
|
|
||||||
|
appendstring += filename
|
||||||
|
|
||||||
|
if preview:
|
||||||
|
appendstring += ")"
|
||||||
|
|
||||||
|
choices.append(appendstring)
|
||||||
|
|
||||||
|
choice = SelectionDialog(title, choices, 20).start()
|
||||||
|
print(file_list[choice])
|
||||||
30
src/nobj_fileChoserDialog.py
Normal file
30
src/nobj_fileChoserDialog.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
from selectionDialog import SelectionDialog
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def openFileChoserDialog(title, path, preview = True):
|
||||||
|
choices = list()
|
||||||
|
file_list = list()
|
||||||
|
|
||||||
|
for filename in os.listdir(path):
|
||||||
|
fullpath = path + "/" + filename
|
||||||
|
file_list.append(fullpath)
|
||||||
|
with open(fullpath, "r") as fhandle:
|
||||||
|
appendstring = ""
|
||||||
|
if preview:
|
||||||
|
line = fhandle.readline()
|
||||||
|
line = line.rstrip()
|
||||||
|
if len(line) > 20:
|
||||||
|
line = line[:17]
|
||||||
|
line += "..."
|
||||||
|
appendstring += line + "\n("
|
||||||
|
|
||||||
|
appendstring += filename
|
||||||
|
|
||||||
|
if preview:
|
||||||
|
appendstring += ")"
|
||||||
|
|
||||||
|
choices.append(appendstring)
|
||||||
|
|
||||||
|
choice = SelectionDialog(title, choices, 20).start()
|
||||||
|
print(file_list[choice])
|
||||||
40
src/nobj_selectionDialog.py
Normal file
40
src/nobj_selectionDialog.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import urwid
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class SelectionDialog(object):
|
||||||
|
|
||||||
|
def menu(title, choices):
|
||||||
|
body = [ urwid.Text(title, align = "center"), urwid.Divider()]
|
||||||
|
body.append(headline)
|
||||||
|
for c in choices:
|
||||||
|
button = urwid.Button(c)
|
||||||
|
urwid.connect_signal(button, 'click', self.item_chosen, c)
|
||||||
|
body.append(urwid.AttrMap(button, None, focus_map='reversed'))
|
||||||
|
body.append(urwid.Text("------"))
|
||||||
|
return urwid.ListBox(urwid.SimpleFocusListWalker(body))
|
||||||
|
|
||||||
|
def item_chosen(self, button, choice):
|
||||||
|
self.choice = choice
|
||||||
|
self.exit_program()
|
||||||
|
|
||||||
|
def exit_program(self):
|
||||||
|
raise urwid.ExitMainLoop()
|
||||||
|
|
||||||
|
def __init__ (self, title, choices, width = 60, height = 60):
|
||||||
|
self.choices = choices
|
||||||
|
self.mainpd = urwid.Padding(self.menu(title, choices), left=1, right=1)
|
||||||
|
self.top = urwid.Overlay(self.mainpd, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
|
||||||
|
align='center', width=('relative', 60),
|
||||||
|
valign='middle', height=('relative', 60),
|
||||||
|
min_width=20, min_height=9)
|
||||||
|
|
||||||
|
bt = urwid.BigText("Notology.", urwid.font.HalfBlock5x4Font())
|
||||||
|
bt = urwid.Padding(bt, "center", width = "clip")
|
||||||
|
#bt = urwid.Filler(bt, "bottom")
|
||||||
|
bt = urwid.BoxAdapter(bt, height = 5)
|
||||||
|
self.main_frame = urwid.Frame(self.top, header = bt)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
urwid.MainLoop(self.main_frame, palette=[('reversed', 'standout', '')]).run()
|
||||||
|
return self.choices.index(self.choice)
|
||||||
|
|
||||||
30
src/popup.py
Normal file
30
src/popup.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import urwid
|
||||||
|
|
||||||
|
class PopUpDialog(urwid.WidgetWrap):
|
||||||
|
"""A dialog that appears with nothing but a close button """
|
||||||
|
signals = ['close']
|
||||||
|
def __init__(self):
|
||||||
|
close_button = urwid.Button("that's pretty cool")
|
||||||
|
urwid.connect_signal(close_button, 'click',
|
||||||
|
lambda button:self._emit("close"))
|
||||||
|
pile = urwid.Pile([urwid.Text(
|
||||||
|
"^^ I'm attached to the widget that opened me. "
|
||||||
|
"Try resizing the window!\n"), close_button])
|
||||||
|
fill = urwid.Filler(pile)
|
||||||
|
self.__super.__init__(urwid.AttrWrap(fill, 'popbg'))
|
||||||
|
|
||||||
|
|
||||||
|
class Popup(urwid.PopUpLauncher):
|
||||||
|
def __init__(self):
|
||||||
|
self.__super.__init__(urwid.Button("click-me"))
|
||||||
|
urwid.connect_signal(self.original_widget, 'click',
|
||||||
|
lambda button: self.open_pop_up())
|
||||||
|
|
||||||
|
def create_pop_up(self):
|
||||||
|
pop_up = PopUpDialog()
|
||||||
|
urwid.connect_signal(pop_up, 'close',
|
||||||
|
lambda button: self.close_pop_up())
|
||||||
|
return pop_up
|
||||||
|
|
||||||
|
def get_pop_up_parameters(self):
|
||||||
|
return {'left':0, 'top':1, 'overlay_width':32, 'overlay_height':7}
|
||||||
Reference in New Issue
Block a user