package com.pixelmaid.dresscode.app; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.net.URL; import javax.swing.AbstractCellEditor; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTree; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellEditor; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import com.pixelmaid.dresscode.app.ui.ButtonCellRenderer; import com.pixelmaid.dresscode.data.Stamp; import com.pixelmaid.dresscode.events.CustomEvent; public class StampManager extends TreeManager { private String selectedNode; public StampManager(Color bg, Color fg){ super(bg,fg); top = new DefaultMutableTreeNode("untitled"); // createNodes(top); tree = new JTree(top); tree.setLayout(new BorderLayout()); tree.setRowHeight(20); tree.setEditable(true); tree.setCellRenderer(new ButtonCellRenderer(bg,fg)); tree.setCellEditor(new ButtonCellEditor()); tree.setBackground(bg); // retrieve the HashMap of Default properties. UIDefaults uiDefs = UIManager.getDefaults(); uiDefs.put("Tree.leftChildIndent" , new Integer( 0 ) ); } public void addChild(Stamp s){ String name = s.getFunctionName(); //StampNode node= new StampNode(name, "stamp" ); DefaultMutableTreeNode child = new DefaultMutableTreeNode(name); top.add(child); tree.updateUI(); } public void clearChildren(){ top.removeAllChildren(); DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); model.reload(top); tree.updateUI(); } public void updateLabel(String label){ this.top.setUserObject(label); tree.updateUI(); } private void singleClick(String s) { selectedNode = s; System.out.println("top value:"+top.getUserObject().toString()); if(selectedNode == (top.getUserObject()).toString()){ this.fireToolEvent(CustomEvent.MAIN_SELECTED); } else{ this.fireToolEvent(CustomEvent.STAMP_SELECTED); } } private void buttonClick(String s) { selectedNode = s; this.fireToolEvent(CustomEvent.STAMP_INSERTED); } public String getSelectedNode(){ return selectedNode; } public void selectMainNode(){ this.tree.setSelectionRow(0); } public class ButtonCellEditor extends AbstractCellEditor implements TreeCellEditor, ActionListener, MouseListener { /** * */ private static final long serialVersionUID = 1L; private JButton button; private JLabel label; private JPanel panel; private Object value; private JTree tree; public ButtonCellEditor(){ FlowLayout b = new FlowLayout(); b.setAlignment(FlowLayout.RIGHT); b.setVgap(0); b.setHgap(10); panel = new JPanel(b); button = new JButton("+"); button.setPreferredSize(new Dimension(15,15)); button.addMouseListener(this); label = new JLabel(); label.setFont(new Font("Helvetica", Font.PLAIN, 12)); label.addMouseListener(this); panel.add(button); panel.add(label); } @Override public Object getCellEditorValue(){ return value.toString(); } public void removeButton(){ button.setVisible(false); } @Override public void actionPerformed(ActionEvent e){ } @Override public Component getTreeCellEditorComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row){ this.value = value; this.tree = tree; label.setText(value.toString()); if(selected){ panel.setBackground(fg); } else{ panel.setBackground(bg); } return panel; } @Override public void mouseClicked(MouseEvent e){ } @Override public void mousePressed(MouseEvent e){ String val = value.toString(); stopCellEditing(); //tree.updateUI(); } @Override public void mouseReleased(MouseEvent e){ String val = value.toString(); if(e.getSource()==button){ buttonClick(val); } else if (e.getSource()==label){ singleClick(val); } stopCellEditing(); // tree.updateUI(); } @Override public void mouseEntered(MouseEvent e){ } @Override public void mouseExited(MouseEvent e){ } } }