package controller;
import java.awt.Color;
import presentation.PColonne;
import presentation.PTasDeCartes;
import presentation.PTasDeCartesAlternees;
import solitaire.application.Colonne;
import solitaire.application.Tas;
import solitaire.application.Usine;
public class CColonne extends Colonne {
private PColonne p;
private static CColonne src, dest;
private Usine u;
public CColonne(String name, Usine u) {
super(name, u);
this.u = u;
PTasDeCartes pCachees = ((CTasDeCartes) cachees).getPresentation();
PTasDeCartesAlternees pVisibles = ((CTasDeCartesAlternees) visibles)
.getPresentation();
pCachees.setDelta(0, 15);
pVisibles.setDelta(0, 15);
p = new PColonne(this, pCachees, pVisibles);
}
public PColonne getPresentation() {
return p;
}
public void setPresentation(PColonne p) {
this.p = p;
}
// DRAG
public void p2c_debutDnD(CCarte cc) throws Exception {
if (cc != null) {
CTasDeCartes transfer = new CTasDeCartes("Transfer", u);
transfer.getPresentation().setDelta(0, 25);
if (cc == getSommet()) {
depiler();
transfer.empiler(cc);
} else {
CCarte tmp;
CTasDeCartes tasTmp = new CTasDeCartes("Transfer", u);
int size = 1;
while ((tmp = (CCarte) getSommet()) != cc) {
depiler();
tasTmp.empiler(tmp);
size++;
}
depiler();
tasTmp.empiler(tmp);
for (int i = 0; i < size; i++) {
CCarte c = (CCarte) tasTmp.getSommet();
tasTmp.depiler();
transfer.empiler(c);
}
}
dest = null;
src = this;
transfer.getPresentation().setOpaque(false);
p.c2p_debutDnDOK(transfer.getPresentation());
} else {
p.c2p_debutDnDNull();
}
}
public void p2c_dragDropEnd(boolean success, PTasDeCartes ptdc) {
CTasDeCartes ctdc = (CTasDeCartes) ptdc.getControle();
if (!success) {
empiler(ctdc);
}
else {
if (!cachees.isVide() && ((dest != null && dest != src && src != null) || (visibles.isVide() && dest == null && src != null))) {
PTasDeCartesAlternees ptas = ((CTasDeCartesAlternees) visibles).getPresentation();
ptas.setLocation(ptas.getX(), ptas.getY() - 15);
}
try {
retournerCarte();
} catch (Exception e) {
e.printStackTrace();
}
}
src = null;
}
// DROP
public void p2c_dragEnter(CTasDeCartes transfer) {
try {
if (isEmpilable(transfer.getBase())) {
p.c2p_showEmpilable();
} else {
p.c2p_showNotEmpilable();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void p2c_dragExit(CTasDeCartes transfer) {
p.c2p_showNeutre();
}
public void p2c_drop(CTasDeCartes transfer) {
try {
p.c2p_showNeutre();
if (isEmpilable(transfer.getBase())) {
empiler(transfer);
dest = this;
p.c2p_finDnDOK();
} else {
p.c2p_finDnDKO();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}