Beispiel #1
0
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)