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 @ 1987

History | View | Annotate | Download (5.87 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.List;
8
import java.util.function.Predicate;
9
import javax.swing.ImageIcon;
10
import javax.swing.JButton;
11
import javax.swing.JMenu;
12
import javax.swing.JMenuItem;
13
import javax.swing.JPopupMenu;
14
import org.apache.commons.lang3.StringUtils;
15
import org.gvsig.tools.ToolsLocator;
16
import org.gvsig.tools.bookmarksandhistory.History;
17
import org.gvsig.tools.i18n.I18nManager;
18
import org.gvsig.tools.swing.api.ToolsSwingLocator;
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

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

    
35
        private T currentValue;
36

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

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

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

    
62
    private final JButton button;
63
    private final History<T> history;
64
    private Predicate filter;
65
    private Boolean allowAddBookmarks;
66
    private T newValue;
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
        }
81
    }
82

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

    
89
    public JMenu createMenu() {
90
        I18nManager i18n = ToolsLocator.getI18nManager();
91
        JMenu menu = new JMenu(i18n.getTranslation("_History"));
92
        if (!history.isEmpty()) {
93
            for (T value : history.toList()) {
94
                if (value != null) {
95
                    menu.add(createHistoryMenuItem(value));
96
                }
97
            }
98
            menu.addSeparator();
99
        }
100
        JMenuItem showAllHistory = new JMenuItem(i18n.getTranslation("_Show_all_history"));
101
        showAllHistory.addActionListener(new ActionListener() {
102
            @Override
103
            public void actionPerformed(ActionEvent e) {
104
                doShowHistoryDialog();
105
            }
106
        });
107
        menu.add(showAllHistory);
108
        return menu;
109
    }
110

    
111
    private JMenuItem createHistoryMenuItem(final T value) {
112
        JMenuItem item = new JMenuItem(StringUtils.abbreviate(value.toString(), 45));
113
        item.addActionListener(new ActionListener() {
114
            @Override
115
            public void actionPerformed(ActionEvent e) {
116
                HistoryEventImpl event = new HistoryEventImpl(this, HistoryController.ID_SETVALUE, "set-value");
117
                event.setCurrentValue(value);
118
                DefaultHistoryController.this.fireActionEvent(event);
119
            }
120
        });
121
        return item;
122
    }
123

    
124
    private void doShowHistoryDialog() {
125
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
126
        final DefaultHistoryPanel<T> panel = new DefaultHistoryPanel<T>(history);
127
        final Dialog dialog = winManager.createDialog(
128
                panel,
129
                "History",
130
                null,
131
                WindowManager_v2.BUTTONS_OK_CANCEL
132
        );
133
        dialog.addActionListener(new ActionListener() {
134
            @Override
135
            public void actionPerformed(ActionEvent e) {
136
                if (dialog.getAction() != WindowManager_v2.BUTTON_OK) {
137
                    return;
138
                }
139
                T currentValue = panel.getSelectedValue();
140
                if (currentValue != null) {
141
                    HistoryEventImpl event = new HistoryEventImpl(this, HistoryController.ID_SETVALUE, "set-value");
142
                    event.setCurrentValue(currentValue);
143
                    DefaultHistoryController.this.fireActionEvent(event);
144
//                    updateValue((T) bookmark.getValue());
145
                }
146
            }
147
        });
148
        dialog.show(WindowManager.MODE.DIALOG);
149
    }
150

    
151
    @Override
152
    public void setFilter(Predicate filter) {
153
        this.filter = filter;
154
    }
155

    
156
    @Override
157
    public void setNewValueWithOutHistory(T newValue) {
158
        this.newValue = newValue;
159
    }
160

    
161
    @Override
162
    public History<T> get() {
163
        return this.history;
164
    }
165
}