/**
 *  File neve : FoMenu.java (Fomenu osztály)
 *
 *  Leírás : Ez az osztály a Frame amihez kapcsolva van egy
 *           ScrollPane amelyhez van csatolva a RajzPanel amin
 *           a grafikus műveletek történnek. A konstruktor
 *           egyetlen paramétere a Frame cimkéje.
 *
 *  Készítette Takács Mihály 1998.06. 
 */

import java.awt.*;
import java.awt.event.*;

public class FoMenu extends Frame implements ActionListener, AdjustmentListener {

  Menu fajl,  csoportok, segit;
  MenuItem uj, megnyit, ment, bezar, kilepes,       // File
           modosit,                      // Csoport menüpont
	   segitseg, about;           // Segít menüpont

  ScrollPane scp;
  Adjustable scpHadjust,scpVadjust;  //A görgetősávokhoz
  Rajzpanel rajzpanel;
  String dir="";      // A betöltött file directory-ja
  String filenev="";  // A betöltött file neve

  FoMenu(String s) {
    super(s);

    MenuBar mb=new MenuBar();
      fajl=new Menu("Fajl");
        uj=new MenuItem("Uj");
	uj.addActionListener(this);          //parancs hozzárendelése
	fajl.add(uj);
	fajl.addSeparator();
	megnyit=new MenuItem("Megnyit..");
	megnyit.addActionListener(this);
	fajl.add(megnyit);
	ment=new MenuItem("Ment..");
	ment.addActionListener(this);
	ment.setEnabled(false);
	fajl.add(ment);
	bezar=new MenuItem("Bezar");
	bezar.addActionListener(this);
	bezar.setEnabled(false);
	fajl.add(bezar);
	fajl.addSeparator();
	kilepes=new MenuItem("Kilepes");
	kilepes.addActionListener(this);
	fajl.add(kilepes);
      mb.add(fajl);
      csoportok=new Menu("Csoportok");
      csoportok.setEnabled(false);
	modosit=new MenuItem("Modosit..");
	modosit.addActionListener(this);
	csoportok.add(modosit);
      mb.add(csoportok);
      segit=new Menu("Segit");
        segitseg=new MenuItem("Segit");
	segitseg.addActionListener(this);
	segit.add(segitseg);
        about=new MenuItem("A programrol");
	about.addActionListener(this);
	segit.add(about);
      mb.setHelpMenu(segit);
    setMenuBar(mb);
    scp=new ScrollPane();

    scpHadjust=scp.getHAdjustable();
    scpHadjust.setUnitIncrement(50);  // Görgetési mozgás
    scpHadjust.setBlockIncrement(getSize().width-50);   // Ugrásnál a mozgás
    scpHadjust.addAdjustmentListener(this);

    scpVadjust=scp.getVAdjustable();
    scpVadjust.setUnitIncrement(50);  // Görgetési mozgás
    scpVadjust.setBlockIncrement(getSize().height-50);   // Ugrásnál a mozgás
    scpVadjust.addAdjustmentListener(this);
    add("Center",scp);

    setSize(600,400);
    setResizable(false);
    validate();
    paintAll(getGraphics());
  }

  /* Adjustable interfész megvalósítása a ScrollPane-hoz*/
  public void adjustmentValueChanged(AdjustmentEvent e) {
    rajzpanel.repaint();
    scpHadjust.setBlockIncrement(getSize().width-50);   // Ugrásnál a mozgás
    scpVadjust.setBlockIncrement(getSize().height-50);  // Ugrásnál a mozgás
  }

  /* ActionListener interfész megvalósítása a parancsok lekezeléséhez */
  public void actionPerformed(ActionEvent ae) {
    Object s=ae.getSource();
       /* File menüpont */
    if (s.equals(uj)) {
      menthakell(); // Csinál mentést ha volt változtatás
      ment.setEnabled(true);  // Menüpontok engedélyezése
      bezar.setEnabled(true);
      csoportok.setEnabled(true);
      dir="";           // Ennek még nincs file-neve
      filenev="";
      scp.removeAll();  // Kivesszük az összes komponenst a ScrollPane-ből
      rajzpanel=null;   // Erre már nincs szükségünk
      rajzpanel=new Rajzpanel(scp,"");  // És újra felépítjük
      scp.add(rajzpanel);
    }
    else if (s.equals(megnyit)) {   /* Létező file megnyitása */
      menthakell();
      FileDialog fd=new FileDialog(this,"File megnyitása",FileDialog.LOAD);
      fd.show();
      if ((filenev=fd.getFile())!=null) {
	ment.setEnabled(true);  // Menüpontok engedélyezése
	bezar.setEnabled(true);
	csoportok.setEnabled(true);
	scp.removeAll();  // Kivesszük az összes komponenst a ScrollPane-ből
	rajzpanel=null;   // Erre már nincs szüksegünk
	dir=fd.getDirectory();
	rajzpanel=new Rajzpanel(scp,dir+filenev); //És felépítjük
	scp.add(rajzpanel);
      }
    }
    else if (s.equals(ment)) {
      FileDialog fd=new FileDialog(this,"Aktuális mentése",FileDialog.SAVE);
      fd.setDirectory(dir);
      fd.setFile(filenev);
      fd.show();
      dir=fd.getDirectory();
      filenev=fd.getFile();
      rajzpanel.ment(dir+filenev);
    }
    else if (s.equals(bezar)) {
      menthakell();
      ment.setEnabled(false);  // Menüpontok tiltása
      bezar.setEnabled(false);
      csoportok.setEnabled(false);
      dir="";
      filenev="";
      scp.removeAll();  // Kivesszük az összes komponenst a ScrollPane-ből
      rajzpanel=null;   // Erre már nincs szükségünk
    }
    else if (s.equals(kilepes)) {
      menthakell();
      System.exit(0);
    }
    /* Csoport menüpont */
    else if (s.equals(modosit)) {
      CsopDialog csopdialog=new CsopDialog(this,"Csoportok módosítása");
      csopdialog.show();
    }
    /* Segít menüpont */
    else if (s.equals(segitseg)) {
      Help help=new Help(this,"SzHelp.hlp");
    }
    else if (s.equals(about)) {
      About about=new About(this);
      about.show();
    }
  }

    /**
     *  Ha történt változtatás akkor csinál mentést (rákérdezés mellett)
     **/
  private void menthakell() {
    try {  // Lehet, hogy nem létezik rajzpanel
      if (rajzpanel.valtozas) {
	Uzenet kerdes=new Uzenet(this,"Kérdés","A regiben volt valtozas. Akarsz mentest rola?",Uzenet.kerdes);  // kérdező ablak
	if (kerdes.valasztasa()==Uzenet.igen) {
	  FileDialog fd=new FileDialog(this,"Aktuális mentése",FileDialog.SAVE);
	  fd.setDirectory(dir);
	  fd.setFile(filenev);
	  fd.show();
	  rajzpanel.ment(fd.getDirectory()+fd.getFile());
	}
      }
    } catch (NullPointerException err) {}
  }

}
