home *** CD-ROM | disk | FTP | other *** search
- package symantec.itools.awt;
-
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.TextComponent;
- import java.awt.TextField;
-
- public class FormattedTextField extends TextField {
- public final char ESCAPE;
- public final char DIGIT;
- public final char SIGN;
- public final char DIGIT_OR_SIGN;
- public final char ALPHA_UPPER;
- public final char ALPHA_LOWER;
- public final char ALPHA_TO_UPPER;
- public final char ALPHA_TO_LOWER;
- public final char ALPHANUMERIC_UPPER;
- public final char ALPHANUMERIC_LOWER;
- public final char ALPHANUMERIC_TO_UPPER;
- public final char ALPHANUMERIC_TO_LOWER;
- public final char ANY;
- protected final int BACKSPACE;
- protected final int ENTER;
- protected final int DEL;
- protected boolean editable;
- protected int caret;
- protected String mask;
- protected String maskStripEscapes;
- protected int maskStripEscapesLen;
-
- public FormattedTextField() {
- this(256);
- }
-
- public FormattedTextField(int var1) {
- this("", var1);
- }
-
- public FormattedTextField(String var1) {
- this(var1, 256);
- }
-
- public FormattedTextField(String var1, int var2) {
- super(var1, var2);
- this.ESCAPE = '/';
- this.DIGIT = '9';
- this.SIGN = '+';
- this.DIGIT_OR_SIGN = '-';
- this.ALPHA_UPPER = 'A';
- this.ALPHA_LOWER = 'a';
- this.ALPHA_TO_UPPER = 'U';
- this.ALPHA_TO_LOWER = 'L';
- this.ALPHANUMERIC_UPPER = 'X';
- this.ALPHANUMERIC_LOWER = 'x';
- this.ALPHANUMERIC_TO_UPPER = 'N';
- this.ALPHANUMERIC_TO_LOWER = 'n';
- this.ANY = '*';
- this.BACKSPACE = 8;
- this.ENTER = 10;
- this.DEL = 127;
- this.caret = 0;
- }
-
- public void setMask(String var1) {
- this.mask = var1;
- this.setFillMask();
- this.maskStripEscapes = this.stripMaskEscapes();
- this.maskStripEscapesLen = this.maskStripEscapes.length();
- }
-
- public String getMask() {
- return this.mask;
- }
-
- public void setEditFont(Font var1) {
- super.setFont(var1);
- ((Component)this).invalidate();
- }
-
- public Font getEditFont() {
- return ((Component)this).getFont();
- }
-
- public void setFont(Font var1) {
- }
-
- public void setEditable(boolean var1) {
- this.editable = var1;
- super.setEditable(var1);
- if (this.editable) {
- ((Component)this).enable();
- } else {
- ((Component)this).disable();
- }
- }
-
- public boolean getEditable() {
- return this.editable;
- }
-
- protected int validChar(String var1, int var2, char var3) {
- int var4 = var1.length();
-
- for(int var5 = var2; var5 < var4; ++var5) {
- char var6 = var1.charAt(var5);
- switch (var3) {
- case '*':
- return var5;
- case '+':
- if (var6 == '+' || var6 == '-') {
- return var5;
- }
- break;
- case '-':
- if (Character.isDigit(var6) || var6 == '+' || var6 == '-') {
- return var5;
- }
- break;
- case '9':
- if (Character.isDigit(var6)) {
- return var5;
- }
- break;
- case 'A':
- if (Character.isUpperCase(var6)) {
- return var5;
- }
- break;
- case 'L':
- if (Character.isUpperCase(var6) || Character.isLowerCase(var6)) {
- return var5;
- }
- break;
- case 'N':
- if (Character.isUpperCase(var6) || Character.isLowerCase(var6) || Character.isDigit(var6)) {
- return var5;
- }
- break;
- case 'U':
- if (Character.isUpperCase(var6) || Character.isLowerCase(var6)) {
- return var5;
- }
- break;
- case 'X':
- if (Character.isUpperCase(var6) || Character.isDigit(var6)) {
- return var5;
- }
- break;
- case 'a':
- if (Character.isLowerCase(var6)) {
- return var5;
- }
- break;
- case 'n':
- if (Character.isUpperCase(var6) || Character.isLowerCase(var6) || Character.isDigit(var6)) {
- return var5;
- }
- break;
- case 'x':
- if (Character.isLowerCase(var6) || Character.isDigit(var6)) {
- return var5;
- }
- }
- }
-
- return -1;
- }
-
- protected void setFillMask() {
- int var1 = this.mask.length();
- int var2 = 0;
-
- String var3;
- char var4;
- for(var3 = ""; var2 < var1; var3 = var3 + (var4 == '/' ? this.mask.charAt(var2++) : ' ')) {
- var4 = this.mask.charAt(var2++);
- }
-
- ((TextComponent)this).setText(var3);
- }
-
- protected String applyMask(String var1) {
- boolean var2 = false;
- int var3 = this.mask.length();
- int var4 = 0;
- int var5 = 0;
- String var6 = "";
-
- while(var4 < var3) {
- char var7 = this.mask.charAt(var4++);
- if (var7 != '/') {
- if (!var2) {
- var5 = this.validChar(var1, var5, var7);
- if (var5 < 0) {
- var2 = true;
- var6 = var6 + ' ';
- } else {
- char var8 = var1.charAt(var5++);
- switch (var7) {
- case 'L':
- if (Character.isUpperCase(var8)) {
- var8 = Character.toLowerCase(var8);
- }
- break;
- case 'N':
- if (Character.isLowerCase(var8)) {
- var8 = Character.toUpperCase(var8);
- }
- break;
- case 'U':
- if (Character.isLowerCase(var8)) {
- var8 = Character.toUpperCase(var8);
- }
- break;
- case 'n':
- if (Character.isUpperCase(var8)) {
- var8 = Character.toLowerCase(var8);
- }
- }
-
- var6 = var6 + String.valueOf(var8);
- }
- } else {
- var6 = var6 + ' ';
- }
- } else {
- var6 = var6 + this.mask.charAt(var4++);
- }
- }
-
- return var6;
- }
-
- private boolean isEscape(int var1) {
- if (var1 >= 0 && var1 < this.maskStripEscapesLen) {
- return this.maskStripEscapes.charAt(var1) == '/';
- } else {
- return false;
- }
- }
-
- private String stripMaskEscapes() {
- int var1 = this.mask.length();
- int var2 = 0;
-
- String var3;
- char var4;
- for(var3 = ""; var2 < var1; var3 = var3 + var4) {
- var4 = this.mask.charAt(var2++);
- if (var4 == '/') {
- ++var2;
- }
- }
-
- return var3;
- }
-
- protected String stripMask(String var1) {
- int var2 = var1.length();
- int var3 = 0;
- String var4 = "";
-
- while(var3 < this.maskStripEscapesLen && var3 < var2) {
- if (this.isEscape(var3)) {
- ++var3;
- } else {
- var4 = var4 + var1.charAt(var3++);
- }
- }
-
- return var4;
- }
-
- private boolean processChar(int var1) {
- int var2 = ((TextComponent)this).getSelectionStart();
- int var3 = ((TextComponent)this).getSelectionEnd();
- boolean var4 = var1 == 8;
- boolean var5 = var1 == 127;
- boolean var6 = var2 != var3;
- if (!var6) {
- if (var4) {
- var2 = var3 - 1;
- } else if (var5) {
- var3 = var2 + 1;
- }
- }
-
- int var7 = !var4 && !var5 && !var6 ? var3 : var2;
- if (var7 < 0) {
- var7 = 0;
- }
-
- boolean var8 = this.isEscape(var7 > 0 ? var7 : 0);
- boolean var9 = this.isEscape(!var4 && !var5 ? var7 + 1 : (var7 > 0 ? var7 - 1 : 0));
- boolean var10;
- if (var8) {
- var10 = true;
- int var11 = var7;
-
- while(var11 >= 0) {
- if (!this.isEscape(var11--)) {
- var10 = false;
- break;
- }
- }
-
- if (var10) {
- while(var7 < this.maskStripEscapesLen && this.isEscape(var7++)) {
- }
- }
- } else {
- var10 = false;
- }
-
- int var23 = 0;
-
- while(var7 >= 0) {
- if (this.isEscape(var7--)) {
- ++var23;
- }
- }
-
- if (!var10 && var8 && !var4 && !var5) {
- --var23;
- }
-
- var2 -= var23;
- var3 -= var23;
- if (var2 < 0) {
- var2 = 0;
- }
-
- if (var3 < 0) {
- var3 = 0;
- }
-
- String var12 = this.stripMask(((TextComponent)this).getText());
- int var13 = var12.length();
- String var14 = !var4 && !var5 ? String.valueOf((char)var1) : "";
- String var15 = var2 > 0 ? var12.substring(0, var2) : "";
- String var16 = var3 < var13 ? var12.substring(var3) : "";
- String var17 = !var4 && !var5 ? var15 + var14 + var16 : var15 + var16;
- String var18 = this.applyMask(var17);
- if (var4 || var5 || !var12.equals(this.stripMask(var18))) {
- ((TextComponent)this).setText(var18);
- if (!var4 && !var5) {
- this.caret = (var6 ? var2 : var3) + var23;
- if (this.caret < var13 && this.isEscape(this.caret + 1)) {
- for(int var22 = this.caret + 1; var22 < var13 && this.isEscape(var22++); ++this.caret) {
- }
- }
- } else {
- --var23;
- this.caret = var2 + var23;
- if (var9 && this.caret > 0 && this.isEscape(this.caret)) {
- for(int var21 = this.caret; var21 >= 0 && this.isEscape(var21--); --this.caret) {
- }
- }
- }
-
- ((TextComponent)this).select(this.caret + 1, this.caret + 1);
- }
-
- return true;
- }
-
- private void processKeyAction(int var1) {
- switch (var1) {
- case 1000:
- this.caret = 0;
- return;
- case 1001:
- this.caret = this.maskStripEscapesLen;
- return;
- case 1006:
- if (--this.caret < 0) {
- this.caret = 0;
- return;
- }
- break;
- case 1007:
- if (++this.caret >= this.maskStripEscapesLen) {
- this.caret = this.maskStripEscapesLen;
- return;
- }
- }
-
- }
-
- public boolean keyDown(Event var1, int var2) {
- switch (var1.id) {
- case 401:
- if (var2 != 10) {
- return this.processChar(var2);
- }
- case 402:
- default:
- break;
- case 403:
- this.processKeyAction(var1.key);
- }
-
- return super.keyDown(var1, var2);
- }
-
- public Dimension preferredSize() {
- Font var1 = ((Component)this).getFont();
- if (var1 != null) {
- FontMetrics var2 = ((Component)this).getFontMetrics(var1);
- return new Dimension(var2.stringWidth("ABCDE") + 4, var2.getHeight() + 4);
- } else {
- return new Dimension(30, 15);
- }
- }
-
- public Dimension minimumSize() {
- return this.preferredSize();
- }
- }
-