1 package org.simantics.db.procore.ui.internal;
\r
3 import org.eclipse.jface.dialogs.MessageDialog;
\r
4 import org.eclipse.swt.widgets.Display;
\r
5 import org.eclipse.swt.widgets.Shell;
\r
6 import org.simantics.db.common.utils.Logger;
\r
9 static void showInfo(Shell shell, String message) {
\r
10 MessageDialog.openInformation(shell, "Information", message);
\r
12 static void showWarning(Shell shell, String message) {
\r
13 MessageDialog.openWarning(shell, "Warning", message);
\r
15 public static void showError(Shell shell, String message) {
\r
16 Util.showError(shell, message, null);
\r
18 static void showError(Shell shell, String message, Throwable t) {
\r
19 Logger.defaultLogError(message, t);
\r
21 message += "\n" + t.getMessage();
\r
22 MessageDialog.openError(shell, "Error", message);
\r
24 public static void logError(String message) {
\r
25 Util.logError(message, null);
\r
27 public static void logError(String message, Throwable cause) {
\r
28 Logger.defaultLogError(message, cause);
\r
30 public static void trace(Class<?> clazz) {
\r
33 public static void trace(String message) {
\r
34 trace(null, message);
\r
36 public static void trace(Class<?> clazz, String message) {
\r
39 s += clazz.getSimpleName() + " called.\n";
\r
40 if (null != message)
\r
42 Logger.defaultLogTrace(s);
\r
44 private static String NL = System.getProperty("line.separator");
\r
45 static class Choice {
\r
46 public Choice(String button, String text) {
\r
47 this.button = button;
\r
50 public String button;
\r
53 public static int select(final Shell shell, final String title, String message, Choice[] choices, int def) {
\r
54 assert(choices.length > 0);
\r
55 if (def < 0 || def >= choices.length)
\r
57 final String[] labels = new String[choices.length];
\r
58 final StringBuilder sb = new StringBuilder(message.length() + 256);
\r
60 for (int i=0; i<labels.length; ++ i) {
\r
61 labels[i] = choices[i].button;
\r
62 sb.append(NL + NL + choices[i].text);
\r
64 if (Display.getDefault().getThread() == Thread.currentThread())
\r
65 return select(shell, title, sb.toString(), labels, def);
\r
66 class SelectRunnable implements Runnable {
\r
69 SelectRunnable(int def) {
\r
73 ret = select(shell, title, sb.toString(), labels, def);
\r
76 SelectRunnable sr = new SelectRunnable(def);
\r
77 Display.getDefault().syncExec(sr);
\r
80 private static int select(Shell shell, String title, String message, String[] labels, int def) {
\r
81 MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, labels, def);
\r
82 int answer = dialog.open();
\r
83 if (answer < 0 || answer >= labels.length)
\r
87 public static boolean confirm(Shell shell, String title, String message) {
\r
88 String[] labels = new String[2];
\r
91 MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, labels, 1);
\r
92 int answer = dialog.open();
\r
95 public static boolean openDefaultNo(Shell shell, String title, String message, int style) {
\r
96 String[] labels = new String[2];
\r
99 MessageDialog dialog = new MessageDialog(shell, title, null, message, style, labels, 1);
\r
100 int answer = dialog.open();
\r
101 return answer == 0;
\r
103 public static String getMessage(Throwable t) {
\r
104 StringBuilder s = new StringBuilder(t.getMessage());
\r
105 final int LIMIT = 10;
\r
107 for (Throwable c = t.getCause(); null != c && i < LIMIT; ++i, c = c.getCause())
\r
108 s.append(NL + "cause: " + c.getMessage());
\r
109 return s.toString();
\r