/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package geometrypainter;
import java.io.*;
import java.util.List;
import java.util.Vector;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
public class DrawingSurface extends JInternalFrame implements ActionListener, ComponentListener, InternalFrameListener, MouseListener, MouseMotionListener{
//Context Menü Items
private JPopupMenu _contextPopup = new JPopupMenu();
private JMenuItem _clearSurface = new JMenuItem("Clear Surface");
private JMenuItem _deleteGeometry = new JMenuItem("Delete Geometry");
//Constructor-------------------------------------------------------------------------------------------
public DrawingSurface(Container container)
{
_container = container;
_toolBar = _container.getToolbar();
_propertyGrid = _container.getPropertyGrid();
_layerManager = _container.getLayerManager();
_rubberband = _container.getRubberband();
_selectionManager = new SelectionManager(this, _geometryObjects, _layerManager, _propertyGrid);
//Zeichenoberfläche
getContentPane().add(componentPainter);
getContentPane().addComponentListener(this);
getContentPane().addMouseMotionListener(this);
getContentPane().addMouseListener(this);
addInternalFrameListener(this);
}
private void checkPopupMenu(MouseEvent event)
{
if(event.isMetaDown())
{
//Clear Surface
_clearSurface.addActionListener(this);
_contextPopup.add(_clearSurface);
_deleteGeometry.addActionListener(this);
_deleteGeometry.setEnabled(false);
_contextPopup.add(_deleteGeometry);
_contextPopup.show(event.getComponent(), event.getX(), event.getY());
}
}
public void redraw()
{
componentPainter.repaint(_canvas);
}
//Mouse Event-------------------------------------------------------------------------------------------
public void mousePressed(MouseEvent e) {
//Bei linkem Mausklick wird das Fenster aktiviert und...
if (_canvas.contains(e.getPoint()) && !e.isMetaDown())
{
//wird geprüft, ob ein neues Element angelegt wird
if(_toolBar.getTempGeometryObject() != null)
{
if (!_justActivated)
{
//Löschen der Selektion
_selectionManager.UnselectGeometry();
//Loggen des Löschens-ContextMenü
_deleteGeometry.setEnabled(false);
//Rubberband wird erst nach dem zweiter Klick ausgeführt
_rubberbandIsActive = true;
_rubberband.setBandStartPoint(e);
}
else
{
_justActivated = false;
}
}
else
{
//sonst wird geprüft, ob ein Objekt selektiert oder deselektiert werden muss
_deleteGeometry.setEnabled(false);
_selectionManager.SelectionHandler(e);
if(_selectionManager.getSelectedGeometry() != null)
{
//Freigabe des ContextMenüButtons zum Löschen einzelner Geometrien.
_deleteGeometry.setEnabled(true);
//Objekt bereit zum Bewegen
_selectionIsMoving = true;
//Speichern der letzten Mausposition
_lastMouseLocation = e.getPoint();
}
}
}
}
public void mouseDragged(MouseEvent e) {
if(!e.isMetaDown())
{
//Wird geprüft, ob das Rubberband aktiv ist
if(_rubberbandIsActive)
{
_rubberband.setBandMovingPoint(e);
this.redraw();
}
//Wird geprüft, ob ein Objekt bewegt wird
else if (_selectionIsMoving)
{
// Wenn gerade ein Objekt verschoben werden soll, wird die Differenz zur letzten
// Mausposition ausgerechnet und das Objekt um diese verschoben.
_selectionManager.getSelectedGeometry().Move(e.getPoint().x - _lastMouseLocation.x, e.getPoint().y - _lastMouseLocation.y);
//Speichern der letzten Mausposition
_lastMouseLocation = e.getPoint();
//Flächen überschreiben
this.redraw();
}
}
}
public void mouseReleased(MouseEvent e) {
if (!e.isMetaDown())
{
//Wird geprüft ob das Rubberband aktiv ist
if (_rubberbandIsActive)
{
_rubberband.setBandEndPoint(e);
_rubberbandIsActive = false;
//Erstellen einer neuen Geometry
CreateGeometry(_rubberband.getFirstPoint(), _rubberband.getEndPoint());
this.redraw();
}
//Wird geprüft, ob ein Objekt bewegt wird
else if (_selectionIsMoving)
{
//Ist ein Objekt selektiert, wird es deselektiert,
//damit bei der Mausbewegung, das Objekt nicht verschoben wird
_selectionIsMoving = false;
}
}
else if(e.isMetaDown())
{
//Bei rechtem MausButton wird geprüft, ob die Oberfläche aktiv ist
//nur dann erscheint das ContextMenü
if (_container.getActiveMainForm() == this)
{
//clearSurface.Enabled = true;
if (_selectionManager.getSelectedGeometry() != null)
{
_deleteGeometry.setEnabled(true);
}
}
else
{
_clearSurface.setEnabled(false);
_deleteGeometry.setEnabled(false);
}
}
}
public void mouseClicked(MouseEvent e) {
checkPopupMenu(e);
}
public void actionPerformed(ActionEvent e) {
System.out.println("Hier kommen dann nachher die ContextMenü Events rein!");
}
}