import { GraphicalLine } from "./GraphicalLine";
import { StaffLine } from "./StaffLine";
import { GraphicalMeasure } from "./GraphicalMeasure";
import { ContinuousDynamicExpression } from "../VoiceData/Expressions/ContinuousExpressions/ContinuousDynamicExpression";
import { AbstractGraphicalExpression } from "./AbstractGraphicalExpression";
import { ISqueezable } from "./ISqueezable";
import { SourceMeasure } from "../VoiceData/SourceMeasure";
/**
 * This class prepares the graphical elements for a continuous expression. It calculates the wedges and
 * wrappings if they are split over system breaks.
 */
export declare class GraphicalContinuousDynamicExpression extends AbstractGraphicalExpression implements ISqueezable {
    /** True if expression is split over system borders */
    private isSplittedPart;
    /** True if this expression should not be removed if re-rendered */
    private notToBeRemoved;
    /** Holds the line objects that can be drawn via implementation */
    private lines;
    private startMeasure;
    private endMeasure;
    IsSoftAccent: boolean;
    /**
     * Create a new instance of the GraphicalContinuousDynamicExpression
     * @param continuousDynamic The continuous dynamic instruction read via ExpressionReader
     * @param staffLine The staffline where the expression is attached
     */
    constructor(continuousDynamic: ContinuousDynamicExpression, staffLine: StaffLine, measure: SourceMeasure);
    /** The graphical measure where the parent continuous dynamic expression starts */
    get StartMeasure(): GraphicalMeasure;
    set StartMeasure(value: GraphicalMeasure);
    /** The graphical measure where the parent continuous dynamic expression ends */
    get EndMeasure(): GraphicalMeasure;
    set EndMeasure(value: GraphicalMeasure);
    /** The staff lin where the graphical dynamic expressions ends */
    get EndStaffLine(): StaffLine;
    /**  Is true if this continuous expression is a wedge, that reaches over a system border and needs to be split into two. */
    get IsSplittedPart(): boolean;
    set IsSplittedPart(value: boolean);
    /**  Is true if the dynamic is not a symbol but a text instruction. E.g. "decrescendo" */
    get IsVerbal(): boolean;
    /** True if this expression should not be removed if re-rendered */
    get NotToBeRemoved(): boolean;
    set NotToBeRemoved(value: boolean);
    /** Holds the line objects that can be drawn via implementation */
    get Lines(): GraphicalLine[];
    get ContinuousDynamic(): ContinuousDynamicExpression;
    updateSkyBottomLine(): void;
    /**
     * Calculate crescendo lines for (full).
     * @param startX left most starting point
     * @param endX right mist ending point
     * @param y y placement
     * @param wedgeOpeningLength length of the opening
     * @param wedgeLineWidth line width of the wedge
     */
    createCrescendoLines(startX: number, endX: number, y: number, wedgeOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * Calculate crescendo lines for system break (first part).
     * @param startX left most starting point
     * @param endX right mist ending point
     * @param y y placement
     * @param wedgeMeasureEndOpeningLength length of opening at measure end
     * @param wedgeOpeningLength length of the opening
     * @param wedgeLineWidth line width of the wedge
     */
    createFirstHalfCrescendoLines(startX: number, endX: number, y: number, wedgeMeasureEndOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * Calculate crescendo lines for system break (second part).
     * @param startX left most starting point
     * @param endX right mist ending point
     * @param y y placement
     * @param wedgeMeasureBeginOpeningLength length of opening at measure start
     * @param wedgeOpeningLength length of the opening
     * @param wedgeLineWidth line width of the wedge
     */
    createSecondHalfCrescendoLines(startX: number, endX: number, y: number, wedgeMeasureBeginOpeningLength?: number, wedgeOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * This method recalculates the Crescendo Lines (for all cases).
     * @param startX left most starting point
     * @param endX right most ending point
     * @param y y placement
     */
    recalculateCrescendoLines(startX: number, endX: number, y: number): void;
    /**
     * Calculate diminuendo lines for system break (full).
     * @param startX left most starting point
     * @param endX right mist ending point
     * @param y y placement
     * @param wedgeOpeningLength length of the opening
     * @param wedgeLineWidth line width of the wedge
     */
    createDiminuendoLines(startX: number, endX: number, y: number, wedgeOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * Calculate diminuendo lines for system break (first part).
     * @param startX left most starting point
     * @param endX right mist ending point
     * @param y y placement
     * @param wedgeOpeningLength length of the opening
     * @param wedgeMeasureEndOpeningLength length of opening at measure end
     * @param wedgeLineWidth line width of the wedge
     */
    createFirstHalfDiminuendoLines(startX: number, endX: number, y: number, wedgeOpeningLength?: number, wedgeMeasureEndOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * Calculate diminuendo lines for system break (second part).
     * @param startX left most starting point
     * @param endX right mist ending point
     * @param y y placement
     * @param wedgeMeasureBeginOpeningLength length of opening at measure start
     * @param wedgeLineWidth line width of the wedge
     */
    createSecondHalfDiminuendoLines(startX: number, endX: number, y: number, wedgeMeasureBeginOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * This method recalculates the diminuendo lines (for all cases).
     * @param startX left most starting point
     * @param endX right most ending point
     * @param y y placement
     */
    recalculateDiminuendoLines(startX: number, endX: number, yPosition: number): void;
    /** Wrapper for createFirstHalfCrescendoLines and createFirstHalfDiminuendoLines.
     * Checks whether `this` is crescendo or diminuendo, helps avoid code duplication.
     */
    createFirstHalfLines(startX: number, endX: number, y: number, wedgeOpeningLength?: number, wedgeMeasureEndOpeningLength?: number, wedgeLineWidth?: number): void;
    /** Wrapper for createSecondHalfCrescendoLines and createSecondHalfDiminuendoLines, see createFirstHalfLines. */
    createSecondHalfLines(startX: number, endX: number, y: number, wedgeMeasureBeginOpeningLength?: number, wedgeOpeningLength?: number, wedgeLineWidth?: number): void;
    /** Wrapper for createCrescendoLines and createDiminuendoLines, see createFirstHalfLines. */
    createLines(startX: number, endX: number, y: number, wedgeOpeningLength?: number, wedgeLineWidth?: number): void;
    /**
     * Calculate the BoundingBox (as a box around the Wedge).
     */
    calcPsi(): void;
    /**
     * Clear Lines
     */
    cleanUp(): void;
    /**
     * Shift wedge in y position
     * @param shift Number to shift
     */
    shiftYPosition(shift: number): void;
    squeeze(value: number): void;
    /**
     * Create lines from points and add them to the memory
     * @param wedgePoint start of the expression
     * @param upperWedgeEnd end of the upper line
     * @param lowerWedgeEnd end of lower line
     * @param wedgeLineWidth line width
     */
    private addWedgeLines;
    /**
     * Create top and bottom lines for continuing wedges
     * @param upperLineStart start of the upper line
     * @param upperLineEnd end of the upper line
     * @param lowerLineStart start of the lower line
     * @param lowerLineEnd end of lower line
     * @param wedgeLineWidth line width
     */
    private addDoubleLines;
}
