Esempio n. 1
0
 def __showContextMenu(self, pos):
     menu = QtGui.QMenu()
     menu.addAction(QtGui.QIcon(":/images/retry.png"), "Retry",
                    self.retrySelected)
     menu.addAction(QtGui.QIcon(":/images/kill.png"), "Kill",
                    self.killSelected)
     menu.addAction(QtGui.QIcon(":/images/eat.png"), "Eat",
                    self.eatSelected)
     menu.exec_(self.mapToGlobal(pos))
Esempio n. 2
0
    def _openPanelSettingsDialog(self):
        w = self.widget()
        if not w:
            return

        pos = QtGui.QCursor.pos()
        menu = QtGui.QMenu(w)
        action = menu.addAction("Multi-Tab Mode")
        action.setCheckable(True)
        action.setChecked(int(self.getAttr("multiTabMode")))
        action.toggled.connect(self.__multiTabModeChanged)
        menu.popup(pos + QtCore.QPoint(5,5))
Esempio n. 3
0
    def __showContextMenu(self, pos):
        menu = QtGui.QMenu()

        total = self.__selectedCount()
        if 1 <= total <= 2:
            icon = QtGui.QIcon(":/images/depend.png")
            depend = menu.addAction(icon, "Add Dependencies",
                                    self.__addDepends)

        menu.addAction(QtGui.QIcon(":/images/depend.png"), "Drop Depends",
                       self.__dropDepends)

        menu.exec_(self.mapToGlobal(pos))
Esempio n. 4
0
    def __showContextMenu(self, pos):
        menu = QtGui.QMenu(self)

        cluster_menu = menu.addMenu("Set Cluster")
        for name, cluster in sorted(self.__clusters.iteritems()):
            action = cluster_menu.addAction(name)
            action.triggered.connect(partial(self.assignClusterToSelected, cluster))

        menu.addAction(QtGui.QIcon(":/images/locked.png"), 
                        "Lock Nodes", partial(self.lockSelected, True))
        menu.addAction(QtGui.QIcon(":/images/unlocked.png"), 
                        "Unlock Nodes", partial(self.lockSelected, False))

        self.__refreshEnabled = False
        menu.exec_(self.mapToGlobal(pos))
        self.__refreshEnabled = True
Esempio n. 5
0
    def addWorkspaceSelectionMenu(self, obj):
        menu = QtGui.QMenu(obj)
        for s in self.__workspaces:
            menu.addAction(s)
        # TODO add custom workspaces
        menu.addSeparator()
        menu.addAction("Reset")
        menu.addAction("New Workspace")
        menu.triggered.connect(self.__menuItemTriggered)

        self.btn = QtGui.QToolButton(obj)
        self.btn.setFocusPolicy(QtCore.Qt.NoFocus)
        self.btn.setText("")
        self.btn.setPopupMode(QtGui.QToolButton.InstantPopup)
        self.btn.setMenu(menu)
        obj.addWidget(self.btn)
Esempio n. 6
0
    def __showContextMenu(self, pos):
        menu = QtGui.QMenu()
        menu.addAction(QtGui.QIcon(":/images/retry.png"), "Retry",
                       self.retrySelected)
        menu.addAction(QtGui.QIcon(":/images/kill.png"), "Kill",
                       self.killSelected)
        menu.addAction(QtGui.QIcon(":/images/eat.png"), "Eat",
                       self.eatSelected)

        total = self.__selectedCount()
        if 1 <= total <= 2:
            icon = QtGui.QIcon(":/images/depend.png")
            depend = menu.addAction(icon, "Add Dependencies",
                                    self.__addDepends)

        menu.addAction(QtGui.QIcon(":/images/depend.png"), "Drop Depends",
                       self.__dropDepends)

        menu.exec_(self.mapToGlobal(pos))
Esempio n. 7
0
    def __init__(self, title, options, selected=None, icons=None, parent=None):
        QtGui.QWidget.__init__(self, parent)
        layout = QtGui.QVBoxLayout(self)

        self.__btn = btn = QtGui.QPushButton(title)
        btn.setFocusPolicy(QtCore.Qt.NoFocus)
        btn.setMaximumHeight(22)
        btn.setFlat(True)
        btn.setContentsMargins(0, 0, 0, 0)

        self.__menu = menu = QtGui.QMenu(self)
        btn.setMenu(menu)

        self.setOptions(options, selected, icons)

        layout.addWidget(btn)

        btn.toggled.connect(btn.showMenu)
        menu.triggered.connect(
            lambda action: self.optionSelected.emit(action.text()))
Esempio n. 8
0
def jobContextMenu(jobs, refreshCallback=None, parent=None):
    """
    Get a job context QMenu with common operations
    """
    menu = QtGui.QMenu(parent)

    if not isinstance(jobs, (tuple, set, list, dict)):
        jobs = [jobs]

    total = len(jobs)
    isPaused = jobs[0].paused

    pause = menu.addAction(QtGui.QIcon(":/images/pause.png"),
                           "Un-Pause" if isPaused else "Pause")
    kill = menu.addAction(QtGui.QIcon(":/images/kill.png"),
                          "Kill Job%s" % 's' if total else '')

    menu.addSeparator()

    kill_tasks = menu.addAction(QtGui.QIcon(":/images/kill.png"), "Kill Tasks")
    eat_tasks = menu.addAction(QtGui.QIcon(":/images/eat.png"),
                               "Eat Dead Tasks")
    retry_tasks = menu.addAction(QtGui.QIcon(":/images/retry.png"),
                                 "Retry Dead Tasks")

    def action_on_tasks(fn, job_list, dead=False):
        if dead:
            states = [plow.client.TaskState.DEAD]
        else:
            states = []

        tasks = list(
            chain.from_iterable(j.get_tasks(states=states) for j in job_list))

        if not tasks:
            return

        msg = "Run %r on %d jobs  (%d tasks) ?" % (fn.__name__, len(job_list),
                                                   len(tasks))
        if not ask(msg, parent=parent):
            return

        if tasks:
            fn(tasks=tasks)
            if refreshCallback:
                refreshCallback()

    eat_tasks.triggered.connect(
        partial(action_on_tasks, plow.client.eat_tasks, jobs, dead=True))

    retry_tasks.triggered.connect(
        partial(action_on_tasks, plow.client.retry_tasks, jobs, dead=True))

    kill_tasks.triggered.connect(
        partial(action_on_tasks, plow.client.kill_tasks, jobs, dead=False))

    def pause_fn(job_list, pause):
        for j in job_list:
            j.pause(pause)

        if refreshCallback:
            refreshCallback()

    pause.triggered.connect(partial(pause_fn, jobs, not isPaused))

    def kill_fn(job_list):
        if not ask("Kill %d job(s) ?" % len(job_list), parent=parent):
            return

        for j in job_list:
            j.kill('plow-wrangler')

        if refreshCallback:
            refreshCallback()

    kill.triggered.connect(partial(kill_fn, jobs))

    return menu