package org.phylowidget.ui; import java.awt.Cursor; import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D.Float; import org.andrewberman.ui.Label; import org.andrewberman.ui.LayoutUtils; import org.andrewberman.ui.Point; import org.andrewberman.ui.UIEvent; import org.andrewberman.ui.ifaces.UIListener; import org.andrewberman.ui.menu.MenuItem; import org.andrewberman.ui.menu.TextBox; import org.phylowidget.PWContext; import org.phylowidget.PWPlatform; import org.phylowidget.PhyloTree; import org.phylowidget.PhyloWidget; import processing.core.PApplet; public class SearchBox extends TextBox implements UIListener { PWContext context; Label label; float myWidth; public SearchBox(PApplet p) { super(p); context = PWPlatform.getInstance().getThisAppContext(); label = new Label(p); tf.addListener(this); } public void setLabel(String l) { label.setLabel(l); layout(); } @Override public void setOptions() { super.setOptions(); } @Override public synchronized void draw() { label.alpha = parent.getNearestMenu().alpha; super.draw(); } @Override public void setName(String name) { super.setName(name); setLabel(name); } @Override public synchronized void dispose() { super.dispose(); label.dispose(); } @Override public void layout() { // tf.setWidth(width-getStyle().padX); // tf.setHeight(height-getStyle().padY); LayoutUtils.centerVertical(tf, y, y + height); LayoutUtils.centerHorizontal(tf, x, x + width); tf.setTextSize(getFontSize()); label.setFontSize(getFontSize() * .9f); LayoutUtils.centerVertical(label, y, y + height); label.setX(x + getPadX()); tf.setX(label.getX() + label.getWidth() + getPadX()); } @Override protected void calcPreferredSize() { super.calcPreferredSize(); width = label.getWidth() + tf.getWidth() + getPadX() * 3; height = tf.getHeight(); } @Override protected void itemMouseEvent(MouseEvent e, Point pt) { super.itemMouseEvent(e, pt); } @Override protected void visibleMouseEvent(MouseEvent e, Point tempPt) { super.visibleMouseEvent(e, tempPt); if (mouseInside) { parent.getNearestMenu().setState(this, MenuItem.OVER); } else { parent.getNearestMenu().setState(this, MenuItem.UP); } } @Override public void setWidth(float newWidth) { super.setWidth(newWidth); tf.setWidth(newWidth - label.getWidth()); menu.layout(); } @Override protected boolean containsPoint(Point p) { buffRect.setRect(x, y, width, height); if (tf.containsPoint(p)) { return false; } return buffRect.contains(p); // return super.containsPoint(p); } public String getText() { return tf.getText(); } public void setText(String s) { tf.replaceText(s); } public void uiEvent(UIEvent e) { if (e.getID() == UIEvent.TEXT_VALUE) { context.config().search = getText(); PhyloTree t = (PhyloTree) context.trees().getTree(); if (t != null) { t.searchAndMarkFound(getText()); } } } }