package příklady;

import rup.česky.tvary.Barva;
import rup.česky.tvary.Kreslítko;

import rup.česky.tvary.Obdélník;
import rup.česky.tvary.Čára;


/*******************************************************************************
 * Třída XObdélník_9 slouží k ...
 *
 * @author    Rudolf Pecinovský
 * @version   0.00.000,  0.0.2003
 */
public class XObdélník_9 extends Obdélník
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    private Čára hlavní;    //Hlavní diagonála
    private Čára vedlejší;  //Vedlejší diagonála



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří novou instanci s implicitními rozměry, umístěním a barvou.
     * Instance bude mít střed na průsečíku hran prvního a druhého pole
     * a bude mít výšku 1 pole a šířku 2 pole.
     */
    public XObdélník_9()
    {
        this( AP.getKrok(), AP.getKrok(), 2*AP.getKrok(), AP.getKrok() );
    }


    /***************************************************************************
     * Vytvoří novou instanci se zadanou polohou a rozměry
     * a implicitní barvou.
     *
     * @param x      x-ová souřadnice instance, x>=0, x=0 má levý okraj plátna
     * @param y      y-ová souřadnice instance, y>=0, y=0 má horní okraj plátna
     * @param šířka   Šířka vytvářené instance,  šířka > 0
     * @param výška   Výška vytvářené instance,  výška > 0
     */
    public XObdélník_9(int x, int y, int šířka, int výška)
    {
        this( x, y, šířka, výška, Barva.ČERVENÁ );
    }


    /***************************************************************************
     * Implicitní konstruktor třídy Třída
     */
    public XObdélník_9(int x, int y, int šířka, int výška, Barva barva)
    {
        super( x-šířka/2, y-výška/2, šířka, výška, barva );
        //Pomocné proměnné mohu bohužel definovat až nyní,
        //protože před voláním rodičovského kontruktoru nesmí být nic
        int x0 = x - šířka/2;
        int y0 = y - výška/2;
        hlavní   = new Čára( x0, y0,       x0+šířka, y0+výška );
        vedlejší = new Čára( x0, y0+výška, x0+šířka, y0       );
    }



//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    public int getX()
    {
        return super.getX() + getŠířka()/2;
    }


    public int getY()
    {
        return super.getY() + getVýška()/2;
    }


    public void setPozice( int x, int y )
    {
        int s2 = getŠířka() / 2;
        int v2 = getVýška() / 2;
        AP.nekresli();
            super.setPozice( x-s2, y-v2 );
            hlavní.setPozice( x-s2, y-v2 );
            vedlejší.setPozice( x-s2, y+v2 );
        AP.vraťKresli();
    }


    public void setRozměr( int šířka, int výška )
    {
        int s2 = šířka / 2;
        int v2 = výška / 2;
        AP.nekresli();
            super.setPozice( getX()-s2, getY()-v2 );
            super.setRozměr( šířka,     výška );
            int x0 = super.getX();      //getX() - šířka/2;
            int y0 = super.getY();      //getY() - výška/2;
            int xn = x0 + šířka;
            int yn = y0 + výška;
            hlavní  .spoj( x0, y0, xn, yn );
            vedlejší.spoj( x0, yn, xn, y0 );
        AP.vraťKresli();
    }


//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================

    public void nakresli( Kreslítko kr )
    {
        super   .nakresli( kr );
        hlavní  .nakresli( kr );
        vedlejší.nakresli( kr );
    }


//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}


