1 package org.wcb.autohome.util;
2 /***
3 * Copyright (C) 1999 Walter Bogaardt
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 *
19 * Project: Alice X10 Interface
20 *
21 */
22
23 import javax.swing.event.ChangeEvent;
24 import javax.swing.event.EventListenerList;
25 import javax.swing.event.CellEditorListener;
26 import javax.swing.table.TableCellEditor;
27 import java.awt.event.MouseEvent;
28 import java.util.EventObject;
29
30 abstract public class AbstractCellEditor implements TableCellEditor {
31 protected EventListenerList listenerList = new EventListenerList();
32 protected Object value;
33 protected ChangeEvent changeEvent = null;
34 protected int clickCountToStart = 1;
35
36 public Object getCellEditorValue() {
37 return value;
38 }
39
40 public void setCellEditorValue(Object value) {
41 this.value = value;
42 }
43
44 public void setClickCountToStart(int count) {
45 clickCountToStart = count;
46 }
47
48 public int getClickCountToStart() {
49 return clickCountToStart;
50 }
51
52 public boolean isCellEditable(EventObject anEvent) {
53 if (anEvent instanceof MouseEvent)
54 {
55 if (((MouseEvent)anEvent).getClickCount() < clickCountToStart)
56 {
57 return false;
58 }
59 }
60 return true;
61 }
62
63 public boolean shouldSelectCell(EventObject anEvent) {
64 return true;
65 }
66
67 public boolean stopCellEditing() {
68 fireEditingStopped();
69 return true;
70 }
71
72 public void cancelCellEditing() {
73 fireEditingCanceled();
74 }
75
76 public void addCellEditorListener(CellEditorListener l) {
77 listenerList.add(CellEditorListener.class, l);
78 }
79
80 public void removeCellEditorListener(CellEditorListener l) {
81 listenerList.remove(CellEditorListener.class, l);
82 }
83
84 protected void fireEditingStopped() {
85 Object[] listeners = listenerList.getListenerList();
86 for (int i = listeners.length - 2; i >= 0; i-=2)
87 {
88 if (listeners[i] == CellEditorListener.class)
89 {
90 if (changeEvent == null)
91 {
92 changeEvent = new ChangeEvent(this);
93 }
94 ((CellEditorListener) listeners[i + 1]).editingStopped(changeEvent);
95 }
96 }
97 }
98 protected void fireEditingCanceled() {
99 Object[] listeners = listenerList.getListenerList();
100 for (int i = listeners.length - 2; i >= 0; i-=2) {
101 if (listeners[i] == CellEditorListener.class) {
102 if (changeEvent == null)
103 {
104 changeEvent = new ChangeEvent(this);
105 }
106 ((CellEditorListener) listeners[i + 1]).editingCanceled(changeEvent);
107 }
108 }
109 }
110 }