Пример #1
0
    def __init__(self, parent):
        QtWidgets.QDialog.__init__(self, parent)
        self._ui = Ui_WatchWindow()
        self._ui.setupUi(self)

        self._boxWithFocus = self._ui.unvaryingEdit
        self._prevDualScrollVal = 0

        self._parent = parent
        self._searchString = ""

        self.addAction(self._ui.actionFind)
        self.addAction(self._ui.actionFindNext)
        self.addAction(self._ui.actionFindPrevious)

        self._ui.doneButton.clicked.connect(self.accept)
        self.finished.connect(self._cleanUpAndClose)
        self._ui.dualScroller.valueChanged.connect(self._changeBothSliders)
        self._ui.diffButton.clicked.connect(self._diff)
        self._ui.actionFind.triggered.connect(self._find)
        self._ui.actionFindNext.triggered.connect(self._findNext)
        self._ui.actionFindPrevious.triggered.connect(self._findPrevious)
        self._ui.varyingEdit.cursorPositionChanged.connect(
            self._varyingCursorChanged)
        self._ui.unvaryingEdit.cursorPositionChanged.connect(
            self._unvaryingCursorChanged)
        # save splitter state
        self._ui.splitter.splitterMoved.connect(self._splitterMoved)

        #create a timer for saving splitter state only when it stops moving
        self._splitterTimer = QtCore.QTimer(self)
        self._splitterTimer.setInterval(500)
        self._splitterTimer.timeout.connect(self._saveSplitterState)

        self._resetSettings()
Пример #2
0
    def __init__(self, parent):
        QtWidgets.QDialog.__init__(self,parent)
        self._ui = Ui_WatchWindow()
        self._ui.setupUi(self)

        self._boxWithFocus = self._ui.unvaryingEdit
        self._prevDualScrollVal = 0

        self._parent = parent
        self._searchString = ""

        self.addAction(self._ui.actionFind)
        self.addAction(self._ui.actionFindNext)
        self.addAction(self._ui.actionFindPrevious)

        self._ui.doneButton.clicked.connect(self.accept)
        self.finished.connect(self._cleanUpAndClose)
        self._ui.dualScroller.valueChanged.connect(self._changeBothSliders)
        self._ui.diffButton.clicked.connect(self._diff)
        self._ui.actionFind.triggered.connect(self._find)
        self._ui.actionFindNext.triggered.connect(self._findNext)
        self._ui.actionFindPrevious.triggered.connect(self._findPrevious)
        self._ui.varyingEdit.cursorPositionChanged.connect(
            self._varyingCursorChanged)
        self._ui.unvaryingEdit.cursorPositionChanged.connect(
            self._unvaryingCursorChanged)
	# save splitter state
	self._ui.splitter.splitterMoved.connect(self._splitterMoved)

	#create a timer for saving splitter state only when it stops moving
	self._splitterTimer = QtCore.QTimer(self)
	self._splitterTimer.setInterval(500)
        self._splitterTimer.timeout.connect(self._saveSplitterState)

	self._resetSettings()
Пример #3
0
class WatchWindow(QtWidgets.QDialog):
    def __init__(self, parent):
        QtWidgets.QDialog.__init__(self, parent)
        self._ui = Ui_WatchWindow()
        self._ui.setupUi(self)

        self._boxWithFocus = self._ui.unvaryingEdit
        self._prevDualScrollVal = 0

        self._parent = parent
        self._searchString = ""

        self.addAction(self._ui.actionFind)
        self.addAction(self._ui.actionFindNext)
        self.addAction(self._ui.actionFindPrevious)

        self._ui.doneButton.clicked.connect(self.accept)
        self.finished.connect(self._cleanUpAndClose)
        self._ui.dualScroller.valueChanged.connect(self._changeBothSliders)
        self._ui.diffButton.clicked.connect(self._diff)
        self._ui.actionFind.triggered.connect(self._find)
        self._ui.actionFindNext.triggered.connect(self._findNext)
        self._ui.actionFindPrevious.triggered.connect(self._findPrevious)
        self._ui.varyingEdit.cursorPositionChanged.connect(
            self._varyingCursorChanged)
        self._ui.unvaryingEdit.cursorPositionChanged.connect(
            self._unvaryingCursorChanged)
        # save splitter state
        self._ui.splitter.splitterMoved.connect(self._splitterMoved)

        #create a timer for saving splitter state only when it stops moving
        self._splitterTimer = QtCore.QTimer(self)
        self._splitterTimer.setInterval(500)
        self._splitterTimer.timeout.connect(self._saveSplitterState)

        self._resetSettings()

    def _splitterMoved(self, pos, index):
        # reset the timer every time the splitter moves
        # when the splitter stop moving for half a second, save state
        self._splitterTimer.stop()
        self._splitterTimer.start()

    def _saveSplitterState(self):
        self._parent._settings.setAndSave(
            watchWindowSplitter=self._ui.splitter.saveState())
        self._splitterTimer.stop()

    def _varyingCursorChanged(self):
        self._boxWithFocus = self._ui.varyingEdit

    def _unvaryingCursorChanged(self):
        self._boxWithFocus = self._ui.unvaryingEdit

    def _find(self):
        searchString = QtWidgets.QInputDialog.getText(self, "Find",
            "Enter search string\nUse Ctrl+G to \"Find Next\"\n" + \
            "Use Ctrl+Shift+G to \"Find Previous\"")
        if searchString[1]:
            self._searchString = searchString[0]
            if (not self._boxWithFocus.find(self._searchString)):
                self._boxWithFocus.moveCursor(QtGui.QTextCursor.Start)
                self._boxWithFocus.find(self._searchString)

    def _findNext(self):
        if (self._searchString == ""):
            return
        if (not self._boxWithFocus.find(self._searchString)):
            self._boxWithFocus.moveCursor(QtGui.QTextCursor.Start)
            self._boxWithFocus.find(self._searchString)

    def _findPrevious(self):
        if (self._searchString == ""):
            return
        if (not self._boxWithFocus.find(self._searchString,
                                        QtGui.QTextDocument.FindBackward)):
            self._boxWithFocus.moveCursor(QtGui.QTextCursor.End)
            self._boxWithFocus.find(self._searchString,
                                    QtGui.QTextDocument.FindBackward)

    def _diff(self):
        import tempfile
        unvarFile = tempfile.NamedTemporaryFile()
        unvarFile.write(str(self._ui.unvaryingEdit.toPlainText()))
        unvarFile.flush()
        varFile = tempfile.NamedTemporaryFile()
        varFile.write(str(self._ui.varyingEdit.toPlainText()))
        varFile.flush()

        os.system("xxdiff %s %s" % (unvarFile.name, varFile.name))

        unvarFile.close()
        varFile.close()

    def _changeBothSliders(self, val):
        delta = val - self._prevDualScrollVal
        self._ui.varyingEdit.verticalScrollBar().setValue(
            self._ui.varyingEdit.verticalScrollBar().value() + delta)
        self._ui.unvaryingEdit.verticalScrollBar().setValue(
            self._ui.unvaryingEdit.verticalScrollBar().value() + delta)
        self._prevDualScrollVal = val

    def appendContents(self, s, color=QtGui.QColor(0, 0, 0)):
        self._ui.varyingEdit.setTextColor(color)
        self._ui.varyingEdit.append(s)

        self._ui.dualScroller.setMaximum(
            max(self._ui.unvaryingEdit.verticalScrollBar().maximum(),
                self._ui.varyingEdit.verticalScrollBar().maximum()))
        self._ui.dualScroller.setPageStep(
            min(self._ui.unvaryingEdit.verticalScrollBar().pageStep(),
                self._ui.varyingEdit.verticalScrollBar().pageStep()))

        self._boxWithFocus = self._ui.varyingEdit

    def appendUnvaryingContents(self, s, color=QtGui.QColor(0, 0, 0)):
        self._ui.unvaryingEdit.setTextColor(color)
        self._ui.unvaryingEdit.append(s)

        self._ui.dualScroller.setMaximum(
            max(self._ui.unvaryingEdit.verticalScrollBar().maximum(),
                self._ui.varyingEdit.verticalScrollBar().maximum()))
        self._ui.dualScroller.setPageStep(
            min(self._ui.unvaryingEdit.verticalScrollBar().pageStep(),
                self._ui.varyingEdit.verticalScrollBar().pageStep()))

        self._boxWithFocus = self._ui.unvaryingEdit

    def appendSeparator(self):
        self.appendContents(separatorString, separatorColor)
        self.appendUnvaryingContents(separatorString, separatorColor)

    def clearContents(self):
        self._ui.varyingEdit.setText("")
        self._ui.unvaryingEdit.setText("")

    def _cleanUpAndClose(self, result):
        self._parent._ui.actionWatch_Window.setChecked(False)

    def _resetSettings(self):
        # restore splitter position
        splitterpos = self._parent._settings.get('watchWindowSplitter')
        if not splitterpos is None:
            self._ui.splitter.restoreState(splitterpos)
Пример #4
0
class WatchWindow(QtWidgets.QDialog):
    def __init__(self, parent):
        QtWidgets.QDialog.__init__(self,parent)
        self._ui = Ui_WatchWindow()
        self._ui.setupUi(self)

        self._boxWithFocus = self._ui.unvaryingEdit
        self._prevDualScrollVal = 0

        self._parent = parent
        self._searchString = ""

        self.addAction(self._ui.actionFind)
        self.addAction(self._ui.actionFindNext)
        self.addAction(self._ui.actionFindPrevious)

        self._ui.doneButton.clicked.connect(self.accept)
        self.finished.connect(self._cleanUpAndClose)
        self._ui.dualScroller.valueChanged.connect(self._changeBothSliders)
        self._ui.diffButton.clicked.connect(self._diff)
        self._ui.actionFind.triggered.connect(self._find)
        self._ui.actionFindNext.triggered.connect(self._findNext)
        self._ui.actionFindPrevious.triggered.connect(self._findPrevious)
        self._ui.varyingEdit.cursorPositionChanged.connect(
            self._varyingCursorChanged)
        self._ui.unvaryingEdit.cursorPositionChanged.connect(
            self._unvaryingCursorChanged)
	# save splitter state
	self._ui.splitter.splitterMoved.connect(self._splitterMoved)

	#create a timer for saving splitter state only when it stops moving
	self._splitterTimer = QtCore.QTimer(self)
	self._splitterTimer.setInterval(500)
        self._splitterTimer.timeout.connect(self._saveSplitterState)

	self._resetSettings()

    def _splitterMoved(self, pos, index):
	# reset the timer every time the splitter moves
	# when the splitter stop moving for half a second, save state
	self._splitterTimer.stop()
	self._splitterTimer.start()

    def _saveSplitterState(self):
	self._parent._settings.setAndSave(
		watchWindowSplitter = self._ui.splitter.saveState())
	self._splitterTimer.stop()

    def _varyingCursorChanged(self):
        self._boxWithFocus = self._ui.varyingEdit

    def _unvaryingCursorChanged(self):
        self._boxWithFocus = self._ui.unvaryingEdit

    def _find(self):
        searchString = QtWidgets.QInputDialog.getText(self, "Find", 
            "Enter search string\nUse Ctrl+G to \"Find Next\"\n" + \
            "Use Ctrl+Shift+G to \"Find Previous\"")
        if searchString[1]:
            self._searchString = searchString[0]
            if (not self._boxWithFocus.find(self._searchString)):
                self._boxWithFocus.moveCursor(QtGui.QTextCursor.Start)
                self._boxWithFocus.find(self._searchString) 

    def _findNext(self):
        if (self._searchString == ""):
            return
        if (not self._boxWithFocus.find(self._searchString)):
            self._boxWithFocus.moveCursor(QtGui.QTextCursor.Start)
            self._boxWithFocus.find(self._searchString)

    def _findPrevious(self):
        if (self._searchString == ""):
            return
        if (not self._boxWithFocus.find(self._searchString,
            QtGui.QTextDocument.FindBackward)):
            self._boxWithFocus.moveCursor(QtGui.QTextCursor.End)
            self._boxWithFocus.find(self._searchString, 
                                      QtGui.QTextDocument.FindBackward)

    def _diff(self):
        import tempfile
        unvarFile = tempfile.NamedTemporaryFile()
        unvarFile.write(str(self._ui.unvaryingEdit.toPlainText()))
        unvarFile.flush()
        varFile = tempfile.NamedTemporaryFile()
        varFile.write(str(self._ui.varyingEdit.toPlainText()))
        varFile.flush()

        os.system("xxdiff %s %s" % (unvarFile.name, varFile.name))
                          
        unvarFile.close()
        varFile.close()

    def _changeBothSliders(self, val):
        delta = val - self._prevDualScrollVal
        self._ui.varyingEdit.verticalScrollBar().setValue(
            self._ui.varyingEdit.verticalScrollBar().value() + delta)
        self._ui.unvaryingEdit.verticalScrollBar().setValue(
            self._ui.unvaryingEdit.verticalScrollBar().value() + delta)
        self._prevDualScrollVal = val

    def appendContents(self, s, color = QtGui.QColor(0,0,0)):
	self._ui.varyingEdit.setTextColor(color)
        self._ui.varyingEdit.append(s)

        self._ui.dualScroller.setMaximum(max(
            self._ui.unvaryingEdit.verticalScrollBar().maximum(),
            self._ui.varyingEdit.verticalScrollBar().maximum()))
        self._ui.dualScroller.setPageStep(min(
            self._ui.unvaryingEdit.verticalScrollBar().pageStep(),
            self._ui.varyingEdit.verticalScrollBar().pageStep()))

        self._boxWithFocus = self._ui.varyingEdit

    def appendUnvaryingContents(self, s, color = QtGui.QColor(0,0,0)):
	self._ui.unvaryingEdit.setTextColor(color)
        self._ui.unvaryingEdit.append(s)

        self._ui.dualScroller.setMaximum(max(
            self._ui.unvaryingEdit.verticalScrollBar().maximum(), 
            self._ui.varyingEdit.verticalScrollBar().maximum()))
        self._ui.dualScroller.setPageStep(min(
            self._ui.unvaryingEdit.verticalScrollBar().pageStep(),
            self._ui.varyingEdit.verticalScrollBar().pageStep()))

        self._boxWithFocus = self._ui.unvaryingEdit

    def appendSeparator(self):
	self.appendContents(separatorString, separatorColor)
	self.appendUnvaryingContents(separatorString, separatorColor)

    def clearContents(self):
        self._ui.varyingEdit.setText("")
        self._ui.unvaryingEdit.setText("")

    def _cleanUpAndClose(self, result):
        self._parent._ui.actionWatch_Window.setChecked(False)

    def _resetSettings(self):
	# restore splitter position
	splitterpos = self._parent._settings.get('watchWindowSplitter')
	if not splitterpos is None:
	    self._ui.splitter.restoreState(splitterpos)