// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.ui.components.gpropertyeditor; import graphtea.platform.attribute.AttributeListener; import graphtea.platform.attribute.NotifiableAttributeSet; import graphtea.ui.AttributeSetView; import graphtea.ui.NotifiableAttributeSetView; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import java.util.HashMap; /** * Author: azin azadi */ public class ProEditor2NotifiableAttributeSetConnector implements AttributeListener, TableModelListener { private GPropertyTableModel model; GPropertyEditor editor; private NotifiableAttributeSet atr; public ProEditor2NotifiableAttributeSetConnector(GPropertyEditor editor) { this.model = editor.model; this.editor = editor; model.addTableModelListener(this); } public void connect(NotifiableAttributeSet atr) { // if (!atr.equals(this.atr)) { this.atr = atr; load(); // } } private void load() { if (this.atr != null) this.atr.removeAttributeListener(this); this.load(atr); atr.addAttributeListener(this); iChangedTheAtr = false; } public void attributeUpdated(String name, Object oldVal, Object newVal) { //System.out.println(newVal); if (newVal != null && !newVal.equals(oldVal)) { iChangedTheAtr = true; model.setValue(name, newVal); editor.updateUI(); } } boolean iChangedTheAtr = false; public void tableChanged(TableModelEvent e) { if (atr != null && !iChangedTheAtr) if (e.getType() == TableModelEvent.UPDATE) { int i = e.getFirstRow(); if (i != -1) { String name = keyByRow.get(i); Object value = model.getValueAt(i, 1); atr.put(name, value); } } iChangedTheAtr = false; } HashMap<Integer, String> keyByRow = new HashMap<>(); public void load(NotifiableAttributeSet x) { if (x instanceof NotifiableAttributeSetView) editor.target = (NotifiableAttributeSetView) x; else { editor.def.getView().setAttribute(x); editor.target = editor.def; } reset(); AttributeSetView attributes = editor.target.getView(); editor.editor.setAtrView(attributes); editor.renderer.setAtrView(attributes); load(attributes); editor.validate(); editor.updateUI(); } private void reset() { editor.model.clear(); editor.editor.cancelCellEditing(); keyByRow.clear(); } private void load(AttributeSetView xatr) { String[] names = xatr.getNames(); int i = 0; for (String key : names) { if (xatr.isVisible(key)) { iChangedTheAtr = true; keyByRow.put(i++, key); // hooman: kaht be khat reporta add mishan editor.model.addData(xatr.getDisplayName(key), xatr.getAttribute().get(key)); //xatr.getCategory(name) //hooman: inja baiad aval sort koni, ezafe koni, be ezaie har category ham ie satr ezafe koni } } } }