Beispiel #1
0
    def __init__(self,
                 app,
                 callback=None,
                 input_placeholder='',
                 function_box=False,
                 flags=None,
                 *args,
                 **kwargs):
        super().__init__(flags, *args, **kwargs)

        layout = QVBoxLayout()

        self.app = app
        self.function_content = ''

        self.setContentsMargins(QMargins(0, 0, 0, 0))
        layout.setContentsMargins(QMargins(0, 0, 0, 0))

        self.list = QListWidget()
        self.list.setStyleSheet('''
            QListWidget::item:hover { 
                color: white; 
                background-color: rgba(255, 255, 255, 5); 
            }
            QListWidget::item:selected { 
                color: white; 
                background-color: rgba(255, 255, 255, 5); 
            }
        ''')
        bar = QScrollBar()
        bar.setMaximumHeight(0)
        bar.setMaximumWidth(0)
        self.list.setHorizontalScrollBar(bar)
        self.list.model().rowsInserted.connect(self.on_row_inserted)
        layout.addWidget(self.list)

        box = QHBoxLayout()
        box.setContentsMargins(QMargins(3, 3, 3, 3))

        if callback is not None:
            self.input = QConsoleInputWidget(self, callback)
            self.input.setPlaceholderText(input_placeholder)
            box.addWidget(self.input)

        if function_box:
            function_btn = QPushButton('ƒ')
            function_btn.setMinimumWidth(25)
            function_btn.clicked.connect(self.js_function_box)
            box.addWidget(function_btn)

        box_widget = QWidget()
        box_widget.setLayout(box)
        layout.addWidget(box_widget)

        self.setLayout(layout)
Beispiel #2
0
    def __init__(self, app, flags=None, *args, **kwargs):
        super().__init__(flags, *args, **kwargs)

        layout = QVBoxLayout()

        self.app = app
        self.js_script = ''

        self.setContentsMargins(QMargins(0, 0, 0, 0))
        layout.setContentsMargins(QMargins(0, 0, 0, 0))

        self.list = QListWidget()
        self.list.setStyleSheet('''
            QListWidget::item:hover { 
                color: white; 
                background-color: 
                transparent; 
            }
            QListWidget::item:selected { 
                color: white; 
                background-color: 
                transparent; 
            }
        ''')
        bar = QScrollBar()
        bar.setMaximumHeight(0)
        bar.setMaximumWidth(0)
        self.list.setHorizontalScrollBar(bar)
        self.list.model().rowsInserted.connect(self.on_row_inserted)
        layout.addWidget(self.list)

        js_box = QHBoxLayout()
        js_box.setContentsMargins(QMargins(3, 3, 3, 3))

        self.input = JsInput(self)
        self.input.setPlaceholderText('$>')
        js_box.addWidget(self.input)

        function_btn = QPushButton('ƒ')
        function_btn.setMinimumWidth(25)
        function_btn.clicked.connect(self.js_function_box)
        js_box.addWidget(function_btn)

        js_box_widget = QWidget()
        js_box_widget.setLayout(js_box)
        layout.addWidget(js_box_widget)

        self.setLayout(layout)
class MyCodeEditor(QWidget):

    def __init__(self,parent=None):
        QWidget.__init__(self,parent)

        self.__editorSettings = EditorSettings()
        self.__textDocument = PythonTextDocument()
        
        self.__splitter = QSplitter(self)


        # 横纵滚动条
        self.__verticalScrollBar = QScrollBar(self)
        self.__verticalScrollBar.adjustSize()
        self.__verticalScrollBar.setMinimumWidth(self.__verticalScrollBar.width())
        self.__verticalScrollBar.setMaximumWidth(self.__verticalScrollBar.width())  
        self.__verticalScrollBar.valueChanged.connect(self.__onVScrollValueChanged)
        self.__editorSettings.startDisLineNumberChangedSignal.connect(self.__verticalScrollBar.setValue)
    
        self.__horizontalScrollBar = QScrollBar(QtCore.Qt.Horizontal,self)
        self.__horizontalScrollBar.adjustSize()
        self.__horizontalScrollBar.setMinimumHeight(self.__horizontalScrollBar.height())
        self.__horizontalScrollBar.setMaximumHeight(self.__horizontalScrollBar.height())
        self.__horizontalScrollBar.valueChanged.connect(self.__onHScrollValueChanged)
        self.__editorSettings.startDisLetterXOffChangedSignal.connect(self.__horizontalScrollBar.setValue)
        
        self.__lineNumberWidget = LineNumberWidget(self.__editorSettings,self.__splitter)
        setattr(self.__lineNumberWidget,'resizeEvent',self.__onLineNumberWidgetSizeChanged)
        
        self.__codeTextWidget = CodeTextWidget(self.__textDocument,self.__editorSettings,self.__splitter)
        self.__codeTextWidget.document().totalLevelTextChangedSignal.connect(self.__onCodeTextChanged)
        self.__codeTextWidget.settings().lineTextMaxPixelChangedSignal.connect(self.__onLineStrLengthChanged)
        self.__codeTextWidget.visibleLineYOffInfoChangedSignal.connect( self.__lineNumberWidget.setVisibleLineYOffInfoArray )
        
        
        self.__splitter.addWidget( self.__lineNumberWidget )
        self.__splitter.addWidget( self.__codeTextWidget )
        self.__splitter.setCollapsible( 0,False )
        self.__splitter.setCollapsible( 1,False )

        self.setText = self.__codeTextWidget.setText
        self.getText = self.__codeTextWidget.getText



    def __onLineStrLengthChanged(self,newMaxLength):
        hMax = newMaxLength-1
        self.__horizontalScrollBar.setRange(0,hMax)
        if self.__horizontalScrollBar.value() > hMax:
            self.__horizontalScrollBar.setValue(hMax)
        
    
    def __onCodeTextChanged(self,*arg1,**arg2):        
        vMax = self.__codeTextWidget.document().getLineCount()-1
        self.__verticalScrollBar.setRange(0,vMax)
        if self.__verticalScrollBar.value() > vMax:
            self.__verticalScrollBar.setValue(vMax)


    def __onVScrollValueChanged(self):
        self.__codeTextWidget.showLineNumberAsTop(self.__verticalScrollBar.value())
        
    def __onHScrollValueChanged(self):
        self.__codeTextWidget.showLeftXOffAsLeft(self.__horizontalScrollBar.value())
    
    
    
    
    def __onLineNumberWidgetSizeChanged(self,*arg1,**arg2):
        lineNumberWidgetWidth = self.__lineNumberWidget.width()
        vScrollBarWidth = self.__verticalScrollBar.width()        
        hScrollBarHeight = self.__horizontalScrollBar.height()
        self.__horizontalScrollBar.setGeometry(lineNumberWidgetWidth,self.height()-hScrollBarHeight, \
                                               self.width()-vScrollBarWidth-lineNumberWidgetWidth,hScrollBarHeight)    
    
    def resizeEvent(self, event):
        vScrollBarWidth = self.__verticalScrollBar.width()        
        hScrollBarHeight = self.__horizontalScrollBar.height()
        self.__splitter.setGeometry( 0,0,self.width()-vScrollBarWidth,self.height()-hScrollBarHeight )
        self.__verticalScrollBar.setGeometry(self.width()-vScrollBarWidth,0,vScrollBarWidth,self.height()-hScrollBarHeight)
        self.__onLineNumberWidgetSizeChanged()
        
    def wheelEvent(self, event):
        changedV = 3 if event.angleDelta().y() < 0 else -3
        self.__verticalScrollBar.setValue( self.__verticalScrollBar.value() + changedV )