From a79ddf52a4fc390cd21b22fbb2525590cb7d663c Mon Sep 17 00:00:00 2001 From: Robert Kaiser Date: Sun, 16 Jan 2011 18:36:44 +0100 Subject: [PATCH 1/1] add item to new Firefox button menu, make Firefox and SeaMonkey open Mandelbrot in tabs, improve pref handling by centralising error handling and value adjustments, make syncProp checkbox work correctly --- extension/fxOverlay.xul | 9 +- extension/smOverlay.xul | 6 +- jar.mn | 2 +- .../mandelbrot/content/mandelbrot-tab.xul | 2 +- .../chrome/mandelbrot/content/mandelbrot.js | 223 +++++++++--------- .../chrome/mandelbrot/content/mandelbrot.xul | 2 +- .../mandelbrot/skin/classic/mandelbrot.css | 2 +- 7 files changed, 128 insertions(+), 118 deletions(-) diff --git a/extension/fxOverlay.xul b/extension/fxOverlay.xul index 4293022..53c56ef 100644 --- a/extension/fxOverlay.xul +++ b/extension/fxOverlay.xul @@ -45,7 +45,7 @@ + oncommand="gBrowser.addTab('about:mandelbrot');"/> @@ -54,5 +54,10 @@ command="Tools:Mandelbrot" insertafter="devToolsSeparator"/> - + + + diff --git a/extension/smOverlay.xul b/extension/smOverlay.xul index 573f671..e03c8e2 100644 --- a/extension/smOverlay.xul +++ b/extension/smOverlay.xul @@ -45,14 +45,14 @@ + oncommand="getBrowser().addTab('about:mandelbrot');"/> - + + insertafter="addonsmgr"/> diff --git a/jar.mn b/jar.mn index 69628f4..31d693c 100644 --- a/jar.mn +++ b/jar.mn @@ -9,7 +9,7 @@ mandelbrot.jar: % style about:mandelbrot chrome://mandelbrot/skin/mobileUI.css application={a23983c0-fd0e-11dc-95ff-0800200c9a66} % overlay chrome://browser/content/browser.xul chrome://mandelbrot/content/fxOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} % overlay chrome://browser/content/browser.xul chrome://mandelbrot/content/mobileOverlay.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66} -% overlay chrome://communicator/content/tasksOverlay.xul chrome://mandelbrot/content/smOverlay.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} +% overlay chrome://navigator/content/navigator.xul chrome://mandelbrot/content/smOverlay.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} % component {289dae5f-2a1d-4632-8df9-79c50147f91f} components/aboutMandelbrot.js % contract @mozilla.org/network/protocol/about;1?what=mandelbrot {289dae5f-2a1d-4632-8df9-79c50147f91f} content/mandelbrot/mandelbrot.js (xulapp/chrome/mandelbrot/content/mandelbrot.js) diff --git a/xulapp/chrome/mandelbrot/content/mandelbrot-tab.xul b/xulapp/chrome/mandelbrot/content/mandelbrot-tab.xul index b525e10..3b61bc6 100644 --- a/xulapp/chrome/mandelbrot/content/mandelbrot-tab.xul +++ b/xulapp/chrome/mandelbrot/content/mandelbrot-tab.xul @@ -198,8 +198,8 @@ - diff --git a/xulapp/chrome/mandelbrot/content/mandelbrot.js b/xulapp/chrome/mandelbrot/content/mandelbrot.js index 0a4a31a..c2bfba2 100644 --- a/xulapp/chrome/mandelbrot/content/mandelbrot.js +++ b/xulapp/chrome/mandelbrot/content/mandelbrot.js @@ -53,25 +53,99 @@ function Startup() { document.getElementById("statusLabel").value = gMbrotBundle.getString("statusEmpty"); } -function adjustCoordsAndDraw(aC_min, aC_max) { - let iWidth = 0; - try { - iWidth = gPref.getIntPref("mandelbrot.image.width"); - } - catch (e) { } - if ((iWidth < 10) || (iWidth > 5000)) { - iWidth = 300; - gPref.setIntPref("mandelbrot.image.width", iWidth); - } - let iHeight = 0; - try { - iHeight = gPref.getIntPref("mandelbrot.image.height"); - } - catch (e) { } - if ((iHeight < 10) || (iHeight > 5000)) { - iHeight = 300; - gPref.setIntPref("mandelbrot.image.height", iHeight); +function getAdjustPref(prefname) { + let value; + switch (prefname) { + case "image.width": + case "image.height": + value = 0; + try { + value = gPref.getIntPref("mandelbrot." + prefname); + } + catch (e) { } + if ((value < 10) || (value > 5000)) { + value = 300; + gPref.setIntPref("mandelbrot." + prefname, value); + } + return value; + case "last_image.Cr_*": + let Cr_min = -2.0; + let Cr_max = 1.0; + try { + Cr_min = parseFloat(gPref.getCharPref("mandelbrot.last_image.Cr_min")); + Cr_max = parseFloat(gPref.getCharPref("mandelbrot.last_image.Cr_max")); + } + catch (e) { } + if ((Cr_min < -3) || (Cr_min > 2) || + (Cr_max < -3) || (Cr_max > 2) || (Cr_min >= Cr_max)) { + Cr_min = -2.0; Cr_max = 1.0; + } + gPref.setCharPref("mandelbrot.last_image.Cr_min", Cr_min); + gPref.setCharPref("mandelbrot.last_image.Cr_max", Cr_max); + return {Cr_min: Cr_min, Cr_max: Cr_max}; + case "last_image.Ci_*": + let Ci_min = -1.5; + let Ci_max = 1.5; + try { + Ci_min = parseFloat(gPref.getCharPref("mandelbrot.last_image.Ci_min")); + Ci_max = parseFloat(gPref.getCharPref("mandelbrot.last_image.Ci_max")); + } + catch (e) { } + if ((Ci_min < -2.5) || (Ci_min > 2.5) || + (Ci_max < -2.5) || (Ci_max > 2.5) || (Ci_min >= Ci_max)) { + Ci_min = -1.5; Ci_max = 1.5; + } + gPref.setCharPref("mandelbrot.last_image.Ci_min", Ci_min); + gPref.setCharPref("mandelbrot.last_image.Ci_max", Ci_max); + return {Ci_min: Ci_min, Ci_max: Ci_max}; + case "iteration_max": + value = 500; + try { + value = gPref.getIntPref("mandelbrot." + prefname); + } + catch (e) { + setIter(value); + } + if (value < 10 || value > 10000) { + value = 500; + setIter(value); + } + return value; + case "use_algorithm": + value = "numeric"; + try { + value = gPref.getCharPref("mandelbrot." + prefname); + } + catch (e) { + setAlgorithm(value); + } + return value; + case "color_palette": + value = "kairo"; + try { + value = gPref.getCharPref("mandelbrot." + prefname); + } + catch(e) { + setPalette(value); + } + return value; + case "syncProportions": + value = true; + try { + value = gPref.getBoolPref("mandelbrot." + prefname); + } + catch(e) { + gPref.setBoolPref("mandelbrot." + prefname, value); + } + return value; + default: + return false; } +} + +function adjustCoordsAndDraw(aC_min, aC_max) { + let iWidth = getAdjustPref("image.width"); + let iHeight = getAdjustPref("image.height"); // correct coordinates if (aC_min.r < -2) @@ -111,55 +185,19 @@ function drawImage() { document.getElementById("statusLabel").value = gMbrotBundle.getString("statusDrawing"); - let Cr_min = -2.0; - let Cr_max = 1.0; - try { - Cr_min = parseFloat(gPref.getCharPref("mandelbrot.last_image.Cr_min")); - Cr_max = parseFloat(gPref.getCharPref("mandelbrot.last_image.Cr_max")); - } - catch (e) { } - if ((Cr_min < -3) || (Cr_min > 2) || - (Cr_max < -3) || (Cr_max > 2) || (Cr_min >= Cr_max)) { - Cr_min = -2.0; Cr_max = 1.0; - } - gPref.setCharPref("mandelbrot.last_image.Cr_min", Cr_min); - gPref.setCharPref("mandelbrot.last_image.Cr_max", Cr_max); + let Cr_vals = getAdjustPref("last_image.Cr_*"); + let Cr_min = Cr_vals.Cr_min; + let Cr_max = Cr_vals.Cr_max; - let Ci_min = -1.5; - let Ci_max = 1.5; - try { - Ci_min = parseFloat(gPref.getCharPref("mandelbrot.last_image.Ci_min")); - Ci_max = parseFloat(gPref.getCharPref("mandelbrot.last_image.Ci_max")); - } - catch (e) { } - if ((Ci_min < -2.5) || (Ci_min > 2.5) || - (Ci_max < -2.5) || (Ci_max > 2.5) || (Ci_min >= Ci_max)) { - Ci_min = -1.5; Ci_max = 1.5; - } - gPref.setCharPref("mandelbrot.last_image.Ci_min", Ci_min); - gPref.setCharPref("mandelbrot.last_image.Ci_max", Ci_max); + let Ci_vals = getAdjustPref("last_image.Ci_*"); + let Ci_min = Ci_vals.Ci_min; + let Ci_max = Ci_vals.Ci_max; - let iterMax = gPref.getIntPref("mandelbrot.iteration_max"); - let algorithm = gPref.getCharPref("mandelbrot.use_algorithm"); + let iterMax = getAdjustPref("iteration_max"); + let algorithm = getAdjustPref("use_algorithm"); - let iWidth = 0; - try { - iWidth = gPref.getIntPref("mandelbrot.image.width"); - } - catch (e) { } - if ((iWidth < 10) || (iWidth > 5000)) { - iWidth = 300; - gPref.setIntPref("mandelbrot.image.width", iWidth); - } - let iHeight = 0; - try { - iHeight = gPref.getIntPref("mandelbrot.image.height"); - } - catch (e) { } - if ((iHeight < 10) || (iHeight > 5000)) { - iHeight = 300; - gPref.setIntPref("mandelbrot.image.height", iHeight); - } + let iWidth = getAdjustPref("image.width"); + let iHeight = getAdjustPref("image.height"); gCurrentImageData = { C_min: new complex(Cr_min, Ci_min), @@ -617,15 +655,7 @@ function saveBookmark() { } function updateIterMenu() { - let currentIter = 0; - try { - currentIter = gPref.getIntPref("mandelbrot.iteration_max"); - } - catch(e) { } - if (currentIter < 10) { - currentIter = 500; - setIter(currentIter); - } + let currentIter = getAdjustPref("iteration_max"); let popup = document.getElementById("menu_iterPopup"); let item = popup.firstChild; @@ -645,15 +675,7 @@ function setIter(aIter) { } function updatePaletteMenu() { - let currentPalette = ''; - try { - currentPalette = gPref.getCharPref("mandelbrot.color_palette"); - } - catch(e) { } - if (!currentPalette.length) { - currentPalette = 'kairo'; - setPalette(currentPalette); - } + let currentPalette = getAdjustPref("color_palette"); if (!gColorPalette || !gColorPalette.length) gColorPalette = getColorPalette(currentPalette); @@ -705,15 +727,7 @@ function toggleJITState(jitMenuItem, jittype) { } function updateAlgoMenu() { - let currentAlgo = ''; - try { - currentAlgo = gPref.getCharPref("mandelbrot.use_algorithm"); - } - catch(e) { } - if (!currentAlgo.length) { - currentAlgo = 'numeric'; - setAlgorithm(currentAlgo); - } + let currentAlgo = getAdjustPref("use_algorithm"); let popup = document.getElementById("menu_algoPopup"); let item = popup.firstChild; @@ -757,16 +771,15 @@ function errorConsole() { function initImgSettings() { // Get values from prefs. - for each (let coord in ["Cr_min", "Cr_max", "Ci_min", "Ci_max"]) { - document.getElementById("is_" + coord).value = - roundCoord(parseFloat(gPref.getCharPref("mandelbrot.last_image." + coord))); + for each (let coord in ["Cr", "Ci"]) { + let coord_vals = getAdjustPref("last_image." + coord + "_*"); + document.getElementById("is_" + coord + "_min").value = coord_vals[coord + "_min"]; + document.getElementById("is_" + coord + "_max").value = coord_vals[coord + "_max"]; } for each (let dim in ["width", "height"]) { - document.getElementById("is_img_" + dim).value = - gPref.getIntPref("mandelbrot.image." + dim); + document.getElementById("is_img_" + dim).value = getAdjustPref("image." + dim); } - document.getElementById("is_syncProp").checked = - gPref.getBoolPref("mandelbrot.syncProportions"); + document.getElementById("is_syncProp").checked = getAdjustPref("syncProportions"); // Calculate scales. recalcCoord("Cr", "scale"); @@ -840,21 +853,13 @@ function drawPreview() { Ci_min = -2.0; Ci_max = 1.0; } - let iterMax = gPref.getIntPref("mandelbrot.iteration_max"); - let algorithm = gPref.getCharPref("mandelbrot.use_algorithm"); + let iterMax = getAdjustPref("iteration_max"); + let algorithm = getAdjustPref("use_algorithm"); context.fillStyle = "rgba(255, 255, 255, 127)"; context.fillRect(0, 0, canvas.width, canvas.height); - try { - var currentPalette = gPref.getCharPref("mandelbrot.color_palette"); - } - catch(e) { - var currentPalette = ""; - } - if (!currentPalette.length) { - currentPalette = "kairo"; - } + let currentPalette = getAdjustPref("color_palette"); gColorPalette = getColorPalette(currentPalette); drawLine(0, [Cr_min, Cr_max, Ci_min, Ci_max], diff --git a/xulapp/chrome/mandelbrot/content/mandelbrot.xul b/xulapp/chrome/mandelbrot/content/mandelbrot.xul index a9cb1e4..cbf7c6d 100644 --- a/xulapp/chrome/mandelbrot/content/mandelbrot.xul +++ b/xulapp/chrome/mandelbrot/content/mandelbrot.xul @@ -187,8 +187,8 @@ - diff --git a/xulapp/chrome/mandelbrot/skin/classic/mandelbrot.css b/xulapp/chrome/mandelbrot/skin/classic/mandelbrot.css index a287ac5..28f6ee4 100644 --- a/xulapp/chrome/mandelbrot/skin/classic/mandelbrot.css +++ b/xulapp/chrome/mandelbrot/skin/classic/mandelbrot.css @@ -42,7 +42,7 @@ html|link { display: none; } -#tasksMenuMandelbrot, #menu_openMandelbrot { +#tasksMenuMandelbrot, #menu_openMandelbrot, #appmenu_openMandelbrot { list-style-image: url("chrome://mandelbrot/skin/mandelbrotIcon16.png"); } -- 2.35.3