1 27 28 package org.nightlabs.editor2d.rulers; 29 30 import java.beans.PropertyChangeEvent ; 31 import java.beans.PropertyChangeListener ; 32 import java.util.ArrayList ; 33 import java.util.List ; 34 35 import org.eclipse.gef.commands.Command; 36 import org.eclipse.gef.rulers.RulerChangeListener; 37 import org.eclipse.gef.rulers.RulerProvider; 38 39 import org.nightlabs.editor2d.EditorGuide; 40 import org.nightlabs.editor2d.EditorRuler; 41 import org.nightlabs.editor2d.command.CreateGuideCommand; 42 import org.nightlabs.editor2d.command.DeleteGuideCommand; 43 import org.nightlabs.editor2d.command.MoveGuideCommand; 44 45 46 public class EditorRulerProvider 47 extends RulerProvider 48 { 49 private EditorRuler ruler; 50 private PropertyChangeListener rulerListener = new PropertyChangeListener () { 51 public void propertyChange(PropertyChangeEvent evt) { 52 if (evt.getPropertyName().equals(EditorRuler.PROPERTY_CHILDREN)) { 53 EditorGuide guide = (EditorGuide)evt.getNewValue(); 54 if (getGuides().contains(guide)) { 55 guide.addPropertyChangeListener(guideListener); 56 } else { 57 guide.removePropertyChangeListener(guideListener); 58 } 59 for (int i = 0; i < listeners.size(); i++) { 60 ((RulerChangeListener)listeners.get(i)) 61 .notifyGuideReparented(guide); 62 } 63 } else { 64 for (int i = 0; i < listeners.size(); i++) { 65 ((RulerChangeListener)listeners.get(i)) 66 .notifyUnitsChanged(ruler.getUnit()); 67 } 68 } 69 } 70 }; 71 private PropertyChangeListener guideListener = new PropertyChangeListener () { 72 public void propertyChange(PropertyChangeEvent evt) { 73 if (evt.getPropertyName().equals(EditorGuide.PROPERTY_CHILDREN)) { 74 for (int i = 0; i < listeners.size(); i++) { 75 ((RulerChangeListener)listeners.get(i)) 76 .notifyPartAttachmentChanged(evt.getNewValue(), evt.getSource()); 77 } 78 } else { 79 for (int i = 0; i < listeners.size(); i++) { 80 ((RulerChangeListener)listeners.get(i)) 81 .notifyGuideMoved(evt.getSource()); 82 } 83 } 84 } 85 }; 86 87 public EditorRulerProvider(EditorRuler ruler) { 88 this.ruler = ruler; 89 this.ruler.addPropertyChangeListener(rulerListener); 90 List guides = getGuides(); 91 for (int i = 0; i < guides.size(); i++) { 92 ((EditorGuide)guides.get(i)).addPropertyChangeListener(guideListener); 93 } 94 } 95 96 public List getAttachedModelObjects(Object guide) { 97 return new ArrayList (((EditorGuide)guide).getParts()); 98 } 99 100 public Command getCreateGuideCommand(int position) { 101 return new CreateGuideCommand(ruler, position); 102 } 103 104 public Command getDeleteGuideCommand(Object guide) { 105 return new DeleteGuideCommand((EditorGuide)guide, ruler); 106 } 107 108 public Command getMoveGuideCommand(Object guide, int pDelta) { 109 return new MoveGuideCommand((EditorGuide)guide, pDelta); 110 } 111 112 public int[] getGuidePositions() { 113 List guides = getGuides(); 114 int[] result = new int[guides.size()]; 115 for (int i = 0; i < guides.size(); i++) { 116 result[i] = ((EditorGuide)guides.get(i)).getPosition(); 117 } 118 return result; 119 } 120 121 public Object getRuler() { 122 return ruler; 123 } 124 125 public int getUnit() { 126 return ruler.getUnit(); 127 } 128 129 public void setUnit(int newUnit) { 130 ruler.setUnit(newUnit); 131 } 132 133 public int getGuidePosition(Object guide) { 134 return ((EditorGuide)guide).getPosition(); 135 } 136 137 public List getGuides() { 138 return ruler.getGuides(); 139 } 140 141 } 142 | Popular Tags |