declare class DzScene extends DzBase {

    /* Properties */
    DefaultMethod: number;
    OpenNew: number;
    MergeFile: number;
    DzObjectsOnly: number;
    DzIncludeLightsFlag: number;
    DzIncludeCamerasFlag: number;
    DzIncludeNonShadowersFlag: number;
    DzIncludeNonVisibleFlag: number;
    DzIncludeAllFlag: number;

    /* Methods */
    drawnDataChanged(): void;
    nodeSelectionListChanged(): void;
    skeletonSelectionListChanged(): void;
    lightSelectionListChanged(): void;
    cameraSelectionListChanged(): void;
    primarySelectionChanged(node: DzNode): void;
    highlightNodeChanged(node: DzNode): void;
    sceneClearStarting(): void;
    sceneCleared(): void;
    sceneLoadStarting(): void;
    sceneLoaded(): void;
    sceneFilenameChanged(newName: QString): void;
    timeChanging(newTime: DzTime): void;
    currentTimeChanged(oldTime: DzTime, newTime: DzTime): any; // TODO ;
    timeStepChanged(time: DzTime): void;
    playRangeChanged(range: DzTimeRange): void;
    animRangeChanged(range: DzTimeRange): void;
    timeSelectionChanged(): void;
    nodeAdded(node: DzNode): void;
    aboutToRemoveNode(node: DzNode): void;
    nodeRemoved(node: DzNode): void;
    nodeListChanged(): void;
    skeletonAdded(node: DzSkeleton): void;
    skeletonRemoved(node: DzSkeleton): void;
    skeletonListChanged(): void;
    lightAdded(node: DzLight): void;
    lightRemoved(node: DzLight): void;
    lightListChanged(): void;
    cameraAdded(node: DzCamera): void;
    cameraRemoved(node: DzCamera): void;
    cameraListChanged(): void;
    wsModifierAdded(modifier: DzWSModifier): void;
    wsModifierRemoved(modifier: DzWSModifier): void;
    wsModifierStackChanged(): void;
    playbackStarted(): void;
    playbackFinished(): void;
    loopPlaybackChanged(onOff: boolean): void;
    aboutToRender(r: DzRenderer): void;
    renderFinished(r: DzRenderer): void;
    materialListChanged(): void;
    materialSelectionChanged(): void;
    sceneSaveStarting(filename: QString): void;
    sceneSaved(filename: QString): void;
    assetModified(): void;
    assetWasSaved(): void;
    sceneTopologyChanged(): any; // TODO ;
    backdropChanged(): any; // TODO ;
    clear(): void;
    isClearing(): boolean;
    isLoading(): boolean;
    isDAZLoading(): boolean;
    setBackdrop(backdrop: DzBackdrop): void;
    setAudio(audio: DzAudioClip, startFrame: number): void;
    setAudio(audio: DzAudioClip, startFrame: number): void;
    addNode(node: DzNode): boolean;
    removeNode(node: DzNode): boolean;
    removeSelected(): void;
    removeAllLights(): void;
    removeAllCameras(): void;
    addWSModifier(modifier: DzWSModifier, index: number): DzError;
    addWSModifier(modifier: DzWSModifier, index: number): DzError;
    removeWSModifier(modifier: DzWSModifier): DzError;
    addDataItem(item: DzSceneData): DzError;
    removeDataItem(item: DzSceneData): DzError;
    update(): void;
    markChanged(): void;
    saveScene(filename: QString): DzError;
    saveScene(filename: QString): DzError;
    loadScene(filename: QString, method: DzOpenMethod): DzError;
    saveThumbnail(filename: QString): void;
    selectAllNodes(onOff: boolean): void;
    selectAllSkeletons(onOff: boolean): void;
    setPrimarySelection(node: DzNode): boolean;
    setHighlightNode(node: DzNode): void;
    beginTimeEdit(): void;
    finishTimeEdit(): void;
    setTime(time: DzTime | number): void;
    setFrame(frame: number): void;
    stepTime(nFrames: number, forward: boolean): void;
    stepTime(nFrames: number, forward: boolean): void;
    stepTime(nFrames: number, forward: boolean): void;
    setTimeStep(time: DzTime | number): void;
    setPlayRange(range: DzTimeRange): void;
    setAnimRange(range: DzTimeRange): void;
    play(realtime: boolean): void;
    play(realtime: boolean): void;
    pause(): void;
    loopPlayback(onOff: boolean): void;
    selectAllTime(onOff: boolean): void;
    invalidate(): void;
    getNumStorablesInScene(): number;
    setAssetLoadPath(absolutePath: QString): void;
    getAssetLoadPath(saveToCur?: boolean): QString;

    setPreviewLights(onoff: boolean): void;
    getPreviewLights(): boolean;
    invalidateLightSorting(): any; // TODO ;
    needsSave(): boolean;
    getBackdrop(): DzBackdrop;
    getBoundingBox(flags: number): DzBox3;
    getBoundingBox(flags: number): DzBox3;
    getAudio(): DzAudioClip;
    getAudioStartFrame(): number;
    getFilename(savedTo?: boolean): String;
    getNumNodes(): number;
    getNumSkeletons(): number;
    getNumLights(): number;
    getNumCameras(): number;
    getNumWSModifiers(): number;
    getNode(which: number): DzNode;
    getNodeList(): DzNode[];
    getSkeleton(which: number): DzSkeleton;
    getSkeletonList(): QObject[];
    getLight(which: number): DzLight;
    getLightList(): DzLight[];
    getCamera(which: number): DzCamera;
    getCameraList(): DzCamera[];
    getWSModifier(which: number): DzWSModifier;
    getWSModifierList(): QObject[];
    findNode(name: QString): DzNode;
    findNodeByLabel(label: QString): DzNode;
    findSkeleton(name: QString): DzSkeleton;
    findSkeletonByLabel(label: QString): DzSkeleton;
    findCamera(name: QString): DzCamera;
    findCameraByLabel(label: QString): DzCamera;
    findLight(name: QString): DzLight;
    findLightByLabel(label: QString): DzLight;
    findNodeIndex(node: DzNode): number;
    findSkeletonIndex(skelton: DzSkeleton): number;
    findDataItem(name: QString): DzSceneData;
    getPrimarySelection(): DzNode;
    getNumSelectedNodes(): number;
    getSelectedNode(index: number): DzNode;
    getSelectedNodeList(): DzNode[];
    getNumSelectedSkeletons(): number;
    getSelectedSkeleton(index: number): DzSkeleton;
    getSelectedSkeletonList(): QObject[];
    getNumSelectedLights(): number;
    getSelectedLight(index: number): DzLight;
    getSelectedLightList(): QObject[];
    getNumSelectedCameras(): number;
    getSelectedCamera(index: number): DzCamera;
    getSelectedCameraList(): QObject[];
    getHighlightNode(): DzNode;
    getSortedLightList(): any; // TODO ;
    getTime(): DzTime;
    getFrame(): number;
    getTimeStep(): DzTime;
    isPlaying(): boolean;
    isLoopingEnabled(): boolean;
    getPlayRange(): DzTimeRange;
    getAnimRange(): DzTimeRange;
    getNumSelectedTimeRanges(): number;
    getNumDataItems(): number;
    getDataItem(i: number): DzSceneData;
    getDataItemList(): any; // TODO ;
    getUniqueTopLevelLabel(label: QString, node: DzNode): QString;
    getUniqueTopLevelLabel(label: QString, node: DzNode): QString;
    stripLabelnumber(label: QString): QString;
    clearDebugPoints(): any; // TODO ;
    setDebugPoints(): any; // TODO ;
    setDebugPoints(): any; // TODO ;

    /**
     * The node with the matching element id (if any), otherwise NULL.
     */
    findNodeByElementID(id: number): DzElement;

    findObjectByElementID(): any; // TODO ;
    findShapeByElementID(): any; // TODO ;
    findModifierByElementID(): any; // TODO ;
    findMaterialByElementID(): any; // TODO ;

    // Signals
    //timeChanged(time: DzTime): void;
    timeChanged: ISignal;
}