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

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

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

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

    
40
        private T currentValue;
41

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

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

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

    
56
    }
57
    private final JButton btnBookmarks;
58
    public Bookmarks<T> bookmarks;
59
    private Predicate filter;
60
    private Boolean allowAddBookmarks;
61
//    private T newValue;
62

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

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

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

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

    
136
        JMenuItem showAllBookmarks = new JMenuItem(i18n.getTranslation("_Show_all_bookmarks"));
137
        showAllBookmarks.addActionListener(new ActionListener() {
138
            @Override
139
            public void actionPerformed(ActionEvent e) {
140
                doShowBookmarksDialog(null);
141
            }
142
        });
143
        menu.add(showAllBookmarks);
144
        needSeparator = true;
145
        return menu;
146
    }
147

    
148
    private JMenuItem createBookmarkMenuItem(final Bookmark<T> bookmark) {
149
        JMenuItem item = new JMenuItem(StringUtils.abbreviate(bookmark.getName(), 45));
150
        item.addActionListener(new ActionListener() {
151
            @Override
152
            public void actionPerformed(ActionEvent e) {
153
                BookmarkEventImpl<T> event = new BookmarkEventImpl(DefaultBookmarksController.this, ID_SETVALUE, "set-value");
154
                event.setCurrentValue(bookmark.getValue());
155
                DefaultBookmarksController.this.fireActionEvent(event);
156
            }
157
        });
158
        return item;
159
    }
160

    
161
    private void doShowBookmarksDialog(T value) {
162
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
163
        final DefaultBookmarksPanel panel = new DefaultBookmarksPanel(bookmarks, value);
164
        I18nManager i18n = ToolsLocator.getI18nManager();
165
        final Dialog dialog = winManager.createDialog(
166
                panel,
167
                i18n.getTranslation("Bookmarks"),
168
                null,
169
                WindowManager_v2.BUTTONS_OK_CANCEL
170
        );
171
        dialog.addActionListener(new ActionListener() {
172
            @Override
173
            public void actionPerformed(ActionEvent e) {
174
                if (dialog.getAction() != WindowManager_v2.BUTTON_OK) {
175
                    return;
176
                }
177
                Bookmark<T> bookmark = panel.getSelectedValue();
178
                if (bookmark != null) {
179
                    BookmarkEventImpl<T> event;
180
                    event = new BookmarkEventImpl<>(DefaultBookmarksController.this, ID_SETVALUE, "set-value");
181
                    event.setCurrentValue(bookmark.getValue());
182
                    fireActionEvent(event);
183
                }
184
            }
185
        });
186
        dialog.show(WindowManager.MODE.DIALOG);
187
    }
188

    
189
//    public abstract void setFilter(Predicate predicate);
190
//    
191
//    public abstract Bookmarks get();
192
    @Override
193
    public void setFilter(Predicate filter) {
194
        this.filter = filter;
195
    }
196

    
197
    @Override
198
    public void setAllowAddBookmarks(Boolean allowAddBookmarks) {
199
        this.allowAddBookmarks = allowAddBookmarks;
200
    }
201

    
202
//    @Override
203
//    public void setNewValue(T newValue) {
204
//        this.newValue = newValue;
205
//    }
206
    @Override
207
    public Bookmarks<T> get() {
208
        return this.bookmarks;
209
    }
210

    
211
}