package jav.concordance.view;
import info.clearthought.layout.TableLayout;
import jav.concordance.control.ConcordanceEntry;
import jav.correctionBackend.Token;
import jav.correctionBackend.TokenImageInfoBox;
import jav.gui.events.MessageCenter;
import jav.gui.events.tokenNavigation.TokenNavigationEvent;
import jav.gui.events.tokenNavigation.TokenNavigationType;
import jav.gui.events.tokenStatus.TokenStatusType;
import jav.gui.main.MainController;
import jav.gui.token.behaviour.TokenVisualizationConcordanceMode;
import jav.gui.token.behaviour.TokenVisualizationMode;
import jav.gui.token.display.ImageTokenVisualization;
import jav.gui.token.display.OnlyTextTokenVisualization;
import jav.gui.token.display.PseudoImageTokenVisualization;
import jav.gui.token.display.TokenVisualization;
import jav.gui.token.tools.ImageProcessor;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
/**
* Copyright (c) 2012, IMPACT working group at the Centrum für Informations- und
* Sprachverarbeitung, University of Munich. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer. Redistributions in binary
* form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the ocr-postcorrection tool developed by the IMPACT
* working group at the Centrum für Informations- und Sprachverarbeitung,
* University of Munich. For further information and contacts visit
* http://ocr.cis.uni-muenchen.de/
*
* @author thorsten (thorsten.vobl@googlemail.com)
*/
public class ConcordancePage extends JPanel {
private TableLayout tl;
private Border inactiveLeft;
private Border inactiveCenter;
private Border inactiveRight;
private Border activeLeft;
private Border activeCenter;
private Border activeRight;
private ItemListener itemListener;
private ImageProcessor ipc;
private double p = TableLayout.PREFERRED;
ConcordanceTopComponent parent;
private TokenVisualizationMode tvMode;
long begintime = System.currentTimeMillis();
ConcordancePage(final ConcordanceTopComponent par, int start, int len) {
super();
System.out.println("Page construction " + begintime);
tvMode = new TokenVisualizationConcordanceMode();
this.setBorder(new EmptyBorder(10, 10, 10, 10));
this.parent = par;
this.ipc = new ImageProcessor();
inactiveLeft = BorderFactory.createMatteBorder(2, 2, 2, 0, Color.WHITE);
inactiveCenter = BorderFactory.createMatteBorder(2, 0, 2,
0, Color.WHITE);
inactiveRight = BorderFactory.createMatteBorder(2, 0, 2,
2, Color.WHITE);
activeLeft = BorderFactory.createMatteBorder(2, 2, 2, 0,
Color.CYAN);
activeCenter = BorderFactory.createMatteBorder(2, 0, 2, 0,
Color.CYAN);
activeRight = BorderFactory.createMatteBorder(2, 0, 2, 2,
Color.CYAN);
tl = new TableLayout();
tl.setVGap(10);
double[] size = {p, p, p};
tl.setColumn(size);
this.setLayout(tl);
this.setBackground(Color.white);
itemListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
Component component = (Component) e.getSource();
TokenVisualization tv = (TokenVisualization) component.getParent().getComponent(1);
int tokenId = tv.getTokenID();
if (e.getStateChange() == ItemEvent.SELECTED) {
for (JPanel p : parent.getConcordanceGraphicsRegistry().get(tokenId)) {
if (p.getName().equals("rightc")) {
p.setBorder(activeRight);
} else if (p.getName().equals("word")) {
p.setBorder(activeCenter);
parent.setSelected(tokenId, true);
} else if (p.getName().equals("leftc")) {
p.setBorder(activeLeft);
}
}
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
for (JPanel p : parent.getConcordanceGraphicsRegistry().get(tokenId)) {
if (p.getName().equals("rightc")) {
p.setBorder(inactiveRight);
} else if (p.getName().equals("word")) {
p.setBorder(inactiveCenter);
parent.setSelected(tokenId, false);
} else if (p.getName().equals("leftc")) {
p.setBorder(inactiveLeft);
}
}
}
}
};
int counter = 0;
Object[] data = parent.getEntryRegistry().keySet().toArray();
while (counter < len) {
Integer tok = (Integer) data[start + counter];
ConcordanceEntry cce = parent.getEntryRegistry().get(tok);
long row = System.currentTimeMillis();
this.addRow(tok, cce.getCandidateString(), cce.isSelected(), cce.isCorrected(), cce.isDisabled());
counter++;
System.out.println("Row add " + (System.currentTimeMillis()-row));
}
System.out.println("Done " + (System.currentTimeMillis()-begintime));
}
private void createLeftContext(int tokenId, JPanel container, boolean corrected) {
for (int i = 1; i <= parent.getLeftContextSize(); i++) {
long prev = System.currentTimeMillis();
Token tt = MainController.findInstance().getDocument().getPreviousToken(tokenId);
System.out.println("prev " + (System.currentTimeMillis()-prev));
if (tt != null) {
tokenId = tt.getID();
TokenVisualization tv = this.createTokenVisualization(tt);
if (corrected) {
tv.setBackground(new Color(229, 236, 255));
} else {
tv.setBackground(Color.white);
}
tv.setMode(tvMode);
parent.getTVRegistry().add(tt, tv);
container.add(tv);
} else {
break;
}
}
}
private void createRightContext(int tokenId, JPanel container, boolean corrected) {
for (int i = 1; i <= parent.getRightContextSize(); i++) {
long next = System.currentTimeMillis();
Token ttt = MainController.findInstance().getDocument().getNextToken(tokenId);
System.out.println("next " + (System.currentTimeMillis()-next));
if (ttt != null) {
tokenId = ttt.getID();
TokenVisualization tokv = this.createTokenVisualization(ttt);
if (corrected) {
tokv.setBackground(new Color(229, 236, 255));
} else {
tokv.setBackground(Color.white);
}
tokv.setMode(tvMode, ttt);
parent.getTVRegistry().add(ttt, tokv);
container.add(tokv);
} else {
break;
}
}
}
private void addRow(int tokenID, String cand, boolean selected, boolean corrected, boolean disabled) {
tl.insertRow(tl.getNumRow(), p);
JCheckBox b = new JCheckBox();
JPanel leftC = new JPanel();
leftC.setLayout(new BoxLayout(leftC, BoxLayout.LINE_AXIS));
leftC.setAlignmentX(Component.RIGHT_ALIGNMENT);
leftC.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
leftC.setAlignmentY(Component.BOTTOM_ALIGNMENT);
leftC.setName("leftc");
JPanel rightC = new JPanel();
rightC.setLayout(new BoxLayout(rightC, BoxLayout.X_AXIS));
rightC.setAlignmentX(Component.LEFT_ALIGNMENT);
rightC.setAlignmentY(BOTTOM_ALIGNMENT);
rightC.setName("rightc");
JPanel word = new JPanel();
word.setLayout(new BoxLayout(word, BoxLayout.X_AXIS));
word.setAlignmentX(Component.CENTER_ALIGNMENT);
word.setAlignmentY(Component.CENTER_ALIGNMENT);
word.setName("word");
if (corrected) {
b.setEnabled(false);
b.setBackground(new Color(229, 236, 255));
leftC.setBackground(new Color(229, 236, 255));
word.setBackground(new Color(229, 236, 255));
rightC.setBackground(new Color(229, 236, 255));
} else if (disabled) {
b.setEnabled(false);
b.setBackground(Color.lightGray);
leftC.setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage"));
word.setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage"));
rightC.setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage"));
leftC.setBackground(Color.lightGray);
word.setBackground(Color.lightGray);
rightC.setBackground(Color.lightGray);
} else {
b.setSelected(selected);
b.addItemListener(itemListener);
b.setBackground(Color.WHITE);
leftC.setBackground(Color.WHITE);
rightC.setBackground(Color.WHITE);
word.setBackground(Color.WHITE);
}
if (!disabled) {
long lc = System.currentTimeMillis();
this.createLeftContext(tokenID, leftC, corrected);
System.out.println("left context " + (System.currentTimeMillis()-lc));
}
if (selected) {
leftC.setBorder(activeLeft);
} else {
leftC.setBorder(inactiveLeft);
}
this.add(leftC, "0, " + (tl.getNumRow() - 1) + ", f, f");
word.add(Box.createHorizontalStrut(35)); //new JLabel(" "));
Token tt = MainController.findInstance().getDocument().getTokenByID(tokenID);
TokenVisualization tv = this.createTokenVisualization(tt);
if (corrected) {
tv.setBackground(new Color(229, 236, 255));
} else {
tv.setBackground(Color.white);
}
if (!disabled) {
tv.setMode(tvMode, tt);
parent.getTVRegistry().add(tokenID, tv);
} else {
tv.deactivate();
}
tv.setAlignmentY(CENTER_ALIGNMENT);
word.add(tv);
b.setAlignmentY(CENTER_ALIGNMENT);
word.add(b);
FastCorrectionButton topcandb = new FastCorrectionButton(cand, tv.getTokenID());
if (cand.equals("")) {
topcandb.setEnabled(false);
}
topcandb.setName("topcandb");
topcandb.setAlignmentY(CENTER_ALIGNMENT);
// JLabel topcandl = new JLabel(" -> " + cand);
// topcandl.setForeground(Color.BLUE);
// topcandl.setName("topcandl");
// topcandl.setAlignmentY(CENTER_ALIGNMENT);
word.add(topcandb);
word.add(Box.createHorizontalStrut(35)); //new JLabel(" "));
if (selected) {
word.setBorder(activeCenter);
} else {
word.setBorder(inactiveCenter);
}
this.add(word, "1, " + (tl.getNumRow() - 1));
if (!disabled) {
long rc = System.currentTimeMillis();
this.createRightContext(tokenID, rightC, corrected);
System.out.println("right context " + (System.currentTimeMillis()-rc));
}
if (selected) {
rightC.setBorder(activeRight);
} else {
rightC.setBorder(inactiveRight);
}
this.add(rightC, "2, " + (tl.getNumRow() - 1) + ", f, f");
parent.getConcordanceGraphicsRegistry().add(tt.getID(), leftC, word, rightC);
}
public void selectAll() {
Component[] comp = this.getComponents();
int counter = 0;
while (counter < comp.length) {
JPanel word = (JPanel) comp[counter + 1];
JCheckBox b = (JCheckBox) word.getComponent(2);
if (b.isEnabled() && !b.isSelected()) {
b.setSelected(true);
}
counter += 3;
}
}
public void deselectAll() {
Component[] comp = this.getComponents();
int counter = 0;
while (counter < comp.length) {
JPanel word = (JPanel) comp[counter + 1];
JCheckBox b = (JCheckBox) word.getComponent(2);
if (b.isEnabled() && b.isSelected()) {
b.setSelected(false);
}
counter += 3;
}
}
private TokenVisualization createTokenVisualization(Token t) {
long time = System.currentTimeMillis();
TokenVisualization tv;
TokenImageInfoBox tiib = t.getTokenImageInfoBox();
if (tiib != null && parent.showImage() && parent.hasImage()) {
// if no image loaded or token has different source image than last one
if (ipc.getImageString() == null || !ipc.getImageString().equals(t.getImageFilename())) {
ipc.setImageInput(t.getImageFilename());
}
int left = tiib.getCoordinateLeft();
int right = tiib.getCoordinateRight();
int top = tiib.getCoordinateTop();
int bottom = tiib.getCoordinateBottom();
int width = right - left;
int height = bottom - top;
BufferedImage bi = ipc.getTokenImage(left, top, width, height, parent.getScale());
if (t.getWOCR().equals(" ")) {
tv = new OnlyTextTokenVisualization(t, parent.getFontSize());
} else {
tv = new ImageTokenVisualization(bi, t, parent.getFontSize());
}
} else {
tv = new OnlyTextTokenVisualization(t, parent.getFontSize());
}
System.out.println("tv " + (System.currentTimeMillis()-time));
return tv;
}
public void zoomFont(int i) {
for (Component ca : this.getComponents()) {
if (ca instanceof JPanel) {
JPanel tokenVisContainer = (JPanel) ca;
for (Component cb : tokenVisContainer.getComponents()) {
if (cb instanceof TokenVisualization) {
TokenVisualization tv = (TokenVisualization) cb;
tv.zoomFont(i);
}
if (cb instanceof JLabel) {
JLabel jl = (JLabel) cb;
Font f = jl.getFont();
float nS = (float) i;
Font deriveFont = f.deriveFont(nS);
jl.setFont(deriveFont);
}
}
}
}
}
public void zoomImg(double scale) {
for (Component ca : this.getComponents()) {
if (ca instanceof JPanel) {
JPanel tokenVisContainer = (JPanel) ca;
for (Component cb : tokenVisContainer.getComponents()) {
if (cb instanceof ImageTokenVisualization) {
ImageTokenVisualization tv = (ImageTokenVisualization) cb;
// load image file containing token if not already loaded
Token tok = MainController.findInstance().getDocument().getTokenByID(tv.getTokenID());
if (!tok.getImageFilename().equals(ipc.getImageString())) {
ipc.setImageInput(tok.getImageFilename());
}
TokenImageInfoBox tiib = tok.getTokenImageInfoBox();
if (tiib != null) {
int left = tiib.getCoordinateLeft();
int right = tiib.getCoordinateRight();
int top = tiib.getCoordinateTop();
int bottom = tiib.getCoordinateBottom();
int width = right - left;
int height = bottom - top;
tv.setImage(ipc.getTokenImage(left, top, width, height, scale));
}
}
}
}
}
}
public void toggleImages(boolean on) {
for (Component ca : this.getComponents()) {
if (ca instanceof JPanel) {
JPanel container = (JPanel) ca;
for (Component cb : container.getComponents()) {
if (cb instanceof ImageTokenVisualization) {
ImageTokenVisualization tv = (ImageTokenVisualization) cb;
if (on) {
TokenImageInfoBox tiib = MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()).getTokenImageInfoBox();
if (tiib != null) {
int left = tiib.getCoordinateLeft();
int right = tiib.getCoordinateRight();
int top = tiib.getCoordinateTop();
int bottom = tiib.getCoordinateBottom();
int width = right - left;
int height = bottom - top;
BufferedImage bi = ipc.getTokenImage(left, top, width, height, parent.getScale());
tv.setImage(bi);
}
} else {
if (tv.hasImage()) {
tv.clearImage();
}
}
} else if (cb instanceof PseudoImageTokenVisualization) {
((PseudoImageTokenVisualization) cb).toggleImage(on);
}
}
}
}
}
public TokenVisualizationMode getVisualizationMode() {
return this.tvMode;
}
// sets the candidate for all tokens, only to be used in clone concordance
public void setCandidateString(String s) {
for (Component ca : this.getComponents()) {
if (ca instanceof JPanel) {
if (ca.getName().equals("word")) {
JPanel wordContainer = (JPanel) ca;
TokenVisualization tokv = (TokenVisualization) wordContainer.getComponent(1);
ConcordanceEntry cce = parent.getEntryRegistry().get(tokv.getTokenID());
if (!cce.isCorrected() && !cce.isDisabled()) {
JButton wordcandb = (JButton) wordContainer.getComponent(3);
//JLabel wordcandl = (JLabel) wordContainer.getComponent(3);
wordcandb.setText(s);
if (s.equals("")) {
wordcandb.setEnabled(false);
} else {
wordcandb.setEnabled(true);
}
}
}
}
}
}
public void grayOut(TokenVisualization tv, boolean grayout) {
ArrayList<JPanel> line = parent.getConcordanceGraphicsRegistry().get(tv.getTokenID());
if (grayout) {
JPanel leftC = line.get(0);
JPanel word = line.get(1);
JPanel rightC = line.get(2);
JCheckBox b = (JCheckBox) word.getComponent(2);
JButton jb = (JButton) word.getComponent(3);
jb.setEnabled(false);
leftC.setBorder(inactiveRight);
word.setBorder(inactiveCenter);
rightC.setBorder(inactiveLeft);
if( b.isSelected()) {
b.setSelected(false);
b.setEnabled(false);
}
for (Component ca : leftC.getComponents()) {
if (ca instanceof TokenVisualization) {
ca.setBackground(new Color(229, 236, 255));
}
}
for (Component ca : rightC.getComponents()) {
if (ca instanceof TokenVisualization) {
ca.setBackground(new Color(229, 236, 255));
}
}
leftC.setBackground(new Color(229, 236, 255));
word.setBackground(new Color(229, 236, 255));
rightC.setBackground(new Color(229, 236, 255));
tv.setBackground(new Color(229, 236, 255));
b.setBackground(new Color(229, 236, 255));
} else {
JPanel leftC = line.get(0);
JPanel word = line.get(1);
JPanel rightC = line.get(2);
JCheckBox b = (JCheckBox) word.getComponent(2);
JButton jb = (JButton) word.getComponent(3);
jb.setEnabled(true);
leftC.setBorder(activeRight);
word.setBorder(activeCenter);
rightC.setBorder(activeLeft);
if( b.isSelected()) {
b.setSelected(false);
b.setEnabled(true);
}
for (Component ca : leftC.getComponents()) {
if (ca instanceof TokenVisualization) {
ca.setBackground(Color.white);
}
}
for (Component ca : rightC.getComponents()) {
if (ca instanceof TokenVisualization) {
ca.setBackground(Color.white);
}
}
leftC.setBackground(Color.white);
word.setBackground(Color.white);
rightC.setBackground(Color.white);
tv.setBackground(Color.white);
b.setBackground(Color.white);
}
}
private void disableEntry(final TokenVisualization tv, int id, ArrayList<JPanel> rowpa) {
parent.getConcordanceGraphicsRegistry().remove(id);
parent.getEntryRegistry().get(id).setDisabled(true);
for (Component ca : rowpa.get(0).getComponents()) {
if (ca instanceof TokenVisualization) {
TokenVisualization tokv = (TokenVisualization) ca;
tokv.setBackground(Color.lightGray);
tokv.deactivate();
}
}
for (Component ca : rowpa.get(1).getComponents()) {
if (ca instanceof TokenVisualization) {
TokenVisualization tokv = (TokenVisualization) ca;
tokv.setBackground(Color.lightGray);
tokv.deactivate();
}
}
for (Component ca : rowpa.get(2).getComponents()) {
if (ca instanceof TokenVisualization) {
TokenVisualization tokv = (TokenVisualization) ca;
tokv.setBackground(Color.lightGray);
tokv.deactivate();
}
}
parent.addDisabled();
JCheckBox b = (JCheckBox) rowpa.get(1).getComponent(2);
b.setEnabled(false);
b.setSelected(false);
FastCorrectionButton fb = (FastCorrectionButton) rowpa.get(1).getComponent(3);
fb.setEnabled(false);
MouseListener listener = new MouseListener() {
@Override
public void mouseClicked(MouseEvent me) {
}
@Override
public void mousePressed(MouseEvent me) {
}
@Override
public void mouseReleased(MouseEvent me) {
if (me.getButton() == MouseEvent.BUTTON3) {
JPopupMenu menu = new JPopupMenu();
JMenuItem jumpItem = new JMenuItem(java.util.ResourceBundle.getBundle("jav/gui/token/display/Bundle").getString("jumpto"));
jumpItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MessageCenter.getInstance().fireTokenNavigationEvent(new TokenNavigationEvent(tv, tv.getTokenID(), TokenNavigationType.FOCUS_IN_MAIN));
}
});
menu.add(jumpItem);
menu.show(tv, 50, 50);
}
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
};
rowpa.get(0).addMouseListener(listener);
rowpa.get(1).addMouseListener(listener);
rowpa.get(2).addMouseListener(listener);
rowpa.get(0).setBorder(inactiveRight);
rowpa.get(1).setBorder(inactiveCenter);
rowpa.get(2).setBorder(inactiveLeft);
rowpa.get(0).setBackground(Color.lightGray);
rowpa.get(1).setBackground(Color.lightGray);
rowpa.get(2).setBackground(Color.lightGray);
b.setBackground(Color.lightGray);
rowpa.get(0).setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage"));
rowpa.get(1).setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage"));
rowpa.get(2).setToolTipText(java.util.ResourceBundle.getBundle("jav/gui/concordance/Bundle").getString("mergeDamage"));
this.updateTokenRegistry();
}
private void enableEntry(final TokenVisualization tv, int index, ArrayList<JPanel> rowpa) {
parent.getConcordanceGraphicsRegistry().remove(index);
parent.getEntryRegistry().get(index).setDisabled(false);
for (Component ca : rowpa.get(0).getComponents()) {
if (ca instanceof TokenVisualization) {
TokenVisualization tokv = (TokenVisualization) ca;
tokv.setBackground(Color.white);
tokv.activate();
}
}
for (Component ca : rowpa.get(1).getComponents()) {
if (ca instanceof TokenVisualization) {
TokenVisualization tokv = (TokenVisualization) ca;
tokv.setBackground(Color.white);
tokv.activate();
}
}
for (Component ca : rowpa.get(2).getComponents()) {
if (ca instanceof TokenVisualization) {
TokenVisualization tokv = (TokenVisualization) ca;
tokv.setBackground(Color.white);
tokv.activate();
}
}
parent.removeDisabled();
JCheckBox b = (JCheckBox) rowpa.get(1).getComponent(2);
b.setEnabled(true);
b.setSelected(false);
FastCorrectionButton fb = (FastCorrectionButton) rowpa.get(1).getComponent(3);
fb.setEnabled(true);
MouseListener listener = new MouseListener() {
@Override
public void mouseClicked(MouseEvent me) {
}
@Override
public void mousePressed(MouseEvent me) {
}
@Override
public void mouseReleased(MouseEvent me) {
if (me.getButton() == MouseEvent.BUTTON3) {
JPopupMenu menu = new JPopupMenu();
JMenuItem jumpItem = new JMenuItem(java.util.ResourceBundle.getBundle("jav/gui/token/display/Bundle").getString("jumpto"));
jumpItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MessageCenter.getInstance().fireTokenNavigationEvent(new TokenNavigationEvent(tv, tv.getTokenID(), TokenNavigationType.FOCUS_IN_MAIN));
}
});
menu.add(jumpItem);
menu.show(tv, 50, 50);
}
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseExited(MouseEvent me) {
}
};
rowpa.get(0).removeMouseListener(listener);
rowpa.get(1).removeMouseListener(listener);
rowpa.get(2).removeMouseListener(listener);
rowpa.get(0).setBorder(activeRight);
rowpa.get(1).setBorder(activeCenter);
rowpa.get(2).setBorder(activeLeft);
rowpa.get(0).setBackground(Color.white);
rowpa.get(1).setBackground(Color.white);
rowpa.get(2).setBackground(Color.white);
b.setBackground(Color.white);
this.updateTokenRegistry();
}
private void updateTokenRegistry() {
parent.getTVRegistry().clear();
for (Component ca : this.getComponents()) {
if (ca instanceof JPanel) {
JPanel container = (JPanel) ca;
for (Component cb : container.getComponents()) {
if (cb instanceof TokenVisualization) {
TokenVisualization tv = (TokenVisualization) cb;
parent.getTVRegistry().add(tv.getTokenID(), tv);
}
}
}
}
}
public void update(TokenStatusType t, int affectedID, ArrayList<Integer> affectedTokens) {
Iterator<Integer> tokid_it = affectedTokens.iterator();
while (tokid_it.hasNext()) {
int tokid = tokid_it.next();
System.out.println(t.toString() + " " + affectedID);
for( int i = 0; i<affectedTokens.size();i++) {
System.out.println("AFFECTED " + affectedTokens.get(i));
}
if (parent.getEntryRegistry().containsKey(tokid)) {
Token to = MainController.findInstance().getDocument().getTokenByID(tokid);
if (to.isCorrected()) {
}
}
}
}
// @Deprecated
// public void update(TokenStatusType tst, TokenVisualization tv, int tokenIndex, int numAffected, boolean updateIndices) {
//
// ArrayList<JPanel> rowpa = parent.getConcordanceGraphicsRegistry().get(tl.getConstraints(tv.getParent()).row1);
// if (rowpa != null) {
// TokenVisualization mid = (TokenVisualization) rowpa.get(1).getComponent(1);
//
// if (tst == TokenStatusType.MERGED_RIGHT || tst == TokenStatusType.DELETE) {
//
// if (tv.getParent().getName().equals("leftc")) {
// for (AbstractTokenVisualization atv : parent.getTVRegistry().getVisualizations(tokenIndex + numAffected)) {
// TokenVisualization test = (TokenVisualization) atv;
// if (tl.getConstraints(tv.getParent()).row1 == tl.getConstraints(test.getParent()).row1) {
// /*
// * if the deleted area affects the concordance
// * entry, it has to be disabled because by being
// * tampered with, it looses its specific features
// * that made it belong to the concordance group
// */
// if (!test.getParent().getName().equals("leftc")) {
// tv.update(MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()).getWDisplay());
// disableEntry(tv, mid.getTokenID(), rowpa);
// rowpa.get(1).removeAll();
// rowpa.get(2).removeAll();
// parent.getEntryRegistry().remove(mid.getTokenID());
//
// if (updateIndices) {
// this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected);
// }
//
// this.updateTokenRegistry();
// //if the merging is inside the left context of the entry, update the context
// } else {
// rowpa.get(0).removeAll();
// this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected);
// tokenIndex = mid.getTokenID();
// for (int i = 1; i <= parent.getLeftContextSize(); i++) {
// if (tokenIndex - i >= 0) {
// Token t = MainController.findInstance().getDocument().getTokenByIndex(tokenIndex - i);
// TokenVisualization temp = this.createTokenVisualization(t);
// temp.setBackground(Color.white);
// temp.setMode(tvMode, t);
// rowpa.get(0).add(temp);
// }
// }
// rowpa.get(0).revalidate();
// this.updateTokenRegistry();
// }
//
// break;
// }
// }
// } else if (tv.getParent().getName().equals("word")) {
// disableEntry(tv, tokenIndex, rowpa);
// tv.getParent().remove(tv);
// parent.getEntryRegistry().remove(mid.getTokenID());
//
// if (updateIndices) {
// this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected);
// }
//
// this.updateTokenRegistry();
//
// } else if (tv.getParent().getName().equals("rightc")) {
// rowpa.get(2).removeAll();
// this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected);
// tokenIndex = mid.getTokenID();
// for (int i = 1; i <= parent.getRightContextSize(); i++) {
// if (tokenIndex + i < MainController.findInstance().getDocument().getNumberOfTokens()) {
// Token t = MainController.findInstance().getDocument().getTokenByIndex(tokenIndex + i);
// TokenVisualization temp = this.createTokenVisualization(t);
// temp.setBackground(Color.white);
// temp.setMode(tvMode, t);
// rowpa.get(2).add(temp);
// }
// }
// rowpa.get(2).revalidate();
// this.updateTokenRegistry();
// } else {
// new CustomErrorDialog().showDialog("ClassicConcordancePage::update undefined panel name");
// }
// } else if (tst == TokenStatusType.SPLIT) {
//
// if (tv.getParent().getName().equals("leftc")) {
// rowpa.get(0).removeAll();
// this.updateTokenVisualizationIndices(tokenIndex, numAffected);
// tokenIndex = mid.getTokenID();
// for (int i = 1; i <= parent.getLeftContextSize(); i++) {
// if (tokenIndex - i >= 0) {
// TokenVisualization temp = this.createTokenVisualization(MainController.findInstance().getDocument().getTokenByIndex(tokenIndex - i));
// temp.setBackground(Color.white);
// temp.setMode(tvMode);
// rowpa.get(0).add(temp);
// }
// }
// rowpa.get(0).revalidate();
// this.updateTokenRegistry();
// } else if (tv.getParent().getName().equals("word")) {
//
// tv.update(MainController.findInstance().getDocument().getTokenByID(tv.getTokenID()).getWDisplay());
// disableEntry(tv, tv.getTokenID(), rowpa);
// parent.getEntryRegistry().remove(tokenIndex);
//
// if (updateIndices) {
// this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected);
// }
//
// this.updateTokenRegistry();
//
// } else if (tv.getParent().getName().equals("rightc")) {
//
// rowpa.get(2).removeAll();
//
// if (updateIndices) {
// this.updateTokenVisualizationIndices(tokenIndex, 0 - numAffected);
// }
//
// tokenIndex = mid.getTokenID();
// for (int i = 1; i <= parent.getRightContextSize(); i++) {
// if (tokenIndex + i < MainController.findInstance().getDocument().getNumberOfTokens()) {
// Token t = MainController.findInstance().getDocument().getTokenByIndex(tokenIndex + i);
// TokenVisualization temp = this.createTokenVisualization(t);
// temp.setBackground(Color.white);
// temp.setMode(tvMode);
// rowpa.get(2).add(temp);
// }
// }
// rowpa.get(2).revalidate();
// this.updateTokenRegistry();
// } else {
// new CustomErrorDialog().showDialog("ClassicConcordancePage::update undefined panel name");
// }
// }
// }
// }
}