123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
- <style type="text/css">
- .highlight { display: block; background-color: #ddd; }
- </style>
- <script type="text/javascript">
- function highlight() {
- document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
- }
- </script>
- </head>
- <body onload="prettyPrint(); highlight();">
- <pre class="prettyprint lang-js"><span id='Ext-button-Cycle'>/**
- </span> * A specialized SplitButton that contains a menu of {@link Ext.menu.CheckItem} elements. The button automatically
- * cycles through each menu item on click, raising the button's {@link #change} event (or calling the button's
- * {@link #changeHandler} function, if supplied) for the active menu item. Clicking on the arrow section of the
- * button displays the dropdown menu just like a normal SplitButton. Example usage:
- *
- * @example
- * Ext.create('Ext.button.Cycle', {
- * showText: true,
- * prependText: 'View as ',
- * renderTo: Ext.getBody(),
- * menu: {
- * id: 'view-type-menu',
- * items: [{
- * text: 'text only',
- * iconCls: 'view-text',
- * checked: true
- * },{
- * text: 'HTML',
- * iconCls: 'view-html'
- * }]
- * },
- * changeHandler: function(cycleBtn, activeItem) {
- * Ext.Msg.alert('Change View', activeItem.text);
- * }
- * });
- */
- Ext.define('Ext.button.Cycle', {
- /* Begin Definitions */
- alias: 'widget.cycle',
- extend: 'Ext.button.Split',
- alternateClassName: 'Ext.CycleButton',
- /* End Definitions */
- <span id='Ext-button-Cycle-cfg-items'> /**
- </span> * @cfg {Object[]} items
- * An array of {@link Ext.menu.CheckItem} **config** objects to be used when creating the button's menu items (e.g.,
- * `{text:'Foo', iconCls:'foo-icon'}`)
- *
- * @deprecated 4.0 Use the {@link #cfg-menu} config instead. All menu items will be created as
- * {@link Ext.menu.CheckItem CheckItems}.
- */
- <span id='Ext-button-Cycle-cfg-showText'> /**
- </span> * @cfg {Boolean} [showText=false]
- * True to display the active item's text as the button text. The Button will show its
- * configured {@link #text} if this config is omitted.
- */
- <span id='Ext-button-Cycle-cfg-prependText'> /**
- </span> * @cfg {String} [prependText='']
- * A static string to prepend before the active item's text when displayed as the button's text (only applies when
- * showText = true).
- */
- <span id='Ext-button-Cycle-cfg-changeHandler'> /**
- </span> * @cfg {Function} changeHandler
- * A callback function that will be invoked each time the active menu item in the button's menu has changed. If this
- * callback is not supplied, the SplitButton will instead fire the {@link #change} event on active item change. The
- * changeHandler function will be called with the following argument list: (SplitButton this, Ext.menu.CheckItem
- * item)
- */
- <span id='Ext-button-Cycle-cfg-forceIcon'> /**
- </span> * @cfg {String} forceIcon
- * A css class which sets an image to be used as the static icon for this button. This icon will always be displayed
- * regardless of which item is selected in the dropdown list. This overrides the default behavior of changing the
- * button's icon to match the selected item's icon on change.
- */
- <span id='Ext-button-Cycle-property-menu'> /**
- </span> * @property {Ext.menu.Menu} menu
- * The {@link Ext.menu.Menu Menu} object used to display the {@link Ext.menu.CheckItem CheckItems} representing the
- * available choices.
- */
- // private
- getButtonText: function(item) {
- var me = this,
- text = '';
- if (item && me.showText === true) {
- if (me.prependText) {
- text += me.prependText;
- }
- text += item.text;
- return text;
- }
- return me.text;
- },
- <span id='Ext-button-Cycle-method-setActiveItem'> /**
- </span> * Sets the button's active menu item.
- * @param {Ext.menu.CheckItem} item The item to activate
- * @param {Boolean} [suppressEvent=false] True to prevent the button's change event from firing.
- */
- setActiveItem: function(item, suppressEvent) {
- var me = this;
- if (!Ext.isObject(item)) {
- item = me.menu.getComponent(item);
- }
- if (item) {
- if (!me.rendered) {
- me.text = me.getButtonText(item);
- me.iconCls = item.iconCls;
- } else {
- me.setText(me.getButtonText(item));
- me.setIconCls(item.iconCls);
- }
- me.activeItem = item;
- if (!item.checked) {
- item.setChecked(true, false);
- }
- if (me.forceIcon) {
- me.setIconCls(me.forceIcon);
- }
- if (!suppressEvent) {
- me.fireEvent('change', me, item);
- }
- }
- },
- <span id='Ext-button-Cycle-method-getActiveItem'> /**
- </span> * Gets the currently active menu item.
- * @return {Ext.menu.CheckItem} The active item
- */
- getActiveItem: function() {
- return this.activeItem;
- },
- // private
- initComponent: function() {
- var me = this,
- checked = 0,
- items,
- i, iLen, item;
- me.addEvents(
- <span id='Ext-button-Cycle-event-change'> /**
- </span> * @event change
- * Fires after the button's active menu item has changed. Note that if a {@link #changeHandler} function is
- * set on this CycleButton, it will be called instead on active item change and this change event will not
- * be fired.
- * @param {Ext.button.Cycle} this
- * @param {Ext.menu.CheckItem} item The menu item that was selected
- */
- "change"
- );
- if (me.changeHandler) {
- me.on('change', me.changeHandler, me.scope || me);
- delete me.changeHandler;
- }
- // Allow them to specify a menu config which is a standard Button config.
- // Remove direct use of "items" in 5.0.
- items = (me.menu.items || []).concat(me.items || []);
- me.menu = Ext.applyIf({
- cls: Ext.baseCSSPrefix + 'cycle-menu',
- items: []
- }, me.menu);
- iLen = items.length;
- // Convert all items to CheckItems
- for (i = 0; i < iLen; i++) {
- item = items[i];
- item = Ext.applyIf({
- group : me.id,
- itemIndex : i,
- checkHandler : me.checkHandler,
- scope : me,
- checked : item.checked || false
- }, item);
- me.menu.items.push(item);
- if (item.checked) {
- checked = i;
- }
- }
- me.itemCount = me.menu.items.length;
- me.callParent(arguments);
- me.on('click', me.toggleSelected, me);
- me.setActiveItem(checked, me);
- // If configured with a fixed width, the cycling will center a different child item's text each click. Prevent this.
- if (me.width && me.showText) {
- me.addCls(Ext.baseCSSPrefix + 'cycle-fixed-width');
- }
- },
- // private
- checkHandler: function(item, pressed) {
- if (pressed) {
- this.setActiveItem(item);
- }
- },
- <span id='Ext-button-Cycle-method-toggleSelected'> /**
- </span> * This is normally called internally on button click, but can be called externally to advance the button's active
- * item programmatically to the next one in the menu. If the current item is the last one in the menu the active
- * item will be set to the first item in the menu.
- */
- toggleSelected: function() {
- var me = this,
- m = me.menu,
- checkItem;
- checkItem = me.activeItem.next(':not([disabled])') || m.items.getAt(0);
- checkItem.setChecked(true);
- }
- });</pre>
- </body>
- </html>
|