home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 January / 01_02.iso / software / netscape62win / browser.xpi / bin / chrome / toolkit.jar / content / global / bindings / tabbox.xml < prev    next >
Encoding:
Extensible Markup Language  |  2001-08-04  |  7.6 KB  |  239 lines

  1. <?xml version="1.0"?>
  2.  
  3. <bindings id="tabBindings"
  4.           xmlns="http://www.mozilla.org/xbl"
  5.           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  6.  
  7.   <binding id="tab-base">
  8.     <resources>
  9.       <stylesheet src="chrome://global/skin/tabbox.css"/>
  10.     </resources>
  11.   </binding>
  12.  
  13.   <binding id="tabbox" display="xul:box"
  14.            extends="chrome://global/content/bindings/tabbox.xml#tab-base">
  15.     <content orient="vertical"/>
  16.  
  17.     <implementation>
  18.       <property name="selectedTab">
  19.         <setter>
  20.         <![CDATA[
  21.           if (!val)
  22.             throw Components.results.NS_ERROR_NULL_POINTER;
  23.           var tabs = this.getElementsByTagNameNS(
  24.               "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  25.               "tabs");
  26.           tabs = tabs.length ? tabs[0] : null;
  27.           if (tabs)
  28.             tabs.selectedTab = val;
  29.           return val;
  30.         ]]>
  31.         </setter>
  32.         
  33.         <getter>
  34.         <![CDATA[
  35.           var tabs = this.getElementsByTagNameNS(
  36.               "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  37.               "tabs");
  38.           tabs = tabs.length ? tabs[0] : null;
  39.           return tabs ? tabs.selectedTab : null;
  40.         ]]>
  41.         </getter>
  42.       </property>
  43.     </implementation>
  44.     
  45.     <handlers>
  46.       <handler event="keypress" keycode="vk_tab" modifiers="control">
  47.         <![CDATA[
  48.          var tabs = this.getElementsByTagNameNS(
  49.                                                   "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  50.                                                   "tabs");
  51.          tabs = tabs.length ? tabs[0] : null;
  52.          if (tabs)
  53.            tabs.advanceSelectedTab(1);
  54.          ]]>
  55.       </handler>
  56.       
  57.       <handler event="keypress" keycode="vk_tab" modifiers="control,shift">
  58.         <![CDATA[
  59.          var tabs = this.getElementsByTagNameNS(
  60.                                                   "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  61.                                                   "tabs");
  62.          tabs = tabs.length ? tabs[0] : null;
  63.          if (tabs)
  64.            tabs.advanceSelectedTab(-1);
  65.          ]]>
  66.       </handler>
  67.     </handlers>
  68.   </binding>
  69.  
  70.   <binding id="tabs" display="xul:box"
  71.            extends="chrome://global/content/bindings/tabbox.xml#tab-base">
  72.     <implementation>
  73.       <constructor>
  74.       <![CDATA[
  75.         // first and last tabs need to be able to have unique styles
  76.         // and also need to select first tab on startup.
  77.         var tabs = this.getElementsByTagNameNS(
  78.                       "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  79.                       "tab");
  80.         if (tabs.length) {
  81.           if (tabs.length > 1) {
  82.           tabs[0].setAttribute("first-tab", "true");
  83.           tabs[tabs.length - 1].setAttribute("last-tab", "true");
  84.           }
  85.           else if (tabs.length == 1)
  86.           tabs[0].setAttribute("first-tab", "true");
  87.         }
  88.         this.selectedTab = tabs[0];
  89.         var o = this.getAttribute("orient");
  90.         if (!o)
  91.           this.setAttribute("orient", "horizontal");
  92.       ]]>
  93.       </constructor>
  94.       
  95.       <property name="selectedTab">
  96.         <getter>
  97.         <![CDATA[
  98.           for (var i = 0; i < this.childNodes.length; i++) {
  99.             if (this.childNodes[i].selected)
  100.               return this.childNodes[i];
  101.           }
  102.           // throw an exception when no tab is selected (we shouldn't get here)
  103.           throw Components.results.NS_ERROR_FAILURE;
  104.         ]]>
  105.         </getter>
  106.         <setter>
  107.         <![CDATA[
  108.           if (!val)
  109.             throw Components.results.NS_ERROR_NULL_POINTER;
  110.           if (!val.selected)
  111.             val.selected = true;
  112.           var selectedIndex = 0;
  113.           for (var i = 0; i < this.childNodes.length; i++) {
  114.             if (this.childNodes[i].selected) {
  115.               if (this.childNodes[i] != val)
  116.                 this.childNodes[i].selected = false;
  117.               else 
  118.                 selectedIndex = i;
  119.             }
  120.           }
  121.           var tabpanels = this.parentNode.getElementsByTagNameNS(
  122.                                "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  123.                                "tabpanels");
  124.           tabpanels = tabpanels.length ? tabpanels[0] : null;
  125.           if (tabpanels)
  126.             tabpanels.index = selectedIndex;
  127.           return val;
  128.         ]]>
  129.         </setter>
  130.       </property>
  131.     
  132.       <method name="advanceSelectedTab">
  133.         <parameter name="aDir"/>
  134.         <body>
  135.         <![CDATA[
  136.           var next = this.selectedTab[aDir == -1 ? "previousSibling" : "nextSibling"];
  137.           if (next && !next.getAttribute("hidden")) {
  138.             this.selectedTab = next;
  139.             next.focus();
  140.           }
  141.         ]]>
  142.         </body>
  143.       </method>
  144.     </implementation>
  145.   </binding>
  146.   
  147.   <binding id="tabpanels" display="xul:deck"
  148.            extends="chrome://global/content/bindings/tabbox.xml#tab-base">
  149.     <implementation>
  150.       <!-- should be defined on deck! -->
  151.       <property name="index"
  152.                 onget="return this.getAttribute('index');"
  153.                 onset="this.setAttribute('index',val); return val;"/>
  154.     </implementation>
  155.   </binding>
  156.  
  157.   <binding id="tab" display="xul:button"
  158.            extends="chrome://global/content/bindings/tabbox.xml#tab-base">
  159.     <content>
  160.       <xul:hbox class="tab-box" flex="1" align="center">
  161.         <xul:image class="tab-image" inherits="src"/>
  162.         <xul:text class="tab-text" inherits="value=label,accesskey,crop,disabled"/>
  163.       </xul:hbox>
  164.     </content>
  165.     
  166.     <implementation>
  167.       <property name="label">
  168.         <getter>
  169.           return this.getAttribute("label");
  170.         </getter>
  171.         <setter>  
  172.           this.setAttribute("label", val);
  173.           return val;
  174.         </setter>
  175.       </property>
  176.  
  177.       <property name="tabs" 
  178.                 onget="return this.getAttribute('tabs');"
  179.                 onset="this.setAttribute('tabs', val); return val;"/>
  180.  
  181.       <!-- XXX -->                
  182.       <property name="selected">
  183.         <getter>
  184.           return this.getAttribute("selected") == "true" ? true : false;
  185.         </getter>
  186.         <setter>
  187.           this.setAttribute("selected",val);
  188.           if (this.previousSibling) 
  189.             this.previousSibling.setAttribute("beforeselected",val);
  190.           if (this.nextSibling)
  191.             this.nextSibling.setAttribute("afterselected",val);
  192.           return val;
  193.         </setter>
  194.       </property>
  195.     </implementation>
  196.     
  197.     <handlers>
  198.       <handler event="click" button="0">
  199.       <![CDATA[
  200.         var tabs = this.parentNode;
  201.         do {
  202.           if (tabs.localName == "tabs")
  203.             break;
  204.           tabs = tabs.parentNode;
  205.         } while(tabs.localName != "tabbox");
  206.         tabs.selectedTab = this;
  207.         if (!this.selected) this.selected = true;
  208.       ]]>
  209.       </handler>
  210.       
  211.       <handler event="keypress" keycode="vk_left">
  212.       <![CDATA[
  213.         this.parentNode.advanceSelectedTab(-1);
  214.       ]]>
  215.       </handler>
  216.       
  217.       <handler event="keypress" keycode="vk_right">
  218.       <![CDATA[
  219.         this.parentNode.advanceSelectedTab(1);
  220.       ]]>
  221.       </handler>
  222.       
  223.       <handler event="keypress" keycode="vk_up">
  224.       <![CDATA[
  225.         this.parentNode.advanceSelectedTab(-1);
  226.       ]]>
  227.       </handler>
  228.       
  229.       <handler event="keypress" keycode="vk_down">
  230.       <![CDATA[
  231.         this.parentNode.advanceSelectedTab(1);
  232.       ]]>
  233.       </handler>
  234.     </handlers>
  235.   </binding>
  236.   
  237. </bindings>
  238.  
  239.