
// SoundsPanel.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Třída SoundsPanel zobrazuje 4 obrázeky (psa, kočku, ovci a kuře),
   a sleduje stisky myši na svém povrchu. Pokud uživatel klepnul
   na obrázek, pak metoda playClip() třídy LoadersTests přehraje 
   odpovídající zvuk.

   Třída SoundsPanel používá objekt typu ImagesLoader pro načtení svých
   4 obrázků, která je ovšem pro takto jednoduchou činnost poměrně 
   složitá.
*/

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;


public class SoundsPanel extends JPanel
{
  // názvy obrázků jednotlivých klipů
  private final static String[] names = {"dog", "cat", "sheep", "chicken"};

  // souřadnice levého horního rohu obrázků na obrazovce
  private final static int[] xCoords = {20, 210, 20, 210};
  private final static int[] yCoords = {25, 25, 170, 170};

  // umístění údajů o obrázcích a zvucích
  private final static String IMS_FILE = "imagesInfo.txt";

  private static final int PWIDTH = 350;     // velikost tohoto panelu
  private static final int PHEIGHT = 350;


  private int numImages;
  private BufferedImage[] images;
  private Rectangle[] hotSpots;   //klepnutí uvnitř těchto pravoúhlých oblastí
                                  // spustí přehrátí klipu

  private LoadersTests topLevel;



  public SoundsPanel(LoadersTests sts)
  {
    topLevel = sts;

    setPreferredSize( new Dimension(PWIDTH, PHEIGHT) );

    initImages();

    addMouseListener( new MouseAdapter() {
      public void mousePressed( MouseEvent e)
      { selectImage( e.getX(), e.getY());  }
    } );
  } // konec metody: SoundsPanel()


  private void initImages()
  // načti a inicializuj obrázky a sestav jejich hot-spoty
  {
    numImages = names.length;

    hotSpots = new Rectangle[numImages];
    images = new BufferedImage[numImages];

    ImagesLoader imsLoader = new ImagesLoader(IMS_FILE); 

    for (int i=0; i < numImages; i++) {
      images[i] = imsLoader.getImage(names[i]);
      hotSpots[i] = new Rectangle( xCoords[i], yCoords[i], 
                           images[i].getWidth(), images[i].getHeight());
        // použij rozměry obrázků pro stanovení velikost pravoúhlých oblastí
    }
  }  // konec metody: initImages()



  public void paintComponent(Graphics g)
  // zobrazí obrázek na bílém pozadí
  {
    super.paintComponent(g);
    g.setColor(Color.white);
    g.fillRect(0, 0, PWIDTH, PHEIGHT);   // bílé pozadí

    // zobrazí obrázky
    for (int i=0; i < numImages; i++)
      g.drawImage(images[i], xCoords[i], yCoords[i], this);
  } // konec metody: paintComponent()


  private void selectImage(int x, int y)
  /* určí, na který obrázek uživatel klepnul (možná, že na žádný)
     a požádá o přehrání odpovídajícího klipu. */
  {
    for (int i=0; i < numImages; i++)
      if (hotSpots[i].contains(x,y)) {
        topLevel.playClip(names[i], i);     // přehraj klip obrázku
        break;
      }
  }  // konec metody: selectImage()

} // konec třídy: SoundsPanel
