コード例 #1
0
    def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:  #pylint: disable=unused-argument
        menu = QMenu()

        def _select_states():
            if self.disasm_view:
                self.disasm_view.redraw_current_graph()
            symexec_view = self.symexec_view
            if symexec_view:
                symexec_view.select_states(self.states)
                symexec_view.workspace.raise_view(symexec_view)

        def _move_states():
            disasm_view = self.disasm_view
            symexec_view = self.symexec_view
            if disasm_view is None or symexec_view is None:
                return
            to_stash, ok = QInputDialog.getText(disasm_view, "Move to?",
                                                "Target Stash Name:",
                                                QLineEdit.Normal)
            if ok:
                symexec_view.current_simgr.move("active", to_stash,
                                                lambda s: s in self.states)
                symexec_view._simgrs._simgr_viewer.refresh()
                disasm_view.refresh()

        menu.addAction("Select", _select_states)
        menu.addAction("Move To", _move_states)
        menu.exec_(QCursor.pos())
コード例 #2
0
ファイル: gview3.py プロジェクト: aamirglb/PythonTest
class BracketItem(QGraphicsItem):
    def __init__(self, id):
        super(BracketItem, self).__init__()
        self.zoomFactor = 1
        self.rootSlot = SlotItem(1, self)
        self.leftChild = SlotItem(2, self)
        self.rightChild = SlotItem(3, self)

        self.rootSlot.setPos(120, 20)
        self.leftChild.setPos(20, 140)
        self.rightChild.setPos(220, 140)

        self.scaleFactor = 1

    def boundingRect(self):
        return QRectF(0, 0, 340, 230)

    def paint(self, painter, option, widget):
        # self.scaleFactor -= 0.1
        # painter.scale(self.scaleFactor, self.scaleFactor)
        rect = self.boundingRect()
        painter.drawRect(rect)
        painter.drawLine(170, 90, 70, 140)
        painter.drawLine(170, 90, 270, 140)

    def contextMenuEvent(self, event):
        self.menu = QMenu()
        self.showModeAction = QAction('Bracket')
        self.menu.addAction(self.showModeAction)
        self.menu.exec_(event.screenPos())
コード例 #3
0
ファイル: FileSystemWidget.py プロジェクト: yuraxdrumz/pyrdp
    def onCustomContextMenu(self, localPosition: QPoint):
        """
        Show a custom context menu with a "Download file" action when a file is right-clicked.
        :param localPosition: position where the user clicked.
        """
        selectedFile = self.selectedFile()

        if selectedFile is None:
            return

        globalPosition = self.listWidget.mapToGlobal(localPosition)

        downloadAction = QAction("Download file")
        downloadAction.setEnabled(selectedFile.type in [FileSystemItemType.File])
        downloadAction.triggered.connect(self.downloadFile)

        downloadRecursiveAction = QAction("Download files recursively")
        downloadRecursiveAction.setEnabled(selectedFile.type in [FileSystemItemType.Directory])
        downloadRecursiveAction.triggered.connect(self.downloadDirectoryRecursively)

        itemMenu = QMenu()
        itemMenu.addAction(downloadAction)
        itemMenu.addAction(downloadRecursiveAction)

        itemMenu.exec_(globalPosition)
コード例 #4
0
 def contextMenuEvent(self, event):
     index = self.tabBar().tabAt(event.pos())
     if index < 0:
         return
     menu = QMenu(self)
     closeSelected = QAction("Close", self)
     closeAllAction = QAction("Close All", self)
     closeOthersAction = QAction("Close Others", self)
     closeUnmodified = QAction("Close Unmodified", self)
     closeSelected.triggered.connect(lambda: self.closeTab(index))
     closeOthersAction.triggered.connect(lambda: self.closeOthers(index))
     closeAllAction.triggered.connect(self.closeAllTabs)
     closeUnmodified.triggered.connect(
         lambda: self.closeAllTabs(closeUnmodified=True))
     menu.addAction(closeSelected)
     menu.addAction(closeOthersAction)
     menu.addAction(closeAllAction)
     menu.addAction(closeUnmodified)
     if index != 0:
         closeAllToTheLeft = QAction("Close All to the Left", self)
         closeAllToTheLeft.triggered.connect(
             lambda: self.closeAllToTheSide(index, "left"))
         menu.addAction(closeAllToTheLeft)
     if index != len(self.tabs) - 1:
         closeAllToTheRight = QAction("Close All to the Right", self)
         closeAllToTheRight.triggered.connect(
             lambda: self.closeAllToTheSide(index, "right"))
         menu.addAction(closeAllToTheRight)
     menu.exec_(self.mapToGlobal(event.pos()))
コード例 #5
0
class MyItem(QGraphicsItem):
    def __init__(self, _id):
        super(MyItem, self).__init__()
        self.setFlag(QGraphicsItem.ItemIsMovable)
        self.itemId = _id
        self.scaleFactor = 1

    def paint(self, painter, options, widget):
        painter.scale(self.scaleFactor, self.scaleFactor)
        rect = self.boundingRect()
        if self.itemId == 1:
            pen = QPen(Qt.red, 2)
            painter.drawRect(rect)
        else:
            pen = QPen(Qt.blue, 2)
            painter.drawEllipse(rect)

    def setScaleFactor(self, value):
        self.scaleFactor = value
        self.update()

    def boundingRect(self):
        return QRectF(0, 0, 100, 100)

    def contextMenuEvent(self, event):
        self.menu = QMenu()

        self.action = QAction(f'Item {self.itemId}')
        self.menu.addAction(self.action)
        self.menu.exec_(event.screenPos())
コード例 #6
0
ファイル: mainwrapper.py プロジェクト: alkerway/new-kb-tool
 def chooseFileContextMenu(self):
     if hasattr(self, 'dataDisplay'):
         menu = QMenu(self)
         addStatementAction = QAction('Add Statement')
         addStatementAction.triggered.connect(self.addFile)
         menu.addAction(addStatementAction)
         menu.exec_(QCursor.pos())
コード例 #7
0
    def contextMenuEvent(self, event):
        """Context menu of tab options. """
        tab_index = self.tabBar().tabAt(event.pos())
        tab_menu = None
        # Currently over a tab
        if tab_index > -1:
            #rename_action = QAction("Rename", self)
            #rename_action.triggered.connect(self._setNewTabName(tab_index))
            remove_tab_action = QAction(
                QIcon(os.path.join('images', 'edit-delete.png')), "Close",
                self)
            remove_tab_action.triggered.connect(
                self._removeSelectedTab(tab_index))
            tab_menu = QMenu(self)
            #tab_menu.addAction(rename_action)
            tab_menu.addSeparator()
            tab_menu.addAction(remove_tab_action)
            if tab_index == 0:
                remove_tab_action.setDisabled(True)
        # In tab bar, but not over any tabs
        else:
            new_page_action = QAction("Insert New Page", self)
            new_page_action.triggered.connect(self.newPage)
            tab_menu = QMenu(self)
            tab_menu.addAction(new_page_action)

        tab_menu.exec_(event.globalPos())
        self.focusInEvent(QFocusEvent(QEvent.FocusIn))
コード例 #8
0
    def contextMenuRequested(self, point):
        menu = QMenu()
        actionFile = menu.addAction(QIcon.fromTheme("video-x-generic"),
                                    "open File (o)")
        actionclipboard = menu.addSeparator()
        actionURL = menu.addAction(QIcon.fromTheme("browser"),
                                   "URL from Clipboard (u)")
        actionclipboard = menu.addSeparator()
        actionYTurl = menu.addAction(QIcon.fromTheme("youtube"),
                                     "URL from YouTube (y)")
        actionclipboard = menu.addSeparator()
        actionToggle = menu.addAction(QIcon.fromTheme("next"),
                                      "show / hide Slider (s)")
        actionFull = menu.addAction(QIcon.fromTheme("view-fullscreen"),
                                    "Fullscreen (f)")
        action169 = menu.addAction(QIcon.fromTheme("tv-symbolic"), "16 : 9")
        action43 = menu.addAction(QIcon.fromTheme("tv-symbolic"), "4 : 3")
        actionSep = menu.addSeparator()
        actionInfo = menu.addAction(QIcon.fromTheme("help-about"), "Info (i)")
        action5 = menu.addSeparator()
        actionQuit = menu.addAction(QIcon.fromTheme("application-exit"),
                                    "Exit (q)")

        actionFile.triggered.connect(self.openFile)
        actionQuit.triggered.connect(self.handleQuit)
        actionFull.triggered.connect(self.handleFullscreen)
        actionInfo.triggered.connect(self.handleInfo)
        actionToggle.triggered.connect(self.toggleSlider)
        actionURL.triggered.connect(self.playFromURL)
        actionYTurl.triggered.connect(self.getYTUrl)
        action169.triggered.connect(self.screen169)
        action43.triggered.connect(self.screen43)
        menu.exec_(self.mapToGlobal(point))
コード例 #9
0
 def _execTreeViewContextMenu(self, point):
     index = self.treeView.indexAt(point)
     item = self.model.data(index, ITEM_ROLE)
     if isinstance(item, ConfigurationModel.SubConfigContent):
         m = QMenu()
         a1 = QAction("Edit graph")
         m.addAction(a1)
         a1.triggered.connect(lambda: self._addGraphView(item.subConfig))
         if self.model.isApplication(index):
             a2 = QAction("Select Application")
             a2.triggered.connect(lambda: self.changeActiveApp(
                 self.model.data(index, Qt.DisplayRole)))
             a3 = QAction("Init Application")
             a3.triggered.connect(lambda: self._changeActiveAppAndInit(
                 self.model.data(index, Qt.DisplayRole)))
             m.addActions([a2, a3])
             pbsrv = Services.getService("PlaybackControl")
             m2 = m.addMenu("Init and load sequence")
             m3 = m.addMenu("Init, load and play")
             s1 = []
             s2 = []
             for a in pbsrv.recentSeqs:
                 assert isinstance(a, QAction)
                 if a.isVisible():
                     # pylint: disable=cell-var-from-loop
                     # the below statements are tested and work
                     aseq = QAction(a.text())
                     aseq.triggered.connect(lambda arg1=a.data(
                     ), seq=a.data(): self._changeActiveAppInitAndLoad(
                         self.model.data(index, Qt.DisplayRole), seq, False)
                                            )
                     s1.append(aseq)
                     aseq = QAction(a.text())
                     aseq.triggered.connect(lambda arg1=a.data(
                     ), seq=a.data(): self._changeActiveAppInitAndLoad(
                         self.model.data(index, Qt.DisplayRole), seq, True))
                     # pylint: enable=cell-var-from-loop
                     s2.append(aseq)
             m2.addActions(s1)
             m3.addActions(s2)
         m.exec_(self.treeView.mapToGlobal(point))
         return
     if self.model.isSubConfigParent(
             index) == Configuration.CONFIG_TYPE_APPLICATION:
         m = QMenu()
         a = QAction("Add application")
         m.addAction(a)
         a = m.exec_(self.treeView.mapToGlobal(point))
         if a is not None:
             self._configuration.addNewApplication()
         return
     if self.model.isSubConfigParent(
             index) == Configuration.CONFIG_TYPE_COMPOSITE:
         m = QMenu()
         a = QAction("Add composite filter")
         m.addAction(a)
         a = m.exec_(self.treeView.mapToGlobal(point))
         if a is not None:
             self._configuration.addNewCompositeFilter()
         return
コード例 #10
0
class WorkspaceChooser(QListWidget):
    def __init__(self, algManager, parent=None):
        QListWidget.__init__(self, parent)

        self.algManager = algManager
        self._createPopupMenu()

    def _createPopupMenu(self):
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.onContextMenu)
        
        self.algorithmMenu = QMenu(None)
        self.algorithmMenu.addAction("Adjust parameters...", self.adjustAlgorithm)


    def onContextMenu(self, pos):
        self.clickedItem = self.itemAt(pos)
        if self.clickedItem is None:
            return
        if self.clickedItem.data(1)[:9] == 'Algorithm':
            self.algorithmMenu.exec_(self.mapToGlobal(pos))


    def adjustAlgorithm(self):
        wsName =  self.clickedItem.text()
        self.algManager.adjustAlogrithmParameters(wsName)
コード例 #11
0
 def set_menu(self, _):
     delete_option = QMenu()
     delete_option.addAction(
         QAction("删除",
                 delete_option,
                 triggered=self.delete_table_thread.start))
     delete_option.exec_(QCursor.pos())
コード例 #12
0
 def contextMenuEvent(self, event):
     # print("Right Clicked!", event)
     menu = QMenu(self)
     menu.addAction(self.loadAudioAction)
     menu.addAction(self.extAudioAction)
     menu.addAction(self.selectRegion)
     menu.addAction(self.remSelection)
     menu.exec_(event.globalPos())
コード例 #13
0
    def _showItemMenu(self, pos: QPoint):
        globalPos = self._list.mapToGlobal(pos)

        actions_menu = QMenu()
        actions_menu.addAction("Renommer", self._renameItem)
        actions_menu.addAction("Supprimer",  self._eraseItem)

        actions_menu.exec_(globalPos)
コード例 #14
0
 def handle_context_menu_event(self, event):
     menu = QMenu()
     self.add_menu_action(menu, "Copy state", self.copy_states)
     self.add_menu_action(menu, "Cut state", self.cut_states)
     self.add_menu_action(menu, "Delete state", self.delete_states)
     if self.simgr_viewer.state_clipboard:
         self.add_menu_action(menu, "Paste state", self.paste_states)
     menu.exec_(QCursor.pos())
コード例 #15
0
 def contextMenuEvent(self, event: QContextMenuEvent):
     item = self.itemAt(event.pos())
     if item is not None:
         item.handle_context_menu_event(event)
     else:
         menu = QMenu()
         menu.addAction("Create new stash", self._create_new_stash)
         menu.exec_(QCursor.pos())
コード例 #16
0
ファイル: expressionLabels.py プロジェクト: SouthAngel/vimSet
 def createStandardContextMenu(self, position):
     """ Creates the right-click menu for creating additional exclude expressions. """
     menu = QMenu()
     self.addExcludeExpressionAction = menu.addAction(
         maya.stringTable['y_expressionLabels.kAddExcludeExpression'])
     self.addExcludeExpressionAction.triggered.connect(
         self.addExcludeExpression)
     menu.exec_(self.mapToGlobal(position))
コード例 #17
0
 def contextMenuEvent(self, event: QGraphicsSceneContextMenuEvent):
     menu = QMenu()
     if len(self.bezierEdges):
         text = self._tr("BezierNode","BezierNode","解除组合")
         lockOnNodeAction = QAction(text)
         lockOnNodeAction.triggered.connect(self.do_lockOnNodes)
         menu.addAction(lockOnNodeAction)
         menu.exec_(QCursor.pos())
コード例 #18
0
    def showContextMenu(self, pos):
        if not self.ui.ganttView.leftView().indexAt(pos).isValid():
            self.ui.ganttView.selectionModel().clearSelection()

        menu = QMenu(self.ui.ganttView.leftView())
        menu.addAction(self.newEntryAction)
        menu.addAction(self.removeEntryAction)
        menu.exec_(self.ui.ganttView.leftView().viewport().mapToGlobal(pos))
コード例 #19
0
ファイル: main.py プロジェクト: KDAB/KDChart
 def slotHeaderMenu(self, pt):
     menu = QMenu()
     menu.addAction("This")
     menu.addAction("is")
     menu.addAction("just")
     menu.addAction("a")
     menu.addAction("test")
     menu.exec_(pt)
コード例 #20
0
	def context_menu(self):
		# Menu con click derecho
		if self.ui.tabla_db.selectedIndexes() and self.modo_boton_editar_guardar == "guardar":
			menu = QMenu()
			borrar_data = menu.addAction("Borrar linea de la base de datos")
			borrar_data.triggered.connect(lambda: self.borrar_linea(self.ui.tabla_db.currentIndex().row()))
			cursor = QCursor()
			menu.exec_(cursor.pos())
コード例 #21
0
    def show_rightclick_menu(self):
        """

        :type self: SteamAccountSwitcherGui
        """

        right_menu = QMenu()

        selected = self.accounts_list.currentItem()
        if not self.accounts_list.selectedItems():
            add_account_action = QAction(_("Add account"), self)
            add_account_action.triggered.connect(
                lambda: self.account_dialog(True))
            right_menu.addAction(add_account_action)
            right_menu.exec_(QCursor.pos())
            return
        login_name = selected.data(5)
        account = self.switcher.settings["users"].get(login_name, {})

        login_action = QAction(_("Login"), self)
        edit_action = QAction(_("Edit"), self)
        delete_action = QAction(_("Delete"), self)
        open_profile_action = QAction(_("Steam profile"), self)
        steampage_menu = QMenu(_("Steam profile"), self)

        edit_action.setIcon(QIcon.fromTheme("document-edit"))
        delete_action.setIcon(QIcon.fromTheme("edit-delete"))
        open_profile_action.setIcon(QIcon.fromTheme("internet-web-browser"))

        right_menu.addActions([login_action, edit_action, delete_action])
        right_menu.addSeparator()
        right_menu.addAction(open_profile_action)
        right_menu.addMenu(steampage_menu)

        login_action.triggered.connect(lambda: self.steam_login(login_name))
        edit_action.triggered.connect(lambda: self.account_dialog())
        delete_action.triggered.connect(
            lambda: self.remove_account(login_name))

        open_profile_action.triggered.connect(
            lambda: self.open_steam_profile(account))

        steampage_menu.triggered.connect(
            lambda: self.open_steam_profile(account))

        steampage_menu_actions = QActionGroup(steampage_menu)
        steampage_menu_inventory = QAction(_('Inventory'),
                                           steampage_menu_actions,
                                           checkable=True,
                                           data="nothing")

        open_profile_action.setDisabled(True)
        if account.get("steam_user", {}).get("profileurl"):
            open_profile_action.setEnabled(True)
            steampage_menu.addActions([steampage_menu_inventory])

        if self.accounts_list.selectedItems():
            right_menu.exec_(QCursor.pos())
コード例 #22
0
 def mousePressEvent(self, event: PySide2.QtGui.QMouseEvent) -> None:
     super().mousePressEvent(event)
     if event.button() == Qt.RightButton:
         menu = QMenu()
         menu.addAction("Delete", self.delete_layer)
         menu.addAction("Edit Layer", self.edit_layer)
         if isinstance(self._layer, AnnotationLayer):
             menu.addAction("Export .GeoJSON", self.export_path_json)
         menu.exec_(event.globalPos())
コード例 #23
0
 def __open_menu(self, point):
     """ Initializes and shows context menu """
     menu = QMenu()
     selected_item = self.itemAt(point)
     if selected_item:
         edit_question = QAction('Редактировать список стоп-слов', menu)
         edit_question.triggered.connect(self.__open_stop_word_edit_dialog)
         menu.addAction(edit_question)
     menu.exec_(self.mapToGlobal(point))
コード例 #24
0
ファイル: main_window.py プロジェクト: ruthearagard/tivopy
 def on_context_menu(self, point):
     """Called when the mouse is right clicked on the remote control."""
     menu = QMenu(self)
     menu.addAction(self.current_channel)
     menu.addSeparator()
     menu.addAction(self.select_tivo)
     menu.addAction(self.input_text)
     menu.addAction(self.change_channel)
     menu.exec_(self.mapToGlobal(point))
コード例 #25
0
 def right_context_menu(self, pos):
     '''
     this is the right context menu for listwidget item which you selected
     it will call the function below
     '''
     pop_menu = QMenu()
     if self.tableWidgetTimelog.itemAt(pos):
         self.show_right_context_menu(pop_menu)
     pop_menu.exec_(QCursor.pos())
コード例 #26
0
class TextInput():

    def __init__(self, suggestion='', input_valid_callback = None):

        self.input_valid_callback = input_valid_callback

        self.menu = QMenu()

        self.lb = QWidgetAction(None)

        self.widget = QWidget(None)
        self.layout = QHBoxLayout()
        self.button = QPushButton()
        self.button.setText("Ok")
        self.le = QLineEdit()

        self.layout.addWidget(self.le)
        self.layout.addWidget(self.button)
        self.widget.setLayout(self.layout)

        self.button.pressed.connect(self.done)

        self.le.textEdited.connect(self.check_input)
        self.eventFilter = EnterKeyPressFilter()
        self.eventFilter.callback = self.done
        self.le.installEventFilter(self.eventFilter)

        self.lb.setDefaultWidget(self.widget)

        self.menu.addAction(self.lb)

        self.le.setText(suggestion)
        self.le.setFocus()
        self.le.selectAll()

        self.result = None

    def show(self, pos):
        self.menu.exec_(pos)
        return self.result

    def done(self):
        self.result = self.le.text()
        self.menu.close()

    def check_input(self):
        if self.input_valid_callback is not None:
            result = self.input_valid_callback(self.le.text())
            if result:
                self.le.setStyleSheet('')
            else:
                self.le.setStyleSheet('background: pink')



        return None
コード例 #27
0
 def _watcher_context_menu(self, pos):
     menu = QMenu()
     editAction = QAction("Edit", self)
     deleteAction = QAction("Delete", self)
     if self.watcherlist.itemAt(pos):
         menu.addAction(editAction)
         menu.addAction(deleteAction)
         editAction.triggered.connect(self.edit_watcher)
         deleteAction.triggered.connect(self.delete_watcher)
         menu.exec_(self.watcherlist.mapToGlobal(pos))
コード例 #28
0
    def titleContextMenu(self, event):
        menu = QMenu(self)
        editAction = QAction('Edit Name')
        editAction.triggered.connect(self.promptEditTitle)
        removeAction = QAction('Remove Category')
        removeAction.triggered.connect(self.removeCategory)

        menu.addAction(editAction)
        menu.addAction(removeAction)
        menu.exec_(QCursor.pos())
コード例 #29
0
 def contextMenuEvent(self, event):
     menu = QMenu()
     actionGroup = QAction('Group', None)
     menu.addAction(actionGroup)
     actionGroup.triggered.connect(lambda: nodeGroup.groupFromList(self.scene().selectedItems(), grid=self.grid, position=self.scenePos(), parent=self.parentItem()))
     actionGroup.setEnabled(len(self.scene().selectedItems()) > 1)
     actionReset = QAction('Reset', None)
     menu.addAction(actionReset)
     actionReset.triggered.connect(lambda: activeNode.resetNodes(self.scene().selectedItems()))
     menu.exec_(event.screenPos())
コード例 #30
0
ファイル: main.py プロジェクト: juleaume/bug_reporter
 def _create_menu(self, event: QMouseEvent):
     context_menu = QMenu(self)
     context_menu.addAction("Toggle dark mode", self.set_dark_mode)
     context_menu.addAction("Toggle high contrast", self.set_high_contrast)
     context_menu.addAction("Generate report", self.save_report)
     context_menu.addAction("Send email to...", self.enter_address)
     if sys.platform == "win32":
         context_menu.addAction("Create shortcut", self.create_shortcut)
     context_menu.addAction("Quit Report", self.close)
     context_menu.exec_(self.mapToGlobal(event.pos()))
コード例 #31
0
ファイル: Header.py プロジェクト: bakhyeonjae/Sherlock
    def createHeaderMenus(self):
        for headInfo in self.headers:
            x = headInfo['x']
            x = x - self.position
            if self.currPosX > x and self.currPosX < x+self.w and self.currPosY > self.t and self.currPosY < self.h+self.t:
                if 0 == self.headers.index(headInfo):
                    break

                self.selectedHeader = headInfo
                menu = QMenu()
                if headInfo['flagCluster']:
                    menu.addAction(self.scatterAct)
                else:
                    menu.addAction(self.deleteAct)
                    menu.addAction(self.groupAct)
                menu.exec_(QtGui.QCursor.pos())
コード例 #32
0
ファイル: mytreeview.py プロジェクト: mahongquan/parts
 def contextMenuEvent(self, event):
     i=self.indexAt(event.pos())
     #print(self.indexAt(event.pos()))
     menu = QMenu(self)
     deleteAction = menu.addAction("删除")
     pasteAction = menu.addAction("粘贴")
     action = menu.exec_(self.mapToGlobal(event.pos()))
     if action == deleteAction:
         p=self.parent()
         while p!=None:
             oldp=p
             p=p.parent()
         oldp.treat_delete(self.model().filePath(i))
     elif action == pasteAction:
         p=self.parent()
         while p!=None:
             oldp=p
             p=p.parent()
         oldp.treat_paste(self.model().filePath(i))
コード例 #33
0
    def context_menu_event(self, event):
        state = self.state()
        context_menu = QMenu()
        launch_action = context_menu.addAction("Launch")
        launch_action.setEnabled(state == QWebEngineDownloadItem.DownloadCompleted)
        show_in_folder_action = context_menu.addAction("Show in Folder")
        show_in_folder_action.setEnabled(state == QWebEngineDownloadItem.DownloadCompleted)
        cancel_action = context_menu.addAction("Cancel")
        cancel_action.setEnabled(state == QWebEngineDownloadItem.DownloadInProgress)
        remove_action = context_menu.addAction("Remove")
        remove_action.setEnabled(state != QWebEngineDownloadItem.DownloadInProgress)

        chosen_action = context_menu.exec_(event.globalPos())
        if chosen_action == launch_action:
            self._launch()
        elif chosen_action == show_in_folder_action:
            DownloadWidget.open_file(QFileInfo(self._download_item.path()).absolutePath())
        elif chosen_action == cancel_action:
            self._download_item.cancel()
        elif chosen_action == remove_action:
            self.remove_requested.emit()