Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.impl / src / main / java / org / gvsig / tools / swing / impl / bookmarkshistory / DefaultHistoryController.java @ 2046

History | View | Annotate | Download (6.38 KB)

1
package org.gvsig.tools.swing.impl.bookmarkshistory;
2

    
3
import java.awt.Point;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.net.URL;
7
import java.util.function.Predicate;
8
import javax.swing.ImageIcon;
9
import javax.swing.JButton;
10
import javax.swing.JMenu;
11
import javax.swing.JMenuItem;
12
import javax.swing.JPopupMenu;
13
import org.apache.commons.lang3.StringUtils;
14
import org.gvsig.tools.ToolsLocator;
15
import org.gvsig.tools.bookmarksandhistory.History;
16
import org.gvsig.tools.i18n.I18nManager;
17
import org.gvsig.tools.swing.api.ToolsSwingLocator;
18
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE;
19
import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
20
import org.gvsig.tools.swing.api.windowmanager.Dialog;
21
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
22
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
23
import org.gvsig.tools.swing.icontheme.IconTheme;
24
import org.gvsig.tools.swing.icontheme.IconThemeManager;
25
import org.gvsig.tools.swing.impl.DefaultActionListenerSupport;
26
import org.gvsig.tools.swing.impl.pickercontroller.DatePickerControllerImpl;
27
import org.gvsig.tools.util.LabeledValue;
28

    
29
/**
30
 *
31
 * @author jjdelcerro
32
 */
33
public class DefaultHistoryController<T> extends DefaultActionListenerSupport implements HistoryController<T> {
34
    public class HistoryEventImpl<T> extends ActionEvent implements HistoryEvent<T> {
35

    
36
        private T currentValue;
37

    
38
        public HistoryEventImpl(Object source, int id, String command) {
39
            super(source, id, command);
40
        }
41

    
42
        @Override
43
        public void setCurrentValue(T value) {
44
            this.currentValue = value;
45
        }
46
        
47
        @Override
48
        public T getCurrentValue() {
49
            return this.currentValue;
50
        }
51

    
52
    }
53
            
54
            
55
    public static void selfRegister() {
56
        URL imageResource = DatePickerControllerImpl.class.getClassLoader().getResource("org/gvsig/tools/swing/bookmarkandhistory/history-clock.png");
57
        if (imageResource != null) {
58
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
59
            IconTheme theme = iconThemeManager.getCurrent();
60
            ImageIcon icon = new ImageIcon(imageResource);
61
            theme.registerDefault("tools", "bookmarkandhistory", "history-clock", icon, imageResource);
62
        }}
63

    
64
    private final JButton button;
65
    private final History<T> history;
66
    private Predicate filter;
67

    
68
    public DefaultHistoryController(History<T> history, JButton button) {
69
        this.history = history;
70
        this.button = button;
71
        if (this.button != null) {
72
            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
73
            this.button.setIcon(iconTheme.get("history-clock"));
74
            this.button.addActionListener(new ActionListener() {
75
                @Override
76
                public void actionPerformed(ActionEvent e) {
77
                    doHistory();
78
                }
79
            });
80
            if( "...".equals(this.button.getText()) ) {
81
                this.button.setText("");
82
            }
83
        }
84
    }
85

    
86
    private void doHistory() {
87
        JPopupMenu popup = createMenu().getPopupMenu();
88
        Point p = this.button.getLocationOnScreen();
89
        popup.show(this.button, 0, this.button.getHeight());
90
    }
91

    
92
    public JMenu createMenu() {
93
        I18nManager i18n = ToolsLocator.getI18nManager();
94
        JMenu menu = new JMenu(i18n.getTranslation("_History"));
95
        boolean needSeparator = false;
96
        if (!history.isEmpty()) {
97
            for (T value : history.toList()) {
98
                if (value != null) {
99
                    JMenuItem item = createHistoryMenuItem(value);
100
                    if( filter!=null && !filter.test(value) ) {
101
                        item.setEnabled(false);
102
                    }
103
                    menu.add(item);
104
                    needSeparator = true;
105
                }
106
            }
107
            
108
        }
109
        if( needSeparator ) {
110
            menu.addSeparator();
111
            needSeparator = false;
112
        }
113
        JMenuItem showAllHistory = new JMenuItem(i18n.getTranslation("_Show_all_history"));
114
        showAllHistory.addActionListener(new ActionListener() {
115
            @Override
116
            public void actionPerformed(ActionEvent e) {
117
                doShowHistoryDialog();
118
            }
119
        });
120
        menu.add(showAllHistory);
121
        needSeparator = true;
122
        return menu;
123
    }
124

    
125
    private JMenuItem createHistoryMenuItem(final T value) {
126
        String label;
127
        if( value instanceof LabeledValue ) {
128
            label = ((LabeledValue)value).getLabel();
129
        } else {
130
            label = value.toString();
131
        }
132
        label = StringUtils.abbreviate(label, 45);
133
        JMenuItem item = new JMenuItem(label);
134
        item.addActionListener(new ActionListener() {
135
            @Override
136
            public void actionPerformed(ActionEvent e) {
137
                HistoryEventImpl event = new HistoryEventImpl(this, ID_SETVALUE, "set-value");
138
                event.setCurrentValue(value);
139
                fireActionEvent(event);
140
            }
141
        });
142
        return item;
143
    }
144

    
145
    private void doShowHistoryDialog() {
146
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
147
        final DefaultHistoryPanel<T> panel = new DefaultHistoryPanel<>(history);
148
        final Dialog dialog = winManager.createDialog(
149
                panel,
150
                "History",
151
                null,
152
                WindowManager_v2.BUTTONS_OK_CANCEL
153
        );
154
        dialog.addActionListener(new ActionListener() {
155
            @Override
156
            public void actionPerformed(ActionEvent e) {
157
                if (dialog.getAction() != WindowManager_v2.BUTTON_OK) {
158
                    return;
159
                }
160
                T currentValue = panel.getSelectedValue();
161
                if (currentValue != null) {
162
                    HistoryEventImpl event = new HistoryEventImpl(this, ID_SETVALUE, "set-value");
163
                    event.setCurrentValue(currentValue);
164
                    DefaultHistoryController.this.fireActionEvent(event);
165
                }
166
            }
167
        });
168
        dialog.show(WindowManager.MODE.DIALOG);
169
    }
170

    
171
    @Override
172
    public void setFilter(Predicate filter) {
173
        this.filter = filter;
174
    }
175

    
176
    @Override
177
    public History<T> get() {
178
        return this.history;
179
    }
180
}