/*
* Copyright 2012 jMethods, Inc.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.myjavaworld.gui;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.JTextField;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;
/**
* An extension of <code>javax.swing.MTextField</code>.
*
* @author Sai Pullabhotla, psai [at] jMethods [dot] com
* @version 1.0
*
*/
public class MLabelTextField extends JTextField implements MTextComponent,
MouseListener {
private UndoManager undoManager = null;
private boolean first = true;
/**
* Creates an instance of <code>MTextField</code>.
*
*/
public MLabelTextField() {
super();
setup();
}
/**
* Creates an instance of <code>MTextField</code>.
*
* @param columns
* Display size
*
*/
public MLabelTextField(int columns) {
super(columns);
setup();
}
@Override
public void setText(String text) {
super.setText(text);
setCaretPosition(0);
if (first) {
first = false;
getDocument().addUndoableEditListener(undoManager);
}
}
@Override
public void setDocument(Document model) {
model.addUndoableEditListener(undoManager);
super.setDocument(model);
}
public void setMaximumLength(int maxLength) {
SingleLineDocument model = (SingleLineDocument) getDocument();
model.setMaximumLength(maxLength);
}
public int getMaximumLength() {
SingleLineDocument model = (SingleLineDocument) getDocument();
return model.getMaximumLength();
}
public void setCharacterCase(int characterCase) {
SingleLineDocument model = (SingleLineDocument) getDocument();
model.setCharacterCase(characterCase);
}
public int getCharacterCase() {
SingleLineDocument model = (SingleLineDocument) getDocument();
return model.getCharacterCase();
}
public void setUndoLimit(int undoLimit) {
undoManager.setLimit(undoLimit);
}
public int getUndoLimit() {
return undoManager.getLimit();
}
public void delete() {
Document model = getDocument();
int selectionStart = getSelectionStart();
int selectionEnd = getSelectionEnd();
if (!(selectionStart < 0 && selectionEnd < 0)) {
try {
model.remove(selectionStart, selectionEnd - selectionStart);
} catch (BadLocationException exp) {
System.err.println(exp);
exp.printStackTrace();
}
}
}
public void undo() throws CannotUndoException {
undoManager.undo();
}
public void redo() throws CannotRedoException {
undoManager.redo();
}
public boolean canCut() {
if (!isEditable()) {
return false;
}
return getSelectionEnd() - getSelectionStart() > 0;
}
public boolean canCopy() {
return getSelectionEnd() - getSelectionStart() > 0;
}
public boolean canPaste() {
if (!isEditable()) {
return false;
}
Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable t = clipBoard.getContents(this);
return t.isDataFlavorSupported(DataFlavor.stringFlavor);
}
public boolean canDelete() {
if (!isEditable()) {
return false;
}
return getSelectionEnd() - getSelectionStart() > 0;
}
public boolean canSelectAll() {
return true;
}
public boolean canUndo() {
if (!isEditable()) {
return false;
}
return undoManager.canUndo();
}
public boolean canRedo() {
if (!isEditable()) {
return false;
}
return undoManager.canRedo();
}
public void mouseEntered(MouseEvent evt) {
}
public void mouseExited(MouseEvent evt) {
}
public void mousePressed(MouseEvent evt) {
requestFocusInWindow();
if (evt.isPopupTrigger()) {
EditPopupMenu.getInstance().show(this, evt.getX(), evt.getY());
}
}
public void mouseReleased(MouseEvent evt) {
if (evt.isPopupTrigger()) {
EditPopupMenu.getInstance().show(this, evt.getX(), evt.getY());
}
}
public void mouseClicked(MouseEvent evt) {
// if (SwingUtilities.isRightMouseButton(evt)) {
// EditPopupMenu.getInstance().show(this, evt.getX(), evt.getY());
// }
}
@Override
protected Document createDefaultModel() {
SingleLineDocument model = new SingleLineDocument();
return model;
}
private void setup() {
undoManager = new UndoManager();
undoManager.setLimit(1);
addMouseListener(this);
setAppearance();
}
private void setAppearance() {
setOpaque(false);
setEditable(false);
setBorder(BorderFactory.createEmptyBorder());
}
}