ogre.rb 0.1-i686-linux → 0.2-i686-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (368) hide show
  1. data/README +43 -5
  2. data/Rakefile +67 -165
  3. data/lib/application.rb +2 -1
  4. data/lib/application_frame_listener.rb +17 -17
  5. data/lib/ogre.so +0 -0
  6. data/lib/ruby_ois.so +0 -0
  7. data/ogre.rb +3 -0
  8. data/samples/Ogre.log +358 -257
  9. data/samples/cel_shading.rb +85 -0
  10. data/samples/grass.rb +1 -1
  11. data/samples/media/materials/programs/CelShading.cg +63 -0
  12. data/samples/media/materials/scripts/CelShading.material +68 -0
  13. data/samples/media/materials/textures/cel_shading_diffuse.png +0 -0
  14. data/samples/media/materials/textures/cel_shading_edge.png +0 -0
  15. data/samples/media/materials/textures/cel_shading_specular.png +0 -0
  16. data/samples/ogre.cfg +1 -2
  17. data/samples/plugins.cfg +3 -2
  18. data/test/ogre.cfg +10 -0
  19. data/{samples/navi → test}/plugins.cfg +2 -4
  20. data/test/test_helper.rb +67 -0
  21. data/test/unit/constants_test.rb +66 -0
  22. data/test/unit/frame_stats_proxy_test.rb +28 -0
  23. data/test/unit/math_test.rb +20 -0
  24. data/test/unit/mesh_test.rb +15 -0
  25. data/test/unit/methods_test.rb +98 -0
  26. data/test/unit/movable_object_test.rb +19 -0
  27. data/test/unit/name_value_pair_list_test.rb +12 -0
  28. data/test/unit/overlay_element_test.rb +20 -0
  29. data/test/unit/render_target_test.rb +11 -0
  30. data/test/unit/resource_test.rb +26 -0
  31. data/test/unit/scene_manager_test.rb +21 -0
  32. metadata +25 -356
  33. data/samples/navi/Media/NaviDemo.material +0 -60
  34. data/samples/navi/Media/OgreCore.zip +0 -0
  35. data/samples/navi/Media/cerulean.jpg +0 -0
  36. data/samples/navi/Media/clouds.jpg +0 -0
  37. data/samples/navi/Media/controlsNaviMask.png +0 -0
  38. data/samples/navi/Media/grass.jpg +0 -0
  39. data/samples/navi/Media/knot.mesh +0 -0
  40. data/samples/navi/Media/testNaviMask.png +0 -0
  41. data/samples/navi/NaviLocal/Navi.js +0 -136
  42. data/samples/navi/NaviLocal/buttonBg.jpg +0 -0
  43. data/samples/navi/NaviLocal/controls.html +0 -303
  44. data/samples/navi/NaviLocal/knobBg.jpg +0 -0
  45. data/samples/navi/NaviLocal/moo.dropdownmenu.js +0 -87
  46. data/samples/navi/NaviLocal/mootools.v1.1.js +0 -6964
  47. data/samples/navi/NaviLocal/naviLogo.html +0 -32
  48. data/samples/navi/NaviLocal/naviLogo.png +0 -0
  49. data/samples/navi/NaviLocal/pageBg.jpg +0 -0
  50. data/samples/navi/NaviLocal/sliderBg.jpg +0 -0
  51. data/samples/navi/NaviLocal/test.html +0 -5
  52. data/samples/navi/NaviLocal/welcome.html +0 -36
  53. data/samples/navi/NaviLocal/welcome.png +0 -0
  54. data/samples/navi/chrome/chromelist.txt +0 -597
  55. data/samples/navi/chrome/classic.jar +0 -0
  56. data/samples/navi/chrome/classic.manifest +0 -4
  57. data/samples/navi/chrome/comm.jar +0 -0
  58. data/samples/navi/chrome/comm.manifest +0 -2
  59. data/samples/navi/chrome/en-US.jar +0 -0
  60. data/samples/navi/chrome/en-US.manifest +0 -9
  61. data/samples/navi/chrome/toolkit.jar +0 -0
  62. data/samples/navi/chrome/toolkit.manifest +0 -6
  63. data/samples/navi/components/FeedProcessor.js +0 -1825
  64. data/samples/navi/components/alerts.xpt +0 -0
  65. data/samples/navi/components/appshell.xpt +0 -0
  66. data/samples/navi/components/appstartup.xpt +0 -0
  67. data/samples/navi/components/auth.dll +0 -0
  68. data/samples/navi/components/autocomplete.xpt +0 -0
  69. data/samples/navi/components/autoconfig.dll +0 -0
  70. data/samples/navi/components/autoconfig.xpt +0 -0
  71. data/samples/navi/components/caps.xpt +0 -0
  72. data/samples/navi/components/chardet.xpt +0 -0
  73. data/samples/navi/components/chrome.xpt +0 -0
  74. data/samples/navi/components/commandhandler.xpt +0 -0
  75. data/samples/navi/components/commandlines.xpt +0 -0
  76. data/samples/navi/components/composer.xpt +0 -0
  77. data/samples/navi/components/compreg.dat +0 -1474
  78. data/samples/navi/components/content_base.xpt +0 -0
  79. data/samples/navi/components/content_html.xpt +0 -0
  80. data/samples/navi/components/content_htmldoc.xpt +0 -0
  81. data/samples/navi/components/content_xmldoc.xpt +0 -0
  82. data/samples/navi/components/content_xslt.xpt +0 -0
  83. data/samples/navi/components/content_xtf.xpt +0 -0
  84. data/samples/navi/components/directory.xpt +0 -0
  85. data/samples/navi/components/docshell_base.xpt +0 -0
  86. data/samples/navi/components/dom.xpt +0 -0
  87. data/samples/navi/components/dom_base.xpt +0 -0
  88. data/samples/navi/components/dom_canvas.xpt +0 -0
  89. data/samples/navi/components/dom_core.xpt +0 -0
  90. data/samples/navi/components/dom_css.xpt +0 -0
  91. data/samples/navi/components/dom_events.xpt +0 -0
  92. data/samples/navi/components/dom_html.xpt +0 -0
  93. data/samples/navi/components/dom_loadsave.xpt +0 -0
  94. data/samples/navi/components/dom_range.xpt +0 -0
  95. data/samples/navi/components/dom_sidebar.xpt +0 -0
  96. data/samples/navi/components/dom_storage.xpt +0 -0
  97. data/samples/navi/components/dom_stylesheets.xpt +0 -0
  98. data/samples/navi/components/dom_svg.xpt +0 -0
  99. data/samples/navi/components/dom_traversal.xpt +0 -0
  100. data/samples/navi/components/dom_views.xpt +0 -0
  101. data/samples/navi/components/dom_xbl.xpt +0 -0
  102. data/samples/navi/components/dom_xpath.xpt +0 -0
  103. data/samples/navi/components/dom_xul.xpt +0 -0
  104. data/samples/navi/components/downloads.xpt +0 -0
  105. data/samples/navi/components/editor.xpt +0 -0
  106. data/samples/navi/components/embed_base.xpt +0 -0
  107. data/samples/navi/components/extensions.xpt +0 -0
  108. data/samples/navi/components/exthandler.xpt +0 -0
  109. data/samples/navi/components/fastfind.xpt +0 -0
  110. data/samples/navi/components/feeds.xpt +0 -0
  111. data/samples/navi/components/find.xpt +0 -0
  112. data/samples/navi/components/gfx.xpt +0 -0
  113. data/samples/navi/components/gksvgrenderer.xpt +0 -0
  114. data/samples/navi/components/history.xpt +0 -0
  115. data/samples/navi/components/htmlparser.xpt +0 -0
  116. data/samples/navi/components/imglib2.xpt +0 -0
  117. data/samples/navi/components/inspector.xpt +0 -0
  118. data/samples/navi/components/intl.xpt +0 -0
  119. data/samples/navi/components/intlcmpt.xpt +0 -0
  120. data/samples/navi/components/jar.xpt +0 -0
  121. data/samples/navi/components/jsconsole-clhandler.js +0 -170
  122. data/samples/navi/components/jsconsole.xpt +0 -0
  123. data/samples/navi/components/jsdservice.xpt +0 -0
  124. data/samples/navi/components/layout_base.xpt +0 -0
  125. data/samples/navi/components/layout_printing.xpt +0 -0
  126. data/samples/navi/components/layout_xul.xpt +0 -0
  127. data/samples/navi/components/layout_xul_tree.xpt +0 -0
  128. data/samples/navi/components/locale.xpt +0 -0
  129. data/samples/navi/components/lwbrk.xpt +0 -0
  130. data/samples/navi/components/mimetype.xpt +0 -0
  131. data/samples/navi/components/mozbrwsr.xpt +0 -0
  132. data/samples/navi/components/mozfind.xpt +0 -0
  133. data/samples/navi/components/necko.xpt +0 -0
  134. data/samples/navi/components/necko_about.xpt +0 -0
  135. data/samples/navi/components/necko_cache.xpt +0 -0
  136. data/samples/navi/components/necko_cookie.xpt +0 -0
  137. data/samples/navi/components/necko_data.xpt +0 -0
  138. data/samples/navi/components/necko_dns.xpt +0 -0
  139. data/samples/navi/components/necko_file.xpt +0 -0
  140. data/samples/navi/components/necko_ftp.xpt +0 -0
  141. data/samples/navi/components/necko_http.xpt +0 -0
  142. data/samples/navi/components/necko_res.xpt +0 -0
  143. data/samples/navi/components/necko_socket.xpt +0 -0
  144. data/samples/navi/components/necko_strconv.xpt +0 -0
  145. data/samples/navi/components/necko_viewsource.xpt +0 -0
  146. data/samples/navi/components/nsCloseAllWindows.js +0 -143
  147. data/samples/navi/components/nsDefaultCLH.js +0 -231
  148. data/samples/navi/components/nsDictionary.js +0 -148
  149. data/samples/navi/components/nsExtensionManager.js +0 -8497
  150. data/samples/navi/components/nsHelperAppDlg.js +0 -990
  151. data/samples/navi/components/nsInterfaceInfoToIDL.js +0 -590
  152. data/samples/navi/components/nsKillAll.js +0 -200
  153. data/samples/navi/components/nsPostUpdateWin.js +0 -711
  154. data/samples/navi/components/nsProgressDialog.js +0 -949
  155. data/samples/navi/components/nsProxyAutoConfig.js +0 -396
  156. data/samples/navi/components/nsResetPref.js +0 -175
  157. data/samples/navi/components/nsURLFormatter.js +0 -179
  158. data/samples/navi/components/nsUpdateService.js +0 -3074
  159. data/samples/navi/components/nsXULAppInstall.js +0 -301
  160. data/samples/navi/components/nsXmlRpcClient.js +0 -1038
  161. data/samples/navi/components/oji.xpt +0 -0
  162. data/samples/navi/components/passwordmgr.xpt +0 -0
  163. data/samples/navi/components/pipboot.xpt +0 -0
  164. data/samples/navi/components/pipnss.xpt +0 -0
  165. data/samples/navi/components/plugin.xpt +0 -0
  166. data/samples/navi/components/pref.xpt +0 -0
  167. data/samples/navi/components/prefetch.xpt +0 -0
  168. data/samples/navi/components/profile.xpt +0 -0
  169. data/samples/navi/components/progressDlg.xpt +0 -0
  170. data/samples/navi/components/proxyObject.xpt +0 -0
  171. data/samples/navi/components/rdf.xpt +0 -0
  172. data/samples/navi/components/satchel.xpt +0 -0
  173. data/samples/navi/components/saxparser.xpt +0 -0
  174. data/samples/navi/components/shistory.xpt +0 -0
  175. data/samples/navi/components/storage.xpt +0 -0
  176. data/samples/navi/components/toolkitprofile.xpt +0 -0
  177. data/samples/navi/components/transformiix.dll +0 -0
  178. data/samples/navi/components/txmgr.xpt +0 -0
  179. data/samples/navi/components/txtsvc.xpt +0 -0
  180. data/samples/navi/components/uconv.xpt +0 -0
  181. data/samples/navi/components/unicharutil.xpt +0 -0
  182. data/samples/navi/components/universalchardet.dll +0 -0
  183. data/samples/navi/components/update.xpt +0 -0
  184. data/samples/navi/components/uriloader.xpt +0 -0
  185. data/samples/navi/components/urlformatter.xpt +0 -0
  186. data/samples/navi/components/webBrowser_core.xpt +0 -0
  187. data/samples/navi/components/webbrowserpersist.xpt +0 -0
  188. data/samples/navi/components/webshell_idls.xpt +0 -0
  189. data/samples/navi/components/websrvcs.dll +0 -0
  190. data/samples/navi/components/websrvcs.xpt +0 -0
  191. data/samples/navi/components/widget.xpt +0 -0
  192. data/samples/navi/components/windowds.xpt +0 -0
  193. data/samples/navi/components/windowwatcher.xpt +0 -0
  194. data/samples/navi/components/xml-rpc.xpt +0 -0
  195. data/samples/navi/components/xmlextras.dll +0 -0
  196. data/samples/navi/components/xpcom_base.xpt +0 -0
  197. data/samples/navi/components/xpcom_components.xpt +0 -0
  198. data/samples/navi/components/xpcom_ds.xpt +0 -0
  199. data/samples/navi/components/xpcom_io.xpt +0 -0
  200. data/samples/navi/components/xpcom_obsolete.xpt +0 -0
  201. data/samples/navi/components/xpcom_thread.xpt +0 -0
  202. data/samples/navi/components/xpcom_xpti.xpt +0 -0
  203. data/samples/navi/components/xpconnect.xpt +0 -0
  204. data/samples/navi/components/xpinstall.xpt +0 -0
  205. data/samples/navi/components/xpti.dat +0 -1424
  206. data/samples/navi/components/xulapp.xpt +0 -0
  207. data/samples/navi/components/xulapp_setup.xpt +0 -0
  208. data/samples/navi/components/xuldoc.xpt +0 -0
  209. data/samples/navi/components/xulrunner.xpt +0 -0
  210. data/samples/navi/components/xultmpl.xpt +0 -0
  211. data/samples/navi/components/xulutil.dll +0 -0
  212. data/samples/navi/controlsNaviMask.png +0 -0
  213. data/samples/navi/greprefs/all.js +0 -1344
  214. data/samples/navi/greprefs/security-prefs.js +0 -69
  215. data/samples/navi/greprefs/xpinstall.js +0 -2
  216. data/samples/navi/navi_demo.rb +0 -207
  217. data/samples/navi/plugins/NPSWF32.dll +0 -0
  218. data/samples/navi/plugins/flashplayer.xpt +0 -0
  219. data/samples/navi/plugins/npnul32.dll +0 -0
  220. data/samples/navi/res/EditorOverride.css +0 -359
  221. data/samples/navi/res/Thumbs.db +0 -0
  222. data/samples/navi/res/arrow.gif +0 -0
  223. data/samples/navi/res/arrowd.gif +0 -0
  224. data/samples/navi/res/bloatcycle.html +0 -40
  225. data/samples/navi/res/broken-image.gif +0 -0
  226. data/samples/navi/res/charsetData.properties +0 -199
  227. data/samples/navi/res/charsetalias.properties +0 -517
  228. data/samples/navi/res/cmessage.txt +0 -1
  229. data/samples/navi/res/dtd/xhtml11.dtd +0 -300
  230. data/samples/navi/res/entityTables/html40Latin1.properties +0 -146
  231. data/samples/navi/res/entityTables/html40Special.properties +0 -69
  232. data/samples/navi/res/entityTables/html40Symbols.properties +0 -164
  233. data/samples/navi/res/entityTables/htmlEntityVersions.properties +0 -50
  234. data/samples/navi/res/entityTables/transliterate.properties +0 -2367
  235. data/samples/navi/res/fonts/fontEncoding.properties +0 -127
  236. data/samples/navi/res/fonts/fontNameMap.properties +0 -134
  237. data/samples/navi/res/forms.css +0 -531
  238. data/samples/navi/res/grabber.gif +0 -0
  239. data/samples/navi/res/hiddenWindow.html +0 -1
  240. data/samples/navi/res/html/Thumbs.db +0 -0
  241. data/samples/navi/res/html/gopher-audio.gif +0 -0
  242. data/samples/navi/res/html/gopher-binary.gif +0 -0
  243. data/samples/navi/res/html/gopher-find.gif +0 -0
  244. data/samples/navi/res/html/gopher-image.gif +0 -0
  245. data/samples/navi/res/html/gopher-menu.gif +0 -0
  246. data/samples/navi/res/html/gopher-movie.gif +0 -0
  247. data/samples/navi/res/html/gopher-sound.gif +0 -0
  248. data/samples/navi/res/html/gopher-telnet.gif +0 -0
  249. data/samples/navi/res/html/gopher-text.gif +0 -0
  250. data/samples/navi/res/html/gopher-unknown.gif +0 -0
  251. data/samples/navi/res/html.css +0 -478
  252. data/samples/navi/res/langGroups.properties +0 -236
  253. data/samples/navi/res/language.properties +0 -259
  254. data/samples/navi/res/loading-image.gif +0 -0
  255. data/samples/navi/res/quirk.css +0 -282
  256. data/samples/navi/res/samples/Anieyes.gif +0 -0
  257. data/samples/navi/res/samples/Thumbs.db +0 -0
  258. data/samples/navi/res/samples/aform.css +0 -69
  259. data/samples/navi/res/samples/beeptest.html +0 -18
  260. data/samples/navi/res/samples/bform.css +0 -45
  261. data/samples/navi/res/samples/bg.jpg +0 -0
  262. data/samples/navi/res/samples/cform.css +0 -40
  263. data/samples/navi/res/samples/checkboxTest.xul +0 -47
  264. data/samples/navi/res/samples/demoform.css +0 -97
  265. data/samples/navi/res/samples/find.html +0 -97
  266. data/samples/navi/res/samples/gear1.gif +0 -0
  267. data/samples/navi/res/samples/image_props.html +0 -58
  268. data/samples/navi/res/samples/mozform.css +0 -256
  269. data/samples/navi/res/samples/printsetup.html +0 -175
  270. data/samples/navi/res/samples/raptor.jpg +0 -0
  271. data/samples/navi/res/samples/rock_gra.gif +0 -0
  272. data/samples/navi/res/samples/scrollbarTest1.xul +0 -66
  273. data/samples/navi/res/samples/scrollbarTest2.xul +0 -19
  274. data/samples/navi/res/samples/sliderTest1.xul +0 -14
  275. data/samples/navi/res/samples/soundtest.html +0 -20
  276. data/samples/navi/res/samples/test.wav +0 -0
  277. data/samples/navi/res/samples/test0.html +0 -220
  278. data/samples/navi/res/samples/test1.html +0 -84
  279. data/samples/navi/res/samples/test10.html +0 -16
  280. data/samples/navi/res/samples/test11.html +0 -42
  281. data/samples/navi/res/samples/test12.html +0 -79
  282. data/samples/navi/res/samples/test13.html +0 -126
  283. data/samples/navi/res/samples/test14.html +0 -5
  284. data/samples/navi/res/samples/test15.html +0 -5
  285. data/samples/navi/res/samples/test16.html +0 -124
  286. data/samples/navi/res/samples/test2.html +0 -41
  287. data/samples/navi/res/samples/test3.html +0 -126
  288. data/samples/navi/res/samples/test4.html +0 -335
  289. data/samples/navi/res/samples/test5.html +0 -199
  290. data/samples/navi/res/samples/test6.html +0 -335
  291. data/samples/navi/res/samples/test7.html +0 -11
  292. data/samples/navi/res/samples/test8-1.html +0 -66
  293. data/samples/navi/res/samples/test8.html +0 -662
  294. data/samples/navi/res/samples/test8dom.html +0 -64
  295. data/samples/navi/res/samples/test8sca.html +0 -308
  296. data/samples/navi/res/samples/test8siz.html +0 -224
  297. data/samples/navi/res/samples/test8tab.html +0 -9
  298. data/samples/navi/res/samples/test9.html +0 -12
  299. data/samples/navi/res/samples/test9a.html +0 -39
  300. data/samples/navi/res/samples/test9b.html +0 -16
  301. data/samples/navi/res/samples/test_ed.html +0 -5
  302. data/samples/navi/res/samples/test_form.html +0 -34
  303. data/samples/navi/res/samples/test_gfx.html +0 -75
  304. data/samples/navi/res/samples/test_lbox.html +0 -100
  305. data/samples/navi/res/samples/test_pr.html +0 -87
  306. data/samples/navi/res/samples/test_weight.html +0 -45
  307. data/samples/navi/res/samples/toolbarTest1.xul +0 -51
  308. data/samples/navi/res/samples/treeTest1.css +0 -62
  309. data/samples/navi/res/samples/treeTest1.xul +0 -110
  310. data/samples/navi/res/samples/xulTest.css +0 -130
  311. data/samples/navi/res/svg.css +0 -64
  312. data/samples/navi/res/table-add-column-after-active.gif +0 -0
  313. data/samples/navi/res/table-add-column-after-hover.gif +0 -0
  314. data/samples/navi/res/table-add-column-after.gif +0 -0
  315. data/samples/navi/res/table-add-column-before-active.gif +0 -0
  316. data/samples/navi/res/table-add-column-before-hover.gif +0 -0
  317. data/samples/navi/res/table-add-column-before.gif +0 -0
  318. data/samples/navi/res/table-add-row-after-active.gif +0 -0
  319. data/samples/navi/res/table-add-row-after-hover.gif +0 -0
  320. data/samples/navi/res/table-add-row-after.gif +0 -0
  321. data/samples/navi/res/table-add-row-before-active.gif +0 -0
  322. data/samples/navi/res/table-add-row-before-hover.gif +0 -0
  323. data/samples/navi/res/table-add-row-before.gif +0 -0
  324. data/samples/navi/res/table-remove-column-active.gif +0 -0
  325. data/samples/navi/res/table-remove-column-hover.gif +0 -0
  326. data/samples/navi/res/table-remove-column.gif +0 -0
  327. data/samples/navi/res/table-remove-row-active.gif +0 -0
  328. data/samples/navi/res/table-remove-row-hover.gif +0 -0
  329. data/samples/navi/res/table-remove-row.gif +0 -0
  330. data/samples/navi/res/throbber/Thumbs.db +0 -0
  331. data/samples/navi/res/throbber/anim.gif +0 -0
  332. data/samples/navi/res/throbber/anims00.gif +0 -0
  333. data/samples/navi/res/throbber/anims01.gif +0 -0
  334. data/samples/navi/res/throbber/anims02.gif +0 -0
  335. data/samples/navi/res/throbber/anims03.gif +0 -0
  336. data/samples/navi/res/throbber/anims04.gif +0 -0
  337. data/samples/navi/res/throbber/anims05.gif +0 -0
  338. data/samples/navi/res/throbber/anims06.gif +0 -0
  339. data/samples/navi/res/throbber/anims07.gif +0 -0
  340. data/samples/navi/res/throbber/anims08.gif +0 -0
  341. data/samples/navi/res/throbber/anims09.gif +0 -0
  342. data/samples/navi/res/throbber/anims10.gif +0 -0
  343. data/samples/navi/res/throbber/anims11.gif +0 -0
  344. data/samples/navi/res/throbber/anims12.gif +0 -0
  345. data/samples/navi/res/throbber/anims13.gif +0 -0
  346. data/samples/navi/res/throbber/anims14.gif +0 -0
  347. data/samples/navi/res/throbber/anims15.gif +0 -0
  348. data/samples/navi/res/throbber/anims16.gif +0 -0
  349. data/samples/navi/res/throbber/anims17.gif +0 -0
  350. data/samples/navi/res/throbber/anims18.gif +0 -0
  351. data/samples/navi/res/throbber/anims19.gif +0 -0
  352. data/samples/navi/res/throbber/anims20.gif +0 -0
  353. data/samples/navi/res/throbber/anims21.gif +0 -0
  354. data/samples/navi/res/throbber/anims22.gif +0 -0
  355. data/samples/navi/res/throbber/anims23.gif +0 -0
  356. data/samples/navi/res/throbber/anims24.gif +0 -0
  357. data/samples/navi/res/throbber/anims25.gif +0 -0
  358. data/samples/navi/res/throbber/anims26.gif +0 -0
  359. data/samples/navi/res/throbber/anims27.gif +0 -0
  360. data/samples/navi/res/throbber/anims28.gif +0 -0
  361. data/samples/navi/res/throbber/anims29.gif +0 -0
  362. data/samples/navi/res/ua.css +0 -235
  363. data/samples/navi/res/viewer.properties +0 -1
  364. data/samples/navi/res/viewsource.css +0 -118
  365. data/samples/navi/res/wincharset.properties +0 -55
  366. data/samples/navi/resources.cfg +0 -14
  367. data/samples/navi/testNaviMask.png +0 -0
  368. data/samples/render_run_log.5796 +0 -891
@@ -1,990 +0,0 @@
1
- /*
2
- //@line 42 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
3
- */
4
-
5
- /* This file implements the nsIHelperAppLauncherDialog interface.
6
- *
7
- * The implementation consists of a JavaScript "class" named nsUnknownContentTypeDialog,
8
- * comprised of:
9
- * - a JS constructor function
10
- * - a prototype providing all the interface methods and implementation stuff
11
- *
12
- * In addition, this file implements an nsIModule object that registers the
13
- * nsUnknownContentTypeDialog component.
14
- */
15
-
16
-
17
- /* ctor
18
- */
19
- function nsUnknownContentTypeDialog() {
20
- // Initialize data properties.
21
- this.mLauncher = null;
22
- this.mContext = null;
23
- this.mSourcePath = null;
24
- this.chosenApp = null;
25
- this.givenDefaultApp = false;
26
- this.updateSelf = true;
27
- this.mTitle = "";
28
- }
29
-
30
- nsUnknownContentTypeDialog.prototype = {
31
- nsIMIMEInfo : Components.interfaces.nsIMIMEInfo,
32
-
33
- // This "class" supports nsIHelperAppLauncherDialog, and nsISupports.
34
- QueryInterface: function (iid) {
35
- if (!iid.equals(Components.interfaces.nsIHelperAppLauncherDialog) &&
36
- !iid.equals(Components.interfaces.nsISupports)) {
37
- throw Components.results.NS_ERROR_NO_INTERFACE;
38
- }
39
- return this;
40
- },
41
-
42
- // ---------- nsIHelperAppLauncherDialog methods ----------
43
-
44
- // show: Open XUL dialog using window watcher. Since the dialog is not
45
- // modal, it needs to be a top level window and the way to open
46
- // one of those is via that route).
47
- show: function(aLauncher, aContext, aReason) {
48
- this.mLauncher = aLauncher;
49
- this.mContext = aContext;
50
- // Display the dialog using the Window Watcher interface.
51
-
52
- var ir = aContext.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
53
- var dwi = ir.getInterface(Components.interfaces.nsIDOMWindowInternal);
54
- var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
55
- .getService(Components.interfaces.nsIWindowWatcher);
56
- this.mDialog = ww.openWindow(dwi,
57
- "chrome://mozapps/content/downloads/unknownContentType.xul",
58
- null,
59
- "chrome,centerscreen,titlebar,dialog=yes,dependent",
60
- null);
61
- // Hook this object to the dialog.
62
- this.mDialog.dialog = this;
63
-
64
- // Hook up utility functions.
65
- this.getSpecialFolderKey = this.mDialog.getSpecialFolderKey;
66
-
67
- // Watch for error notifications.
68
- this.progressListener.helperAppDlg = this;
69
- this.mLauncher.setWebProgressListener(this.progressListener);
70
- },
71
-
72
- // promptForSaveToFile: Display file picker dialog and return selected file.
73
- // This is called by the External Helper App Service
74
- // after the ucth dialog calls |saveToDisk| with a null
75
- // target filename (no target, therefore user must pick).
76
- //
77
- // Alternatively, if the user has selected to have all
78
- // files download to a specific location, return that
79
- // location and don't ask via the dialog.
80
- //
81
- // Note - this function is called without a dialog, so it cannot access any part
82
- // of the dialog XUL as other functions on this object do.
83
- promptForSaveToFile: function(aLauncher, aContext, aDefaultFile, aSuggestedFileExtension) {
84
- var result = "";
85
-
86
- this.mLauncher = aLauncher;
87
-
88
- // If the user is always downloading to the same location, the default download
89
- // folder is stored in preferences. If a value is found stored, use that
90
- // automatically and don't ask via a dialog.
91
- var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
92
- var autodownload = prefs.getBoolPref("browser.download.useDownloadDir");
93
- if (autodownload) {
94
- function getSpecialFolderKey(aFolderType)
95
- {
96
- if (aFolderType == "Desktop")
97
- return "Desk";
98
-
99
- if (aFolderType != "Downloads")
100
- throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'";
101
-
102
- //@line 142 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
103
- return "Pers";
104
- //@line 150 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
105
- }
106
-
107
- function getDownloadsFolder(aFolder)
108
- {
109
- var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
110
-
111
- var dir = fileLocator.get(getSpecialFolderKey(aFolder), Components.interfaces.nsILocalFile);
112
-
113
- var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
114
- bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties");
115
-
116
- var description = bundle.GetStringFromName("myDownloads");
117
- if (aFolder != "Desktop")
118
- dir.append(description);
119
-
120
- return dir;
121
- }
122
-
123
- var defaultFolder = null;
124
- switch (prefs.getIntPref("browser.download.folderList")) {
125
- case 0:
126
- defaultFolder = getDownloadsFolder("Desktop");
127
- break;
128
- case 1:
129
- defaultFolder = getDownloadsFolder("Downloads");
130
- break;
131
- case 2:
132
- defaultFolder = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile);
133
- break;
134
- }
135
-
136
- result = this.validateLeafName(defaultFolder, aDefaultFile, aSuggestedFileExtension);
137
- }
138
-
139
- if (!result) {
140
- // Use file picker to show dialog.
141
- var nsIFilePicker = Components.interfaces.nsIFilePicker;
142
- var picker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
143
-
144
- var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService);
145
- bundle = bundle.createBundle("chrome://mozapps/locale/downloads/unknownContentType.properties");
146
-
147
- var windowTitle = bundle.GetStringFromName("saveDialogTitle");
148
- var parent = aContext.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowInternal);
149
- picker.init(parent, windowTitle, nsIFilePicker.modeSave);
150
- picker.defaultString = aDefaultFile;
151
-
152
- if (aSuggestedFileExtension) {
153
- // aSuggestedFileExtension includes the period, so strip it
154
- picker.defaultExtension = aSuggestedFileExtension.substring(1);
155
- }
156
- else {
157
- try {
158
- picker.defaultExtension = this.mLauncher.MIMEInfo.primaryExtension;
159
- }
160
- catch (ex) { }
161
- }
162
-
163
- var wildCardExtension = "*";
164
- if (aSuggestedFileExtension) {
165
- wildCardExtension += aSuggestedFileExtension;
166
- picker.appendFilter(this.mLauncher.MIMEInfo.description, wildCardExtension);
167
- }
168
-
169
- picker.appendFilters( nsIFilePicker.filterAll );
170
-
171
- // Pull in the user's preferences and get the default download directory.
172
- var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
173
- try {
174
- var startDir = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsILocalFile);
175
- if (startDir.exists()) {
176
- picker.displayDirectory = startDir;
177
- }
178
- }
179
- catch(exception) { }
180
-
181
- var dlgResult = picker.show();
182
-
183
- if (dlgResult == nsIFilePicker.returnCancel) {
184
- // null result means user cancelled.
185
- return null;
186
- }
187
-
188
-
189
- // Be sure to save the directory the user chose through the Save As...
190
- // dialog as the new browser.download.dir
191
- result = picker.file;
192
-
193
- if (result) {
194
- try {
195
- // Remove the file so that it's not there when we ensure non-existence later;
196
- // this is safe because for the file to exist, the user would have had to
197
- // confirm that he wanted the file overwritten.
198
- if (result.exists())
199
- result.remove(false);
200
- }
201
- catch (e) { }
202
- var newDir = result.parent;
203
- prefs.setComplexValue("browser.download.dir", Components.interfaces.nsILocalFile, newDir);
204
- result = this.validateLeafName(newDir, result.leafName, null);
205
- }
206
- }
207
- return result;
208
- },
209
-
210
- /**
211
- * Ensures that a local folder/file combination does not already exist in
212
- * the file system (or finds such a combination with a reasonably similar
213
- * leaf name), creates the corresponding file, and returns it.
214
- *
215
- * @param aLocalFile
216
- * the folder where the file resides
217
- * @param aLeafName
218
- * the string name of the file (may be empty if no name is known,
219
- * in which case a name will be chosen)
220
- * @param aFileExt
221
- * the extension of the file, if one is known; this will be ignored
222
- * if aLeafName is non-empty
223
- * @returns nsILocalFile
224
- * the created file
225
- */
226
- validateLeafName: function (aLocalFile, aLeafName, aFileExt)
227
- {
228
- if (!aLocalFile || !aLocalFile.exists())
229
- return null;
230
-
231
- // Remove any leading periods, since we don't want to save hidden files
232
- // automatically.
233
- aLeafName = aLeafName.replace(/^\.+/, "");
234
-
235
- if (aLeafName == "")
236
- aLeafName = "unnamed" + (aFileExt ? "." + aFileExt : "");
237
- aLocalFile.append(aLeafName);
238
-
239
- this.makeFileUnique(aLocalFile);
240
-
241
- if (aLocalFile.isExecutable() && !this.mLauncher.targetFile.isExecutable()) {
242
- var f = aLocalFile.clone();
243
- aLocalFile.leafName = aLocalFile.leafName + "." + this.mLauncher.MIMEInfo.primaryExtension;
244
-
245
- f.remove(false);
246
- this.makeFileUnique(aLocalFile);
247
- }
248
-
249
- return aLocalFile;
250
- },
251
-
252
- /**
253
- * Generates and returns a uniquely-named file from aLocalFile. If
254
- * aLocalFile does not exist, it will be the file returned; otherwise, a
255
- * file whose name is similar to that of aLocalFile will be returned.
256
- */
257
- makeFileUnique: function (aLocalFile)
258
- {
259
- try {
260
- // Note - this code is identical to that in
261
- // toolkit/content/contentAreaUtils.js.
262
- // If you are updating this code, update that code too! We can't share code
263
- // here since this is called in a js component.
264
- var collisionCount = 0;
265
- while (aLocalFile.exists()) {
266
- collisionCount++;
267
- if (collisionCount == 1) {
268
- // Append "(2)" before the last dot in (or at the end of) the filename
269
- // special case .ext.gz etc files so we don't wind up with .tar(2).gz
270
- if (aLocalFile.leafName.match(/\.[^\.]{1,3}\.(gz|bz2|Z)$/i)) {
271
- aLocalFile.leafName = aLocalFile.leafName.replace(/\.[^\.]{1,3}\.(gz|bz2|Z)$/i, "(2)$&");
272
- }
273
- else {
274
- aLocalFile.leafName = aLocalFile.leafName.replace(/(\.[^\.]*)?$/, "(2)$&");
275
- }
276
- }
277
- else {
278
- // replace the last (n) in the filename with (n+1)
279
- aLocalFile.leafName = aLocalFile.leafName.replace(/^(.*\()\d+\)/, "$1" + (collisionCount+1) + ")");
280
- }
281
- }
282
- aLocalFile.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600);
283
- }
284
- catch (e) {
285
- dump("*** exception in validateLeafName: " + e + "\n");
286
- if (aLocalFile.leafName == "" || aLocalFile.isDirectory()) {
287
- aLocalFile.append("unnamed");
288
- if (aLocalFile.exists())
289
- aLocalFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0600);
290
- }
291
- }
292
- },
293
-
294
- // ---------- implementation methods ----------
295
-
296
- // Web progress listener so we can detect errors while mLauncher is
297
- // streaming the data to a temporary file.
298
- progressListener: {
299
- // Implementation properties.
300
- helperAppDlg: null,
301
-
302
- // nsIWebProgressListener methods.
303
- // Look for error notifications and display alert to user.
304
- onStatusChange: function( aWebProgress, aRequest, aStatus, aMessage ) {
305
- if ( aStatus != Components.results.NS_OK ) {
306
- // Get prompt service.
307
- var prompter = Components.classes[ "@mozilla.org/embedcomp/prompt-service;1" ]
308
- .getService( Components.interfaces.nsIPromptService );
309
- // Display error alert (using text supplied by back-end).
310
- prompter.alert( this.dialog, this.helperAppDlg.mTitle, aMessage );
311
-
312
- // Close the dialog.
313
- this.helperAppDlg.onCancel();
314
- if ( this.helperAppDlg.mDialog ) {
315
- this.helperAppDlg.mDialog.close();
316
- }
317
- }
318
- },
319
-
320
- // Ignore onProgressChange, onStateChange, onLocationChange, and onSecurityChange notifications.
321
- onProgressChange: function( aWebProgress,
322
- aRequest,
323
- aCurSelfProgress,
324
- aMaxSelfProgress,
325
- aCurTotalProgress,
326
- aMaxTotalProgress ) {
327
- },
328
-
329
- onProgressChange64: function( aWebProgress,
330
- aRequest,
331
- aCurSelfProgress,
332
- aMaxSelfProgress,
333
- aCurTotalProgress,
334
- aMaxTotalProgress ) {
335
- },
336
-
337
-
338
-
339
- onStateChange: function( aWebProgress, aRequest, aStateFlags, aStatus ) {
340
- },
341
-
342
- onLocationChange: function( aWebProgress, aRequest, aLocation ) {
343
- },
344
-
345
- onSecurityChange: function( aWebProgress, aRequest, state ) {
346
- }
347
- },
348
-
349
- // initDialog: Fill various dialog fields with initial content.
350
- initDialog : function() {
351
- // Put file name in window title.
352
- var suggestedFileName = this.mLauncher.suggestedFileName;
353
-
354
- // Some URIs do not implement nsIURL, so we can't just QI.
355
- var url = this.mLauncher.source;
356
- var fname = "";
357
- this.mSourcePath = url.prePath;
358
- try {
359
- url = url.QueryInterface( Components.interfaces.nsIURL );
360
- // A url, use file name from it.
361
- fname = url.fileName;
362
- this.mSourcePath += url.directory;
363
- } catch (ex) {
364
- // A generic uri, use path.
365
- fname = url.path;
366
- this.mSourcePath += url.path;
367
- }
368
-
369
- if (suggestedFileName)
370
- fname = suggestedFileName;
371
-
372
- var displayName = fname.replace(/ +/g, " ");
373
-
374
- this.mTitle = this.dialogElement("strings").getFormattedString("title", [displayName]);
375
- this.mDialog.document.title = this.mTitle;
376
-
377
- // Put content type, filename and location into intro.
378
- this.initIntro(url, fname, displayName);
379
-
380
- var iconString = "moz-icon://" + fname + "?size=16&contentType=" + this.mLauncher.MIMEInfo.MIMEType;
381
- this.dialogElement("contentTypeImage").setAttribute("src", iconString);
382
-
383
- // if always-save and is-executable and no-handler
384
- // then set up simple ui
385
- var mimeType = this.mLauncher.MIMEInfo.MIMEType;
386
- var shouldntRememberChoice = (mimeType == "application/octet-stream" ||
387
- mimeType == "application/x-msdownload" ||
388
- this.mLauncher.targetFile.isExecutable());
389
- if (shouldntRememberChoice && !this.openWithDefaultOK()) {
390
- // hide featured choice
391
- this.mDialog.document.getElementById("normalBox").collapsed = true;
392
- // show basic choice
393
- this.mDialog.document.getElementById("basicBox").collapsed = false;
394
- // change button labels
395
- this.mDialog.document.documentElement.getButton("accept").label = this.dialogElement("strings").getString("unknownAccept.label");
396
- this.mDialog.document.documentElement.getButton("cancel").label = this.dialogElement("strings").getString("unknownCancel.label");
397
- // hide other handler
398
- this.mDialog.document.getElementById("openHandler").collapsed = true;
399
- // set save as the selected option
400
- this.dialogElement("mode").selectedItem = this.dialogElement("save");
401
- }
402
- else {
403
- this.initAppAndSaveToDiskValues();
404
-
405
- // Initialize "always ask me" box. This should always be disabled
406
- // and set to true for the ambiguous type application/octet-stream.
407
- // We don't also check for application/x-msdownload here since we
408
- // want users to be able to autodownload .exe files.
409
- var rememberChoice = this.dialogElement("rememberChoice");
410
-
411
- //@line 476 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
412
- if (shouldntRememberChoice) {
413
- rememberChoice.checked = false;
414
- rememberChoice.disabled = true;
415
- }
416
- else {
417
- rememberChoice.checked = !this.mLauncher.MIMEInfo.alwaysAskBeforeHandling;
418
- }
419
- this.toggleRememberChoice(rememberChoice);
420
-
421
- // XXXben - menulist won't init properly, hack.
422
- var openHandler = this.dialogElement("openHandler");
423
- openHandler.parentNode.removeChild(openHandler);
424
- var openHandlerBox = this.dialogElement("openHandlerBox");
425
- openHandlerBox.appendChild(openHandler);
426
- }
427
-
428
- this.mDialog.setTimeout("dialog.postShowCallback()", 0);
429
-
430
- this.mDialog.document.documentElement.getButton("accept").disabled = true;
431
- const nsITimer = Components.interfaces.nsITimer;
432
- this._timer = Components.classes["@mozilla.org/timer;1"]
433
- .createInstance(nsITimer);
434
- this._timer.initWithCallback(this, 250, nsITimer.TYPE_ONE_SHOT);
435
- },
436
-
437
- _timer: null,
438
- notify: function (aTimer) {
439
- try { // The user may have already canceled the dialog.
440
- if (!this._blurred)
441
- this.mDialog.document.documentElement.getButton('accept').disabled = false;
442
- } catch (ex) {}
443
- this._delayExpired = true;
444
- this._timer = null; // the timer won't release us, so we have to release it
445
- },
446
-
447
- postShowCallback: function () {
448
- this.mDialog.sizeToContent();
449
-
450
- // Set initial focus
451
- this.dialogElement("mode").focus();
452
- },
453
-
454
- // initIntro:
455
- initIntro: function(url, filename, displayname) {
456
- this.dialogElement( "location" ).value = displayname;
457
- this.dialogElement( "location" ).setAttribute("realname", filename);
458
- this.dialogElement( "location" ).setAttribute("tooltiptext", displayname);
459
-
460
- // if mSourcePath is a local file, then let's use the pretty path name instead of an ugly
461
- // url...
462
- var pathString = this.mSourcePath;
463
- try
464
- {
465
- var fileURL = url.QueryInterface(Components.interfaces.nsIFileURL);
466
- if (fileURL)
467
- {
468
- var fileObject = fileURL.file;
469
- if (fileObject)
470
- {
471
- var parentObject = fileObject.parent;
472
- if (parentObject)
473
- {
474
- pathString = parentObject.path;
475
- }
476
- }
477
- }
478
- } catch(ex) {}
479
-
480
- if (pathString == this.mSourcePath)
481
- {
482
- // wasn't a fileURL
483
- var tmpurl = url.clone(); // don't want to change the real url
484
- try {
485
- tmpurl.userPass = "";
486
- } catch (ex) {}
487
- pathString = tmpurl.prePath;
488
- }
489
-
490
- // Set the location text, which is separate from the intro text so it can be cropped
491
- var location = this.dialogElement( "source" );
492
- location.value = pathString;
493
- location.setAttribute("tooltiptext", this.mSourcePath);
494
-
495
- // Show the type of file.
496
- var type = this.dialogElement("type");
497
- var mimeInfo = this.mLauncher.MIMEInfo;
498
-
499
- // 1. Try to use the pretty description of the type, if one is available.
500
- var typeString = mimeInfo.description;
501
-
502
- if (typeString == "") {
503
- // 2. If there is none, use the extension to identify the file, e.g. "ZIP file"
504
- var primaryExtension = "";
505
- try {
506
- primaryExtension = mimeInfo.primaryExtension;
507
- }
508
- catch (ex) {
509
- }
510
- if (primaryExtension != "")
511
- typeString = primaryExtension.toUpperCase() + " file";
512
- // 3. If we can't even do that, just give up and show the MIME type.
513
- else
514
- typeString = mimeInfo.MIMEType;
515
- }
516
-
517
- type.value = typeString;
518
- },
519
-
520
- _blurred: false,
521
- _delayExpired: false,
522
- onBlur: function(aEvent) {
523
- if (aEvent.target != this.mDialog.document)
524
- return;
525
- this._blurred = true;
526
- this.mDialog.document.documentElement.getButton("accept").disabled = true;
527
- },
528
-
529
- onFocus: function(aEvent) {
530
- if (aEvent.target != this.mDialog.document)
531
- return;
532
- this._blurred = false;
533
- if (this._delayExpired) {
534
- var script = "document.documentElement.getButton('accept').disabled = false";
535
- this.mDialog.setTimeout(script, 250);
536
- }
537
- },
538
-
539
- // Returns true if opening the default application makes sense.
540
- openWithDefaultOK: function() {
541
- var result;
542
-
543
- // The checking is different on Windows...
544
- //@line 609 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
545
- // Windows presents some special cases.
546
- // We need to prevent use of "system default" when the file is
547
- // executable (so the user doesn't launch nasty programs downloaded
548
- // from the web), and, enable use of "system default" if it isn't
549
- // executable (because we will prompt the user for the default app
550
- // in that case).
551
-
552
- // Need to get temporary file and check for executable-ness.
553
- var tmpFile = this.mLauncher.targetFile;
554
-
555
- // Default is Ok if the file isn't executable (and vice-versa).
556
- return !tmpFile.isExecutable();
557
- //@line 627 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
558
- },
559
-
560
- // Set "default" application description field.
561
- initDefaultApp: function() {
562
- // Use description, if we can get one.
563
- var desc = this.mLauncher.MIMEInfo.defaultDescription;
564
- if (desc) {
565
- var defaultApp = this.dialogElement("strings").getFormattedString("defaultApp", [desc]);
566
- this.dialogElement("defaultHandler").label = defaultApp;
567
- }
568
- else {
569
- this.dialogElement("modeDeck").setAttribute("selectedIndex", "1");
570
- // Hide the default handler item too, in case the user picks a
571
- // custom handler at a later date which triggers the menulist to show.
572
- this.dialogElement("defaultHandler").hidden = true;
573
- }
574
- },
575
-
576
- // getPath:
577
- getPath: function (aFile) {
578
- //@line 650 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
579
- return aFile.path;
580
- //@line 652 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
581
- },
582
-
583
- // initAppAndSaveToDiskValues:
584
- initAppAndSaveToDiskValues: function() {
585
- var modeGroup = this.dialogElement("mode");
586
-
587
- // We don't let users open .exe files or random binary data directly
588
- // from the browser at the moment because of security concerns.
589
- var openWithDefaultOK = this.openWithDefaultOK();
590
- var mimeType = this.mLauncher.MIMEInfo.MIMEType;
591
- if (this.mLauncher.targetFile.isExecutable() || (
592
- (mimeType == "application/octet-stream" ||
593
- mimeType == "application/x-msdownload") &&
594
- !openWithDefaultOK)) {
595
- this.dialogElement("open").disabled = true;
596
- var openHandler = this.dialogElement("openHandler");
597
- openHandler.disabled = true;
598
- openHandler.selectedItem = null;
599
- modeGroup.selectedItem = this.dialogElement("save");
600
- return;
601
- }
602
-
603
- // Fill in helper app info, if there is any.
604
- this.chosenApp = this.mLauncher.MIMEInfo.preferredApplicationHandler;
605
- // Initialize "default application" field.
606
- this.initDefaultApp();
607
-
608
- var otherHandler = this.dialogElement("otherHandler");
609
-
610
- // Fill application name textbox.
611
- if (this.chosenApp && this.chosenApp.path) {
612
- otherHandler.setAttribute("path", this.getPath(this.chosenApp));
613
- otherHandler.label = this.chosenApp.leafName;
614
- otherHandler.hidden = false;
615
- }
616
-
617
- var useDefault = this.dialogElement("useSystemDefault");
618
- var openHandler = this.dialogElement("openHandler");
619
- openHandler.selectedIndex = 0;
620
-
621
- if (this.mLauncher.MIMEInfo.preferredAction == this.nsIMIMEInfo.useSystemDefault) {
622
- // Open (using system default).
623
- modeGroup.selectedItem = this.dialogElement("open");
624
- } else if (this.mLauncher.MIMEInfo.preferredAction == this.nsIMIMEInfo.useHelperApp) {
625
- // Open with given helper app.
626
- modeGroup.selectedItem = this.dialogElement("open");
627
- openHandler.selectedIndex = 1;
628
- } else {
629
- // Save to disk.
630
- modeGroup.selectedItem = this.dialogElement("save");
631
- }
632
-
633
- // If we don't have a "default app" then disable that choice.
634
- if (!openWithDefaultOK) {
635
- var useDefault = this.dialogElement("defaultHandler");
636
- var isSelected = useDefault.selected;
637
-
638
- // Disable that choice.
639
- useDefault.hidden = true;
640
- // If that's the default, then switch to "save to disk."
641
- if (isSelected) {
642
- openHandler.selectedIndex = 1;
643
- modeGroup.selectedItem = this.dialogElement("save");
644
- }
645
- }
646
-
647
- // otherHandler is always disabled on Mac
648
- //@line 723 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
649
- otherHandler.nextSibling.hidden = otherHandler.nextSibling.nextSibling.hidden = false;
650
- //@line 725 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
651
- this.updateOKButton();
652
- },
653
-
654
- // Returns the user-selected application
655
- helperAppChoice: function() {
656
- return this.chosenApp;
657
- },
658
-
659
- get saveToDisk() {
660
- return this.dialogElement("save").selected;
661
- },
662
-
663
- get useOtherHandler() {
664
- return this.dialogElement("open").selected && this.dialogElement("openHandler").selectedIndex == 1;
665
- },
666
-
667
- get useSystemDefault() {
668
- return this.dialogElement("open").selected && this.dialogElement("openHandler").selectedIndex == 0;
669
- },
670
-
671
- toggleRememberChoice: function (aCheckbox) {
672
- this.dialogElement("settingsChange").hidden = !aCheckbox.checked;
673
- this.mDialog.sizeToContent();
674
- },
675
-
676
- openHandlerCommand: function () {
677
- var openHandler = this.dialogElement("openHandler");
678
- if (openHandler.selectedItem.id == "choose")
679
- this.chooseApp();
680
- else
681
- openHandler.setAttribute("lastSelectedItemID", openHandler.selectedItem.id);
682
- },
683
-
684
- updateOKButton: function() {
685
- var ok = false;
686
- if (this.dialogElement("save").selected) {
687
- // This is always OK.
688
- ok = true;
689
- }
690
- else if (this.dialogElement("open").selected) {
691
- switch (this.dialogElement("openHandler").selectedIndex) {
692
- case 0:
693
- // No app need be specified in this case.
694
- ok = true;
695
- break;
696
- case 1:
697
- // only enable the OK button if we have a default app to use or if
698
- // the user chose an app....
699
- ok = this.chosenApp || /\S/.test(this.dialogElement("otherHandler").getAttribute("path"));
700
- break;
701
- }
702
- }
703
-
704
- // Enable Ok button if ok to press.
705
- this.mDialog.document.documentElement.getButton("accept").disabled = !ok;
706
- },
707
-
708
- // Returns true iff the user-specified helper app has been modified.
709
- appChanged: function() {
710
- return this.helperAppChoice() != this.mLauncher.MIMEInfo.preferredApplicationHandler;
711
- },
712
-
713
- updateMIMEInfo: function() {
714
- var needUpdate = false;
715
- // If current selection differs from what's in the mime info object,
716
- // then we need to update.
717
- if (this.saveToDisk) {
718
- needUpdate = this.mLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.saveToDisk;
719
- if (needUpdate)
720
- this.mLauncher.MIMEInfo.preferredAction = this.nsIMIMEInfo.saveToDisk;
721
- }
722
- else if (this.useSystemDefault) {
723
- needUpdate = this.mLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.useSystemDefault;
724
- if (needUpdate)
725
- this.mLauncher.MIMEInfo.preferredAction = this.nsIMIMEInfo.useSystemDefault;
726
- }
727
- else {
728
- // For "open with", we need to check both preferred action and whether the user chose
729
- // a new app.
730
- needUpdate = this.mLauncher.MIMEInfo.preferredAction != this.nsIMIMEInfo.useHelperApp || this.appChanged();
731
- if (needUpdate) {
732
- this.mLauncher.MIMEInfo.preferredAction = this.nsIMIMEInfo.useHelperApp;
733
- // App may have changed - Update application and description
734
- var app = this.helperAppChoice();
735
- this.mLauncher.MIMEInfo.preferredApplicationHandler = app;
736
- this.mLauncher.MIMEInfo.applicationDescription = "";
737
- }
738
- }
739
- // We will also need to update if the "always ask" flag has changed.
740
- needUpdate = needUpdate || this.mLauncher.MIMEInfo.alwaysAskBeforeHandling != (!this.dialogElement("rememberChoice").checked);
741
-
742
- // One last special case: If the input "always ask" flag was false, then we always
743
- // update. In that case we are displaying the helper app dialog for the first
744
- // time for this mime type and we need to store the user's action in the mimeTypes.rdf
745
- // data source (whether that action has changed or not; if it didn't change, then we need
746
- // to store the "always ask" flag so the helper app dialog will or won't display
747
- // next time, per the user's selection).
748
- needUpdate = needUpdate || !this.mLauncher.MIMEInfo.alwaysAskBeforeHandling;
749
-
750
- // Make sure mime info has updated setting for the "always ask" flag.
751
- this.mLauncher.MIMEInfo.alwaysAskBeforeHandling = !this.dialogElement("rememberChoice").checked;
752
-
753
- return needUpdate;
754
- },
755
-
756
- // See if the user changed things, and if so, update the
757
- // mimeTypes.rdf entry for this mime type.
758
- updateHelperAppPref: function() {
759
- var ha = new this.mDialog.HelperApps();
760
- ha.updateTypeInfo(this.mLauncher.MIMEInfo);
761
- ha.destroy();
762
- },
763
-
764
- // onOK:
765
- onOK: function() {
766
- // Verify typed app path, if necessary.
767
- if (this.useOtherHandler) {
768
- var helperApp = this.helperAppChoice();
769
- if (!helperApp || !helperApp.exists()) {
770
- // Show alert and try again.
771
- var bundle = this.dialogElement("strings");
772
- var msg = bundle.getFormattedString("badApp", [this.dialogElement("otherHandler").path]);
773
- var svc = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
774
- svc.alert(this.mDialog, bundle.getString("badApp.title"), msg);
775
-
776
- // Disable the OK button.
777
- this.mDialog.document.documentElement.getButton("accept").disabled = true;
778
- this.dialogElement("mode").focus();
779
-
780
- // Clear chosen application.
781
- this.chosenApp = null;
782
-
783
- // Leave dialog up.
784
- return false;
785
- }
786
- }
787
-
788
- // Remove our web progress listener (a progress dialog will be
789
- // taking over).
790
- this.mLauncher.setWebProgressListener(null);
791
-
792
- // saveToDisk and launchWithApplication can return errors in
793
- // certain circumstances (e.g. The user clicks cancel in the
794
- // "Save to Disk" dialog. In those cases, we don't want to
795
- // update the helper application preferences in the RDF file.
796
- try {
797
- var needUpdate = this.updateMIMEInfo();
798
-
799
- if (this.dialogElement("save").selected) {
800
- // If we're using a default download location, create a path
801
- // for the file to be saved to to pass to |saveToDisk| - otherwise
802
- // we must ask the user to pick a save name.
803
-
804
- //@line 892 "/c/mozilla/toolkit/mozapps/downloads/src/nsHelperAppDlg.js.in"
805
- this.mLauncher.saveToDisk(null, false);
806
- }
807
- else
808
- this.mLauncher.launchWithApplication(null, false);
809
-
810
- // Update user pref for this mime type (if necessary). We do not
811
- // store anything in the mime type preferences for the ambiguous
812
- // type application/octet-stream. We do NOT do this for
813
- // application/x-msdownload since we want users to be able to
814
- // autodownload these to disk.
815
- if (needUpdate && this.mLauncher.MIMEInfo.MIMEType != "application/octet-stream")
816
- this.updateHelperAppPref();
817
- } catch(e) { }
818
-
819
- // Unhook dialog from this object.
820
- this.mDialog.dialog = null;
821
-
822
- // Close up dialog by returning true.
823
- return true;
824
- },
825
-
826
- // onCancel:
827
- onCancel: function() {
828
- // Remove our web progress listener.
829
- this.mLauncher.setWebProgressListener(null);
830
-
831
- // Cancel app launcher.
832
- try {
833
- const NS_BINDING_ABORTED = 0x804b0002;
834
- this.mLauncher.cancel(NS_BINDING_ABORTED);
835
- } catch(exception) {
836
- }
837
-
838
- // Unhook dialog from this object.
839
- this.mDialog.dialog = null;
840
-
841
- // Close up dialog by returning true.
842
- return true;
843
- },
844
-
845
- // dialogElement: Convenience.
846
- dialogElement: function(id) {
847
- return this.mDialog.document.getElementById(id);
848
- },
849
-
850
- // chooseApp: Open file picker and prompt user for application.
851
- chooseApp: function() {
852
- var nsIFilePicker = Components.interfaces.nsIFilePicker;
853
- var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
854
- fp.init(this.mDialog,
855
- this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
856
- nsIFilePicker.modeOpen);
857
-
858
- fp.appendFilters(nsIFilePicker.filterApps);
859
-
860
- if (fp.show() == nsIFilePicker.returnOK && fp.file) {
861
- // Show the "handler" menulist since we have a (user-specified)
862
- // application now.
863
- this.dialogElement("modeDeck").setAttribute("selectedIndex", "0");
864
-
865
- // Remember the file they chose to run.
866
- this.chosenApp = fp.file;
867
- // Update dialog.
868
- var otherHandler = this.dialogElement("otherHandler");
869
- otherHandler.removeAttribute("hidden");
870
- otherHandler.setAttribute("path", this.getPath(this.chosenApp));
871
- otherHandler.label = this.chosenApp.leafName;
872
- this.dialogElement("openHandler").selectedIndex = 1;
873
- this.dialogElement("openHandler").setAttribute("lastSelectedItemID", "otherHandler");
874
-
875
- this.dialogElement("mode").selectedItem = this.dialogElement("open");
876
- }
877
- else {
878
- var openHandler = this.dialogElement("openHandler");
879
- var lastSelectedID = openHandler.getAttribute("lastSelectedItemID");
880
- if (!lastSelectedID)
881
- lastSelectedID = "defaultHandler";
882
- openHandler.selectedItem = this.dialogElement(lastSelectedID);
883
- }
884
- },
885
-
886
- // Turn this on to get debugging messages.
887
- debug: false,
888
-
889
- // Dump text (if debug is on).
890
- dump: function( text ) {
891
- if ( this.debug ) {
892
- dump( text );
893
- }
894
- },
895
-
896
- // dumpInfo:
897
- doDebug: function() {
898
- const nsIProgressDialog = Components.interfaces.nsIProgressDialog;
899
- // Open new progress dialog.
900
- var progress = Components.classes[ "@mozilla.org/progressdialog;1" ]
901
- .createInstance( nsIProgressDialog );
902
- // Show it.
903
- progress.open( this.mDialog );
904
- },
905
-
906
- // dumpObj:
907
- dumpObj: function( spec ) {
908
- var val = "<undefined>";
909
- try {
910
- val = eval( "this."+spec ).toString();
911
- } catch( exception ) {
912
- }
913
- this.dump( spec + "=" + val + "\n" );
914
- },
915
-
916
- // dumpObjectProperties
917
- dumpObjectProperties: function( desc, obj ) {
918
- for( prop in obj ) {
919
- this.dump( desc + "." + prop + "=" );
920
- var val = "<undefined>";
921
- try {
922
- val = obj[ prop ];
923
- } catch ( exception ) {
924
- }
925
- this.dump( val + "\n" );
926
- }
927
- }
928
- }
929
-
930
- // This Component's module implementation. All the code below is used to get this
931
- // component registered and accessible via XPCOM.
932
- var module = {
933
- firstTime: true,
934
-
935
- // registerSelf: Register this component.
936
- registerSelf: function (compMgr, fileSpec, location, type) {
937
- if (this.firstTime) {
938
- this.firstTime = false;
939
- throw Components.results.NS_ERROR_FACTORY_REGISTER_AGAIN;
940
- }
941
- compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
942
-
943
- compMgr.registerFactoryLocation( this.cid,
944
- "Unknown Content Type Dialog",
945
- this.contractId,
946
- fileSpec,
947
- location,
948
- type );
949
- },
950
-
951
- // getClassObject: Return this component's factory object.
952
- getClassObject: function (compMgr, cid, iid) {
953
- if (!cid.equals(this.cid)) {
954
- throw Components.results.NS_ERROR_NO_INTERFACE;
955
- }
956
-
957
- if (!iid.equals(Components.interfaces.nsIFactory)) {
958
- throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
959
- }
960
-
961
- return this.factory;
962
- },
963
-
964
- /* CID for this class */
965
- cid: Components.ID("{F68578EB-6EC2-4169-AE19-8C6243F0ABE1}"),
966
-
967
- /* Contract ID for this class */
968
- contractId: "@mozilla.org/helperapplauncherdialog;1",
969
-
970
- /* factory object */
971
- factory: {
972
- // createInstance: Return a new nsProgressDialog object.
973
- createInstance: function (outer, iid) {
974
- if (outer != null)
975
- throw Components.results.NS_ERROR_NO_AGGREGATION;
976
-
977
- return (new nsUnknownContentTypeDialog()).QueryInterface(iid);
978
- }
979
- },
980
-
981
- // canUnload: n/a (returns true)
982
- canUnload: function(compMgr) {
983
- return true;
984
- }
985
- };
986
-
987
- // NSGetModule: Return the nsIModule object.
988
- function NSGetModule(compMgr, fileSpec) {
989
- return module;
990
- }