import typing, abc
from System.ComponentModel import INotifyPropertyChanged
from System.Collections.ObjectModel import ObservableCollection_1, ReadOnlyObservableCollection_1
from SIMULTAN.Projects import ProjectData
from System.Collections.Generic import Dictionary_2, List_1, IEnumerable_1
from SIMULTAN.Utils.Collections import ElectivelyObservableCollection_1, IReadonlyObservableDictionary_2
from System import ValueTuple_2, ValueTuple_3, MulticastDelegate, IAsyncResult, AsyncCallback, Exception, IEquatable_1
from System.IO import FileInfo, DirectoryInfo, FileSystemInfo
from SIMULTAN.Data.Users import SimUser, SimUserRole, SimUsersManager
from SIMULTAN.Data.Components import SimComponent, SimComponentVisibility
from System.Collections.Specialized import NotifyCollectionChangedEventArgs
from System.Reflection import MethodInfo, MethodBase
from SIMULTAN.Data.Taxonomy import SimTaxonomyEntryReferenceCollection
from System.Collections import IDictionary

class Asset(INotifyPropertyChanged, abc.ABC):
    @property
    def ContainedObjectId(self) -> str: ...
    @ContainedObjectId.setter
    def ContainedObjectId(self, value: str) -> str: ...
    @property
    def ReferencingComponentIds(self) -> ObservableCollection_1[int]: ...
    @property
    def Resource(self) -> ResourceEntry: ...
    @property
    def ResourceKey(self) -> int: ...
    @ResourceKey.setter
    def ResourceKey(self, value: int) -> int: ...
    def AddReferencing(self, _id: int) -> int: ...
    def GetAssetContent(self, _look_in_cache_first: bool) -> typing.Any: ...
    def IsBeingReferencedBy(self, _id: int) -> bool: ...
    def OpenAssetContent(self) -> typing.Any: ...
    def RemoveReferencing(self, _id: int) -> int: ...
    def ToString(self) -> str: ...


class AssetManager:
    def __init__(self, projectData: ProjectData) -> None: ...
    PATH_NOT_FOUND : str
    @property
    def Assets(self) -> Dictionary_2[int, ElectivelyObservableCollection_1[Asset]]: ...
    @Assets.setter
    def Assets(self, value: Dictionary_2[int, ElectivelyObservableCollection_1[Asset]]) -> Dictionary_2[int, ElectivelyObservableCollection_1[Asset]]: ...
    @property
    def MissingLinkedResources(self) -> List_1[LinkedResourceFileEntry]: ...
    @property
    def PathsToResourceFiles(self) -> PathsToLinkedResourcesCollection: ...
    @PathsToResourceFiles.setter
    def PathsToResourceFiles(self, value: PathsToLinkedResourcesCollection) -> PathsToLinkedResourcesCollection: ...
    @property
    def ProjectData(self) -> ProjectData: ...
    @property
    def Resources(self) -> ReadOnlyObservableCollection_1[ResourceEntry]: ...
    @property
    def WorkingDirectory(self) -> str: ...
    @WorkingDirectory.setter
    def WorkingDirectory(self, value: str) -> str: ...
    def CanCopyResourceEntry(self, _original: ResourceEntry, _target: ResourceDirectoryEntry, copyNameFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanLinkAsResource(self, _file: FileInfo) -> ResourceLocationError: ...
    def ContainedToLinked(self, _original: ContainedResourceFileEntry, _target: DirectoryInfo, copyNameFormat: str) -> LinkedResourceFileEntry: ...
    def CopyResourceAsContainedFileEntry(self, sourceFile: FileInfo, targetDir: DirectoryInfo, copyNameFormat: str) -> ValueTuple_2[int, FileInfo]: ...
    def CopyResourceEntry(self, _original: ResourceEntry, _target: ResourceDirectoryEntry, copyNameFormat: str, newOwner: SimUser = ...) -> ValueTuple_2[int, FileSystemInfo]: ...
    def CreateDocumentAsset(self, Component: SimComponent, file: ResourceFileEntry, _id_contained: str) -> DocumentAsset: ...
    def CreateGeometricAsset(self, componentId: int, resourceKey: int, geometryId: str) -> GeometricAsset: ...
    def CreateResourceDirIn(self, _name: str, _parent: DirectoryInfo, collisionNameFormat: str) -> ValueTuple_2[int, DirectoryInfo]: ...
    def DeleteResourceEntryAny(self, _to_delete: ResourceEntry) -> bool: ...
    def DeleteResourceEntryPossible(self, _to_delete: ResourceEntry) -> ValueTuple_2[bool, bool]: ...
    def DeleteResourceFileEntry(self, _current_full_path_to_resource: str, _name_of_resource: str) -> int: ...
    def GetAllLinkedFiles(self) -> List_1[FileInfo]: ...
    def GetAllResourceFiles(self, _extensions: IEnumerable_1[str], _contained: bool) -> List_1[FileInfo]: ...
    def GetFileExtension(self, _key: int, _with_dot: bool = ...) -> str: ...
    def GetFirstResourceWithTag(self, taxonomyKey: str, taxonomyEntryKey: str) -> ResourceFileEntry: ...
    def GetKey(self, _file_name: str) -> int: ...
    def GetPath(self, _key: int) -> str: ...
    def GetResourceKey(self, _file: FileInfo) -> int: ...
    def IsValidResourcePath(self, _fi: FileInfo, _is_contained: bool) -> bool: ...
    def LinkedToContained(self, _original: LinkedResourceFileEntry, nameFormat: str) -> ContainedResourceFileEntry: ...
    def OnChildResourceCollectionChanged(self, args: NotifyCollectionChangedEventArgs) -> None: ...
    def OnResourceRenamed(self, oldName: str, newName: str) -> None: ...
    def OnUpToDate(self) -> None: ...
    def ReLinkLinkedFileEntry(self, _resource: LinkedResourceFileEntry, _new_file: FileInfo, _allow_duplicates: bool = ...) -> bool: ...
    def RemoveAsset(self, _a: Asset) -> None: ...
    def Reset(self) -> None: ...
    def ResetLinks(self) -> None: ...
    def ResourceEntryDeltedExternally(self, _to_delete: ResourceEntry) -> bool: ...
    def ResourceFileEntryExists(self, file: FileInfo) -> bool: ...
    def RestoreDefaultTaxonomyReferences(self) -> None: ...
    def SynchronizeResources(self, _resource_files: IEnumerable_1[FileInfo], _resource_dirs: IEnumerable_1[DirectoryInfo], _create_missing: bool, _delete_superfluous: bool) -> ValueTuple_3[List_1[ResourceEntry], List_1[FileInfo], List_1[DirectoryInfo]]: ...
    def UnLinkLinkedFileEntry(self, _resource: LinkedResourceFileEntry) -> None: ...
    # Skipped AddResourceEntry due to it being static, abstract and generic.

    AddResourceEntry : AddResourceEntry_MethodGroup
    class AddResourceEntry_MethodGroup:
        @typing.overload
        def __call__(self, file: FileInfo) -> int:...
        @typing.overload
        def __call__(self, directory: ResourceDirectoryEntry) -> None:...
        @typing.overload
        def __call__(self, file: ResourceFileEntry, parent: ResourceDirectoryEntry) -> None:...

    # Skipped GetResource due to it being static, abstract and generic.

    GetResource : GetResource_MethodGroup
    class GetResource_MethodGroup:
        @typing.overload
        def __call__(self, _key: int) -> ResourceEntry:...
        @typing.overload
        def __call__(self, _dir: DirectoryInfo) -> ResourceDirectoryEntry:...
        @typing.overload
        def __call__(self, _file: FileInfo) -> ResourceFileEntry:...

    # Skipped LinkResourceAsLinkedFileEntry due to it being static, abstract and generic.

    LinkResourceAsLinkedFileEntry : LinkResourceAsLinkedFileEntry_MethodGroup
    class LinkResourceAsLinkedFileEntry_MethodGroup:
        @typing.overload
        def __call__(self, sourceFile: FileInfo, directory: ResourceDirectoryEntry) -> ResourceFileEntry:...
        @typing.overload
        def __call__(self, _source_file: FileInfo, _parent: DirectoryInfo, _allow_duplicates: bool = ...) -> ValueTuple_2[int, bool]:...


    class ChildResourceCollectionChangedEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, args: NotifyCollectionChangedEventArgs, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any, args: NotifyCollectionChangedEventArgs) -> None: ...


    class ResourceDeletedEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, entry: ResourceEntry, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any, entry: ResourceEntry) -> None: ...


    class ResourceRenamedEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, oldName: str, newName: str, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any, oldName: str, newName: str) -> None: ...


    class UpToDateEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any) -> None: ...



class AttemptedToAddInadmissibleEventHandler_GenericClasses(abc.ABCMeta):
    Generic_AttemptedToAddInadmissibleEventHandler_GenericClasses_AttemptedToAddInadmissibleEventHandler_1_T = typing.TypeVar('Generic_AttemptedToAddInadmissibleEventHandler_GenericClasses_AttemptedToAddInadmissibleEventHandler_1_T')
    def __getitem__(self, types : typing.Type[Generic_AttemptedToAddInadmissibleEventHandler_GenericClasses_AttemptedToAddInadmissibleEventHandler_1_T]) -> typing.Type[AttemptedToAddInadmissibleEventHandler_1[Generic_AttemptedToAddInadmissibleEventHandler_GenericClasses_AttemptedToAddInadmissibleEventHandler_1_T]]: ...

AttemptedToAddInadmissibleEventHandler : AttemptedToAddInadmissibleEventHandler_GenericClasses

AttemptedToAddInadmissibleEventHandler_1_T = typing.TypeVar('AttemptedToAddInadmissibleEventHandler_1_T')
class AttemptedToAddInadmissibleEventHandler_1(typing.Generic[AttemptedToAddInadmissibleEventHandler_1_T], MulticastDelegate):
    def __init__(self, object: typing.Any, method: int) -> None: ...
    @property
    def Method(self) -> MethodInfo: ...
    @property
    def Target(self) -> typing.Any: ...
    def BeginInvoke(self, sender: typing.Any, index: int, item: AttemptedToAddInadmissibleEventHandler_1_T, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
    def EndInvoke(self, result: IAsyncResult) -> None: ...
    def Invoke(self, sender: typing.Any, index: int, item: AttemptedToAddInadmissibleEventHandler_1_T) -> None: ...


class ContainedResourceFileEntry(ResourceFileEntry):
    @property
    def CanBeMoved(self) -> bool: ...
    @property
    def CanBeRenamed(self) -> bool: ...
    @property
    def CurrentFullPath(self) -> str: ...
    @CurrentFullPath.setter
    def CurrentFullPath(self, value: str) -> str: ...
    @property
    def CurrentRelativePath(self) -> str: ...
    @CurrentRelativePath.setter
    def CurrentRelativePath(self, value: str) -> str: ...
    @property
    def Exists(self) -> bool: ...
    @property
    def Extension(self) -> str: ...
    @property
    def FileIsNotReallyContained(self) -> bool: ...
    @FileIsNotReallyContained.setter
    def FileIsNotReallyContained(self, value: bool) -> bool: ...
    @property
    def IsMissing(self) -> bool: ...
    @IsMissing.setter
    def IsMissing(self, value: bool) -> bool: ...
    @property
    def Key(self) -> int: ...
    @property
    def Name(self) -> str: ...
    @Name.setter
    def Name(self, value: str) -> str: ...
    @property
    def NameWithoutExtension(self) -> str: ...
    @property
    def Parent(self) -> ResourceEntry: ...
    @Parent.setter
    def Parent(self, value: ResourceEntry) -> ResourceEntry: ...
    @property
    def Tags(self) -> SimTaxonomyEntryReferenceCollection: ...
    @property
    def UserWithWritingAccess(self) -> SimUserRole: ...
    @UserWithWritingAccess.setter
    def UserWithWritingAccess(self, value: SimUserRole) -> SimUserRole: ...
    @property
    def Visibility(self) -> SimComponentVisibility: ...
    @Visibility.setter
    def Visibility(self, value: SimComponentVisibility) -> SimComponentVisibility: ...
    def CanChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanChangePath(self, _new_data: FileSystemInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanReplacePath(self, _replacement_path: str) -> bool: ...
    def ChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...
    def ChangeName(self, _new_name: str, nameCollisionFormat: str) -> None: ...
    def ChangePath(self, _new_data: FileSystemInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...


class DefaultMachineHashGenerator(IMachineHashGenerator):
    def __init__(self) -> None: ...
    def GetMachineHash(self) -> str: ...
    def GetMachineName(self) -> str: ...
    def GetUserDomainName(self) -> str: ...
    def GetUserName(self) -> str: ...


class DocumentAsset(Asset):
    @property
    def ContainedObjectId(self) -> str: ...
    @ContainedObjectId.setter
    def ContainedObjectId(self, value: str) -> str: ...
    @property
    def ReferencingComponentIds(self) -> ObservableCollection_1[int]: ...
    @property
    def Resource(self) -> ResourceEntry: ...
    @property
    def ResourceKey(self) -> int: ...
    @ResourceKey.setter
    def ResourceKey(self, value: int) -> int: ...


class GeometricAsset(Asset):
    @property
    def ContainedObjectId(self) -> str: ...
    @ContainedObjectId.setter
    def ContainedObjectId(self, value: str) -> str: ...
    @property
    def ReferencingComponentIds(self) -> ObservableCollection_1[int]: ...
    @property
    def Resource(self) -> ResourceEntry: ...
    @property
    def ResourceKey(self) -> int: ...
    @ResourceKey.setter
    def ResourceKey(self, value: int) -> int: ...
    def OpenAssetContent(self) -> typing.Any: ...


class IMachineHashGenerator(typing.Protocol):
    @abc.abstractmethod
    def GetMachineHash(self) -> str: ...


class InvalidPathException(Exception):
    def __init__(self) -> None: ...
    @property
    def Data(self) -> IDictionary: ...
    @property
    def HelpLink(self) -> str: ...
    @HelpLink.setter
    def HelpLink(self, value: str) -> str: ...
    @property
    def HResult(self) -> int: ...
    @HResult.setter
    def HResult(self, value: int) -> int: ...
    @property
    def InnerException(self) -> Exception: ...
    @property
    def Message(self) -> str: ...
    @property
    def Source(self) -> str: ...
    @Source.setter
    def Source(self, value: str) -> str: ...
    @property
    def StackTrace(self) -> str: ...
    @property
    def TargetSite(self) -> MethodBase: ...


class LinkedResourceFileEntry(ResourceFileEntry):
    @property
    def CanBeMoved(self) -> bool: ...
    @property
    def CanBeRenamed(self) -> bool: ...
    @property
    def CurrentFullPath(self) -> str: ...
    @CurrentFullPath.setter
    def CurrentFullPath(self, value: str) -> str: ...
    @property
    def CurrentRelativePath(self) -> str: ...
    @CurrentRelativePath.setter
    def CurrentRelativePath(self, value: str) -> str: ...
    @property
    def Exists(self) -> bool: ...
    @property
    def Extension(self) -> str: ...
    @property
    def Key(self) -> int: ...
    @property
    def MoreThanOneValidPathDetected(self) -> bool: ...
    @MoreThanOneValidPathDetected.setter
    def MoreThanOneValidPathDetected(self, value: bool) -> bool: ...
    @property
    def Name(self) -> str: ...
    @Name.setter
    def Name(self, value: str) -> str: ...
    @property
    def NameWithoutExtension(self) -> str: ...
    @property
    def Parent(self) -> ResourceEntry: ...
    @Parent.setter
    def Parent(self, value: ResourceEntry) -> ResourceEntry: ...
    @property
    def Tags(self) -> SimTaxonomyEntryReferenceCollection: ...
    @property
    def UserWithWritingAccess(self) -> SimUserRole: ...
    @UserWithWritingAccess.setter
    def UserWithWritingAccess(self, value: SimUserRole) -> SimUserRole: ...
    @property
    def Visibility(self) -> SimComponentVisibility: ...
    @Visibility.setter
    def Visibility(self, value: SimComponentVisibility) -> SimComponentVisibility: ...
    def CanChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanReplacePath(self, _replacement_path: str) -> bool: ...
    def ChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...


class MultiLink(IEquatable_1[MultiLink]):
    def __init__(self, _full_path: str) -> None: ...
    @property
    def IsEmpty(self) -> bool: ...
    @IsEmpty.setter
    def IsEmpty(self, value: bool) -> bool: ...
    @property
    def Representations(self) -> IReadonlyObservableDictionary_2[str, str]: ...
    def AddRepresentation(self, _full_path: str) -> bool: ...
    def GetHashCode(self) -> int: ...
    def GetLink(self) -> str: ...
    def HasPath(self, _full_path: str) -> bool: ...
    def IsEquivalent(self, _other: MultiLink) -> bool: ...
    def __eq__(self, _mL1: MultiLink, _mL2: MultiLink) -> bool: ...
    def __ne__(self, _mL1: MultiLink, _mL2: MultiLink) -> bool: ...
    def RemoveRepresentation(self, _full_path: str) -> bool: ...
    # Skipped Equals due to it being static, abstract and generic.

    Equals : Equals_MethodGroup
    class Equals_MethodGroup:
        @typing.overload
        def __call__(self, _ml: MultiLink) -> bool:...
        @typing.overload
        def __call__(self, obj: typing.Any) -> bool:...



class MultiLinkManager:
    def __init__(self) -> None: ...
    @property
    def Links(self) -> ObservableCollection_1[MultiLink]: ...
    @Links.setter
    def Links(self, value: ObservableCollection_1[MultiLink]) -> ObservableCollection_1[MultiLink]: ...
    @property
    def SecondaryDataManager(self) -> AssetManager: ...
    @SecondaryDataManager.setter
    def SecondaryDataManager(self, value: AssetManager) -> AssetManager: ...
    @property
    def UserEncryptionUtiliy(self) -> SimUsersManager: ...
    @UserEncryptionUtiliy.setter
    def UserEncryptionUtiliy(self, value: SimUsersManager) -> SimUsersManager: ...
    def Clear(self) -> None: ...
    def GetLinksFromAssetManager(self) -> None: ...


class PathsToLinkedResourcesCollection(ElectivelyObservableCollection_1[str]):
    def __init__(self, forbiddenFolder: str) -> None: ...
    @property
    def Count(self) -> int: ...
    @property
    def ForbiddenFolder(self) -> str: ...
    @ForbiddenFolder.setter
    def ForbiddenFolder(self, value: str) -> str: ...
    @property
    def Item(self) -> str: ...
    @Item.setter
    def Item(self, value: str) -> str: ...
    @property
    def SuppressNotification(self) -> bool: ...
    @SuppressNotification.setter
    def SuppressNotification(self, value: bool) -> bool: ...


class ResourceDirectoryEntry(ResourceEntry):
    @property
    def CanBeMoved(self) -> bool: ...
    @property
    def CanBeRenamed(self) -> bool: ...
    @property
    def Children(self) -> ElectivelyObservableCollection_1[ResourceEntry]: ...
    @property
    def CurrentFullPath(self) -> str: ...
    @CurrentFullPath.setter
    def CurrentFullPath(self, value: str) -> str: ...
    @property
    def CurrentRelativePath(self) -> str: ...
    @CurrentRelativePath.setter
    def CurrentRelativePath(self, value: str) -> str: ...
    @property
    def Exists(self) -> bool: ...
    @property
    def Key(self) -> int: ...
    @property
    def Name(self) -> str: ...
    @Name.setter
    def Name(self, value: str) -> str: ...
    @property
    def Parent(self) -> ResourceEntry: ...
    @Parent.setter
    def Parent(self, value: ResourceEntry) -> ResourceEntry: ...
    @property
    def Tags(self) -> SimTaxonomyEntryReferenceCollection: ...
    @property
    def UserWithWritingAccess(self) -> SimUserRole: ...
    @UserWithWritingAccess.setter
    def UserWithWritingAccess(self, value: SimUserRole) -> SimUserRole: ...
    @property
    def Visibility(self) -> SimComponentVisibility: ...
    @Visibility.setter
    def Visibility(self, value: SimComponentVisibility) -> SimComponentVisibility: ...
    def CanChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanChangePath(self, _new_data: FileSystemInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanReplacePath(self, _replacement_path: str) -> bool: ...
    def ChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...
    def ChangeName(self, _new_name: str, nameCollisionFormat: str) -> None: ...
    def ChangePath(self, _new_data: FileSystemInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...
    def DeepestContainingEntry(self, _dir_of_new_entry: DirectoryInfo) -> ResourceDirectoryEntry: ...
    def GetContainedKeys(self) -> List_1[int]: ...
    def GetFlatContainedContent(self) -> Dictionary_2[int, FileSystemInfo]: ...
    def GetFlatLinks(self) -> List_1[FileInfo]: ...


class ResourceEntry(IEquatable_1[ResourceEntry], INotifyPropertyChanged, abc.ABC):
    @property
    def CanBeMoved(self) -> bool: ...
    @property
    def CanBeRenamed(self) -> bool: ...
    @property
    def CurrentFullPath(self) -> str: ...
    @CurrentFullPath.setter
    def CurrentFullPath(self, value: str) -> str: ...
    @property
    def CurrentRelativePath(self) -> str: ...
    @CurrentRelativePath.setter
    def CurrentRelativePath(self, value: str) -> str: ...
    @property
    def Exists(self) -> bool: ...
    @property
    def Key(self) -> int: ...
    @property
    def Name(self) -> str: ...
    @Name.setter
    def Name(self, value: str) -> str: ...
    @property
    def Parent(self) -> ResourceEntry: ...
    @Parent.setter
    def Parent(self, value: ResourceEntry) -> ResourceEntry: ...
    @property
    def Tags(self) -> SimTaxonomyEntryReferenceCollection: ...
    @property
    def UserWithWritingAccess(self) -> SimUserRole: ...
    @UserWithWritingAccess.setter
    def UserWithWritingAccess(self, value: SimUserRole) -> SimUserRole: ...
    @property
    def Visibility(self) -> SimComponentVisibility: ...
    @Visibility.setter
    def Visibility(self, value: SimComponentVisibility) -> SimComponentVisibility: ...
    def CanChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanChangePath(self, _new_data: FileSystemInfo, nameCollisionFormat: str) -> ValueTuple_2[bool, str]: ...
    def CanReplacePath(self, _replacement_path: str) -> bool: ...
    def ChangeLocation(self, _new_location: DirectoryInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...
    def ChangeName(self, _new_name: str, nameCollisionFormat: str) -> None: ...
    def ChangePath(self, _new_data: FileSystemInfo, nameCollisionFormat: str, _check_admissibility: bool) -> None: ...
    def GetHashCode(self) -> int: ...
    def __eq__(self, e1: ResourceEntry, e2: ResourceEntry) -> bool: ...
    def __ne__(self, e1: ResourceEntry, e2: ResourceEntry) -> bool: ...
    def RestoreDefaultTaxonomyReferences(self, projectData: ProjectData) -> None: ...
    def ToString(self) -> str: ...
    # Skipped Equals due to it being static, abstract and generic.

    Equals : Equals_MethodGroup
    class Equals_MethodGroup:
        @typing.overload
        def __call__(self, other: ResourceEntry) -> bool:...
        @typing.overload
        def __call__(self, obj: typing.Any) -> bool:...


    class ResourceChangedEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any) -> None: ...


    class ResourceEntryDeletedEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any) -> None: ...


    class ResourceEntryDeletingEventHandler(MulticastDelegate):
        def __init__(self, object: typing.Any, method: int) -> None: ...
        @property
        def Method(self) -> MethodInfo: ...
        @property
        def Target(self) -> typing.Any: ...
        def BeginInvoke(self, sender: typing.Any, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
        def EndInvoke(self, result: IAsyncResult) -> None: ...
        def Invoke(self, sender: typing.Any) -> None: ...



class ResourceFileEntry(ResourceEntry):
    @property
    def CanBeMoved(self) -> bool: ...
    @property
    def CanBeRenamed(self) -> bool: ...
    @property
    def CurrentFullPath(self) -> str: ...
    @CurrentFullPath.setter
    def CurrentFullPath(self, value: str) -> str: ...
    @property
    def CurrentRelativePath(self) -> str: ...
    @CurrentRelativePath.setter
    def CurrentRelativePath(self, value: str) -> str: ...
    @property
    def Exists(self) -> bool: ...
    @property
    def Extension(self) -> str: ...
    @property
    def Key(self) -> int: ...
    @property
    def Name(self) -> str: ...
    @Name.setter
    def Name(self, value: str) -> str: ...
    @property
    def NameWithoutExtension(self) -> str: ...
    @property
    def Parent(self) -> ResourceEntry: ...
    @Parent.setter
    def Parent(self, value: ResourceEntry) -> ResourceEntry: ...
    @property
    def Tags(self) -> SimTaxonomyEntryReferenceCollection: ...
    @property
    def UserWithWritingAccess(self) -> SimUserRole: ...
    @UserWithWritingAccess.setter
    def UserWithWritingAccess(self, value: SimUserRole) -> SimUserRole: ...
    @property
    def Visibility(self) -> SimComponentVisibility: ...
    @Visibility.setter
    def Visibility(self, value: SimComponentVisibility) -> SimComponentVisibility: ...


class ResourceLocationError(typing.SupportsInt):
    @typing.overload
    def __init__(self, value : int) -> None: ...
    @typing.overload
    def __init__(self, value : int, force_if_true: bool) -> None: ...
    def __int__(self) -> int: ...
    
    # Values:
    OK : ResourceLocationError # 0
    CONTAINED_NOT_IN_WORKING_DIR : ResourceLocationError # 1
    LINKED_IN_WORKING_DIR : ResourceLocationError # 2
    LINKED_NOT_IN_FALLBACKS : ResourceLocationError # 4
    RESOURCE_IN_UNFAMILIAR_DIR : ResourceLocationError # 8
    RESOURCE_NOT_FOUND : ResourceLocationError # 16
    RESOURCE_CANNOT_BE_LOOKED_FOR : ResourceLocationError # 32

