summaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/tests/magi/DefaultButtonExample.java
blob: c41bbfdc5c5f221b77e8b816d8c54eb6c676ff34 (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
/* 
@ITMillApache2LicenseForJavaFiles@
 */

package com.itmill.toolkit.tests.magi;

import com.itmill.toolkit.event.Action;
import com.itmill.toolkit.event.ShortcutAction;
import com.itmill.toolkit.event.Action.Handler;
import com.itmill.toolkit.ui.Button;
import com.itmill.toolkit.ui.CustomComponent;
import com.itmill.toolkit.ui.Label;
import com.itmill.toolkit.ui.OrderedLayout;
import com.itmill.toolkit.ui.Panel;
import com.itmill.toolkit.ui.TextField;

public class DefaultButtonExample extends CustomComponent implements Handler {
    // Define and create user interface components
    Panel panel = new Panel("Login");
    OrderedLayout formlayout = new OrderedLayout(
            OrderedLayout.ORIENTATION_VERTICAL);
    TextField username = new TextField("Username");
    TextField password = new TextField("Password");
    OrderedLayout buttons = new OrderedLayout(
            OrderedLayout.ORIENTATION_HORIZONTAL);

    // Create buttons and define their listener methods. Here we use
    // parameterless
    // methods so that we can use same methods for both click events and
    // keyboard
    // actions.
    Button ok = new Button("OK", this, "okHandler");
    Button cancel = new Button("Cancel", this, "cancelHandler");

    public DefaultButtonExample() {
        // Set up the user interface
        setCompositionRoot(panel);
        panel.addComponent(formlayout);
        formlayout.addComponent(username);
        formlayout.addComponent(password);
        formlayout.setStyle("form");
        formlayout.addComponent(buttons);
        buttons.addComponent(ok);
        buttons.addComponent(cancel);

        // Set focus to username
        username.focus();

        // Set this object as the action handler for actions related to the Ok
        // and Cancel buttons.
        // @TODO
        // ok.addActionHandler(this);
        // cancel.addActionHandler(this);
    }

    /**
     * Retrieve actions for a specific component. This method will be called for
     * each object that has a handler; in this example the Ok and Cancel
     * buttons.
     */
    public Action[] getActions(Object target, Object sender) {
        final Action[] actions = new Action[1];

        // Set the action for the requested component
        if (sender == ok) {
            // Bind the unmodified Enter key to the Ok button.
            actions[0] = new ShortcutAction("Default key",
                    ShortcutAction.KeyCode.ENTER, null);
        } else if (sender == cancel) {
            // Bind "C" key modified with Alt to the Cancel button.
            actions[0] = new ShortcutAction("Alt+C", ShortcutAction.KeyCode.C,
                    new int[] { ShortcutAction.ModifierKey.ALT });
        } else {
            return null;
        }
        return actions;
    }

    /**
     * Handle actions received from keyboard. This simply directs the actions to
     * the same listener methods that are called with ButtonClick events.
     */
    public void handleAction(Action action, Object sender, Object target) {
        if (target == ok) {
            okHandler();
        }
        if (target == cancel) {
            cancelHandler();
        }
    }

    public void okHandler() {
        // Do something: report the click
        formlayout.addComponent(new Label("OK clicked"));
    }

    public void cancelHandler() {
        // Do something: report the click
        formlayout.addComponent(new Label("Cancel clicked"));
    }
}