package se.cth.hedgehogphoto.controller; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import se.cth.hedgehogphoto.database.DatabaseHandler; import se.cth.hedgehogphoto.global.Constants; import se.cth.hedgehogphoto.metadata.PictureInserter; import se.cth.hedgehogphoto.view.ImageUtils; import se.cth.hedgehogphoto.view.MainView; import se.cth.hedgehogphoto.view.PhotoPanel; /** * * @author David Grankvist */ public class DefaultController { private MainView view; public DefaultController(MainView v){ view = v; view.setHomeButtonListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { DatabaseHandler.getInstance().updateAllPictures(); } }); view.setUploadPictureButtonListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { new PictureInserter(); DatabaseHandler.getInstance().updateAllPictures(); } }); view.setPhotoNameButtonListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { for(int i=0;i<view.getPhotoPanels().size();i++){ view.getPhotoPanels().get(i).displayPhotoName(!view.getPhotoPanels().get(i).isVisiblePhotoName()); } } }); view.setCommentsButtonListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { for(int i=0;i<view.getPhotoPanels().size();i++){ view.getPhotoPanels().get(i).displayComments(!view.getPhotoPanels().get(i).isVisibleComments()); } } }); view.setLocationButtonListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { for(int i=0;i<view.getPhotoPanels().size();i++){ view.getPhotoPanels().get(i).displayLocation(!view.getPhotoPanels().get(i).isVisibleLocation()); } } }); view.setTagsButtonListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { for(int i=0;i<view.getPhotoPanels().size();i++){ view.getPhotoPanels().get(i).displayTags(!view.getPhotoPanels().get(i).isVisibleTags()); } } }); view.setSliderListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent arg0) { if(arg0.getSource() instanceof JSlider){ JSlider slider = (JSlider)arg0.getSource(); float scale = (float)slider.getValue()/100; List<PhotoPanel> ppList = view.getPhotoPanels(); for(int i=0;i<ppList.size();i++){ Image image = ppList.get(i).getIcon().getImage(); Dimension d = ppList.get(i).getScaleDimension(); BufferedImage bi = ImageUtils.resize(image, Math.round(d.width*scale), Math.round(d.height*scale)); ImageIcon icon2 = new ImageIcon(bi); view.getPhotoPanels().get(i).setIcon(icon2); } } } }); view.setPrevNextBtnListeners(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { if(arg0.getSource() instanceof JButton){ JButton btn = (JButton) arg0.getSource(); JPanel panel = view.getSinglePhotoPanel(); PhotoPanel pp = view.getCurrentPhotoPanel(); List<PhotoPanel> ppList = view.getPhotoPanels(); if(ppList.contains(pp)){ panel.removeAll(); if(btn.getText().equals("Previous")){ if((ppList.indexOf(pp) - 1) < 0){ pp = ppList.get(ppList.size() - 1); }else{ pp = ppList.get(ppList.indexOf(pp) - 1); } } if(btn.getText().equals("Next")){ if((ppList.indexOf(pp) + 1) >= ppList.size()){ pp = ppList.get(0); }else{ pp = ppList.get(ppList.indexOf(pp) + 1); } } Image image = pp.getIcon().getImage(); float scale; BufferedImage bi; if(image.getWidth(null) > Constants.MAX_PICTURE_WIDTH){ scale = Constants.MAX_PICTURE_WIDTH/image.getWidth(null); bi = ImageUtils.resize(image, Math.round(Constants.MAX_PICTURE_WIDTH), Math.round(image.getHeight(null)*scale)); }else if(image.getHeight(null) > Constants.MAX_PICTURE_HEIGHT){ scale = Constants.MAX_PICTURE_HEIGHT/image.getHeight(null); bi = ImageUtils.resize(image, Math.round(image.getWidth(null)*scale), Math.round(Constants.MAX_PICTURE_HEIGHT)); }else{ bi = ImageUtils.resize(image, image.getWidth(null), image.getHeight(null)); } pp.setScaleDimension(new Dimension(bi.getWidth(), bi.getHeight())); ImageIcon icon2 = new ImageIcon(bi); pp.setIcon(icon2); panel.add(pp); panel.repaint(); panel.revalidate(); view.resetSlider(); } } } }); view.setBackBtnListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { JPanel cardPanel = view.getCardPanel(); CardLayout cl = (CardLayout) cardPanel.getLayout(); cl.show(cardPanel, "All"); view.setTopButtonsVisibility(false); JPanel panel = view.getPhotoViewPanel(); List<PhotoPanel> ppList = view.getPhotoPanels(); for(int i=0;i<ppList.size();i++){ Image image = ppList.get(i).getIcon().getImage(); float scale = Constants.PREFERRED_PICTURE_HEIGHT/image.getHeight(null); BufferedImage bi = ImageUtils.resize(image, Math.round(image.getWidth(null)*scale), Math.round(Constants.PREFERRED_PICTURE_HEIGHT)); ppList.get(i).setScaleDimension(new Dimension(bi.getWidth(), bi.getHeight())); ImageIcon icon2 = new ImageIcon(bi); view.getPhotoPanels().get(i).setIcon(icon2); panel.add(view.getPhotoPanels().get(i)); } view.resetSlider(); } }); } }