Ignore:
Timestamp:
06/04/08 11:54:37 (4 years ago)
Author:
sys
Message:

choice input : possibilité de spécifier un provider pour le contenu de l'énumération.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Xul_XedLib/chrome/content/scenarixedlib/libUiBase/widgets/xedUiInputs.xbl.xml

    r11135 r11136  
    4747                   Exemple de noeud xed : <se:template se:id="monMenu"><xul:menuitem label="bonjour"/></se:template>  
    4848                3. Attribut "providerXPath" spécifiant un xpath permettant de pointer un élément du document en cours qui implémente 
    49                    une méthode fillChoicePopup(pRoot) insérant des balises xul:menuitem et ou des sous-menus à pRoot. Le provider est appelé 
    50                    à chaque affichage du popup. A lui de décider si la liste doit être rafraichie ou pas si elle est déjà remplie. 
     49                   deux méthodes :  
     50                    * fillChoicePopup(pRoot, pReadOnly) insérant des balises xul:menuitem et/ou des sous-menus à pRoot. Le provider est appelé 
     51                      à chaque affichage du popup. A lui de décider si la liste doit être rafraichie ou pas si elle est déjà remplie. 
     52                    * getChoiceItem retourne un élément Dom avec un attribut label et optionnellement value correspondant à pVlaue. 
     53                      Retourne null si cette valeur n'appartient pas à la liste autorisée. Le paramètre pChoiceInput pointant le widget xed pourrait permettre une  
     54                      validation asynchrone en appelant un refresh ultérieurement. 
    5155        --> 
    5256        <binding id="choiceInput" extends="chrome://scenarixedlib/content/libUiBase/widgets/xedUiBase.xbl.xml#input"> 
     
    131135                                ]]></body> 
    132136                        </method> 
     137                        <property name="provider"> 
     138                                <getter> 
     139                                        if( ! this.fProvider) this.fProvider = document.evaluate(this.getAttribute('providerXPath'), this, document.createNSResolver(this), XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
     140                                        return this.fProvider; 
     141                                </getter> 
     142                        </property> 
    133143                        <method name="xFillPopup"> 
    134144                                <body><![CDATA[ 
    135145                                        if(this.hasAttribute("providerXPath")){ 
    136146                                                try { 
    137                                                         if( ! this.fProvider) this.fProvider = document.evaluate(this.getAttribute('providerXPath'), this, vModel.ownerDocument.createNSResolver(vModel), XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
    138                                                         this.fProvider.fillChoicePopup(this.fChoicePopup); 
     147                                                        this.provider.fillChoicePopup(this.fChoicePopup, this.isReadOnly); 
    139148                                                } catch(e){ 
    140149                                                        xed.debug("providerXPath not found or failed: "+this.getAttribute('providerXPath') + " - " + e); 
     
    242251                                        this.fSelectedItem = null; 
    243252                                        if(pVal != null) { 
    244                                                 function findSelectItem (pEnum, pItem, pVal){ 
    245                                                         while(pItem){ 
    246                                                                 if(pItem.nodeType==1){ 
    247                                                                         if(pItem.localName == "ciSubList") { 
    248                                                                                 //On passe en revue les ciItem fils. 
    249                                                                                 findSelectItem(pEnum, pItem.firstChild, pVal); 
    250                                                                                 if(pEnum.fSelectedItem) return; 
    251                                                                         } else if(pItem.localName == "menu") { 
    252                                                                                 //On saute la balise menupopup 
    253                                                                                 var vChildItem = pItem.firstChild; 
    254                                                                                 while(vChildItem && vChildItem.nodeType != 1) vChildItem = vChildItem.nextSibling; 
    255                                                                                 if(vChildItem) { 
    256                                                                                         //On passe en revue les menus fils. 
    257                                                                                         findSelectItem(pEnum, vChildItem.firstChild, pVal); 
     253                                                if(this.hasAttribute("providerXPath")){ 
     254                                                        this.fSelectedItem = this.provider.getChoiceItem(this, pVal); 
     255                                                } else { 
     256                                                        function findSelectItem (pEnum, pItem, pVal){ 
     257                                                                while(pItem){ 
     258                                                                        if(pItem.nodeType==1){ 
     259                                                                                if(pItem.localName == "ciSubList") { 
     260                                                                                        //On passe en revue les ciItem fils. 
     261                                                                                        findSelectItem(pEnum, pItem.firstChild, pVal); 
    258262                                                                                        if(pEnum.fSelectedItem) return; 
    259                                                                                 } 
    260                                                                         } else { 
    261                                                                                 var vValue = pItem.hasAttribute("value") ? pItem.getAttribute("value") : pItem.getAttribute("label"); 
    262                                                                                 if(vValue == pVal) { 
    263                                                                                         //xed.debug("vValue == pVal"+xed.getXml(pItem)); 
    264                                                                                         if(pItem.getAttribute("collapsed")!="true" && pItem.getAttribute("hidden")!="true") { 
    265                                                                                                 pEnum.fSelectedItem = pItem; 
    266                                                                                                 return; 
     263                                                                                } else if(pItem.localName == "menu") { 
     264                                                                                        //On saute la balise menupopup 
     265                                                                                        var vChildItem = pItem.firstChild; 
     266                                                                                        while(vChildItem && vChildItem.nodeType != 1) vChildItem = vChildItem.nextSibling; 
     267                                                                                        if(vChildItem) { 
     268                                                                                                //On passe en revue les menus fils. 
     269                                                                                                findSelectItem(pEnum, vChildItem.firstChild, pVal); 
     270                                                                                                if(pEnum.fSelectedItem) return; 
     271                                                                                        } 
     272                                                                                } else { 
     273                                                                                        var vValue = pItem.hasAttribute("value") ? pItem.getAttribute("value") : pItem.getAttribute("label"); 
     274                                                                                        if(vValue == pVal) { 
     275                                                                                                //xed.debug("vValue == pVal"+xed.getXml(pItem)); 
     276                                                                                                if(pItem.getAttribute("collapsed")!="true" && pItem.getAttribute("hidden")!="true") { 
     277                                                                                                        pEnum.fSelectedItem = pItem; 
     278                                                                                                        return; 
     279                                                                                                } 
    267280                                                                                        } 
    268281                                                                                } 
    269282                                                                        } 
     283                                                                        pItem= pItem.nextSibling; 
    270284                                                                } 
    271                                                                 pItem= pItem.nextSibling; 
    272                                                         } 
    273                                                 } 
    274                                                 findSelectItem(this, this.fPopupContent.firstChild, pVal); 
     285                                                        } 
     286                                                        findSelectItem(this, this.fPopupContent.firstChild, pVal); 
     287                                                } 
    275288                                        } 
    276289                                        if(pVal){ 
    277290                                                this.removeAttribute("empty"); 
    278291                                                if(this.fSelectedItem) { 
    279                                                         //On affiche de préférence le label. 
    280292                                                        var vLabel = this.fSelectedItem.getAttribute("label"); 
    281293                                                        this.fDisplay.setAttribute("value", vLabel ? vLabel : " "); 
Note: See TracChangeset for help on using the changeset viewer.