Exemple #1
0
    def get_root_container(self) -> FloatContainer:
        validator = CoordinateValidator(self.maze_grid)

        maze_grid_container = Label(text=self.maze_grid.format_grid, )

        coordinates_input_container = Window(
            BufferControl(
                buffer=Buffer(
                    validator=validator,
                    validate_while_typing=False,
                    multiline=False,
                    accept_handler=self._accept_handler,
                ),
                input_processors=[
                    BeforeInput("Enter coordinates (x, y): "),
                ],
            ), )

        validation_toolbar = ConditionalContainer(
            ValidationToolbar(),
            filter=~is_done,
        )

        return FloatContainer(
            HSplit([
                maze_grid_container,
                HorizontalLine(),
                coordinates_input_container,
                validation_toolbar,
            ]),
            floats=[],
        )
Exemple #2
0
 def __init__(self, buffer, **kwargs):
     self.buffer = buffer
     self.before_input_text = kwargs.get("before_input_text", "➜ ")
     self.title = kwargs.get("title", "COMMAND SHELL")
     self._buffer = buffer
     self._buffer_control = BufferControl(
         buffer=self.buffer,
         input_processors=[BeforeInput(text=self.before_input_text)],
         focus_on_click=True,
     )
     self.window = Frame(
         title=self.title,
         key_bindings=self.kbindings(),
         body=FloatContainer(
             content=Window(self._buffer_control),
             key_bindings=None,
             floats=[
                 Float(
                     xcursor=True,
                     ycursor=True,
                     content=CompletionsMenu(max_height=5, scroll_offset=1),
                 )
             ],
         ),
         height=3,
     )
Exemple #3
0
    def __init__(self, buffer, title):
        self._title = title
        self._buffer = buffer

        self.buffer_control = BufferControl(
            buffer=self._buffer,
            lexer=PygmentsLexer(MarkdownLexer),
        )

        self.window = Frame(
            body=Window(
                content=self.buffer_control,
                right_margins=[ScrollbarMargin(display_arrows=True)],
                scroll_offsets=ScrollOffsets(top=2, bottom=2),
            ),
            title=self._title,
        )
Exemple #4
0
    def _body_windows(self, formatted_columns):
        rows = list(itertools.zip_longest(*formatted_columns, fillvalue=""))
        if rows:
            rows_string = [self._sep.join(row) for row in rows]
            table_body = "\n".join(rows_string)

            document = Document(table_body, 0)
            _buffer = Buffer(document=document, read_only=True)
            self._body_control = BufferControl(_buffer)
            body_windows = [
                Window(
                    self._body_control,
                    right_margins=[ScrollbarMargin(display_arrows=True)],
                )
            ]
        else:
            body_windows = []
        return body_windows
Exemple #5
0
    def pager(self, html, end="\n"):
        """
        Construct pager using prompt_toolkit
        """

        my_buffer = Buffer()
        my_window = Window(
            BufferControl(
                buffer=my_buffer,
                focusable=True,
                preview_search=True,
                input_processors=[FormatText()],
            ))

        my_buffer.text = html
        my_buffer.read_only = to_filter(True)

        root_container = HSplit([
            my_window,
        ])

        bindings = KeyBindings()

        @bindings.add("c-c")
        @bindings.add("q")
        def _(event):
            "Quit."
            event.app.exit()

        application = Application(
            layout=Layout(
                root_container,
                focused_element=my_window,
            ),
            key_bindings=bindings,
            enable_page_navigation_bindings=True,
            mouse_support=True,
            full_screen=True,
        )

        application.run()
        super().msg(html=html, end=end)
Exemple #6
0
    def __init__(self, buffer):

        self.buffer_control = BufferControl(
            buffer=buffer,
            focusable=True,
            key_bindings=self._get_key_bindings(),
            focus_on_click=True,
        )

        self.window = Window(
            content=self.buffer_control,
            right_margins=[ScrollbarMargin(display_arrows=True)],
        )
        self.window = Frame(body=Box(
            self.window,
            padding_left=2,
            padding_right=2,
            padding_top=0,
            padding_bottom=0,
        ))
Exemple #7
0
    def create_cmd_bar(self):
        ctx = self.ctx

        def get_cmd_prefix():
            has_focus = ctx.app.layout.current_buffer is ctx.cmd_buffer
            cls = style.COMMAND_FOCUSED
            if has_focus:
                text = f"<{cls}>> </{cls}>"
            else:
                text = "> "
            return HTML(text)

        return Window(
            BufferControl(
                ctx.cmd_buffer,
                focus_on_click=True,
                input_processors=[BeforeInput(get_cmd_prefix)],
                key_bindings=cmd_kb,
                lexer=PygmentsLexer(CommandLexer),
            ),
            height=1,
        )
Exemple #8
0
    def __init__(self, path):
        self.edit = False
        self.lock = False

        self.model = model.Model(path)
        self.style = style_from_dict({
            Token.CursorLine: 'reverse',
        })

        self.wrapping = Condition(lambda cli: self.model.wrap)
        self.editing = Condition(lambda cli: self.edit)
        self.locked = Condition(lambda clie: self.lock)

        self.main = Window(content=MyControl(self.model),
                           cursorline=~self.locked,
                           wrap_lines=self.wrapping)

        self.status = Window(height=LayoutDimension.exact(1),
                             content=TokenListControl(
                                 get_tokens=self.get_status_tokens,
                                 align_right=False))

        self.command = Window(
            height=LayoutDimension.exact(1),
            content=BufferControl(buffer_name=DEFAULT_BUFFER),
            allow_scroll_beyond_bottom=True)

        self.layout = HSplit([self.main, self.status, self.command])

        bindings = self.load_bindings()

        self.application = Application(
            layout=self.layout,
            style=self.style,
            use_alternate_screen=True,
            buffer=Buffer(is_multiline=False,
                          read_only=Condition(lambda: not self.edit)),
            key_bindings_registry=bindings)
Exemple #9
0
def textbox(buffer, title, lexer=None):
    def get_style():
        ctx = context.get()
        if ctx.app.layout.current_buffer is buffer:
            cls = style.TEXTBOX_FOCUSED
        else:
            cls = style.TEXTBOX
        return f"class:{cls}"

    return HSplit([
        FormattedTextToolbar(
            text=title,
            style=get_style,
        ),
        Window(
            cursorline=True,
            content=BufferControl(
                buffer=buffer,
                focus_on_click=True,
                lexer=lexer,
            ),
            ignore_content_width=True,
        ),
    ])
Exemple #10
0
    def homeLayoutFactory(self):
        content = self.studio.content

        statusBar = Frame(
            Window(BufferControl(buffer=content.getBuffer("statusBar"),
                                 focusable=False),
                   height=D(min=1, max=1, preferred=1),
                   align=WindowAlign.CENTER))

        savedModelsBox = Box(HSplit([
            Label(text="Saved Models: ", style="class:blue class:underlined"),
            Window(
                BufferControl(buffer=content.getBuffer("savedModels"),
                              focusable=False))
        ]),
                             padding=0)

        modelDefinitionsBox = Box(HSplit([
            Label(text="Model Definitions: ",
                  style="class:blue class:underlined"),
            Window(
                BufferControl(buffer=content.getBuffer("modelDefinitions"),
                              focusable=False))
        ]),
                                  padding=0)

        rightSidebar = Frame(
            HSplit([savedModelsBox,
                    HorizontalLine(), modelDefinitionsBox]))

        createModelButton = Button("[C] Create Model                 ",
                                   handler=self.studio.layouts.swapper(
                                       Layouts.CREATE))
        loadModelButton = Button("[L] Load Saved Model             ",
                                 handler=self.studio.layouts.swapper(
                                     Layouts.LOAD))
        importModelButton = Button("[I] Import Model From Definition ",
                                   handler=self.studio.layouts.swapper(
                                       Layouts.IMPORT))
        editModelButton = Button("[E] Edit Model                   ",
                                 handler=self.studio.layouts.swapper(
                                     Layouts.EDIT))
        deleteModelButton = Button("[D] Delete Model                 ",
                                   handler=self.studio.layouts.swapper(
                                       Layouts.DELETE))
        quitButton = Button("[Q] Quit                         ",
                            handler=self.studio.exit)

        editModelButton = ConditionalContainer(
            editModelButton, filter=self.studio.controller.modelExistsFilter())

        leftSidebar = HSplit([
            createModelButton,
            loadModelButton,
            importModelButton,
            editModelButton,
            deleteModelButton,
            quitButton,
        ])

        creditBar = Label(
            text="Created by Samuel Ellertson - github.com/SamuelEllertson",
            style="class:blue")

        body = VSplit([Frame(Sizeable(leftSidebar)), Sizeable(rightSidebar)])

        root = HSplit([statusBar, body, creditBar])

        return Layout(container=root, focused_element=createModelButton)
Exemple #11
0
    def __init__(self, username: str, password: str):
        super().__init__(username, password, handle_data=DataFormat.ANSI)

        self.commands = []

        self.output_buffer = Buffer_()
        self.cursor_pos = 0

        self.chat_buffer = Buffer_()

        self.output = BufferControl(self.output_buffer,
                                    input_processors=[FormatText()],
                                    include_default_input_processors=True)

        self.chat = BufferControl(self.chat_buffer,
                                  input_processors=[FormatText()],
                                  include_default_input_processors=True)

        self.hide_ip = "--hide-ip" in sys.argv

        self.suggest = AutoSuggestFromLogs([
            CommandSuggest(),
        ])

        self.input = TextArea(height=1,
                              prompt=" >> ",
                              multiline=False,
                              wrap_lines=False,
                              accept_handler=self.accept,
                              auto_suggest=self.suggest,
                              dont_extend_width=True)

        self.host_ip = FormattedTextControl(ANSI(""))

        self.chat_float = Float(Frame(Window(self.chat, wrap_lines=True)),
                                right=1,
                                top=0,
                                width=40,
                                height=12,
                                hide_when_covering_content=True)

        self.text = ""
        self.chat_text = ""

        def set_frame_size(fn):
            def inner(*args):
                size = self.app.output.get_size()
                self.chat_float.width = size.columns // 3
                self.chat_float.height = size.rows // 2
                return fn(*args)

            return inner

        self.out_window = Window(self.output, wrap_lines=True)

        kb = KeyBindings()

        @kb.add('c-c')
        @kb.add('c-q')
        def _(_):
            self.app.exit()
            self._loop = False
            self.run_again = False

        @kb.add('c-i', filter=has_focus(self.input))
        def __(_):
            fut = self.suggest.get_suggestion_future(self.input.buffer,
                                                     self.input.document)
            text = self.input.text

            def set_input(fut_2):
                res = fut_2.result()
                if res is not None:
                    self.input.text = text + res.text
                    self.input.document = Document(self.input.text,
                                                   cursor_position=len(
                                                       self.input.text))

            fut.add_done_callback(set_input)

        @kb.add(Keys.ScrollUp)
        def sup(_):
            self.output_buffer.cursor_up(1)
            self.out_window._scroll_up()  # pylint: disable=protected-access

        @kb.add(Keys.ScrollDown)
        def sdown(_):
            self.output_buffer.cursor_down(1)
            self.out_window._scroll_down()  # pylint: disable=protected-access

        self.app = Application(
            layout=Layout(
                container=HSplit([
                    Frame(
                        FloatContainer(self.out_window,
                                       floats=[self.chat_float])),
                    Frame(
                        VSplit([
                            self.input,
                            Window(self.host_ip,
                                   align=WindowAlign.RIGHT,
                                   dont_extend_width=True)
                        ]))
                ]),
                focused_element=self.input,
            ),
            full_screen=True,
            mouse_support=True,
            enable_page_navigation_bindings=True,
            key_bindings=merge_key_bindings([kb]),
            paste_mode=True,
        )

        self.app._on_resize = set_frame_size(self.app._on_resize)  # pylint: disable=protected-access

        self.run_again = True
        self.loop = get_event_loop()
        self._loop = False

        self.own_pass = ""
        self.own_ip = ""
        self.current_ip = ""
Exemple #12
0
    def apply_transformation(self, input_):
        fragments = to_formatted_text(
            ANSI(fragment_list_to_text(input_.fragments)))
        return Transformation(fragments)


# layout.
search_field = SearchToolbar()  # for reverse search.
output_field = Buffer()
channels_window = RadioList(utils.get_channels())
general_ch = utils.config['channels']['general']
channels_window.current_value = general_ch
channels_frame = Frame(channels_window, title="channels", width=23)

output_window = Frame(Window(BufferControl(buffer=output_field,
                                           focusable=False,
                                           input_processors=[FormatText()]),
                             wrap_lines=True),
                      title="#general")
input_field = TextArea(
    height=1,
    prompt='> ',
    multiline=False,
    wrap_lines=False,
    search_field=search_field,
)

command_window_frame = Frame(input_field, title=cmd_area_text)
upper_container = VSplit([channels_frame, output_window])
container = HSplit([
    upper_container,