public ActionButtonSubmenu(ActionMenuPresenter _enclosing, android.content.Context context, [email protected] subMenu) : base(context, subMenu ) { this._enclosing = _enclosing; this.mSubMenu = subMenu; [email protected] item = ([email protected] )subMenu.getItem(); if (!item.isActionButton()) { // Give a reasonable anchor to nested submenus. this.setAnchorView(this._enclosing.mOverflowButton == null ? (android.view.View) this ._enclosing.mMenuView : this._enclosing.mOverflowButton); } this.setCallback(this._enclosing.mPopupPresenterCallback); bool preserveIconSpacing = false; int count = subMenu.size(); { for (int i = 0; i < count; i++) { android.view.MenuItem childItem = subMenu.getItem(i); if (childItem.isVisible() && childItem.getIcon() != null) { preserveIconSpacing = true; break; } } } this.setForceShowIcon(preserveIconSpacing); }
public void initialize([email protected] itemData, int menuType ) { mItemData = itemData; initialize(itemData.getTitleForItemView(this), itemData.getIcon()); setVisibility(itemData.isVisible() ? android.view.View.VISIBLE : android.view.View .GONE); setEnabled(itemData.isEnabled()); }
public override bool shouldIncludeItem(int childIndex, [email protected] item) { java.util.ArrayList <*****@*****.**> itemsToShow = mMenu .getNonActionItems(); bool fits = (itemsToShow.size() == mMaxItems && childIndex < mMaxItems) || childIndex < mMaxItems - 1; return(fits && !item.isActionButton()); }
public override void bindItemView([email protected] item, [email protected] itemView) { itemView.initialize(item, 0); [email protected] menuView = ([email protected] )mMenuView; [email protected] actionItemView = ([email protected] )itemView; actionItemView.setItemInvoker(menuView); }
public virtual void initialize([email protected] itemData, int menuType) { mItemData = itemData; setIcon(itemData.getIcon()); setTitle(itemData.getTitleForItemView(this)); // Title only takes effect if there is no icon setId(itemData.getItemId()); setVisibility(itemData.isVisible() ? android.view.View.VISIBLE : android.view.View .GONE); setEnabled(itemData.isEnabled()); }
public override void bindItemView([email protected] item, [email protected] itemView) { [email protected] view = ([email protected] )itemView; view.setItemData(item); view.initialize(item.getTitleForItemView(view), item.getIcon()); view.setVisibility(item.isVisible() ? android.view.View.VISIBLE : android.view.View .GONE); view.setEnabled(view.isEnabled()); view.setLayoutParams(view.getTextAppropriateLayoutParams()); }
public virtual void initialize([email protected] itemData, int menuType) { mItemData = itemData; mMenuType = menuType; setVisibility(itemData.isVisible() ? android.view.View.VISIBLE : android.view.View .GONE); setTitle(itemData.getTitleForItemView(this)); setCheckable(itemData.isCheckable()); setShortcut(itemData.shouldShowShortcut(), itemData.getShortcut()); setIcon(itemData.getIcon()); setEnabled(itemData.isEnabled()); }
/// <summary>Prepare an item view for use.</summary> /// <remarks> /// Prepare an item view for use. See AdapterView for the basic idea at work here. /// This may require creating a new item view, but well-behaved implementations will /// re-use the view passed as convertView if present. The returned view will be populated /// with data from the item parameter. /// </remarks> /// <param name="item">Item to present</param> /// <param name="convertView">Existing view to reuse</param> /// <param name="parent">Intended parent view - use for inflation.</param> /// <returns>View that presents the requested menu item</returns> public virtual android.view.View getItemView([email protected] item, android.view.View convertView, android.view.ViewGroup parent) { [email protected] itemView; if (convertView is [email protected]) { itemView = ([email protected])convertView; } else { itemView = createItemView(parent); } bindItemView(item, itemView); return((android.view.View)itemView); }
public virtual void updateMenuView(bool cleared) { android.view.ViewGroup parent = (android.view.ViewGroup)mMenuView; if (parent == null) { return; } int childIndex = 0; if (mMenu != null) { mMenu.flagActionItems(); java.util.ArrayList <*****@*****.**> visibleItems = mMenu .getVisibleItems(); int itemCount = visibleItems.size(); { for (int i = 0; i < itemCount; i++) { [email protected] item = visibleItems.get(i); if (shouldIncludeItem(childIndex, item)) { android.view.View convertView = parent.getChildAt(childIndex); android.view.View itemView = getItemView(item, convertView, parent); if (itemView != convertView) { addItemView(itemView, childIndex); } childIndex++; } } } } // Remove leftover views. while (childIndex < parent.getChildCount()) { if (!filterLeftoverView(parent, childIndex)) { childIndex++; } } }
internal virtual void findExpandedIndex() { [email protected] expandedItem = this._enclosing.mMenu.getExpandedItem (); if (expandedItem != null) { java.util.ArrayList <*****@*****.**> items = this._enclosing .mMenu.getNonActionItems(); int count = items.size(); { for (int i = 0; i < count; i++) { [email protected] item = items.get(i); if (item == expandedItem) { this.mExpandedIndex = i; return; } } } } this.mExpandedIndex = -1; }
public override android.view.View getItemView([email protected] item, android.view.View convertView, android.view.ViewGroup parent) { android.view.View actionView = item.getActionView(); if (actionView == null || item.hasCollapsibleActionView()) { if (!(convertView is [email protected])) { convertView = null; } actionView = base.getItemView(item, convertView, parent); } actionView.setVisibility(item.isActionViewExpanded() ? android.view.View.GONE : android.view.View .VISIBLE); [email protected] menuParent = ([email protected] )parent; android.view.ViewGroup.LayoutParams lp = actionView.getLayoutParams(); if (!menuParent.checkLayoutParams(lp)) { actionView.setLayoutParams((([email protected] )menuParent.generateLayoutParams(lp))); } return(actionView); }
public override bool shouldIncludeItem(int childIndex, [email protected] item) { return(item.isActionButton()); }
public virtual bool invokeItem([email protected] item) { return(mMenu.performItemAction(item, 0)); }
/// <summary>Filter item by child index and item data.</summary> /// <remarks>Filter item by child index and item data.</remarks> /// <param name="childIndex">Indended presentation index of this item</param> /// <param name="item">Item to present</param> /// <returns>true if this item should be included in this menu presentation; false otherwise /// </returns> public virtual bool shouldIncludeItem(int childIndex, [email protected] item) { return(true); }
public virtual bool collapseItemActionView([email protected] menu, [email protected] item) { return(false); }
public override bool flagActionItems() { java.util.ArrayList <*****@*****.**> visibleItems = mMenu .getVisibleItems(); int itemsSize = visibleItems.size(); int maxActions = mMaxItems; int widthLimit = mActionItemWidthLimit; int querySpec = android.view.View.MeasureSpec.makeMeasureSpec(0, android.view.View .MeasureSpec.UNSPECIFIED); android.view.ViewGroup parent = (android.view.ViewGroup)mMenuView; int requiredItems = 0; int requestedItems = 0; int firstActionWidth = 0; bool hasOverflow = false; { for (int i = 0; i < itemsSize; i++) { [email protected] item = visibleItems.get(i); if (item.requiresActionButton()) { requiredItems++; } else { if (item.requestsActionButton()) { requestedItems++; } else { hasOverflow = true; } } if (mExpandedActionViewsExclusive && item.isActionViewExpanded()) { // Overflow everything if we have an expanded action view and we're // space constrained. maxActions = 0; } } } // Reserve a spot for the overflow item if needed. if (mReserveOverflow && (hasOverflow || requiredItems + requestedItems > maxActions )) { maxActions--; } maxActions -= requiredItems; android.util.SparseBooleanArray seenGroups = mActionButtonGroups; seenGroups.clear(); int cellSize = 0; int cellsRemaining = 0; if (mStrictWidthLimit) { cellsRemaining = widthLimit / mMinCellSize; int cellSizeRemaining = widthLimit % mMinCellSize; cellSize = mMinCellSize + cellSizeRemaining / cellsRemaining; } { // Flag as many more requested items as will fit. for (int i_1 = 0; i_1 < itemsSize; i_1++) { [email protected] item = visibleItems.get(i_1); if (item.requiresActionButton()) { android.view.View v = getItemView(item, mScrapActionButtonView, parent); if (mScrapActionButtonView == null) { mScrapActionButtonView = v; } if (mStrictWidthLimit) { cellsRemaining -= [email protected] (v, cellSize, cellsRemaining, querySpec, 0); } else { v.measure(querySpec, querySpec); } int measuredWidth = v.getMeasuredWidth(); widthLimit -= measuredWidth; if (firstActionWidth == 0) { firstActionWidth = measuredWidth; } int groupId = item.getGroupId(); if (groupId != 0) { seenGroups.put(groupId, true); } item.setIsActionButton(true); } else { if (item.requestsActionButton()) { // Items in a group with other items that already have an action slot // can break the max actions rule, but not the width limit. int groupId = item.getGroupId(); bool inGroup = seenGroups.get(groupId); bool isAction = (maxActions > 0 || inGroup) && widthLimit > 0 && (!mStrictWidthLimit || cellsRemaining > 0); if (isAction) { android.view.View v = getItemView(item, mScrapActionButtonView, parent); if (mScrapActionButtonView == null) { mScrapActionButtonView = v; } if (mStrictWidthLimit) { int cells = [email protected](v, cellSize , cellsRemaining, querySpec, 0); cellsRemaining -= cells; if (cells == 0) { isAction = false; } } else { v.measure(querySpec, querySpec); } int measuredWidth = v.getMeasuredWidth(); widthLimit -= measuredWidth; if (firstActionWidth == 0) { firstActionWidth = measuredWidth; } if (mStrictWidthLimit) { isAction &= widthLimit >= 0; } else { // Did this push the entire first item past the limit? isAction &= widthLimit + firstActionWidth > 0; } } if (isAction && groupId != 0) { seenGroups.put(groupId, true); } else { if (inGroup) { // We broke the width limit. Demote the whole group, they all overflow now. seenGroups.put(groupId, false); { for (int j = 0; j < i_1; j++) { [email protected] areYouMyGroupie = visibleItems.get(j); if (areYouMyGroupie.getGroupId() == groupId) { // Give back the action slot if (areYouMyGroupie.isActionButton()) { maxActions++; } areYouMyGroupie.setIsActionButton(false); } } } } } if (isAction) { maxActions--; } item.setIsActionButton(isAction); } } } } return(true); }
/// <summary>Bind item data to an existing item view.</summary> /// <remarks>Bind item data to an existing item view.</remarks> /// <param name="item">Item to bind</param> /// <param name="itemView">View to populate with item data</param> public abstract void bindItemView([email protected] item, [email protected] itemView);
public SubMenuBuilder(android.content.Context context, [email protected] parentMenu, [email protected] item) : base(context) { mParentMenu = parentMenu; mItem = item; }
public override bool collapseItemActionView([email protected] item) { return(mParentMenu.collapseItemActionView(item)); }
public void setItemData([email protected] data) { mItemData = data; }
public virtual bool collapseItemActionView([email protected] item) { if (mPresenters.isEmpty() || mExpandedItem != item) { return false; } bool collapsed = false; stopDispatchingItemsChanged(); foreach ([email protected]<*****@*****.**> @ref in Sharpen.IterableProxy.Create(mPresenters)) { [email protected] presenter = @ref.get(); if (presenter == null) { mPresenters.remove(@ref); } else { if ((collapsed = presenter.collapseItemActionView(this, item))) { break; } } } startDispatchingItemsChanged(); if (collapsed) { mExpandedItem = null; } return collapsed; }
/// <summary>Adds an item to the menu.</summary> /// <remarks>Adds an item to the menu. The other add methods funnel to this.</remarks> private android.view.MenuItem addInternal(int group, int id, int categoryOrder, java.lang.CharSequence title) { int ordering = getOrdering(categoryOrder); [email protected] item = new [email protected] (this, group, id, categoryOrder, ordering, title, mDefaultShowAsAction); if (mCurrentMenuInfo != null) { // Pass along the current menu info item.setMenuInfo(mCurrentMenuInfo); } mItems.add(findInsertIndex(mItems, ordering), item); onItemsChanged(true); return item; }