source: josm/trunk/src/org/openstreetmap/josm/gui/Notification.java @ 6131

Last change on this file since 6131 was 6131, checked in by bastiK, 6 years ago

see #6963 - optional help button for notifications; use notifications in Simplify Way action

  • Property svn:eol-style set to native
File size: 5.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui;
3
4import java.awt.Component;
5
6import javax.swing.Icon;
7import javax.swing.JOptionPane;
8import javax.swing.UIManager;
9
10import org.openstreetmap.josm.Main;
11
12/**
13 * A Notification Message similar to a popup window, but without disrupting the
14 * user's workflow.
15 *
16 * Non-modal info panel that vanishes after a certain time.
17 *
18 * This class only holds the data for a notification, {@link NotificationManager}
19 * is responsible for building the message panel and displaying it on screen.
20 *
21 * example:
22 * <pre>
23 *      Notification note = new Notification("Hi there!");
24 *      note.setIcon(JOptionPane.INFORMATION_MESSAGE); // optional
25 *      note.setDuration(Notification.TIME_SHORT); // optional
26 *      note.show();
27 * </pre>
28 */
29public class Notification {
30
31    public final static int DEFAULT_CONTENT_WIDTH = 350;
32
33    // some standard duration values (in milliseconds)
34
35    /**
36     * Very short and very easy to grasp message (3 s).
37     * E.g. "Please select at least one node".
38     */
39    public final static int TIME_SHORT = Main.pref.getInteger("notification-time-short-ms", 3000);
40    /**
41     * Short message of one or two lines (5 s).
42     */
43    public final static int TIME_DEFAULT = Main.pref.getInteger("notification-time-default-ms", 5000);
44    /**
45     * Somewhat longer message (10 s).
46     */
47    public final static int TIME_LONG = Main.pref.getInteger("notification-time-long-ms", 10000);
48    /**
49     * Long text.
50     * (Make sure is still sensible to show as a notification)
51     */
52    public final static int TIME_VERY_LONG = Main.pref.getInteger("notification-time-very_long-ms", 20000);
53
54    private Component content;
55    private int duration;
56    private Icon icon;
57    private String helpTopic;
58
59    public Notification() {
60        duration = NotificationManager.defaultNotificationTime;
61    }
62
63    public Notification(String msg) {
64        this();
65        setContent(msg);
66    }
67
68    /**
69     * Set the content of the message.
70     *
71     * @param content any Component to be shown
72     *
73     * @see #setContent(java.lang.String)
74     * @return the current Object, for convenience
75     */
76    public Notification setContent(Component content) {
77        this.content = content;
78        return this;
79    }
80
81    /**
82     * Set the notification text. (Convenience method)
83     *
84     * @param msg the message String. Will be wrapped in &lt;html&gt;, so
85     * you can use &lt;br&gt; and other markup directly.
86     *
87     * @see #Notification(java.lang.String)
88     * @return the current Object, for convenience
89     */
90    public Notification setContent(String msg) {
91        JMultilineLabel lbl = new JMultilineLabel(msg);
92        lbl.setMaxWidth(DEFAULT_CONTENT_WIDTH);
93        content = lbl;
94        return this;
95    }
96
97    /**
98     * Set the time after which the message is hidden.
99     *
100     * @param duration the time (in milliseconds)
101     * Preset values {@link #TIME_SHORT}, {@link #TIME_DEFAULT}, {@link #TIME_LONG}
102     * and {@link #TIME_VERY_LONG} can be used.
103     * @return the current Object, for convenience
104     */
105    public Notification setDuration(int duration) {
106        this.duration = duration;
107        return this;
108    }
109
110    /**
111     * Set an icon to display on the left part of the message window.
112     *
113     * @param icon the icon (null means no icon is displayed)
114     * @return the current Object, for convenience
115     */
116    public Notification setIcon(Icon icon) {
117        this.icon = icon;
118        return this;
119    }
120
121    /**
122     * Set an icon to display on the left part of the message window by
123     * choosing from the default JOptionPane icons.
124     *
125     * @param messageType one of the following: JOptionPane.ERROR_MESSAGE,
126     * JOptionPane.INFORMATION_MESSAGE, JOptionPane.WARNING_MESSAGE,
127     * JOptionPane.QUESTION_MESSAGE, JOptionPane.PLAIN_MESSAGE
128     * @return the current Object, for convenience
129     */
130    public Notification setIcon(int messageType) {
131        switch (messageType) {
132            case JOptionPane.ERROR_MESSAGE:
133                return setIcon(UIManager.getIcon("OptionPane.errorIcon"));
134            case JOptionPane.INFORMATION_MESSAGE:
135                return setIcon(UIManager.getIcon("OptionPane.informationIcon"));
136            case JOptionPane.WARNING_MESSAGE:
137                return setIcon(UIManager.getIcon("OptionPane.warningIcon"));
138            case JOptionPane.QUESTION_MESSAGE:
139                return setIcon(UIManager.getIcon("OptionPane.questionIcon"));
140            case JOptionPane.PLAIN_MESSAGE:
141                return setIcon(null);
142            default:
143                throw new IllegalArgumentException("Unknown message type!");
144        }
145    }
146
147    /**
148     * Display a help button at the bottom of the notification window.
149     * @param helpTopic the help topic
150     * @return the current Object, for convenience
151     */
152    public Notification setHelpTopic(String helpTopic) {
153        this.helpTopic = helpTopic;
154        return this;
155    }
156
157    public Component getContent() {
158        return content;
159    }
160
161    public int getDuration() {
162        return duration;
163    }
164
165    public Icon getIcon() {
166        return icon;
167    }
168
169    public String getHelpTopic() {
170        return helpTopic;
171    }
172
173    /**
174     * Display the notification.
175     */
176    public void show() {
177        NotificationManager.getInstance().showNotification(this);
178    }
179}
Note: See TracBrowser for help on using the repository browser.