Lines 30-38
Link Here
|
30 |
import java.awt.event.ActionListener; |
30 |
import java.awt.event.ActionListener; |
31 |
import java.io.PrintWriter; |
31 |
import java.io.PrintWriter; |
32 |
import java.io.StringWriter; |
32 |
import java.io.StringWriter; |
|
|
33 |
import java.lang.reflect.ParameterizedType; |
34 |
import java.lang.reflect.Type; |
33 |
import java.util.ArrayList; |
35 |
import java.util.ArrayList; |
34 |
import java.util.ResourceBundle; |
36 |
import java.util.ResourceBundle; |
|
|
37 |
import java.util.concurrent.Callable; |
38 |
import java.util.logging.Handler; |
35 |
import java.util.logging.Level; |
39 |
import java.util.logging.Level; |
|
|
40 |
import java.util.logging.Logger; |
36 |
import javax.swing.Icon; |
41 |
import javax.swing.Icon; |
37 |
import javax.swing.ImageIcon; |
42 |
import javax.swing.ImageIcon; |
38 |
import javax.swing.JButton; |
43 |
import javax.swing.JButton; |
Lines 47-52
Link Here
|
47 |
import org.openide.DialogDisplayer; |
52 |
import org.openide.DialogDisplayer; |
48 |
import org.openide.NotifyDescriptor; |
53 |
import org.openide.NotifyDescriptor; |
49 |
import org.openide.awt.Mnemonics; |
54 |
import org.openide.awt.Mnemonics; |
|
|
55 |
import org.openide.util.Exceptions; |
50 |
import org.openide.util.NbBundle; |
56 |
import org.openide.util.NbBundle; |
51 |
import org.openide.util.Utilities; |
57 |
import org.openide.util.Utilities; |
52 |
import org.openide.windows.WindowManager; |
58 |
import org.openide.windows.WindowManager; |
Lines 133-143
Link Here
|
133 |
descriptor = new DialogDescriptor ("", ""); // NOI18N |
139 |
descriptor = new DialogDescriptor ("", ""); // NOI18N |
134 |
|
140 |
|
135 |
descriptor.setMessageType (DialogDescriptor.ERROR_MESSAGE); |
141 |
descriptor.setMessageType (DialogDescriptor.ERROR_MESSAGE); |
136 |
descriptor.setOptions (new Object[] { |
142 |
descriptor.setOptions (computeOptions(previous, next)); |
137 |
previous, |
|
|
138 |
next, |
139 |
DialogDescriptor.OK_OPTION |
140 |
}); |
141 |
descriptor.setAdditionalOptions (new Object[] { |
143 |
descriptor.setAdditionalOptions (new Object[] { |
142 |
details |
144 |
details |
143 |
}); |
145 |
}); |
Lines 160-165
Link Here
|
160 |
dialog.getAccessibleContext().setAccessibleDescription(bundle.getString("ACD_NotifyExcPanel_Dialog")); // NOI18N |
162 |
dialog.getAccessibleContext().setAccessibleDescription(bundle.getString("ACD_NotifyExcPanel_Dialog")); // NOI18N |
161 |
} |
163 |
} |
162 |
|
164 |
|
|
|
165 |
static Object[] computeOptions(Object previous, Object next) { |
166 |
ArrayList<Object> arr = new ArrayList<java.lang.Object>(); |
167 |
arr.add(previous); |
168 |
arr.add(next); |
169 |
|
170 |
for (Handler h : Logger.getLogger("").getHandlers()) { |
171 |
if (h instanceof Callable<?>) { |
172 |
boolean foundCallableForJButton = false; |
173 |
for (Type t : h.getClass().getGenericInterfaces()) { |
174 |
if (t instanceof ParameterizedType) { |
175 |
ParameterizedType p = (ParameterizedType)t; |
176 |
Type[] params = p.getActualTypeArguments(); |
177 |
if (params.length == 1 && params[0] == JButton.class) { |
178 |
foundCallableForJButton = true; |
179 |
break; |
180 |
} |
181 |
} |
182 |
} |
183 |
if (!foundCallableForJButton) { |
184 |
continue; |
185 |
} |
186 |
|
187 |
|
188 |
try { |
189 |
Object o = ((Callable<?>)h).call(); |
190 |
assert o instanceof JButton; |
191 |
arr.add(o); |
192 |
} catch (Exception ex) { |
193 |
Exceptions.printStackTrace(ex); |
194 |
} |
195 |
} |
196 |
} |
197 |
|
198 |
arr.add(DialogDescriptor.OK_OPTION); |
199 |
return arr.toArray(); |
200 |
} |
201 |
|
163 |
private static boolean isModalDialogPresent() { |
202 |
private static boolean isModalDialogPresent() { |
164 |
return hasModalDialog(WindowManager.getDefault().getMainWindow()) |
203 |
return hasModalDialog(WindowManager.getDefault().getMainWindow()) |
165 |
// XXX Trick to get the shared frame instance. |
204 |
// XXX Trick to get the shared frame instance. |