Skip to content

Commit a85f81c

Browse files
committed
Added methods to SwtDebug for dumping events.
1 parent 841d999 commit a85f81c

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed

durian-swt/src/main/java/com/diffplug/common/swt/SwtDebug.java

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,128 @@
3333
import java.util.stream.Stream;
3434
import javax.annotation.Nullable;
3535
import org.eclipse.swt.SWT;
36+
import org.eclipse.swt.dnd.DND;
37+
import org.eclipse.swt.dnd.DropTargetEvent;
38+
import org.eclipse.swt.dnd.DropTargetListener;
3639
import org.eclipse.swt.widgets.Event;
3740
import org.eclipse.swt.widgets.Widget;
3841

3942
/**
4043
* Helpful utilities for debugging SWT.
4144
*/
4245
public class SwtDebug {
46+
/** Dumps the given SWT event to System.out. */
47+
public static void dumpEvent(String name, @Nullable DropTargetEvent e) {
48+
dumpEvent(name, e, StringPrinter.systemOut());
49+
}
50+
51+
/** Dumps the given SWT event to the given StringPrinter. */
52+
public static void dumpEvent(String name, @Nullable DropTargetEvent e, StringPrinter to) {
53+
if (e == null) {
54+
to.println(name + ": null");
55+
return;
56+
}
57+
to.println(name + " (x, y): " + e.x + ", " + e.y);
58+
if (e.data != null) {
59+
to.println("\tdata: " + e.data);
60+
}
61+
if (e.item != null) {
62+
to.println("\titem: " + e.item);
63+
}
64+
if (e.currentDataType != null) {
65+
to.println("\tcurrentDataType: " + e.currentDataType);
66+
}
67+
if (e.dataTypes != null) {
68+
to.println("\tdataTypes: " + Arrays.asList(e.dataTypes));
69+
}
70+
to.println("\tdetail: " + Flag.toString(Detail.class, e.detail));
71+
to.println("\toperations: " + Flag.toString(Detail.class, e.operations));
72+
to.println("\tfeedback: " + Flag.toString(Feedback.class, e.feedback));
73+
}
74+
75+
/** A DropTargetListener which dumps events. */
76+
public static DropTargetListener dumpEventsDropListener() {
77+
return new DropTargetListener() {
78+
@Override
79+
public void dragEnter(DropTargetEvent event) {
80+
SwtDebug.dumpEvent("dragEnter", event);
81+
}
82+
83+
@Override
84+
public void dragLeave(DropTargetEvent event) {
85+
SwtDebug.dumpEvent("dragLeave", event);
86+
}
87+
88+
@Override
89+
public void dragOperationChanged(DropTargetEvent event) {
90+
SwtDebug.dumpEvent("dragOperationChanged", event);
91+
}
92+
93+
@Override
94+
public void dragOver(DropTargetEvent event) {
95+
SwtDebug.dumpEvent("dragOver", event);
96+
}
97+
98+
@Override
99+
public void drop(DropTargetEvent event) {
100+
SwtDebug.dumpEvent("drop", event);
101+
}
102+
103+
@Override
104+
public void dropAccept(DropTargetEvent event) {
105+
SwtDebug.dumpEvent("dropAccept", event);
106+
}
107+
};
108+
}
109+
110+
interface Flag<T extends Enum<T>> {
111+
int flag();
112+
113+
static String toString(Class<? extends Enum<?>> clazz, int flag) {
114+
Enum<?>[] flags = clazz.getEnumConstants();
115+
if (flag == 0) {
116+
return flags[0].name();
117+
}
118+
return Arrays.stream(flags).skip(1)
119+
.filter(flagValue -> {
120+
int flagBit = ((Flag<?>) flagValue).flag();
121+
return (flagBit & flag) == flagBit;
122+
})
123+
.map(Enum::name)
124+
.collect(Collectors.joining(" | "));
125+
}
126+
}
127+
128+
enum Detail implements Flag<Detail> {
129+
DROP_NONE(DND.DROP_NONE), DROP_MOVE(DND.DROP_MOVE), DROP_COPY(DND.DROP_COPY), DROP_LINK(DND.DROP_LINK), DROP_TARGET_MOVE(DND.DROP_TARGET_MOVE), DROP_DEFAULT(DND.DROP_DEFAULT);
130+
131+
private final int flag;
132+
133+
Detail(int flag) {
134+
this.flag = flag;
135+
}
136+
137+
@Override
138+
public int flag() {
139+
return flag;
140+
}
141+
}
142+
143+
enum Feedback implements Flag<Feedback> {
144+
FEEDBACK_NONE(DND.FEEDBACK_NONE), FEEDBACK_SELECT(DND.FEEDBACK_SELECT), FEEDBACK_INSERT_BEFORE(DND.FEEDBACK_INSERT_BEFORE), FEEDBACK_INSERT_AFTER(DND.FEEDBACK_INSERT_AFTER), FEEDBACK_SCROLL(DND.FEEDBACK_SCROLL), FEEDBACK_EXPAND(DND.FEEDBACK_EXPAND);
145+
146+
private final int flag;
147+
148+
Feedback(int flag) {
149+
this.flag = flag;
150+
}
151+
152+
@Override
153+
public int flag() {
154+
return flag;
155+
}
156+
}
157+
43158
/** Dumps the given SWT event to System.out. */
44159
public static void dumpEvent(String name, @Nullable Event e) {
45160
dumpEvent(name, e, StringPrinter.systemOut());

0 commit comments

Comments
 (0)