/// <reference path="../../pxtlib.d.ts" />
import * as Blockly from "blockly";
import svg = pxt.svgUtil;
import { FieldCustom, FieldCustomOptions } from "./field_utils";
import { FieldMatrix } from "./field_matrix";
export declare const HEADER_HEIGHT = 50;
export declare const TOTAL_WIDTH = 300;
export declare class FieldCustomMelody<U extends FieldCustomOptions> extends FieldMatrix implements FieldCustom {
    isFieldCustom_: boolean;
    SERIALIZABLE: boolean;
    protected params: U;
    private melody;
    private soundingKeys;
    protected numMatrixRows: number;
    protected numMatrixCols: number;
    private tempo;
    private stringRep;
    private isPlaying;
    private timeouts;
    private invalidString;
    private prevString;
    private topDiv;
    private editorDiv;
    private gridDiv;
    private bottomDiv;
    private doneButton;
    private playButton;
    private playIcon;
    private tempoInput;
    private firstFocusableElement;
    private lastFocusableElement;
    private static CELL_WIDTH;
    private static CELL_HORIZONTAL_MARGIN;
    private static CELL_VERTICAL_MARGIN;
    private static CELL_CORNER_RADIUS;
    private static VIEWBOX_WIDTH;
    private static VIEWBOX_HEIGHT;
    private static COLOR_BLOCK_WIDTH;
    private static COLOR_BLOCK_HEIGHT;
    private static COLOR_BLOCK_X;
    private static COLOR_BLOCK_Y;
    private static COLOR_BLOCK_SPACING;
    private static MUSIC_ICON_WIDTH;
    private toggle;
    private root;
    private gallery;
    protected clearSelectionOnBlur: boolean;
    private matrixFocusBind;
    private tabKeyBind;
    constructor(value: string, params: U, validator?: Blockly.FieldValidator);
    init(): void;
    showEditor_(e?: Event): void;
    getValue(): string;
    doValueUpdate_(newValue: string): void;
    getText_(): string;
    getFieldDescription(): string;
    protected onInit(): void;
    render_(): void;
    protected renderEditor(div: HTMLDivElement): void;
    protected onEditorClose(): void;
    private onDone;
    private clearDomReferences;
    protected getTypeScriptValue(): string;
    protected parseTypeScriptValue(value: string): void;
    private isValidNote;
    protected getPreviewWidth(): number;
    protected getPreviewHeight(): number;
    protected getDropdownBackgroundColour(): string;
    protected getDropdownBorderColour(): string;
    private updateFieldLabel;
    private setTempo;
    private syncTempoField;
    private getDuration;
    private createMelodyIfDoesntExist;
    protected toggleCell(column: number, row: number): void;
    protected getCellToggled(column: number, row: number): boolean;
    protected useTwoToneFocusIndicator(_x: number, _y: number): boolean;
    private updateGrid;
    private playNote;
    protected queueToneForColumn(column: number, delay: number, duration: number): void;
    protected playToneCore(row: number): void;
    private highlightColumn;
    private createGridDisplay;
    private handleMatrixFocus;
    private handleTabKey;
    protected attachPointerEventHandlersToCell(x: number, y: number, cellRect: SVGElement): void;
    protected handleArrowUp(x: number, y: number): void;
    protected handleArrowDown(x: number, y: number): void;
    protected handleArrowLeft(x: number, y: number): void;
    protected handleArrowRight(x: number, y: number): void;
    private getMelodyNote;
    private togglePlay;
    private updatePlayButton;
    private playMelody;
    private stopMelody;
    private showGallery;
    private hideGallery;
    isFullBlockField(): boolean;
}
export interface ButtonGroup {
    root: svg.Group;
    cx: number;
    cy: number;
}
