Statistiques
| Révision :

root / tmp / org.txm.libs.javafx / swt / JFXBrowserText.java @ 3161

Historique | Voir | Annoter | Télécharger (5,09 ko)

1 3108 mdecorde
package snippet;
2 3108 mdecorde
3 3108 mdecorde
import java.io.PrintWriter;
4 3108 mdecorde
import java.io.StringWriter;
5 3108 mdecorde
6 3108 mdecorde
import org.eclipse.jface.resource.JFaceResources;
7 3108 mdecorde
import org.eclipse.swt.SWT;
8 3108 mdecorde
import org.eclipse.swt.custom.BusyIndicator;
9 3108 mdecorde
import org.eclipse.swt.events.SelectionListener;
10 3108 mdecorde
import org.eclipse.swt.graphics.Color;
11 3108 mdecorde
import org.eclipse.swt.graphics.Rectangle;
12 3108 mdecorde
import org.eclipse.swt.layout.GridData;
13 3108 mdecorde
import org.eclipse.swt.layout.GridLayout;
14 3108 mdecorde
import org.eclipse.swt.widgets.Button;
15 3108 mdecorde
import org.eclipse.swt.widgets.Composite;
16 3108 mdecorde
import org.eclipse.swt.widgets.Control;
17 3108 mdecorde
import org.eclipse.swt.widgets.Label;
18 3108 mdecorde
import org.eclipse.swt.widgets.Link;
19 3108 mdecorde
import org.eclipse.swt.widgets.Text;
20 3108 mdecorde
import org.eclipse.ui.internal.browser.FallbackScrolledComposite;
21 3108 mdecorde
import org.eclipse.ui.internal.browser.IBrowserViewerContainer;
22 3108 mdecorde
23 3108 mdecorde
public class JFXBrowserText {
24 3108 mdecorde
25 3108 mdecorde
        private String url;
26 3108 mdecorde
27 3108 mdecorde
        private FallbackScrolledComposite scomp;
28 3108 mdecorde
29 3108 mdecorde
        private Label title;
30 3108 mdecorde
31 3108 mdecorde
        private Label exTitle;
32 3108 mdecorde
33 3108 mdecorde
        private Label text;
34 3108 mdecorde
35 3108 mdecorde
        private Label sep;
36 3108 mdecorde
37 3108 mdecorde
        protected Link link;
38 3108 mdecorde
39 3108 mdecorde
        private JFXBrowserViewer viewer;
40 3108 mdecorde
41 3108 mdecorde
        private Button button;
42 3108 mdecorde
43 3108 mdecorde
        private Text exception;
44 3108 mdecorde
45 3108 mdecorde
        private boolean expanded;
46 3108 mdecorde
47 3108 mdecorde
        private Throwable ex;
48 3108 mdecorde
49 3108 mdecorde
        class ReflowScrolledComposite extends FallbackScrolledComposite {
50 3108 mdecorde
51 3108 mdecorde
                public ReflowScrolledComposite(Composite parent, int style) {
52 3108 mdecorde
                        super(parent, style);
53 3108 mdecorde
                }
54 3108 mdecorde
55 3108 mdecorde
                @Override
56 3108 mdecorde
                public void reflow(boolean flushCache) {
57 3108 mdecorde
                        updateWidth(this);
58 3108 mdecorde
                        super.reflow(flushCache);
59 3108 mdecorde
                }
60 3108 mdecorde
        }
61 3108 mdecorde
62 3108 mdecorde
        public JFXBrowserText(Composite parent, JFXBrowserViewer viewer, Throwable ex) {
63 3108 mdecorde
                this.viewer = viewer;
64 3108 mdecorde
                this.ex = ex;
65 3108 mdecorde
                Color bg = parent.getDisplay()
66 3108 mdecorde
                                .getSystemColor(SWT.COLOR_LIST_BACKGROUND);
67 3108 mdecorde
                scomp = new ReflowScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
68 3108 mdecorde
                Composite client = new Composite(scomp, SWT.NULL);
69 3108 mdecorde
                fillContent(client, bg);
70 3108 mdecorde
                scomp.setContent(client);
71 3108 mdecorde
                scomp.setBackground(bg);
72 3108 mdecorde
        }
73 3108 mdecorde
74 3108 mdecorde
        private void fillContent(Composite parent, Color bg) {
75 3108 mdecorde
                GridLayout layout = new GridLayout();
76 3108 mdecorde
                layout.verticalSpacing = 10;
77 3108 mdecorde
                parent.setLayout(layout);
78 3108 mdecorde
                title = new Label(parent, SWT.WRAP);
79 3108 mdecorde
                title.setText(org.eclipse.ui.internal.browser.Messages.BrowserText_title);
80 3108 mdecorde
                title.setFont(JFaceResources.getHeaderFont());
81 3108 mdecorde
                title.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
82 3108 mdecorde
                title.setBackground(bg);
83 3108 mdecorde
84 3108 mdecorde
                link = new Link(parent, SWT.WRAP);
85 3108 mdecorde
                link.setText(org.eclipse.ui.internal.browser.Messages.BrowserText_link);
86 3108 mdecorde
                link.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
87 3108 mdecorde
                link.setToolTipText(org.eclipse.ui.internal.browser.Messages.BrowserText_tooltip);
88 3108 mdecorde
                link.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
89 3108 mdecorde
                        BusyIndicator.showWhile(link.getDisplay(), () -> doOpenExternal());
90 3108 mdecorde
                }));
91 3108 mdecorde
                link.setBackground(bg);
92 3108 mdecorde
                sep = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
93 3108 mdecorde
                sep.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
94 3108 mdecorde
                exTitle = new Label(parent, SWT.NULL);
95 3108 mdecorde
                exTitle.setBackground(bg);
96 3108 mdecorde
                exTitle.setFont(JFaceResources.getBannerFont());
97 3108 mdecorde
                exTitle.setText(org.eclipse.ui.internal.browser.Messages.BrowserText_dtitle);
98 3108 mdecorde
                exTitle.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
99 3108 mdecorde
                text = new Label(parent, SWT.WRAP);
100 3108 mdecorde
                text.setText(org.eclipse.ui.internal.browser.Messages.BrowserText_text);
101 3108 mdecorde
                text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
102 3108 mdecorde
                text.setBackground(bg);
103 3108 mdecorde
                button = new Button(parent, SWT.PUSH);
104 3108 mdecorde
                updateButtonText();
105 3108 mdecorde
                button.addSelectionListener(SelectionListener.widgetSelectedAdapter(e -> {
106 3108 mdecorde
                        toggleException();
107 3108 mdecorde
                }));
108 3108 mdecorde
                exception = new Text(parent, SWT.MULTI);
109 3108 mdecorde
                loadExceptionText();
110 3108 mdecorde
                GridData gd = new GridData(GridData.FILL_BOTH);
111 3108 mdecorde
                gd.exclude = true;
112 3108 mdecorde
                exception.setLayoutData(gd);
113 3108 mdecorde
        }
114 3108 mdecorde
115 3108 mdecorde
        private void loadExceptionText() {
116 3108 mdecorde
                StringWriter swriter = new StringWriter();
117 3108 mdecorde
                try (PrintWriter writer = new PrintWriter(swriter)) {
118 3108 mdecorde
                        writer.println(ex.getMessage());
119 3108 mdecorde
                        ex.printStackTrace(writer);
120 3108 mdecorde
                }
121 3108 mdecorde
                exception.setText(swriter.toString());
122 3108 mdecorde
        }
123 3108 mdecorde
124 3108 mdecorde
        protected void toggleException() {
125 3108 mdecorde
                expanded = !expanded;
126 3108 mdecorde
                updateButtonText();
127 3108 mdecorde
                GridData gd = (GridData) exception.getLayoutData();
128 3108 mdecorde
                gd.exclude = !expanded;
129 3108 mdecorde
                exception.setVisible(expanded);
130 3108 mdecorde
                refresh();
131 3108 mdecorde
        }
132 3108 mdecorde
133 3108 mdecorde
        private void updateButtonText() {
134 3108 mdecorde
                if (expanded)
135 3108 mdecorde
                        button.setText(org.eclipse.ui.internal.browser.Messages.BrowserText_button_collapse);
136 3108 mdecorde
                else
137 3108 mdecorde
                        button.setText(org.eclipse.ui.internal.browser.Messages.BrowserText_button_expand);
138 3108 mdecorde
        }
139 3108 mdecorde
140 3108 mdecorde
        protected void updateWidth(Composite parent) {
141 3108 mdecorde
                Rectangle area = parent.getClientArea();
142 3108 mdecorde
                updateWidth(title, area.width);
143 3108 mdecorde
                updateWidth(text, area.width);
144 3108 mdecorde
                updateWidth(sep, area.width);
145 3108 mdecorde
                updateWidth(link, area.width);
146 3108 mdecorde
                updateWidth(exTitle, area.width);
147 3108 mdecorde
                updateWidth(exception, area.width);
148 3108 mdecorde
        }
149 3108 mdecorde
150 3108 mdecorde
        private void updateWidth(Control c, int width) {
151 3108 mdecorde
                GridData gd = (GridData) c.getLayoutData();
152 3108 mdecorde
                if (gd != null)
153 3108 mdecorde
                        gd.widthHint = width - 10;
154 3108 mdecorde
        }
155 3108 mdecorde
156 3108 mdecorde
        protected void doOpenExternal() {
157 3108 mdecorde
                IBrowserViewerContainer container = viewer.getContainer();
158 3108 mdecorde
                if (container != null)
159 3108 mdecorde
                        container.openInExternalBrowser(url);
160 3108 mdecorde
        }
161 3108 mdecorde
162 3108 mdecorde
        public Control getControl() {
163 3108 mdecorde
                return scomp;
164 3108 mdecorde
        }
165 3108 mdecorde
166 3108 mdecorde
        public boolean setUrl(String url) {
167 3108 mdecorde
                this.url = url;
168 3108 mdecorde
                return true;
169 3108 mdecorde
        }
170 3108 mdecorde
171 3108 mdecorde
        public void setFocus() {
172 3108 mdecorde
                link.setFocus();
173 3108 mdecorde
        }
174 3108 mdecorde
175 3108 mdecorde
        public String getUrl() {
176 3108 mdecorde
                return url;
177 3108 mdecorde
        }
178 3108 mdecorde
179 3108 mdecorde
        public void refresh() {
180 3108 mdecorde
                scomp.reflow(true);
181 3108 mdecorde
        }
182 3108 mdecorde
}