aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/gui/elements/MList.java
blob: cb7559631511cab258b659b9cbe3e06ca18a3d6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
 * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
 * Copyright (C) 2021  cyoung06
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package kr.syeyoung.dungeonsguide.gui.elements;

import kr.syeyoung.dungeonsguide.gui.MPanel;
import lombok.Getter;
import lombok.Setter;
import net.minecraft.client.gui.Gui;

import java.awt.*;

public class MList extends MPanel {
    @Getter
    private int gap = 5;

    @Getter @Setter
    private boolean drawLine = true;

    public void setGap(int gap) {
        this.gap = gap;
        realignChildren();
    }

    @Getter @Setter
    private int gapLineColor = 0xFFFFFFFF;

    public void realignChildren() {
        int y = 0;
        for (MPanel childComponent : getChildComponents()) {
            Dimension preferedSize = childComponent.getPreferredSize();
            int height = Math.max(10, preferedSize.height);
            childComponent.setBounds(new Rectangle(0, y, bounds.width, height));
            y += height;
            if (gap > 0)
                y += gap;
        }
        setSize(new Dimension(getSize().width, Math.max(0, y-gap)));
    }

    @Override
    public Dimension getPreferredSize() {
        int maxW = 0;
        int h = 0;
        for (MPanel childComponent : getChildComponents()) {
            Dimension preferedSize = childComponent.getPreferredSize();
            int height = Math.max(10, preferedSize.height);
            if (preferedSize.width > maxW) maxW = preferedSize.width;
            h += height;
            if (gap > 0) h += gap;
        }
        return new Dimension(maxW, Math.max(0, h-gap));
    }

    @Override
    public void render(int absMousex, int absMousey, int relMousex0, int relMousey0, float partialTicks, Rectangle scissor) {
        if (gap <= 0) return;
        if (!drawLine) return;
        for (int i = 1; i < getChildComponents().size(); i++) {
            MPanel panel = getChildComponents().get(i);
            Rectangle bound = panel.getBounds();
            int top = bound.y - (int)Math.ceil(gap/2.0);
            Gui.drawRect(0, top, getBounds().width, top + 1, gapLineColor);
        }
    }

    @Override
    public void add(MPanel child) {
        super.add(child);
        realignChildren();
    }

    @Override
    public void remove(MPanel panel) {
        super.remove(panel);
        realignChildren();
    }
}