Esempio n. 1
0
    def __init__(self, url):
        QWidget.__init__(self)
        self.url = url

        fixedFont = QFont("Fixed")
        fixedFont.setStyleHint(QFont.TypeWriter)

        # Source browser
        self.sourceBrowser = QTextBrowser()
        self.sourceBrowser.setFont(fixedFont)
        self.sourceBrowser.setOpenLinks(False)

        # Revision details
        self.revisionDetailsWidget = RevisionDetailsWidget()
        self.revisionDetailsWidget.layout().setMargin(0)

        # Layout
        splitter = QSplitter()
        splitter.setOrientation(Qt.Vertical)
        splitter.addWidget(self.sourceBrowser)
        splitter.addWidget(self.revisionDetailsWidget)
        self.revisionDetailsWidget.hide()
        self.setCentralWidget(splitter)

        # Connections
        QObject.connect(self.sourceBrowser, SIGNAL("anchorClicked(const QUrl&)"), self.slotSourceAnchorClicked)
        QObject.connect(self.revisionDetailsWidget.goToPreviousButton, SIGNAL("clicked()"), self.goToPrevious)
        QObject.connect(self.revisionDetailsWidget.goToCurrentButton, SIGNAL("clicked()"), self.goToCurrent)
        QObject.connect(self.revisionDetailsWidget.goToNextButton, SIGNAL("clicked()"), self.goToNext)
        QObject.connect(self.revisionDetailsWidget.showDiffButton, SIGNAL("clicked()"), self.showDiff)

        revision = getLatestRevisionForUrl(url)
        self.goToRevision(revision)
Esempio n. 2
0
class Window(QMainWindow):
    def __init__(self, url):
        QWidget.__init__(self)
        self.url = url

        fixedFont = QFont("Fixed")
        fixedFont.setStyleHint(QFont.TypeWriter)

        # Source browser
        self.sourceBrowser = QTextBrowser()
        self.sourceBrowser.setFont(fixedFont)
        self.sourceBrowser.setOpenLinks(False)

        # Revision details
        self.revisionDetailsWidget = RevisionDetailsWidget()
        self.revisionDetailsWidget.layout().setMargin(0)

        # Layout
        splitter = QSplitter()
        splitter.setOrientation(Qt.Vertical)
        splitter.addWidget(self.sourceBrowser)
        splitter.addWidget(self.revisionDetailsWidget)
        self.revisionDetailsWidget.hide()
        self.setCentralWidget(splitter)

        # Connections
        QObject.connect(self.sourceBrowser, SIGNAL("anchorClicked(const QUrl&)"), self.slotSourceAnchorClicked)
        QObject.connect(self.revisionDetailsWidget.goToPreviousButton, SIGNAL("clicked()"), self.goToPrevious)
        QObject.connect(self.revisionDetailsWidget.goToCurrentButton, SIGNAL("clicked()"), self.goToCurrent)
        QObject.connect(self.revisionDetailsWidget.goToNextButton, SIGNAL("clicked()"), self.goToNext)
        QObject.connect(self.revisionDetailsWidget.showDiffButton, SIGNAL("clicked()"), self.showDiff)

        revision = getLatestRevisionForUrl(url)
        self.goToRevision(revision)

    def goToRevision(self, revision):
        source = formatSource(self.url, revision)
        self.sourceBrowser.setHtml(source)
        self.currentRevision = revision
        self.setWindowTitle("%s r%d" % (self.url,self.currentRevision))

    def goToNext(self):
        revision = self.currentRevision + 1
        self.goToRevision(revision)

    def goToCurrent(self):
        self.goToRevision(self.currentRevision)

    def goToPrevious(self):
        revision = self.currentRevision - 1
        self.goToRevision(revision)

    def sizeHint(self):
        return QSize(800, 600)

    def slotSourceAnchorClicked(self, link):
        link = unicode(link.toString())
        if link[0] == "r":
            revision = int(link[1:])
            self.showRevisionDetails(revision)

    def showRevisionDetails(self, revision):
        self.revisionDetailsWidget.show()

        self.currentRevision = revision
        details = getRevisionLog(self.url, self.currentRevision)
        self.revisionDetailsWidget.revisionDetailsBrowser.setText(details)

        self.revisionDetailsWidget.detailsLabel.setText("Showing details for r%d" % self.currentRevision)

        self.revisionDetailsWidget.goToPreviousButton.setText("Go to r%d" % (self.currentRevision - 1))

        self.revisionDetailsWidget.goToCurrentButton.setText("Go to r%d" % self.currentRevision)

        self.revisionDetailsWidget.goToNextButton.setText("Go to r%d" % (self.currentRevision + 1))


    def showDiff(self):
        old = self.currentRevision - 1
        new = self.currentRevision
        cmd = ["svn", "diff", "-r%d:%d" % (old, new), self.url]

        viewerCmd = ["gvim", "-R", "-"]

        p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
        p2 = subprocess.Popen(viewerCmd, stdin=p1.stdout)
        p2.communicate()