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 / DefaultBookmarksController.java @ 2339

History | View | Annotate | Download (8.71 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.JOptionPane;
13
import javax.swing.JPopupMenu;
14
import org.apache.commons.lang3.StringUtils;
15
import org.gvsig.tools.ToolsLocator;
16
import org.gvsig.tools.bookmarksandhistory.Bookmark;
17
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
18
import org.gvsig.tools.i18n.I18nManager;
19
import org.gvsig.tools.swing.api.ToolsSwingLocator;
20
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_GETVALUE;
21
import static org.gvsig.tools.swing.api.bookmarkshistory.ActionEventWithCurrentValue.ID_SETVALUE;
22
import org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
23
import org.gvsig.tools.swing.api.windowmanager.Dialog;
24
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
25
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
26
import org.gvsig.tools.swing.icontheme.IconTheme;
27
import org.gvsig.tools.swing.icontheme.IconThemeManager;
28
import org.gvsig.tools.swing.impl.DefaultActionListenerSupport;
29
import org.gvsig.tools.swing.impl.pickercontroller.DatePickerControllerImpl;
30

    
31
/**
32
 *
33
 * @author jjdelcerro
34
 */
35
public class DefaultBookmarksController<T>
36
        extends DefaultActionListenerSupport
37
        implements BookmarksController<T> {
38

    
39
    public class BookmarkEventImpl<T> extends ActionEvent implements BookmarkEvent<T> {
40

    
41
        private T currentValue;
42

    
43
        public BookmarkEventImpl(Object source, int id, String command) {
44
            super(source, id, command);
45
        }
46

    
47
        @Override
48
        public void setCurrentValue(T value) {
49
            this.currentValue = value;
50
        }
51

    
52
        @Override
53
        public T getCurrentValue() {
54
            return currentValue;
55
        }
56

    
57
    }
58
    private final JButton btnBookmarks;
59
    public Bookmarks<T> bookmarks;
60
    private Predicate filter;
61
    private Boolean allowAddBookmarks;
62
    private int LIMIT_BOOKMARKS_TO_SHOW = 15;
63
//    private T newValue;
64

    
65
    public DefaultBookmarksController(Bookmarks<T> bookmarks, JButton btnBookmarks) {
66
//        this.newValue = null;
67
        this.allowAddBookmarks = true;
68
        this.filter = null;
69
        this.bookmarks = bookmarks;
70
        this.btnBookmarks = btnBookmarks;
71
        if (this.btnBookmarks != null) {
72
            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
73
            this.btnBookmarks.setIcon(iconTheme.get("bookmarks"));
74
            this.btnBookmarks.addActionListener(new ActionListener() {
75
                @Override
76
                public void actionPerformed(ActionEvent e) {
77
                    doBookmarks();
78
                }
79
            });
80
            if( "...".equals(this.btnBookmarks.getText()) ) {
81
                this.btnBookmarks.setText("");
82
            }
83
        }
84
    }
85

    
86
    public static void selfRegister() {
87
        URL imageResource = DatePickerControllerImpl.class.getClassLoader().getResource("org/gvsig/tools/swing/bookmarkandhistory/bookmarks.png");
88
        if (imageResource != null) {
89
            IconThemeManager iconThemeManager = ToolsSwingLocator.getIconThemeManager();
90
            IconTheme theme = iconThemeManager.getCurrent();
91
            ImageIcon icon = new ImageIcon(imageResource);
92
            theme.registerDefault("tools", "bookmarkandhistory", "bookmarks", icon, imageResource);
93
        }
94
    }
95

    
96
    private void doBookmarks() {
97
        JPopupMenu popup = this.createMenu().getPopupMenu();
98
        Point p = this.btnBookmarks.getLocationOnScreen();
99
        popup.show(this.btnBookmarks, 0, this.btnBookmarks.getHeight());
100
    }
101

    
102
    public JMenu createMenu() {
103
        boolean needSeparator = false;
104
        I18nManager i18n = ToolsLocator.getI18nManager();
105
        JMenu menu = new JMenu(i18n.getTranslation("_Bookmarks"));
106
        if (this.allowAddBookmarks == true) {
107
            JMenuItem addToBookmarks = new JMenuItem(i18n.getTranslation("_Add_to_bookmarks"));
108
            addToBookmarks.addActionListener(new ActionListener() {
109
                @Override
110
                public void actionPerformed(ActionEvent e) {
111
                    BookmarkEventImpl<T> event = new BookmarkEventImpl<>(DefaultBookmarksController.this, ID_GETVALUE, "update-current-value");
112
                    DefaultBookmarksController.this.fireActionEvent(event);
113
                    doShowBookmarksDialog(event.getCurrentValue());
114
                }
115
            });
116
            menu.add(addToBookmarks);
117
            needSeparator = true;
118
        }
119
        if (!bookmarks.isEmpty()) {
120
            if (needSeparator) {
121
                menu.addSeparator();
122
                needSeparator = false;
123
            }
124
            int count = 0;
125
            for (Bookmark<T> bookmark : bookmarks) {
126
                if (count >= LIMIT_BOOKMARKS_TO_SHOW) {
127
                    JMenuItem item = menu.add("... "+i18n.getTranslation("_There_are_hidden_values"));
128
                    item.setEnabled(false);
129
                    break;
130
                }
131
                count += 1;
132
                JMenuItem item = createBookmarkMenuItem(bookmark);
133
                if (this.filter != null && !filter.test(bookmark)) {
134
                    item.setEnabled(false);
135
                }
136
                menu.add(item);
137
                needSeparator = true;
138
            }
139
        }
140
        if (needSeparator) {
141
            menu.addSeparator();
142
            needSeparator = true;
143
        }
144

    
145
        JMenuItem showAllBookmarks = new JMenuItem(i18n.getTranslation("_Show_all_bookmarks"));
146
        showAllBookmarks.addActionListener(new ActionListener() {
147
            @Override
148
            public void actionPerformed(ActionEvent e) {
149
                doShowBookmarksDialog(null);
150
            }
151
        });
152
        menu.add(showAllBookmarks);
153
        needSeparator = true;
154
        return menu;
155
    }
156

    
157
    private JMenuItem createBookmarkMenuItem(final Bookmark<T> bookmark) {
158
        JMenuItem item = new JMenuItem(StringUtils.abbreviate(bookmark.getName(), 45));
159
        item.addActionListener(new ActionListener() {
160
            @Override
161
            public void actionPerformed(ActionEvent e) {
162
                BookmarkEventImpl<T> event = new BookmarkEventImpl(DefaultBookmarksController.this, ID_SETVALUE, "set-value");
163
                event.setCurrentValue(bookmark.getValue());
164
                DefaultBookmarksController.this.fireActionEvent(event);
165
            }
166
        });
167
        return item;
168
    }
169

    
170
    private void doShowBookmarksDialog(T value) {
171
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
172
        final DefaultBookmarksPanel panel = new DefaultBookmarksPanel(bookmarks, value);
173
        I18nManager i18n = ToolsLocator.getI18nManager();
174
        final Dialog dialog = winManager.createDialog(
175
                panel,
176
                i18n.getTranslation("Bookmarks"),
177
                null,
178
                WindowManager_v2.BUTTONS_OK_CANCEL
179
        );
180
        dialog.setAutoclose(false);
181
        dialog.addActionListener(new ActionListener() {
182
            @Override
183
            public void actionPerformed(ActionEvent e) {
184
                if (dialog.getAction() != WindowManager_v2.BUTTON_OK) {
185
                    dialog.asJComponent().setVisible(false);
186
                    return;
187
                }
188
                if (((DefaultBookmarksPanel) panel).getState()== DefaultBookmarksPanel.STATE_MODIFYING) {
189
                    ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog("_Bookmark_is_being_edit_accept_or_discard_modification_before_exit", "_Bookmark_not_saved", JOptionPane.WARNING_MESSAGE);
190
                    return;
191
                }
192
                Bookmark<T> bookmark = panel.getSelectedValue();
193
                if (bookmark != null) {
194
                    BookmarkEventImpl<T> event;
195
                    event = new BookmarkEventImpl<>(DefaultBookmarksController.this, ID_SETVALUE, "set-value");
196
                    event.setCurrentValue(bookmark.getValue());
197
                    fireActionEvent(event);
198
                }
199
                dialog.asJComponent().setVisible(false);
200
            }
201
        });
202
        dialog.show(WindowManager.MODE.DIALOG);
203
    }
204

    
205
//    public abstract void setFilter(Predicate predicate);
206
//    
207
//    public abstract Bookmarks get();
208
    @Override
209
    public void setFilter(Predicate filter) {
210
        this.filter = filter;
211
    }
212

    
213
    @Override
214
    public void setAllowAddBookmarks(Boolean allowAddBookmarks) {
215
        this.allowAddBookmarks = allowAddBookmarks;
216
    }
217

    
218
//    @Override
219
//    public void setNewValue(T newValue) {
220
//        this.newValue = newValue;
221
//    }
222
    @Override
223
    public Bookmarks<T> get() {
224
        return this.bookmarks;
225
    }
226

    
227
}