import { JsonBasedObject, Nullable } from '../core/json-object.class';
import { Profiles } from '../core/profiles.class';
import { SmartList } from './smart-list.class';
import { SmartListSimple } from './smart-list-simple.class';
type Constructor<T> = {
    new (...args: any[]): T;
    getFileName(): string;
};
type Action = () => void;
/** @internal Called once at startup to register SmartListSimple without a circular import */
export declare function setSmartListSimpleClass(cls: Constructor<any>): void;
declare class CallbacksHolder {
    paramName: string;
    callback: Action;
    constructor(paramName: string, callback: Action);
}
export declare class BaseData extends JsonBasedObject {
    private _children;
    protected _callbacks: CallbacksHolder[];
    private _wildcardCallbacks;
    private _profiles;
    protected getBaseDataParam<T extends BaseData>(modelClass: Constructor<T>, paramName: string): T;
    getUniqueIndex(): any;
    protected getListBaseDataParam<T extends BaseData>(modelClass: Constructor<T>, paramName: string): BaseData;
    protected getListSimpleParam<T extends number | string | boolean>(paramName: string, typeKey: 'Int' | 'Float' | 'String' | 'Long' | 'Bool'): SmartListSimple<T>;
    protected onNewObjectAppeared<T extends JsonBasedObject>(obj: T, childName?: string): void;
    setProfiles(profiles: Profiles): void;
    protected initAndSubscribeForParamChange(paramName: string, callback: () => void): void;
    subscribeForParamChange(paramName: string, callback: Action): void;
    unsubscribeFromParamChange(paramName: string, callback: Action): void;
    /**
     * Subscribe to changes of any parameter on this object and all its children recursively.
     * The callback receives the full path of the changed parameter relative to this object
     * (e.g. "generalInfo.level" when subscribed on the profile).
     */
    subscribeForChanges(callback: (paramName: string) => void): void;
    /**
     * Unsubscribe from changes of any parameter on this object and all its children recursively.
     */
    unsubscribeFromChanges(callback: (paramName: string) => void): void;
    cleanUp(parentWasDestroyed: boolean): void;
    /** @deprecated Use unsubscribeFromParamChange instead */
    unsubscribeForParamChange(paramName: string, callback: Action): void;
    onParamChanged(paramName: string): void;
    onDestroyed(): void;
    protected setIntParam(paramName: string, value: number): void;
    protected setLongParam(paramName: string, value: number): void;
    protected setFloatParam(paramName: string, value: number): void;
    protected setDoubleParam(paramName: string, value: number): void;
    protected setBoolParam(paramName: string, value: boolean): void;
    protected setStringParam(paramName: string, value: string): void;
    static getFileName(): string;
    protected static findElementInList<T extends BaseData>(list: SmartList<T>, ptr: number): Nullable<T>;
}
export {};
//# sourceMappingURL=base-data.class.d.ts.map