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 / DefaultBookmarksPanel.java @ 1990

History | View | Annotate | Download (5.88 KB)

1
package org.gvsig.tools.swing.impl.bookmarkshistory;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import javax.swing.DefaultListModel;
7
import javax.swing.event.ListSelectionEvent;
8
import javax.swing.event.ListSelectionListener;
9
import org.gvsig.tools.bookmarksandhistory.Bookmark;
10
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
11

    
12
public class DefaultBookmarksPanel<T> extends DefaultBookmarksPanelView {
13

    
14
    private static final int STATE_VIEWING = 0;
15
    private static final int STATE_MODIFYING = 1;
16
    private Bookmarks<T> bookmarks;
17

    
18
    private static class BookmarkListModel extends DefaultListModel<Bookmark> {
19

    
20
        public void contentsChanged() {
21
            super.fireContentsChanged(this, 0, this.getSize());
22
        }
23

    
24
    }
25

    
26
    private int state;
27
    private Bookmark<T> currentBookmark;
28
    private BookmarkListModel bookmarkListModel;
29

    
30
    public DefaultBookmarksPanel(Bookmarks<T> bookmarks) {
31
        this(bookmarks, null);
32
    }
33

    
34
    public DefaultBookmarksPanel(Bookmarks<T> bookmarks, T value) {
35
        this.bookmarks = bookmarks;
36
        this.state = STATE_VIEWING;
37
        if (value != null) {
38
            Bookmark<T> bookmark = bookmarks.add(value);
39
            this.put(bookmark);
40
            this.changeStateTo(STATE_MODIFYING);
41
        }
42
        this.initComponents();
43
    }
44

    
45
    private void initComponents() {
46
        this.currentBookmark = null;
47
        this.bookmarkListModel = this.createBookmarksModel();
48
        this.lstBookmarks.setModel(this.bookmarkListModel);
49
        this.lstBookmarks.addListSelectionListener(new ListSelectionListener() {
50
            @Override
51
            public void valueChanged(ListSelectionEvent e) {
52
                if (e.getValueIsAdjusting()) {
53
                    return;
54
                }
55
                if (state != STATE_VIEWING) {
56
                    return;
57
                }
58
                Bookmark value = (Bookmark) lstBookmarks.getSelectedValue();
59
                if (value == null) {
60
                    return;
61
                }
62
                put(value);
63
                changeStateTo(state);
64
            }
65
        });
66
        this.btnDelete.addActionListener(new ActionListener() {
67
            @Override
68
            public void actionPerformed(ActionEvent e) {
69
                doDelete();
70
            }
71
        });
72
        this.btnModify.addActionListener(new ActionListener() {
73
            @Override
74
            public void actionPerformed(ActionEvent e) {
75
                doModify();
76
            }
77
        });
78
        this.btnAccept.addActionListener(new ActionListener() {
79
            @Override
80
            public void actionPerformed(ActionEvent e) {
81
                doAccept();
82
            }
83
        });
84
        this.btnDiscard.addActionListener(new ActionListener() {
85
            @Override
86
            public void actionPerformed(ActionEvent e) {
87
                doDiscard();
88
            }
89
        });
90
        this.txtLastUse.setEditable(false);
91
        this.txtLabel.setEditable(false);
92
        this.changeStateTo(STATE_VIEWING);
93
        this.setPreferredSize(new Dimension(450, 350));
94
    }
95

    
96
    private BookmarkListModel createBookmarksModel() {
97
        BookmarkListModel model = new BookmarkListModel();
98
        for (Bookmark<T> bookmark : bookmarks) {
99
            model.addElement(bookmark);
100
        }
101
        return model;
102
    }
103

    
104
    public Bookmark<T> getSelectedValue() {
105
        return this.currentBookmark;
106
    }
107

    
108
    private void put(Bookmark<T> bookmark) {
109
        this.currentBookmark = bookmark;
110
        this.txtLabel.setText(bookmark.getLabel());
111
        this.txtLabel.setCaretPosition(0);
112
        this.txtName.setText(bookmark.getName());
113
        this.txtLastUse.setText(String.valueOf(bookmark.getLastUse()));
114
    }
115

    
116
    private void fetch(Bookmark<T> bookmark) {
117
        bookmark.setName(this.txtName.getText());
118
    }
119

    
120
    private void doDelete() {
121
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
122
        if (bookmark == null) {
123
            return;
124
        }
125
        bookmarks.remove(bookmark.getName());
126
        this.bookmarkListModel = this.createBookmarksModel();
127
        this.lstBookmarks.setModel(this.bookmarkListModel);
128
        this.changeStateTo(STATE_VIEWING);
129
    }
130

    
131
    private void doModify() {
132
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
133
        if (bookmark == null) {
134
            return;
135
        }
136
        this.put(bookmark);
137
        this.changeStateTo(STATE_MODIFYING);
138
    }
139

    
140
    private void doAccept() {
141
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
142
        if (bookmark == null) {
143
            return;
144
        }
145
        this.fetch(bookmark);
146
        this.bookmarkListModel.contentsChanged();
147
        this.changeStateTo(STATE_VIEWING);
148
    }
149

    
150
    private void doDiscard() {
151
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
152
        if (bookmark == null) {
153
            return;
154
        }
155
        this.put(bookmark);
156
        this.changeStateTo(STATE_VIEWING);
157
    }
158

    
159
    private void changeStateTo(int newstate) {
160
        switch (newstate) {
161
            case STATE_VIEWING:
162
                this.btnAccept.setEnabled(false);
163
                this.btnDelete.setEnabled(true);
164
                this.btnDiscard.setEnabled(false);
165
                this.btnModify.setEnabled(true);
166
                this.txtName.setEnabled(false);
167
                this.txtLastUse.setEnabled(false);
168
                this.txtLabel.setEnabled(false);
169
                break;
170
            case STATE_MODIFYING:
171
                this.btnAccept.setEnabled(true);
172
                this.btnDelete.setEnabled(true);
173
                this.btnDiscard.setEnabled(true);
174
                this.btnModify.setEnabled(false);
175
                this.txtName.setEnabled(true);
176
                this.txtLastUse.setEnabled(true);
177
                this.txtLabel.setEnabled(true);
178
                break;
179
        }
180
        this.state = newstate;
181
    }
182
}