# mypy: disable-error-code="misc, override, attr-defined, no-redef, assignment"

import PyFCurve as PyFCurve
import PyQt5.QtCore
import PyQt5.QtWidgets
import PyQt5.QtCore as QtCore
import PyQt5.QtGui as QtGui
import PyQt5.QtWidgets as QtWidgets
from QTFCurve.MixedGroupState import MixedGroupState as MixedGroupState
from QTFCurve.UniqueListDict import UniqueListDict as UniqueListDict
from _typeshed import Incomplete
from typing import ClassVar, Set, Tuple

class FCurveListView(PyQt5.QtWidgets.QTreeWidget):
    class _FCurveContainerObserver(PyFCurve.ContainerObserver):
        def __init__(self, listView, selection) -> None: ...
        def addCurve(self, curve): ...
        def containerChanged(self, container): ...
        def removeCurve(self, curve): ...

    class _FCurveItem(PyQt5.QtWidgets.QTreeWidgetItem):
        class _FCurveGroupItem(PyQt5.QtWidgets.QTreeWidgetItem):
            def __init__(self, parent, name) -> None: ...
            def clicked(self, col, fromMixed: bool = ...): ...
            def getCurve(self): ...
            def isGroup(self): ...
            def propagateState(self, toVis, toLocked, fromVis, fromLocked): ...
        def __init__(self, parent, curve) -> None: ...
        def _FCurveItem__createGroupItem(self, parent, curveGroups): ...
        def clicked(self, col, fromMixed: bool = ...): ...
        def getCurve(self): ...
        def isGroup(self): ...
        def propagateRemoval(self): ...
        def refreshAllProperties(self, oldHidden, oldLocked): ...

    class _FCurveListViewObserver(PyFCurve.FCurveObserver):
        def __init__(self, listView, selection) -> None: ...
        def curvePropertyChanged(self, fc, key, value): ...
    unloadCurve: ClassVar[PyQt5.QtCore.pyqtSignal] = ...
    def __init__(self, container, selection, parent: Incomplete | None = ...) -> None: ...
    def _FCurveListView__colClicked(self, item, col): ...
    def _FCurveListView__updateSelection(self): ...
    def addCustomColumn(self, name, default, valuelist: list = ...): ...
    def child(self, index): ...
    def childCount(self): ...
    def createCurve(self): ...
    def customColumnNames(self) -> list[str]: ...
    def keyPressEvent(self, e): ...
    def mouseDoubleClickEvent(self, e): ...
    def mousePressEvent(self, e): ...
    def removeCurves(self, removeSelection: bool = ...): ...
    def renameCurve(self): ...
