package ksiazka.kucharska; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.List; import javax.imageio.ImageIO; import javax.swing.DefaultListModel; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import db.SearchRecipeAll; import db.Cookbook; import db.SearchRecipe; import db.SearchRecipeNameTag; public class CB_Controller { private static CB_View theView; private static CB_Model theModel; public CB_Controller(CB_View theView, CB_Model theModel) { CB_Controller.theView = theView; CB_Controller.theModel = theModel; CB_Controller.theView.addListener(new AddListener()); CB_Controller.theView.delListener(new DelListener()); CB_Controller.theView.loadListener(new LoadListener()); CB_Controller.theView.cancelListener(new CancelListener()); CB_Controller.theView.saveListener(new SaveListener()); CB_Controller.theView.listSelectListener(new SelectionListener()); CB_Controller.theView.searchTypeListener(new SearchListener()); } public void fillList(){ Cookbook myCb = new Cookbook(); SearchRecipe sr; if (theView.getSearchValue() != "") { sr = new SearchRecipeNameTag(theView); } else { sr = new SearchRecipeAll(theView); } List names = sr.obtainRecipeNames(); theView.setRecipesList(names); myCb.closeConnection(); } public static void fillComponents(String name){ Cookbook myCb = new Cookbook(); theModel = myCb.selectRecipe(name); theView.setRecipeTitle(theModel.getName()); theView.setRecipeIngredients(theModel.getIngredients()); theView.setRecipeDescription(theModel.getDescription()); theView.setRecipeTags(theModel.getTags()); theView.setRecipeIcon(theModel.getImage()); theView.resetCaretPositions(); myCb.closeConnection(); } public static void addNewRecipe(){ Cookbook myCb = new Cookbook(); RecipeManager rm = new RecipeManager(); rm.setRecipeBuilder(new NewRecipeBuilder(theView)); rm.constructRecipe(); CB_Model obj = rm.getRecipe(); myCb.insertRecipe(obj); myCb.closeConnection(); } public static void removeRecipe(String name){ Cookbook myCb = new Cookbook(); myCb.deleteRecipe(name); myCb.closeConnection(); } public ImageIcon resizeImage(File f) { //File file = f; ImageIcon iconLogo=null; try { BufferedImage srcImg = ImageIO.read(f); int w = (int)Math.ceil(srcImg.getWidth()/(double)srcImg.getHeight()*theView.getImgRecipe().getHeight()); BufferedImage resizedImg = new BufferedImage(w, theView.getImgRecipe().getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = resizedImg.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.drawImage(srcImg, 0, 0, w, theView.getImgRecipe().getHeight(), null); g2.dispose(); iconLogo = new ImageIcon(resizedImg); } catch (IOException e1) { e1.printStackTrace(); } return iconLogo; } class AddListener implements ActionListener{ public void actionPerformed(ActionEvent e) { try{ theView.ActivateAddMenu(); } catch(NumberFormatException ex){ ex.printStackTrace(); } } } class DelListener implements ActionListener{ public void actionPerformed(ActionEvent e) { try{ JList recipesList = theView.getRecipesList(); DefaultListModel model = (DefaultListModel) recipesList.getModel(); if (recipesList.getSelectedIndex() != -1) { int dialogResult = JOptionPane.showConfirmDialog (null, "Czy na pewno chcesz usunąć przepis?", "Pytanie", JOptionPane.YES_NO_OPTION); if(dialogResult == JOptionPane.YES_OPTION){ removeRecipe(recipesList.getSelectedValue().toString()); model.remove(recipesList.getSelectedIndex()); if (recipesList.getModel().getSize()>0) { recipesList.setSelectedIndex(0); fillComponents(recipesList.getSelectedValue().toString()); } else { theView.setRecipeTitle("Nazwa przepisu"); theView.setRecipeIngredients(""); theView.setRecipeDescription(""); theView.setRecipeTags(""); } } } } catch(NumberFormatException ex){ ex.printStackTrace(); } } } class LoadListener implements ActionListener{ public void actionPerformed(ActionEvent e) { try{ JFileChooser fcImg = theView.getFileChooser(); int returnVal = fcImg.showOpenDialog(theView); if (returnVal == JFileChooser.APPROVE_OPTION) { theView.getImgRecipe().setIcon(resizeImage(fcImg.getSelectedFile())); } } catch(NumberFormatException ex){ ex.printStackTrace(); } } } class CancelListener implements ActionListener{ public void actionPerformed(ActionEvent e) { try{ theView.DeactivateAddMenu(); JList recipesList = theView.getRecipesList(); if(recipesList.getSelectedIndex() != -1) fillComponents(recipesList.getSelectedValue().toString()); } catch(NumberFormatException ex){ ex.printStackTrace(); } } } class SaveListener implements ActionListener{ public void actionPerformed(ActionEvent e) { try{ addNewRecipe(); theView.setRecipesListItem(theView.getRecipeEdTitle()); theView.DeactivateAddMenu(); theView.getRecipesList().setSelectedIndex(theView.getRecipesList().getModel().getSize()-1); fillComponents(theView.getRecipesList().getSelectedValue().toString()); } catch(NumberFormatException ex){ ex.printStackTrace(); } } } class SelectionListener implements ListSelectionListener{ public void valueChanged(ListSelectionEvent e) { try{ JList recipesList = theView.getRecipesList(); if(recipesList.getSelectedIndex() != -1) fillComponents(recipesList.getSelectedValue().toString()); } catch(NumberFormatException ex){ ex.printStackTrace(); } } } class SearchListener implements DocumentListener{ public void changedUpdate(DocumentEvent e) { fillList(); } public void insertUpdate(DocumentEvent e) { fillList(); } public void removeUpdate(DocumentEvent e) { fillList(); } } }