1 package org.catacomb.druid.swing.dnd;
2
3 import org.catacomb.druid.swing.DTextCanvas;
4 import org.catacomb.interlish.structure.ChangeNotifiable;
5 import org.catacomb.report.E;
6
7
8 import java.awt.Color;
9 import java.awt.Graphics2D;
10 import java.awt.dnd.DnDConstants;
11 import java.awt.event.FocusEvent;
12 import java.awt.event.FocusListener;
13
14
15 public class RegionBoard implements FocusListener, RegionListener {
16
17 protected DTextCanvas canvas;
18
19 ChangeNotifiable changeNotifiable;
20
21 private ClickableRegionStore crStore;
22
23 boolean inFocus;
24
25 RegionDropTarget dropTarget;
26 RegionDragSource dragSource;
27
28 protected int fullTextHeight = 100;
29
30
31
32 public RegionBoard(DTextCanvas c) {
33 super();
34 canvas = c;
35
36 crStore = new ClickableRegionStore(c);
37 crStore.setRegionListener(this);
38
39 canvas.addFocusListener(this);
40
41 dropTarget = new RegionDropTarget(this);
42
43
44 dragSource = new RegionDragSource(this, DnDConstants.ACTION_COPY_OR_MOVE);
45
46 canvas.setTransferHandler(new InternalTransferHandler());
47 }
48
49
50 public DTextCanvas getCanvas() {
51 return canvas;
52 }
53
54
55
56 public void clearRegions() {
57 crStore.clear();
58 }
59
60 public void requestFocus() {
61 canvas.requestFocusInWindow();
62 }
63
64
65 public void setAntialias(boolean b) {
66 canvas.setAntialias(b);
67 }
68
69 public void repaint() {
70 canvas.repaint();
71 }
72
73 public int getWidth() {
74 return canvas.getWidth();
75 }
76
77 public int getHeight() {
78 return canvas.getHeight();
79 }
80
81 public void setChangeNotifiable(ChangeNotifiable cn) {
82 changeNotifiable = cn;
83 }
84
85 public void notifyChange(Object obj) {
86 if (changeNotifiable != null) {
87 changeNotifiable.changed(obj);
88 }
89 }
90
91
92 public void prePaintRegions(Graphics2D g) {
93 if (inFocus) {
94 g.setColor(Color.white);
95 g.drawRect(1, 1, canvas.getWidth()-2, canvas.getHeight()-2);
96 }
97
98 }
99
100
101
102
103 protected void addLengthenedRegion(int[] cachedPosition, Object b) {
104 crStore.addLengthenedRegion(cachedPosition, b);
105 }
106
107 protected void addClickRegion(int[] xywh, Object b, String s) {
108 crStore.addRegion(xywh, b, s, Region.CLICK);
109 }
110
111
112 protected void addDragRegion(int[] xywh, Object b, String s) {
113 crStore.addRegion(xywh, b, s, Region.DRAG);
114 }
115
116 protected void addDropRegion(int[] xywh, Object b, String s) {
117 crStore.addRegion(xywh, b, s, Region.DROP);
118 }
119
120 protected void addDragOrDropRegion(int[] xywh, Object b, String s) {
121 crStore.addRegion(xywh, b, s, Region.DRAG_OR_DROP);
122 }
123
124 protected void addRegion(int x, int y, int w, int h, Object obj, String s) {
125 crStore.addRegion(x, y, w, h, obj, s, Region.CLICK);
126
127 }
128
129 protected void addRegion(int x, int y, int w, int h, Object obj, String s, int ity) {
130 crStore.addRegion(x, y, w, h, obj, s, ity);
131
132 }
133
134
135 public Region getDragOverRegion(int x, int y) {
136 crStore.dragOver(x, y);
137 return crStore.getDragOverRegion();
138 }
139
140
141 public Region getDragOverRegion() {
142 return crStore.getDragOverRegion();
143 }
144
145
146 public void dropOn(Object src, Region target) {
147 E.info("item dropped on region " + src + " " + target);
148
149 }
150
151
152 public void regionClicked(Region reg) {
153 E.override("click regoin " + reg);
154 }
155
156
157 boolean hasFocus() {
158 return inFocus;
159 }
160
161 public void focusGained(FocusEvent e) {
162 inFocus = true;
163 repaint();
164 }
165
166
167 public void focusLost(FocusEvent e) {
168 inFocus = false;
169 repaint();
170 }
171
172
173 public Region getHoverRegion() {
174 return crStore.getHoverRegion();
175 }
176
177
178 public void unecho(Region reg) {
179 crStore.unecho(reg);
180 }
181
182 public void dropGeneral(Object dropee) {
183 E.override();
184
185 }
186
187
188 public int getFullTextHeight() {
189 return fullTextHeight;
190 }
191
192
193 }