Example #1
0
    def _build_gui(self):
        self.w = w = QtWidgets.QWidget()

        w.setObjectName('show_livecode')
        w.setLayout(QtWidgets.QVBoxLayout())
        self.status = QtWidgets.QLabel()
        w.layout().addWidget(self.status)
        self.text = QtWidgets.QTextBrowser()
        w.layout().addWidget(self.text)
        h = QtWidgets.QHBoxLayout()
        w.layout().addLayout(h)
        self.activate = QtWidgets.QPushButton("Stop")
        self.activate.setToolTip("Start / stop live code display")
        h.addWidget(self.activate)
        self.activate.clicked.connect(lambda checked: self.toggle_active())
        b = QtWidgets.QPushButton("Run here")
        b.setToolTip("Show live code for this node")
        h.addWidget(b)
        b.clicked.connect(lambda checked: self.run_here())
        b = QtWidgets.QPushButton("Go to node")
        b.setToolTip("Jump to node where live code is shown")
        h.addWidget(b)
        b.clicked.connect(lambda checked: self.goto_node())
        b = QtWidgets.QPushButton("Dump")
        b.setToolTip("AST dump to stdout (devel. option)")
        h.addWidget(b)
        b.clicked.connect(
            lambda checked, self=self: setattr(self, 'dump', True))
        def ensure_text_widget(self):
            '''Swap a text widget into the rendering pane if necessary.'''
            c, pc = self.c, self
            if pc.must_change_widget(QtWidgets.QTextBrowser):
                # Instantiate a new QTextBrowser.
                # Allow non-ctrl clicks to open url's.
                w = QtWidgets.QTextBrowser()

                def handleClick(url, w=w):
                    import leo.plugins.qt_text as qt_text
                    wrapper = qt_text.QTextEditWrapper(w, name='vr-body', c=c)
                    event = g.Bunch(c=c, w=wrapper)
                    g.openUrlOnClick(event, url=url)
                    
                # if self.w and hasattr(self.w, 'anchorClicked'):
                    # try:
                        # self.w.anchorClicked.disconnect()
                    # except Exception:
                        # g.es_exception()

                w.anchorClicked.connect(handleClick)
                w.setOpenLinks(False)
                pc.embed_widget(w) # Creates w.wrapper
                assert(w == pc.w)
            return pc.w
Example #3
0
    def create_widgets(self):
        '''Create the big-text buttons and text warning area.'''
        c = self.c
        self.active_flag = True
        warning = self.warning_message()
        self.old_w.setPlainText(self.p.b) # essential.
        self.w = w = QtWidgets.QWidget() # No parent needed.
        layout = QtWidgets.QVBoxLayout() # No parent needed.
        w.setLayout(layout)
        w.text = tw = QtWidgets.QTextBrowser()
        tw.setText(warning)
        tw.setObjectName('bigtextwarning')
        self.widgets['bigtextwarning'] = tw
        layout.addWidget(tw)
        table = [
                ('remove', 'Remove These Buttons', self.remove),
                ('load_nc', 'Load Text With @killcolor', self.load_nc),
                ('more', 'Double limit for this session', self.more),
                ('copy', 'Copy body to clipboard', self.copy),
        ]
        if self.s.startswith('@killcolor'):
            del table[1]
        for key, label, func in table:
            self.widgets[key] = button = QtWidgets.QPushButton(label)
            layout.addWidget(button)

            def button_callback(checked, func=func):
                func()

            button.clicked.connect(button_callback)
        # layout.addItem(QtWidgets.QSpacerItem(
            # 10, 10, vPolicy=QtWidgets.QSizePolicy.Expanding))
        self.layout.addWidget(w)
        w.show()
Example #4
0
        def ensure_text_widget(self):
            '''Swap a text widget into the rendering pane if necessary.'''
            c, pc = self.c, self
            if pc.must_change_widget(QtWidgets.QTextBrowser):
                # Instantiate a new QTextBrowser.
                # Allow non-ctrl clicks to open url's.
                w = QtWidgets.QTextBrowser()

                def handleClick(url, w=w):
                    event = g.Bunch(c=c, w=w)
                    g.openUrlOnClick(event, url=url)

                w.anchorClicked.connect(handleClick)
                w.setOpenLinks(False)
                pc.embed_widget(w) # Creates w.wrapper
                assert(w == pc.w)
            return pc.w
Example #5
0
    def create_ui(self):

        self.w = w = QtWidgets.QWidget()
        w.setWindowTitle("Leo search")
        lay = QtWidgets.QVBoxLayout()
        if (not QtWebKitWidgets
                # Workaround #1114: https://github.com/leo-editor/leo-editor/issues/1114
                or isQt5 and sys.platform.startswith('win')
                # Workaround #304: https://github.com/leo-editor/leo-editor/issues/304
            ):
            self.web = web = QtWidgets.QTextBrowser(w)
        else:
            self.web = web = QtWebKitWidgets.QWebView(w)
        try:
            # PyQt4
            self.web.linkClicked.connect(self._lnk_handler)
            # AttributeError: 'QWebEngineView' object has no attribute 'linkClicked'
        except AttributeError:
            # PyQt5
            pass  # Not clear what to do.
        self.led = led = QtWidgets.QLineEdit(w)
        led.returnPressed.connect(self.docmd)
        lay.addWidget(led)
        lay.addWidget(web)
        self.lc = lc = LeoConnector()
        try:
            web.page().mainFrame().addToJavaScriptWindowObject("leo", lc)
            web.page().setLinkDelegationPolicy(
                QtWebKitWidgets.QWebPage.DelegateAllLinks)
        except AttributeError:
            # PyQt5
            pass  # Not clear what to do.
        w.setLayout(lay)
        #web.load(QUrl("http://google.fi"))
        self.show_help()

        # w.show()
        def help_handler(tgt, qs):
            if qs == "help":
                self.show_help()
                return True
            return False

        self.add_cmd_handler(help_handler)
        self.led.setFocus()