@Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        // slots
        for (int i=0; i<slotList.size(); ++i)
        {
            Slot slot = slotList.get(i);
            slot.draw(g);          
        }

        // dragged slots
        for (int i=0; i<slotList.size(); ++i)
        {
            Slot draggedSlot = slotList.get(i);
            if (draggedSlot.isDragged() && draggedSlot.getDragImage() != null)
            {
                g.drawImage(draggedSlot.getDragImage(), mousePoint.x, draggedSlot.getRect().y, null);

                if (insertBeforeSlotIndex >= 0)
                {
                    g.setColor(Color.RED);
                    int insertXPos = 0;

                    if (insertBeforeSlotIndex < slotList.size())
                    {
                        insertXPos = slotList.get(insertBeforeSlotIndex).getRect().x;
                    }
                    else if (insertBeforeSlotIndex == slotList.size())
                    {
                        // last slot, draw inser marker at end
                        Rectangle slotRect = slotList.get(insertBeforeSlotIndex-1).getRect();
                        insertXPos = slotRect.x + slotRect.width;
                    }

                    g.fillRect(insertXPos-1, 0, 3, this.getHeight());
                }
            }
        }

        // animation marker
        g.setColor(Color.BLUE);
        for (int i=0; i<slotList.size(); ++i)
        {
            if (i == currentSlotInAnimation)
            {
                Slot slot = slotList.get(i);
                Rectangle r = slot.getRect();

                g.drawRect(r.x, r.y, r.width, r.height);
            }
        }

    }