package com.drawbridge.dm;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import com.drawbridge.dm.DMImageFactory.DMImage;
import com.drawbridge.dm.DMModel.DMModelListener;
import com.drawbridge.utils.BackgroundSelector.BackgroundSelectorListener;
import com.drawbridge.utils.GraphicUtils;
import com.drawbridge.utils.Palette;
import com.drawbridge.utils.SegmentPanel;
import com.drawbridge.utils.TitlePanel;
import com.drawbridge.utils.Utils;
public class DMPanel extends SegmentPanel implements DMModelListener, BackgroundSelectorListener{
private static final long serialVersionUID = 1L;
private static DMPanel mInstance = null;
public TitlePanel mTitlePanel;
public DMModel mModel;
private Palette mPalette;
private DMCanvas mCanvas;
public static DMPanel getInstance(){
if(mInstance != null){
return mInstance;
}
else{
mInstance = new DMPanel();
return mInstance;
}
}
public DMCanvas getCanvas(){
return mCanvas;
}
public static void reset(){
mInstance = null;
}
protected DMPanel(){
super();
this.setLayout(new BorderLayout());
mModel = new DMModel(this);
this.addMouseListener(mouseAdapter);
// Add Title Panel
mTitlePanel = new TitlePanel("Character Panel");
mTitlePanel.mHelpButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent me)
{
JOptionPane.showMessageDialog(DMPanel.this, "VLJPanel has no help associated with it.");
}
});
final JButton addBackgroundButton = new JButton("Change Background");
addBackgroundButton.setIcon(GraphicUtils.loadIconFromResource("/Assets/background1.png"));
addBackgroundButton.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent me)
{
if(!mCanvas.bSelector.isVisible()){
mCanvas.showBackgroundSelector();
}
else{
mCanvas.hideBackgroundSelector();
}
}
});
mTitlePanel.addButton(addBackgroundButton);
add(mTitlePanel, BorderLayout.NORTH);
// Add Canvas Panel
mCanvas = new DMCanvas(DMCanvas.HAS_BACKGROUND_SELECTOR);
mCanvas.setBorder(null);
add(mCanvas, BorderLayout.CENTER);
}
public void drawImage(final DMImage image, final int x, final int y, final int w, final int h){
mCanvas.removeAllExceptRequired();
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run()
{
mCanvas.add(image);
image.setLocation(x, y);//removeAll
image.setSize(new Dimension(w, h));
repaint();
}
});
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setClip(5, 5, this.getWidth()-10, this.getHeight()-10);
g.setClip(0, 0, this.getWidth(), this.getHeight());
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.decode("#BBBBBB"));
g2.drawLine(5, 37, this.getWidth()-6, 37);
}
MouseAdapter mouseAdapter = new MouseAdapter(){
@Override
public void mousePressed(MouseEvent me)
{
DMPanel.this.grabFocus();
}
};
@Override
public void onDMModelUpdate(final DMModel model)
{
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run()
{
LinkedList<DMImage> images = model.getModelObjects();
mCanvas.removeAllExceptRequired();
for(DMImage image: images){
mCanvas.add(image);
image.setSize(image.getPreferredSize());
image.setLocation(image.getPreferredLocation());
}
mCanvas.validate();
mCanvas.repaint();
}
});
}
public static boolean hasInstance()
{
return mInstance != null;
}
@Override
public void onBackgroundChangeRequest(String relativeLocation)
{
Utils.out.println(getClass(), "Background change requested:" + relativeLocation);
}
}