22 import java.util.LinkedHashSet; |
22 import java.util.LinkedHashSet; |
23 import java.util.Set; |
23 import java.util.Set; |
24 |
24 |
25 import org.eclipse.jface.action.Action; |
25 import org.eclipse.jface.action.Action; |
26 import org.eclipse.jface.action.IAction; |
26 import org.eclipse.jface.action.IAction; |
|
27 import org.eclipse.jface.action.IStatusLineManager; |
27 import org.eclipse.jface.dialogs.Dialog; |
28 import org.eclipse.jface.dialogs.Dialog; |
28 import org.eclipse.jface.dialogs.IInputValidator; |
29 import org.eclipse.jface.dialogs.IInputValidator; |
29 import org.eclipse.jface.dialogs.InputDialog; |
30 import org.eclipse.jface.dialogs.InputDialog; |
30 import org.eclipse.swt.SWT; |
31 import org.eclipse.swt.SWT; |
31 import org.eclipse.swt.browser.Browser; |
32 import org.eclipse.swt.browser.Browser; |
32 import org.eclipse.swt.browser.LocationAdapter; |
33 import org.eclipse.swt.browser.LocationAdapter; |
33 import org.eclipse.swt.browser.LocationEvent; |
34 import org.eclipse.swt.browser.LocationEvent; |
34 import org.eclipse.swt.browser.OpenWindowListener; |
35 import org.eclipse.swt.browser.OpenWindowListener; |
35 import org.eclipse.swt.browser.ProgressAdapter; |
36 import org.eclipse.swt.browser.ProgressAdapter; |
36 import org.eclipse.swt.browser.ProgressEvent; |
37 import org.eclipse.swt.browser.ProgressEvent; |
|
38 import org.eclipse.swt.browser.StatusTextEvent; |
|
39 import org.eclipse.swt.browser.StatusTextListener; |
37 import org.eclipse.swt.browser.WindowEvent; |
40 import org.eclipse.swt.browser.WindowEvent; |
38 import org.eclipse.swt.layout.FillLayout; |
41 import org.eclipse.swt.layout.FillLayout; |
39 import org.eclipse.swt.widgets.Composite; |
42 import org.eclipse.swt.widgets.Composite; |
40 import org.eclipse.swt.widgets.Control; |
43 import org.eclipse.swt.widgets.Control; |
41 import org.eclipse.ui.IEditorPart; |
44 import org.eclipse.ui.IEditorPart; |
83 setLoading(event.current != event.total); |
86 setLoading(event.current != event.total); |
84 NavigationActionBar.this.updater.updateAll(); |
87 NavigationActionBar.this.updater.updateAll(); |
85 } |
88 } |
86 @Override |
89 @Override |
87 public void completed(ProgressEvent event) { |
90 public void completed(ProgressEvent event) { |
|
91 getStatusLineManager().setMessage(null); |
|
92 if (!failedConnect && !browserHasURL()) { |
|
93 displayCannotFindServerPage(); |
|
94 Activator.logError("Could not display URL in browser: " + getURL().toExternalForm(), null); |
|
95 failedConnect = true; |
|
96 } |
88 setLoading(false); |
97 setLoading(false); |
89 NavigationActionBar.this.updater.updateAll(); |
98 NavigationActionBar.this.updater.updateAll(); |
90 } |
99 } |
91 }); |
100 }); |
92 browser.addOpenWindowListener(new OpenWindowListener() { |
101 browser.addOpenWindowListener(new OpenWindowListener() { |
93 @Override |
102 @Override |
94 public void open(WindowEvent event) { |
103 public void open(WindowEvent event) { |
95 event.browser = browser; |
104 event.browser = browser; |
|
105 } |
|
106 }); |
|
107 browser.addStatusTextListener(new StatusTextListener() { |
|
108 @Override |
|
109 public void changed(StatusTextEvent event) { |
|
110 getStatusLineManager().setMessage(event.text); |
96 } |
111 } |
97 }); |
112 }); |
98 } |
113 } |
99 |
114 |
100 @Override |
115 @Override |
124 public boolean isLoading() { |
139 public boolean isLoading() { |
125 return loading; |
140 return loading; |
126 } |
141 } |
127 } |
142 } |
128 |
143 |
|
144 protected static final String HTML_BODY_HEADER = "<html><head><title></title><style type=\"text/css\">div.item {font-family : sans-serif; font-size : 12px; margin-bottom : 16px;} div.itemBody {padding-top : 3px; padding-bottom : 3px;} div.itemInfo {background-color : #EEEEEE; color : #333333;} div.feedflare {display: none;} a.itemTitle {font-size : 12px; font-weight : bold;} a.markItemRead {font-size : 10px; color : #333333;}</style></head><body>"; //$NON-NLS-1$ |
|
145 protected static final String HTML_BODY_FOOTER = "</body></html>"; //$NON-NLS-1$ |
|
146 |
129 protected Browser browser; |
147 protected Browser browser; |
130 protected NavigationActionBar actionBar; |
148 protected NavigationActionBar actionBar; |
|
149 private IEditorPart part; |
|
150 private boolean failedConnect; |
131 |
151 |
132 @Override |
152 @Override |
133 public Control createControl(Composite parent, IEditorPart part) { |
153 public Control createControl(Composite parent, IEditorPart part) { |
|
154 this.part = part; |
134 Composite composite = new Composite(parent, SWT.NONE); |
155 Composite composite = new Composite(parent, SWT.NONE); |
135 composite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); |
156 composite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); |
136 composite.setLayout(new FillLayout()); |
157 composite.setLayout(new FillLayout()); |
137 try { |
158 try { |
138 browser = new Browser(composite, SWT.MOZILLA); |
159 browser = new Browser(composite, SWT.MOZILLA); |
293 |
320 |
294 protected boolean browserHasURL() { |
321 protected boolean browserHasURL() { |
295 String url = browser.getUrl(); |
322 String url = browser.getUrl(); |
296 return url.matches("^.*://.*"); //$NON-NLS-1$ |
323 return url.matches("^.*://.*"); //$NON-NLS-1$ |
297 } |
324 } |
|
325 |
|
326 protected void displayCannotFindServerPage() { |
|
327 StringBuilder sb = new StringBuilder(HTML_BODY_HEADER); |
|
328 // if we want, we can add html here for failed connect case |
|
329 sb.append(HTML_BODY_FOOTER); |
|
330 browser.setText(sb.toString()); |
|
331 browser.redraw(); |
|
332 } |
|
333 |
|
334 private IStatusLineManager getStatusLineManager() { |
|
335 return part.getEditorSite().getActionBars().getStatusLineManager(); |
|
336 } |
298 } |
337 } |