public ShowcaseContainer(
            Showcase showcase,
            List <Item> items,
            int capacity,
            int rows,
            InventoryMenu.highlightThisItem isItemEnabled,
            bool allowColoring)
            : base(items, capacity, rows, null, isItemEnabled)
        {
            Items = items;
            this.SetFieldValue <behaviorOnItemChange>(ItemChangeBehaviorField, ProcessItemChanged);
            ItemsToGrabMenu.movePosition(0, (3 - rows) * Game1.tileSize);

            if (!allowColoring)
            {
                return;
            }
            ColorPicker = new ShowcaseColorPicker(xPositionOnScreen, yPositionOnScreen - Game1.tileSize - borderWidth * 2, showcase);
        }
        protected void DrawMenu(SpriteBatch b)
        {
            if (drawBG)
            {
                b.Draw(Game1.fadeToBlackRect, new Rectangle(0, 0, Game1.uiViewport.Width, Game1.uiViewport.Height),
                       Color.Black * 0.5f);
            }

            draw(b, false, false);

            if (showReceivingMenu)
            {
                b.Draw(Game1.mouseCursors,
                       new Vector2(xPositionOnScreen - 64,
                                   yPositionOnScreen + height / 2 + 64 + 16),
                       new Rectangle(16, 368, 12, 16), Color.White, 4.712389f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
                b.Draw(Game1.mouseCursors,
                       new Vector2(xPositionOnScreen - 64,
                                   yPositionOnScreen + height / 2 + 64 - 16),
                       new Rectangle(21, 368, 11, 16), Color.White, 4.712389f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
                b.Draw(Game1.mouseCursors,
                       new Vector2(xPositionOnScreen - 40,
                                   yPositionOnScreen + height / 2 + 64 - 44),
                       new Rectangle(4, 372, 8, 11), Color.White, 0.0f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
                if ((source != 1 || !(SourceItem is Chest) ||
                     ((Chest)SourceItem).SpecialChestType != Chest.SpecialChestTypes.MiniShippingBin &&
                     ((Chest)SourceItem).SpecialChestType != Chest.SpecialChestTypes.JunimoChest &&
                     ((Chest)SourceItem).SpecialChestType != Chest.SpecialChestTypes.Enricher) &&
                    source != 0)
                {
                    b.Draw(Game1.mouseCursors,
                           new Vector2(xPositionOnScreen - 72, yPositionOnScreen + 64 + 16),
                           new Rectangle(16, 368, 12, 16), Color.White, 4.712389f, Vector2.Zero, 4f,
                           SpriteEffects.None, 1f);
                    b.Draw(Game1.mouseCursors,
                           new Vector2(xPositionOnScreen - 72, yPositionOnScreen + 64 - 16),
                           new Rectangle(21, 368, 11, 16), Color.White, 4.712389f, Vector2.Zero, 4f,
                           SpriteEffects.None, 1f);
                    Rectangle rectangle = new Rectangle(sbyte.MaxValue, 412, 10, 11);
                    switch (source)
                    {
                    case 2:
                        rectangle.X += 20;
                        break;

                    case 3:
                        rectangle.X += 10;
                        break;
                    }

                    b.Draw(Game1.mouseCursors,
                           new Vector2(xPositionOnScreen - 52, yPositionOnScreen + 64 - 44),
                           rectangle, Color.White, 0.0f, Vector2.Zero, 4f, SpriteEffects.None, 1f);
                }

                Game1.drawDialogueBox(
                    ItemsToGrabMenu.xPositionOnScreen - borderWidth - spaceToClearSideBorder,
                    ItemsToGrabMenu.yPositionOnScreen - borderWidth - spaceToClearTopBorder,
                    ItemsToGrabMenu.width + borderWidth * 2 + spaceToClearSideBorder * 2,
                    ItemsToGrabMenu.height + spaceToClearTopBorder + borderWidth * 2,
                    false, true);
                ItemsToGrabMenu.draw(b);
            }
            else if (Message != null)
            {
                Game1.drawDialogueBox(Game1.uiViewport.Width / 2,
                                      ItemsToGrabMenu.yPositionOnScreen + ItemsToGrabMenu.height / 2, false, false,
                                      Message);
            }

            Poof?.draw(b, true);

            foreach (TransferredItemSprite transferredItemSprite in _transferredItemSprites)
            {
                transferredItemSprite.Draw(b);
            }

            if (shippingBin && Game1.getFarm().lastItemShipped != null)
            {
                lastShippedHolder.draw(b);
                Game1.getFarm().lastItemShipped.drawInMenu(b,
                                                           new Vector2(lastShippedHolder.bounds.X + 16,
                                                                       lastShippedHolder.bounds.Y + 16), 1f);
                b.Draw(Game1.mouseCursors,
                       new Vector2(lastShippedHolder.bounds.X - 8,
                                   lastShippedHolder.bounds.Bottom - 100),
                       new Rectangle(325, 448, 5, 14), Color.White, 0.0f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
                b.Draw(Game1.mouseCursors,
                       new Vector2(lastShippedHolder.bounds.X + 84,
                                   lastShippedHolder.bounds.Bottom - 100),
                       new Rectangle(325, 448, 5, 14), Color.White, 0.0f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
                b.Draw(Game1.mouseCursors,
                       new Vector2(lastShippedHolder.bounds.X - 8,
                                   lastShippedHolder.bounds.Bottom - 44),
                       new Rectangle(325, 452, 5, 13), Color.White, 0.0f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
                b.Draw(Game1.mouseCursors,
                       new Vector2(lastShippedHolder.bounds.X + 84,
                                   lastShippedHolder.bounds.Bottom - 44),
                       new Rectangle(325, 452, 5, 13), Color.White, 0.0f, Vector2.Zero, 4f,
                       SpriteEffects.None, 1f);
            }

            if (colorPickerToggleButton != null)
            {
                colorPickerToggleButton.draw(b);
            }
            else
            {
                specialButton?.draw(b);
            }

            chestColorPicker?.draw(b);

            organizeButton?.draw(b);

            fillStacksButton?.draw(b);

            junimoNoteIcon?.draw(b);

            if (hoverText != null && (hoveredItem == null || ItemsToGrabMenu == null))
            {
                if (hoverAmount > 0)
                {
                    drawToolTip(b, hoverText, "", null, true,
                                moneyAmountToShowAtBottom: hoverAmount);
                }
                else
                {
                    drawHoverText(b, hoverText, Game1.smallFont);
                }
            }

            if (hoveredItem != null)
            {
                drawToolTip(b, hoveredItem.getDescription(), hoveredItem.DisplayName, hoveredItem, heldItem != null);
            }
            else if (hoveredItem != null && ItemsToGrabMenu != null)
            {
                drawToolTip(b, ItemsToGrabMenu.descriptionText, ItemsToGrabMenu.descriptionTitle, hoveredItem,
                            heldItem != null);
            }

            heldItem?.drawInMenu(b, new Vector2(Game1.getOldMouseX() + 8, Game1.getOldMouseY() + 8), 1f);

            Game1.mouseCursorTransparency = 1f;
            drawMouse(b);
        }