InfoSav.java
/*
 * InfoSav.java
 */

package ladyb;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class InfoSav extends javax.swing.JPanel implements KaticaListener{
    
    /** Creates new form InfoSav */
    public InfoSav(Object tulaj) {
        if (tulaj instanceof Katica) owner=(Katica)tulaj;
        else owner=null;
        initComponents();
        mutatFurulya=false;
        //ikon betoltese
        try {
            ClassLoader cldr = this.getClass().getClassLoader();
            java.net.URL imageURL = cldr.getResource("ladyb/images/flute8.gif");
            img=new ImageIcon(imageURL);
        } catch (Exception e) {img=null;}

        allapotListener = new ActionListener() {
            public synchronized void actionPerformed(ActionEvent e) {
                try {
                    if (lAllapot.getText()==null || (
                        !lAllapot.getText().equalsIgnoreCase(KaticaEvent.MEGSERTODOTT) &&
                        !lAllapot.getText().equalsIgnoreCase(KaticaEvent.MEGVIGASZTALVA)))
                        lAllapot.setText(KaticaEvent.ALL);
                } catch (Exception ex) {}
            }
        };
        timer=new javax.swing.Timer(0,allapotListener);
        timer.setInitialDelay(300);
        timer.setRepeats(false);
        timer.start();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        lAllapot = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        pbJobb = new javax.swing.JProgressBar();
        pbBal = new javax.swing.JProgressBar();
        jLabel5 = new javax.swing.JLabel();
        pbTanulas = new javax.swing.JProgressBar();
        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextPane1 = new javax.swing.JTextPane();
        bElore = new javax.swing.JButton();
        bBalra = new javax.swing.JButton();
        bHatra = new javax.swing.JButton();
        bJobbra = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        bFurulya = new javax.swing.JButton();

        setLayout(null);

        setBackground(new java.awt.Color(255, 255, 204));
        setBorder(new javax.swing.border.EtchedBorder(javax.swing.border.EtchedBorder.RAISED));
        setForeground(new java.awt.Color(255, 255, 204));
        setPreferredSize(new java.awt.Dimension(740, 160));
        jLabel1.setText("Katica \u00e1llapota:");
        jLabel1.setPreferredSize(new java.awt.Dimension(40, 14));
        add(jLabel1);
        jLabel1.setBounds(10, 10, 100, 14);

        lAllapot.setText("\u00c1LL");
        add(lAllapot);
        lAllapot.setBounds(10, 30, 130, 14);

        jLabel2.setText("F\u00e9ny\u00e9rz\u00e9kel\u00e9s");
        add(jLabel2);
        jLabel2.setBounds(160, 10, 90, 14);

        jLabel3.setText("JOBB");
        add(jLabel3);
        jLabel3.setBounds(160, 30, 40, 14);

        jLabel4.setText("BAL");
        add(jLabel4);
        jLabel4.setBounds(200, 30, 40, 14);

        pbJobb.setForeground(java.awt.Color.orange);
        pbJobb.setOrientation(1);
        pbJobb.setToolTipText("Jobb szembe jut\u00f3 f\u00e9ny");
        add(pbJobb);
        pbJobb.setBounds(160, 50, 18, 100);

        pbBal.setForeground(java.awt.Color.orange);
        pbBal.setOrientation(1);
        pbBal.setToolTipText("Bal szembe jut\u00f3 f\u00e9ny");
        add(pbBal);
        pbBal.setBounds(200, 50, 18, 100);

        jLabel5.setText("Tanul\u00e1s");
        add(jLabel5);
        jLabel5.setBounds(280, 10, 60, 14);

        pbTanulas.setForeground(java.awt.Color.red);
        pbTanulas.setMaximum(800);
        pbTanulas.setMinimum(100);
        pbTanulas.setOrientation(1);
        pbTanulas.setToolTipText("Felt\u00e9teles reflex kialakul\u00e1sa [%]");
        add(pbTanulas);
        pbTanulas.setBounds(290, 50, 18, 100);

        jButton1.setText("S\u00fag\u00f3");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                onClick(evt);
            }
        });

        add(jButton1);
        jButton1.setBounds(440, 10, 80, 23);

        jScrollPane1.setVisible(false);
        jTextPane1.setEditable(false);
        jTextPane1.setText("A program haszn\u00e1lata:   \nZsebl\u00e1mpa : Eg\u00e9rrel megfoghat\u00f3, \u00e9s mozgathat\u00f3. Be/ki kapcsol\u00e1s jobb eg\u00e9rgombbal vagy a K billenty\u0171vel. Forgat\u00e1sa a Q billenty\u0171vel az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val megegyez\u0151, W billenty\u0171vel ellenkez\u0151 ir\u00e1nyba.\n\nFurulya       : Megsz\u00f3laltat\u00e1sa/elhallgattat\u00e1sa az F billenty\u0171 lenyom\u00e1s\u00e1val, illetve a Furulya Be/Ki gomb megnyom\u00e1s\u00e1val. Am\u00edg sz\u00f3l a furulya, l\u00e1that\u00f3 az ikonja.\n\nKatica \u00e1llapota : A katicabog\u00e1r aktu\u00e1lis \u00e1llapot\u00e1t \u00edrja ki, lehets\u00e9ges \u00e9rt\u00e9kei : \u00e1ll, el\u0151re megy, jobbra fordul, balra fordul, megs\u00e9rt\u0151d\u00f6tt, megvigasztalva, \u00e1ll.\n\nNyom\u00f3gombok : Seg\u00edts\u00e9g\u00fckkel a katic\u00e1t \"k\u00e9zzel\" is arr\u00e9bb lehet tenni. Hasznos, ha \u00fctk\u00f6z\u00e9s miatt s\u00e9rt\u0151d\u00f6tt meg.\n\nF\u00e9ny\u00e9rz\u00e9kel\u00e9s : A sk\u00e1la a katicabog\u00e1r jobb illetve bal szem\u00e9be jut\u00f3 f\u00e9nyt jelzi.\n\nTanul\u00e1s : A sk\u00e1la a felt\u00e9teles reflex kialakul\u00e1s\u00e1nak folyamat\u00e1t mutatja, azaz, hogy a katica hol tart a k\u00e9t inger p\u00e1ros\u00edt\u00e1s\u00e1nak tanul\u00e1s\u00e1ban.");
        jScrollPane1.setViewportView(jTextPane1);

        add(jScrollPane1);
        jScrollPane1.setBounds(440, 40, 280, 110);

        bElore.setFont(new java.awt.Font("Courier New", 0, 14));
        bElore.setText("^");
        bElore.setToolTipText("Katica el\u0151re");
        bElore.setMargin(new java.awt.Insets(2, 2, 2, 2));
        bElore.setPreferredSize(new java.awt.Dimension(30, 30));
        bElore.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        bElore.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                onEloreClick(evt);
            }
        });

        add(bElore);
        bElore.setBounds(40, 60, 30, 30);
        bElore.getAccessibleContext().setAccessibleName("");

        bBalra.setFont(new java.awt.Font("Courier New", 0, 12));
        bBalra.setText("<");
        bBalra.setToolTipText("Katica balra fordul");
        bBalra.setMargin(new java.awt.Insets(2, 2, 2, 2));
        bBalra.setMinimumSize(new java.awt.Dimension(23, 23));
        bBalra.setPreferredSize(new java.awt.Dimension(23, 23));
        bBalra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                onBalraClick(evt);
            }
        });

        add(bBalra);
        bBalra.setBounds(10, 90, 30, 30);

        bHatra.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 12));
        bHatra.setText("v");
        bHatra.setToolTipText("Katica h\u00e1tra");
        bHatra.setMargin(new java.awt.Insets(2, 2, 2, 2));
        bHatra.setPreferredSize(new java.awt.Dimension(30, 30));
        bHatra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                onHatraClick(evt);
            }
        });

        add(bHatra);
        bHatra.setBounds(40, 120, 30, 30);

        bJobbra.setFont(new java.awt.Font("Courier New", 0, 12));
        bJobbra.setText(">");
        bJobbra.setToolTipText("Katica jobbra fordul");
        bJobbra.setMargin(new java.awt.Insets(2, 2, 2, 2));
        bJobbra.setMinimumSize(new java.awt.Dimension(23, 23));
        bJobbra.setPreferredSize(new java.awt.Dimension(23, 23));
        bJobbra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                onJobbraClick(evt);
            }
        });

        add(bJobbra);
        bJobbra.setBounds(70, 90, 30, 30);

        jLabel6.setText("Furulya");
        add(jLabel6);
        jLabel6.setBounds(360, 10, 60, 14);

        bFurulya.setText("Be");
        bFurulya.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                onFurulyaClick(evt);
            }
        });

        add(bFurulya);
        bFurulya.setBounds(360, 40, 50, 23);

    }

    private void onFurulyaClick(java.awt.event.ActionEvent evt) {                                
        if (owner!=null) {
            if (bFurulya.getText().equalsIgnoreCase("Be")) bFurulya.setText("Ki");
            else bFurulya.setText("Be");
            owner.furulyaAction.actionPerformed(evt);
        }
    }                               

    private void onJobbraClick(java.awt.event.ActionEvent evt) {                               
        if (owner!=null) {
            owner.szoba.lady.forog(Math.PI/32);
        }
    }                              

    private void onBalraClick(java.awt.event.ActionEvent evt) {                              
        if (owner!=null) {
            owner.szoba.lady.forog(-Math.PI/32);
        }
    }                             

    private void onHatraClick(java.awt.event.ActionEvent evt) {                              
        if (owner!=null) {
            owner.szoba.lady.mozog(0.0,-10.0);
        }
    }                             

    private void onEloreClick(java.awt.event.ActionEvent evt) {                              
        if (owner!=null) {
            owner.szoba.lady.mozog(0.0,10.0);
        }
    }                             

    private void onClick(java.awt.event.ActionEvent evt) {                         
        if (jButton1.getText().equalsIgnoreCase("Elrejt")) {
            jScrollPane1.setVisible(false);
            jButton1.setText("Súgó");
        }
        else {
            jScrollPane1.setVisible(true);
            jButton1.setText("Elrejt");
        }
    }                        
    
    
    // Variables declaration - do not modify
    private javax.swing.JButton bBalra;
    private javax.swing.JButton bElore;
    private javax.swing.JButton bFurulya;
    private javax.swing.JButton bHatra;
    private javax.swing.JButton bJobbra;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextPane jTextPane1;
    private javax.swing.JLabel lAllapot;
    private javax.swing.JProgressBar pbBal;
    private javax.swing.JProgressBar pbJobb;
    private javax.swing.JProgressBar pbTanulas;
    // End of variables declaration
    private Katica owner;
    private boolean mutatFurulya;
    private ImageIcon img;
    private ActionListener allapotListener;
    private javax.swing.Timer timer;
    
    public void actionPerformed(KaticaEvent e) {
        if (e.getAllapot()!=null) lAllapot.setText(e.getAllapot());
        if (e.getJobbSzemMax()>0.0) {
            pbJobb.setMaximum((int)e.getJobbSzemMax());
            pbJobb.setValue((int)e.getJobbSzem());
            pbBal.setMaximum((int)e.getBalSzemMax());
            pbBal.setValue((int)e.getBalSzem());
        }
        if (e.getTanulas()!=0) {
            if (e.getTanulas()<=pbTanulas.getMaximum())
                pbTanulas.setValue(e.getTanulas());
        }
        else timer.restart();
        
        if (e.szolFurulya()>-1) {
            mutatFurulya=(e.szolFurulya()==0)?false:true;
            if (mutatFurulya && bFurulya.getText().equalsIgnoreCase("be"))
                bFurulya.setText("Ki");
            if (!mutatFurulya && bFurulya.getText().equalsIgnoreCase("ki"))
                bFurulya.setText("Be");
            repaint();
        }
    }
    
    public synchronized void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (mutatFurulya && img!=null) img.paintIcon(this, g, 370, 80);
    }    
    
    public void stop() {
        if (timer!=null) {timer.stop();timer=null;}
    }
}