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)
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()