1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
package com.intellij.openapi.diff.impl.dir;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.FrameWrapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public abstract class FrameDialogWrapper {
public enum Mode {FRAME, MODAL, NON_MODAL}
@NotNull
protected abstract JComponent getPanel();
@Nullable
protected String getDimensionServiceKey() {
return null;
}
@Nullable
protected JComponent getPreferredFocusedComponent() {
return null;
}
@Nullable
protected String getTitle() {
return null;
}
@Nullable
protected Project getProject() {
return null;
}
@NotNull
protected Mode getMode() {
return Mode.MODAL;
}
public void show() {
switch (getMode()) {
case FRAME:
new MyFrameWrapper(getProject(), getMode(), getPanel(), getPreferredFocusedComponent(), getTitle(), getDimensionServiceKey())
.show();
return;
case MODAL:
case NON_MODAL:
new MyDialogWrapper(getProject(), getMode(), getPanel(), getPreferredFocusedComponent(), getTitle(), getDimensionServiceKey())
.show();
return;
default:
throw new IllegalArgumentException(getMode().toString());
}
}
private static class MyDialogWrapper extends DialogWrapper {
private final JComponent myComponent;
private final JComponent myPreferredFocusedComponent;
private final String myDimensionServiceKey;
public MyDialogWrapper(@Nullable Project project,
@NotNull Mode mode,
@NotNull JComponent component,
@Nullable JComponent preferredFocusedComponent,
@Nullable String title,
@Nullable String dimensionServiceKey) {
super(project, true);
myComponent = component;
myPreferredFocusedComponent = preferredFocusedComponent;
myDimensionServiceKey = dimensionServiceKey;
if (title != null) {
setTitle(title);
}
switch (mode) {
case MODAL:
setModal(true);
break;
case NON_MODAL:
setModal(false);
break;
default:
throw new IllegalArgumentException(mode.toString());
}
init();
}
@Override
protected JComponent createCenterPanel() {
return myComponent;
}
@Nullable
@Override
public JComponent getPreferredFocusedComponent() {
return myPreferredFocusedComponent;
}
@Nullable
@Override
protected String getDimensionServiceKey() {
return myDimensionServiceKey;
}
// it is information dialog - no need to OK or Cancel. Close the dialog by clicking the cross button or pressing Esc.
@NotNull
@Override
protected Action[] createActions() {
return new Action[0];
}
}
private static class MyFrameWrapper extends FrameWrapper {
public MyFrameWrapper(@Nullable Project project,
@NotNull Mode mode,
@NotNull JComponent component,
@Nullable JComponent preferredFocusedComponent,
@Nullable String title,
@Nullable String dimensionServiceKey) {
super(project, dimensionServiceKey);
assert mode == Mode.FRAME;
if (title != null) {
setTitle(title);
}
setComponent(component);
setPreferredFocusedComponent(preferredFocusedComponent);
closeOnEsc();
}
}
}
|