Esempio n. 1
0
class IntegerView(Label):
    """This is the frame for displaying Integer with ability to factorize it.
    """

    def __init__(self, parent, integer=Integer(), **kw):
        #kw['state'] = 'disabled'
        kw.setdefault('anchor', 'nw')
        kw.setdefault('relief', 'sunken')

        kw.setdefault('width', 10)
        kw.setdefault('justify', 'left')
        self._var = StringVar()
        Label.__init__(self, parent, textvariable=self._var, **kw)
        self._integer_view = StringViewFormatter(integer)
        self._update_integer()
        self._factorization_enabled = False
        self.bind("<Configure>", self._update_width)

        self._init_menu()

    def _init_menu(self):
        self._menu = Menu(self, tearoff=0)
        self._menu.add_command(label="Copy", command=self._copy)
        self._menu.add_command(label="Copy LaTeX", command=self._copy_latex)

        # right button on Mac and other systems
        button = '2' if tools.IS_MAC else '3'
        self.bind("<Button-{}>".format(button), self._right_click)

    def _right_click(self, event):
        self._menu.post(event.x_root, event.y_root)

    def _copy(self):
        pyperclip.setcb(str(self._integer_view))

    def _copy_latex(self):
        if self._factorization_enabled:
            cb = self._integer_view.str_latex()
        else:
            cb = self._integer_view.str_normal()
        pyperclip.setcb(cb)


    def _update_width(self, event):
        self['wraplength'] = self.winfo_width() - 10

    def _update_integer(self):
        self._var.set(self._integer_view)

    @property
    def integer(self):
        return self._integer_view.object

    @integer.setter
    def integer(self, value):
        self._integer_view = StringViewFormatter(value)
        if self._factorization_enabled:
            self._integer_view.mode = StringViewFormatter.VERBOSE
        self._update_integer()

    def toggle_factorization(self, value):
        self._factorization_enabled = value
        if value:
            self._integer_view.mode = StringViewFormatter.VERBOSE
        else:
            self._integer_view.mode = StringViewFormatter.NORMAL
        self._update_integer()
Esempio n. 2
0
class IntegerView(Label):
    """This is the frame for displaying Integer with ability to factorize it.
    """
    def __init__(self, parent, integer=Integer(), **kw):
        #kw['state'] = 'disabled'
        kw.setdefault('anchor', 'nw')
        kw.setdefault('relief', 'sunken')

        kw.setdefault('width', 10)
        kw.setdefault('justify', 'left')
        self._var = StringVar()
        Label.__init__(self, parent, textvariable=self._var, **kw)
        self._integer_view = StringViewFormatter(integer)
        self._update_integer()
        self._factorization_enabled = False
        self.bind("<Configure>", self._update_width)

        self._init_menu()

    def _init_menu(self):
        self._menu = Menu(self, tearoff=0)
        self._menu.add_command(label="Copy", command=self._copy)
        self._menu.add_command(label="Copy LaTeX", command=self._copy_latex)

        # right button on Mac and other systems
        button = '2' if tools.IS_MAC else '3'
        self.bind("<Button-{}>".format(button), self._right_click)

    def _right_click(self, event):
        self._menu.post(event.x_root, event.y_root)

    def _copy(self):
        pyperclip.setcb(str(self._integer_view))

    def _copy_latex(self):
        if self._factorization_enabled:
            cb = self._integer_view.str_latex()
        else:
            cb = self._integer_view.str_normal()
        pyperclip.setcb(cb)

    def _update_width(self, event):
        self['wraplength'] = self.winfo_width() - 10

    def _update_integer(self):
        self._var.set(self._integer_view)

    @property
    def integer(self):
        return self._integer_view.object

    @integer.setter
    def integer(self, value):
        self._integer_view = StringViewFormatter(value)
        if self._factorization_enabled:
            self._integer_view.mode = StringViewFormatter.VERBOSE
        self._update_integer()

    def toggle_factorization(self, value):
        self._factorization_enabled = value
        if value:
            self._integer_view.mode = StringViewFormatter.VERBOSE
        else:
            self._integer_view.mode = StringViewFormatter.NORMAL
        self._update_integer()