1 11 package mondrian.gui; 12 13 import java.awt.Component ; 14 import java.awt.event.MouseEvent ; 15 import java.util.ArrayList ; 16 import java.util.EventObject ; 17 import java.util.ResourceBundle ; 18 import javax.swing.ImageIcon ; 19 import javax.swing.JComboBox ; 20 import javax.swing.JTree ; 21 import javax.swing.event.CellEditorListener ; 22 import javax.swing.event.ChangeEvent ; 23 import javax.swing.tree.DefaultTreeCellRenderer ; 24 import javax.swing.tree.TreeCellEditor ; 25 import javax.swing.tree.TreePath ; 26 27 32 public class SchemaTreeCellEditor extends javax.swing.tree.DefaultTreeCellEditor { 33 34 private final ClassLoader myClassLoader; 35 JComboBox listEditor; 36 ArrayList listeners; 37 private final ResourceBundle resources; 38 39 40 public SchemaTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer, TreeCellEditor editor) { 41 super(tree, renderer, editor); 42 listeners = new ArrayList (); 43 myClassLoader = this.getClass().getClassLoader(); 44 resources = ResourceBundle.getBundle("mondrian.gui.resources.gui"); 45 renderer.setLeafIcon(new ImageIcon (myClassLoader.getResource(resources.getString("table")))); 46 renderer.setOpenIcon(new ImageIcon (myClassLoader.getResource(resources.getString("join")))); 47 renderer.setClosedIcon(new ImageIcon (myClassLoader.getResource(resources.getString("join")))); 48 49 60 61 } 62 63 public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { 64 Component retValue=null; 65 66 67 if (value instanceof MondrianGuiDef.Relation) { 68 String valueClass = value.getClass().getName(); 69 String simpleName[] = valueClass.split("[$.]",0); 70 71 retValue = super.getTreeCellEditorComponent(tree, simpleName[simpleName.length-1], isSelected, expanded, leaf, row); 72 77 83 } 84 85 return retValue; 86 } 87 88 public boolean isCellEditable(EventObject event) { 89 boolean editable; 90 92 if (event != null) { 93 if (event.getSource() instanceof JTree ) { 94 if (event instanceof MouseEvent ) { 95 TreePath path = tree.getPathForLocation( 96 ((MouseEvent )event).getX(), 97 ((MouseEvent )event).getY()); 98 editable = (lastPath != null && path != null && lastPath.equals(path)); 99 if (path!=null) { 100 Object value = path.getLastPathComponent(); 101 TreePath parentPath = path.getParentPath(); 102 Object parent = (parentPath==null?null:parentPath.getLastPathComponent()); 103 if (value instanceof MondrianGuiDef.Relation && (parent instanceof MondrianGuiDef.Hierarchy || parent instanceof MondrianGuiDef.Relation)) { 104 if(((MouseEvent )event).getClickCount() == 2) { 107 return true; 108 } 109 return false; 110 } else { 111 return false; 112 } 113 } 114 } 115 } 116 } 117 return false; 118 } 119 120 public Object getCellEditorValue() { 121 Object retValue; 122 123 retValue = super.getCellEditorValue(); 124 135 return retValue; 136 } 137 138 139 protected void fireEditingStopped() { 140 ChangeEvent ce = new ChangeEvent (this); 141 for (int i = listeners.size() - 1; i >= 0; i--) { 142 ((CellEditorListener )listeners.get(i)).editingStopped(ce); 143 } 144 } 145 146 public void addCellEditorListener(CellEditorListener l) { 147 listeners.add(l); 148 } 149 150 public void removeCellEditorListener(CellEditorListener l) { 151 listeners.remove(l); 152 } 153 154 public void setValueAt(JTree tree) { 155 String retValue; 156 MondrianGuiDef.Relation relationObj=null; 157 158 retValue = (String ) getCellEditorValue(); 159 if (retValue.equals("Join")) { 160 relationObj= new MondrianGuiDef.Join("","",new MondrianGuiDef.Table("","Table 1",""), "", "", new MondrianGuiDef.Table("","Table 2","")); 161 } else if (retValue.equals("Table")) { 162 relationObj= new MondrianGuiDef.Table("","Table",""); 163 164 } 165 166 TreePath tpath = tree.getSelectionPath(); 167 if (tpath != null) { 168 Object value = tpath.getLastPathComponent(); 169 TreePath parentpath = tpath.getParentPath(); 170 if (parentpath != null) { 171 Object parent = parentpath.getLastPathComponent(); 172 if (parent instanceof MondrianGuiDef.Hierarchy) { 173 ((MondrianGuiDef.Hierarchy) parent).relation = relationObj; 174 } else if (parent instanceof MondrianGuiDef.Closure) { 175 ((MondrianGuiDef.Closure) parent).table = (MondrianGuiDef.Table)relationObj; 176 } else if (parent instanceof MondrianGuiDef.Join) { 177 int indexOfChild = tree.getModel().getIndexOfChild(parent, value); 178 switch (indexOfChild) { 179 case 0: ((MondrianGuiDef.Join) parent).left = relationObj; break; 180 case 1: ((MondrianGuiDef.Join) parent).right = relationObj; break; 181 } 182 } 183 tree.setSelectionPath(parentpath.pathByAddingChild(relationObj)); 184 } 185 } 186 } 187 188 public boolean stopCellEditing() { 189 boolean retValue; 190 191 setValueAt(super.tree); 192 retValue = super.stopCellEditing(); 193 return retValue; 194 } 195 } 196 197 | Popular Tags |