IconTitlePane

The class IconTitlePane extends the dijit/TitlePane by the possibility to

  • show a status-icon (e.g. an error marker) left of the drop down icon
    • Define the property iconClass for using this feature.  The IconTitlePane will watch that property, i.e. changes to that property using set("iconClass", ...) take effect immediately.
  • show an additional span with free content at the right of the header bar (e.g. some buttons)
    • Define a property additionalSpan for this
    • Caution
      • If a button is positioned in that additionalSpan, the default is that a click to that button first executes the button action and then performs the default functionality of toggleing the TitlePane.  
      • Unfortunately, the latter cannot be suppressed by simply calling event.preventDefault / event.stopPropagation.
      • Suppressing however can be done by applying the following steps:
        In the click handler of the button, save the current toggleable state of the TitlePane, and then turn it off. 

           		 	this.dataSetWidgets[index].oldToggleable = this.dataSetWidgets[index].titlePane.toggleable;
           		 	// Not use the set("toggleable", ...) syntax here, since that would trigger a change to the visual presentation of the TitlePane,
           		 	// which is not what we want here.
           		 	this.dataSetWidgets[index].titlePane.toggleable = false;

        Register a postTitleClick function on construction of the IconTitlePane, which resets the toggleable state to the old value:

        			var titlePane = new IconTitlePane({title : tabCaption,
        				 							  content : dataSetContentDiv,
        				 					   additionalSpan : dataSetAdditionalSpan,
        				 						   toggleable : true,
        				 						   	     open : true,
        				 						   	iconClass : null,
        				 					   postTitleClick : lang.hitch(this, function() {
        				 			            	 var index = ArrayHelper.getIndexByObjectMember(this.dataSetWidgets, "addButton", addButton);
        				 			            	 if (index != null) {
        				 			            		 this.dataSetWidgets[index].titlePane.toggleable = !!this.dataSetWidgets[index].oldToggleable;
        				 			            	 }
        				 					   })

        In IconTitlePane, the _onTitleClick first toggles the TitlePane if necessary (= not if we turned that feature off temporarily as described above), and then calls that postTitleClick function if it exists:

            	_onTitleClick: function(){
            		// summary:
            		//		Handler when user clicks the title bar
            		// tags:
            		//		private
            		if(this.toggleable){
            			this.toggle();
            		}
            		
            		if (this.postTitleClick) {
            			this.postTitleClick();	
            		}
            	}