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

History | View | Annotate | Download (6.43 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
import org.gvsig.tools.swing.api.ToolsSwingLocator;
12
import org.gvsig.tools.swing.api.ToolsSwingManager;
13

    
14
public class DefaultBookmarksPanel<T> extends DefaultBookmarksPanelView {
15

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

    
20
    private static class BookmarkListModel extends DefaultListModel<Bookmark> {
21

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

    
26
    }
27

    
28
    private int state;
29
    private Bookmark<T> currentBookmark;
30
    private BookmarkListModel bookmarkListModel;
31

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

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

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

    
109
    private BookmarkListModel createBookmarksModel() {
110
        BookmarkListModel model = new BookmarkListModel();
111
        for (Bookmark<T> bookmark : bookmarks) {
112
            model.addElement(bookmark);
113
        }
114
        return model;
115
    }
116

    
117
    public Bookmark<T> getSelectedValue() {
118
        return this.currentBookmark;
119
    }
120

    
121
    private void put(Bookmark<T> bookmark) {
122
        this.currentBookmark = bookmark;
123
        this.txtLabel.setText(bookmark.getValue().toString());
124
        this.txtLabel.setCaretPosition(0);
125
        this.txtName.setText(bookmark.getName());
126
        this.txtLastUse.setText(String.valueOf(bookmark.getLastUse()));
127
    }
128

    
129
    private void fetch(Bookmark<T> bookmark) {
130
        bookmark.setName(this.txtName.getText());
131
    }
132

    
133
    private void doDelete() {
134
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
135
        if (bookmark == null) {
136
            return;
137
        }
138
        bookmarks.remove(bookmark.getName());
139
        this.bookmarkListModel = this.createBookmarksModel();
140
        this.lstBookmarks.setModel(this.bookmarkListModel);
141
        this.changeStateTo(STATE_VIEWING);
142
    }
143

    
144
    private void doModify() {
145
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
146
        if (bookmark == null) {
147
            return;
148
        }
149
        this.put(bookmark);
150
        this.changeStateTo(STATE_MODIFYING);
151
    }
152

    
153
    private void doAccept() {
154
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
155
        if (bookmark == null) {
156
            return;
157
        }
158
        this.fetch(bookmark);
159
        this.bookmarkListModel.contentsChanged();
160
        this.changeStateTo(STATE_VIEWING);
161
    }
162

    
163
    private void doDiscard() {
164
        Bookmark<T> bookmark = (Bookmark<T>) this.lstBookmarks.getSelectedValue();
165
        if (bookmark == null) {
166
            return;
167
        }
168
        this.put(bookmark);
169
        this.changeStateTo(STATE_VIEWING);
170
    }
171

    
172
    private void changeStateTo(int newstate) {
173
        switch (newstate) {
174
            case STATE_VIEWING:
175
                this.btnAccept.setEnabled(false);
176
                this.btnDelete.setEnabled(true);
177
                this.btnDiscard.setEnabled(false);
178
                this.btnModify.setEnabled(true);
179
                this.txtName.setEnabled(false);
180
                this.txtLastUse.setEnabled(false);
181
                this.txtLabel.setEnabled(false);
182
                break;
183
            case STATE_MODIFYING:
184
                this.btnAccept.setEnabled(true);
185
                this.btnDelete.setEnabled(true);
186
                this.btnDiscard.setEnabled(true);
187
                this.btnModify.setEnabled(false);
188
                this.txtName.setEnabled(true);
189
                this.txtLastUse.setEnabled(true);
190
                this.txtLabel.setEnabled(true);
191
                break;
192
        }
193
        this.state = newstate;
194
    }
195
}