package se.cth.hedgehogphoto.geocoding.controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import se.cth.hedgehogphoto.database.DatabaseHandler; import se.cth.hedgehogphoto.database.Picture; import se.cth.hedgehogphoto.geocoding.view.GeoLocationPanel; import se.cth.hedgehogphoto.geocoding.view.GeoSearchPanel; import se.cth.hedgehogphoto.objects.LocationGPSObject; import se.cth.hedgehogphoto.view.PhotoPanel; /** * Controller-class for the geocoding-system. * @author Florian Minges */ public class GeocodingController { private static GeocodingController instance; private GeoSearchPanel searchPanel; private PhotoPanel photoPanel; public static GeocodingController getInstance(GeoSearchPanel searchPanel) { if (instance == null) { instance = new GeocodingController(searchPanel); } return instance; } public GeocodingController(GeoSearchPanel searchPanel) { this.searchPanel = searchPanel; this.searchPanel.addResultPanelMouseListener(new ResultPanelListener()); this.searchPanel.addOkButtonListener(new OkButtonListener()); this.searchPanel.addCancelButtonListener(new CancelButtonListener()); } public void setPhotoPanel(PhotoPanel panel) { this.photoPanel = panel; } public class ResultPanelListener extends MouseAdapter { @Override public void mouseReleased(MouseEvent arg0) {} @Override public void mouseClicked(MouseEvent arg0) { if (arg0.getSource() instanceof GeoLocationPanel) { GeoLocationPanel resultPanel = (GeoLocationPanel) arg0.getSource(); resultPanel.toggleSelection(); resultPanel.mouseEntered(); searchPanel.enableOkButton(GeoLocationPanel.selectedPanel != null); } } @Override public void mousePressed(MouseEvent arg0) {} @Override public void mouseEntered(MouseEvent arg0) { if (arg0.getSource() instanceof GeoLocationPanel) { GeoLocationPanel resultPanel = (GeoLocationPanel) arg0.getSource(); resultPanel.mouseEntered(); } } @Override public void mouseExited(MouseEvent arg0) { /*set default-color again, works for selectedPanels also*/ if (arg0.getSource() instanceof GeoLocationPanel) { GeoLocationPanel resultPanel = (GeoLocationPanel) arg0.getSource(); resultPanel.mouseExited(); } } } public class OkButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (GeoLocationPanel.selectedPanel != null && photoPanel != null) { Picture picture = (Picture) DatabaseHandler.getInstance().findPictureById(photoPanel.getPath()); LocationGPSObject location = GeoLocationPanel.selectedPanel.getLocationObjectOther(); DatabaseHandler.getInstance().setLocationtoPicture(location, picture); photoPanel.setLocation(location.getLocation()); searchPanel.setVisible(false); } } } public class CancelButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { searchPanel.setVisible(false); } } }