01: package net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent;
02:
03: /*
04: * Copyright (C) 2006 Rob Manning
05: * manningr@users.sourceforge.net
06: *
07: * This library is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU Lesser General Public
09: * License as published by the Free Software Foundation; either
10: * version 2.1 of the License, or (at your option) any later version.
11: *
12: * This library is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public
18: * License along with this library; if not, write to the Free Software
19: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20: */
21:
22: import java.awt.event.KeyAdapter;
23: import java.awt.event.KeyEvent;
24:
25: public class BaseKeyTextHandler extends KeyAdapter {
26:
27: /**
28: * A flag to keep track of whether or not this is the first time we've seen
29: * an empty text value or the first time since previously restoring the
30: * value.
31: */
32: boolean firstBlankText = true;
33:
34: /**
35: * If the field is not allowed to have nulls, we need to let the
36: * user erase the entire contents of the field so that they can enter
37: * a brand-new value from scratch. While the empty field is not a legal
38: * value, we cannot avoid allowing it. This is the normal editing behavior,
39: * so we do not need to add anything special here except for the cyclic
40: * re-entering of the original data if user hits delete when field is empty
41: *
42: * @param text
43: * @param c
44: * @param e
45: * @param _textComponent
46: */
47: protected void handleNotNullableField(String text, char c,
48: KeyEvent e, IRestorableTextComponent _textComponent) {
49: if (text.length() == 0) {
50:
51: // We want to detect two empty text values in a row before
52: // we decide to restore the original value. Since 'text'
53: // contains the new value, we want to allow the first empty
54: // 'text' so that the user can clear the field, and on the
55: // second one we will set it to the original value.
56: if (firstBlankText) {
57: firstBlankText = false;
58: return;
59: } else {
60: firstBlankText = true;
61: }
62:
63: if (c == KeyEvent.VK_BACK_SPACE || c == KeyEvent.VK_DELETE) {
64: // delete when null => original value
65: _textComponent.restoreText();
66: e.consume();
67: }
68: }
69: }
70: }
|