add item to new Firefox button menu, make Firefox and SeaMonkey open Mandelbrot in...
[mandelbrot.git] / xulapp / chrome / mandelbrot / content / mandelbrot.xul
index 821dc1772bfe2dd3e77626b2e560d8731d0e5e18..cbf7c6d68c3ad0238073b1d3cecc32dd13345881 100644 (file)
@@ -1,8 +1,48 @@
 <?xml version="1.0"?>
+
+<!-- ***** BEGIN LICENSE BLOCK *****
+   - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+   -
+   - The contents of this file are subject to the Mozilla Public License Version
+   - 1.1 (the "License"); you may not use this file except in compliance with
+   - the License. You may obtain a copy of the License at
+   - http://www.mozilla.org/MPL/
+   -
+   - Software distributed under the License is distributed on an "AS IS" basis,
+   - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+   - for the specific language governing rights and limitations under the
+   - License.
+   -
+   - The Original Code is KaiRo.at Mandelbrot, XULRunner version.
+   -
+   - The Initial Developer of the Original Code is
+   - Robert Kaiser <kairo@kairo.at>.
+   - Portions created by the Initial Developer are Copyright (C) 2008
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s):
+   -   Robert Kaiser <kairo@kairo.at>
+   -
+   - Alternatively, the contents of this file may be used under the terms of
+   - either the GNU General Public License Version 2 or later (the "GPL"), or
+   - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+   - in which case the provisions of the GPL or the LGPL are applicable instead
+   - of those above. If you wish to allow use of your version of this file only
+   - under the terms of either the GPL or the LGPL, and not to allow others to
+   - use your version of this file under the terms of the MPL, indicate your
+   - decision by deleting the provisions above and replace them with the notice
+   - and other provisions required by the LGPL or the GPL. If you do not delete
+   - the provisions above, a recipient may use your version of this file under
+   - the terms of any one of the MPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://mandelbrot/skin/" type="text/css"?>
 
 <!DOCTYPE window [
+  <!ENTITY % mandelOverlayDTD SYSTEM "chrome://mandelbrot/locale/mandelbrot-overlay.dtd">
+  %mandelOverlayDTD;
   <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
   %brandDTD;
   <!ENTITY % mandelbrotDTD SYSTEM "chrome://mandelbrot/locale/mandelbrot.dtd">
@@ -10,7 +50,7 @@
 ]>
 
 <window id="mandelbrotWindow" title="&windowTitle;"
-        width="350" height="450"
+        width="650" height="750"
         onload="Startup()"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml">
     <stringbundle id="mbrotBundle" src="chrome://mandelbrot/locale/mandelbrot.properties"/>
   </stringbundleset>
 
+  <commandset id="mainCommands">
+  </commandset>
+
   <toolbox>
-    <menubar>
+    <menubar id="mandelbrotMenubar">
       <menu id="fileMenu" label="&fileMenu.label;">
         <menupopup id="menu_filePopup">
           <menuitem id="fileDraw" label="&fileDraw.label;" oncommand="drawImage();"/>
           <menuitem id="fileSave" label="&fileSave.label;" oncommand="saveImage();"/>
           <menuseparator/>
-          <menuitem id="fileQuit" label="&fileQuit.label;" oncommand="quitApp(false);"/>
+          <menuitem id="fileQuit" label="&fileQuit.label;" oncommand="exitMandelbrot();"/>
+        </menupopup>
+      </menu>
+      <menu id="bookmarkMenu" label="&bookmarkMenu.label;">
+        <menupopup id="menu_bookmarkPopup"
+                   onpopupshowing="updateBookmarkMenu(event.target);"
+                   oncommand="callBookmark(event.target);">
+          <menuitem id="bookmarkOverview" label="&bookmarkOverview.label;"/>
+          <menuitem id="bookmarkSave" label="&bookmarkSave.label;" oncommand="saveBookmark();"/>
+          <menuseparator id="bookmarkSeparator"/>
         </menupopup>
       </menu>
       <menu id="prefMenu" label="&prefMenu.label;">
             <menupopup id="menu_palettePopup" onpopupshowing="updatePaletteMenu();" oncommand="setPalette(event.target.value);">
               <menuitem type="radio" name="palette" value="bw" label="&colorBW.label;"/>
               <menuitem type="radio" name="palette" value="kairo" label="&colorKairo.label;"/>
+              <menuitem type="radio" name="palette" value="rainbow-linear1" label="&colorRBLin1.label;"/>
+              <menuitem type="radio" name="palette" value="rainbow-squared1" label="&colorRBSq1.label;"/>
+              <menuitem type="radio" name="palette" value="rainbow-linear2" label="&colorRBLin2.label;"/>
+              <menuitem type="radio" name="palette" value="rainbow-squared2" label="&colorRBSq2.label;"/>
             </menupopup>
           </menu>
+          <menuitem id="imgSettings" label="&imgSettings.label;" oncommand="imgSettings();"/>
         </menupopup>
       </menu>
       <menu id="debugMenu" label="&debugMenu.label;">
         <menupopup id="menu_debugPopup" onpopupshowing="updateDebugMenu();">
-          <menuitem type="checkbox" id="jitEnabled" label="&jitEnabled.label;" oncommand="toggleJITState(event.target);"/>
+          <menuitem type="checkbox" id="tracejitEnabled" label="&tracejitEnabled.label;" oncommand="toggleJITState(event.target, 'trace');"/>
+          <menuitem type="checkbox" id="methodjitEnabled" label="&methodjitEnabled.label;" oncommand="toggleJITState(event.target, 'method');"/>
           <menu id="algoMenu" label="&algoMenu.label;">
             <menupopup id="menu_algoPopup" onpopupshowing="updateAlgoMenu();" oncommand="setAlgorithm(event.target.value);">
               <menuitem type="radio" name="algorithm" value="numeric" label="&algoNumeric.label;"/>
               <menuitem type="radio" name="algorithm" value="oo" label="&algoOO.label;"/>
             </menupopup>
           </menu>
+          <menuitem id="errorConsole" label="&errorConsole.label;"
+                    oncommand="errorConsole();"/>
+          <menuitem id="addonsMgr" label="&addonsManager.label;"
+                    oncommand="addonsManager();"/>
         </menupopup>
       </menu>
     </menubar>
   </toolbox>
-  <button id="drawButton" label="&fileDraw.label;" oncommand="drawImage();"/>
+  <panel id="imgSettingsPanel"
+         onpopupshowing="initImgSettings();"
+         onpopuphiding="saveImgSettings();">
+    <!-- |titlebar="normal" noautohide="true" close="true" label="&imageSettings.title;"|
+         doesn't seem to work on the panel, so work around with a <titlebar> instead -->
+    <titlebar><label value="&imageSettings.title;"/></titlebar>
+    <groupbox>
+      <caption label="&coord.title;"/>
+      <description value="&coord.real.label;" class="coord-caption"/>
+      <hbox align="center">
+        <label value="&coord.min.label;" control="is_Cr_min"/>
+        <textbox id="is_Cr_min" size="10"
+                 onchange="checkISValue(this, 'coord'); recalcCoord('Cr', 'scale');"/>
+        <label value="&coord.max.label;" control="is_Cr_max"/>
+        <textbox id="is_Cr_max" size="10"
+                 onchange="checkISValue(this, 'coord'); recalcCoord('Cr', 'scale');"/>
+        <label value="&coord.scale.label;" control="is_Cr_scale"/>
+        <textbox id="is_Cr_scale" size="10"
+                 onchange="checkISValue(this, 'coord'); recalcCoord('Cr', 'max');"/>
+      </hbox>
+      <separator class="thin"/>
+      <description value="&coord.imag.label;" class="coord-caption"/>
+      <hbox align="center">
+        <label value="&coord.min.label;" control="is_Ci_min"/>
+        <textbox id="is_Ci_min" size="10"
+                 onchange="checkISValue(this, 'coord'); recalcCoord('Ci', 'scale');"/>
+        <label value="&coord.max.label;" control="is_Ci_max"/>
+        <textbox id="is_Ci_max" size="10"
+                 onchange="checkISValue(this, 'coord'); recalcCoord('Ci', 'scale');"/>
+        <label value="&coord.scale.label;" control="is_Ci_scale"/>
+        <textbox id="is_Ci_scale" size="10"
+                 onchange="checkISValue(this, 'coord'); recalcCoord('Ci', 'max');"/>
+      </hbox>
+    </groupbox>
+
+    <hbox flex="1">
+      <groupbox>
+        <caption label="&img.size.title;"/>
+        <hbox align="center">
+          <label value="&img.width.label;" control="is_img_width"/>
+          <textbox id="is_img_width" size="4"
+                   onchange="checkISValue(this, 'dim'); recalcCoord('Ci', 'scale');"/>
+        </hbox>
+        <hbox align="center">
+          <label value="&img.height.label;" control="is_img_height"/>
+          <textbox id="is_img_height" size="4"
+                   onchange="checkISValue(this, 'dim'); recalcCoord('Cr', 'scale');"/>
+        </hbox>
+      </groupbox>
+
+      <groupbox>
+        <caption label="&preview.title;"/>
+        <hbox flex="1" pack="center" align="center">
+          <html:canvas id="is_mbrotPreview" width="50" height="50"></html:canvas>
+        </hbox>
+        <button id="is_previewButton" label="&previewDraw.label;" oncommand="drawPreview();"/>
+      </groupbox>
+
+      <groupbox>
+        <caption label="&options.title;"/>
+        <hbox align="center">
+          <checkbox id="is_syncProp"
+                    label="&syncProp.label;"
+                    onclick="checkProportions();"/>
+        </hbox>
+      </groupbox>
+    </hbox>
+    <hbox>
+      <button id="is_closeButton" label="&closeSettings.label;" oncommand="closeImgSettings();"/>
+      <spacer flex="1"/>
+      <button id="is_drawButton" label="&drawImageButton.label;" oncommand="closeImgSettings(); drawImage();"/>
+    </hbox>
+  </panel>
   <hbox flex="1" pack="center" align="center">
-    <html:canvas id="mbrotImage" width="300" height="300"></html:canvas>
+    <stack>
+      <html:canvas id="mbrotImage" width="300" height="300"
+                   onmousedown="mouseevent('down', event);"
+                   onmouseup="mouseevent('up',event);"
+                   onmousemove="mouseevent('move',event);">
+      </html:canvas>
+      <button id="drawButton" label="&fileDraw.label;" oncommand="drawImage();"/>
+    </stack>
   </hbox>
   <hbox pack="end" align="end">
     <description id="statusLabel"/>