summaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/demo/sampler/ModeSwitch.java
blob: 100679e73e6d295663110bf1976350e1ea276416 (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
94
95
96
97
98
99
100
101
102
103
104
105
package com.itmill.toolkit.demo.sampler;

import java.util.HashMap;
import java.util.Iterator;

import com.itmill.toolkit.terminal.Resource;
import com.itmill.toolkit.ui.Button;
import com.itmill.toolkit.ui.CustomComponent;
import com.itmill.toolkit.ui.OrderedLayout;
import com.itmill.toolkit.ui.Button.ClickEvent;

public class ModeSwitch extends CustomComponent {

    OrderedLayout layout = new OrderedLayout(
            OrderedLayout.ORIENTATION_HORIZONTAL);

    HashMap idToButton = new HashMap();
    Object mode = null;

    public ModeSwitch() {
        setCompositionRoot(layout);
        setStyleName("ModeSwitch");
    }

    public Object getMode() {
        return mode;
    }

    public void setMode(Object mode) {
        if (idToButton.containsKey(mode)) {
            this.mode = mode;
            updateStyles();
            fireEvent(new ModeSwitchEvent());
        }
    }

    public void addListener(ModeSwitchListener listener) {
        super.addListener(listener);
    }

    public void addMode(Object id, String caption, String description,
            Resource icon) {
        if (idToButton.containsKey(id)) {
            removeMode(id);
        }
        Button b = new Button();
        if (caption != null) {
            b.setCaption(caption);
        }
        if (description != null) {
            b.setDescription(description);
        }
        if (icon != null) {
            b.setIcon(icon);
        }
        b.setData(id);
        b.addListener(new Button.ClickListener() {
            public void buttonClick(ClickEvent event) {
                setMode(event.getButton().getData());
            }
        });
        idToButton.put(id, b);
        layout.addComponent(b);
        updateStyles();
    }

    public void removeMode(Object id) {
        Button b = (Button) idToButton.remove(id);
        layout.removeComponent(b);
        updateStyles();
    }

    private void updateStyles() {
        boolean first = true;
        for (Iterator it = layout.getComponentIterator(); it.hasNext();) {
            Button b = (Button) it.next();
            String isOn = (b.getData() == mode ? "-on" : "");
            if (first) {
                first = false;
                b.setStyleName("first" + isOn);
            } else if (!it.hasNext()) {
                b.setStyleName("last" + isOn);
            } else {
                b.setStyleName("mid" + isOn);
            }
        }
    }

    public interface ModeSwitchListener extends Listener {

    }

    public class ModeSwitchEvent extends Event {
        private static final long serialVersionUID = -576318750089478453L;

        public ModeSwitchEvent() {
            super(ModeSwitch.this);
        }

        public Object getMode() {
            return ModeSwitch.this.getMode();
        }
    }

}