зеркало из https://github.com/mozilla/pjs.git
162 строки
4.4 KiB
Java
162 строки
4.4 KiB
Java
/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License
|
|
* Version 1.0 (the "License"); you may not use this file except in
|
|
* compliance with the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS"
|
|
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
|
|
* the License for the specific language governing rights and limitations
|
|
* under the License.
|
|
*
|
|
* The Original Code is the Grendel mail/news client.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
* Corporation. Portions created by Netscape are Copyright (C) 1997
|
|
* Netscape Communications Corporation. All Rights Reserved.
|
|
*
|
|
* Created: Will Scullin <scullin@netscape.com>, 30 Oct 1997.
|
|
* Modified: Jeff Galyan <jeffrey.galyan@sun.com>, 30 Dec 1998
|
|
*/
|
|
|
|
package grendel.widgets;
|
|
|
|
import java.awt.Component;
|
|
import java.awt.Dimension;
|
|
import java.awt.Font;
|
|
import java.awt.Rectangle;
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.FocusAdapter;
|
|
import java.awt.event.FocusEvent;
|
|
import java.awt.event.KeyEvent;
|
|
import java.awt.event.MouseEvent;
|
|
import java.util.EventObject;
|
|
|
|
import javax.swing.event.CellEditorListener;
|
|
import javax.swing.JTextField;
|
|
import javax.swing.KeyStroke;
|
|
//import javax.swing.CellEditor;
|
|
import javax.swing.event.ChangeEvent;
|
|
import javax.swing.event.DocumentEvent;
|
|
import javax.swing.event.DocumentListener;
|
|
|
|
public class TextCellEditor extends JTextField implements CellEditor,
|
|
DocumentListener {
|
|
CellEditorListener fListener;
|
|
boolean fSelected, fStopping;
|
|
Dimension fSize = new Dimension();
|
|
|
|
public TextCellEditor() {
|
|
addActionListener(new StopAction());
|
|
addFocusListener(new MyFocusListener());
|
|
|
|
registerKeyboardAction(new CancelAction(),
|
|
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
|
|
WHEN_FOCUSED);
|
|
getDocument().addDocumentListener(this);
|
|
setFont(Font.decode("SansSerif-12"));
|
|
}
|
|
|
|
public void cancelCellEditing() {
|
|
if (fListener != null) {
|
|
fListener.editingCanceled(new ChangeEvent(this));
|
|
}
|
|
}
|
|
|
|
public void setValue(Object aObject, Object aData, boolean aSelected) {
|
|
setText(aData.toString());
|
|
fSelected = aSelected;
|
|
fSize = getPreferredSize();
|
|
}
|
|
|
|
public Object getCellEditorValue() {
|
|
return getText();
|
|
}
|
|
|
|
public boolean isCellEditable(EventObject aEvent) {
|
|
return ((aEvent instanceof MouseEvent)
|
|
&& (((MouseEvent)aEvent).getID() == MouseEvent.MOUSE_RELEASED
|
|
&& fSelected));
|
|
}
|
|
|
|
public boolean shouldSelectCell(EventObject aEvent) {
|
|
return !fSelected;
|
|
}
|
|
|
|
public boolean stopCellEditing() {
|
|
if (fListener != null && !fStopping) {
|
|
fStopping = true;
|
|
fListener.editingStopped(new ChangeEvent(this));
|
|
fStopping = false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public boolean startCellEditing(EventObject aEvent) {
|
|
updateSize(getPreferredSize());
|
|
requestFocus();
|
|
return true;
|
|
}
|
|
|
|
public Component getCellEditorComponent() {
|
|
return this;
|
|
}
|
|
|
|
public void addCellEditorListener(CellEditorListener aListener) {
|
|
fListener = aListener;
|
|
}
|
|
|
|
public void removeCellEditorListener(CellEditorListener aListener) {
|
|
if (fListener == aListener) {
|
|
fListener = null;
|
|
}
|
|
}
|
|
|
|
protected void updateSize(Dimension aSize) {
|
|
int w = aSize.width > fSize.width ? aSize.width : fSize.width;
|
|
int h = aSize.height > fSize.height ? aSize.height : fSize.height;
|
|
|
|
setSize(w, h);
|
|
}
|
|
|
|
public void changedUpdate(DocumentEvent aEvent) {
|
|
updateSize(getPreferredSize());
|
|
}
|
|
|
|
public void insertUpdate(DocumentEvent aEvent) {
|
|
updateSize(getPreferredSize());
|
|
}
|
|
|
|
public void removeUpdate(DocumentEvent aEvent) {
|
|
updateSize(getPreferredSize());
|
|
}
|
|
|
|
class MyCellEditorListener implements CellEditorListener {
|
|
public void editingCanceled(ChangeEvent evt) {
|
|
}
|
|
|
|
public void editingStopped(ChangeEvent evt) {
|
|
}
|
|
}
|
|
|
|
class CancelAction implements ActionListener {
|
|
public void actionPerformed(ActionEvent aEvent) {
|
|
cancelCellEditing();
|
|
}
|
|
}
|
|
|
|
class StopAction implements ActionListener {
|
|
public void actionPerformed(ActionEvent aEvent) {
|
|
stopCellEditing();
|
|
}
|
|
}
|
|
|
|
class MyFocusListener extends FocusAdapter {
|
|
public void focusLost(FocusEvent aEvent) {
|
|
stopCellEditing();
|
|
}
|
|
}
|
|
}
|