/*
* CategoryView.java
*
* Created on August 5, 2006, 2:21 AM
*/
package com.floreantpos.ui.views.order;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JScrollPane;
import net.miginfocom.swing.MigLayout;
import org.apache.log4j.Logger;
import com.floreantpos.model.MenuCategory;
import com.floreantpos.model.dao.MenuCategoryDAO;
import com.floreantpos.swing.POSToggleButton;
import com.floreantpos.ui.views.order.actions.CategorySelectionListener;
/**
*
* @author MShahriar
*/
public class CategoryView extends SelectionView implements ActionListener {
private Vector<CategorySelectionListener> listenerList = new Vector<CategorySelectionListener>();
//private CardLayout cardLayout = new CardLayout();
private ButtonGroup categoryButtonGroup;
private Map<String, CategoryButton> buttonMap = new HashMap<String, CategoryButton>();
public static final String VIEW_NAME = "CATEGORY_VIEW";
//private int panelCount = 0;
/** Creates new form CategoryView */
public CategoryView() {
super("CATEGORIES");
getButtonsPanel().setLayout(new MigLayout("wrap 1", "fill,grow,shrink", ""));
getButtonScrollPane().setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
setBackVisible(false);
categoryButtonGroup = new ButtonGroup();
setPreferredSize(new Dimension(160, 100));
}
public void initialize() {
reset();
MenuCategoryDAO categoryDAO = new MenuCategoryDAO();
List<MenuCategory> categories = categoryDAO.findBevegares();
categories.addAll(categoryDAO.findNonBevegares());
CategoryButton selectedButton = null;
MenuCategory selectedCategory = null;
for (int i = 0; i < categories.size(); i++) {
MenuCategory menuCategory = categories.get(i);
CategoryButton button = new CategoryButton(this,menuCategory);
categoryButtonGroup.add(button);
buttonMap.put(String.valueOf(menuCategory.getId()), button);
addButton(button);
if(i == 0) {
selectedButton = button;
selectedCategory = menuCategory;
}
}
if(selectedButton != null && selectedCategory != null) {
selectedButton.setSelected(true);
fireCategorySelected(selectedCategory);
}
}
public void addCategorySelectionListener(CategorySelectionListener listener) {
listenerList.add(listener);
}
public void removeCategorySelectionListener(CategorySelectionListener listener) {
listenerList.remove(listener);
}
private void fireCategorySelected(MenuCategory foodCategory) {
for (CategorySelectionListener listener : listenerList) {
listener.categorySelected(foodCategory);
}
}
public void setSelectedCategory(MenuCategory category) {
CategoryButton button = buttonMap.get(String.valueOf(category.getId()));
if(button != null) {
button.setSelected(true);
}
}
private static class CategoryButton extends POSToggleButton {
MenuCategory foodCategory;
private final static Dimension buttonDimension = new Dimension(120, 55);;
CategoryButton(CategoryView view, MenuCategory foodCategory) {
this.foodCategory = foodCategory;
setText(foodCategory.getName());
setPreferredSize(buttonDimension);
addActionListener(view);
}
}
public void actionPerformed(ActionEvent e) {
CategoryButton button = (CategoryButton) e.getSource();
if(button.isSelected()) {
fireCategorySelected(button.foodCategory);
}
}
public void cleanup() {
Collection<CategoryButton> buttons = buttonMap.values();
for (CategoryButton button : buttons) {
button.removeActionListener(this);
}
buttonMap.clear();
logger.debug("Cleared category buttons");
}
private static Logger logger = Logger.getLogger(MenuItemView.class);
@Override
public void doGoBack() {
}
}