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

History | View | Annotate | Download (7.79 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 org.gvsig.tools.swing.api.bookmarkshistory.BookmarksController;
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.bookmarkshistory.DefaultBookmarksPanel;
27
import org.gvsig.tools.swing.impl.pickercontroller.DatePickerControllerImpl;
28

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

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

    
39
        private T currentValue;
40

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

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

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

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

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

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

    
90
    private void doBookmarks() {
91
        JPopupMenu popup = this.createMenu().getPopupMenu();
92
        Point p = this.btnBookmarks.getLocationOnScreen();
93
        popup.show(this.btnBookmarks, 0, this.btnBookmarks.getHeight());
94
    }
95

    
96
    public JMenu createMenu() {
97
        boolean separator = true;
98
        I18nManager i18n = ToolsLocator.getI18nManager();
99
        JMenu menu = new JMenu(i18n.getTranslation("_Bookmarks"));
100
        if (this.allowAddBookmarks == true) {
101
            JMenuItem addToBookmarks = new JMenuItem(i18n.getTranslation("_Add_to_bookmarks"));
102
            addToBookmarks.addActionListener(new ActionListener() {
103
                @Override
104
                public void actionPerformed(ActionEvent e) {
105
                    BookmarkEventImpl event = new BookmarkEventImpl(DefaultBookmarksController.this, ID_GETVALUE, "update-current-value");
106
                    DefaultBookmarksController.this.fireActionEvent(event);
107

    
108
                    doShowBookmarksDialog(event.getCurrentValue());
109
                }
110
            });
111
            menu.add(addToBookmarks);
112
            separator = false;
113
        }
114
//        List<Bookmark<T>> filteredBookmarks = bookmarks.filter(this.filter);
115

    
116
        if (!bookmarks.isEmpty()) {
117
            if (!separator) {
118
                menu.addSeparator();
119
                separator = true;
120
            }
121
            for (Bookmark<T> bookmark : bookmarks) {
122
                boolean validService;
123
                if (this.filter == null) {
124
                    validService = true;
125
                } else {
126
                    validService = this.filter.test(bookmark);
127
                }
128
                JMenuItem disabledBookmark = createBookmarkMenuItem(bookmark);
129
                disabledBookmark.setEnabled(validService);
130
                menu.add(disabledBookmark);
131
                separator = false;
132

    
133
            }
134
        }
135
        if (!separator) {
136
            menu.addSeparator();
137
            separator = true;
138
        }
139

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

    
149
        return menu;
150
    }
151

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

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

    
193
//    public abstract void setFilter(Predicate predicate);
194
//    
195
//    public abstract Bookmarks get();
196
    @Override
197
    public void setFilter(Predicate filter) {
198
        this.filter = filter;
199
    }
200

    
201
    @Override
202
    public void setAllowAddBookmarks(Boolean allowAddBookmarks) {
203
        this.allowAddBookmarks = allowAddBookmarks;
204
    }
205

    
206
//    @Override
207
//    public void setNewValue(T newValue) {
208
//        this.newValue = newValue;
209
//    }
210
    @Override
211
    public Bookmarks<T> get() {
212
        return this.bookmarks;
213
    }
214

    
215
}