Bug 485381: Add special widget for checkboxes, r=gavin
authorMark Finkle <mfinkle@mozilla.com>
Fri, 27 Mar 2009 17:32:42 -0500
changeset 65145 e9fb3cf08a24c9b39d1b27716cf386230e690f99
parent 65144 6e11debce080394a12ea074928566a626469c57a
child 65146 bcc8e56024e36794f3c37759bee509e6155d4a1c
push idunknown
push userunknown
push dateunknown
reviewersgavin
bugs485381
Bug 485381: Add special widget for checkboxes, r=gavin
mobile/chrome/content/browser.css
mobile/chrome/content/checkbox.xml
mobile/chrome/jar.mn
mobile/locales/en-US/chrome/checkbox.dtd
mobile/locales/jar.mn
mobile/themes/hildon/platform.css
mobile/themes/wince/platform.css
--- a/mobile/chrome/content/browser.css
+++ b/mobile/chrome/content/browser.css
@@ -57,8 +57,12 @@ placelist {
 
 placetree {
   -moz-binding: url("chrome://browser/content/bindings.xml#place-tree");
 }
 
 placelabel {
   -moz-binding: url("chrome://browser/content/bindings.xml#place-label");
 }
+
+checkbox {
+  -moz-binding: url("chrome://browser/content/checkbox.xml#checkbox-radio");
+}
new file mode 100644
--- /dev/null
+++ b/mobile/chrome/content/checkbox.xml
@@ -0,0 +1,98 @@
+<?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 Mozilla Mobile Browser.
+   -
+   - The Initial Developer of the Original Code is Mozilla Corporation.
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s):
+   -   Mark Finkle <mfinkle@mozilla.com>
+   -
+   - 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 ***** -->
+
+<!DOCTYPE bindings [
+  <!ENTITY % checkboxDTD SYSTEM "chrome://browser/locale/checkbox.dtd">
+  %checkboxDTD;
+]>
+
+<bindings
+    xmlns="http://www.mozilla.org/xbl"
+    xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <binding id="checkbox-radio" display="xul:box" extends="chrome://global/content/bindings/checkbox.xml#checkbox-baseline">
+    <content>
+      <xul:radiogroup anonid="group">
+        <xul:radio anonid="on" label="&checkbox.on.label;"/>
+        <xul:radio anonid="off" label="&checkbox.off.label;"/>
+      </xul:radiogroup>
+    </content>
+    <implementation>
+      <constructor><![CDATA[
+        this.setChecked(this.checked);
+      ]]></constructor>
+
+      <field name="_group">
+        document.getAnonymousElementByAttribute(this, "anonid", "group");
+      </field>
+
+      <field name="_on">
+        document.getAnonymousElementByAttribute(this, "anonid", "on");
+      </field>
+
+      <field name="_off">
+        document.getAnonymousElementByAttribute(this, "anonid", "off");
+      </field>
+
+      <method name="setChecked">
+        <parameter name="aValue"/>
+        <body>
+        <![CDATA[
+          var change = (aValue != this.checked);
+          if (aValue) {
+            this.setAttribute("checked", "true");
+            this._group.selectedItem = this._on;
+          }
+          else {
+            this.removeAttribute("checked");
+            this._group.selectedItem = this._off;
+          }
+
+          if (change) {
+            var event = document.createEvent("Events");
+            event.initEvent("CheckboxStateChange", true, true);
+            this.dispatchEvent(event);
+          }
+          return aValue;
+        ]]>
+        </body>
+      </method>
+    </implementation>
+  </binding>
+
+</bindings>
--- a/mobile/chrome/jar.mn
+++ b/mobile/chrome/jar.mn
@@ -3,16 +3,17 @@
 browser.jar:
 % content browser %content/
 * content/browser.xul                  (content/browser.xul)
   content/browser.js                   (content/browser.js)
   content/browser-ui.js                (content/browser-ui.js)
   content/commandUtil.js               (content/commandUtil.js)
   content/bindings.xml                 (content/bindings.xml)
   content/tabs.xml                     (content/tabs.xml)
+  content/checkbox.xml                 (content/checkbox.xml)
   content/notification.xml             (content/notification.xml)
   content/browser.css                  (content/browser.css)
   content/scrollbars.css               (content/scrollbars.css)
   content/content.css                  (content/content.css)
   content/checkerboard.png             (content/checkerboard.png)
 % content branding %content/branding/
 % style chrome://mozapps/content/extensions/extensions.xul chrome://browser/skin/extensions.css
   content/preferences/richpref.xml     (content/preferences/richpref.xml)
new file mode 100644
--- /dev/null
+++ b/mobile/locales/en-US/chrome/checkbox.dtd
@@ -0,0 +1,2 @@
+<!ENTITY checkbox.on.label      "On">
+<!ENTITY checkbox.off.label     "Off">
--- a/mobile/locales/jar.mn
+++ b/mobile/locales/jar.mn
@@ -3,14 +3,15 @@
 @AB_CD@.jar:
 % locale browser @AB_CD@ %locale/@AB_CD@/browser/
   locale/@AB_CD@/browser/browser.dtd              (%chrome/browser.dtd)
   locale/@AB_CD@/browser/browser.properties       (%chrome/browser.properties)
   locale/@AB_CD@/browser/shortcuts.properties     (%chrome/shortcuts.properties)
   locale/@AB_CD@/browser/search.properties        (%chrome/search.properties)
   locale/@AB_CD@/browser/region.properties        (%chrome/region.properties)
   locale/@AB_CD@/browser/preferences.dtd          (%chrome/preferences.dtd)
+  locale/@AB_CD@/browser/checkbox.dtd             (%chrome/checkbox.dtd)
 # Fennec-specific overrides of generic strings
 * locale/@AB_CD@/browser/netError.dtd             (%chrome/overrides/netError.dtd)
 % override chrome://global/locale/netErrorApp.dtd chrome://browser/locale/netError.dtd
 % locale branding @AB_CD@ %locale/@AB_CD@/branding/
   locale/@AB_CD@/branding/brand.dtd               (%chrome/brand/brand.dtd)
   locale/@AB_CD@/branding/brand.properties        (%chrome/brand/brand.properties)
--- a/mobile/themes/hildon/platform.css
+++ b/mobile/themes/hildon/platform.css
@@ -68,18 +68,16 @@ richlistitem {
 /* re-theme radio buttons */
 radiogroup {
   -moz-box-orient: horizontal;
 }
 
 radio {
   border: 1px solid #000;
   border-left: none;
-  color: #000;
-  background: gray;
   margin: 0px;
   padding: 6px;
   -moz-box-align: center;
   -moz-appearance: none;
 }
 
 radio .radio-check-box1, .radio-check {
   display: none;
@@ -92,10 +90,11 @@ radio:first-child {
 }
 
 radio:last-child {
   -moz-border-radius-topright: 8px;
   -moz-border-radius-bottomright: 8px;
 }
 
 radio[selected] {
-  background: #fff;
+  color: #000;
+  background: gray;
 }
--- a/mobile/themes/wince/platform.css
+++ b/mobile/themes/wince/platform.css
@@ -68,18 +68,16 @@ richlistitem {
 /* re-theme radio buttons */
 radiogroup {
   -moz-box-orient: horizontal;
 }
 
 radio {
   border: 1px solid #000;
   border-left: none;
-  color: #000;
-  background: gray;
   margin: 0px;
   padding: 6px;
   -moz-box-align: center;
   -moz-appearance: none;
 }
 
 radio .radio-check-box1, .radio-check {
   display: none;
@@ -92,10 +90,11 @@ radio:first-child {
 }
 
 radio:last-child {
   -moz-border-radius-topright: 8px;
   -moz-border-radius-bottomright: 8px;
 }
 
 radio[selected] {
-  background: #fff;
+  color: #000;
+  background: gray;
 }