package de.danielsenff.madds.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;
import net.bouthier.treemapSwing.TMView;
import org.ciscavate.cjwizard.PageFactory;
import org.ciscavate.cjwizard.WizardPage;
import org.ciscavate.cjwizard.WizardSettings;
import de.danielsenff.madds.Madds;
import de.danielsenff.madds.models.Inventorizer;
public class WizardFactory implements PageFactory {
@Override
public WizardPage createPage(List<WizardPage> previewPages, WizardSettings settings) {
return buildPage(previewPages.size(), settings);
}
private WizardPage buildPage(int pageCount, final WizardSettings settings) {
switch (pageCount) {
case 0:
return createDirectorySelectPage(settings);
case 1:
return createTreeMapPage(settings);
}
return null;
}
private WizardPage createTreeMapPage(final WizardSettings settings) {
final WizardPage wp = new WizardPage("Memory visualization", "Visualize DDS in directories") {
{
Inventorizer inventorizer = (Inventorizer)settings.get("inventorizer");
TMView view = (TMView) settings.get("view");
setLayout(new BorderLayout());
add(view, BorderLayout.CENTER);
JPanel statisticsPanel = new StatisticsPanel(inventorizer);
add(statisticsPanel, BorderLayout.SOUTH);
}
public void rendering(List<WizardPage> path, WizardSettings settings) {
super.rendering(path, settings);
setFinishEnabled(true);
setNextEnabled(false);
}
};
return wp;
}
private WizardPage createDirectorySelectPage(final WizardSettings settings) {
final WizardPage wp = new WizardPage("Select directory", "Select directory") {
public final String startFolder = System.getProperty("user.home");
{
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JPanel intro = new JPanel();
intro.setLayout(new BorderLayout());
intro.setBackground(Color.WHITE);
try {
InputStream is = Madds.class.getResourceAsStream("/res/intro.jpg");
ImageIcon imageIcon = new ImageIcon(ImageIO.read(is));
intro.add(new JLabel(imageIcon), BorderLayout.LINE_START);
} catch (IOException ex) {}
JTextPane tp = new MoreWebbableView("res/guide.html");
JScrollPane js = new JScrollPane(tp);
js.setBorder(null);
js.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
intro.add(js);
add(intro);
add(new JSeparator());
JPanel dirPanel = new JPanel();
dirPanel.setLayout(new BorderLayout());
JLabel label2 = new JLabel("<html><p>Select your Mod's Vehicles-folder.<p>");
label2.setAlignmentX(LEFT_ALIGNMENT);
dirPanel.add(label2, BorderLayout.LINE_START);
JPanel panel = createDirectorySelectPanel(settings);
panel.setAlignmentX(LEFT_ALIGNMENT);
panel.setMaximumSize(new Dimension(800, 300));
dirPanel.add(panel, BorderLayout.LINE_END);
JLabel label3 = new JLabel("<html><p>This tool analyzes only DDS files. TGA, BMP or any other formats are ignored.");
label3.setAlignmentX(LEFT_ALIGNMENT);
dirPanel.add(label3, BorderLayout.PAGE_END);
add(dirPanel);
add(new JSeparator());
}
private JPanel createDirectorySelectPanel(
final WizardSettings settings) {
JPanel panel = new JPanel();
panel.setOpaque(false);
panel.setLayout(new BorderLayout());
final JTextField textfield = new JTextField(startFolder);
textfield.setEnabled(false);
textfield.setPreferredSize(new Dimension(400, 20));
textfield.setName("rootDirectory");
JButton fileDialogButton = new JButton("Choose");
fileDialogButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
File file = Madds.openFile(startFolder);
if(file != null && file.exists()) {
textfield.setText(file.getAbsolutePath());
settings.put("rootDirectory", file.getAbsolutePath());
}
setNextEnabled(true);
}
});
panel.add(textfield, BorderLayout.CENTER);
panel.add(fileDialogButton, BorderLayout.LINE_END);
return panel;
}
public void rendering(List<WizardPage> path, WizardSettings settings) {
super.rendering(path, settings);
setFinishEnabled(false);
setNextEnabled(false);
}
@Override
public void updateSettings(WizardSettings settings) {
super.updateSettings(settings);
String rootDirectory = (String)settings.get("rootDirectory");
File rootFile = new File(rootDirectory);
if(rootDirectory.isEmpty()) {
System.err.println("root directory empty string");
} else if(rootDirectory.equals(startFolder)) {
System.err.println("root directory same as startfolder");
} else if (!rootFile.exists()){
System.err.println("root directory not found");
} else {
Inventorizer inventorizer = new Inventorizer(".dds");
inventorizer.startInventoring(rootFile);
settings.put("inventorizer", inventorizer);
// Now setup the treeview
TMView showTMApp;
try {
showTMApp = Madds.showTMApp(inventorizer, rootFile);
settings.put("view", showTMApp);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
};
return wp;
}
}