//******  PRIMER UPORABE CARD LAYOUT  ******//
//*** Pravice si pridržuje Cvetko Pirš, C.C.P. Cre@ions ***//
//*** http://www.ccpcreations.com ***//
/* Dovoljena uporaba v namene izobraževanja
   Jezik: Java, različica: 1.5
	 Prevod z stavkom:  javac PrimerCardLayout.java
*/

import java.awt.*;
import java.awt.event.*;

/*Ta program demonstrira uporabo CardLayout Managerja. Program je konstuiran
  tako, da za "mešalca" (ki CardLayout Managerja dejansko uporablja) in vsako
	kartico v mešalcu ustvari nov razred, ki predstavlja zaokroženo celoto.
*/



// GLAVNI RAZRED \\
// (edini javni)
public class PrimerCardLayout {
  public static void main(String[] args) {
		//Ustvarimo novo okno in mu nastavimo začetno velikost ter naslov
		Frame mojeOkno=new Frame();
		mojeOkno.setSize(240, 320);
		mojeOkno.setTitle("Primer uporabe Card Layout Managerja");
		
		//Na to okno bomo dodali "mešalca"
		//(final je le zato, da lahko pozneje do njega dostopamo zaradi statičnosti medote main)
		final Mesalec mesalec=new Mesalec();
		mojeOkno.add(mesalec, BorderLayout.CENTER);
		
		//Na dno pa še gumb za menjavo kart
		Button gumb=new Button("Naslednja karta (edini gumb, ki deluje)");
		mojeOkno.add(gumb, BorderLayout.SOUTH);

		//Okno na koncu še prikažemo
		mojeOkno.setVisible(true);	


		//Naslednji ukaz ni del izgleda, ampak nudi funkcionalnost gumba za menjavo
		gumb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				mesalec.naslednjaKarta();
			}
		});		
	}
}




// MEŠALEC \\
//Ta razred predstavlja vsebnik, ki bo "mešal karte" in podeduje vse,
//kar je potrebno, da lahko to predstavlja (objekt java.awt.Panel)
//Mešalec tudi priskrbi metodo, s katero pokaže naslednjo karto
class Mesalec extends Panel{
	//Atribut karte predstavlja Layout Manager, ki opravlja z njimi
	private CardLayout karte;
	
	//Konstruktor, ki ustvari Layout Managerja in napolni mešalca s kartami
	public Mesalec() {
		//Ta vsebnik bo uporabljal CardLayout Managerja
		karte=new CardLayout();
		setLayout(karte);
		
		//Prva karta:
		PrvaKarta prvaKarta=new PrvaKarta();
		add( prvaKarta, "Prva Karta" );
		
		//Druga karta:
		DrugaKarta drugaKarta=new DrugaKarta();
		add( drugaKarta, "Druga Karta" );
		
	}
	
	//S to metodo povemo mešalcu, naj pokaže naslednjo karto
	public void naslednjaKarta() {
		//Metoda "next" je last CardLayout Managerja (v našem primeru "karte")
		//"this" predstavlja mešalca samega (metodi next moremo posredovati vsebnik,
		//v katerem so karte)
		karte.next(this);
	}
}




// PRVA KARTA \\
//Tudi vse karte so sami po sebi vsebniki, ki pa vsebujejo gradnike
class PrvaKarta extends Panel {
	private Button vRedu;
	
	public PrvaKarta() {  //V konstruktorju napolnite karto z gradniki
		add( new Label("To je prva karta.") );
		
		vRedu=new Button("V redu");
		add(vRedu);
	}
	
	//Še standarden nabor "get" metod, ki vračajo vse relevantne gradnike
	// (relevantni gradniki so vsi gradniki, katerim bomo pripenjali poslušalce)
	public Button getVRedu() {return vRedu;}
}




// DRUGA KARTA \\
class DrugaKarta extends Panel {
	private Button izhod;
	
	public DrugaKarta() {
		//Tej karti spremenimo privzet Layout Manager
		setLayout(new GridLayout(3,3));
		
		add( new Label("To je druga karta.") );
		
		izhod=new Button("Izhod");
		add(izhod);
	}
	
	public Button getIzhod() {return izhod;}
}
