code: function (toggle) {
          var self = this, menu;
  
          if (self.menu && self.menu.visible() && toggle !== false) {
            return self.hideMenu();
          }
  
          if (!self.menu) {
            menu = self.state.get('menu') || [];
  
            // Is menu array then auto constuct menu control
            if (menu.length) {
              menu = {
                type: 'menu',
                items: menu
              };
            } else {
              menu.type = menu.type || 'menu';
            }
  
            if (!menu.renderTo) {
              self.menu = Factory.create(menu).parent(self).renderTo();
            } else {
              self.menu = menu.parent(self).show().renderTo();
            }
  
            self.fire('createmenu');
            self.menu.reflow();
            self.menu.on('cancel', function (e) {
              if (e.control.parent() === self.menu) {
                e.stopPropagation();
                self.focus();
                self.hideMenu();
              }
            });
  
            // Move focus to button when a menu item is selected/clicked
            self.menu.on('select', function () {
              self.focus();
            });
  
            self.menu.on('show hide', function (e) {
              if (e.control == self.menu) {
                self.activeMenu(e.type == 'show');
              }
  
              self.aria('expanded', e.type == 'show');
            }).fire('show');
          }
  
          self.menu.show();
          self.menu.layoutRect({ w: self.layoutRect().w });
          self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']);
          self.fire('showmenu');
        }
docs: Shows the menu for the button.
  
  @method showMenu