def __init__(self): self.screen = Screen.open() self.scenes = [] self.akt_sender_str = "Deutschlandradio" self.akt_sender_nr = 0 self.volume = 25 self.number_of_stations = 0 # Prepare frame for the presets self.preset_frame = Frame(self.screen, 7, 29, can_scroll=False, title="Tastenbelegung", x=0, y=10, reduce_cpu=True) self.pr_layout = Layout([10, 90], fill_frame=True) self.preset_frame.add_layout(self.pr_layout) # Prepare frame for the sender list self.sender_frame = Frame(self.screen, 17, 50, can_scroll=False, title="Senderliste", x=30, y=0, reduce_cpu=True) self.sender_layout0 = Layout([10, 80, 10], fill_frame=True) self.sender_frame.add_layout(self.sender_layout0) # Load the json config-file self.cfg = self.load_config() # Prepare the layouts, add spaces etc self.format_sl_layout(self.sender_layout0) # Nicht mehr nötig nach aktuellem Stand # format_pr_layout(pr_layout) # Create the sender-labels and fill them initially. Return them for # later changing self.sender_labels = self.gen_and_add_sender_labels( self.sender_layout0, self.parse_sender()) self.preset_labels = self.gen_and_add_preset_labels( self.pr_layout, self.parse_presets()) self.preset_frame.fix() self.sender_frame.fix()
def test_cjk_forms(self): """ Check form widgets work with CJK characters. """ # Create a dummy screen. screen = MagicMock(spec=Screen, colours=8, unicode_aware=False) scene = MagicMock(spec=Scene) canvas = Canvas(screen, 10, 40, 0, 0) # Create the form we want to test. form = Frame(canvas, canvas.height, canvas.width, has_border=False) layout = Layout([100], fill_frame=True) mc_list = MultiColumnListBox(4, [3, 5, 0], [ (["1", "2", "3"], 1), ([u"你", u"確", u"定"], 2), ], titles=[u"你確定嗎?", u"你確定嗎?", u"你確定嗎?"]) text = Text() text_box = TextBox(3) form.add_layout(layout) layout.add_widget(mc_list) layout.add_widget(text) layout.add_widget(text_box) form.fix() form.register_scene(scene) form.reset() # Set some interesting values... text.value = u"你確定嗎? 你確定嗎? 你確定嗎?" text_box.value = [u"你確定嗎", u"?"] # Check that the CJK characters render correctly - no really this is correctly aligned! self.maxDiff = None form.update(0) self.assert_canvas_equals( canvas, u"你你 你你確確 你你確確定定嗎嗎?? \n" + u"1 2 3 \n" + u"你你 確確 定定 \n" + u" \n" + u"你你確確定定嗎嗎?? 你你確確定定嗎嗎?? 你你確確定定嗎嗎?? \n" + u"你你確確定定嗎嗎 \n" + u"?? \n" + u" \n" + u" \n" + u" \n") # Check that mouse input takes into account the glyph width self.process_mouse(form, [(5, 4, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["b"]) self.process_mouse(form, [(2, 4, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["p"]) form.save() self.assertEqual(text.value, u"你p確b定嗎? 你確定嗎? 你確定嗎?") self.process_mouse(form, [(2, 5, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["p"]) self.process_mouse(form, [(1, 6, MouseEvent.LEFT_CLICK)]) self.process_keys(form, ["b"]) form.save() self.assertEqual(text_box.value, [u"你p確定嗎", u"b?"])
def test_disabled_text(self): """ Check disabled TextBox can be used for pre-formatted output. """ # Create a dummy screen. screen = MagicMock(spec=Screen, colours=8, unicode_aware=False) scene = MagicMock(spec=Scene) canvas = Canvas(screen, 10, 40, 0, 0) # Create the form we want to test. form = Frame(canvas, canvas.height, canvas.width, has_border=False) layout = Layout([100], fill_frame=True) form.add_layout(layout) text_box = TextBox(1, as_string=True) text_box.disabled = True layout.add_widget(text_box) form.fix() form.register_scene(scene) form.reset() # Check that input has no effect on the programmed value. text_box.value = "A test" self.process_keys(form, ["A"]) form.save() self.assertEqual(text_box.value, "A test") # Check that we can provide a custom colour. Since the default palette has no "custom" # key, this will throw an exception. self.assertEqual(text_box._pick_colours("blah"), form.palette["disabled"]) with self.assertRaises(KeyError) as cm: text_box.custom_colour = "custom" text_box._pick_colours("blah") self.assertIn("custom", str(cm.exception))
def _create_window(self): self.screen = Screen.open() self.frame = Frame(self.screen, self.screen.height, self.screen.width, has_border=False, title="Test") self.frame.set_theme("mpf_theme") title_layout = Layout([1, 5, 1]) self.frame.add_layout(title_layout) title_left = Label("") title_left.custom_colour = "title" title_layout.add_widget(title_left, 0) title = 'Mission Pinball Framework v{}'.format( mpf._version.__version__) # noqa title_text = Label(title, align="^") title_text.custom_colour = "title" title_layout.add_widget(title_text, 1) exit_label = Label("< CTRL + C > TO EXIT", align=">") exit_label.custom_colour = "title_exit" title_layout.add_widget(exit_label, 2) self.layout = MpfLayout([1, 1, 1, 1], fill_frame=True) self.frame.add_layout(self.layout) footer_layout = Layout([1, 1, 1]) self.frame.add_layout(footer_layout) self.footer_memory = Label("", align=">") self.footer_memory.custom_colour = "footer_memory" self.footer_uptime = Label("", align=">") self.footer_uptime.custom_colour = "footer_memory" self.footer_mc_cpu = Label("") self.footer_mc_cpu.custom_colour = "footer_mc_cpu" self.footer_cpu = Label("") self.footer_cpu.custom_colour = "footer_cpu" footer_path = Label(self.machine.machine_path) footer_path.custom_colour = "footer_path" footer_empty = Label("") footer_empty.custom_colour = "footer_memory" footer_layout.add_widget(footer_path, 0) footer_layout.add_widget(self.footer_cpu, 0) footer_layout.add_widget(footer_empty, 1) footer_layout.add_widget(self.footer_mc_cpu, 1) footer_layout.add_widget(self.footer_uptime, 2) footer_layout.add_widget(self.footer_memory, 2) self.scene = Scene([self.frame], -1) self.screen.set_scenes([self.scene], start_scene=self.scene) # prevent main from scrolling out the footer self.layout.set_max_height(self.screen.height - 2)
def __init__(self): self.loop = asyncio.get_event_loop() self.screen = Screen.open() self.effects = [] frame = Frame(self.screen, 80, 20, has_border=False) layout = Layout([1, 1, 1, 1]) frame.add_layout(layout) end_time = self.loop.time() + 5.0 self.loop.call_soon(self.update_screen, end_time, self.loop, self.screen) self.screen.set_scenes([Scene(frame,500)]) self.screen.set_title()
def preinit(): screen = Screen.open() test1.intro(screen) junk = Frame(screen, screen.height * 2 // 3, screen.width * 2 // 3, hover_focus=True, has_border=True, title="Game Settings", reduce_cpu=False) oldpalette = copy.deepcopy(junk.palette) Scenes = [] debug = [True] game = [] data = MainMenu(game,screen,debug,oldpalette)
def DeathMenu(game, screen, debug, oldpalette): None def endgame(): screen.close() quit() sys.exit(0) None def Restart(): game = GameState.GameState() MainMenu(game, screen, debug, oldpalette) None Dmenu = Frame(screen, screen.height * 2 // 3, screen.width * 2 // 3, hover_focus=True, has_border=True, title="YOU HAVE DIED", reduce_cpu=False) mapping = Layout([100], fill_frame=True) for entry in Dmenu.palette: if entry != "focus_button": Dmenu.palette[entry] = (1, 1, 1) else: Dmenu.palette[entry] = (0, 1, 5) Dmenu.add_layout(mapping) mapping.add_widget( Label(str("Your Final Score Is: " + str(game.score)), 1)) bottomrow = Layout([1, 1, 1, 1]) Dmenu.add_layout(bottomrow) bottomrow.add_widget(Button("Exit", endgame), 1) bottomrow.add_widget(Button("Restart", Restart), 3) Dmenu.fix() #return Mmenu #Mmenu._on_pic Scenes = [Scene([Dmenu], -1)] screen.play(Scenes) return Dmenu.data
def demo(screen, scene): frame = Frame(screen, screen.height // 3, screen.width // 3, hover_focus=True, has_border=False, title="Main Menu") frame.palette = palette layout3 = Layout([100]) frame.add_layout(layout3) layout3.add_widget(Label("Test"), 0) layout3.add_widget(Divider(draw_line=False)) layout1 = Layout([100], fill_frame=True) frame.add_layout(layout1) layout1.add_widget( ListBox(Widget.FILL_FRAME, [("One", 1), ("Two", 3), ("Three", 2), ("Four", 4), ("Five", 5), ("Six", 6), ("Seven", 7), ("Eight", 8), ("Nine", 9), ("Ten", 10), ("Eleven", 11), ("Twelve", 12), ("Thirteen", 13), ("Fourteen", 14), ("Fifteen", 15), ("Sixteen", 16), ("Seventeen", 17), ("Eighteen", 18), ("Nineteen", 19), ("Twenty", 20), ("Loop", 1)], name="List Thing")) layout1.add_widget(Divider(draw_line=False)) layout2 = Layout([1, 1, 1, 1]) frame.add_layout(layout2) layout2.add_widget(Button("OK", leave), 1) layout2.add_widget(Button("Cancel", leave), 2) frame.fix() scenes = [Scene([frame], -1, name="Test")] screen.play(scenes, stop_on_resize=True, start_scene=scene)
def demo(screen): scenes = [] frame = Frame(screen, 20, 80, can_scroll=False, title="Sender") layout = Layout([40, 10, 40, 10], fill_frame=True) frame.add_layout(layout) optionen = [("Erster", 1), ("Zweiter", 2)] sender = ["Erster hihihihihihi", "Zweiter", "Dritter"] for s in sender: layout.add_widget(Label(s, align=u'^')) layout.add_widget(Label("<<<<", align='<'), 1) layout.add_widget(Button("hihi!", None)) frame.fix() effects = [frame] scenes.append(Scene(effects, -1)) screen.play(scenes)
def MainMenu(game, screen, debug, oldpalette): def endgame(): screen.close() quit() sys.exit(0) None def endmenu(): debug[0] = False game = GameState.GameState() game.hero.inventory = [] Mmenu.save() looksy = Mmenu.data if looksy['seedval'] != "": converted = 0 if str.isnumeric(looksy['seedval']): game.seed = int(looksy['seedval']) else: for char in looksy['seedval']: converted += ord(char) game.seed = int(converted) random.seed(game.seed) if looksy['nameval'] != "": if len(looksy["nameval"]) >= 20: game.name = str(looksy['nameval'])[:21] else: game.name = str(looksy['nameval']) debug[0] = looksy['Debug'] #visual.blackout(screen) main(game, debug, looksy, screen) test1.deadscreen(game, screen) DeathMenu(game, screen, debug, oldpalette) return Mmenu.data endval = True Mmenu = Frame(screen, screen.height * 2 // 3, screen.width * 2 // 3, hover_focus=True, has_border=True, title="Game Settings", reduce_cpu=False) #Mmenu.palette['background'] = (0,0,1) Mmenu.palette = oldpalette mapping = Layout([100], fill_frame=True) Mmenu.add_layout(mapping) mapping.add_widget(Text("Seed:", "seedval")) mapping.add_widget(Text("Adventurer Name:", "nameval")) mapping.add_widget(CheckBox("Debug Mode:", "Debug", "Debug")) bottomrow = Layout([1, 1, 1, 1]) Mmenu.add_layout(bottomrow) bottomrow.add_widget(Button("Exit Game", endgame), 0) bottomrow.add_widget(Button("Start Level", endmenu), 3) Mmenu.fix() #Mmenu._on_pic Scenes = [Scene([Mmenu], -1)] screen.play(Scenes) return Mmenu.data
def test_multi_column_list_box(self): """ Check MultiColumnListBox works as expected. """ # Create a dummy screen. screen = MagicMock(spec=Screen, colours=8, unicode_aware=False) scene = MagicMock(spec=Scene) canvas = Canvas(screen, 10, 40, 0, 0) # Create the form we want to test. form = Frame(canvas, canvas.height, canvas.width, has_border=False) layout = Layout([100], fill_frame=True) mc_list = MultiColumnListBox( Widget.FILL_FRAME, [3, "4", ">4", "<4", ">10%", "100%"], [ (["1", "2", "3", "4", "5", "6"], 1), (["11", "222", "333", "444", "555", "6"], 2), (["111", "2", "3", "4", "5", "6"], 3), (["1", "2", "33333", "4", "5", "6"], 4), (["1", "2", "3", "4", "5", "6666666666666666666666"], 5), ], titles=["A", "B", "C", "D", "E", "F"], name="mc_list") form.add_layout(layout) layout.add_widget(mc_list) form.fix() form.register_scene(scene) form.reset() # Check we have a default value for our list. form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that UP/DOWN change selection. self.process_keys(form, [Screen.KEY_DOWN]) form.save() self.assertEqual(form.data, {"mc_list": 2}) self.process_keys(form, [Screen.KEY_UP]) form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that PGUP/PGDN change selection. self.process_keys(form, [Screen.KEY_PAGE_DOWN]) form.save() self.assertEqual(form.data, {"mc_list": 5}) self.process_keys(form, [Screen.KEY_PAGE_UP]) form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that the widget is rendered correctly. form.update(0) self.assert_canvas_equals( canvas, "A B C D E F \n" + "1 2 3 4 5 6 \n" + "11 222 333 444 555 6 \n" + "...2 3 4 5 6 \n" + "1 2 3... 4 5 6 \n" + "1 2 3 4 5 6666666666666666666\n" + " \n" + " \n" + " \n" + " \n") # Check that mouse input changes selection. self.process_mouse(form, [(2, 2, MouseEvent.LEFT_CLICK)]) form.save() self.assertEqual(form.data, {"mc_list": 2}) self.process_mouse(form, [(2, 1, MouseEvent.LEFT_CLICK)]) form.save() self.assertEqual(form.data, {"mc_list": 1}) # Check that the start_line can be read and set - and enforces good behaviour mc_list.start_line = 0 self.assertEqual(mc_list.start_line, 0) mc_list.start_line = len(mc_list.options) - 1 self.assertEqual(mc_list.start_line, len(mc_list.options) - 1) mc_list.start_line = 10000000 self.assertEqual(mc_list.start_line, len(mc_list.options) - 1) # Check that options can be read and set. mc_list.options = [(["a", "b", "c", "d", "e", "f"], 0)] self.assertEqual(mc_list.options, [(["a", "b", "c", "d", "e", "f"], 0)]) mc_list.options = [] self.assertEqual(mc_list.options, []) # Check that the form re-renders correctly afterwards. form.update(1) self.assert_canvas_equals( canvas, "A B C D E F \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n") # Check that the current focus ignores unknown events. event = object() self.assertEqual(event, form.process_event(event))
def demo(screen): scenes = [] preset_frame = Frame(screen, 11, 26, can_scroll=False, title="Tastenbelegung", x=SF_X, y=SF_Y, reduce_cpu=True) pr_layout = Layout([10, 90], fill_frame=True) preset_frame.add_layout(pr_layout) sender_frame = Frame(screen, 11, 26, can_scroll=False, title="Senderliste", x=27, y=6, reduce_cpu=True) sender_layout0 = Layout([10, 90, 10], fill_frame=True) sender_frame.add_layout(sender_layout0) optionen = [(" ", 1), ("Zweiter", 2), ("Dritter", 3), ("Vierter", 4), ("Deutschlandradio", 5), ("Absolut Relax", 6), ("Siebter", 7), ("hmm", 8)] sender = [ "123456789012345678901", "Erster", "Zweiter", "Dritter", "Vierter", "Fünfter", "Sechster" ] Senderkiste = ListBox(8, optionen, False) sender_layout0.add_widget(Senderkiste, 1) Senderkiste.blur() Senderkiste.start_line = 1 format_sl_layout(sender_layout0) # format_pr_layout(pr_layout) for i, s in zip(range(1, 6), sender): pr_layout.add_widget(Label(str(i), 1, align=u'^')) pr_layout.add_widget(Label(s, 1, align='^'), 1) preset_frame.fix() sender_frame.fix() effects = [ preset_frame, sender_frame, Print(screen, Box(26, 15, True), x=UHR_K_X, y=UHR_K_Y), Print(screen, Box(80, 8, True), x=0, y=17), Clock(screen, 67, 7, 6), Print(screen, FigletText("Retroradio!"), x=0, y=0), # Print(screen, BarChart(4, 80, [get_vol], colour=2, scale=100, # axes=BarChart.X_AXIS, intervals=25, labels=True, border=False), x=0, y=26, # transparent=False), # Print(screen, SpeechBubble("Lautstärke"), x=0, y=23), Print(screen, FigletText("Deutschlandradio"), x=1, y=18), Print(screen, BarChart(4, 80, [get_vol], colour=2, char=' ', bg=7, scale=100, axes=BarChart.X_AXIS, intervals=25, labels=True, border=False), x=0, y=26, transparent=False, speed=2) ] scenes.append(Scene(effects, -1)) screen.play(scenes)
def run_display(screen): scenes = [] AKT_SENDER = "Retro rockt!" # Prepare frame for the presets preset_frame = Frame(screen, 7, 29, can_scroll=False, title="Tastenbelegung", x=0, y=10, reduce_cpu=True) pr_layout = Layout([10, 90], fill_frame=True) preset_frame.add_layout(pr_layout) # Prepare frame for the sender list sender_frame = Frame(screen, 17, 50, can_scroll=False, title="Senderliste", x=30, y=0, reduce_cpu=True) sender_layout0 = Layout([10, 80, 10], fill_frame=True) sender_frame.add_layout(sender_layout0) # Load the json config-file cfg = load_config() # Prepare the layouts, add spaces etc format_sl_layout(sender_layout0) # Nicht mehr nötig nach aktuellem Stand # format_pr_layout(pr_layout) # Create the sender-labels and fill them initially. Return them for # later changing sender_labels = gen_and_add_sender_labels(sender_layout0, parse_sender(cfg, 0)) preset_labels = gen_and_add_preset_labels(pr_layout, parse_presets(cfg)) preset_frame.fix() sender_frame.fix() # Effects are all the stuff which will be shown on the display effects = [ preset_frame, sender_frame, # Print(screen, Box(26, 15, True), x=54, y=0), Print(screen, Box(80, 8, True), x=0, y=17, speed=2), # Clock(screen, 68, 7, 5), Print(screen, ColourImageFile(screen, LOGO, 9, bg=7), x=0, y=0, speed=2), Print(screen, FigletText(asciisierer(AKT_SENDER)), x=1, y=18), Print(screen, BarChart(4, 80, [get_vol], colour=2, char=' ', bg=7, scale=100, axes=BarChart.X_AXIS, intervals=25, labels=True, border=False), x=0, y=26, transparent=False, speed=2) ] # Start displaying scenes.append(Scene(effects, -1)) screen.play(scenes)