001 // GraphLab Project: http://graphlab.sharif.edu 002 // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology 003 // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ 004 package graphlab.plugins.main.core.actions; 005 006 import graphlab.graph.graph.GraphModel; 007 import graphlab.ui.components.gpropertyeditor.EditingFinishedListener; 008 import graphlab.ui.components.gpropertyeditor.GBasicCellEditor; 009 import graphlab.ui.components.gpropertyeditor.editors.GColorEditor; 010 011 import javax.swing.*; 012 import java.awt.*; 013 import java.awt.event.ActionEvent; 014 import java.awt.event.ActionListener; 015 import java.awt.event.MouseEvent; 016 import java.awt.event.MouseListener; 017 018 019 /** 020 * author: Azin Azadi 021 * Email: 022 */ 023 public class GMergedColorEditor implements GBasicCellEditor<Integer>, ActionListener, EditingFinishedListener, MouseListener, ListCellRenderer { 024 JComboBox c; 025 private Integer curVal; 026 private EditingFinishedListener listener; 027 boolean general = true; 028 029 public GMergedColorEditor(boolean vertexColor) { 030 isVertexColor = vertexColor; 031 general = false; 032 } 033 034 boolean isVertexColor; 035 036 public GMergedColorEditor() { 037 general = true; 038 } 039 040 private void createCombo() { 041 c = new JComboBox(); 042 c.addItem("Int Editor"); 043 c.addItem("Color Editor"); 044 045 for (int i = 0; i < 20; i++) { 046 c.addItem(i); 047 } 048 c.addItem(curVal); 049 c.setRenderer(this); 050 c.addActionListener(this); 051 c.setSelectedIndex(c.getItemCount() - 1); 052 } 053 054 public void setEditingFinishedListener(EditingFinishedListener listener) { 055 this.listener = listener; 056 } 057 058 public Component getEditorComponent(Integer value) { 059 this.curVal = value; 060 createCombo(); 061 return c; 062 } 063 064 065 public void cancelEditing() { 066 067 } 068 069 public Object getEditorValue() { 070 if (c.getSelectedItem() instanceof String) { 071 String val = (String) c.getSelectedItem(); 072 if (val.equals("Int Editor")) { 073 try { 074 int v = Integer.parseInt(comp.getText()); 075 return v; 076 } 077 catch (Exception ee) { //it was not a number 078 return curVal; 079 } 080 081 } else if (val.equals("Color Editor")) { 082 Color editorValue = gc.getEditorValue(); 083 return editorValue.getRGB(); 084 } 085 } 086 return c.getSelectedItem(); 087 } 088 089 090 GColorEditor gc; 091 JTextField comp; 092 093 public void actionPerformed(ActionEvent e) { //on combo 094 if (c.getSelectedItem() instanceof String) { 095 String val = (String) c.getSelectedItem(); 096 if (val.equals("Int Editor")) { 097 showIntEditor(); 098 } else if (val.equals("Color Editor")) { 099 showRGBEditor(); 100 } 101 } else { 102 Integer i = (Integer) c.getSelectedItem(); 103 listener.editingFinished(i); 104 } 105 } 106 107 private void showRGBEditor() { 108 gc = new GColorEditor(); 109 gc.getEditorComponent(GraphModel.getColor(curVal)).setVisible(true); 110 gc.setEditingFinishedListener(this); 111 } 112 113 private void showIntEditor() { 114 final JFrame f = new JFrame(); 115 comp = new JTextField(7); 116 f.add(comp); 117 f.pack(); 118 f.setVisible(true); 119 comp.addActionListener(new ActionListener() { 120 public void actionPerformed(ActionEvent e) { 121 String text = comp.getText(); 122 try { 123 int v = Integer.parseInt(text); 124 listener.editingFinished(v); 125 f.setVisible(false); 126 } 127 catch (Exception ee) { //it was not a number 128 comp.setText("" + curVal); 129 } 130 } 131 }); 132 } 133 134 public void editingFinished(Object editorValue) { 135 listener.editingFinished(((Color) editorValue).getRGB()); 136 } 137 138 public void mouseClicked(MouseEvent e) {//this is done because of the bug:4135029 of jdk. see: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4135029 139 if (c.getSelectedIndex() == 0) { 140 showIntEditor(); 141 } 142 if (c.getSelectedIndex() == 1) { 143 showRGBEditor(); 144 } 145 } 146 147 public void mousePressed(MouseEvent e) { 148 } 149 150 public void mouseReleased(MouseEvent e) { 151 } 152 153 public void mouseEntered(MouseEvent e) { 154 } 155 156 public void mouseExited(MouseEvent e) { 157 } 158 159 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 160 if (value instanceof String) { 161 DefaultListCellRenderer d = new DefaultListCellRenderer(); 162 Component c = d.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 163 return c; 164 // String v = (String) value; 165 // if (v.equals("Color Editor")) { 166 // 167 // } else if (v.equals("Int Editor")) { 168 // 169 // } 170 } 171 if (!general) 172 return new GMergedColorRenderer().getRendererComponent(value, isVertexColor); 173 else 174 return new GMergedColorRenderer().getRendererComponent(value); 175 } 176 }