From 5cebcd756165a29446d2536b6425fdef2ebe727b Mon Sep 17 00:00:00 2001 From: khartlage Date: Fri, 20 Aug 2004 16:07:06 +0000 Subject: [PATCH] Initial version from the webtools project; sligthly modified for phpeclipse --- net.sourceforge.phpeclipse.webbrowser/.classpath | 7 + net.sourceforge.phpeclipse.webbrowser/.cvsignore | 1 + net.sourceforge.phpeclipse.webbrowser/.project | 28 + .../build.properties | 15 + .../defaultBrowsers.xml | 42 ++ .../home/home.html | 5 + .../icons/clcl16/add_favorite.gif | Bin 0 -> 218 bytes .../icons/clcl16/nav_backward.gif | Bin 0 -> 541 bytes .../icons/clcl16/nav_forward.gif | Bin 0 -> 541 bytes .../icons/clcl16/nav_go.gif | Bin 0 -> 528 bytes .../icons/clcl16/nav_home.gif | Bin 0 -> 595 bytes .../icons/clcl16/nav_print.gif | Bin 0 -> 1033 bytes .../icons/clcl16/nav_refresh.gif | Bin 0 -> 327 bytes .../icons/clcl16/nav_stop.gif | Bin 0 -> 352 bytes .../icons/dlcl16/add_favorite.gif | Bin 0 -> 207 bytes .../icons/dlcl16/nav_backward.gif | Bin 0 -> 317 bytes .../icons/dlcl16/nav_forward.gif | Bin 0 -> 318 bytes .../icons/dlcl16/nav_go.gif | Bin 0 -> 311 bytes .../icons/dlcl16/nav_home.gif | Bin 0 -> 358 bytes .../icons/dlcl16/nav_print.gif | Bin 0 -> 375 bytes .../icons/dlcl16/nav_refresh.gif | Bin 0 -> 205 bytes .../icons/dlcl16/nav_stop.gif | Bin 0 -> 219 bytes .../icons/elcl16/add_favorite.gif | Bin 0 -> 218 bytes .../icons/elcl16/nav_backward.gif | Bin 0 -> 541 bytes .../icons/elcl16/nav_forward.gif | Bin 0 -> 541 bytes .../icons/elcl16/nav_go.gif | Bin 0 -> 528 bytes .../icons/elcl16/nav_home.gif | Bin 0 -> 595 bytes .../icons/elcl16/nav_print.gif | Bin 0 -> 1033 bytes .../icons/elcl16/nav_refresh.gif | Bin 0 -> 327 bytes .../icons/elcl16/nav_stop.gif | Bin 0 -> 352 bytes .../icons/obj16/external_browser.gif | Bin 0 -> 1013 bytes .../icons/obj16/favorite.gif | Bin 0 -> 144 bytes .../icons/obj16/frames/frame1.gif | Bin 0 -> 138 bytes .../icons/obj16/frames/frame10.gif | Bin 0 -> 753 bytes .../icons/obj16/frames/frame11.gif | Bin 0 -> 721 bytes .../icons/obj16/frames/frame12.gif | Bin 0 -> 681 bytes .../icons/obj16/frames/frame13.gif | Bin 0 -> 404 bytes .../icons/obj16/frames/frame2.gif | Bin 0 -> 417 bytes .../icons/obj16/frames/frame3.gif | Bin 0 -> 735 bytes .../icons/obj16/frames/frame4.gif | Bin 0 -> 1149 bytes .../icons/obj16/frames/frame5.gif | Bin 0 -> 698 bytes .../icons/obj16/frames/frame6.gif | Bin 0 -> 722 bytes .../icons/obj16/frames/frame7.gif | Bin 0 -> 1167 bytes .../icons/obj16/frames/frame8.gif | Bin 0 -> 1166 bytes .../icons/obj16/frames/frame9.gif | Bin 0 -> 1165 bytes .../icons/obj16/internal_browser.gif | Bin 0 -> 996 bytes .../plugin.properties | 95 ++++ net.sourceforge.phpeclipse.webbrowser/plugin.xml | 95 ++++ .../schema/favorites.exsd | 124 +++++ .../schema/urlMap.exsd | 112 ++++ .../org/eclipse/webbrowser/ExtendedBrowser.java | 41 ++ .../eclipse/webbrowser/IExternalWebBrowser.java | 15 + .../webbrowser/IExternalWebBrowserWorkingCopy.java | 13 + .../eclipse/webbrowser/IInternalWebBrowser.java | 13 + .../webbrowser/IInternalWebBrowserWorkingCopy.java | 11 + .../src/org/eclipse/webbrowser/IURLMap.java | 23 + .../src/org/eclipse/webbrowser/IWebBrowser.java | 11 + .../eclipse/webbrowser/IWebBrowserEditorInput.java | 54 ++ .../org/eclipse/webbrowser/OpenBrowserAction.java | 33 ++ .../webbrowser/OpenBrowserWorkbenchAction.java | 67 +++ .../src/org/eclipse/webbrowser/WebBrowser.java | 119 ++++ .../eclipse/webbrowser/WebBrowserEditorInput.java | 315 +++++++++++ .../internal/BrowserContentProvider.java | 71 +++ .../webbrowser/internal/BrowserManager.java | 274 +++++++++ .../webbrowser/internal/BrowserSearcher.java | 126 +++++ .../webbrowser/internal/BrowserTableComposite.java | 272 +++++++++ .../internal/BrowserTableLabelProvider.java | 96 ++++ .../eclipse/webbrowser/internal/BusyIndicator.java | 157 ++++++ .../eclipse/webbrowser/internal/ContextIds.java | 25 + .../webbrowser/internal/ExternalBrowserDialog.java | 202 +++++++ .../webbrowser/internal/ExternalWebBrowser.java | 139 +++++ .../internal/ExternalWebBrowserWorkingCopy.java | 63 +++ .../org/eclipse/webbrowser/internal/Favorite.java | 57 ++ .../webbrowser/internal/IWebBrowserListener.java | 24 + .../eclipse/webbrowser/internal/ImageResource.java | 185 +++++++ .../webbrowser/internal/InternalBrowserDialog.java | 83 +++ .../webbrowser/internal/InternalWebBrowser.java | 76 +++ .../internal/InternalWebBrowserWorkingCopy.java | 43 ++ .../internal/InternetPreferencePage.java | 70 +++ .../internal/OpenWithBrowserActionDelegate.java | 88 +++ .../internal/OrganizeFavoritesDialog.java | 211 +++++++ .../org/eclipse/webbrowser/internal/SWTUtil.java | 77 +++ .../webbrowser/internal/StandardURLMap.java | 29 + .../internal/SwitchBrowserWorkbenchAction.java | 137 +++++ .../internal/SwitchDefaultBrowserAction.java | 45 ++ .../eclipse/webbrowser/internal/TextAction.java | 146 +++++ .../src/org/eclipse/webbrowser/internal/Trace.java | 52 ++ .../eclipse/webbrowser/internal/WebBrowser.java | 579 ++++++++++++++++++++ .../webbrowser/internal/WebBrowserEditor.java | 371 +++++++++++++ .../WebBrowserEditorActionBarContributor.java | 62 +++ .../webbrowser/internal/WebBrowserPreference.java | 164 ++++++ .../internal/WebBrowserPreferencePage.java | 84 +++ .../webbrowser/internal/WebBrowserUIPlugin.java | 90 +++ .../webbrowser/internal/WebBrowserUtil.java | 376 +++++++++++++ .../phpeclipse/views/browser/BrowserView.java | 16 +- .../phpeclipse/views/browser/PHPBrowser.java | 358 ------------ .../phpeclipse/views/browser/browser.properties | 20 - .../phpeclipse/views/browser/document.gif | Bin 380 -> 0 bytes .../phpeclipse/views/browser/eclipse01.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse02.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse03.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse04.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse05.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse06.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse07.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse08.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse09.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse10.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse11.bmp | Bin 6966 -> 0 bytes .../phpeclipse/views/browser/eclipse12.bmp | Bin 6966 -> 0 bytes 110 files changed, 5723 insertions(+), 384 deletions(-) create mode 100644 net.sourceforge.phpeclipse.webbrowser/.classpath create mode 100644 net.sourceforge.phpeclipse.webbrowser/.cvsignore create mode 100644 net.sourceforge.phpeclipse.webbrowser/.project create mode 100644 net.sourceforge.phpeclipse.webbrowser/build.properties create mode 100644 net.sourceforge.phpeclipse.webbrowser/defaultBrowsers.xml create mode 100644 net.sourceforge.phpeclipse.webbrowser/home/home.html create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/add_favorite.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_backward.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_forward.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_go.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_home.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_print.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_refresh.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_stop.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/add_favorite.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_backward.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_forward.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_go.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_home.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_print.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_refresh.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_stop.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/add_favorite.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_backward.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_forward.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_go.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_home.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_print.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_refresh.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_stop.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/external_browser.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/favorite.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame1.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame10.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame11.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame12.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame13.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame2.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame3.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame4.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame5.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame6.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame7.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame8.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame9.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/icons/obj16/internal_browser.gif create mode 100644 net.sourceforge.phpeclipse.webbrowser/plugin.properties create mode 100644 net.sourceforge.phpeclipse.webbrowser/plugin.xml create mode 100644 net.sourceforge.phpeclipse.webbrowser/schema/favorites.exsd create mode 100644 net.sourceforge.phpeclipse.webbrowser/schema/urlMap.exsd create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/ExtendedBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowserWorkingCopy.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowserWorkingCopy.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IURLMap.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowserEditorInput.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserAction.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserWorkbenchAction.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowserEditorInput.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserContentProvider.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserManager.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableLabelProvider.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BusyIndicator.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ContextIds.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalBrowserDialog.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowserWorkingCopy.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Favorite.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/IWebBrowserListener.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ImageResource.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalBrowserDialog.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowserWorkingCopy.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternetPreferencePage.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OpenWithBrowserActionDelegate.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OrganizeFavoritesDialog.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SWTUtil.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/StandardURLMap.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchBrowserWorkbenchAction.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchDefaultBrowserAction.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Trace.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowser.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditor.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditorActionBarContributor.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreference.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreferencePage.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUIPlugin.java create mode 100644 net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUtil.java delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/document.gif delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse01.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse02.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse03.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse04.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse05.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse06.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse07.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse08.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse09.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse10.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse11.bmp delete mode 100644 net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse12.bmp diff --git a/net.sourceforge.phpeclipse.webbrowser/.classpath b/net.sourceforge.phpeclipse.webbrowser/.classpath new file mode 100644 index 0000000..065ac06 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/net.sourceforge.phpeclipse.webbrowser/.cvsignore b/net.sourceforge.phpeclipse.webbrowser/.cvsignore new file mode 100644 index 0000000..ba077a4 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/.cvsignore @@ -0,0 +1 @@ +bin diff --git a/net.sourceforge.phpeclipse.webbrowser/.project b/net.sourceforge.phpeclipse.webbrowser/.project new file mode 100644 index 0000000..32e3f6b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/.project @@ -0,0 +1,28 @@ + + + net.sourceforge.phpeclipse.webbrowser + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/net.sourceforge.phpeclipse.webbrowser/build.properties b/net.sourceforge.phpeclipse.webbrowser/build.properties new file mode 100644 index 0000000..1351331 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/build.properties @@ -0,0 +1,15 @@ +bin.includes = plugin.xml,\ + *.jar,\ + plugin.properties/,\ + webbrowser.jar,\ + icons/,\ + home/,\ + plugin.properties,\ + defaultBrowsers.xml,\ + .options +jars.compile.order = +src.includes = plugin.properties/,\ + schema/,\ + build.properties +source.webbrowser.jar = webbrowser/ +output.webbrowser.jar = bin/ diff --git a/net.sourceforge.phpeclipse.webbrowser/defaultBrowsers.xml b/net.sourceforge.phpeclipse.webbrowser/defaultBrowsers.xml new file mode 100644 index 0000000..c29e3b4 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/defaultBrowsers.xml @@ -0,0 +1,42 @@ + + + C:\Program Files\Internet Explorer\IEXPLORE.EXE + D:\Program Files\Internet Explorer\IEXPLORE.EXE + E:\Program Files\Internet Explorer\IEXPLORE.EXE + + + C:\Program Files\Netscape\Communicator\Program\netscape.exe + D:\Program Files\Netscape\Communicator\Program\netscape.exe + E:\Program Files\Netscape\Communicator\Program\netscape.exe + + + C:\Program Files\Netscape\Netscape\netscp.exe + D:\Program Files\Netscape\Netscape\netscp.exe + E:\Program Files\Netscape\Netscape\netscp.exe + + + C:\Program Files\mozilla.org\Mozilla\mozilla.exe + D:\Program Files\mozilla.org\Mozilla\mozilla.exe + E:\Program Files\mozilla.org\Mozilla\mozilla.exe + + + C:\Program Files\Opera7\opera.exe + D:\Program Files\Opera7\opera.exe + E:\Program Files\Opera7\opera.exe + + + + /usr/bin/mozilla + /usr/X11/bin/mozilla + + + /usr/bin/netscape + /usr/X11R6/bin/netscape + + + /opt/kde3/bin/konqueror + + + /opt/usr/gnome/bin/galeon + + diff --git a/net.sourceforge.phpeclipse.webbrowser/home/home.html b/net.sourceforge.phpeclipse.webbrowser/home/home.html new file mode 100644 index 0000000..b80e9b4 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/home/home.html @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/add_favorite.gif b/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/add_favorite.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6474c6f101f06651daa496cb4b3fb5a070f747d GIT binary patch literal 218 zcmZ?wbhEHb6krfwIKsdnkYT|PpuiEKp)n!AU`B*Og+s%JfCW1u4qQlh@F3y;Cx-7I z3x7Na`+3X%&ncdtmz{r|Hv4tP?B^Nt-+KlA@3;SWIQzr()!%1Je4irwd0*qFRHY9~ zTK@n4&j168KUo+V7-Sf9Kms5;8Cb&=)caC0=czATq&iVxaT#BU6aTcZnXHd~x3;<^ zGD+~eIkYt@&SGIZs5Uv%$6%I@=7FU)`{KFSmR@jBnxyF6SQsPYE5>&E;+c~r6YoYY QI^iKDqSM@>qR3zk0L^n)-~a#s literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_backward.gif b/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_backward.gif new file mode 100644 index 0000000000000000000000000000000000000000..740e8cae8dad09947540011d599272020e6b9efd GIT binary patch literal 541 zcmZ?wbhEHb6krfwc*el+|No``{~!GS|NQ^|7ytji`~Uy_|NkHU|Nr#=|F{4DfBygf z=l`FB|9_wP|8>^?Z@d2gy8i#qv;QCF{Qofb|Ceq5zwZ41>)!w05C4By@&D77|DU)1 z|9be}w+sJ&T>1ZI;s1Aw|9{x{|MS7WpHKb&cK-jj3;*7%{{L?M-*>zIf86`;!`{E| z_x$^O=HHjI|G%F9|7Pt!p!oYeyXtv&HwtbpVc1y2u)cs{OBv&)62@(1Oq)uWmSr(* zE@j?S#=fRo zT#&>vKapioD(9j!?j;$#^J0Kr1_6e_0Th3-FfuR%G3bDt1Bw#{_Ns=UrskH`w)T!D z1H;Z1^FX`aCZoVW(@DmG9Gv#XW)>D!HZ3OX0-|EfEG%rS>|EAOwoLrmidxz_%F;?Q zjBZWt3{skUYWf-{)fIRwn;rO6RdnSgBqfDKxIJ5(#AW3I9GzWUTs_*n1ckgOHTm%R PzH9RH|NQ-PBZD;no)y!I literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_forward.gif b/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_forward.gif new file mode 100644 index 0000000000000000000000000000000000000000..19567890aa88ad1da1a5828bdf726d9c4bd66278 GIT binary patch literal 541 zcmZ?wbhEHb6krfwc*el+|No``{~!GS|NQ^|7ytji`~Uy_|NkHU|Nr#=|F{4DfBygf z=l`FB|9_wP|8>^?Z@d2gy8i#qv;QCF{Qofb|Ceq5zwZ41>)!w05C4By@&D77|DU)1 z|9be}w+sJ&T>1ZI;s1Aw|9{x{|MS7WpHKb&cK-jj3;*7%{{L?M-*>zIf86`;!`{E| z_x$^O=HHjI|G%F9|7Pt!p!oYeyXtv&HwtbpVc1y2u)cs{OBv&)62@(1Oq)uWmSr(* zE@j?S#=fRo zT#&>vKapioD(9j!?j;$#^J0Kr1_6e_0Th3-FfuR%G3bDt1Bw#{_Ns=UrskH`w)Tz| zLxav%yFl~aX4Akxqc$5W3kx%2drpo(;}&Z!c2+hP7G^O~0d|vSH%1vHX=NR4Ek$j9 zCfg=U9tCxcWBO`(noaSEDs8SWITo#~I;;&K}tWg`LSsSKZAE{FxsaqeZRvoNf z6|7bsXwVcDvZ^q2bz#WL!q8QPp373bmZy0xO^sS#61BcGVs(+%@)W<-8F8D-eO9FU zuS`qcUKzM9J#|xJ%ErWut;rn+S~9jJb{uGG+t=8>zp49RYtGK3z9X&uN7|>H>@3-x zShgo|`iYLp{fQO(5@(#~n0K~&*2&I!XL=T2=<7J1)N>+n&Bgw8mnLkyGI7hbiHGh^ zKX7~6|Ns9P1`|;H$->CM5Wt`Vaug^|7}#?g0-BmzTHD$?I$PzXCA*rX{QQL_`o(>` zynTgaJH=d_9bDbqd1Tsot?Cc#`IXjs>Js4Q}IhYvxU%qN@WUvMR;#iN0 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_home.gif b/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_home.gif new file mode 100644 index 0000000000000000000000000000000000000000..77efb692e6ac5cc7c0f76eeddd30b2d9ad46e504 GIT binary patch literal 595 zcmZ?wbhEHb6krfwc*ek>Y}cUf*mCRM3t^KQJ>PyIlNv?)+Suy#H}5_7%UkN7w>YeH zRe1TTi1Jm@RqLXw)<##YiL2cZSF=8;X=`%R)*JVpE4f!HxL4kM`1<<2=hyB%fBWUn zryu{Hef<6W%m1ezf1kPj;PtovAAkP;@#p`855HA{i&R63?tl9C-rS4s#u%W1lzWF%a-V*w8Zq>)SQD>8M&$X z#o4>=$)={ozkSX0`7>)qM$F{N&FfYdP416gx2pL6?{kwUHP=`9W~4>`|GIz5#KtKT z8vcLU|Nqsh|8Le7<;KjI+?1CYHFt9L%!zgX?@jxEf5yD24gb#`fOqna_8%`VR&S)CP(_Sr{1@QW$hV27}^+fqg?mN>g)7Yip8g zQ+!*ib3#h2TTD-LqD!P#fN$KC6pwKKAc-Kq;3ZZxHwxC)>vFT)WFBA=eMRH;00qd TD?0-VLqUQgGe;8>BZD;nB1iSh literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_print.gif b/net.sourceforge.phpeclipse.webbrowser/icons/clcl16/nav_print.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c213c3af3a69709eb437c182952172c76efe1f7 GIT binary patch literal 1033 zcmeH`+fR~l0ERy;Ph^u>nK~==!p+qhwN@UQ^FU^`wJabnG|AGe)*4Q%wMqp`R46fX ziU%MKL8nq_f`TM!;?PgrnxZpXqI|%n98{2l{?h)3?t1oIzZdWJT)dPV6@42Gp&=Ut z(d$GEmbk1|L}!WH#p*7}oKQL!5JNp2LruC>RnF=wuM^Sh#mvU;_>5{oJ|Fj(okn8k z6n5OFbQUmrpH+$qYX+!wvWj|fYF=w9iH9e*;S1XE`2svyfY0aS$vd_Z$b161HRE|# z7Nv(+_$m99D7&OLm)4(4>!Yw$#Z54U4I?ISgDk)mv=N@P-F(`f{z8~p^yMK#_Mk#q z%z-I8a$zRBTM8qJX~WpGK{dakGlMyeX?D@5w}1t$MLMaIz=(7bk*RcJGX}-9UiEWz zR%22x8qGGa=>(EVWI%<;e;CHphOrsF)(j8}nAI5dYhVGfEStgXl1Z&GHu1U)>%e3K zjl8ZEE3i3%&F-|=!HUJY=>j_A`i2uYwt&R}Y%XARft59@&FN!!?I?jyjm%LKR#3okFW;&8^+}|@JNGl zh&wNPgiO4fYEGKqB!a&{|M@o$gxUAH?Nk7r*qz^P0`k^EK|UcVLSjNf$u@+-DMAP1 zD#A}*?;fp8N~SJEku085T?Gj0GkKuvx4~;6KmWCDwd+E-YtF-js zb9W4({DdMVgO=Hs&c}o$x?|GA=ZG!xtM#6^&n|S{$MStgvQ}G&B@}v{2MWS?W1u~r zZaL}(A}%Whef&zd&chw642Vd(jQPODqTWWP_}g^MlG206A_AGTyrr_`@L1aUQ|`+t z)j{;T!$rTjNnU8VXu9YJx&Y1F`F;EIrNqEOK~lpJWa!4-LeYm0=|77MK@5?WI%v@BcT|Ns9CR0WDZSr{1@R2g(Yrh@#$z?O1g zQh|q#RHw+PiyoXB)1AE)3U1~skT{fJ?U6BUYICAZn$5HYp3GD7dKS#fQdLEHHy z6I^aRo~tUt;P2kV-^pmxxFXy`%V^4 zI9bqt!X{~UOv}F5*8Op9`-`U>E17n@Wa_cfX~!#OoG71u{M5AoCd@L8pJ|pb%OY`hY}@|$_WcWXKbW=i{+!(p7VLSz;Ml?7*dE-vKcszs zXvcxDjspy?oeVA=41SXs{3o>?+w=ebe+D9e;!hSv1_omW9gtd(pBUI`56mp^(2?pt zv1H?xpCvXI&ZP%yWwA6iBqp5TGI2epYBVuGW%7yEV3tIUX{TT9)rPlZpZlb=szri%e9*RtgttOl-{4D75MSlL+^ XG+m7}^!0Y{*4HrdI(W#~k--`OMeT{5 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/add_favorite.gif b/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/add_favorite.gif new file mode 100644 index 0000000000000000000000000000000000000000..15e62e6cc36a2b30fe7027969cf1939c7ada18b0 GIT binary patch literal 207 zcmZ?wbhEHb6krfwIKsft(%)Iv(KK!G?7o?kHt$@!YwyNmCw84ZyYJS`Q&%n?IDdNQ zrE_}^?_GBG_|~I)S6n=~>)5WPesldGv@@&4{~I%1^|PjiVFY$ literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_forward.gif b/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_forward.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f3e5ebd0314904ba835489a43505df8a7f29bad GIT binary patch literal 318 zcmZ?wbhEHb6krfwxXQrr;lqnhpWb}=^8UwWk0Za9~K%gi1Gvmbu4Jik(=P*B6Lz@ z(L#sgpI?6d&C685z{TArBPK2(#*>*9;VmL6+~=;y$2WBv=d5XSgBEx=GFSruLrRQe literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_go.gif b/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_go.gif new file mode 100644 index 0000000000000000000000000000000000000000..6df73de402b5e92179fcd3f4c1c13a1e5e1cd206 GIT binary patch literal 311 zcmZ?wbhEHb6krfwxXQq=X4{6fJ2tM_zG3VB9h>%S-LPx(`kkBBZU+i(SiNoCs;z5R zY+k*2@8)d>wr<{ASK{WUvMRHfwUb literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_home.gif b/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_home.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d5d56ecc8be7c07fb2ad2222c66a1e73889968a GIT binary patch literal 358 zcmZ?wbhEHb6krfwxXQrr=FPi5fBt^^{&T{V+5J;y^-Z4n`Rn&zzyJLB`Rn_SpKsp2 zd;R9^tJiOyK6~CbdHS~>Kfiwe@#Wk1&tJdwPM$Jh`i$Ry{>)rBZ`!=svzN@DwRql~ zr3;oUU9xb|!u2~>?%ca{&z|}F_b>YV`R&4m3qHJm@%rV%5AR;=+q>)8qnoduKX`cO z($Xc1?%g#j0_Bh3_2hkAU`p%H6NH!;GrWH ztCx7m!{u1aLe(u`V>^I0WokJzHgKV}Ls#uYSZOfB7L@r*~U_}Q8z zdeUk7Qu0y-Jkq7S2KwS+;`#=>NqYLCj0O6PqWV)sIoX9pgxNVor*aB%@G0`1=z%=i%e#!^Xf%KiTS{Qdp={QUO!_w@Dk&d<)lys*#9!Q9!>z`C!(!NLFk|Nj2|{r&y>`}@z& z&;S4bA^8LW002J#EC2ui01yBW000J*z@KnPEEaRfq>-4@IdwSX@|Sx70I!>^mRsfk zFzoKN>l$+~isg{Nz|6uVEu~7uV6l`>+0?ljBo!A31}iO2T{%2G1P%`l4Gj(sCILK& z0y7{BARhw*3kwW0GKnk^sHqSTsVs>nD6z5y1+o%}AtEEYyt^VIA&DCk9L2^N#v6$m V9wj9TB^}Vx9vWsz*x6k{06Qp9+*kkr literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_refresh.gif b/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_refresh.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2484828acfcbb61e4f05da866ffede60ffc939d GIT binary patch literal 205 zcmZ?wbhEHb6krfwIKsg2>(`I(-@m?k`S8i38;>7ezjO2KvnRK2-#Gi=?xm-X@4R{S z_|DDq*DfBubK}gtTjy_FIeG2kkq37!9XfdM|Ns9CL;%H~EQ|~c!VEefwIDkgSiK&o z^rd7@np84NXu-PV*UL7zXzbXuCnxdGe)jb$i7r9M6elj!`V_at^UKRgY*SV=D2RF_ exC*r-*x1!9?QN{OVBsCi*I}*JzVMDBgEat4H(JI3 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_stop.gif b/net.sourceforge.phpeclipse.webbrowser/icons/dlcl16/nav_stop.gif new file mode 100644 index 0000000000000000000000000000000000000000..15d4a5438d1ccdef4731ee0712d08bf3a835c1af GIT binary patch literal 219 zcmZ?wbhEHb6krfwIKsg2^3}T+FW&E;+c~r6YoYY QI^iKDqSM@>qR3zk0L^n)-~a#s literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_backward.gif b/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_backward.gif new file mode 100644 index 0000000000000000000000000000000000000000..740e8cae8dad09947540011d599272020e6b9efd GIT binary patch literal 541 zcmZ?wbhEHb6krfwc*el+|No``{~!GS|NQ^|7ytji`~Uy_|NkHU|Nr#=|F{4DfBygf z=l`FB|9_wP|8>^?Z@d2gy8i#qv;QCF{Qofb|Ceq5zwZ41>)!w05C4By@&D77|DU)1 z|9be}w+sJ&T>1ZI;s1Aw|9{x{|MS7WpHKb&cK-jj3;*7%{{L?M-*>zIf86`;!`{E| z_x$^O=HHjI|G%F9|7Pt!p!oYeyXtv&HwtbpVc1y2u)cs{OBv&)62@(1Oq)uWmSr(* zE@j?S#=fRo zT#&>vKapioD(9j!?j;$#^J0Kr1_6e_0Th3-FfuR%G3bDt1Bw#{_Ns=UrskH`w)T!D z1H;Z1^FX`aCZoVW(@DmG9Gv#XW)>D!HZ3OX0-|EfEG%rS>|EAOwoLrmidxz_%F;?Q zjBZWt3{skUYWf-{)fIRwn;rO6RdnSgBqfDKxIJ5(#AW3I9GzWUTs_*n1ckgOHTm%R PzH9RH|NQ-PBZD;no)y!I literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_forward.gif b/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_forward.gif new file mode 100644 index 0000000000000000000000000000000000000000..19567890aa88ad1da1a5828bdf726d9c4bd66278 GIT binary patch literal 541 zcmZ?wbhEHb6krfwc*el+|No``{~!GS|NQ^|7ytji`~Uy_|NkHU|Nr#=|F{4DfBygf z=l`FB|9_wP|8>^?Z@d2gy8i#qv;QCF{Qofb|Ceq5zwZ41>)!w05C4By@&D77|DU)1 z|9be}w+sJ&T>1ZI;s1Aw|9{x{|MS7WpHKb&cK-jj3;*7%{{L?M-*>zIf86`;!`{E| z_x$^O=HHjI|G%F9|7Pt!p!oYeyXtv&HwtbpVc1y2u)cs{OBv&)62@(1Oq)uWmSr(* zE@j?S#=fRo zT#&>vKapioD(9j!?j;$#^J0Kr1_6e_0Th3-FfuR%G3bDt1Bw#{_Ns=UrskH`w)Tz| zLxav%yFl~aX4Akxqc$5W3kx%2drpo(;}&Z!c2+hP7G^O~0d|vSH%1vHX=NR4Ek$j9 zCfg=U9tCxcWBO`(noaSEDs8SWITo#~I;;&K}tWg`LSsSKZAE{FxsaqeZRvoNf z6|7bsXwVcDvZ^q2bz#WL!q8QPp373bmZy0xO^sS#61BcGVs(+%@)W<-8F8D-eO9FU zuS`qcUKzM9J#|xJ%ErWut;rn+S~9jJb{uGG+t=8>zp49RYtGK3z9X&uN7|>H>@3-x zShgo|`iYLp{fQO(5@(#~n0K~&*2&I!XL=T2=<7J1)N>+n&Bgw8mnLkyGI7hbiHGh^ zKX7~6|Ns9P1`|;H$->CM5Wt`Vaug^|7}#?g0-BmzTHD$?I$PzXCA*rX{QQL_`o(>` zynTgaJH=d_9bDbqd1Tsot?Cc#`IXjs>Js4Q}IhYvxU%qN@WUvMR;#iN0 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_home.gif b/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_home.gif new file mode 100644 index 0000000000000000000000000000000000000000..77efb692e6ac5cc7c0f76eeddd30b2d9ad46e504 GIT binary patch literal 595 zcmZ?wbhEHb6krfwc*ek>Y}cUf*mCRM3t^KQJ>PyIlNv?)+Suy#H}5_7%UkN7w>YeH zRe1TTi1Jm@RqLXw)<##YiL2cZSF=8;X=`%R)*JVpE4f!HxL4kM`1<<2=hyB%fBWUn zryu{Hef<6W%m1ezf1kPj;PtovAAkP;@#p`855HA{i&R63?tl9C-rS4s#u%W1lzWF%a-V*w8Zq>)SQD>8M&$X z#o4>=$)={ozkSX0`7>)qM$F{N&FfYdP416gx2pL6?{kwUHP=`9W~4>`|GIz5#KtKT z8vcLU|Nqsh|8Le7<;KjI+?1CYHFt9L%!zgX?@jxEf5yD24gb#`fOqna_8%`VR&S)CP(_Sr{1@QW$hV27}^+fqg?mN>g)7Yip8g zQ+!*ib3#h2TTD-LqD!P#fN$KC6pwKKAc-Kq;3ZZxHwxC)>vFT)WFBA=eMRH;00qd TD?0-VLqUQgGe;8>BZD;nB1iSh literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_print.gif b/net.sourceforge.phpeclipse.webbrowser/icons/elcl16/nav_print.gif new file mode 100644 index 0000000000000000000000000000000000000000..0c213c3af3a69709eb437c182952172c76efe1f7 GIT binary patch literal 1033 zcmeH`+fR~l0ERy;Ph^u>nK~==!p+qhwN@UQ^FU^`wJabnG|AGe)*4Q%wMqp`R46fX ziU%MKL8nq_f`TM!;?PgrnxZpXqI|%n98{2l{?h)3?t1oIzZdWJT)dPV6@42Gp&=Ut z(d$GEmbk1|L}!WH#p*7}oKQL!5JNp2LruC>RnF=wuM^Sh#mvU;_>5{oJ|Fj(okn8k z6n5OFbQUmrpH+$qYX+!wvWj|fYF=w9iH9e*;S1XE`2svyfY0aS$vd_Z$b161HRE|# z7Nv(+_$m99D7&OLm)4(4>!Yw$#Z54U4I?ISgDk)mv=N@P-F(`f{z8~p^yMK#_Mk#q z%z-I8a$zRBTM8qJX~WpGK{dakGlMyeX?D@5w}1t$MLMaIz=(7bk*RcJGX}-9UiEWz zR%22x8qGGa=>(EVWI%<;e;CHphOrsF)(j8}nAI5dYhVGfEStgXl1Z&GHu1U)>%e3K zjl8ZEE3i3%&F-|=!HUJY=>j_A`i2uYwt&R}Y%XARft59@&FN!!?I?jyjm%LKR#3okFW;&8^+}|@JNGl zh&wNPgiO4fYEGKqB!a&{|M@o$gxUAH?Nk7r*qz^P0`k^EK|UcVLSjNf$u@+-DMAP1 zD#A}*?;fp8N~SJEku085T?Gj0GkKuvx4~;6KmWCDwd+E-YtF-js zb9W4({DdMVgO=Hs&c}o$x?|GA=ZG!xtM#6^&n|S{$MStgvQ}G&B@}v{2MWS?W1u~r zZaL}(A}%Whef&zd&chw642Vd(jQPODqTWWP_}g^MlG206A_AGTyrr_`@L1aUQ|`+t z)j{;T!$rTjNnU8VXu9YJx&Y1F`F;EIrNqEOK~lpJWa!4-LeYm0=|77MK@5?WI%v@BcT|Ns9CR0WDZSr{1@R2g(Yrh@#$z?O1g zQh|q#RHw+PiyoXB)1AE)3U1~skT{fJ?U6BUYICAZn$5HYp3GD7dKS#fQdLEHHy z6I^aRo~tUt;P2kV-^pmxxFXy`%V^4 zI9bqt!X{~UOv}F5*8Op9`-`U>E17n@Wa_cfX~!#OoG71u{M5AoCd@L8pJ|pb%OY`hY}@|$_WcWXKbW=i{+!(p7VLSz;Ml?7*dE-vKcszs zXvcxDjspy?oeVA=41SXs{3o>?+w=ebe+D9e;!hSv1_omW9gtd(pBUI`56mp^(2?pt zv1H?xpCvXI&ZP%yWwA6iBqp5TGI2epYBVuGW%7yEV3tIUX{TT9)rPlZpZlb=szri%e9*RtgttOl-{4D75MSlL+^ XG+m7}^!0Y{*4HrdI(W#~k--`OMeT{5 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/external_browser.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/external_browser.gif new file mode 100644 index 0000000000000000000000000000000000000000..a89f276c21a01081f6ae3f8f351c40206f05c9e9 GIT binary patch literal 1013 zcmZ?wbhEHb6krfw_|Cu(kaH=bV0~!8x^0K~$^)PxJ+eP_2{coRAK{Pv4)cHjMV?8)EugYWx~eVBRr z^O8$n*I)ncwfw$+>x#nJTkB@5RB7Js)VX2v`MYm_{{Qs*zuThYp3BboE**7l-<&@E{P@LJXWLHYUw(D+(yL>aUmf4FZ{5|`$CsVx zyZPqitrrLGygYRI)}jCZ|Nj5~uc1Em<%=_~UYh8JaM-Cl$dwj*KBg@~P*l^^~!T(^uFbZfN0*XIb7#SEk z7<52Zf${_c$0Y_qP8p942?rgtBHlc>sMPP+XchE;v-l~ekbn};y@E$-XB7=xcgQFT zHYJFNB(ilXI=`4OMOEHyi)07$>4k<_+osGkRyo$fkimB7g3;4}g<7#+YEA|vHY{v3 zo)ocg(=qQBc0MVCh=vCaj4noT8ir0!d>MJAElNH#C>{>i(3@p2kwKk_g(*r@#o$Be zxh^@orYSd^7jH^<1&nZFz!|{38Cu=gN+5lfs{cF7K2p=wrRkAw26~dN!X+blXh#00028pFFoP_ literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame1.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame1.gif new file mode 100644 index 0000000000000000000000000000000000000000..f503a325cc2f1693f7cd2d423e90dacb18531503 GIT binary patch literal 138 zcmV;50CoRINk%w1VHE%s0HOc@21l|HXtF1W$3~{tbj0S8)an2L0RR90A^8LW000L7 zEC2ui02Kfg0009|SR>s2Y^Xu1y_l>;1TbJIhJY{x0`ZM3d8Ta)zJwgpc8llZ&WFCA sA^0Qmj5(xDDP!JHHQ@}p`T<^xs;zX|48Gv7cp*>(&giuITuuN0JIn?+CIA2c literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame10.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame10.gif new file mode 100644 index 0000000000000000000000000000000000000000..1240a9ec79245dc386646f4caa90b0a9b63111a0 GIT binary patch literal 753 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 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame4.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame4.gif new file mode 100644 index 0000000000000000000000000000000000000000..fefc8b93cb87731d727ade0a92121549fda3e797 GIT binary patch literal 1149 zcmeH`+e?#i7{|ZAy>qAc-PVq7ZgYp)T23o-&{jF-O6P&WtRbydIni2ZWGOL=Vy079 zp0E(L>;Pg#QOk-#gj_|@MRXwOrl3`11x3(B1%WO4AG+$fcz7;8@P*IA*IQBMaE297 z;5z_H3qpfy2ge4HA3`6P3J5Demx3vUzy;a`z7ql`_;zq@;Fyu61to>p4^aklLO%k< zR>*1~4M1E9p$j4xR1Hvup$tJ8gggM5A5tG=J_wye(+G7Ks;$TlL6re&pa?)2fZR{? zyNRxeXc|aP9Wk{MLo+e%BKjs`Xd?PXk{cnq9YhxYTiLdQS=0EDrSkT&i{b*uQGp}D ztm@NvM|D*vIo>J3>OOkS08=t7EFRGL#(Bj9qIJW9z)fLrMiiXMZ%Fbt-e7{$qAj=S zEjJ~R`;y3%rTYaG=CaB6L}Odr^Pp_<1!P*twXOHw4?X`x58oC~q@b2UN<&FQMI##- z^AKmuV}5=<^MSuRbNruwZ@~DIO@Maf|B3$73Gn9eakg!3@=U6Oo#u5GojZHCd%+x| zb<90dyH#d)&+FNegv3;nwMc@4ztb5QUHdS2;J@jmD)VucQ-%31tq7WV!a5l-B?!Ul E-=$mNvj6}9 literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame5.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame5.gif new file mode 100644 index 0000000000000000000000000000000000000000..b62194e65cbfc4f85e350981f2928cf0ef733f88 GIT binary patch literal 698 zcmZ?wbhEHb6lD-)c*elMz_)>ck(+@pfPu%8f!mdV%Z`E5l7U^DflZZxRfd6Ch(R=t zK_rGjIFdmqj6o`!K{A6uBAr1Zl|ej-K`fC$I)_odfKe`=Q8t%RrJPZzgi*1WQK5)Y zy_!+2l1a0cS+kBwzm-Y1iAkrCNxOkbtB%8Gmi0vui_71E)>01C~>o3>{^keP15Pxq%*e3+3I zs;R4U?(lX-b|zsdbv+Afdk5ExE06Q>%NbaD_<8#W99CeN$-&GmqiE#d6BZsGdYDDw zJ+p|(iVcoSPKp}DZgMdeWIG_j60cI>+4#6)igxUlH`-g5-rvtD8TP?LC^den;+s2( zO~(_OyCfZ_@XYk=e!R9o)Mn3$hlfx2Ofd`g6+V#7!X;%@^+n(l?;J*U0h1bwhi@W- zeb%rOwKNu?47c?yJYir$>r~n%iAqqut%w6 zpLxrv{1tc0*WRnya9=QElUnPsnU;&P>zDpOMeR!OqIV zFC-?Wk(M5kmN|W9{u~xA0Z9qv%^J&AtX{*;!Y?MFq^514r?)M0H4`%{mxzplfvJVH zrS(xc))^dZ+=4Qy`eu%9UYXZq~i^z`IJW<~~U0QRHu@&Et; literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame7.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame7.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ad4f34f52d3f54589ddb92dd63af9e269d5ef05 GIT binary patch literal 1167 zcmZ?wbhEHb6lD-)_|CwCrtq+Y|MR?VzY%cfDpq~FS< z-N>xl%&gPIYSh7M*v@Ry$!y%gY}C$d*v4$o%3{*VYTU^aa*4&VpT(k&#k`lzeG|Lg zRCeo0taejbZKtp~PG_^9#^x}M&90x_c_zEl3{J=C+-`H&-DY!o&FAu2$mO?~%XbmC z{}P_SWjp~(d4repg|6faS-~H+s$|(S!Hi>kVXK7V)(gd~6OLUk9JgL1VWU{e7RkaB z;_2JO)3!=xY?sd3A(OL9CVQuB)>i499kRK*Wb<~(#-CUV0~g#og+S4+S$eskL8MsW_-te@wsOxM9kas&Ak>e|AyPLXKL-o)H{y5ExYcq{AS6KXQfAD*BhOgv9GatLUM zY{+3~Z1SHkAa&-8vjR&aGgq8SMZv+Q&gC)|5gi6o9NL)K*d8oMSa_sM!aUClVw6O^sNI29k)HuQ6 z=B8!7(&jn4EF`%O9AM%Qi+Gcu^nzE;sPf;Fg^yETG%|6jO=%ER>6&Fx%*Gp3`>Z4T zhKSDzi6GT8Gi-MEetG%V+Oa^=b;p&7pP%QM@h(8hIT|99^Z7 zY!V*|d!I20;AX7}YveFuS?D4XQp4CL>fMua%%x__i$~oCd|TQb(ynAY?zOmPk?g== F4FFWfF{A(h literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame8.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame8.gif new file mode 100644 index 0000000000000000000000000000000000000000..957c37e1f44efb95a12142e8f00c62c80ded9732 GIT binary patch literal 1166 zcmZ?wbhEHb6lD-)_|Cw#mc$?u!yp{V zAQZ+RnZYQX!yuc>D3{M_wwF<nnf=R1^S*w9bzm-X+iAlSWS-+K8 zr-{X&mD!}5*|?M0u#MTEmDRMH)ufZtq)8z39E(Lii+LZL$7VM7O{_LkSgj|q+Du|K z?`5;-W4D{iZZ(0;YcreUbT<2GY!1`dooBK;&ERsKEtGJB-DMVs$6QYD1)N^zqq_P&tG-6fm1OD=zpeEuG# zqJ1i52USWBsFdzkDci4Fc2KYOs6qX4i?-8(8Jo0f4(rq(({DU()O^yU<)mrrDU0^g zmK|rTyUyBlpLLmW->&m?_?+tzb8ke=yAeJAM#_@g>C5iqt+{94f8J@*h5WVm3fDg< z-0+}q=c|%kuhct^yDhu!cl3A3k!O>xybAmLw&2I-|Ns93V+le68KZ!@A)xq^g^_`w zmq7<)EGSPfaQtTw6jgHBu;5@b3pb}u$%=)C+XeV}Why!*aJezFaTo+BFf{hdGoMfh z(coR^EG|3Yz=ea%Ol(|9$5I*;Tu)B!k?4(ZU})s#@G`n4bvBI&zkx4>E zFXev!Xn~u<3iJMA+6L~M;eunpPixYHGyd!!y`6fy&RFd z7dN-_&$G;4qL6AJ>DsTB_>19|(uoNQRwWl299K0saY(x?o3n9o>cvHlO`Bv46Wc0S z1wi$~qef=U5WCf70^_nMrN5MZzd0H#SU82|tP literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame9.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/frames/frame9.gif new file mode 100644 index 0000000000000000000000000000000000000000..05361e6e42ad5af64b34f160ff30d419d763331c GIT binary patch literal 1165 zcmZ?wbhEHb6lD-)_|Cxa>B09;kA8f5{DXm!n}OYgfyb4B%aVajm4Q`;fm!J6<&P&X zeq<0!Vh~Ma5RPOJ3OjrCGlOIXli68D*<41I3Pz=JM#W-Ag(4=^3Pz0@M%7A2wMu5K z1}5!BW`{jY2Cd9S?aYR4%m%Hj#+_{DJ#1#(ELIa(Ec#h2``O$#vD!{$wVA?dJ&Dbt zm)*Lb!)~&e$8>g|t?a&A*&JuEJI`Wwn#tiXmBW25hua)Zulcj~yqLHD6?ei}F2BXx z{)>46m+}TL=M7rM7qWcz{#Wz%zg%+UHAmDY?u0#jVJrE=R|!O}5r|kV6unkBZoOFI zrnb$GSDttyoUlP8VS{+e7Rik5lIh!|GPg@-?P%Znq+|Qj-kr~+8}CYI?~u*grBb|K zrDVT)`9Y1!LzUq$MhSH8#bLVYCdV)eA1}- zgmw2>+wQaWz2|(UUiO=QC2-c&u({Wx=H7^&cO!QG&G?14;uqaYTzo5K>Fv~IccdH7 zdQQFMKkI79-0NAZ?^!H(rQUJeZQ1qo1FuSsJezdo)w27qBEG-N`}^hp|NjgO3=k5? z7zNY{0mYvzj0_C@3_2hKL3x6K<3EG2q?XHu1qYj1csWg4RxCW+E+EJ&)3G9e%e~Jl zLB=7e!M&$1MZ{>zGJ!?i644eG7Y?vCPG=WT@epiY;@QK=mr!BI#MaK~plnbPpwQ~; z!pvinV6gBI8>j4|vJ(Y~hb}B;m2=rK!SM*Ew06jvh(aY7Hg3VbtfdzYvh+$jHXPxd z)Xdh!C(`G3fg$NAuY#{w67#>a(^GT6jy z7nNu#FXvlqQ^j&L@^C6=-(saShL@Mr1m^2Fmx)~5#C~ChmVMv60|%dY%h(4fFmNa& zFbdja>@l$1<#a;CsAPkNh0BWS@9M=zEV35zJ?WCRvEncdIx_cym|Xe22*vYHedNFP z-pc=ZxVe4yPgTWDOhT~-3^^3vlx{y-ZBy~!SOw#$24>Nm8;%`yJaP{kCERY91n?X^ n`tWWOPt}Hp9+^HVC%SaDy?Er%$}#0wkIA)+$32E@EDY8FkHS&< literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/icons/obj16/internal_browser.gif b/net.sourceforge.phpeclipse.webbrowser/icons/obj16/internal_browser.gif new file mode 100644 index 0000000000000000000000000000000000000000..09f609d6c07d324b7b1be36030042cf94c21755a GIT binary patch literal 996 zcmeH`TT4>`0DzCW=7hv)DJBI@x)D-H1&I*4LQ``W-R%qlEek_)H_vu_(Pnu|Te?k? z5}GF4(RtaCSBzox=(;NkW}gCQ^DkvrFaaj;3jo9d zCFi=FTO#Li99(YVDLmsstTs9h3`OQLpyuoKicB#<3c zqaf@MJq}8{0#f6mSmyj!k+=7l}ExNOH|HANIBoGT2ZX4C4#oxnS5M ztSJa>dd!&a-4?DJD;*)^HowN^Q$4fRIh}^3C3h&~ibQ@#B6~)?NDT>kjEeh>w;iZ{ zW1R|b_}!?u$DknQIw6&?*KqG`2%SPzeMZ^WO|R2>%h<^uH&;UnzH6dm3hfFIh(^Y7 zTH8a^@XqG^&+Ye~SBB;JkqiOm$zC2`D#pB5YFkydqemdQ#9n|4dFC|d3v`f_%~ zDqWY@dN>mfoSIH)Qdd^4*ap}SV;kvhS*Kg4wQ)(QKvLJ|ij0eQ_kit~{EoFC!i}W? GIe!2w$4$ln literal 0 HcmV?d00001 diff --git a/net.sourceforge.phpeclipse.webbrowser/plugin.properties b/net.sourceforge.phpeclipse.webbrowser/plugin.properties new file mode 100644 index 0000000..bc18d38 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/plugin.properties @@ -0,0 +1,95 @@ +pluginName=Web Browser +providerName=IBM +extensionPointURLMap=URL Map +%extensionPointFavorites=Favorite URLs + +# --- Internal Web Browser --- +internalWebBrowserName=Internal Web Browser +viewWebBrowserTitle=Web Browser + +# Actions +actionWebBrowserGo=Go to the selected URL +actionWebBrowserBack=Back to the previous page +actionWebBrowserForward=Forward to the next page +actionWebBrowserStop=Stop loading the current page +actionWebBrowserRefresh=Refresh the current page +actionWebBrowserPrint=Print the current page +actionWebBrowserFavorites=Favorites +actionWebBrowserNoFavorites=No Favorites +actionWebBrowserOrganizeFavorites=Organize Favorites... + +# Status text +webBrowserStatusUninitialized=Not ready +webBrowserStatusLoading=Loading... +webBrowserStatusLoaded=Ready +webBrowserStatusInteractive=Loading... +webBrowserStatusComplete=Done + +# message if a resource is deleted +dialogResourceDeletedTitle=Web Resource Deleted +dialogResourceDeletedMessage=The file {0} initially opened in the Web Browser has been deleted from the file system. Do you want to ignore the deletion or close the Web Browser? +dialogResourceDeletedIgnore=Ignore + +dialogOrganizeFavoritesTitle=Organize Favorites +dialogOrganizeFavoritesMessage=Organize favorite URLs below. Select the name or URL to edit. +dialogOrganizeFavoritesName=Name +dialogOrganizeFavoritesURL=URL + +# --------------- Action Sets (toolbar icon groups) --------------- + +# Web Browser action set +actionSetWebBrowserTitle=Web Browser +actionSetOpenWebBrowser=Open Web Browser +actionSetSwitchBrowser=Web Browser + +# --------------- Preferences --------------- + +# Name of the preference pages +preferenceInternetTitle=Internet +preferenceInternetDescription=General internet settings are available in the contained preference pages. +preferenceWebBrowserTitle=Web Browser +preferenceWebBrowserTitleLong=Installed Web Browsers +preferenceWebBrowserDescription=Add, remove, or edit installed Web browsers.\nThe selected Web browser will be used whenever Web pages are opened. + +# Web Browser preferences +prefUseInternalBrowser=Use the &internal Web Browser +prefBrowserNewPage=&Open a new page for each request +prefUseExternalBrowser=Use e&xternal Web Browser + +errorDialogTitle=Error +errorCouldNotLaunchWebBrowser=Could not launch external Web Browser for {0}. Check the Web Browser preferences. +errorNoBrowser=Could not open a Web browser because there are none configured. Check the Web Browser preferences. + +browserList=Installed &Web Browsers: +add=&Add... +edit=&Edit... +remove=&Remove +search=&Search... +createBrowser=Add Installed Web Browser +editInternalBrowser=Internal Web Browser +editExternalBrowser=Edit Installed Web Browser +clearURLHistory=Clear URL history when exiting workbench +clearURLHistoryNow=Clear URL History Now +name=&Name: +location=&Location: +parameters=&Parameters: +parametersMessage=(Use {0} to include the URL) +browse=&Browse... +browseMessage=Specify the location of the Web Browser executable +errorCouldNotLaunchInternalWebBrowser=Could not launch internal Web Browser. Please set an external browser in the Browser preferences. +searchingTaskName=Searching for Web browsers... +searching=Found {0} - Searching {1} +searchingNoneFound=No Web browsers were found. +selectDirectory=Select a directory to search for Web browsers: +directoryDialogTitle=Directory Selection +locationInvalid=The location value is not a valid path name. + +browserInternetExplorer=Internet Explorer +browserNetscape4=Netscape Communicator v4.x +browserNetscape7=Netscape v7.x +browserNetscape=Netscape +browserMozilla=Mozilla +browserOpera=Opera +browserKonqueror=Konqueror +browserGaleon=Galeon +browserExternal=External Browser \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/plugin.xml b/net.sourceforge.phpeclipse.webbrowser/plugin.xml new file mode 100644 index 0000000..d09433b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/plugin.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/schema/favorites.exsd b/net.sourceforge.phpeclipse.webbrowser/schema/favorites.exsd new file mode 100644 index 0000000..e2c40c9 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/schema/favorites.exsd @@ -0,0 +1,124 @@ + + + + + + + + + This extension point provides a way to define default Favorites (URLs). + + + + + + + + + + + + a fully qualified identifier of the target extension point + + + + + + + an optional identifier of the extension instance + + + + + + + an optional name of the extension instance + + + + + + + + + + + + + + + + + + + specifies a unique identifier for this extension point + + + + + + + specifies the URL of the favorite + + + + + + + specifies the translatable name of the favorite + + + + + + + set to "true" if the favorite cannot be changed by the user, and "false" if the favorite is initially available, but the user can remove it + + + + + + + + + + + + The following is an example of the favorites extension point: + +<p> +<pre> + <extension point="org.eclipse.webbrowser.favorites"> + <startup + id="com.example.ExampleIdentifier" + name="eclipse" + url="http://www.eclipse.org"/> + </extension> +</pre> +</p> + + + + + + + + + + + + + + + + + + Copyright (c) 2000, 2003 IBM Corporation and others.<br> +All rights reserved. This program and the accompanying materials are made +available under the terms of the Common Public License v1.0 which accompanies +this distribution, and is available at +<a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a> + + + + diff --git a/net.sourceforge.phpeclipse.webbrowser/schema/urlMap.exsd b/net.sourceforge.phpeclipse.webbrowser/schema/urlMap.exsd new file mode 100644 index 0000000..6b8aea1 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/schema/urlMap.exsd @@ -0,0 +1,112 @@ + + + + + + + + + This extension point provides a way to map URLs (Strings) entered in the internal Web browser to another URL. For instance, it can be user to map the word "eclipse" to "http://www.eclipse.org". + + + + + + + + + + + + a fully qualified identifier of the target extension point + + + + + + + an optional identifier of the extension instance + + + + + + + an optional name of the extension instance + + + + + + + + + + + + + + + + + + + specifies a unique identifier for this extension point + + + + + + + specifies the fully qualified name of the Java class that implements <samp>IURLMap</samp>. + + + + + + + + + + + + + + + The following is an example of a URL map extension point: + +<p> +<pre> + <extension point="org.eclipse.webbrowser.urlMap"> + <startup + id="com.example.ExampleIdentifier" + class="com.example.ExampleURLMap"/> + </extension> +</pre> +</p> + + + + + + + + + Value of the attribute <b>class</b> must be a fully qualified name of a Java class that implements the interface <b>org.eclipse.webbrowser.IURLMap</b>. + + + + + + + + + Copyright (c) 2000, 2003 IBM Corporation and others.<br> +All rights reserved. This program and the accompanying materials are made +available under the terms of the Common Public License v1.0 which accompanies +this distribution, and is available at +<a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a> + + + + diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/ExtendedBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/ExtendedBrowser.java new file mode 100644 index 0000000..1199c59 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/ExtendedBrowser.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2004 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; + +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.webbrowser.internal.WebBrowser; +/** + * Web browser widget. Extends the eclipse Browser widget by adding an + * optional toolbar and statusbar. + */ +public class ExtendedBrowser extends WebBrowser { + public ExtendedBrowser(Composite parent, final boolean showToolbar, final boolean showStatusbar) { + super(parent, showToolbar, showStatusbar); + } + + /** + * Return the underlying browser control. + * + * @return org.eclipse.swt.browser.Browser + */ + public Browser getBrowser() { + return browser; + } + + public void home() { + super.home(); + } + + public void setURL(String url) { + super.setURL(url); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowser.java new file mode 100644 index 0000000..c00925b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowser.java @@ -0,0 +1,15 @@ +package org.eclipse.webbrowser; +/** + * + */ +public interface IExternalWebBrowser extends IWebBrowser { + public String getLocation(); + + public String getParameters(); + + public void delete(); + + public boolean isWorkingCopy(); + + public IExternalWebBrowserWorkingCopy getWorkingCopy(); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowserWorkingCopy.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowserWorkingCopy.java new file mode 100644 index 0000000..89afcf8 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IExternalWebBrowserWorkingCopy.java @@ -0,0 +1,13 @@ +package org.eclipse.webbrowser; +/** + * + */ +public interface IExternalWebBrowserWorkingCopy extends IExternalWebBrowser { + public void setName(String name); + + public void setLocation(String location); + + public void setParameters(String params); + + public IExternalWebBrowser save(); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowser.java new file mode 100644 index 0000000..8a470cc --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowser.java @@ -0,0 +1,13 @@ +package org.eclipse.webbrowser; +/** + * + */ +public interface IInternalWebBrowser extends IWebBrowser { + public boolean getUseNewPage(); + + public boolean getClearHistoryOnExit(); + + public boolean isWorkingCopy(); + + public IInternalWebBrowserWorkingCopy getWorkingCopy(); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowserWorkingCopy.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowserWorkingCopy.java new file mode 100644 index 0000000..6a714ca --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IInternalWebBrowserWorkingCopy.java @@ -0,0 +1,11 @@ +package org.eclipse.webbrowser; +/** + * + */ +public interface IInternalWebBrowserWorkingCopy extends IInternalWebBrowser { + public void setUseNewPage(boolean b); + + public void setClearHistoryOnExit(boolean b); + + public IInternalWebBrowser save(); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IURLMap.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IURLMap.java new file mode 100644 index 0000000..d2e8b58 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IURLMap.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; +/** + * Interface for mapping special URLs to other locations. + */ +public interface IURLMap { + /** + * Returns a mapped URL + * + * @param url java.lang.String + * @return java.lang.String + */ + public String getMappedURL(String url); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowser.java new file mode 100644 index 0000000..c2936c6 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowser.java @@ -0,0 +1,11 @@ +package org.eclipse.webbrowser; + +import java.net.URL; +/** + * + */ +public interface IWebBrowser { + public String getName(); + + public void openURL(URL url); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowserEditorInput.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowserEditorInput.java new file mode 100644 index 0000000..ce6177d --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/IWebBrowserEditorInput.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; + +import java.net.URL; +import org.eclipse.ui.IEditorInput; +/** + * The editor input for the Web browser editor. If the + * integrated Web browser exists for this platform, (and + * the user has chosen to use it) this information will + * be used to populate the Web browser. If not, this + * information will be used to launch an external Web + * browser. + */ +public interface IWebBrowserEditorInput extends IEditorInput { + /** + * Returns true if this page can reuse the browser that the + * given input is being displayed in, or false if it should + * open up in a new page. + * + * @param input org.eclipse.webbrowser.IWebBrowserEditorInput + * @return boolean + */ + public boolean canReplaceInput(IWebBrowserEditorInput input); + + /** + * Returns the url that should be displayed in the browser. + * + * @return java.net.URL + */ + public URL getURL(); + + /** + * Returns true if the Web statusbar should be shown. + * + * @return boolean + */ + public boolean isStatusbarVisible(); + + /** + * Returns true if the Web toolbar should be shown. + * + * @return boolean + */ + public boolean isToolbarVisible(); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserAction.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserAction.java new file mode 100644 index 0000000..78a04ed --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserAction.java @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; + +import org.eclipse.jface.action.Action; +import org.eclipse.webbrowser.WebBrowser; +import org.eclipse.webbrowser.WebBrowserEditorInput; +/** + * Action to open the Web browser. + */ +public class OpenBrowserAction extends Action { + /** + * OpenBrowserAction constructor comment. + */ + public OpenBrowserAction() { + super(); + } + + /** + * Implementation of method defined on IAction. + */ + public void run() { + WebBrowser.openURL(new WebBrowserEditorInput(null, WebBrowserEditorInput.SHOW_ALL | WebBrowserEditorInput.FORCE_NEW_PAGE)); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserWorkbenchAction.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserWorkbenchAction.java new file mode 100644 index 0000000..08443e8 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/OpenBrowserWorkbenchAction.java @@ -0,0 +1,67 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.action.IAction; +import org.eclipse.ui.*; +import org.eclipse.webbrowser.WebBrowser; +import org.eclipse.webbrowser.WebBrowserEditorInput; +/** + * Action to open the Web broswer. + */ +public class OpenBrowserWorkbenchAction implements IWorkbenchWindowActionDelegate { + /** + * OpenBrowserWorkbenchAction constructor comment. + */ + public OpenBrowserWorkbenchAction() { + super(); + } + + /** + * Disposes this action delegate. The implementor should unhook any references + * to itself so that garbage collection can occur. + */ + public void dispose() { } + + /** + * Initializes this action delegate with the workbench window it will work in. + * + * @param window the window that provides the context for this delegate + */ + public void init(IWorkbenchWindow window) { } + + /** + * Performs this action. + *

+ * This method is called when the delegating action has been triggered. + * Implement this method to do the actual work. + *

+ * + * @param action the action proxy that handles the presentation portion of the + * action + */ + public void run(IAction action) { + WebBrowser.openURL(new WebBrowserEditorInput(null, WebBrowserEditorInput.SHOW_ALL | WebBrowserEditorInput.FORCE_NEW_PAGE)); + } + + /** + * Notifies this action delegate that the selection in the workbench has changed. + *

+ * Implementers can use this opportunity to change the availability of the + * action or to modify other presentation properties. + *

+ * + * @param action the action proxy that handles presentation portion of the action + * @param selection the current selection in the workbench + */ + public void selectionChanged(IAction action, ISelection selection) { } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowser.java new file mode 100644 index 0000000..c104e6b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowser.java @@ -0,0 +1,119 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; + +import java.net.URL; +import java.util.List; + +import org.eclipse.swt.widgets.Display; +import org.eclipse.webbrowser.internal.*; +/** + * The main interface to the internal Web browser. If allows + * you to query the file types supported by the Web browser + * and open a URL. + */ +public class WebBrowser { + /** + * WebBrowser constructor comment. + */ + private WebBrowser() { + super(); + } + + /** + * Returns true if the internal Web browser is supported on this + * platform and the user has chosen to use it. + * + * @return boolean + */ + public static boolean isUsingInternalBrowser() { + return (getCurrentWebBrowser() instanceof IInternalWebBrowser); + } + + /** + * Display the given URL in a Web browser. If the user has chosen not + * to use the internal browser, an external browser will be used. If + * not, a browser in the current page will be reused if forceNewPage + * is not true and the user preference is not set. Finally, showToolbar + * will decide when the toolbar should be shown in the internal browser. + * + * @param input + */ + public static void openURL(final IWebBrowserEditorInput input) { + Trace.trace(Trace.FINEST, "openURL() " + input); + if (input == null) + return; + + Display.getDefault().asyncExec(new Runnable() { + public void run() { + if (!isUsingInternalBrowser()){ + IWebBrowser browser = getCurrentWebBrowser(); + browser.openURL(input.getURL()); + } else + WebBrowserEditor.open(input); + } + }); + } + + /** + * Return a list of all the installed Web browsers. + * + * @return + */ + public static List getWebBrowsers() { + return BrowserManager.getInstance().getWebBrowsers(); + } + + /** + * Return the current default web browser. + * + * @return + */ + public static IWebBrowser getCurrentWebBrowser() { + return BrowserManager.getInstance().getCurrentWebBrowser(); + } + + /** + * Set the current default web browser. + * + * @return + */ + public static void getCurrentWebBrowser(IWebBrowser browser) { + BrowserManager.getInstance().setCurrentWebBrowser(browser); + } + + /** + * Create a new external Web browser. + * + * @return + */ + public static IExternalWebBrowserWorkingCopy createExternalWebBrowser() { + return new ExternalWebBrowserWorkingCopy(); + } + + /** + * Display the given URL in a Web browser. + * + * @param url java.net.URL + */ + public static void openURL(URL url) { + IWebBrowser browser = getCurrentWebBrowser(); + if (browser != null) + browser.openURL(url); + else { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorNoBrowser")); + } + }); + } + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowserEditorInput.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowserEditorInput.java new file mode 100644 index 0000000..5b031ff --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/WebBrowserEditorInput.java @@ -0,0 +1,315 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser; + +import java.net.URL; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.*; +import org.eclipse.webbrowser.internal.ImageResource; +import org.eclipse.webbrowser.internal.Trace; +import org.eclipse.webbrowser.internal.WebBrowserPreference; +import org.eclipse.webbrowser.internal.WebBrowserUIPlugin; +import org.eclipse.core.runtime.IAdaptable; +/** + * The editor input for the integrated web browser. + */ +public class WebBrowserEditorInput implements IWebBrowserEditorInput, IPersistableElement, IElementFactory { + // --- constants to pass into constructor --- + + // if used, the toolbar will be available + public static final int SHOW_TOOLBAR = 1 << 1; + + // if used, the status bar will be available + public static final int SHOW_STATUSBAR = 1 << 2; + + // if used, this input will always force a new page + // and will never reuse an open Web browser + public static final int FORCE_NEW_PAGE = 1 << 3; + + // if used, the original URL will be saved and + // the page can reopen to the same URL after + // shutting down + public static final int SAVE_URL = 1 << 5; + + // if used, the browser will be transient and will not appear + // in the most recently used file list, nor will it reopen after + // restarting Eclipse + public static final int TRANSIENT = 1 << 6; + + public static final int SHOW_ALL = SHOW_TOOLBAR | SHOW_STATUSBAR; + + private static final String ELEMENT_FACTORY_ID = "org.eclipse.webbrowser.elementFactory"; + private static final String MEMENTO_URL = "url"; + private static final String MEMENTO_STYLE = "style"; + private static final String MEMENTO_ID = "id"; + + private URL url; + private int style; + private String id = null; + + /** + * WebBrowser editor input for the homepage. + */ + public WebBrowserEditorInput() { + this(null); + } + + /** + * WebBrowserEditorInput constructor comment. + */ + public WebBrowserEditorInput(URL url) { + this(url, SHOW_ALL | SAVE_URL); + } + + /** + * WebBrowserEditorInput constructor comment. + */ + public WebBrowserEditorInput(URL url, int style) { + super(); + this.url = url; + this.style = style; + } + + /** + * WebBrowserEditorInput constructor comment. + */ + public WebBrowserEditorInput(URL url, int style, String browserId) { + super(); + this.url = url; + this.style = style; + this.id = browserId; + } + + /** + * WebBrowserEditorInput constructor comment. + */ + public WebBrowserEditorInput(URL url, boolean b) { + this(url); + } + + /** + * Returns true if this page can reuse the browser that the + * given input is being displayed in, or false if it should + * open up in a new page. + * + * @param input org.eclipse.webbrowser.IWebBrowserEditorInput + * @return boolean + */ + public boolean canReplaceInput(IWebBrowserEditorInput input) { + Trace.trace(Trace.FINEST, "canReplaceInput " + this + " " + input); + if ((style & FORCE_NEW_PAGE) != 0) + return false; + else if (input.isToolbarVisible() != isToolbarVisible()) + return false; + else if (input.isStatusbarVisible() != isStatusbarVisible()) + return false; + else if (id != null) { + if (!(input instanceof WebBrowserEditorInput)) + return false; + String bid = ((WebBrowserEditorInput) input).getBrowserId(); + return id.equals(bid); + } else + return false; + } + + /** + * Creates an IElement from the state captured within + * an IMemento. + * + * @param memento a memento containing the state for an element + * @return an element, or null if the element could not be created + */ + public IAdaptable createElement(IMemento memento) { + URL url2 = null; + try { + url2 = new URL(WebBrowserPreference.getHomePageURL()); + } catch (Exception e) { + // could not determine the URL + } + + int newStyle = SHOW_TOOLBAR | SHOW_STATUSBAR; + try { + newStyle = memento.getInteger(MEMENTO_STYLE).intValue(); + + if ((newStyle & SAVE_URL) != 0) + url = new URL(memento.getString(MEMENTO_URL)); + } catch (Exception e) { + // could not determine the style + } + + String id2 = null; + try { + id2 = memento.getString(MEMENTO_ID); + if (id2 != null && id2.length() < 1) + id2 = null; + } catch (Exception e) { } + + return new WebBrowserEditorInput(url2, newStyle, id2); + } + + /** + * Indicates whether some other object is "equal to" this one. + * In this case it means that the underlying IFolders are equal. + */ + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!(obj instanceof WebBrowserEditorInput)) + return false; + WebBrowserEditorInput other = (WebBrowserEditorInput) obj; + + if (url != null && !url.equals(obj)) + return false; + + return canReplaceInput(other); + } + + /** + * Returns whether the editor input exists. + *

+ * This method is primarily used to determine if an editor input should + * appear in the "File Most Recently Used" menu. An editor input will appear + * in the list until the return value of exists becomes + * false or it drops off the bottom of the list. + * + * @return true if the editor input exists; false + * otherwise + */ + public boolean exists() { + if ((style & TRANSIENT) != 0) + return false; + else + return true; + } + + /** + * Returns an object which is an instance of the given class + * associated with this object. Returns null if + * no such object can be found. + * + * @param adapter the adapter class to look up + * @return a object castable to the given class, + * or null if this object does not + * have an adapter for the given class + */ + public Object getAdapter(Class adapter) { + return null; + } + + /** + * Returns the ID of an element factory which can be used to recreate + * this object. An element factory extension with this ID must exist + * within the workbench registry. + * + * @return the element factory ID + */ + public String getFactoryId() { + return ELEMENT_FACTORY_ID; + } + + public ImageDescriptor getImageDescriptor() { + return ImageResource.getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER); + } + + /** + * Returns the name of this editor input for display purposes. + *

+ * For instance, if the fully qualified input name is + * "a\b\MyFile.gif", the return value would be just + * "MyFile.gif". + * + * @return the file name string + */ + public String getName() { + return WebBrowserUIPlugin.getResource("%viewWebBrowserTitle"); + } + + /* + * Returns an object that can be used to save the state of this editor input. + * + * @return the persistable element, or null if this editor input + * cannot be persisted + */ + public IPersistableElement getPersistable() { + if ((style & TRANSIENT) != 0) + return null; + else + return this; + } + + public String getToolTipText() { + if (url != null) + return url.toExternalForm(); + else + return WebBrowserUIPlugin.getResource("%viewWebBrowserTitle"); + } + + /** + * Returns the url. + * + * @return java.net.URL + */ + public URL getURL() { + return url; + } + + /** + * Returns the browser id. Browsers with a set id will always & only be + * replaced by browsers with the same id. + * + * @return String + */ + public String getBrowserId() { + return id; + } + + /** + * Returns true if the status bar should be shown. + * + * @return boolean + */ + public boolean isStatusbarVisible() { + return (style & SHOW_STATUSBAR) != 0; + } + + /** + * Returns true if the toolbar should be shown. + * + * @return boolean + */ + public boolean isToolbarVisible() { + return (style & SHOW_TOOLBAR) != 0; + } + + /** + * Saves the state of an element within a memento. + * + * @param memento the storage area for element state + */ + public void saveState(IMemento memento) { + if ((style & SAVE_URL) != 0 && url != null) + memento.putString(MEMENTO_URL, url.toExternalForm()); + + memento.putInteger(MEMENTO_STYLE, style); + + if (id != null) + memento.putString(MEMENTO_ID, id); + } + + /** + * Converts this object to a string. + * + * @return java.lang.String + */ + public String toString() { + return "WebBrowserEditorInput[" + url + " " + style + " " + id + "]"; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserContentProvider.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserContentProvider.java new file mode 100644 index 0000000..5fe4aed --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserContentProvider.java @@ -0,0 +1,71 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import java.util.*; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.webbrowser.IWebBrowser; + +/** + * Monitor content provider. + */ +public class BrowserContentProvider implements IStructuredContentProvider { + /** + * BrowserContentProvider constructor comment. + */ + public BrowserContentProvider() { + super(); + } + + /** + * Disposes of this content provider. + * This is called by the viewer when it is disposed. + */ + public void dispose() { } + + /** + * Returns the elements to display in the viewer + * when its input is set to the given element. + * These elements can be presented as rows in a table, items in a list, etc. + * The result is not modified by the viewer. + * + * @param inputElement the input element + * @return the array of elements to display in the viewer + */ + public Object[] getElements(Object inputElement) { + List list = new ArrayList(); + Iterator iterator = BrowserManager.getInstance().getWebBrowsers().iterator(); + while (iterator.hasNext()) { + IWebBrowser browser = (IWebBrowser) iterator.next(); + list.add(browser); + } + return list.toArray(); + } + + /** + * Notifies this content provider that the given viewer's input + * has been switched to a different element. + *

+ * A typical use for this method is registering the content provider as a listener + * to changes on the new input (using model-specific means), and deregistering the viewer + * from the old input. In response to these change notifications, the content provider + * propagates the changes to the viewer. + *

+ * + * @param viewer the viewer + * @param oldInput the old input element, or null if the viewer + * did not previously have an input + * @param newInput the new input element, or null if the viewer + * does not have an input + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserManager.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserManager.java new file mode 100644 index 0000000..55b33d9 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserManager.java @@ -0,0 +1,274 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import java.io.ByteArrayInputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Preferences; +import org.eclipse.core.runtime.Status; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.XMLMemento; +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IWebBrowser; +/** + * + */ +public class BrowserManager { + private static final int ADD = 0; + private static final int CHANGE = 1; + private static final int REMOVE = 2; + + protected List browsers; + protected IWebBrowser currentBrowser; + protected List browserListeners = new ArrayList(); + + private Preferences.IPropertyChangeListener pcl; + protected boolean ignorePreferenceChanges = false; + + protected static BrowserManager instance; + + public static BrowserManager getInstance() { + if (instance == null) + instance = new BrowserManager(); + return instance; + } + + private BrowserManager() { + pcl = new Preferences.IPropertyChangeListener() { + public void propertyChange(Preferences.PropertyChangeEvent event) { + if (ignorePreferenceChanges) + return; + String property = event.getProperty(); + if (property.equals("browsers")) { + loadBrowsers(); + } + } + }; + + WebBrowserUIPlugin.getInstance().getPluginPreferences().addPropertyChangeListener(pcl); + } + + protected void dispose() { + WebBrowserUIPlugin.getInstance().getPluginPreferences().removePropertyChangeListener(pcl); + + // clear the cache + Iterator iterator = browsers.iterator(); + while (iterator.hasNext()) { + Object obj = iterator.next(); + if (obj instanceof IInternalWebBrowser) { + IInternalWebBrowser wb = (IInternalWebBrowser) obj; + if (wb.getClearHistoryOnExit()) + WebBrowserPreference.setInternalWebBrowserHistory(null); + } + } + } + + public IExternalWebBrowserWorkingCopy createExternalWebBrowser() { + return new ExternalWebBrowserWorkingCopy(); + } + + public List getWebBrowsers() { + if (browsers == null) + loadBrowsers(); + return new ArrayList(browsers); + } + + protected void loadBrowsers() { + Trace.trace(Trace.FINEST, "Loading web browsers"); + + Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); + String xmlString = prefs.getString("browsers"); + if (xmlString != null && xmlString.length() > 0) { + browsers = new ArrayList(); + + try { + ByteArrayInputStream in = new ByteArrayInputStream(xmlString.getBytes()); + Reader reader = new InputStreamReader(in); + IMemento memento = XMLMemento.createReadRoot(reader); + + IMemento child = memento.getChild("internal"); + if (child != null) { + InternalWebBrowser browser = new InternalWebBrowser(); + browser.load(child); + browsers.add(browser); + } + + IMemento[] children = memento.getChildren("external"); + int size = children.length; + for (int i = 0; i < size; i++) { + ExternalWebBrowser browser = new ExternalWebBrowser(); + browser.load(children[i]); + browsers.add(browser); + } + + Integer current = memento.getInteger("current"); + if (current != null) { + currentBrowser = (IWebBrowser) browsers.get(current.intValue()); + } + } catch (Exception e) { + Trace.trace(Trace.WARNING, "Could not load browsers: " + e.getMessage()); + } + addInternalBrowser(browsers); + if (currentBrowser == null && browsers.size() > 0) + currentBrowser = (IWebBrowser) browsers.get(0); + } else { + setupDefaultBrowsers(); + saveBrowsers(); + return; + } + } + + protected void saveBrowsers() { + try { + ignorePreferenceChanges = true; + XMLMemento memento = XMLMemento.createWriteRoot("web-browsers"); + + Iterator iterator = browsers.iterator(); + while (iterator.hasNext()) { + Object obj = iterator.next(); + if (obj instanceof InternalWebBrowser) { + InternalWebBrowser browser = (InternalWebBrowser) obj; + IMemento child = memento.createChild("internal"); + browser.save(child); + } else if (obj instanceof ExternalWebBrowser) { + ExternalWebBrowser browser = (ExternalWebBrowser) obj; + IMemento child = memento.createChild("external"); + browser.save(child); + } + } + + memento.putInteger("current", browsers.indexOf(currentBrowser)); + + StringWriter writer = new StringWriter(); + memento.save(writer); + String xmlString = writer.getBuffer().toString(); + Preferences prefs = WebBrowserUIPlugin.getInstance().getPluginPreferences(); + prefs.setValue("browsers", xmlString); + WebBrowserUIPlugin.getInstance().savePluginPreferences(); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Could not save browsers", e); + } + ignorePreferenceChanges = false; + } + + protected void addInternalBrowser(List browserList) { + if (browserList == null) + return; + + Iterator iterator = browserList.iterator(); + while (iterator.hasNext()) { + IWebBrowser browser = (IWebBrowser) iterator.next(); + if (browser instanceof IInternalWebBrowser) + return; + } + + // add the internal browser if we can + WebBrowserUIPlugin.getInstance().getLog().log(new Status(IStatus.INFO, + WebBrowserUIPlugin.PLUGIN_ID, 0, WebBrowserUtil.canUseInternalWebBrowser() + "/" + WebBrowserUtil.isInternalBrowserOperational(), null)); + if (!WebBrowserUtil.canUseInternalWebBrowser() || !WebBrowserUtil.isInternalBrowserOperational()) + return; + + browserList.add(0, new InternalWebBrowser()); + } + + private void setupDefaultBrowsers() { + browsers = new ArrayList(); + + addInternalBrowser(browsers); + + // handle all the EXTERNAL browsers by criteria and add those too at startup + WebBrowserUtil.addFoundBrowsers(browsers); + + // by default, if internal is there, that is current, else set the first external one + if (!browsers.isEmpty()) + currentBrowser = (IWebBrowser) browsers.get(0); + } + + protected void addBrowser(IExternalWebBrowser browser) { + if (browsers == null) + loadBrowsers(); + if (!browsers.contains(browser)) + browsers.add(browser); + fireWebBrowserEvent(browser, ADD); + saveBrowsers(); + } + + protected void removeWebBrowser(IExternalWebBrowser browser) { + if (browsers == null) + loadBrowsers(); + browsers.remove(browser); + fireWebBrowserEvent(browser, REMOVE); + } + + // Internal Web browser CAN be "edited", just not created or removed + protected void browserChanged(IWebBrowser browser) { + fireWebBrowserEvent(browser, CHANGE); + saveBrowsers(); + } + + /** + * Add Web browser listener. + * @param listener + */ + public void addWebBrowserListener(IWebBrowserListener listener) { + browserListeners.add(listener); + } + + /** + * Remove Web browser listener. + * @param listener + */ + public void removeWebBrowserListener(IWebBrowserListener listener) { + browserListeners.remove(listener); + } + + /** + * Fire a Web browser event. + * @param browser + * @param type + */ + protected void fireWebBrowserEvent(IWebBrowser browser, int type) { + Object[] obj = browserListeners.toArray(); + + int size = obj.length; + for (int i = 0; i < size; i++) { + IWebBrowserListener listener = (IWebBrowserListener) obj[i]; + if (type == ADD) + listener.browserAdded(browser); + else if (type == CHANGE) + listener.browserChanged(browser); + else if (type == REMOVE) + listener.browserRemoved(browser); + } + } + + public IWebBrowser getCurrentWebBrowser() { + if (browsers == null) + loadBrowsers(); + + return currentBrowser; + } + + public void setCurrentWebBrowser(IWebBrowser wb) { + if (browsers.contains(wb)) + currentBrowser = wb; + saveBrowsers(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java new file mode 100644 index 0000000..c43dff2 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserSearcher.java @@ -0,0 +1,126 @@ +package org.eclipse.webbrowser.internal; +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html +  * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +import org.eclipse.core.runtime.IProgressMonitor; +/** + * + */ +public class BrowserSearcher { + private static boolean cancelled; + private BrowserSearcher() { + super(); + } + + /** + * Search for installed VMs in the file system + */ + protected static List search(Shell shell) { + final List foundBrowsers = new ArrayList(); + final List existingPaths = WebBrowserUtil.getExternalBrowserPaths(); + + // select a target directory for the search + DirectoryDialog dialog = new DirectoryDialog(shell); + dialog.setMessage(WebBrowserUIPlugin.getResource("%selectDirectory")); + dialog.setText(WebBrowserUIPlugin.getResource("%directoryDialogTitle")); + + String path = dialog.open(); + if (path == null) + return null; + + cancelled = false; + + final File rootDir = new File(path); + ProgressMonitorDialog pm = new ProgressMonitorDialog(shell); + + IRunnableWithProgress r = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) { + monitor.beginTask( + WebBrowserUIPlugin.getResource("%searchingTaskName"), + IProgressMonitor.UNKNOWN); + search(rootDir, existingPaths, foundBrowsers, monitor); + monitor.done(); + if (monitor.isCanceled()) + setCancelled(true); + } + }; + + try { + pm.run(true, true, r); + } catch (InvocationTargetException e) { + Trace.trace(Trace.SEVERE, "Invocation Exception occured running monitor: " + e); + } catch (InterruptedException e) { + Trace.trace(Trace.SEVERE, "Interrupted exception occured running monitor: " + e); + return null; + } + + if (cancelled) + return null; + + return foundBrowsers; + } + + protected static void setCancelled(boolean b) { + cancelled = b; + } + + protected static void search(File directory, List existingPaths, List foundBrowsers, IProgressMonitor monitor) { + if (monitor.isCanceled()) + return; + + String[] names = directory.list(); + List subDirs = new ArrayList(); + + for (int i = 0; i < names.length; i++) { + if (monitor.isCanceled()) + return; + + File file = new File(directory, names[i]); + + if (existingPaths.contains(file.getAbsolutePath().toLowerCase())) + continue; + + IExternalWebBrowserWorkingCopy wc = WebBrowserUtil.createExternalBrowser(file); + if (wc != null) + foundBrowsers.add(wc); + + try { + monitor.subTask( + MessageFormat.format(WebBrowserUIPlugin.getResource("%searching"), + new String[] { Integer.toString(foundBrowsers.size()), file.getCanonicalPath()})); + } catch (IOException ioe) { + } + + if (file.isDirectory()) { + if (monitor.isCanceled()) + return; + subDirs.add(file); + } + } + while (!subDirs.isEmpty()) { + File subDir = (File) subDirs.remove(0); + search(subDir, existingPaths, foundBrowsers, monitor); + if (monitor.isCanceled()) { + return; + } + } + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java new file mode 100644 index 0000000..32e38e5 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableComposite.java @@ -0,0 +1,272 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import java.util.Iterator; + +import org.eclipse.jface.viewers.*; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.*; +import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IInternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.IWebBrowser; +import org.eclipse.jface.viewers.CheckStateChangedEvent; +import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.ICheckStateListener; +/** + * + */ +public class BrowserTableComposite extends Composite { + protected Table table; + protected CheckboxTableViewer tableViewer; + protected Button edit; + protected Button remove; + protected Button search; + protected IWebBrowser selection; + + protected Label location; + protected Label parameters; + + public BrowserTableComposite(Composite parent, int style) { + super(parent, style); + createWidgets(); + } + + protected void createWidgets() { + GridLayout layout = new GridLayout(); + layout.horizontalSpacing = 5; + layout.verticalSpacing = 5; + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 2; + setLayout(layout); + + GridData data = new GridData(GridData.FILL_BOTH); + setLayoutData(data); + + Label label = new Label(this, SWT.NONE); + label.setText(WebBrowserUIPlugin.getResource("%browserList")); + data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER); + data.horizontalSpan = 2; + label.setLayoutData(data); + + table = new Table(this, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION); + data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); + data.widthHint = 300; + table.setLayoutData(data); + table.setHeaderVisible(false); + table.setLinesVisible(false); + + TableLayout tableLayout = new TableLayout(); + new TableColumn(table, SWT.NONE); + + tableLayout.addColumnData(new ColumnWeightData(100)); + + table.setLayout(tableLayout); + + tableViewer = new CheckboxTableViewer(table); + + tableViewer.setContentProvider(new BrowserContentProvider()); + tableViewer.setLabelProvider(new BrowserTableLabelProvider()); + + tableViewer.setInput("root"); + + // uncheck any other elements that might be checked and leave only the element checked to + // remain checked since one can only chose one brower at a time to be current. + tableViewer.addCheckStateListener(new ICheckStateListener() { + public void checkStateChanged(CheckStateChangedEvent e) { + checkNewDefaultBrowser(e.getElement()); + IWebBrowser browser = (IWebBrowser) e.getElement(); + BrowserManager.getInstance().setCurrentWebBrowser(browser); + + // if no other browsers are checked, don't allow the single one currently + // checked to become unchecked, and lose a current browser. That is, don't + // permit unchecking if no other item is checked which is supposed to be the case. + Object[] obj = tableViewer.getCheckedElements(); + if (obj.length == 0) + tableViewer.setChecked(e.getElement(), true); + } + }); + + // set a default, checked browser based on the current browser. If there is not a + // current browser, but the first item exists, use that instead. + // This will work currently until workbench shutdown, because current browser is not yet persisted. + IWebBrowser browser = BrowserManager.getInstance().getCurrentWebBrowser(); + if (browser != null) + tableViewer.setChecked(browser, true); + else { + Object obj = tableViewer.getElementAt(0); + if (obj != null) + tableViewer.setChecked(obj, true); + } + + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + Object obj = getSelection(event.getSelection()); + + if (obj instanceof IInternalWebBrowser) { + selection = (IInternalWebBrowser) obj; + remove.setEnabled(false); + edit.setEnabled(true); + } else if (obj instanceof IExternalWebBrowser) { + selection = (IExternalWebBrowser) obj; + remove.setEnabled(true); + edit.setEnabled(true); + } else + selection = null; + + if (selection == null) { + edit.setEnabled(false); + remove.setEnabled(false); + } + } + }); + + Composite buttonComp = new Composite(this, SWT.NONE); + layout = new GridLayout(); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 5; + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + buttonComp.setLayout(layout); + data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_FILL); + buttonComp.setLayoutData(data); + + Button add = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%add")); + add.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + ExternalBrowserDialog dialog = new ExternalBrowserDialog(getShell()); + if (dialog.open() == Window.CANCEL) + return; + tableViewer.refresh(); + } + }); + + edit = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%edit")); + edit.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + IWebBrowser browser2 = getSelectedWebBrowser(); + + if (browser2 instanceof IInternalWebBrowser) { + IInternalWebBrowserWorkingCopy wc = ((IInternalWebBrowser) browser2).getWorkingCopy(); + InternalBrowserDialog dialog = new InternalBrowserDialog(getShell(), wc); + if (dialog.open() != Window.CANCEL) { + try { + tableViewer.refresh(wc.save()); + } catch (Exception ex) { } + } + } + else if(browser2 instanceof IExternalWebBrowser) { + IExternalWebBrowserWorkingCopy wc = ((IExternalWebBrowser) browser2).getWorkingCopy(); + ExternalBrowserDialog dialog = new ExternalBrowserDialog(getShell(), wc); + if (dialog.open() != Window.CANCEL) { + try { + tableViewer.refresh(wc.save()); + } catch (Exception ex) { } + } + } + } + }); + edit.setEnabled(false); + + remove = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%remove")); + remove.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + IWebBrowser browser2 = getSelectedWebBrowser(); + try { + if (browser2 instanceof IInternalWebBrowser){ + remove.setEnabled(false); + return; // nothing else possible to do + } + else if(browser2 instanceof IExternalWebBrowser) { + remove.setEnabled(true); + ((IExternalWebBrowser) browser2).delete(); + + tableViewer.remove(browser2); + + // need here to ensure that if the item deleted was checked, ie, was + // the current browser, that the new current browser will be the first in the + // list, typically, the internal browser, which cannot be deleted, and be current. + if(((IExternalWebBrowser) browser2) == BrowserManager.getInstance().getCurrentWebBrowser()){ + Object obj = tableViewer.getElementAt(0); + if(obj != null){ + BrowserManager.getInstance().setCurrentWebBrowser((InternalWebBrowser)obj); + tableViewer.setChecked(obj, true); + } + } + } + } catch (Exception ex) { } + } + }); + remove.setEnabled(false); + + search = SWTUtil.createButton(buttonComp, WebBrowserUIPlugin.getResource("%search")); + search.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + java.util.List browsersToCreate = BrowserSearcher.search(getShell()); + + if (browsersToCreate == null) // cancelled + return; + + if (browsersToCreate.isEmpty()) { // no browsers found + WebBrowserUtil.openMessage(WebBrowserUIPlugin.getResource("%searchingNoneFound")); + return; + } + + Iterator iterator = browsersToCreate.iterator(); + while (iterator.hasNext()) { + IExternalWebBrowserWorkingCopy browser2 = (IExternalWebBrowserWorkingCopy) iterator.next(); + browser2.save(); + } + tableViewer.refresh(); + } + }); + WorkbenchHelp.setHelp(search, ContextIds.PREF_BROWSER_EXTERNAL_SEARCH); + + tableViewer.addCheckStateListener(new ICheckStateListener() { + public void checkStateChanged(CheckStateChangedEvent e) { + checkNewDefaultBrowser(e.getElement()); + IWebBrowser browser2 = (IWebBrowser) e.getElement(); + BrowserManager.getInstance().setCurrentWebBrowser(browser2); + } + }); + search.setEnabled(true); + } + + public IWebBrowser getSelectedWebBrowser() { + return selection; + } + + protected Object getSelection(ISelection sel2) { + IStructuredSelection sel = (IStructuredSelection) sel2; + return sel.getFirstElement(); + } + + // Uncheck all the items except the current one that was just checked + protected void checkNewDefaultBrowser(Object browser) { + TableItem[] children = tableViewer.getTable().getItems(); + for (int i = 0; i < children.length; i++) { + TableItem item = children[i]; + + if (!(item.getData().equals(browser))) + item.setChecked(false); + } + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableLabelProvider.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableLabelProvider.java new file mode 100644 index 0000000..2ef12b7 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BrowserTableLabelProvider.java @@ -0,0 +1,96 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import org.eclipse.jface.viewers.ILabelProviderListener; + +import org.eclipse.swt.graphics.Image; +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IWebBrowser; +import org.eclipse.jface.viewers.ITableLabelProvider; +/** + * Web browser table label provider. + */ +public class BrowserTableLabelProvider implements ITableLabelProvider { + /** + * BrowserTableLabelProvider constructor comment. + */ + public BrowserTableLabelProvider() { + super(); + } + + /** + * + */ + public void addListener(ILabelProviderListener listener) { } + + /** + * + */ + public void dispose() { } + + /** + * + */ + public Image getColumnImage(Object element, int columnIndex) { + if (columnIndex == 0) { + if (element instanceof IInternalWebBrowser) + return ImageResource.getImage(ImageResource.IMG_INTERNAL_BROWSER); + else + return ImageResource.getImage(ImageResource.IMG_EXTERNAL_BROWSER); + } + return null; + } + + /** + * Returns the label text for the given column of the given element. + * + * @param element the object representing the entire row, or + * null indicating that no input object is set + * in the viewer + * @param columnIndex the zero-based index of the column in which the label appears + */ + public String getColumnText(Object element, int columnIndex) { + IWebBrowser browser = (IWebBrowser)element; + if (browser instanceof IExternalWebBrowser) { + if (columnIndex == 0) + return notNull(((IExternalWebBrowser)browser).getName()); + else if (columnIndex == 1) + return notNull(((IExternalWebBrowser)browser).getLocation()); + else if (columnIndex == 2) + return notNull(((IExternalWebBrowser)browser).getParameters()); + } else if(browser instanceof IInternalWebBrowser) { + if (columnIndex == 0) + return notNull(((IInternalWebBrowser)browser).getName()); + } + return ""; + } + + protected String notNull(String s) { + if (s != null) + return s; + else + return ""; + } + + /** + * + */ + public boolean isLabelProperty(Object element, String property) { + return false; + } + + /** + * + */ + public void removeListener(ILabelProviderListener listener) { } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BusyIndicator.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BusyIndicator.java new file mode 100644 index 0000000..4f984bc --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/BusyIndicator.java @@ -0,0 +1,157 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.swt.widgets.*; +import org.eclipse.swt.events.*; +import org.eclipse.swt.graphics.*; +/** + * An animated image to show busy status of the Web browser. + */ +public class BusyIndicator extends Canvas { + protected Image[] images; + protected Image image; + + protected Thread busyThread; + protected boolean stop; + + /** + * BusyWidget constructor comment. + * @param parent org.eclipse.swt.widgets.Composite + * @param style int + */ + public BusyIndicator(Composite parent, int style) { + super(parent, style); + + images = ImageResource.getBusyImages(); + + addPaintListener(new PaintListener() { + public void paintControl(PaintEvent event) { + onPaint(event); + } + }); + + image = images[0]; + } + + public Point computeSize(int wHint, int hHint, boolean changed) { + return new Point(25, 25); + } + + /** + * Creates a thread to animate the image. + */ + protected synchronized void createBusyThread() { + if (busyThread != null) + return; + + stop = false; + busyThread = new Thread() { + protected int count; + public void run() { + try { + count = 1; + while (!stop) { + Display.getDefault().syncExec(new Runnable() { + public void run() { + if (!stop) { + if (count < 13) + setImage(images[count]); + count++; + if (count > 12) + count = 1; + } + } + }); + try { + sleep(125); + } catch (Exception e) { } + } + if (busyThread == null) + Display.getDefault().syncExec(new Thread() { + public void run() { + setImage(images[0]); + } + }); + } catch (Exception e) { + Trace.trace(Trace.WARNING, "Busy error", e); + } + } + }; + + busyThread.setPriority(Thread.NORM_PRIORITY + 2); + busyThread.setDaemon(true); + busyThread.start(); + } + + public void dispose() { + stop = true; + busyThread = null; + super.dispose(); + } + + /** + * Return the image or null. + */ + public Image getImage() { + return image; + } + + /** + * Returns true if it is currently busy. + * + * @return boolean + */ + public boolean isBusy() { + return (busyThread != null); + } + + /* + * Process the paint event + */ + protected void onPaint(PaintEvent event) { + Rectangle rect = getClientArea(); + if (rect.width == 0 || rect.height == 0) + return; + + GC gc = event.gc; + if (image != null) + gc.drawImage(image, 2, 2); + } + + /** + * Sets the indicators busy count up (true) or down (false) one. + * + * @param busy boolean + */ + public synchronized void setBusy(boolean busy) { + if (busy) { + if (busyThread == null) + createBusyThread(); + } else { + if (busyThread != null) { + stop = true; + busyThread = null; + } + } + } + + /** + * Set the image. + * The value null clears it. + */ + public void setImage(Image image) { + if (image != this.image && !isDisposed()) { + this.image = image; + redraw(); + } + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ContextIds.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ContextIds.java new file mode 100644 index 0000000..3f27027 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ContextIds.java @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; +/** + * Context help id constants. + */ +public interface ContextIds { + public static final String PREF_BROWSER = WebBrowserUIPlugin.PLUGIN_ID + ".wbpr0000"; + public static final String PREF_BROWSER_INTERNAL = WebBrowserUIPlugin.PLUGIN_ID + ".wbpr0002"; + public static final String PREF_BROWSER_EXTERNAL_ADD = WebBrowserUIPlugin.PLUGIN_ID + ".wbpr0004"; + public static final String PREF_BROWSER_EXTERNAL_EDIT = WebBrowserUIPlugin.PLUGIN_ID + ".wbpr0005"; + public static final String PREF_BROWSER_EXTERNAL_SEARCH = WebBrowserUIPlugin.PLUGIN_ID + ".wbpr0006"; + + public static final String WEB_BROWSER = WebBrowserUIPlugin.PLUGIN_ID + ".sewb0000"; + public static final String WEB_BROWSER_URL = WebBrowserUIPlugin.PLUGIN_ID + ".sewb0002"; + public static final String WEB_BROWSER_WEB = WebBrowserUIPlugin.PLUGIN_ID + ".sewb0004"; +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalBrowserDialog.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalBrowserDialog.java new file mode 100644 index 0000000..22cce23 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalBrowserDialog.java @@ -0,0 +1,202 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import java.io.File; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +/** + * + */ +public class ExternalBrowserDialog extends Dialog { + protected IExternalWebBrowserWorkingCopy browser; + protected boolean isEdit; + protected Button newPageCheckbox; + protected Button clearHistoryCheckbox; + protected Button browseButton; + protected Text browserNameTextfield; + protected Text browserLocationTextfield; + protected Text browserParametersTextfield; + private Button okButton; + + interface StringModifyListener { + public void valueChanged(String s); + } + + /** + * @param parentShell + */ + public ExternalBrowserDialog(Shell parentShell, IExternalWebBrowserWorkingCopy browser) { + super(parentShell); + this.browser = browser; + isEdit = true; + } + + public ExternalBrowserDialog(Shell parentShell) { + super(parentShell); + browser = BrowserManager.getInstance().createExternalWebBrowser(); + isEdit = false; + } + + protected void configureShell(Shell shell) { + super.configureShell(shell); + + if (isEdit) + shell.setText(WebBrowserUIPlugin.getResource("%editExternalBrowser")); + else + shell.setText(WebBrowserUIPlugin.getResource("%createBrowser")); + } + + protected Text createText(Composite comp, String txt, final StringModifyListener listener) { + final Text text = new Text(comp, SWT.BORDER); + if (txt != null) + text.setText(txt); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); + data.widthHint = 250; + text.setLayoutData(data); + if (listener != null) + text.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + listener.valueChanged(text.getText()); + } + }); + return text; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) + */ + protected Control createDialogArea(Composite parent) { + Composite composite = (Composite) super.createDialogArea(parent); + ((GridLayout)composite.getLayout()).numColumns = 3; + + if (isEdit) + WorkbenchHelp.setHelp(composite, ContextIds.PREF_BROWSER_EXTERNAL_EDIT); + else + WorkbenchHelp.setHelp(composite, ContextIds.PREF_BROWSER_EXTERNAL_ADD); + + SWTUtil.createLabel(composite, WebBrowserUIPlugin.getResource("%name")); + browserNameTextfield = createText(composite, browser.getName(), new StringModifyListener() { + public void valueChanged(String s) { + browser.setName(s); + validateFields(); + } + }); + + new Label(composite, SWT.NONE); + + SWTUtil.createLabel(composite, WebBrowserUIPlugin.getResource("%location")); + browserLocationTextfield = createText(composite, browser.getLocation(), new StringModifyListener() { + public void valueChanged(String s) { + browser.setLocation(s); + validateFields(); + } + }); + + browseButton = SWTUtil.createButton(composite, WebBrowserUIPlugin.getResource("%browse")); + browseButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); + dialog.setText(WebBrowserUIPlugin.getResource("%browseMessage")); + + String fname = browserLocationTextfield.getText(); + + dialog.setFileName(fname); + fname = dialog.open(); + + if (fname != null) + browserLocationTextfield.setText(fname); + } + }); + + SWTUtil.createLabel(composite, WebBrowserUIPlugin.getResource("%parameters")); + browserParametersTextfield = createText(composite, browser.getParameters(), new StringModifyListener() { + public void valueChanged(String s) { + browser.setParameters(s); + } + }); + + new Label(composite, SWT.NONE); + + new Label(composite, SWT.NONE); + Label urlLabel = new Label(composite, SWT.NONE); + urlLabel.setText(WebBrowserUIPlugin.getResource("%parametersMessage", WebBrowserPreference.URL_PARAMETER)); + + + return composite; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#okPressed() + */ + protected void okPressed() { + // do simple field validation to at least ensure target directory entered is valid pathname + try { + File file = new File(browser.getLocation()); + if(!file.isFile()){ + WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%locationInvalid")); + return; + } + } + catch(Exception e){ + WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%locationInvalid")); + return; + } + + browser.save(); + super.okPressed(); + } + + private void setOKButtonEnabled(boolean curIsEnabled) { + if (okButton == null) + okButton = getButton(IDialogConstants.OK_ID); + + if (okButton != null) + okButton.setEnabled(curIsEnabled); + } + + protected Control createButtonBar(Composite parent) { + Control buttonControl = super.createButtonBar(parent); + validateFields(); + return buttonControl; + } + + protected void validateFields() { + boolean valid = true; + + String name = browserNameTextfield.getText(); + if (name == null || name.trim().length() < 1) + valid = false; + + String location = browserLocationTextfield.getText(); + if (location == null || location.trim().length() < 1) + valid = false; + + setOKButtonEnabled(valid); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowser.java new file mode 100644 index 0000000..03eaefb --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowser.java @@ -0,0 +1,139 @@ +package org.eclipse.webbrowser.internal; + +import java.net.URL; + +import org.eclipse.swt.program.Program; +import org.eclipse.ui.IMemento; +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +/** + * + */ +public class ExternalWebBrowser implements IExternalWebBrowser { + private static final String MEMENTO_NAME = "name"; + private static final String MEMENTO_LOCATION = "location"; + private static final String MEMENTO_PARAMETERS = "parameters"; + + protected String name; + protected String location; + protected String parameters; + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IWebBrowser#getName() + */ + public String getName() { + return name; + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowser#getLocation() + */ + public String getLocation() { + return location; + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowser#getParameters() + */ + public String getParameters() { + return parameters; + } + + public void delete() { + BrowserManager.getInstance().removeWebBrowser(this); + } + + public boolean isWorkingCopy() { + return false; + } + + public IExternalWebBrowserWorkingCopy getWorkingCopy() { + return new ExternalWebBrowserWorkingCopy(this); + } + + protected void setInternal(IExternalWebBrowser browser) { + name = browser.getName(); + location = browser.getLocation(); + parameters = browser.getParameters(); + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IWebBrowser#openURL(java.net.URL) + */ + public void openURL(URL url) { + String urlText = WebBrowserPreference.getHomePageURL(); + + if (url != null) + urlText = url.toExternalForm(); + else if (urlText.startsWith("file:") & urlText.length() > 6) { + if (urlText.charAt(5) != '/' && urlText.charAt(5) != '\\') + urlText = urlText.substring(0, 5) + "/" + urlText.substring(5); + } + + // change spaces to "%20" + if (!WebBrowserUtil.isWindows()) { + int index = urlText.indexOf(" "); + while (index >= 0) { + urlText = urlText.substring(0, index) + "%20" + urlText.substring(index + 1); + index = urlText.indexOf(" "); + } + } + + Trace.trace(Trace.FINEST, "Launching external Web browser: " + location + " - " + parameters + " - " + urlText); + if (location == null || location.length() == 0) { + try { + String extension = null; + if (url != null) + extension = url.getFile(); + else + extension = "html"; + int index = extension.indexOf("."); + if (index >= 0) + extension = extension.substring(index + 1); + Program program = Program.findProgram(extension); + program.execute(urlText); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Error launching default external browser", e); + WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorCouldNotLaunchWebBrowser", urlText)); + } + return; + } + + String params = parameters; + if (params == null) + params = ""; + + int urlIndex = params.indexOf(WebBrowserPreference.URL_PARAMETER); + if (urlIndex >= 0) + params = params.substring(0, urlIndex) + " " + urlText + " " + params.substring(urlIndex + WebBrowserPreference.URL_PARAMETER.length()); + else { + if (!params.endsWith(" ")) + params += " "; + params += urlText; + } + + try { + Trace.trace(Trace.FINEST, "Launching " + location + " " + params); + Runtime.getRuntime().exec(location + " " + params); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Could not launch external browser", e); + WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorCouldNotLaunchWebBrowser", urlText)); + } + } + + protected void save(IMemento memento) { + memento.putString(MEMENTO_NAME, name); + memento.putString(MEMENTO_LOCATION, location); + memento.putString(MEMENTO_PARAMETERS, parameters); + } + + protected void load(IMemento memento) { + name = memento.getString(MEMENTO_NAME); + location = memento.getString(MEMENTO_LOCATION); + parameters = memento.getString(MEMENTO_PARAMETERS); + } + + public String toString() { + return "External Web browser: " + getName() + " / " + getLocation() + " / " + getParameters(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowserWorkingCopy.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowserWorkingCopy.java new file mode 100644 index 0000000..0f231a6 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ExternalWebBrowserWorkingCopy.java @@ -0,0 +1,63 @@ +package org.eclipse.webbrowser.internal; + +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +/** + * + */ +public class ExternalWebBrowserWorkingCopy extends ExternalWebBrowser implements IExternalWebBrowserWorkingCopy { + protected ExternalWebBrowser browser; + + // creation + public ExternalWebBrowserWorkingCopy() { } + + // working copy + public ExternalWebBrowserWorkingCopy(ExternalWebBrowser browser) { + this.browser = browser; + setInternal(browser); + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy#setName(java.lang.String) + */ + public void setName(String name) { + this.name = name; + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy#setLocation(java.lang.String) + */ + public void setLocation(String location) { + this.location = location; + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy#setParameters(java.lang.String) + */ + public void setParameters(String params) { + this.parameters = params; + } + + public boolean isWorkingCopy() { + return true; + } + + public IExternalWebBrowserWorkingCopy getWorkingCopy() { + return this; + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy#save() + */ + public IExternalWebBrowser save() { + if (browser != null) { + browser.setInternal(this); + BrowserManager.getInstance().browserChanged(browser); + } else { + browser = new ExternalWebBrowser(); + browser.setInternal(this); + BrowserManager.getInstance().addBrowser(browser); + } + return browser; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Favorite.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Favorite.java new file mode 100644 index 0000000..fda20d0 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Favorite.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; +/** + * + */ +public class Favorite { + protected String url; + protected String name; + + public Favorite() { } + + public Favorite(String name, String url) { + if (name == null) + name = ""; + if (url == null) + url = ""; + this.name = name; + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getURL() { + return url; + } + + public void setURL(String url) { + this.url = url; + } + + public boolean equals(Object obj) { + if (!(obj instanceof Favorite)) + return false; + + Favorite f = (Favorite) obj; + return (name.equals(f.name) && url.equals(f.url)); + } + + public String toString() { + return "(" + name + "/" + url + ")"; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/IWebBrowserListener.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/IWebBrowserListener.java new file mode 100644 index 0000000..d04666b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/IWebBrowserListener.java @@ -0,0 +1,24 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import org.eclipse.webbrowser.IWebBrowser; + +/** + * + */ +public interface IWebBrowserListener { + public void browserAdded(IWebBrowser browser); + + public void browserChanged(IWebBrowser browser); + + public void browserRemoved(IWebBrowser browser); +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ImageResource.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ImageResource.java new file mode 100644 index 0000000..a1637ec --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/ImageResource.java @@ -0,0 +1,185 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.net.URL; +import java.util.Map; +import java.util.HashMap; +import org.eclipse.swt.graphics.Image; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ImageRegistry; +/** + * Utility class to handle image resources. + */ +public class ImageResource { + // the image registry + private static ImageRegistry imageRegistry; + + // map of image descriptors since these + // will be lost by the image registry + private static Map imageDescriptors; + + // base urls for images + private static URL ICON_BASE_URL; + + static { + try { + String pathSuffix = "icons/"; + ICON_BASE_URL = WebBrowserUIPlugin.getInstance().getBundle().getEntry(pathSuffix); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Could not set icon base URL", e); + } + } + + private static Image[] busyImages; + + private static final String URL_CLCL = "clcl16/"; + private static final String URL_ELCL = "elcl16/"; + private static final String URL_DLCL = "dlcl16/"; + + private static final String URL_OBJ = "obj16/"; + + // --- constants for images --- + // toolbar images + public static final String IMG_CLCL_NAV_BACKWARD = "IMG_CLCL_NAV_BACKWARD"; + public static final String IMG_CLCL_NAV_FORWARD = "IMG_CLCL_NAV_FORWARD"; + public static final String IMG_CLCL_NAV_STOP = "IMG_CLCL_NAV_STOP"; + public static final String IMG_CLCL_NAV_REFRESH = "IMG_CLCL_NAV_REFRESH"; + public static final String IMG_CLCL_NAV_GO = "IMG_CLCL_NAV_GO"; + public static final String IMG_CLCL_NAV_FAVORITES = "cfavorites"; + public static final String IMG_CLCL_NAV_HOME = "IMG_CLCL_NAV_HOME"; + public static final String IMG_CLCL_NAV_PRINT = "IMG_CLCL_NAV_PRINT"; + + public static final String IMG_ELCL_NAV_BACKWARD = "IMG_ELCL_NAV_BACKWARD"; + public static final String IMG_ELCL_NAV_FORWARD = "IMG_ELCL_NAV_FORWARD"; + public static final String IMG_ELCL_NAV_STOP = "IMG_ELCL_NAV_STOP"; + public static final String IMG_ELCL_NAV_REFRESH = "IMG_ELCL_NAV_REFRESH"; + public static final String IMG_ELCL_NAV_GO = "IMG_ELCL_NAV_GO"; + public static final String IMG_ELCL_NAV_FAVORITES = "efavorites"; + public static final String IMG_ELCL_NAV_HOME = "IMG_ELCL_NAV_HOME"; + public static final String IMG_ELCL_NAV_PRINT = "IMG_ELCL_NAV_PRINT"; + + public static final String IMG_DLCL_NAV_BACKWARD = "IMG_DLCL_NAV_BACKWARD"; + public static final String IMG_DLCL_NAV_FORWARD = "IMG_DLCL_NAV_FORWARD"; + public static final String IMG_DLCL_NAV_STOP = "IMG_DLCL_NAV_STOP"; + public static final String IMG_DLCL_NAV_REFRESH = "IMG_DLCL_NAV_REFRESH"; + public static final String IMG_DLCL_NAV_GO = "IMG_DLCL_NAV_GO"; + public static final String IMG_DLCL_NAV_FAVORITES = "dfavorites"; + public static final String IMG_DLCL_NAV_HOME = "IMG_DLCL_NAV_HOME"; + public static final String IMG_DLCL_NAV_PRINT = "IMG_DLCL_NAV_PRINT"; + + // general object images + public static final String IMG_INTERNAL_BROWSER = "internalBrowser"; + public static final String IMG_EXTERNAL_BROWSER = "externalBrowser"; + public static final String IMG_FAVORITE = "favorite"; + + /** + * Cannot construct an ImageResource. Use static methods only. + */ + private ImageResource() { } + + /** + * Returns the busy images for the Web browser. + * + * @return org.eclipse.swt.graphics.Image[] + */ + public static Image[] getBusyImages() { + return busyImages; + } + + /** + * Return the image with the given key. + * + * @param key java.lang.String + * @return org.eclipse.swt.graphics.Image + */ + public static Image getImage(String key) { + if (imageRegistry == null) + initializeImageRegistry(); + return imageRegistry.get(key); + } + + /** + * Return the image descriptor with the given key. + * + * @param key java.lang.String + * @return org.eclipse.jface.resource.ImageDescriptor + */ + public static ImageDescriptor getImageDescriptor(String key) { + if (imageRegistry == null) + initializeImageRegistry(); + return (ImageDescriptor) imageDescriptors.get(key); + } + + /** + * Initialize the image resources. + */ + protected static void initializeImageRegistry() { + imageRegistry = new ImageRegistry(); + imageDescriptors = new HashMap(); + + // load Web browser images + registerImage(IMG_ELCL_NAV_BACKWARD, URL_ELCL + "nav_backward.gif"); + registerImage(IMG_ELCL_NAV_FORWARD, URL_ELCL + "nav_forward.gif"); + registerImage(IMG_ELCL_NAV_STOP, URL_ELCL + "nav_stop.gif"); + registerImage(IMG_ELCL_NAV_REFRESH, URL_ELCL + "nav_refresh.gif"); + registerImage(IMG_ELCL_NAV_GO, URL_ELCL + "nav_go.gif"); + registerImage(IMG_ELCL_NAV_FAVORITES, URL_ELCL + "add_favorite.gif"); + registerImage(IMG_ELCL_NAV_HOME, URL_ELCL + "nav_home.gif"); + registerImage(IMG_ELCL_NAV_PRINT, URL_ELCL + "nav_print.gif"); + + registerImage(IMG_CLCL_NAV_BACKWARD, URL_CLCL + "nav_backward.gif"); + registerImage(IMG_CLCL_NAV_FORWARD, URL_CLCL + "nav_forward.gif"); + registerImage(IMG_CLCL_NAV_STOP, URL_CLCL + "nav_stop.gif"); + registerImage(IMG_CLCL_NAV_REFRESH, URL_CLCL + "nav_refresh.gif"); + registerImage(IMG_CLCL_NAV_GO, URL_CLCL + "nav_go.gif"); + registerImage(IMG_CLCL_NAV_FAVORITES, URL_CLCL + "add_favorite.gif"); + registerImage(IMG_CLCL_NAV_HOME, URL_CLCL + "nav_home.gif"); + registerImage(IMG_CLCL_NAV_PRINT, URL_CLCL + "nav_print.gif"); + + registerImage(IMG_DLCL_NAV_BACKWARD, URL_DLCL + "nav_backward.gif"); + registerImage(IMG_DLCL_NAV_FORWARD, URL_DLCL + "nav_forward.gif"); + registerImage(IMG_DLCL_NAV_STOP, URL_DLCL + "nav_stop.gif"); + registerImage(IMG_DLCL_NAV_REFRESH, URL_DLCL + "nav_refresh.gif"); + registerImage(IMG_DLCL_NAV_GO, URL_DLCL + "nav_go.gif"); + registerImage(IMG_DLCL_NAV_FAVORITES, URL_DLCL + "add_favorite.gif"); + registerImage(IMG_DLCL_NAV_HOME, URL_DLCL + "nav_home.gif"); + registerImage(IMG_DLCL_NAV_PRINT, URL_DLCL + "nav_print.gif"); + + registerImage(IMG_INTERNAL_BROWSER, URL_OBJ + "internal_browser.gif"); + registerImage(IMG_EXTERNAL_BROWSER, URL_OBJ + "external_browser.gif"); + + registerImage(IMG_FAVORITE, URL_OBJ + "favorite.gif"); + + // busy images + busyImages = new Image[13]; + for (int i = 0; i < 13; i++) { + registerImage("busy" + i, URL_OBJ + "frames" + java.io.File.separator + "frame" + (i+1) + ".gif"); + busyImages[i] = getImage("busy" + i); + } + } + + /** + * Register an image with the registry. + * + * @param key java.lang.String + * @param partialURL java.lang.String + */ + private static void registerImage(String key, String partialURL) { + try { + ImageDescriptor id = ImageDescriptor.createFromURL(new URL(ICON_BASE_URL, partialURL)); + imageRegistry.put(key, id); + imageDescriptors.put(key, id); + } catch (Exception e) { + Trace.trace(Trace.WARNING, "Error registering image " + key + " from " + partialURL, e); + } + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalBrowserDialog.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalBrowserDialog.java new file mode 100644 index 0000000..dda0f88 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalBrowserDialog.java @@ -0,0 +1,83 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.webbrowser.IInternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.internal.SWTUtil; +/** + * + */ +public class InternalBrowserDialog extends Dialog { + protected IInternalWebBrowserWorkingCopy browser; + protected boolean isEdit; + protected Button newPageCheckbox; + protected Button clearURLHistoryCheckbox; + + /** + * @param parentShell + */ + public InternalBrowserDialog(Shell parentShell, IInternalWebBrowserWorkingCopy browser) { + super(parentShell); + this.browser = browser; + isEdit = true; + } + + protected void configureShell(Shell shell) { + super.configureShell(shell); + + if (isEdit) + shell.setText(WebBrowserUIPlugin.getResource("%editInternalBrowser")); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) + */ + protected Control createDialogArea(Composite parent) { + Composite composite = (Composite) super.createDialogArea(parent); + ((GridLayout)composite.getLayout()).numColumns = 1; + + Composite comp = new Composite(composite, SWT.NONE); + GridLayout layout = new GridLayout(1, true); + layout.marginHeight = 10; + layout.marginWidth = 10; + comp.setLayout(layout); + comp.setLayoutData(new GridData(GridData.FILL_BOTH)); + WorkbenchHelp.setHelp(composite, ContextIds.PREF_BROWSER_INTERNAL); + + newPageCheckbox = SWTUtil.createCheckbox(comp, WebBrowserUIPlugin.getResource("%prefBrowserNewPage"), false); + clearURLHistoryCheckbox = SWTUtil.createCheckbox(comp, WebBrowserUIPlugin.getResource("%clearURLHistory"), true); + + newPageCheckbox.setSelection(browser.getUseNewPage()); + clearURLHistoryCheckbox.setSelection(browser.getClearHistoryOnExit()); + + return composite; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#okPressed() + */ + protected void okPressed() { + browser.setUseNewPage(newPageCheckbox.getSelection()); + browser.setClearHistoryOnExit(clearURLHistoryCheckbox.getSelection()); + browser.save(); + + super.okPressed(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowser.java new file mode 100644 index 0000000..4071a7c --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowser.java @@ -0,0 +1,76 @@ +package org.eclipse.webbrowser.internal; + +import java.net.URL; + +import org.eclipse.ui.IMemento; +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IInternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.WebBrowserEditorInput; +/** + * + */ +public class InternalWebBrowser implements IInternalWebBrowser { + private static final String MEMENTO_NEW_PAGE = "new_page"; + private static final String MEMENTO_CLEAR_HISTORY_ON_EXIT = "clear_history"; + + protected boolean useNewPage; + protected boolean clearHistory; + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IWebBrowser#getName() + */ + public String getName() { + return WebBrowserUIPlugin.getResource("%internalWebBrowserName"); + } + + public boolean getUseNewPage() { + return useNewPage; + } + + public boolean getClearHistoryOnExit() { + return clearHistory; + } + + public boolean isWorkingCopy() { + return false; + } + + public IInternalWebBrowserWorkingCopy getWorkingCopy() { + return new InternalWebBrowserWorkingCopy(this); + } + + protected void setInternal(IInternalWebBrowser browser) { + useNewPage = browser.getUseNewPage(); + clearHistory = browser.getClearHistoryOnExit(); + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IWebBrowser#openURL(java.net.URL) + */ + public void openURL(URL url) { + WebBrowserEditor.open(new WebBrowserEditorInput(url)); + } + + protected void save(IMemento memento) { + memento.putString(MEMENTO_NEW_PAGE, useNewPage ? "true" : "false"); + memento.putString(MEMENTO_CLEAR_HISTORY_ON_EXIT, clearHistory ? "true" : "false"); + } + + protected void load(IMemento memento) { + String s = memento.getString(MEMENTO_NEW_PAGE); + if ("true".equals(s)) + useNewPage = true; + else + useNewPage = false; + + s = memento.getString(MEMENTO_CLEAR_HISTORY_ON_EXIT); + if ("true".equals(s)) + clearHistory = true; + else + clearHistory = false; + } + + public String toString() { + return "Internal Web browser"; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowserWorkingCopy.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowserWorkingCopy.java new file mode 100644 index 0000000..3dac171 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternalWebBrowserWorkingCopy.java @@ -0,0 +1,43 @@ +package org.eclipse.webbrowser.internal; + +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IInternalWebBrowserWorkingCopy; +/** + * + */ +public class InternalWebBrowserWorkingCopy extends InternalWebBrowser implements IInternalWebBrowserWorkingCopy { + protected InternalWebBrowser browser; + + // working copy + public InternalWebBrowserWorkingCopy(InternalWebBrowser browser) { + this.browser = browser; + setInternal(browser); + } + + public void setUseNewPage(boolean b) { + useNewPage = b; + } + + public void setClearHistoryOnExit(boolean b) { + clearHistory = b; + } + + public boolean isWorkingCopy() { + return true; + } + + public IInternalWebBrowserWorkingCopy getWorkingCopy() { + return this; + } + + /* (non-Javadoc) + * @see org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy#save() + */ + public IInternalWebBrowser save() { + if (browser != null) { + browser.setInternal(this); + BrowserManager.getInstance().browserChanged(browser); + } + return browser; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternetPreferencePage.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternetPreferencePage.java new file mode 100644 index 0000000..65a7efb --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/InternetPreferencePage.java @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.help.WorkbenchHelp; +/** + * A preference page that holds internet preferences. + */ +public class InternetPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + /** + * InternetPreferencePage constructor comment. + */ + public InternetPreferencePage() { + super(); + noDefaultAndApplyButton(); + } + + /** + * Create the preference options. + * + * @param parent org.eclipse.swt.widgets.Composite + * @return org.eclipse.swt.widgets.Control + */ + protected Control createContents(Composite parent) { + initializeDialogUnits(parent); + + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 1; + layout.horizontalSpacing = convertHorizontalDLUsToPixels(4); + layout.verticalSpacing = convertVerticalDLUsToPixels(4); + layout.marginWidth = 0; + layout.marginHeight = 0; + composite.setLayout(layout); + GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); + composite.setLayoutData(data); + WorkbenchHelp.setHelp(composite, ContextIds.PREF_BROWSER); + + Label label = new Label(composite, SWT.WRAP); + label.setText(WebBrowserUIPlugin.getResource("%preferenceInternetDescription")); + data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + label.setLayoutData(data); + + Dialog.applyDialogFont(composite); + + return composite; + } + + /** + * Initializes this preference page using the passed desktop. + * + * @param desktop the current desktop + */ + public void init(IWorkbench workbench) { } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OpenWithBrowserActionDelegate.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OpenWithBrowserActionDelegate.java new file mode 100644 index 0000000..063f730 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OpenWithBrowserActionDelegate.java @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.net.URL; +import java.util.Iterator; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.action.IAction; +import org.eclipse.ui.*; +import org.eclipse.core.resources.IResource; +import org.eclipse.webbrowser.WebBrowser; +import org.eclipse.webbrowser.WebBrowserEditorInput; +import org.eclipse.webbrowser.internal.Trace; +/** + * Action to open the Web broswer on a resource. + */ +public class OpenWithBrowserActionDelegate implements IActionDelegate { + private IResource resource; + + /** + * OpenBrowserAction constructor comment. + */ + public OpenWithBrowserActionDelegate() { + super(); + } + + /** + * Performs this action. + *

+ * This method is called when the delegating action has been triggered. + * Implement this method to do the actual work. + *

+ * + * @param action the action proxy that handles the presentation portion of the + * action + */ + public void run(IAction action) { + URL url = null; + try { + url = new URL("file://" + resource.getLocation()); + WebBrowser.openURL(new WebBrowserEditorInput(url, WebBrowserEditorInput.SHOW_ALL | WebBrowserEditorInput.FORCE_NEW_PAGE)); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Error opening browser on file", e); + } + } + + /** + * Notifies this action delegate that the selection in the workbench has changed. + *

+ * Implementers can use this opportunity to change the availability of the + * action or to modify other presentation properties. + *

+ * + * @param action the action proxy that handles presentation portion of the action + * @param selection the current selection in the workbench + */ + public void selectionChanged(IAction action, ISelection sel) { + if (sel.isEmpty() || !(sel instanceof IStructuredSelection)) { + action.setEnabled(false); + return; + } + + IStructuredSelection select = (IStructuredSelection) sel; + Iterator iterator = select.iterator(); + Object selection = iterator.next(); + if (iterator.hasNext()) { // more than one selection (should never happen) + action.setEnabled(false); + return; + } + + if (!(selection instanceof IResource)) { + action.setEnabled(false); + return; + } + + resource = (IResource) selection; + action.setEnabled(true); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OrganizeFavoritesDialog.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OrganizeFavoritesDialog.java new file mode 100644 index 0000000..a19146c --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/OrganizeFavoritesDialog.java @@ -0,0 +1,211 @@ +package org.eclipse.webbrowser.internal; +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +import java.util.List; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.viewers.*; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Item; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +/** + * Dialog to manage the favorites list. + */ +public class OrganizeFavoritesDialog extends Dialog { + protected List favorites = WebBrowserPreference.getInternalWebBrowserFavorites(); + + public class FavoriteContentProvider implements IStructuredContentProvider { + public FavoriteContentProvider() { + super(); + } + + public void dispose() { } + + public Object[] getElements(Object inputElement) { + return favorites.toArray(); + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} + } + + public class FavoriteLabelProvider implements ITableLabelProvider { + public FavoriteLabelProvider() { + super(); + } + + public void addListener(ILabelProviderListener listener) { } + + public void dispose() { } + + public Image getColumnImage(Object element, int columnIndex) { + if (columnIndex == 0) + return ImageResource.getImage(ImageResource.IMG_FAVORITE); + return null; + } + + public String getColumnText(Object element, int columnIndex) { + Favorite favorite = (Favorite) element; + if (columnIndex == 0) + return favorite.getName(); + else + return favorite.getURL(); + } + + public boolean isLabelProperty(Object element, String property) { + return false; + } + + public void removeListener(ILabelProviderListener listener) { } + } + + /** + * ManageFavoritesDialog constructor comment. + * @param parentShell org.eclipse.swt.widgets.Shell + * @ + */ + public OrganizeFavoritesDialog(Shell parentShell) { + super(parentShell); + + setBlockOnOpen(true); + } + + /** + * + */ + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + newShell.setText(WebBrowserUIPlugin.getResource("%dialogOrganizeFavoritesTitle")); + } + + /** + * + */ + protected Control createDialogArea(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); + layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); + layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); + layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); + composite.setLayout(layout); + composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + composite.setFont(parent.getFont()); + //WorkbenchHelp.setHelp(composite, ContextIds.TERMINATE_SERVER_DIALOG); + + Label label = new Label(composite, SWT.NONE); + label.setText(WebBrowserUIPlugin.getResource("%dialogOrganizeFavoritesMessage")); + GridData data = new GridData(); + data.horizontalSpan = 2; + label.setLayoutData(data); + + final Table table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE); + data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); + data.widthHint = 300; + data.heightHint = 150; + table.setLayoutData(data); + table.setLinesVisible(true); + + TableLayout tableLayout = new TableLayout(); + table.setLayout(tableLayout); + table.setHeaderVisible(true); + + tableLayout.addColumnData(new ColumnWeightData(5, 50, true)); + TableColumn col = new TableColumn(table, SWT.NONE); + col.setText(WebBrowserUIPlugin.getResource("%dialogOrganizeFavoritesName")); + + tableLayout.addColumnData(new ColumnWeightData(6, 60, true)); + col = new TableColumn(table, SWT.NONE); + col.setText(WebBrowserUIPlugin.getResource("%dialogOrganizeFavoritesURL")); + table.setLayout(tableLayout); + + final TableViewer tableViewer = new TableViewer(table); + tableViewer.setContentProvider(new FavoriteContentProvider()); + tableViewer.setLabelProvider(new FavoriteLabelProvider()); + tableViewer.setInput("root"); + tableViewer.setColumnProperties(new String[] {"name", "url"}); + + tableViewer.setCellEditors(new CellEditor[] {new TextCellEditor(table), new TextCellEditor(table)}); + + ICellModifier cellModifier = new ICellModifier() { + public Object getValue(Object element, String property) { + Favorite f = (Favorite) element; + if ("name".equals(property)) + return f.getName(); + else + return f.getURL(); + } + + public boolean canModify(Object element, String property) { + return true; + } + + public void modify(Object element, String property, Object value) { + if (element instanceof Item) + element = ((Item) element).getData(); + + try { + Favorite f = (Favorite) element; + String s = (String) value; + if ("name".equals(property)) + f.setName(s); + else + f.setURL(s); + tableViewer.refresh(f); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + }; + tableViewer.setCellModifier(cellModifier); + + final Button remove = SWTUtil.createButton(composite, WebBrowserUIPlugin.getResource("%remove")); + remove.setEnabled(false); + + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + remove.setEnabled(!event.getSelection().isEmpty()); + } + }); + + remove.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + int index = table.getSelectionIndex(); + if (index < 0 || index >= favorites.size()) + return; + + tableViewer.remove(favorites.get(index)); + favorites.remove(index); + } + }); + + Dialog.applyDialogFont(composite); + + return composite; + } + + protected void okPressed() { + WebBrowserPreference.setInternalWebBrowserFavorites(favorites); + super.okPressed(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SWTUtil.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SWTUtil.java new file mode 100644 index 0000000..e40b947 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SWTUtil.java @@ -0,0 +1,77 @@ +/********************************************************************** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.webbrowser.internal; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.FontMetrics; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +/** + * SWT Utility class. + */ +public class SWTUtil { + private static FontMetrics fontMetrics; + + protected static void initializeDialogUnits(Control testControl) { + // Compute and store a font metric + GC gc = new GC(testControl); + gc.setFont(JFaceResources.getDialogFont()); + fontMetrics = gc.getFontMetrics(); + gc.dispose(); + } + + /** + * Returns a width hint for a button control. + */ + protected static int getButtonWidthHint(Button button) { + int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH); + return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); + } + + public static Button createButton(Composite comp, String label) { + Button b = new Button(comp, SWT.PUSH); + b.setText(label); + if (fontMetrics == null) + initializeDialogUnits(comp); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); + data.widthHint = getButtonWidthHint(b); + data.heightHint = Dialog.convertVerticalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_HEIGHT); + b.setLayoutData(data); + return b; + } + + public static Button createCheckbox(Composite comp, String txt, boolean isSelected){ + Button button = new Button(comp, SWT.CHECK); + button.setText(txt); + GridLayout layout = new GridLayout(); + comp.setLayout(layout); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); + data.horizontalIndent = 10; + button.setLayoutData(data); + button.setSelection(isSelected); + return button; + } + + public static Label createLabel(Composite comp, String txt) { + Label label = new Label(comp, SWT.NONE); + label.setText(txt); + label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING)); + return label; + } +} diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/StandardURLMap.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/StandardURLMap.java new file mode 100644 index 0000000..400da31 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/StandardURLMap.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.webbrowser.IURLMap; +/** + * Standard URL mappings. + */ +public class StandardURLMap implements IURLMap { + /** + * @see IURLMap#getMappedURL(String) + */ + public String getMappedURL(String url) { + if (url.equalsIgnoreCase("eclipse")) + return "http://www.eclipse.org"; + else if (url.equalsIgnoreCase("webtools")) + return "http://www.eclipse.org/webtools/"; + else + return null; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchBrowserWorkbenchAction.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchBrowserWorkbenchAction.java new file mode 100644 index 0000000..7fa5d87 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchBrowserWorkbenchAction.java @@ -0,0 +1,137 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.util.Iterator; + +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.swt.events.MenuAdapter; +import org.eclipse.swt.events.MenuEvent; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.ui.*; +import org.eclipse.webbrowser.IWebBrowser; +/** + * Action to open the Web broswer. + */ +public class SwitchBrowserWorkbenchAction implements IWorkbenchWindowPulldownDelegate2 { + /** + * The menu created by this action + */ + private Menu fMenu; + + protected boolean recreateMenu = false; + + /** + * SwitchBrowserWorkbenchAction constructor comment. + */ + public SwitchBrowserWorkbenchAction() { + super(); + } + + public void dispose() { + setMenu(null); + } + + /** + * Sets this action's drop-down menu, disposing the previous menu. + * + * @param menu the new menu + */ + private void setMenu(Menu menu) { + if (fMenu != null) { + fMenu.dispose(); + } + fMenu = menu; + } + + public void init(IWorkbenchWindow window) { } + + /** + * Adds the given action to the specified menu with an accelerator specified + * by the given number. + * + * @param menu the menu to add the action to + * @param action the action to add + * @param accelerator the number that should appear as an accelerator + */ + protected void addToMenu(Menu menu, IAction action, int accelerator) { + StringBuffer label= new StringBuffer(); + if (accelerator >= 0 && accelerator < 10) { + //add the numerical accelerator + label.append('&'); + label.append(accelerator); + label.append(' '); + } + label.append(action.getText()); + action.setText(label.toString()); + ActionContributionItem item= new ActionContributionItem(action); + item.fill(menu, -1); + } + + /** + * Fills the drop-down menu with favorites and launch history, + * launch shortcuts, and an action to open the launch configuration dialog. + * + * @param menu the menu to fill + */ + protected void fillMenu(Menu menu) { + IWebBrowser current = BrowserManager.getInstance().getCurrentWebBrowser(); + Iterator iterator = BrowserManager.getInstance().getWebBrowsers().iterator(); + int i = 0; + while (iterator.hasNext()) { + IWebBrowser browser = (IWebBrowser) iterator.next(); + addToMenu(menu, new SwitchDefaultBrowserAction(browser, browser.equals(current)), i++); + } + } + + /** + * Creates the menu for the action + */ + private void initMenu() { + // Add listener to repopulate the menu each time + // it is shown because of dynamic history list + fMenu.addMenuListener(new MenuAdapter() { + public void menuShown(MenuEvent e) { + //if (recreateMenu) { + Menu m = (Menu) e.widget; + MenuItem[] items = m.getItems(); + for (int i = 0; i < items.length; i++) { + items[i].dispose(); + } + fillMenu(m); + recreateMenu = false; + //} + } + }); + } + + public void selectionChanged(IAction action, ISelection selection) { } + + public void run(IAction action) { } + + public Menu getMenu(Menu parent) { + setMenu(new Menu(parent)); + //fillMenu(fMenu); + initMenu(); + return fMenu; + } + + public Menu getMenu(Control parent) { + setMenu(new Menu(parent)); + //fillMenu(fMenu); + initMenu(); + return fMenu; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchDefaultBrowserAction.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchDefaultBrowserAction.java new file mode 100644 index 0000000..4271d3f --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/SwitchDefaultBrowserAction.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.jface.action.Action; +import org.eclipse.webbrowser.IInternalWebBrowser; +import org.eclipse.webbrowser.IWebBrowser; +/** + * Action to open the Web browser. + */ +public class SwitchDefaultBrowserAction extends Action { + protected IWebBrowser webbrowser; + + /** + * SwitchDefaultBrowserAction constructor comment. + */ + public SwitchDefaultBrowserAction(IWebBrowser webbrowser, boolean current) { + super(); + + this.webbrowser = webbrowser; + setText(webbrowser.getName()); + if (webbrowser instanceof IInternalWebBrowser) + setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER)); + else + setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_EXTERNAL_BROWSER)); + + if (current) + setChecked(true); + } + + /** + * Implementation of method defined on IAction. + */ + public void run() { + BrowserManager.getInstance().setCurrentWebBrowser(webbrowser); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java new file mode 100644 index 0000000..430910b --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/TextAction.java @@ -0,0 +1,146 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.swt.SWTError; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.dnd.*; +import org.eclipse.webbrowser.internal.WebBrowser; +import org.eclipse.jface.action.Action; +/** + * Text actions (cut, copy, paste) for the Web browser. + */ +public class TextAction extends Action { + protected WebBrowser browser; + protected byte type; + + public static final byte CUT = 0; + public static final byte COPY = 1; + public static final byte PASTE = 2; + + /** + * TextAction constructor comment. + */ + protected TextAction(WebBrowser browser, byte type) { + super(type + "!"); + this.browser = browser; + this.type = type; + } + + /** + * Copies the selected text to the clipboard. The text will be put in the + * clipboard in plain text format. + *

+ * + * @exception SWTException

    + *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • + *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • + *
+ */ + public void copy() { + Point selection = browser.combo.getSelection(); + + int length = selection.y - selection.x; + if (length > 0) { + TextTransfer plainTextTransfer = TextTransfer.getInstance(); + try { + browser.clipboard.setContents( + new String[] { browser.combo.getText().substring(selection.x, selection.y) }, + new Transfer[] { plainTextTransfer }); + } catch (SWTError error) { + // Copy to clipboard failed. This happens when another application + // is accessing the clipboard while we copy. Ignore the error. + // Fixes 1GDQAVN + } + } + } + + /** + * Moves the selected text to the clipboard. The text will be put in the + * clipboard in plain text format and RTF format. + *

+ * + * @exception SWTException

    + *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • + *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • + *
+ */ + public void cut(){ + Point selection = browser.combo.getSelection(); + + if (selection.y > selection.x) { + copy(); + delete(); + } + } + + /** + * Deletes the character to the right of the caret. Delete the selected text if any. + */ + public void delete() { + Point selection = browser.combo.getSelection(); + String text = browser.combo.getText(); + + if (selection.x != selection.y) { + text = text.substring(0, selection.x) + text.substring(selection.y); + browser.combo.setText(text); + browser.combo.setSelection(new Point(selection.x, selection.x)); + } + } + + /** + * Replaces the selection with the clipboard text or insert the text at + * the current caret offset if there is no selection. + * If the widget has the SWT.SINGLE style and the clipboard text contains + * more than one line, only the first line without line delimiters is + * inserted in the widget. + *

+ * + * @exception SWTException

    + *
  • ERROR_WIDGET_DISPOSED - if the receiver has been disposed
  • + *
  • ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver
  • + *
+ */ + public void paste() { + TextTransfer transfer = TextTransfer.getInstance(); + Point selection = browser.combo.getSelection(); + String text = browser.combo.getText(); + + String newText = (String) browser.clipboard.getContents(transfer); + if (newText != null && newText.length() > 0) { + text = text.substring(0, selection.x) + newText + text.substring(selection.y); + browser.combo.setText(text); + + // set the selection to the end of the paste + int x = selection.x + newText.length(); + browser.combo.setSelection(new Point(x, x)); + } + } + + /** + * Implementation of method defined on IAction. + */ + public void run() { + if (browser == null || browser.combo == null) + return; + if (type == CUT) + cut(); + else if (type == COPY) + copy(); + else if (type == PASTE) + paste(); + } + + /** + * + */ + protected void update() { } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Trace.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Trace.java new file mode 100644 index 0000000..5c448bd --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/Trace.java @@ -0,0 +1,52 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; +/** + * Helper class to route trace output. + */ +public class Trace { + public static int CONFIG = 0; + public static int WARNING = 2; + public static int SEVERE = 3; + public static int FINER = 4; + public static int FINEST = 5; + + /** + * Trace constructor comment. + */ + private Trace() { + super(); + } + + /** + * Trace the given text. + * + * @param s java.lang.String + */ + public static void trace(int level, String s) { + Trace.trace(level, s, null); + } + + /** + * Trace the given message and exception. + * + * @param s java.lang.String + * @param t java.lang.Throwable + */ + public static void trace(int level, String s, Throwable t) { + if (!WebBrowserUIPlugin.getInstance().isDebugging()) + return; + + System.out.println(s); + if (t != null) + t.printStackTrace(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowser.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowser.java new file mode 100644 index 0000000..254913c --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowser.java @@ -0,0 +1,579 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ + +//TODO 1. Handle the sizing of a popup running in shelled out secondary window. +//TODO 2. Support printing: waiting on eclipse bug 47937/44823. + +package org.eclipse.webbrowser.internal; + +import java.util.*; +import org.eclipse.webbrowser.IURLMap; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.*; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.events.*; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.ui.help.WorkbenchHelp; +import org.eclipse.swt.browser.*; + +public class WebBrowser extends Composite { + protected Composite toolbarComp; + protected Composite statusComp; + protected Combo combo; + protected Clipboard clipboard; + protected boolean showToolbar; + protected ToolItem back; + protected ToolItem forward; + protected ToolItem stop; + protected ToolItem favorites; + protected ToolItem refresh; + protected BusyIndicator busy; + protected boolean showStatusbar; + protected ProgressBar progress; + protected Label status; + private static int MAX_HISTORY = 50; + protected static java.util.List history; + protected Browser browser; + protected Shell shell; + protected WebBrowserEditor editor; + protected String title; + + public WebBrowser(Composite parent, final boolean showToolbar, final boolean showStatusbar) { + super(parent, SWT.NONE); + + this.showToolbar = showToolbar; + this.showStatusbar = showStatusbar; + + GridLayout layout = new GridLayout(); + layout.marginHeight = 3; + layout.marginWidth = 3; + layout.horizontalSpacing = 3; + layout.verticalSpacing = 3; + layout.numColumns = 1; + setLayout(layout); + setLayoutData(new GridData(GridData.FILL_BOTH)); + clipboard = new Clipboard(parent.getDisplay()); + WorkbenchHelp.setHelp(this, ContextIds.WEB_BROWSER); + + if (showToolbar) { + toolbarComp = new Composite(this, SWT.NONE); + GridLayout outerLayout = new GridLayout(); + outerLayout.numColumns = 2; + outerLayout.marginWidth = 0; + outerLayout.marginHeight = 0; + toolbarComp.setLayout(outerLayout); + toolbarComp.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL)); + + // create the top line, with a combo box for history and a "go" button + Composite top = new Composite(toolbarComp, SWT.NONE); + GridLayout topLayout = new GridLayout(); + topLayout.numColumns = 2; + topLayout.marginWidth = 0; + topLayout.marginHeight = 0; + top.setLayout(topLayout); + top.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.FILL_HORIZONTAL)); + + combo = new Combo(top, SWT.DROP_DOWN); + + updateHistory(); + + combo.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent we) { + try { + if (combo.getSelectionIndex() != -1) + setURL(combo.getItem(combo.getSelectionIndex())); + } catch (Exception e) { } + } + }); + combo.addListener(SWT.DefaultSelection, new Listener() { + public void handleEvent(Event e) { + setURL(combo.getText()); + } + }); + combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + WorkbenchHelp.setHelp(combo, ContextIds.WEB_BROWSER_URL); + + ToolBar toolbar = new ToolBar(top, SWT.FLAT); + fillToolBar(toolbar); + + new ToolItem(toolbar, SWT.SEPARATOR); + + busy = new BusyIndicator(toolbarComp, SWT.NONE); + busy.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); + } + + // create a new SWT Web browser widget, checking once again to make sure we can use it in this environment + if (WebBrowserUtil.canUseInternalWebBrowser() & WebBrowserUtil.isInternalBrowserOperational()) + this.browser = new Browser(this, SWT.NONE); + else { + WebBrowserUtil.openError(WebBrowserUIPlugin.getResource("%errorCouldNotLaunchInternalWebBrowser")); + return; + } + + if (showToolbar) { + back.setEnabled(browser.isBackEnabled()); + forward.setEnabled(browser.isForwardEnabled()); + } + + WorkbenchHelp.setHelp(browser, ContextIds.WEB_BROWSER_WEB); + GridData data = new GridData(); + data.horizontalAlignment = GridData.FILL; + data.verticalAlignment = GridData.FILL; + data.horizontalSpan = 3; + data.grabExcessHorizontalSpace = true; + data.grabExcessVerticalSpace = true; + browser.setLayoutData(data); + + if (showStatusbar) + createStatusArea(this); + + addBrowserListeners(); + } + /** + * + */ + protected void addBrowserListeners() { + if (showStatusbar) { + // respond to Browser StatusTextEvents events by updating the status Text label + browser.addStatusTextListener(new StatusTextListener() { + public void changed(StatusTextEvent event) { + status.setText(event.text); + } + }); + } + + /** Add listener for new window creation so that we can instead of opening a separate + * new window in which the session is lost, we can instead open a new window in a new + * shell within the browser area thereby maintaining the session. + */ + browser.addOpenWindowListener(new OpenWindowListener() { + public void open(WindowEvent event) { + Shell shell2 = new Shell(getDisplay()); + shell2.setLayout(new FillLayout()); + shell2.setText(WebBrowserUIPlugin.getResource("%viewWebBrowserTitle")); + shell2.setImage(getShell().getImage()); + WebBrowser browser2 = new WebBrowser(shell2, showToolbar, showStatusbar); + browser2.shell = shell2; + event.browser = browser2.browser; + shell2.open(); + } + }); + + browser.addCloseWindowListener(new CloseWindowListener(){ + public void close(WindowEvent event) { + // if shell is not null, it must be a secondary popup window, else its an editor window + if (shell != null) + shell.dispose(); + else + editor.closeEditor(); + } + }); + + browser.addProgressListener(new ProgressListener() { + public void changed(ProgressEvent event) { + if (event.total == 0) + return; + + boolean done = (event.current == event.total); + + int percentProgress = event.current * 100 / event.total; + if (showStatusbar) { + if (done) + progress.setSelection(0); + else + progress.setSelection(percentProgress); + } + + if (showToolbar) { + if (!busy.isBusy() && (percentProgress > 0 && percentProgress < 100)) { + busy.setBusy(true); + } + // Once the progress hits 100 percent, done, set busy to false + else if (busy.isBusy() && done) { + busy.setBusy(false); + } + } + } + + public void completed(ProgressEvent event) { + if (showStatusbar) + progress.setSelection(0); + if (showToolbar) { + busy.setBusy(false); + back.setEnabled(browser.isBackEnabled()); + forward.setEnabled(browser.isForwardEnabled()); + } + } + }); + + if (showToolbar) { + browser.addLocationListener(new LocationListener() { + public void changed(LocationEvent event) { + if (!event.top) + return; + if (!isHome()) { + combo.setText(event.location); + addToHistory(event.location); + updateHistory(); + } else + combo.setText(""); + } + + public void changing(LocationEvent event) { } + }); + } + + browser.addTitleListener(new TitleListener() { + public void changed(TitleEvent event) { + title = event.title; + } + }); + } + + /** + * Return the underlying browser control. + * + * @return org.eclipse.swt.browser.Browser + */ + public Browser getBrowser() { + return browser; + } + + /** + * + */ + protected void forward() { + browser.forward(); + } + + /** + * + */ + protected void back() { + browser.back(); + } + + /** + * + */ + protected void stop() { + browser.stop(); + } + + /** + * + */ + protected void navigate(String url) { + Trace.trace(Trace.FINER, "Navigate: " + url); + if (url != null && url.equals(getURL())) { + refresh(); + return; + } + browser.setUrl(url); + } + + /** + * Refresh the currently viewed page. + */ + public void refresh() { + browser.refresh(); + } + + protected void setURL(String url, boolean browse) { + Trace.trace(Trace.FINEST, "setURL: " + url + " " + browse); + if (url == null) { + home(); + return; + } + + if (url.endsWith(WebBrowserPreference.getHomePageURL().substring(9))) + return; + + // check URL maps + Iterator iterator = WebBrowserUtil.getURLMaps().iterator(); + String newURL = null; + while (iterator.hasNext() && newURL == null) { + try { + IURLMap map = (IURLMap) iterator.next(); + newURL = map.getMappedURL(url); + } catch (Exception e) { } + } + if (newURL != null) + url = newURL; + + if (browse) + navigate(url); + + addToHistory(url); + updateHistory(); + } + + protected void addToHistory(String url) { + if (history == null) + history = WebBrowserPreference.getInternalWebBrowserHistory(); + int found = -1; + int size = history.size(); + for (int i = 0; i < size; i++){ + String s = (String) history.get(i); + if (s.equals(url)) { + found = i; + break; + } + } + + if (found == -1) { + if (size >= MAX_HISTORY) + history.remove(size - 1); + history.add(0, url); + WebBrowserPreference.setInternalWebBrowserHistory(history); + } else if (found != 0) { + history.remove(found); + history.add(0, url); + WebBrowserPreference.setInternalWebBrowserHistory(history); + } + } + + public void setURL(String url) { + setURL(url, true); + } + + /** + * Creates the Web browser status area. + */ + private void createStatusArea(Composite parent) { + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + layout.marginHeight = 0; + layout.marginWidth = 0; + layout.horizontalSpacing = 4; + layout.verticalSpacing = 0; + composite.setLayout(layout); + composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + // Add a label for displaying status messages as they are received from the control + status = new Label(composite, SWT.SINGLE | SWT.READ_ONLY); + GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); + gridData.horizontalIndent = 2; + status.setLayoutData(gridData); + + // Add a progress bar to display downloading progress information + progress = new ProgressBar(composite, SWT.BORDER); + gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_FILL); + gridData.widthHint = 100; + gridData.heightHint = 10; + progress.setLayoutData(gridData); + } + + /** + * + */ + public void dispose() { + super.dispose(); + + showStatusbar = false; + showToolbar = false; + + if (busy != null) + busy.dispose(); + busy = null; + + browser = null; + } + + /** + * Populate the toolbar. + * @param toolbar org.eclipse.swt.widgets.ToolBar + */ + private void fillToolBar(final ToolBar toolbar) { + ToolItem go = new ToolItem(toolbar, SWT.NONE); + go.setImage(ImageResource.getImage(ImageResource.IMG_ELCL_NAV_GO)); + go.setHotImage(ImageResource.getImage(ImageResource.IMG_CLCL_NAV_GO)); + go.setDisabledImage(ImageResource.getImage(ImageResource.IMG_DLCL_NAV_GO)); + go.setToolTipText(WebBrowserUIPlugin.getResource("%actionWebBrowserGo")); + go.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + setURL(combo.getText()); + } + }); + + new ToolItem(toolbar, SWT.SEPARATOR); + + favorites = new ToolItem(toolbar, SWT.DROP_DOWN); + favorites.setImage(ImageResource.getImage(ImageResource.IMG_ELCL_NAV_FAVORITES)); + favorites.setHotImage(ImageResource.getImage(ImageResource.IMG_CLCL_NAV_FAVORITES)); + favorites.setDisabledImage(ImageResource.getImage(ImageResource.IMG_DLCL_NAV_FAVORITES)); + favorites.setToolTipText(WebBrowserUIPlugin.getResource("%actionWebBrowserFavorites")); + + favorites.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + if (event.detail == SWT.ARROW) { + Rectangle r = favorites.getBounds(); + showFavorites(toolbar, toolbar.toDisplay(r.x, r.y + r.height)); + } else + addFavorite(); + } + }); + + // create back and forward actions + back = new ToolItem(toolbar, SWT.NONE); + back.setImage(ImageResource.getImage(ImageResource.IMG_ELCL_NAV_BACKWARD)); + back.setHotImage(ImageResource.getImage(ImageResource.IMG_CLCL_NAV_BACKWARD)); + back.setDisabledImage(ImageResource.getImage(ImageResource.IMG_DLCL_NAV_BACKWARD)); + back.setToolTipText(WebBrowserUIPlugin.getResource("%actionWebBrowserBack")); + back.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + back(); + } + }); + + forward = new ToolItem(toolbar, SWT.NONE); + forward.setImage(ImageResource.getImage(ImageResource.IMG_ELCL_NAV_FORWARD)); + forward.setHotImage(ImageResource.getImage(ImageResource.IMG_CLCL_NAV_FORWARD)); + forward.setDisabledImage(ImageResource.getImage(ImageResource.IMG_DLCL_NAV_FORWARD)); + forward.setToolTipText(WebBrowserUIPlugin.getResource("%actionWebBrowserForward")); + forward.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + forward(); + } + }); + + // create refresh, stop, and print actions + stop = new ToolItem(toolbar, SWT.NONE); + stop.setImage(ImageResource.getImage(ImageResource.IMG_ELCL_NAV_STOP)); + stop.setHotImage(ImageResource.getImage(ImageResource.IMG_CLCL_NAV_STOP)); + stop.setDisabledImage(ImageResource.getImage(ImageResource.IMG_DLCL_NAV_STOP)); + stop.setToolTipText(WebBrowserUIPlugin.getResource("%actionWebBrowserStop")); + stop.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + stop(); + } + }); + + refresh = new ToolItem(toolbar, SWT.NONE); + refresh.setImage(ImageResource.getImage(ImageResource.IMG_ELCL_NAV_REFRESH)); + refresh.setHotImage(ImageResource.getImage(ImageResource.IMG_CLCL_NAV_REFRESH)); + refresh.setDisabledImage(ImageResource.getImage(ImageResource.IMG_DLCL_NAV_REFRESH)); + refresh.setToolTipText(WebBrowserUIPlugin.getResource("%actionWebBrowserRefresh")); + refresh.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + refresh(); + } + }); + } + + protected void addFavorite() { + java.util.List list = WebBrowserPreference.getInternalWebBrowserFavorites(); + Favorite f = new Favorite(title, browser.getUrl()); + if (!list.contains(f)) { + list.add(f); + WebBrowserPreference.setInternalWebBrowserFavorites(list); + } + } + + protected void showFavorites(Control parent, Point p) { + Menu perspectiveBarMenu = null; + if (perspectiveBarMenu == null) { + Menu menu = new Menu(parent); + + // locked favorites + Iterator iterator = WebBrowserUtil.getLockedFavorites().iterator(); + if (iterator.hasNext()) { + while (iterator.hasNext()) { + final Favorite f = (Favorite) iterator.next(); + MenuItem item = new MenuItem(menu, SWT.NONE); + item.setText(f.getName()); + item.setImage(ImageResource.getImage(ImageResource.IMG_FAVORITE)); + item.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + setURL(f.getURL()); + } + }); + } + + new MenuItem(menu, SWT.SEPARATOR); + } + + iterator = WebBrowserPreference.getInternalWebBrowserFavorites().iterator(); + if (!iterator.hasNext()) { + MenuItem item = new MenuItem(menu, SWT.NONE); + item.setText(WebBrowserUIPlugin.getResource("%actionWebBrowserNoFavorites")); + } + while (iterator.hasNext()) { + final Favorite f = (Favorite) iterator.next(); + MenuItem item = new MenuItem(menu, SWT.NONE); + item.setText(f.getName()); + item.setImage(ImageResource.getImage(ImageResource.IMG_FAVORITE)); + item.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + setURL(f.getURL()); + } + }); + } + + new MenuItem(menu, SWT.SEPARATOR); + + MenuItem item = new MenuItem(menu, SWT.NONE); + item.setText(WebBrowserUIPlugin.getResource("%actionWebBrowserOrganizeFavorites")); + item.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent event) { + OrganizeFavoritesDialog dialog = new OrganizeFavoritesDialog(shell); + dialog.open(); + } + }); + + perspectiveBarMenu = menu; + } + + if (perspectiveBarMenu != null) { + perspectiveBarMenu.setLocation(p.x, p.y); + perspectiveBarMenu.setVisible(true); + } + } + + public void home() { + navigate(WebBrowserPreference.getHomePageURL()); + } + + /** + * Returns true if the homepage is currently being displayed. + * @return boolean + */ + protected boolean isHome() { + return getURL() != null && getURL().endsWith(WebBrowserPreference.getHomePageURL().substring(9)); + } + + protected String getURL() { + return browser.getUrl(); + } + + /** + * Update the history list to the global copy. + */ + protected void updateHistory() { + if (combo == null) + return; + + String temp = combo.getText(); + if (history == null) + history = WebBrowserPreference.getInternalWebBrowserHistory(); + + String[] historyList = new String[history.size()]; + history.toArray(historyList); + combo.setItems(historyList); + + combo.setText(temp); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditor.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditor.java new file mode 100644 index 0000000..1015a2d --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditor.java @@ -0,0 +1,371 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.net.URL; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.core.runtime.*; +import org.eclipse.core.resources.*; +import org.eclipse.ui.*; +import org.eclipse.ui.part.*; +import org.eclipse.webbrowser.*; +/** + * An integrated Web browser, defined as an editor to make + * better use of the desktop. + */ +public class WebBrowserEditor extends EditorPart { + public static final String WEB_BROWSER_EDITOR_ID = "org.eclipse.webbrowser"; + protected WebBrowser webBrowser; + protected String initialURL; + protected Image image; + + protected TextAction cutAction; + protected TextAction copyAction; + protected TextAction pasteAction; + + protected IResourceChangeListener resourceListener; + + /** + * WebBrowserEditor constructor comment. + */ + public WebBrowserEditor() { + super(); + } + + /** + * Creates the SWT controls for this workbench part. + *

+ * Clients should not call this method (the workbench calls this method at + * appropriate times). + *

+ *

+ * For implementors this is a multi-step process: + *

    + *
  1. Create one or more controls within the parent.
  2. + *
  3. Set the parent layout as needed.
  4. + *
  5. Register any global actions with the IActionService.
  6. + *
  7. Register any popup menus with the IActionService.
  8. + *
  9. Register a selection provider with the ISelectionService + * (optional).
  10. + *
+ *

+ * + * @param parent the parent control + */ + public void createPartControl(Composite parent) { + IWebBrowserEditorInput input = getWebBrowserEditorInput(); + + + if (input == null || input.isToolbarVisible() == false) + webBrowser = new WebBrowser(parent, false, input.isStatusbarVisible()); + else { + webBrowser = new WebBrowser(parent, true, input.isStatusbarVisible()); + cutAction = new TextAction(webBrowser, TextAction.CUT); + copyAction = new TextAction(webBrowser, TextAction.COPY); + pasteAction = new TextAction(webBrowser, TextAction.PASTE); + } + + webBrowser.setURL(initialURL); + webBrowser.editor = this; + } + + public void dispose() { + if (image != null && !image.isDisposed()) + image.dispose(); + image = null; + + if (resourceListener != null) + ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceListener); + } + + /* (non-Javadoc) + * Saves the contents of this editor. + *

+ * Subclasses must override this method to implement the open-save-close lifecycle + * for an editor. For greater details, see IEditorPart + *

+ * + * @see IEditorPart + */ + public void doSave(IProgressMonitor monitor) { } + + /* (non-Javadoc) + * Saves the contents of this editor to another object. + *

+ * Subclasses must override this method to implement the open-save-close lifecycle + * for an editor. For greater details, see IEditorPart + *

+ * + * @see IEditorPart + */ + public void doSaveAs() { } + + /** + * Returns the copy action. + * + * @return org.eclipse.jface.action.IAction + */ + public IAction getCopyAction() { + return copyAction; + } + + /** + * Returns the cut action. + * + * @return org.eclipse.jface.action.IAction + */ + public IAction getCutAction() { + return cutAction; + } + + /** + * Returns the paste action. + * + * @return org.eclipse.jface.action.IAction + */ + public IAction getPasteAction() { + return pasteAction; + } + + /** + * Returns the web editor input, if available. + * + * @return org.eclipse.webbrowser.IWebBrowserEditorInput + */ + protected IWebBrowserEditorInput getWebBrowserEditorInput() { + IEditorInput input = getEditorInput(); + if (input instanceof IWebBrowserEditorInput) + return (IWebBrowserEditorInput) input; + return null; + } + + /* (non-Javadoc) + * Sets the cursor and selection state for this editor to the passage defined + * by the given marker. + *

+ * Subclasses may override. For greater details, see IEditorPart + *

+ * + * @see IEditorPart + */ + public void gotoMarker(IMarker marker) { } + + /* (non-Javadoc) + * Initializes the editor part with a site and input. + *

+ * Subclasses of EditorPart must implement this method. Within + * the implementation subclasses should verify that the input type is acceptable + * and then save the site and input. Here is sample code: + *

+ *
+	 *		if (!(input instanceof IFileEditorInput))
+	 *			throw new PartInitException("Invalid Input: Must be IFileEditorInput");
+	 *		setSite(site);
+	 *		setInput(editorInput);
+	 * 
+ */ + public void init(IEditorSite site, IEditorInput input) { + Trace.trace(Trace.FINEST, "Opening browser: " + input); + if (input instanceof IFileEditorInput) { + IFileEditorInput fei = (IFileEditorInput) input; + IFile file = fei.getFile(); + URL url = null; + try { + if (file != null && file.exists()) + url = file.getLocation().toFile().toURL(); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Error getting URL to file"); + } + addResourceListener(file); + input = new WebBrowserEditorInput(url, WebBrowserEditorInput.SHOW_ALL | WebBrowserEditorInput.SAVE_URL); + } + if (input instanceof IWebBrowserEditorInput) { + IWebBrowserEditorInput wbei = (IWebBrowserEditorInput) input; + initialURL = null; + if (wbei.getURL() != null) + initialURL = wbei.getURL().toExternalForm(); + if (webBrowser != null) { + webBrowser.setURL(initialURL); + site.getWorkbenchWindow().getActivePage().bringToTop(this); + } + + setPartName(wbei.getName()); + setTitleToolTip(wbei.getToolTipText()); + + Image oldImage = image; + ImageDescriptor id = wbei.getImageDescriptor(); + image = id.createImage(); + + setTitleImage(image); + if (oldImage != null && !oldImage.isDisposed()) + oldImage.dispose(); + } + setSite(site); + setInput(input); + } + + /* (non-Javadoc) + * Returns whether the contents of this editor have changed since the last save + * operation. + *

+ * Subclasses must override this method to implement the open-save-close lifecycle + * for an editor. For greater details, see IEditorPart + *

+ * + * @see IEditorPart + */ + public boolean isDirty() { + return false; + } + + /* (non-Javadoc) + * Returns whether the "save as" operation is supported by this editor. + *

+ * Subclasses must override this method to implement the open-save-close lifecycle + * for an editor. For greater details, see IEditorPart + *

+ * + * @see IEditorPart + */ + public boolean isSaveAsAllowed() { + return false; + } + + /** + * Returns true if this editor has a toolbar. + * + * @return boolean + */ + public boolean isToolbarVisible() { + IWebBrowserEditorInput input = getWebBrowserEditorInput(); + if (input == null || input.isToolbarVisible()) + return true; + else + return false; + } + + /** + * Open the input in the internal Web browser. + */ + public static void open(IWebBrowserEditorInput input) { + IWorkbenchWindow workbenchWindow = WebBrowserUIPlugin.getInstance().getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchPage page = workbenchWindow.getActivePage(); + + try { + IEditorReference[] editors = page.getEditorReferences(); + int size = editors.length; + for (int i = 0; i < size; i++) { + if (WEB_BROWSER_EDITOR_ID.equals(editors[i].getId())) { + IEditorPart editor = editors[i].getEditor(true); + if (editor != null && editor instanceof WebBrowserEditor) { + WebBrowserEditor webEditor = (WebBrowserEditor) editor; + if (input.canReplaceInput(webEditor.getWebBrowserEditorInput())) { + editor.init(editor.getEditorSite(), input); + return; + } + } + } + } + + page.openEditor(input, WebBrowserEditor.WEB_BROWSER_EDITOR_ID); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Error opening Web browser", e); + } + } + + /** + * Asks this part to take focus within the workbench. + *

+ * Clients should not call this method (the workbench calls this method at + * appropriate times). + *

+ */ + public void setFocus() { + if (webBrowser != null) { + if (webBrowser.combo != null) + webBrowser.combo.setFocus(); + else + webBrowser.browser.setFocus(); + webBrowser.updateHistory(); + } + } + + /** + * Update the actions. + */ + protected void updateActions() { + if (cutAction != null) + cutAction.update(); + if (copyAction != null) + copyAction.update(); + if (pasteAction != null) + pasteAction.update(); + } + + /** + * Close the editor correctly. + */ + protected void closeEditor() { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + getEditorSite().getPage().closeEditor(WebBrowserEditor.this, false); + } + }); + } + + /** + * Adds a resource change listener to see if the file is deleted. + */ + protected void addResourceListener(final IResource resource) { + if (resource == null) + return; + + resourceListener = new IResourceChangeListener() { + public void resourceChanged(IResourceChangeEvent event) { + try { + event.getDelta().accept(new IResourceDeltaVisitor() { + public boolean visit(IResourceDelta delta) { + IResource res = delta.getResource(); + + if (res == null || !res.equals(resource)) + return true; + + if (delta.getKind() != IResourceDelta.REMOVED) + return true; + + Display.getDefault().asyncExec(new Runnable() { + public void run() { + String title = WebBrowserUIPlugin.getResource("%dialogResourceDeletedTitle"); + String message = WebBrowserUIPlugin.getResource("%dialogResourceDeletedMessage", resource.getName()); + String[] labels = new String[] {WebBrowserUIPlugin.getResource("%dialogResourceDeletedIgnore"), IDialogConstants.CLOSE_LABEL}; + MessageDialog dialog = new MessageDialog(getEditorSite().getShell(), title, null, message, MessageDialog.INFORMATION, labels, 0); + + if (dialog.open() != 0) + closeEditor(); + } + }); + return false; + } + }); + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Error listening for resource deletion", e); + } + } + }; + ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceListener); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditorActionBarContributor.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditorActionBarContributor.java new file mode 100644 index 0000000..fd36893 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserEditorActionBarContributor.java @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.ui.*; +import org.eclipse.ui.actions.ActionFactory; +/** + * ActionBarContributor for the Web browser. + * Just adds cut, copy, paste actions. + */ +public class WebBrowserEditorActionBarContributor implements IEditorActionBarContributor { + protected IActionBars actionBars; + + /** + * WebBrowserEditorActionBarContributor constructor comment. + */ + public WebBrowserEditorActionBarContributor() { + super(); + } + + /** + * Initializes this contributor, which is expected to add contributions as + * required to the given action bars and global action handlers. + * + * @param bars the action bars + */ + public void init(IActionBars bars, IWorkbenchPage page) { + this.actionBars = bars; + } + + /** + * Sets the active editor for the contributor. + * Implementors should disconnect from the old editor, connect to the + * new editor, and update the actions to reflect the new editor. + * + * @param targetEditor the new editor target + */ + public void setActiveEditor(IEditorPart targetEditor) { + if (targetEditor instanceof WebBrowserEditor) { + WebBrowserEditor editor = (WebBrowserEditor) targetEditor; + + actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), editor.getCopyAction()); + actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(), editor.getCutAction()); + actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), editor.getPasteAction()); + + editor.updateActions(); + } + } + + /** + * Disposes this contributor. + */ + public void dispose() { } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreference.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreference.java new file mode 100644 index 0000000..ea39724 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreference.java @@ -0,0 +1,164 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.util.*; +import java.net.URL; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.preference.IPreferenceStore; +/** + * Preferences for the Web browser. + */ +public class WebBrowserPreference { + protected static final String PREF_BROWSER_HISTORY = "webBrowserHistory"; + protected static final String PREF_INTERNAL_WEB_BROWSER_HISTORY = "internalWebBrowserHistory"; + protected static final String PREF_INTERNAL_WEB_BROWSER_FAVORITES = "internalWebBrowserFavorites"; + protected static final String PREF_INTERNAL_WEB_BROWSER_OLD_FAVORITES = "internalWebBrowserOldFavorites"; + protected static final String URL_PARAMETER = "%URL%"; + + /** + * WebBrowserPreference constructor comment. + */ + private WebBrowserPreference() { + super(); + } + + /** + * Returns the URL to the homepage. + * + * @return java.lang.String + */ + public static String getHomePageURL() { + try { + // get the default home page + URL url = WebBrowserUIPlugin.getInstance().getBundle().getEntry("home/home.html"); + url = Platform.resolve(url); + return url.toExternalForm(); + } catch (Exception e) { + return "http://www.eclipse.org"; + } + } + + /** + * Returns the preference store. + * + * @return org.eclipse.jface.preference.IPreferenceStore + */ + protected static IPreferenceStore getPreferenceStore() { + return WebBrowserUIPlugin.getInstance().getPreferenceStore(); + } + + /** + * Returns the Web browser history list. + * + * @return java.util.List + */ + public static List getInternalWebBrowserHistory() { + String temp = getPreferenceStore().getString(PREF_INTERNAL_WEB_BROWSER_HISTORY); + StringTokenizer st = new StringTokenizer(temp, "|*|"); + List l = new ArrayList(); + while (st.hasMoreTokens()) { + String s = st.nextToken(); + l.add(s); + } + return l; + } + + /** + * Returns the Web browser favorites. + * + * @return java.util.List + */ + public static List getInternalWebBrowserFavorites() { + String temp = getPreferenceStore().getString(PREF_INTERNAL_WEB_BROWSER_FAVORITES); + StringTokenizer st = new StringTokenizer(temp, "|*|"); + List l = new ArrayList(); + while (st.hasMoreTokens()) { + l.add(new Favorite(st.nextToken(), st.nextToken())); + } + return l; + } + + /** + * Initialize the default preferences. + */ + public static void initializeDefaultPreferences() { + IPreferenceStore store = getPreferenceStore(); + + String temp = store.getString(PREF_INTERNAL_WEB_BROWSER_OLD_FAVORITES); + StringTokenizer st = new StringTokenizer(temp, "|*|"); + List def = new ArrayList(); + while (st.hasMoreTokens()) { + def.add(new Favorite(st.nextToken(), st.nextToken())); + } + + List list = getInternalWebBrowserFavorites(); + Iterator iterator = WebBrowserUtil.getUnlockedFavorites().iterator(); + while (iterator.hasNext()) { + Favorite f = (Favorite) iterator.next(); + if (!def.contains(f)) + list.add(f); + } + setInternalWebBrowserFavorites(list); + + StringBuffer sb = new StringBuffer(); + iterator = WebBrowserUtil.getUnlockedFavorites().iterator(); + while (iterator.hasNext()) { + Favorite f = (Favorite) iterator.next(); + sb.append(f.getName()); + sb.append("|*|"); + sb.append(f.getURL()); + sb.append("|*|"); + } + store.setValue(PREF_INTERNAL_WEB_BROWSER_OLD_FAVORITES, sb.toString()); + WebBrowserUIPlugin.getInstance().savePluginPreferences(); + } + + /** + * Sets the Web browser history. + * + * @param java.util.List + */ + public static void setInternalWebBrowserHistory(List list) { + StringBuffer sb = new StringBuffer(); + if (list != null) { + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + String s = (String) iterator.next(); + sb.append(s); + sb.append("|*|"); + } + } + getPreferenceStore().setValue(PREF_INTERNAL_WEB_BROWSER_HISTORY, sb.toString()); + WebBrowserUIPlugin.getInstance().savePluginPreferences(); + } + + /** + * Sets the Web browser favorites. + * + * @param java.util.List + */ + public static void setInternalWebBrowserFavorites(List list) { + StringBuffer sb = new StringBuffer(); + if (list != null) { + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + Favorite f = (Favorite) iterator.next(); + sb.append(f.getName()); + sb.append("|*|"); + sb.append(f.getURL()); + sb.append("|*|"); + } + } + getPreferenceStore().setValue(PREF_INTERNAL_WEB_BROWSER_FAVORITES, sb.toString()); + WebBrowserUIPlugin.getInstance().savePluginPreferences(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreferencePage.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreferencePage.java new file mode 100644 index 0000000..8fa36fd --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserPreferencePage.java @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.help.WorkbenchHelp; +/** + * The preference page that holds webbrowser preferences. + */ +public class WebBrowserPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { + /** + * WebBrowserPreferencePage constructor comment. + */ + public WebBrowserPreferencePage() { + super(); + noDefaultAndApplyButton(); + } + + /** + * Create the preference options. + * + * @param parent org.eclipse.swt.widgets.Composite + * @return org.eclipse.swt.widgets.Control + */ + protected Control createContents(Composite parent) { + initializeDialogUnits(parent); + + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 1; + layout.horizontalSpacing = convertHorizontalDLUsToPixels(4); + layout.verticalSpacing = convertVerticalDLUsToPixels(4); + layout.marginWidth = 0; + layout.marginHeight = 0; + composite.setLayout(layout); + GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); + composite.setLayoutData(data); + WorkbenchHelp.setHelp(composite, ContextIds.PREF_BROWSER); + + Label label = new Label(composite, SWT.WRAP); + label.setText(WebBrowserUIPlugin.getResource("%preferenceWebBrowserDescription")); + data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); + label.setLayoutData(data); + + BrowserTableComposite browserComposite = new BrowserTableComposite(composite, SWT.NONE); + + data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); + browserComposite.setLayoutData(data); + + Dialog.applyDialogFont(composite); + + return composite; + } + + /** + * Initializes this preference page using the passed desktop. + * + * @param desktop the current desktop + */ + public void init(IWorkbench workbench) { } + + /** + * + */ + public void setVisible(boolean visible) { + super.setVisible(visible); + if (visible) + setTitle(WebBrowserUIPlugin.getResource("%preferenceWebBrowserTitleLong")); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUIPlugin.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUIPlugin.java new file mode 100644 index 0000000..ac4ded9 --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUIPlugin.java @@ -0,0 +1,90 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.text.MessageFormat; + +import org.eclipse.core.runtime.*; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; +/** + * The main web browser plugin class. + */ +public class WebBrowserUIPlugin extends AbstractUIPlugin { + // Web browser plugin id + public static final String PLUGIN_ID = "net.sourceforge.phpeclipse.webbrowser"; + + // singleton instance of this class + private static WebBrowserUIPlugin singleton; + + /** + * Create the WebBrowserUIPlugin + */ + public WebBrowserUIPlugin() { + super(); + singleton = this; + } + + /** + * Returns the singleton instance of this plugin. + * + * @return org.eclipse.webbrowser.WebBrowserPlugin + */ + public static WebBrowserUIPlugin getInstance() { + return singleton; + } + + /** + * Returns the translated String found with the given key. + * + * @param key java.lang.String + * @return java.lang.String + */ + public static String getResource(String key) { + try { + return Platform.getResourceString(getInstance().getBundle(), key); + } catch (Exception e) { + return key; + } + } + + /** + * Returns the translated String found with the given key, + * and formatted with the given arguments using java.text.MessageFormat. + * + * @param key java.lang.String + * @param arg java.lang.String + * @return java.lang.String + */ + public static String getResource(String key, String arg) { + try { + String text = getResource(key); + return MessageFormat.format(text, new String[] { arg }); + } catch (Exception e) { + return key; + } + } + + public void start(BundleContext context) throws Exception { + super.start(context); + WebBrowserPreference.initializeDefaultPreferences(); + } + + /** + * Shuts down this plug-in and saves all plug-in state. + * + * @exception Exception + */ + public void stop(BundleContext context) throws Exception { + super.stop(context); + BrowserManager.getInstance().dispose(); + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUtil.java b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUtil.java new file mode 100644 index 0000000..266de1c --- /dev/null +++ b/net.sourceforge.phpeclipse.webbrowser/src/org/eclipse/webbrowser/internal/WebBrowserUtil.java @@ -0,0 +1,376 @@ +/** + * Copyright (c) 2003 IBM Corporation and others. + * All rights reserved.   This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + */ +package org.eclipse.webbrowser.internal; + +import java.io.File; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.ui.IMemento; +import org.eclipse.ui.XMLMemento; +import org.eclipse.webbrowser.IExternalWebBrowser; +import org.eclipse.webbrowser.IExternalWebBrowserWorkingCopy; +import org.eclipse.webbrowser.IURLMap; +import org.eclipse.webbrowser.IWebBrowser; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.core.runtime.*; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; +/** + * Utility class for the Web browser tooling. + */ +public class WebBrowserUtil { + private static List urlMaps; + private static List lockedFavorites; + private static List unlockedFavorites; + private static final String BROWSER_PACKAGE_NAME = "org.eclipse.swt.browser.Browser"; + public static Boolean isInternalBrowserOperational; + + private static List defaultBrowsers2; + + static class DefaultBrowser { + String name; + String params; + String executable; + String[] locations; + + public DefaultBrowser(String name, String executable, String params, String[] locations) { + if (name == null) + name = ""; + else if (name.startsWith("%")) + name = WebBrowserUIPlugin.getResource(name); + + this.name = name; + this.executable = executable; + this.params = params; + this.locations = locations; + } + + public String toString() { + String s = "Browser: " + name + ", " + executable + ", " + params + ", "; + if (locations != null) { + int size = locations.length; + for (int i = 0; i < size; i++) { + s += locations[i] + ";"; + } + } + return s; + } + } + + /** + * WebBrowserUtil constructor comment. + */ + public WebBrowserUtil() { + super(); + } + + /** + * Returns true if we're running on Windows. + * + * @return boolean + */ + public static boolean isWindows() { + String os = System.getProperty("os.name"); + if (os != null && os.toLowerCase().indexOf("win") >= 0) + return true; + else + return false; + } + + /** + * Returns true if we're running on linux. + * + * @return boolean + */ + public static boolean isLinux() { + String os = System.getProperty("os.name"); + if (os != null && os.toLowerCase().indexOf("lin") >= 0) + return true; + else + return false; + } + + /** + * Open a dialog window. + * + * @param title java.lang.String + * @param message java.lang.String + */ + public static void openError(String message) { + Display d = Display.getCurrent(); + if (d == null) + d = Display.getDefault(); + + Shell shell = d.getActiveShell(); + MessageDialog.openError(shell, WebBrowserUIPlugin.getResource("%errorDialogTitle"), message); + } + + /** + * Open a dialog window. + * + * @param title java.lang.String + * @param message java.lang.String + */ + public static void openMessage(String message) { + Display d = Display.getCurrent(); + if (d == null) + d = Display.getDefault(); + + Shell shell = d.getActiveShell(); + MessageDialog.openInformation(shell, WebBrowserUIPlugin.getResource("%searchingTaskName"), message); + } + + /** + * Returns a List of all URL maps. + * + * @return java.util.List + */ + public static List getURLMaps() { + if (urlMaps == null) + loadURLMaps(); + return urlMaps; + } + + /** + * Load the url map extension point. + */ + private static void loadURLMaps() { + Trace.trace(Trace.FINEST, "->- Loading .urlMap extension point ->-"); + IExtensionRegistry registry = Platform.getExtensionRegistry(); + IConfigurationElement[] cf = registry.getConfigurationElementsFor(WebBrowserUIPlugin.PLUGIN_ID, "urlMap"); + + int size = cf.length; + urlMaps = new ArrayList(size); + for (int i = 0; i < size; i++) { + try { + IURLMap mapper = (IURLMap) cf[i].createExecutableExtension("class"); + urlMaps.add(mapper); + Trace.trace(Trace.FINEST, " Loaded url map: " + cf[i].getAttribute("id")); + } catch (Throwable t) { + Trace.trace(Trace.SEVERE, " Could not load url map: " + cf[i].getAttribute("id"), t); + } + } + + Trace.trace(Trace.FINEST, "-<- Done loading .urlMap extension point -<-"); + } + + /** + * Returns a List of all unlocked favorites. + * + * @return java.util.List + */ + public static List getUnlockedFavorites() { + if (unlockedFavorites == null) + loadFavorites(); + return unlockedFavorites; + } + + /** + * Returns a List of all locked favorites. + * + * @return java.util.List + */ + public static List getLockedFavorites() { + if (lockedFavorites == null) + loadFavorites(); + return lockedFavorites; + } + + /** + * Load the favorites extension point. + */ + private static void loadFavorites() { + Trace.trace(Trace.FINEST, "->- Loading .favorites extension point ->-"); + IExtensionRegistry registry = Platform.getExtensionRegistry(); + IConfigurationElement[] cf = registry.getConfigurationElementsFor(WebBrowserUIPlugin.PLUGIN_ID, "favorites"); + + int size = cf.length; + unlockedFavorites = new ArrayList(size); + lockedFavorites = new ArrayList(size); + for (int i = 0; i < size; i++) { + try { + Favorite f = new Favorite(cf[i].getAttribute("name"), cf[i].getAttribute("url")); + String locked = cf[i].getAttribute("locked"); + if (!"true".equals(locked)) + unlockedFavorites.add(f); + else + lockedFavorites.add(f); + Trace.trace(Trace.FINEST, " Loaded favorite: " + cf[i].getAttribute("id")); + } catch (Throwable t) { + Trace.trace(Trace.SEVERE, " Could not load favorite: " + cf[i].getAttribute("id"), t); + } + } + + Trace.trace(Trace.FINEST, "-<- Done loading .favorites extension point -<-"); + } + + /** + * Returns whether it should be possible to use the internal browser or not, based on whether or not + * the org.eclipse.swt.Browser class can be found/loaded. If it can it means is is supported on the platform in which + * this plugin is running. If not, disable the ability to use the internal browser. + * + * @return boolean + */ + public static boolean canUseInternalWebBrowser() { + try { + Class clazz = Class.forName(BROWSER_PACKAGE_NAME); + if (clazz != null) + return true; + } catch (ClassNotFoundException e) { } + return false; + } + + /** + * This method checks to see if it can new up a new Browser. If the SWT widget can not be bound + * to the particular operating system it throws an SWTException. We catch that and set a boolean + * flag which represents whether or not we were successfully able to create a Browser instance or not. + * If not, don't bother adding the Internal Web Browser that uses this widget. Designed to be attemped + * only once and the flag set used throughout. + * + * @return boolean + */ + protected static boolean isInternalBrowserOperational() { + // if we have already figured this out, don't do it again. + if (isInternalBrowserOperational != null) + return isInternalBrowserOperational.booleanValue(); + + try { + new Browser(new Shell(Display.getCurrent()), SWT.NONE); + isInternalBrowserOperational = new Boolean(true); + } catch (Throwable t) { + WebBrowserUIPlugin.getInstance().getLog().log(new Status(IStatus.WARNING, + WebBrowserUIPlugin.PLUGIN_ID, 0, "Internal browser is not operational", t)); + isInternalBrowserOperational = new Boolean(false); + } + return isInternalBrowserOperational.booleanValue(); + } + + public static List getExternalBrowserPaths() { + List paths = new ArrayList(); + Iterator iterator = BrowserManager.getInstance().getWebBrowsers().iterator(); + while (iterator.hasNext()) { + IWebBrowser wb = (IWebBrowser) iterator.next(); + if (wb instanceof IExternalWebBrowser) { + IExternalWebBrowser ext = (IExternalWebBrowser) wb; + paths.add(ext.getLocation().toLowerCase()); + } + } + return paths; + } + + // Add any supported EXTERNAL web browsers found after an arbitrary check in specific paths + public static void addFoundBrowsers(List list) { + List paths = getExternalBrowserPaths(); + + Iterator iterator = getDefaultBrowsers().iterator(); + while (iterator.hasNext()) { + DefaultBrowser browser2 = (DefaultBrowser) iterator.next(); + if (browser2.locations != null) { + int size = browser2.locations.length; + for (int j = 0; j < size; j++) { + String location = browser2.locations[j]; + if (!paths.contains(location.toLowerCase())) { + try { + File f = new File(location); + if (f.exists()) { + ExternalWebBrowser browser = new ExternalWebBrowser(); + browser.name = browser2.name; + browser.location = location; + browser.parameters = browser2.params; + list.add(browser); + //Add browser here so that it get added to the table + BrowserManager.getInstance().addBrowser(browser); + j += size; + } + } catch (Exception e) { } + } + } + } + } + } + + /** + * Create an external Web browser if the file matches the default (known) browsers. + * @param file + * @return + */ + public static IExternalWebBrowserWorkingCopy createExternalBrowser(File file) { + if (file == null || !file.isFile()) + return null; + + String executable = file.getName(); + Iterator iterator = getDefaultBrowsers().iterator(); + while (iterator.hasNext()) { + DefaultBrowser db = (DefaultBrowser) iterator.next(); + if (executable.equals(db.executable)) { + IExternalWebBrowserWorkingCopy browser = BrowserManager.getInstance().createExternalWebBrowser(); + browser.setName(db.name); + browser.setLocation(file.getAbsolutePath()); + browser.setParameters(db.params); + return browser; + } + } + + return null; + } + + protected static List getDefaultBrowsers() { + if (defaultBrowsers2 != null) + return defaultBrowsers2; + + Reader reader = null; + defaultBrowsers2 = new ArrayList(); + try { + URL url = WebBrowserUIPlugin.getInstance().getBundle().getEntry("defaultBrowsers.xml"); + URL url2 = Platform.resolve(url); + reader = new InputStreamReader(url2.openStream()); + IMemento memento = XMLMemento.createReadRoot(reader); + IMemento[] children = memento.getChildren("browser"); + if (children != null) { + int size = children.length; + for (int i = 0; i < size; i++) { + IMemento child = children[i]; + String name = child.getString("name"); + String executable = child.getString("executable"); + String params = child.getString("params"); + List locations = new ArrayList(); + + IMemento[] locat = child.getChildren("location"); + if (locat != null) { + int size2 = locat.length; + for (int j = 0; j < size2; j++) + locations.add(locat[j].getTextData()); + } + + String[] loc = new String[locations.size()]; + locations.toArray(loc); + DefaultBrowser db = new DefaultBrowser(name, executable, params, loc); + Trace.trace(Trace.CONFIG, "Default browser: " + db); + defaultBrowsers2.add(db); + } + } + } catch (Exception e) { + Trace.trace(Trace.SEVERE, "Error loading default browsers", e); + } finally { + try { + reader.close(); + } catch (Exception e) { } + } + return defaultBrowsers2; + } +} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java index a5171dc..f97ae34 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/BrowserView.java @@ -9,8 +9,13 @@ * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpeclipse.views.browser; +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; +import org.eclipse.webbrowser.internal.WebBrowser; +import org.eclipse.webbrowser.internal.WebBrowserUIPlugin; +import org.eclipse.webbrowser.internal.WebBrowserUtil; /** * BrowserView is a simple demonstration of the SWT Browser * widget. It consists of a workbench view and tab folder where each tab in the @@ -20,7 +25,7 @@ import org.eclipse.ui.part.ViewPart; */ public class BrowserView extends ViewPart { public final static String ID_BROWSER = "net.sourceforge.phpeclipse.views.browser"; - PHPBrowser instance = null; + WebBrowser instance = null; /** * Create the example * @@ -28,9 +33,8 @@ public class BrowserView extends ViewPart { */ public void createPartControl(Composite frame) { try { - instance = new PHPBrowser(frame); - if (instance.browser==null) { - instance = null; + if (WebBrowserUtil.canUseInternalWebBrowser() ) { + instance = new WebBrowser(frame, true, true); } } catch(Exception e) { instance = null; @@ -58,12 +62,12 @@ public class BrowserView extends ViewPart { } public void setUrl(String url) { if (instance!=null) { - instance.browser.setUrl(url); + instance.setURL(url); } } public void refresh() { if (instance!=null) { - instance.browser.refresh(); + instance.refresh(); } } } diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java deleted file mode 100644 index 3374fed..0000000 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/PHPBrowser.java +++ /dev/null @@ -1,358 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package net.sourceforge.phpeclipse.views.browser; -import java.text.MessageFormat; -import java.util.MissingResourceException; -import java.util.ResourceBundle; -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.browser.CloseWindowListener; -import org.eclipse.swt.browser.LocationEvent; -import org.eclipse.swt.browser.LocationListener; -import org.eclipse.swt.browser.OpenWindowListener; -import org.eclipse.swt.browser.ProgressEvent; -import org.eclipse.swt.browser.ProgressListener; -import org.eclipse.swt.browser.StatusTextEvent; -import org.eclipse.swt.browser.StatusTextListener; -import org.eclipse.swt.browser.TitleEvent; -import org.eclipse.swt.browser.TitleListener; -import org.eclipse.swt.browser.VisibilityWindowListener; -import org.eclipse.swt.browser.WindowEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.FormAttachment; -import org.eclipse.swt.layout.FormData; -import org.eclipse.swt.layout.FormLayout; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.ProgressBar; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.swt.widgets.ToolBar; -import org.eclipse.swt.widgets.ToolItem; - -public class PHPBrowser { - static ResourceBundle resourceBundle = ResourceBundle - .getBundle("net.sourceforge.phpeclipse.views.browser.browser"); - int index; - boolean busy; - Image images[]; - Text location; - Browser browser; - static final String[] imageLocations = {"eclipse01.bmp", "eclipse02.bmp", - "eclipse03.bmp", "eclipse04.bmp", "eclipse05.bmp", "eclipse06.bmp", - "eclipse07.bmp", "eclipse08.bmp", "eclipse09.bmp", "eclipse10.bmp", - "eclipse11.bmp", "eclipse12.bmp",}; - static final String iconLocation = "document.gif"; - /** - * Creates an instance of a ControlExample embedded inside the supplied - * parent Composite. - * - * @param parent - * the container of the example - */ - public PHPBrowser(Composite parent) { - initResources(); - final Display display = parent.getDisplay(); - FormLayout layout = new FormLayout(); - parent.setLayout(layout); - ToolBar toolbar = new ToolBar(parent, SWT.NONE); - final ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH); - itemBack.setText(getResourceString("Back")); - final ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH); - itemForward.setText(getResourceString("Forward")); - final ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH); - itemStop.setText(getResourceString("Stop")); - final ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH); - itemRefresh.setText(getResourceString("Refresh")); - final ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH); - itemGo.setText(getResourceString("Go")); - location = new Text(parent, SWT.BORDER); - final Canvas canvas = new Canvas(parent, SWT.NO_BACKGROUND); - final Rectangle rect = images[0].getBounds(); - canvas.addListener(SWT.Paint, new Listener() { - public void handleEvent(Event e) { - Point pt = canvas.getSize(); - e.gc.drawImage(images[index], 0, 0, rect.width, rect.height, 0, 0, - pt.x, pt.y); - } - }); - canvas.addListener(SWT.MouseDown, new Listener() { - public void handleEvent(Event e) { - browser.setUrl(getResourceString("Startup")); - } - }); - display.asyncExec(new Runnable() { - public void run() { - if (canvas.isDisposed()) - return; - if (busy) { - index++; - if (index == images.length) - index = 0; - canvas.redraw(); - } - display.timerExec(150, this); - } - }); - final Label status = new Label(parent, SWT.NONE); - final ProgressBar progressBar = new ProgressBar(parent, SWT.NONE); - FormData data = new FormData(); - data.top = new FormAttachment(0, 5); - toolbar.setLayoutData(data); - data = new FormData(); - data.left = new FormAttachment(0, 0); - data.right = new FormAttachment(100, 0); - data.top = new FormAttachment(canvas, 5, SWT.DEFAULT); - data.bottom = new FormAttachment(status, -5, SWT.DEFAULT); - try { - browser = new Browser(parent, SWT.NONE); - browser.setLayoutData(data); - } catch (SWTError e) { - /* Browser widget could not be instantiated */ - Label label = new Label(parent, SWT.CENTER | SWT.WRAP); - label.setText(getResourceString("BrowserNotCreated")); - label.setLayoutData(data); - } - data = new FormData(); - data.width = 24; - data.height = 24; - data.top = new FormAttachment(0, 5); - data.right = new FormAttachment(100, -5); - canvas.setLayoutData(data); - data = new FormData(); - data.top = new FormAttachment(toolbar, 0, SWT.TOP); - data.left = new FormAttachment(toolbar, 5, SWT.RIGHT); - data.right = new FormAttachment(canvas, -5, SWT.DEFAULT); - location.setLayoutData(data); - data = new FormData(); - data.left = new FormAttachment(0, 5); - data.right = new FormAttachment(progressBar, 0, SWT.DEFAULT); - data.bottom = new FormAttachment(100, -5); - status.setLayoutData(data); - data = new FormData(); - data.right = new FormAttachment(100, -5); - data.bottom = new FormAttachment(100, -5); - progressBar.setLayoutData(data); - if (browser != null) { - itemBack.setEnabled(browser.isBackEnabled()); - itemForward.setEnabled(browser.isForwardEnabled()); - Listener listener = new Listener() { - public void handleEvent(Event event) { - ToolItem item = (ToolItem) event.widget; - if (item == itemBack) - browser.back(); - else if (item == itemForward) - browser.forward(); - else if (item == itemStop) - browser.stop(); - else if (item == itemRefresh) - browser.refresh(); - else if (item == itemGo) - browser.setUrl(location.getText()); - } - }; - browser.addLocationListener(new LocationListener() { - public void changed(LocationEvent event) { - busy = true; - if (event.top) - location.setText(event.location); - } - public void changing(LocationEvent event) { - } - }); - browser.addProgressListener(new ProgressListener() { - public void changed(ProgressEvent event) { - if (event.total == 0) - return; - int ratio = event.current * 100 / event.total; - progressBar.setSelection(ratio); - busy = event.current != event.total; - if (!busy) { - index = 0; - canvas.redraw(); - } - } - public void completed(ProgressEvent event) { - itemBack.setEnabled(browser.isBackEnabled()); - itemForward.setEnabled(browser.isForwardEnabled()); - progressBar.setSelection(0); - busy = false; - index = 0; - canvas.redraw(); - } - }); - browser.addStatusTextListener(new StatusTextListener() { - public void changed(StatusTextEvent event) { - status.setText(event.text); - } - }); - if (parent instanceof Shell) { - final Shell shell = (Shell) parent; - browser.addTitleListener(new TitleListener() { - public void changed(TitleEvent event) { - shell.setText(event.title + " - " - + getResourceString("window.title")); - } - }); - } - itemBack.addListener(SWT.Selection, listener); - itemForward.addListener(SWT.Selection, listener); - itemStop.addListener(SWT.Selection, listener); - itemRefresh.addListener(SWT.Selection, listener); - itemGo.addListener(SWT.Selection, listener); - location.addListener(SWT.DefaultSelection, new Listener() { - public void handleEvent(Event e) { - browser.setUrl(location.getText()); - } - }); - initialize(display, browser); - browser.setUrl(getResourceString("Startup")); - } - } - /** - * Gets a string from the resource bundle. We don't want to crash because of - * a missing String. Returns the key if not found. - */ - static String getResourceString(String key) { - try { - return resourceBundle.getString(key); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; - } - } - /** - * Gets a string from the resource bundle and binds it with the given - * arguments. If the key is not found, return the key. - */ - static String getResourceString(String key, Object[] args) { - try { - return MessageFormat.format(getResourceString(key), args); - } catch (MissingResourceException e) { - return key; - } catch (NullPointerException e) { - return "!" + key + "!"; - } - } - static void initialize(final Display display, Browser browser) { - browser.addOpenWindowListener(new OpenWindowListener() { - public void open(WindowEvent event) { - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - Browser browser = new Browser(shell, SWT.NONE); - initialize(display, browser); - event.browser = browser; - } - }); - browser.addVisibilityWindowListener(new VisibilityWindowListener() { - public void hide(WindowEvent event) { - } - public void show(WindowEvent event) { - Browser browser = (Browser) event.widget; - Shell shell = browser.getShell(); - if (event.location != null) - shell.setLocation(event.location); - if (event.size != null) { - Point size = event.size; - shell.setSize(shell.computeSize(size.x, size.y)); - } - shell.open(); - } - }); - browser.addCloseWindowListener(new CloseWindowListener() { - public void close(WindowEvent event) { - Browser browser = (Browser) event.widget; - Shell shell = browser.getShell(); - shell.close(); - } - }); - } - /** - * Disposes of all resources associated with a particular instance of the - * BrowserExample. - */ - public void dispose() { - freeResources(); - } - /** - * Frees the resources - */ - void freeResources() { - if (images != null) { - for (int i = 0; i < images.length; ++i) { - final Image image = images[i]; - if (image != null) - image.dispose(); - } - images = null; - } - } - /** - * Grabs input focus. - */ - public void setFocus() { - location.setFocus(); - } - /** - * Loads the resources - */ - void initResources() { - final Class clazz = this.getClass(); - if (resourceBundle != null) { - try { - if (images == null) { - images = new Image[imageLocations.length]; - for (int i = 0; i < imageLocations.length; ++i) { - ImageData source = new ImageData(clazz - .getResourceAsStream(imageLocations[i])); - ImageData mask = source.getTransparencyMask(); - images[i] = new Image(null, source, mask); - } - } - return; - } catch (Throwable t) { - } - } - String error = (resourceBundle != null) - ? getResourceString("error.CouldNotLoadResources") - : "Unable to load resources"; - freeResources(); - throw new RuntimeException(error); - } - public static void main(String[] args) { - Display display = new Display(); - Shell shell = new Shell(display); - shell.setLayout(new FillLayout()); - shell.setText(getResourceString("window.title")); - PHPBrowser instance = new PHPBrowser(shell); - Image icon = new Image(display, PHPBrowser.class - .getResourceAsStream(iconLocation)); - shell.setImage(icon); - shell.open(); - while (!shell.isDisposed()) { - if (!display.readAndDispatch()) - display.sleep(); - } - icon.dispose(); - instance.dispose(); - display.dispose(); - } -} \ No newline at end of file diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties deleted file mode 100644 index e3daf7c..0000000 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/browser.properties +++ /dev/null @@ -1,20 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -error.CouldNotLoadResources = Unable to load resources -window.title = PHP Browser - -Back = Back -BrowserNotCreated = Error - The Browser widget could not be instantiated. Please check the Browser widget is supported on this platform. Supported platforms and software requirements for the Browser widget are listed on the SWT FAQ web page. -Forward = Forward -Stop = Stop -Refresh = Refresh -Go = Go -Startup = http://www.phpeclipse.de diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/document.gif b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/document.gif deleted file mode 100644 index 895e22110d6812e43710cd8a1e6b91179f809655..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmZ?wbhEHb6krfwxXQp_Z$IBYe!hMEeyggvcC~Zu=kK@Qzu$g7P^7+o|Ni+vcD#Lj zef<9W`|J0|&);9)HZQe)K2TLWSP4*Je0)4mNB#Z#^Xuz@f*?)z@9$r`EPCt4zW={J z{J%f{{{Hz53=IGO|37fx!2J318yXsbdVpL8Y5>KbEQ|~c8Vouh!$5vwV4LYMB_Kmf zs{63YDHbWqxyvR8MO4|%yrifesG(wZeR9MKj|w|p)`baAJw#^&vIXdBElkK zjFYEIGqbWWiS1F}A~jVbHkMh5aSNl2%IQc}=JOX$CS7)tkp{YtQ7ZWEJts#7YXJF9 BcIW^A diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse01.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse01.bmp deleted file mode 100644 index 43116e6d8e617364bce4e9a6ffb8c674221182ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 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 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse04.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse04.bmp deleted file mode 100644 index 2140654bb2b78c6d3125a39186371bab224cc707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 zcmeI0>2n)r9mn_9u2!r2v}`$c6x*>A$9CgfB~D6?Isv!gMdLJ09UBT^Xs4xt@FFQM zI#UK{DYP&{2MW`anZ!L3nhaBhmML**E}vTMt;>m%Cgu1i_^#GfOb%vh%dhY=j~+i- zt)Bhp`~0rQU+!C%B+6|a#umIfW?v)`FJC9{`FXGNaxN^5OA0J0u%y7f6`%;>wtnw> zKmUXz2&aF3p^ATRgQ>iA^Sm=>Y1*0iBx&}!6h)8#0#$jOJDI&>{(mX}_nNp^wt|Fv z&=`gx%On&+Q zUv)^Jh9ih1ib2T>7>BA%LU07h+DJAhI>2!Af}ec%1u8ro!-Tv(JkIA9+nSoYR=02K z*^*AxyGTl+7=a)>BrUPrEEUXYaoSuSkBhI3#T)BV^)<=9-d*RPM=ev`uV}vh3hD3s4 zVb@iQkj_Hz5%A!bay-eqX}6#E1q6RnYQ z#%M=~kixW=0nMWD*!l>R;9)(035mg`Wh)-F%l|ZP{OQ-H zw>R8hPbGYaPm9LGlAOqhUY9rOjU+=g?JcX1Jo9~JB5NrocvMx*YKp1r)8qM1FHP^g zuWx-#r$it~R!<*0*3Oy`O)wngk~k^g4%CK|>DuL6H*I*Ggl# zo1<4>{>}@V>eki>VGe#!t^JzAV{aDg228{oNk!{crQ7!IdF0f|cP-rn4@U4z%2U(D z;?>FGXJa!TzIL{!VMEd#5g3H+^3PhZo6TlMJ0+1Wl9ODXuoO-N6Y0A2hRzL#pL+K4 z-!G}M0vN5_z*8y|u1pmEHTmhp+n@AxJP3RC!0)TggUAC<_wrKI7fptfYg*RyKG6Hp zk6yfzn+DHxq2z3qZW-{eo9eZh^M&FE>fVie;;x`q5Ua&w*9;`dQVcqHf}TKaG+7s` zUDwh5#K1R3K0H@4i@KsInQW<4$|y4YJ)6ngP-dWy^?v4|&fW%pQsj7426l3-QbRy? zF`Pj2*soN)Zf*O0JGbt5<;7oQMyFuLuxCxxP1CfU9Y&<8*X1j)XXvwg^>)~gi(;z9 zgWrT~j+y}@%mB)#VznE))(`A^{Null*fy+a#azL%EJaa_oT*wEOxW{{%U9GhW80g1 z;9p2C3+KT$p@Byf1i+vM3;P0zaI`VGY<)-fu_H%wc($rzr=Sd)T;|D|wnFfC_}AH= zzjc4AyHdic7R&<{6q`K9VkIPKuiy@O{g9|<{g<9Qa`eKv^Uz1j zss$?#&q8E2^A_w!HnN7MeWqPEK9C1D_qPXHA`B`wa^XCH!7hmc@8(!kJ19-#fpEvl zRZky!>W{;xkRZ@u%rGGs4|w3|kVvz0yf!mcI{DM%JC|>6mC}B~ZRhtdt`GL8;*OYu z2WEppJs^7G!BET}YN~HMxbLyI{xGa(G)v2AvJOkmPRSU-g9b1V8sn-ylKEc$lbwN; z4X%WUl3>C1Y+Eu#fyc}8b-_qOG|{@OX=wk!Gw-}-lc*5FQWXOoZ}UbW50y}FWK3kz zYnSt{KmV%-nm5+-u?X#lDbG8fRwRNrf?)5_vPe8Bg<4bTC-x7XMyk?sIjcA}o-wVW zh7_vja(W(y1jTZSdDEErclP?}mrv~P`C7BT9+u-J1)j9S#r)!P*`Mr9!$cHCl*dq} zE8Q}*_t6u-dqW2bT;8dnTHvJWs;R=aWa8bYz0$!4Zx6AZ;^I2X!Pd^D|F z7e5*q{>>ZxTOVqVHKp9KT2D;G8U%^+#VpJ%^Q_qE|C-E&aqdI#iTZ-a4j+*(jTJOg z9-o9a0RytA&_-6|$qabZiOl<_-uv!1zumcfWplKl&JznzZdCGiXYAATEDx5OR|A-{ zaaaI9(8r5=c765K@Z0bmc+=SEcp+beG6+5wKmO#+-~Rs4z))9nYkeTn7_N!&{Mh0fCS;9>|?c~jD3Wj7Y{Jz?i%LE?BD?vI_!XFT|SRD;PoR` zM+2dd$LFRw56y*m(NA%xx&#XG+|GIq36!C@a-}gZo;$bKS?10WR*H@TJGxNrB4JPL zqn}d>I%DOV&f7a5@CC0_*1K&2^Kd#UW2f`w32wW^Gxs}H;<*=oCS&MZo$k| c3G+p66&^gNGRNet<8 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse05.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse05.bmp deleted file mode 100644 index 7e45a99b5bb75f8c620572adf51c29da00919515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 zcmeH~%WoS+9LHxLv+rHoaW;)?VA|IF3yU;_u*VPcarkoU%T7v>xrwDl?ya zf6v`_U?@h)V+eCEemm~`IMQ5RCwTv}#eQs|KGzkfD^ORUu0UOZ8Y;k*N992Fh`F+Y z8$9wnU%lerJp*9-<4{o)B}q~gg;HA0@GnANdD!MSQ4j=GmJLk{m}bz>by=c>6A9rl za{{g!P(g$e3CD>%PX$4vQphl)jp3c~?(JP2wyLUxlZl{kl1NHO{wY(D1vhXG@W{NN zOLEw>+HJc#Vow}C^v1-?F*9Tk*`x*~q9oATxDn$~1kse0NFdl5iR_AZpMGI%`TP0F z<0rra7=_3@5nwyNC1UzW9IuJgQq<;Ps4Eg3**!dQbGQea_po<13(gCRpPG;!EJy99vDlfQb5(1KH&M}{c{B; zm0$I~`s_=_BbQC)tGz1vsBj)CHE4QkDBK;59oWBr=A-i)3Ga4#BXQHQ^@vQA8t4OK zmF-2qVGh0P%;i1D%ex!xO&z9a z)qsapsGy>Pr&%{U8=LNH>v-wNbHDs_qmWz6y6L5bMRzF~)*2D-NQr*y!*~!`uve3+ zw+2E(z4yL-=4{qYdg)Z!Nv^rs3+K*joDOm1lK=RXpP9Xo1}PziNJEkmh4VzBPmeq{ zJ2O+vdC9~IO!nvI?@#Q1T;&w-P?Xe~@IaifqP2y>!+rg4PQIF0SSYM}Nq04u&0hI@ z&bDl1LIe4dAaid0sCY7*8T;c>2?LMJ^WR;~XS__p$)?;-r)Ny1gdw3HLybezxV1E_ z)j^CS;Sf$Iyu}G2Q36j(AoS>i4}JW>hpANuS8*-pEG{)#0aP^j7;*wgP+Yber`&p# zc??c~I65IQE7;l8yk}tW>}#*zod2?vNN~)sI$Lz-d59@YNKyA|++CFe{Z2a`8 zSN1)ymq`H<_)G-}JrXmPPdqpXCX+cH7aCO9jzv8lRgnS}9~w9s)?pY3D;?h%gy6f( z4}EY-8R<^)L7U3_1Robz$6G~`Fe92+x5lV6P4fc=d$RriF~{Go!eH22pN{^|ZP|$x eD%@0))Sjmr5~pLZxq7{RUss^6KwW|VQQ$ApLi_^& diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse06.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse06.bmp deleted file mode 100644 index aaa888a67fb71d589040e4957367bb65f2f0409e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 zcmeH}X;0%;6o$Poabi1m?2tHtEF@vc=4?R33W5q%o9i3n^Y}fB@77m6j~S01&I>r2lY?bu#_J4z|5qmmS(u)u z3QQH4Dlk=Gs=#MafMqz2Ca0&Y?6n9Pt49^LYC@ZoG!$jakLI^MpydZrz zu=sG{$*w{kkZ6%;EUKGE+=|s%(JLB z1|5PK%SA_`JAJ?-$(jj$GCA;6mg>!hKYZ3dIoNxBa#ShI31A6S!oScPw>&ILSP(=t zrd!TTCYzg|uPh^_H&;5xd!y^`FGd^d!5#EKCQqL5u)M%!- zGA4?UNTkSv7Y&e5!)S@Jq(rrtY1m0OUC5XGrP_9J`^#*t%98#b9K-EZspdx=%%`)PSmB^<B*F>U%S}b{rKjGzdqb7dKrxk`hpa+ zMY;nH1dfwhia%HzvnhiW2Y$)D#+T0Ra=5rmAUdIZ|FJ zSLoL2TW$aH@N4kA7!9=`c>)xW(^BUX9#xjzxSdM4IWOxkE{#^YXJ3root-XtDe%Y) zqo7UEq6vBrQ3jj8AYLq|NwTR$VNj{Lu(-eR?AxskP{mj#%5eymNVEThVZsDRcz0cm z#G^47^yzoH2gBjP*5;gRqp|{VgkY;dZ)1jJfF|;|grSVB8wtaNd2VvKTv=^*p0D+D z*pG26?!;#TFc|c{Ul1QKsvtrTBcj3FxK*5;Yb-5y8qK!vJB}ks63Lfv|4dOIj*~?Z zISfM;M-(OLIHh87p-UfeJU3C_W8o?cnqxtS?I z<@YtYKfis_)BFVw(Z|$v%QPWKOw%9~NMNMT-1m+-l80XYpr(+e0Dx=4@aX*LwePb% m`sqn7iFZ(i7(_7yi&PV&00YK2eQ?)wOcj_aFje4xs=$99#c@6W diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse07.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse07.bmp deleted file mode 100644 index 50e22225ba60d5cb541770ab1d44ce6e7d38587c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 zcmeH~X>-~}9L9xiBq4-A0&_+p1_9>E#5joo1CB|?#*WitCdstL?X>-*{a}4|7gWkL zeFNx4%Z`wCS7P_4=YQ;Kc0VX^v~l=#l_&$_4MItlu{)UZ!wOiaTkF;BF`I&YA4LRovvha&5Czk z59a;e=h@`v4-eI>!%Vi0{e$ZR9!-)h-N+`bV#Wzdm6x^pywmwIz54C(!>DtnaGcB& zpP_*t5sw+yGDZRt)e5CSt$x?<|2Uoea(nyj+nFAVDFSt667>=Bz=hJfagwrEJl*bc zI$6GZx4d7ZkfE4YlUR%4*gcNEHUdd6)L!7R5oK1YUMyeKgPTUPquorknLH+yj za5EpScOB8`gZu**g1yell}W4larowbJdA$5VET{{ljNkL7A%|CtJ}GIb>1wT=sa0Z zS1E^B?cn;b_)>X67eq@^yo~$0bvEgD$NerAcNr@wa+E~3){*Qt;5jMXAkM66Mbl~* zE3aGarthbdCfRAwutH>^tX=49$#u7WvY(;*RYA~12|T`&ZIvqhvWGL4*Kqc*vfF(B z`ftEMe4fXb4$D8bk*MbKjbho)xNcl0K0^y&);kThzOQfW?+WEHG`{h0fF~Z0Cv+YA z9|V`98I~Z?Z7R(;bdN!vr-iPo`{P)T#CSMSz#*%uuIu=kFfcp4 diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse09.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse09.bmp deleted file mode 100644 index 561f830ffce87e7d22e589208d9c86e059e074e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 zcmeH~`EMIV6vy|z?Deki+i`rwiDNg39XD~45Yod=V%jF5l$%0Q+Nzu_S0Nx3gs8+1 z9I7ZPmjEFU@Iw!1Q7aA=Pzh<8Y@GN=id*0ZB>oECdJ`vw@<2&Cm)SAVC9?q2$IZ#DifA zuF4XDV(_=oCGUK(xs`X+3fV`lPB&S8gw}AAQ8Wqzneb+(amMZ&?-41fIij96BfnLOPv3fBt;2 zSj-l3fHZM&ESH%q7V^_$V?gru;lsoG_C30H@9rHtw)gkl(4Fe(?cTU)Lu_qxAP_Jb zjRXOaUTFas#YIa?%h|JMf4OpHeC)!sG%=IQ6bo4p=iHey?;Lsk=|>;ib?4o??;g5+ z+s!xi4fJp6OK#YdXkFLP6b;se8ly40!%Z)TVQWM4AX-`Rr5G z1LM>tj8ZL&W-cQ@Isk>NX46lF{P@U^v(wqj*}@NBetr1Rp`EvE@9FI9Y;8+K6XCk3 z+g>MoW#(=oPh9K*Fj_tjb7pI-FKl!b9Tn1l!!*Q_L6g(o|t0 zlO4VI%AptU+J1BQ`VH5&bu>4|>uMSTHH|KJ2m}EPo2$WW59`bUL07F7oGP`A;fyqE zpcoy=h!yexjD}+$*uAHanfi6+r`$#9y(345ZoBiwEq(2Ywzcs@Bog!bA`mB5N1fFb z)|+d!#u`EISBoCC;No}(!+0iGzOd0A(3*X=stAzqS}zAAf=i`wa-5A}OeCqrNglx& z1fx-6A$Kf^O5q_(dx?Wj4MXI7bNbBw-Fy2trF+-+G&Z!>HzpdII{-#7y7kroZ}iX_ zr$+Aq5{7qxGAflF#32YBit-2svOwo>1YhQoSk{Ln$n?h4xwBtA|IBl@ZoR3uGZhQR zg0;~={aSx0?((e>Eq+FHG8#K4I%(b}8)uUdfsaLdpe5rh?9agwfx_k!x0vk>k=UAWG!$%fx`Kk zTC}sgg;E)Sgyi%TtA*)|5-dz26a!5ZL12>#`%6g3r5rlH;4cGgF%K?B5IDpwHjh8p z0Fk3JyE#xsWxyF3gP;Y-k{HR!Bq+ec(+i^myC!*wFT*VSvjna(4~QnGuo^ zNec=LhB2juN>)LpN9B(ousJ{FN@Cd(drF0XEiUFSrzCrx9UQa zm1E|r*UXb#b+fXIc^=sd)Zybxtr2)$&wxIquu&3$Jc;Caq>wMXQjuukdL?QleHJ@H z8I}haf>z66j4JDlGOz#4^B2Iyek!UjqJj@#Ql8o{!7+dVS>%8(*}unAQD;^kUR7XK PfmH=o6D!Kw diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse10.bmp b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/views/browser/eclipse10.bmp deleted file mode 100644 index 6ae79b2df84af0f368499f2ee56fe10ecf045b74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6966 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 -- 1.7.1