import enum
from .action import QAction as QAction
from .layout import MARGIN_LARGE as MARGIN_LARGE, MARGIN_MEDIUM as MARGIN_MEDIUM, MARGIN_SMALL as MARGIN_SMALL, PADDING_SMALL as PADDING_SMALL, QHBox as QHBox, SPACING_LARGE as SPACING_LARGE, SPACING_SMALL as SPACING_SMALL
from .qt import Property as Property, QAbstractItemView as QAbstractItemView, QColor as QColor, QIcon as QIcon, QKeyEvent as QKeyEvent, QKeySequence as QKeySequence, QListWidget as QListWidget, QListWidgetItem as QListWidgetItem, QMargins as QMargins, QModelIndex as QModelIndex, QMouseEvent as QMouseEvent, QPainter as QPainter, QPen as QPen, QPixmap as QPixmap, QPoint as QPoint, QRectF as QRectF, QSize as QSize, QStyle as QStyle, QStyleOptionViewItem as QStyleOptionViewItem, QSvgRenderer as QSvgRenderer, QTimer as QTimer, QWidget as QWidget, Qt as Qt, Signal as Signal
from .utils import currentScreenGeometry as currentScreenGeometry, singledispatchmethod as singledispatchmethod
from _typeshed import Incomplete
from qtpy import QtWidgets
from typing import Callable

DEFAULT_SECTION: str

class MenuItemRole(enum.IntEnum):
    Type = ...
    Action = ...
    Menu = ...

class MenuItemType(enum.StrEnum):
    Separator = 'separator'
    Action = 'action'
    SubMenu = 'submenu'

class MenuItemDelegate(QtWidgets.QStyledItemDelegate):
    def __init__(self, parent=None) -> None: ...
    def isSeparator(self, index: QModelIndex): ...
    def paint(self, painter: QPainter, option: QStyleOptionViewItem, index: QModelIndex): ...

class ShortcutMenuItemDelegate(MenuItemDelegate):
    def paint(self, painter: QPainter, option: QStyleOptionViewItem, index: QModelIndex): ...

class SubMenuItemWidget(QWidget):
    showMenuRequested: Incomplete
    menu: QRoundMenu
    item: QListWidgetItem
    def __init__(self, menu, item, parent=None) -> None: ...
    def enterEvent(self, e) -> None: ...
    def paintEvent(self, e) -> None: ...
    def showSubMenu(self) -> None: ...

class CheckIndicatorMenuItemDelegate(ShortcutMenuItemDelegate):
    def __init__(self, parent=None) -> None: ...
    def paint(self, painter: QPainter, option: QStyleOptionViewItem, index: QModelIndex): ...

class MenuActionListWidget(QListWidget):
    def __init__(self, parent: QRoundMenu) -> None: ...
    def keyPressEvent(self, event: QKeyEvent): ...
    def adjustSize(self) -> None: ...
    def setItemHeight(self, itemHeight: int, separatorHeight: int): ...
    def setMaxVisibleItems(self, num: int): ...
    def maxVisibleItems(self): ...
    def getSeparatorColor(self) -> QColor: ...
    def setSeparatorColor(self, color: QColor): ...
    def getShortcutTextColorEnabled(self) -> QColor: ...
    def setShortcutTextColorEnabled(self, color: QColor): ...
    def getShortcutTextColorDisabled(self) -> QColor: ...
    def setShortcutTextColorDisabled(self, color: QColor): ...
    separatorColor: Incomplete
    shortcutTextColorEnabled: Incomplete
    shortcutTextColorDisabled: Incomplete

class QRoundMenu(QtWidgets.QMenu):
    closed: Incomplete
    visiblePredicate: Incomplete
    enabledPredicate: Incomplete
    def __init__(self, name: str, title: str = '', visiblePredicate: Callable[[QAction], bool] | None = None, enabledPredicate: Callable[[QAction], bool] | None = None, menuBar: bool = False) -> None: ...
    def paintEvent(self, e) -> None: ...
    def hideEvent(self, e) -> None: ...
    def closeEvent(self, e) -> None: ...
    def show(self, pos: QPoint): ...
    def exec(self, pos: QPoint): ...
    def exec_(self, pos: QPoint): ...
    def popup(self, pos: QPoint): ...
    def mouseMoveEvent(self, e: QMouseEvent): ...
    def mousePressEvent(self, e: QMouseEvent): ...
    def sections(self) -> list[str]: ...
    def addSection(self, section: str): ...
    def addSections(self, sections: list[str]): ...
    def insertSection(self, before: str, section: str): ...
    def setCheckStateVisible(self, vis: bool): ...
    def addAction(self, action: QAction, section: str = ...): ...
    def addActions(self, actions: list[QAction], section: str = ...): ...
    def insertAction(self, before: QAction, action: QAction, section: str = ...): ...
    def insertActions(self, before, actions) -> None: ...
    def setDefaultAction(self, action: QAction): ...
    def addMenu(self, menu: QRoundMenu, section: str = ...) -> QAction: ...
    def addSeparator(self) -> None: ...
    def clear(self) -> None: ...
    def removeAction(self, action) -> None: ...
    def adjustSize(self) -> None: ...
    def adjustPosition(self, pos: QPoint): ...
    def setMaxVisibleItems(self, num: int): ...
    def maxVisibleItems(self) -> int: ...
    def width(self): ...
    def height(self): ...
    def minimumSize(self) -> QSize: ...
    def minimumWidth(self): ...
    def minimumHeight(self): ...
    def maximumSize(self) -> QSize: ...
    def maximumWidth(self): ...
    def maximumHeight(self): ...
    def setMinimumWidth(self, minw) -> None: ...
    def setMinimumHeight(self, minh) -> None: ...
    def setMaximumWidth(self, maxw) -> None: ...
    def setMaximumHeight(self, maxh) -> None: ...
