Example #1
0
 def __init__(self, master=None, **kwargs):
     ScrolledText.__init__(self, master, **kwargs)
     self.redirector = WidgetRedirector(self)
     self.insert = self.redirector.register("insert",
                                            lambda *args, **kw: "break")
     self.delete = self.redirector.register("delete",
                                            lambda *args, **kw: "break")
Example #2
0
 def __init__(self, text):
     self.text = text
     self.redir = WidgetRedirector(text)
     self.top = self.bottom = Delegator(text)
     self.bottom.insert = self.redir.register('insert', self.insert)
     self.bottom.delete = self.redir.register('delete', self.delete)
     self.filters = []
Example #3
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.redirector = WidgetRedirector(self)
        self.insert = self.redirector.register("insert", lambda *args, **kw: "break")
        self.delete = self.redirector.register("delete", lambda *args, **kw: "break")

        self.bind("<Control-a>", self._on_ctrl_a)
Example #4
0
 def __init__(self, *args, **kwargs):
     tkinter.Text.__init__(self, *args, **kwargs)
     self.redirector = WidgetRedirector(self)
     self.insert = \
         self.redirector.register("insert", lambda *args, **kw: "break")
     self.delete = \
         self.redirector.register("delete", lambda *args, **kw: "break")
Example #5
0
 def __init__(self, text):
     # XXX would be nice to inherit from Delegator
     self.text = text
     self.redir = WidgetRedirector(text)
     self.top = self.bottom = Delegator(text)
     self.bottom.insert = self.redir.register("insert", self.insert)
     self.bottom.delete = self.redir.register("delete", self.delete)
     self.filters = []
Example #6
0
    def __init__(self, master, **opt):

        opt['exportselection'] = 0  # Don't let it write to clipboard
        opt['takefocus'] = 0  # Ignore when tabbing
        super().__init__(master, **opt)

        self.redirector = redir = WidgetRedirector(self)
        # These two TK commands are used for all text operations,
        # so cancelling them stops anything from happening.
        self.insert = redir.register('insert', event_cancel)
        self.delete = redir.register('delete', event_cancel)
Example #7
0
 def __init__(self, *args, **kwargs):
     """Replace insert and delete bindings."""
     # subclass to tk.Text
     import tkinter as tk
     tk.Text.__init__(self, *args, **kwargs)
     self.SEL = tk.SEL
     self.END = tk.END
     self.INSERT = tk.INSERT
     from idlelib.redirector import WidgetRedirector
     self.redirector = WidgetRedirector(self)
     # freeze user changes
     self.insert = self.redirector.register('insert',
                                            lambda *args, **kw: 'break')
     self.delete = self.redirector.register('delete',
                                            lambda *args, **kw: 'break')
     # bind ctrl-a as select all
     self.bind("<Control-Key-a>", self.select_all)
Example #8
0
    def __init__(self, master: Widget, document: FileDocument, **kwargs) \
            -> None:
        """
        Creates a live preview widget.

        :param master: the parent widget
        :param document: the model for the current KnitScript document
        """
        super().__init__(master, **kwargs)
        self.pack_propagate(False)
        self._text = Text(self,
                          font=_get_default_font(),
                          wrap=WORD,
                          padx=5,
                          pady=5,
                          relief=FLAT,
                          bg=("systemSheetBackground" if platform.system()
                              == "Darwin" else "systemMenu"),
                          highlightthickness=0)

        menu = _create_edit_menu(self._text)
        self._text.bind(_BUTTONS["context_menu"],
                        partial(_show_context_menu, menu),
                        add=True)

        redirector = WidgetRedirector(self._text)
        redirector.register("insert", lambda *args: "break")
        redirector.register("delete", lambda *args: "break")

        scrollbar = Scrollbar(self, command=self._text.yview)
        self._text.configure(yscrollcommand=scrollbar.set)
        scrollbar.pack(side=RIGHT, fill=Y)
        self._text.pack(side=LEFT, expand=YES, fill=BOTH)

        self._document = document
        self._document.bind("<<Opened>>", self._preview, add=True)
        self._document.bind("<<Set>>",
                            _debounce(master, 500)(self._preview),
                            add=True)
        self._preview()
Example #9
0
 def setUp(self):
     self.redir = WidgetRedirector(self.text)
     self.func = Func()
     self.orig_insert = self.redir.register('insert', self.func)
     self.text.insert('insert', 'asdf')  # leaves self.text empty
Example #10
0
 def test_close(self):
     redir = WidgetRedirector(self.text)
     redir.register('insert', Func)
     redir.close()
     self.assertEqual(redir._operations, {})
     self.assertFalse(hasattr(self.text, 'widget'))
Example #11
0
 def test_init(self):
     redir = WidgetRedirector(self.text)
     self.assertEqual(redir.widget, self.text)
     self.assertEqual(redir.tk, self.text.tk)
     self.assertRaises(TclError, WidgetRedirector, self.text)
     redir.close()  # restore self.tk, self.text
Example #12
0
    def __init__(self, master: Widget, document: FileDocument, **kwargs) \
            -> None:
        """
        Creates a text editor widget.

        :param master: the parent widget
        :param document: the model for the current KnitScript document
        """
        super().__init__(master, **kwargs)
        self.pack_propagate(False)
        text = Text(self,
                    undo=True,
                    font=_get_fixed_font(),
                    wrap=WORD,
                    padx=5,
                    pady=5,
                    relief=FLAT,
                    highlightthickness=0)

        menu = _create_edit_menu(text)
        text.bind(_BUTTONS["context_menu"],
                  partial(_show_context_menu, menu),
                  add=True)

        scrollbar = Scrollbar(self, command=text.yview)
        text.configure(yscrollcommand=scrollbar.set)
        scrollbar.pack(side=RIGHT, fill=Y)
        text.pack(side=LEFT, expand=YES, fill=BOTH)
        self.bind("<FocusIn>", lambda event: text.focus_set())

        # TODO:
        #  This is kind of a hack to stop Ctrl-O from inserting a new line. :/
        if platform.system() != "Darwin":

            def on_open(_event: Event) -> str:
                self.master.open()
                return "break"

            text.bind("<Control-o>", on_open)

        def on_enter(_event: Event) -> str:
            # Keep the indent on the new line the same as the current line.
            line = text.get("insert linestart", "insert lineend")
            indent = " " * sum(1 for _ in takewhile(lambda c: c == " ", line))
            if text.tag_ranges(SEL) == ():
                text.insert(INSERT, "\n" + indent)
            else:
                text.replace(SEL_FIRST, SEL_LAST, "\n" + indent)
            return "break"

        text.bind("<Return>", on_enter)

        def on_change(operation: Callable[..., None], *args) -> None:
            operation(*args)
            document.text = _strip_trailing_newline(text.get("1.0", END))
            document.modified = text.edit_modified()

        redirector = WidgetRedirector(text)
        insert = redirector.register("insert", None)
        delete = redirector.register("delete", None)
        replace = redirector.register("replace", None)
        redirector.register("insert", partial(on_change, insert))
        redirector.register("delete", partial(on_change, delete))
        redirector.register("replace", partial(on_change, replace))

        def bind_text_modified() -> None:
            def on_text_modified(_event: Event) -> None:
                document.modified = text.edit_modified()

            text.edit_modified(False)
            text.bind("<<Modified>>", on_text_modified, add=True)

        text.insert("1.0", document.text)
        self.after_idle(bind_text_modified)

        def on_document_opened(_event: Event) -> None:
            text.replace("1.0", END, document.text)
            text.edit_modified(False)

        def on_document_modified(_event: Event) -> None:
            if document.modified != text.edit_modified():
                text.edit_modified(document.modified)

        document.bind("<<Opened>>", on_document_opened, add=True)
        document.bind("<<Modified>>", on_document_modified, add=True)
Example #13
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.redirector = WidgetRedirector(self)
     self.insert = self.redirector.register("insert", lambda *a, **k: BREAK)
     self.delete = self.redirector.register("delete", lambda *a, **k: BREAK)