diff --git a/gte/src/gte/icons/clearrectangles.png b/gte/src/gte/icons/clearrectangles.png new file mode 100644 index 0000000..2aa9750 Binary files /dev/null and b/gte/src/gte/icons/clearrectangles.png differ diff --git "a/gte/src/gte/icons/clearrectangles\\.png" "b/gte/src/gte/icons/clearrectangles\\.png" new file mode 100644 index 0000000..2aa9750 Binary files /dev/null and "b/gte/src/gte/icons/clearrectangles\\.png" differ diff --git a/gte/src/gte/icons/zoomwidth.png b/gte/src/gte/icons/zoomwidth.png new file mode 100644 index 0000000..385ca16 Binary files /dev/null and b/gte/src/gte/icons/zoomwidth.png differ diff --git a/gte/src/gte/icons/zoomwindow.png b/gte/src/gte/icons/zoomwindow.png new file mode 100644 index 0000000..f7b430a Binary files /dev/null and b/gte/src/gte/icons/zoomwindow.png differ diff --git a/gte/src/gte/model/Component.java b/gte/src/gte/model/Component.java index 34a4b1d..c998c49 100644 --- a/gte/src/gte/model/Component.java +++ b/gte/src/gte/model/Component.java @@ -4,20 +4,25 @@ import gte.utils.UnsupportedImageTypeException; import javax.imageio.ImageIO; +import javax.swing.*; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Point; import java.awt.Color; +import java.awt.event.MouseAdapter; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import java.awt.Graphics; import java.awt.Graphics2D; import java.io.File; +import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.awt.event.*; +import java.util.Scanner; /** * Created by kns10 on 2/24/16. @@ -30,6 +35,7 @@ public class Component { private int page_height; private String cc_image; private String image_basePath = "gte/data/sample_ccs/page-"; + private String json_basePath = "temp/"; private Rectangle imageCoords; private String[] everythingElse; @@ -54,6 +60,12 @@ public void setAssociatedType(String s) { associatedType = s; } + public void setAssociatedWord(String s) { associatedWord = s; } + + public String getAssociatedWord() { + return this.associatedWord; + } + public static BufferedImage tintImage(BufferedImage loadImg, int red, int green, int blue, int alpha) { Graphics g = loadImg.getGraphics(); g.setColor(new Color(red, green, blue, alpha)); @@ -180,7 +192,25 @@ public Component(String s) { isSelected = false; + // use rectangle bounding box as unique identifier for each component + // take the hash code to remove all invalid characters + // might change to json eventually + String pathToJSON = json_basePath + imageCoords.toString().hashCode() + "/data.txt"; + try { + Scanner in = new Scanner(new FileReader(pathToJSON)); + associatedWord = in.nextLine().trim(); + in.close(); + } catch (Exception e) { + associatedWord = ""; + } } + + + // on hover + // do stuff + //this.setTooltip(associatedWord); + + } diff --git a/gte/src/gte/view/Canvas.java b/gte/src/gte/view/Canvas.java index 1fb9ced..dfe4e42 100644 --- a/gte/src/gte/view/Canvas.java +++ b/gte/src/gte/view/Canvas.java @@ -55,6 +55,7 @@ public Canvas(Model model, View view, Controller controller) mouseListener = new CanvasMouseListener(model, view, controller); keyboardListener = new CanvasKeyboardListener(model, view, controller); addMouseListener(mouseListener); + addMouseMotionListener(mouseListener); addKeyListener(keyboardListener); } diff --git a/gte/src/gte/view/CanvasMouseListener.java b/gte/src/gte/view/CanvasMouseListener.java index d75e434..9755485 100644 --- a/gte/src/gte/view/CanvasMouseListener.java +++ b/gte/src/gte/view/CanvasMouseListener.java @@ -65,6 +65,8 @@ public void mouseClicked(MouseEvent e) model.selectComponent(model.whichClicked(e.getPoint())); } + + @Override public void mousePressed(MouseEvent e) { @@ -125,13 +127,23 @@ public void mouseExited(MouseEvent e) @Override public void mouseDragged(MouseEvent e) { - x2 = (int)(e.getX()/view.getZoomLevel()); - y2 = (int)(e.getY()/view.getZoomLevel()); + x2 = (int)(e.getX() / view.getZoomLevel()); + y2 = (int)(e.getY() / view.getZoomLevel()); view.getCanvas().repaint(); } @Override public void mouseMoved(MouseEvent e) { + try { + String a; + if ((a = model.whichClicked(e.getPoint()).getAssociatedWord()) != null && + !a.equals(view.getCanvasTooltip())) { + System.out.println(a); + view.setCanvasTooltip(a); + } + } catch (NullPointerException npe) { + + } } } diff --git a/gte/src/gte/view/TypeEnterBox.java b/gte/src/gte/view/TypeEnterBox.java index 3a07696..b511df3 100644 --- a/gte/src/gte/view/TypeEnterBox.java +++ b/gte/src/gte/view/TypeEnterBox.java @@ -26,6 +26,8 @@ public class TypeEnterBox extends JPanel { private Model model; private JTextField field; private InputKeyboardListener keyboardListener; + private String json_basePath = "temp/"; + private TypeEnterBox() { } @@ -41,8 +43,29 @@ public String convertToJSON() { } public void convertDataToJSON(String label, Component data) { + + try { + data.setAssociatedWord(label); + String pathToJSON = json_basePath + data.toString().hashCode() + "/data.txt"; + System.out.println(pathToJSON); + File file= new File(pathToJSON); + FileWriter fw; + if (!file.exists()) { + file.getParentFile().mkdirs(); + file.createNewFile(); + } + fw = new FileWriter(file); + fw.write(label); + fw.flush(); + fw.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + JSONObject obj = new JSONObject(); obj.put("label", label); + obj.put("hashcode", data.toString().hashCode()); obj.put("data", data.toString()); try { diff --git a/gte/src/gte/view/View.java b/gte/src/gte/view/View.java index 79ef343..357150d 100644 --- a/gte/src/gte/view/View.java +++ b/gte/src/gte/view/View.java @@ -43,6 +43,15 @@ public void setZoomLevel(double z) { repaint(); canvas.repaint(); } + + public void setCanvasTooltip(String s) { + canvas.setToolTipText(s); + } + + public String getCanvasTooltip() { + return canvas.getToolTipText(); + } + public double getZoomLevel() {return zoomLevel;} public View(Model model, Controller controller) @@ -156,22 +165,26 @@ public void windowClosing(WindowEvent we) //keyboardListener = new CanvasKeyboardListener(model, this, controller); //addKeyListener(keyboardListener); - System.out.println("wut"); KeyboardFocusManager.getCurrentKeyboardFocusManager() .addKeyEventDispatcher(new KeyEventDispatcher() { @Override public boolean dispatchKeyEvent(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER && e.getID() == KeyEvent.KEY_PRESSED) { + getTextData(); + teb.convertDataToJSON(getTextData(), getRect()); + } + /* int keyCode = e.getKeyCode(); switch( keyCode ) { case KeyEvent.VK_ENTER: - System.out.println("plserino workerin"); getTextData(); teb.convertDataToJSON(getTextData(), getRect()); break; } - return false; //continue with the keypress, otherwise it'll be intercepted + */ + return false; //don't intercept } }); diff --git a/gte/src/gte/view/actions/ClearRectangles.java b/gte/src/gte/view/actions/ClearRectangles.java index ca36d2b..af84239 100644 --- a/gte/src/gte/view/actions/ClearRectangles.java +++ b/gte/src/gte/view/actions/ClearRectangles.java @@ -20,7 +20,7 @@ public class ClearRectangles extends AbstractAction { { putValue(NAME, "Clear Rectangles"); - putValue(SMALL_ICON, new ImageIcon(getClass().getResource("/gte/icons/rightarrow.png"))); + putValue(SMALL_ICON, new ImageIcon(getClass().getResource("/gte/icons/clearrectangles.png"))); putValue(SHORT_DESCRIPTION, "Erases rectangles."); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control .")); } diff --git a/gte/src/gte/view/actions/ZoomPage.java b/gte/src/gte/view/actions/ZoomPage.java index 4d42c7f..e6eac8f 100644 --- a/gte/src/gte/view/actions/ZoomPage.java +++ b/gte/src/gte/view/actions/ZoomPage.java @@ -20,7 +20,7 @@ public class ZoomPage extends AbstractAction{ { putValue(NAME, "Zoom Page"); - putValue(SMALL_ICON, new ImageIcon(getClass().getResource("/gte/icons/zoomin.png"))); + putValue(SMALL_ICON, new ImageIcon(getClass().getResource("/gte/icons/zoomwindow.png"))); putValue(SHORT_DESCRIPTION, "fits page on window"); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control 7")); } diff --git a/gte/src/gte/view/actions/ZoomWidth.java b/gte/src/gte/view/actions/ZoomWidth.java index 17c842a..a810c68 100644 --- a/gte/src/gte/view/actions/ZoomWidth.java +++ b/gte/src/gte/view/actions/ZoomWidth.java @@ -20,7 +20,7 @@ public class ZoomWidth extends AbstractAction { { putValue(NAME, "Zoom Out"); - putValue(SMALL_ICON, new ImageIcon(getClass().getResource("/gte/icons/zoomin.png"))); + putValue(SMALL_ICON, new ImageIcon(getClass().getResource("/gte/icons/zoomwidth.png"))); putValue(SHORT_DESCRIPTION, "Zoom width"); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control 9")); } diff --git a/temp/1427703697/data.txt b/temp/1427703697/data.txt new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/temp/1427703697/data.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/temp/1667058427/data.txt b/temp/1667058427/data.txt new file mode 100644 index 0000000..62fec3c --- /dev/null +++ b/temp/1667058427/data.txt @@ -0,0 +1 @@ +AL \ No newline at end of file diff --git a/temp/348922169/data.txt b/temp/348922169/data.txt new file mode 100644 index 0000000..5f2cee1 --- /dev/null +++ b/temp/348922169/data.txt @@ -0,0 +1 @@ +i mu pi \ No newline at end of file diff --git a/temp/471483599/data.txt b/temp/471483599/data.txt new file mode 100644 index 0000000..74011ca --- /dev/null +++ b/temp/471483599/data.txt @@ -0,0 +1 @@ +imupi \ No newline at end of file diff --git a/temp/616820736/data.txt b/temp/616820736/data.txt new file mode 100644 index 0000000..9cbe6ea --- /dev/null +++ b/temp/616820736/data.txt @@ -0,0 +1 @@ +e \ No newline at end of file diff --git a/temp/722488033/data.txt b/temp/722488033/data.txt new file mode 100644 index 0000000..e440e5c --- /dev/null +++ b/temp/722488033/data.txt @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/test.json b/test.json index 013ad44..561762c 100644 --- a/test.json +++ b/test.json @@ -1 +1 @@ -{"data":"java.awt.Rectangle[x=287,y=153,width=27,height=52]","label":"1"}{"data":"java.awt.Rectangle[x=287,y=153,width=27,height=52]","label":"1"}{"data":"java.awt.Rectangle[x=287,y=153,width=27,height=52]","label":"1"}{"data":"java.awt.Rectangle[x=319,y=153,width=33,height=51]","label":"3"}{"data":"java.awt.Rectangle[x=319,y=153,width=33,height=51]","label":"3"}{"data":"java.awt.Rectangle[x=353,y=152,width=37,height=52]","label":"6"}{"data":"java.awt.Rectangle[x=353,y=152,width=37,height=52]","label":"6"} \ No newline at end of file +{"data":"java.awt.Rectangle[x=287,y=153,width=27,height=52]","hashcode":1427703697,"label":"1"}{"data":"java.awt.Rectangle[x=287,y=153,width=27,height=52]","hashcode":1427703697,"label":"1"}{"data":"java.awt.Rectangle[x=1847,y=340,width=92,height=42]","hashcode":471483599,"label":"imupi"} \ No newline at end of file