source: 3thparty/jupload/src/main/java/wjhk/jupload2/gui/filepanel/FilePanelJTable.java @ 3951

Revision 3951, 7.3 KB checked in by alexandrecorreia, 13 years ago (diff)

Ticket #1709 - Adicao de codigo fonte java do componente jupload

Line 
1//
2// $Id: FilePanelJTable.java 95 2007-05-02 03:27:05 +0000 (mer., 02 mai 2007)
3// /C=DE/ST=Baden-Wuerttemberg/O=ISDN4Linux/OU=Fritz
4// Elfert/CN=svn-felfert@isdn4linux.de/emailAddress=fritz@fritz-elfert.de $
5//
6// jupload - A file upload applet.
7// Copyright 2007 The JUpload Team
8//
9// Created: ?
10// Creator: William JinHua Kwong
11// Last modified: $Date: 2010-02-09 08:32:18 -0200 (Ter, 09 Fev 2010) $
12//
13// This program is free software; you can redistribute it and/or modify it under
14// the terms of the GNU General Public License as published by the Free Software
15// Foundation; either version 2 of the License, or (at your option) any later
16// version. This program is distributed in the hope that it will be useful, but
17// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
19// details. You should have received a copy of the GNU General Public License
20// along with this program; if not, write to the Free Software Foundation, Inc.,
21// 675 Mass Ave, Cambridge, MA 02139, USA.
22
23package wjhk.jupload2.gui.filepanel;
24
25import java.awt.Cursor;
26import java.awt.event.MouseEvent;
27import java.awt.event.MouseListener;
28import java.util.Date;
29
30import javax.swing.JTable;
31import javax.swing.ListSelectionModel;
32import javax.swing.event.ListSelectionEvent;
33import javax.swing.table.JTableHeader;
34import javax.swing.table.TableColumnModel;
35
36import wjhk.jupload2.gui.JUploadPanel;
37import wjhk.jupload2.policies.UploadPolicy;
38
39/**
40 * This class is the JTable that display file information to the users. Data is
41 * handled by the wjhk.jupload2.gui.FilePanelDataModel2 class.
42 */
43public class FilePanelJTable extends JTable implements MouseListener {
44
45    /** A generated serialVersionUID, to avoid warning during compilation */
46    private static final long serialVersionUID = 5422667664740339798L;
47
48    protected int sortedColumnIndex = -1;
49
50    protected boolean sortedColumnAscending = true;
51
52    // The current UploadPolicy
53    UploadPolicy uploadPolicy;
54
55    // The current DataModel
56    FilePanelDataModel2 filePanelDataModel;
57
58    /**
59     * Creates a new instance.
60     *
61     * @param jup The parent upload panel.
62     * @param uploadPolicy The policy for retrieval of various settings.
63     */
64    public FilePanelJTable(JUploadPanel jup, UploadPolicy uploadPolicy) {
65        this.uploadPolicy = uploadPolicy;
66
67        setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
68        setDefaultRenderer(Long.class, new SizeRenderer(uploadPolicy));
69        setDefaultRenderer(Date.class, new DateRenderer(uploadPolicy));
70        setDefaultRenderer(String.class, new NameRenderer());
71
72        // setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
73
74        JTableHeader header = getTableHeader();
75        header.setDefaultRenderer(new SortHeaderRenderer());
76        // We add the mouse listener on the header (to manage column sorts) and
77        // on the main part (to manage the contextual popup menu)
78        header.addMouseListener(this);
79        addMouseListener(jup.getMouseListener());
80    }
81
82    /**
83     * Set the model. Forces the model to be a FilePanelDataModel2. This method
84     * calls the {@link JTable#setModel(javax.swing.table.TableModel)} method.
85     *
86     * @param filePanelDataModel
87     */
88    public void setModel(FilePanelDataModel2 filePanelDataModel) {
89        super.setModel(filePanelDataModel);
90        this.filePanelDataModel = filePanelDataModel;
91    }
92
93    /**
94     * Retrieve the currently sorted column.
95     *
96     * @return the index of the currently sorted column.
97     */
98    public int getSortedColumnIndex() {
99        return this.sortedColumnIndex;
100    }
101
102    /**
103     * Retrieve the current sort order.
104     *
105     * @return true, if the current sort order is ascending, false otherwise.
106     */
107    public boolean isSortedColumnAscending() {
108        return this.sortedColumnAscending;
109    }
110
111    /**
112     * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
113     */
114    public void mouseReleased(MouseEvent event) {
115        // Displays the contextual menu ?
116        this.uploadPolicy.getContext().getUploadPanel().maybeOpenPopupMenu(
117                event);
118    }
119
120    /**
121     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
122     */
123    public void mousePressed(MouseEvent event) {
124        // Displays the contextual menu ?
125        this.uploadPolicy.getContext().getUploadPanel().maybeOpenPopupMenu(
126                event);
127    }
128
129    /**
130     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
131     */
132    public void mouseClicked(MouseEvent event) {
133        // Is this a double-click ?
134        if (event.getClickCount() == 2) {
135            // Let's open the 'big' preview, if we're in picture mode.
136            // We should have one selected row. Let's check it, you never knows
137            // ! ;-)
138            int selectedRow = getSelectedRow();
139            if (selectedRow >= 0) {
140                this.uploadPolicy.onFileSelected(this.filePanelDataModel
141                        .getFileDataAt(selectedRow));
142            }
143        } else if (!this.uploadPolicy.getContext().getUploadPanel()
144                .maybeOpenPopupMenu(event)) {
145            // We did not open the displays the contextual menu. So we do what
146            // we have to do: sort the clicked column
147            TableColumnModel colModel = getColumnModel();
148            int index = colModel.getColumnIndexAtX(event.getX());
149            int modelIndex = colModel.getColumn(index).getModelIndex();
150
151            FilePanelDataModel2 model = (FilePanelDataModel2) getModel();
152            if (model.isSortable(modelIndex)) {
153                if (this.sortedColumnIndex == index) {
154                    this.sortedColumnAscending = !this.sortedColumnAscending;
155                }
156                this.sortedColumnIndex = index;
157
158                model.sortColumn(modelIndex, this.sortedColumnAscending);
159            }
160        }
161    }
162
163    /**
164     * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
165     */
166    public void mouseEntered(MouseEvent event) {
167        // Nothing to do.
168    }
169
170    /**
171     * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
172     */
173    public void mouseExited(MouseEvent event) {
174        // Nothing to do.
175    }
176
177    /**
178     * @see javax.swing.JTable#valueChanged(javax.swing.event.ListSelectionEvent)
179     */
180    @Override
181    public void valueChanged(ListSelectionEvent e) {
182        super.valueChanged(e);
183        // Ignore extra messages, and no action before initialization.
184        if (e.getValueIsAdjusting() || this.uploadPolicy == null)
185            return;
186
187        //
188        ListSelectionModel lsm = (ListSelectionModel) e.getSource();
189        if (lsm.isSelectionEmpty()) {
190            this.uploadPolicy.onFileSelected(null);
191        } else {
192            int selectedRow = lsm.getMinSelectionIndex();
193            // if one file is selected, we let the current upload policy reacts.
194            // Otherwise, we don't do anything.
195            if (selectedRow == lsm.getMaxSelectionIndex()) {
196                Cursor previousCursor = this.uploadPolicy.setWaitCursor();
197                this.uploadPolicy.onFileSelected(this.filePanelDataModel
198                        .getFileDataAt(selectedRow));
199                this.uploadPolicy.setCursor(previousCursor);
200            }
201        }
202    }
203}
Note: See TracBrowser for help on using the repository browser.