def __init__(self, parent=None): QWidget.__init__(self) self._ui = Ui_Form() self._ui.setupUi(self) self.commits = {} self.commits["first"] = ["aaaaa", "bbbbb", "ccccc", "ddddd"] self.commits["second"] = ["ggggg", "bbbbb", "xxxxx", "aaaaa"] self.scene = QGraphicsScene(self) self.view = self._ui.graphicsView self.view.setScene(self.scene) self.view.setRenderHint(QPainter.Antialiasing) self.matching_commits = False self.view.setAcceptDrops(True) self.populate()
class GraphicsWidget(QWidget): def __init__(self, parent=None): QWidget.__init__(self) self._ui = Ui_Form() self._ui.setupUi(self) self.commits = {} self.commits["first"] = ["aaaaa", "bbbbb", "ccccc", "ddddd"] self.commits["second"] = ["ggggg", "bbbbb", "xxxxx", "aaaaa"] self.scene = QGraphicsScene(self) self.view = self._ui.graphicsView self.view.setScene(self.scene) self.view.setRenderHint(QPainter.Antialiasing) self.matching_commits = False self.view.setAcceptDrops(True) self.populate() def populate(self): self.temp_del_items = [] self.commit_items = [] self.filter = my_env_filter() self.scene.installEventFilter(self.filter) self.hints = Hints(0, -60) self.scene.addItem(self.hints) item_x = 0 color = GREEN for branch in self.commits: item_y = 0 for commit_name in self.commits[branch]: commit = Commit(commit_name) commit_background_item = CommitItem(item_x, item_y, color, commit, branch, background_item=True) arrow = Arrow(item_x, item_y, commit_background_item) commit_display_item = CommitItem(item_x, item_y, color, commit, branch, background_item=False) self.scene.addItem(commit_display_item) self.scene.addItem(commit_background_item) self.commit_items.append(commit_background_item) item_y += COMMIT_HEIGHT + ARROW_HEIGHT item_x += 270 color = BLUE self.connect_signals() def clear_scene(self): self.temp_del_items = self.scene.items() for item in self.temp_del_items: self.scene.removeItem(item) # del item def set_matching_commits_mode(self, bool): print "setting matching" self.matching_commits = bool if bool: self.hints.setup_display(step=1) self.hints.update() else: self.commit_item_finished_hovering() def connect_signals(self): self.connect(self.filter, SIGNAL("setMatchingMode(bool)"), self.set_matching_commits_mode) for commit_item in self.commit_items: self.connect(commit_item, SIGNAL("hoveringOverCommitItem(QString*)"), self.commit_item_hovered) self.connect(commit_item, SIGNAL("finishedHovering(void)"), self.commit_item_finished_hovering) self.connect(commit_item, SIGNAL("commitItemInserted(QString*, QString*)"), self.insert_commit) def insert_commit(self, name, branch): self.clear_scene() self.commits[str(branch)].append(name) print self.commits self.populate() def commit_item_hovered(self, commit_name): if self.matching_commits: self.hints.setup_display(step=2) self.hints.update() for commit_item in self.commit_items: if commit_item.get_name() != commit_name: commit_item.gray(True) def commit_item_finished_hovering(self): for commit_item in self.commit_items: commit_item.gray(False)