package tk.captainsplexx.JavaFX.CellFactories;
import java.io.File;
import javafx.event.EventHandler;
import javafx.scene.control.Tooltip;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import tk.captainsplexx.Game.Core;
import tk.captainsplexx.JavaFX.JavaFXHandler;
import tk.captainsplexx.JavaFX.TreeViewConverter;
import tk.captainsplexx.JavaFX.TreeViewEntry;
import tk.captainsplexx.JavaFX.Windows.MainWindow.EntryType;
import tk.captainsplexx.Resource.FileHandler;
import tk.captainsplexx.Resource.ResourceHandler.LinkBundleType;
import tk.captainsplexx.Resource.TOC.ConvertedSBpart;
import tk.captainsplexx.Resource.TOC.ConvertedTocFile;
import tk.captainsplexx.Resource.TOC.TocConverter;
import tk.captainsplexx.Resource.TOC.TocFile;
import tk.captainsplexx.Resource.TOC.TocManager;
import tk.captainsplexx.Resource.TOC.TocSBLink;
public class JavaFXexplorerTCF extends TreeCell<TreeViewEntry> {
public JavaFXexplorerTCF() {
setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (getTreeItem() != null){
if (getTreeItem().getChildren().isEmpty() && getTreeItem().getValue().getValue() instanceof TocSBLink){
TocSBLink link = ((TocSBLink)getTreeItem().getValue().getValue());
//TOC MODE
if (link.getType() == LinkBundleType.BUNDLES){
Core.getGame().getResourceHandler().resetEBXRelated();//clean all ebxFiles in DB
Core.getGame().getEntityHandler().clear();
/*Core.runOnMainThread(new Runnable() {
@Override
public void run() {
Core.getGame().getModelHandler().getLoader().cleanUp();//Clean VAO, VBO, Textures!
}
});*/
TocFile part = link.getLinkedSBPart();
ConvertedSBpart sbpart = TocConverter.convertSBpart(part);
Core.getGame().setCurrentSB(sbpart);
TreeItem<TreeViewEntry> tree = TreeViewConverter.getTreeView(sbpart);
//Core.getJavaFXHandler().setTreeViewStructureLeft1(tree);
Core.getJavaFXHandler().getMainWindow().setPackageExplorer1(tree, null);
}else{
System.err.println(((TocSBLink)getTreeItem().getValue().getValue()).getType()+" are not supported yet.");
}
}else if (getTreeItem().getChildren().isEmpty() && getTreeItem().getValue().getValue() instanceof File){
//EXPLORER MODE
Core.getGame().setCurrentFile(FileHandler.normalizePath(((File)getTreeItem().getValue().getValue()).getAbsolutePath().replace(".sb", "")));
TocFile toc = TocManager.readToc(Core.getGame().getCurrentFile());
ConvertedTocFile convToc = TocConverter.convertTocFile(toc);
if (convToc.getName()==null){
//is null if patched! (update folder files are noname's)
convToc.setName(Core.getGame().getCurrentFile().replace(FileHandler.normalizePath(Core.gamePath), ""));
}
if (convToc.isCas()){
Core.getGame().setCurrentToc(convToc);
TreeItem<TreeViewEntry> masterTree = new TreeItem<TreeViewEntry>(new TreeViewEntry("BACK (Click)", new ImageView(JavaFXHandler.leftArrowIcon), "GO BACK", EntryType.LIST));
TreeItem<TreeViewEntry> convTocTree = TreeViewConverter.getTreeView(convToc);
convTocTree.setExpanded(true);
masterTree.getChildren().add(convTocTree);
masterTree.setExpanded(true);
//Core.getJavaFXHandler().setTreeViewStructureLeft(masterTree);
Core.getJavaFXHandler().getMainWindow().setPackageExplorer(masterTree);
}else{
System.err.println("NON CAS DETECTED!! NO SUPPORT YET.");
getTreeItem().getParent().getChildren().remove(getTreeItem());
}
/*DEBUG FOR TOC FILE RECREATION
System.out.println("DEBUG: TocCreator || sysout in JavaFXExplorer");
System.out.println(FileHandler.bytesToHex(TocCreator.createTocFile(convToc)));
END OF DEBUG*/
}else if (getTreeItem().getValue().getValue() instanceof String){
if (((String)getTreeItem().getValue().getValue()).equals("GO BACK")){
//BACK
Core.getGame().buildExplorerTree();
}
}
}
}
});
}
@Override
public void updateItem(TreeViewEntry item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (item.getType() == EntryType.STRING){
if (item.getValue() != null && !(item.getValue() instanceof TocSBLink)){
setText(item.getName()+":"+(String)item.getValue());
}else{
setText(item.getName());
}
}else if (item.getType() == EntryType.LIST){
setText(item.getName());
}else{
setText(item.getName()+" with undefined type for explorerTCF: "+item.getType());
}
if (item.getTooltip()!=null){
setTooltip(new Tooltip(item.getTooltip()));
}
setGraphic(item.getGraphic());
}
}
}