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); } }