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

History | View | Annotate | Download (6.31 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.util.function.Predicate;
7
import javax.swing.JButton;
8
import javax.swing.JMenu;
9
import javax.swing.JMenuItem;
10
import javax.swing.JPopupMenu;
11
import org.apache.commons.lang3.StringUtils;
12
import org.gvsig.tools.ToolsLocator;
13
import org.gvsig.tools.bookmarksandhistory.History;
14
import org.gvsig.tools.i18n.I18nManager;
15
import org.gvsig.tools.swing.api.ToolsSwingLocator;
16
import org.gvsig.tools.swing.api.ToolsSwingUtils;
17
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE;
18
import org.gvsig.tools.swing.api.bookmarkshistory.HistoryController;
19
import org.gvsig.tools.swing.api.windowmanager.Dialog;
20
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
21
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
22
import org.gvsig.tools.swing.impl.DefaultActionListenerSupport;
23
import static org.gvsig.tools.swing.impl.ToolsSwingDefaultImplLibrary.LIBRARY_NAME;
24
import org.gvsig.tools.util.LabeledValue;
25

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

    
33
        private T currentValue;
34

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

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

    
49
    }
50
            
51
            
52
    public static void selfRegister() {
53
        ToolsSwingUtils.registerIcons(
54
                DefaultBookmarksController.class, 
55
                "/org/gvsig/tools/swing/bookmarkandhistory", 
56
                LIBRARY_NAME, 
57
                new String[] { "picker", "picker-history", "Historico" }
58
        );
59
        ToolsSwingUtils.registerSubgroupIconDescription("picker","Historico","Permite acceder al hist?rico del dialogo o componente en el que se encuentra. Por ejemplo en la ficha de b?squeda permite acceder a las b?squedas anteriores, o junto al bot?n del constructor de expresiones permite acceder al hist?rico de las expresiones introducidas.");
60
        
61
    }
62

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

    
67
    public DefaultHistoryController(History<T> history, JButton button) {
68
        this.history = history;
69
        this.button = button;
70
        if (this.button != null) {
71
            ToolsSwingUtils.configurePickersButton(
72
                    this.button, 
73
                    null, 
74
                    "picker-history", 
75
                    (ActionEvent e) -> { doHistory(); }, 
76
                    null
77
            );
78
        }
79
    }
80

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

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

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

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

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

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