116 lines
3.3 KiB
Java
116 lines
3.3 KiB
Java
package client.components.tableEntry;
|
|
|
|
import client.components.menus.SpellCheckPopup;
|
|
import client.components.spellCheck.SpellingModal;
|
|
import client.modules.spellChecker.KnownData;
|
|
import client.modules.spellChecker.WordSelectedListener;
|
|
import client.persistence.Cell;
|
|
import client.persistence.ImageState;
|
|
|
|
import javax.swing.*;
|
|
import javax.swing.table.TableCellEditor;
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
|
|
public class EntryCellEditor extends AbstractCellEditor implements TableCellEditor {
|
|
|
|
private String currentValue;
|
|
private JTextField textField;
|
|
|
|
private ImageState imageState;
|
|
private SpellCheckPopup spellCheckPopup;
|
|
private int column;
|
|
|
|
public EntryCellEditor(ImageState imageState) {
|
|
this.imageState = imageState;
|
|
|
|
this.spellCheckPopup = new SpellCheckPopup();
|
|
this.spellCheckPopup.addShowAction(showSuggestionsListener);
|
|
}
|
|
|
|
public boolean hasSuggestion(String value, int column) {
|
|
if(value.equals("")) return false;
|
|
|
|
KnownData knownData = imageState.getKnownDataValues().get(column);
|
|
|
|
for(String val : knownData.getWords()) {
|
|
if(val.toLowerCase().equals(value.toLowerCase())) return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
|
|
int row, int column) {
|
|
|
|
textField = new JTextField();
|
|
currentValue = (String)value;
|
|
|
|
textField.setText(currentValue);
|
|
textField.setBorder(BorderFactory.createLineBorder(Color.BLUE, 1));
|
|
|
|
textField.addMouseListener(generateMouseListener(row, column));
|
|
|
|
this.column = column;
|
|
|
|
if(isSelected) {
|
|
Cell cell = new Cell();
|
|
cell.setRecord(row);
|
|
cell.setField(column);
|
|
}
|
|
|
|
if(hasSuggestion((String)value, column - 1)) {
|
|
textField.setBackground(Color.RED);
|
|
textField.addMouseListener(rightClickPopupAction);
|
|
}
|
|
|
|
return textField;
|
|
}
|
|
|
|
@Override
|
|
public Object getCellEditorValue() {
|
|
return textField.getText();
|
|
}
|
|
|
|
private MouseListener generateMouseListener(final int row, final int column){
|
|
return new MouseAdapter() {
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
super.mouseClicked(e);
|
|
|
|
Cell cell = new Cell();
|
|
cell.setRecord(row);
|
|
cell.setField(column - 1);
|
|
imageState.setSelectedCell(cell);
|
|
}
|
|
};
|
|
}
|
|
|
|
private MouseListener rightClickPopupAction = new MouseAdapter() {
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
if(e.isPopupTrigger()) {;
|
|
spellCheckPopup.show(textField, e.getX(), e.getY());
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
private WordSelectedListener wordSelectedListener = new WordSelectedListener() {
|
|
@Override
|
|
public void wordSelected(String word) {
|
|
textField.setText(word);
|
|
}
|
|
};
|
|
|
|
private ActionListener showSuggestionsListener = new AbstractAction() {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
SpellingModal spellingModal = new SpellingModal(imageState, textField.getText(),
|
|
column - 1, wordSelectedListener);
|
|
spellingModal.setVisible(true);
|
|
}
|
|
};
|
|
}
|