⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 constraintshelper.java

📁 Owing to the applet Gantt chart source yard, already Chinese melt, Gantt chart can demonstrate a Chi
💻 JAVA
字号:
/** *   Copyright 2004 Carlos Silva A. *  *   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 jgantt.view.gantt;import java.awt.Color;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Point;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.text.MessageFormat;import javax.swing.BorderFactory;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPopupMenu;import jgantt.MenuBuilder;import jgantt.Messages;import jgantt.model.Constraint;import jgantt.model.Task;/** * ConstraintsHelper genera constraints cuando hay eventos de drag de mouse *  * <p>$Date: 2005/05/05 08:25:50 $</p>  * @version $Revision: 1.18 $ * @author {user} */class ConstraintsHelper implements MouseListener, MouseMotionListener {	Point lastPressed = null;	Point lastDragged = null;	/**	 * Color para las lineas fantasma	 */	Color lineColor = Color.red;	Task masterTask;	Task slaveTask;	/**	 * Etiqueta flotante con la descripcion del constraint que	 * se esta realizando.	 */	JLabel texto;	private final Viewer viewer;	/**	 * @param Viewer	 */	ConstraintsHelper(Viewer viewer) {		this.viewer = viewer;		texto = new JLabel("");		texto.setBackground(new Color(255, 255, 128));		texto.setOpaque(true);		texto.setBorder(BorderFactory.createLineBorder(Color.gray));		viewer.setToolTipText("Constraint helper tip");	}	/**	 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)	 */	public void mouseClicked(MouseEvent arg0) {	}	/**	 * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)	 */	public void mouseEntered(MouseEvent arg0) {	}	/**	 * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)	 */	public void mouseExited(MouseEvent arg0) {	}	/**	 * Retorna la tarea asociada a un punto en la pantalla	 * @param p	 * @return	 */	Task getTaskAt(Point p) {		Object o = viewer.getElementAt(p);		//System.out.println("ConstraintsHelper.getTaskAt("+p+"): "+o);		if (o == null)			return null;		if (o instanceof Task) {			return (Task) o;		}		return null;	}	/**	 * Retorna un numero y en el medio de la barra que representa la tarea bajo el y recibido.	 * @param y	 * @return	 */	int roundAtTask(int y) {		return y			- (y % viewer.viewOptions.taskHeight)			+ viewer.viewOptions.taskHeight / 2;	}	/**	 * Muestra la etiqueta en el punto p	 * @param label	 */	void showHint(String label, Point p) {		texto.setLocation(p.x + 10, p.y + 10);		texto.setText(label);		FontMetrics fm = texto.getFontMetrics(texto.getFont());		texto.setSize(fm.stringWidth(texto.getText()) + 10, fm.getHeight());		if (texto.getParent() == null) {			viewer.add(texto);			texto.setVisible(true);		}	}	/**	 * Muestra la etiqueta en el punto p	 * @param label	 */	void hideHint() {		if (texto.getParent() != null) {			texto.setVisible(false);			viewer.remove(texto);			viewer.repaint();		}	}	/**	 * Dibujar el constraint...	 * 	 * @param g	 * @param p1	 * @param p2	 */	void drawLine(Graphics g, Point p1, Point p2) {		g.setColor(lineColor);		// Para llegar se requiere un camino.		int xs[], ys[];		int b = 10;		if (p2.x > p1.x + 2 * b) {			int[] x = { p1.x, p1.x + b, p1.x + b, p2.x };			int[] y = { p1.y, p1.y, p2.y, p2.y };			xs = x;			ys = y;		} else {			if (p2.y > p1.y) {				int[] x =					{ p1.x, p1.x + b, p1.x + b, p2.x - b, p2.x - b, p2.x };				int[] y = { p1.y, p1.y, p1.y + b, p1.y + b, p2.y, p2.y };				xs = x;				ys = y;			} else {				int[] x =					{ p1.x, p1.x + b, p1.x + b, p2.x - b, p2.x - b, p2.x };				int[] y = { p1.y, p1.y, p1.y - b, p1.y - b, p2.y, p2.y };				xs = x;				ys = y;			}		}		g.drawPolyline(xs, ys, xs.length);		// repetir		//for (int i=0;i<xs.length;i++){		//	xs[i]++;		//	ys[i]++;		//}		//g.drawPolyline(xs, ys, xs.length);		// punta de flecha		int[] x = { p2.x - 5, p2.x - 1, p2.x - 6 };		int[] y = { p2.y - 4, p2.y, p2.y + 5 };		g.drawPolyline(x, y, x.length);	}	/**	 * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)	 */	public void mousePressed(MouseEvent ev) {		if ((ev.getModifiers() & MouseEvent.BUTTON3_MASK) != 0) {			//popup menu...			Object o = viewer.selectObjectAt(ev.getPoint());			JPopupMenu popup = null;			ActionListener al = viewer.pvModel.getMainActionListener();			// Crea un menu de acuerdo al objeto que esta abajo			if (o == null) {				popup = MenuBuilder.buildPopup(al, "ctx.display");			} else if (o instanceof Task) {				Task t = (Task) o;				popup = MenuBuilder.buildPopup(al, "ctx.task");			} else if (o instanceof Constraint) {				Constraint c = (Constraint) o;				popup = MenuBuilder.buildPopup(al, "ctx.constraint");			}			viewer.add(popup);			popup.show(viewer, ev.getPoint().x, ev.getPoint().y);			// TODO: Revisar como y cuando se remueve un popup del padre 			//viewer.remove(popup);		}		if ((ev.getModifiers() & MouseEvent.BUTTON1_MASK) == 0)			return;		lastPressed = ev.getPoint();		masterTask = getTaskAt(lastPressed);		if (masterTask == null) {			lastPressed = null;			return;		}		lastPressed.x =			(int) ((masterTask.getFinishDate().getTime()				- viewer.viewOptions.t0)				/ viewer.viewOptions.msPixel);		lastPressed.y = roundAtTask(lastPressed.y);		lastDragged = null;		showHint(Messages.getString("ConstraintsHelper.newHint"), ev.getPoint()); //$NON-NLS-1$	}	/**	 * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)	 */	public void mouseDragged(MouseEvent ev) {		// System.out.println("mouseDragged "+ev.getPoint());		if (lastPressed == null)			return;		Point p = ev.getPoint();		Task oldSlaveTask = slaveTask;		slaveTask = getTaskAt(p);		if (oldSlaveTask == slaveTask)			return;		if ((slaveTask == null) || (slaveTask == masterTask)) {			hideHint();			return;		}		lastDragged = p;		lastDragged.x =			(int) ((slaveTask.getStartDate().getTime() - viewer.viewOptions.t0)				/ viewer.viewOptions.msPixel);		lastDragged.y = roundAtTask(p.y);		String tag = MessageFormat.format(Messages.getString("ConstraintsHelper.hint.format"), new Object[] { masterTask.getName(), slaveTask.getName()}); //$NON-NLS-1$		showHint(tag, ev.getPoint());		Graphics g = viewer.getGraphics();		viewer.update(g);		drawLine(g, lastPressed, lastDragged);		g.dispose();	}	/**	 * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)	 */	public void mouseReleased(MouseEvent ev) {		if (lastPressed == null)			return;		hideHint();		slaveTask = getTaskAt(ev.getPoint());		lastPressed = null;		lastDragged = null;		if ((masterTask == slaveTask)			|| (masterTask == null)			|| (slaveTask == null))			return;		//System.out.println("Nuevo constraint desde " + masterTask.getName() + " hacia " + slaveTask.getName()); //$NON-NLS-1$		try {			new Constraint(masterTask, slaveTask);		} catch (Exception e) {			JOptionPane.showMessageDialog(viewer, e, Messages.getString("ConstraintsHelper.error.title"), //$NON-NLS-1$			JOptionPane.ERROR_MESSAGE);		}	}	/**	 * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)	 */	public void mouseMoved(MouseEvent ev) {		Object o = viewer.getElementAt(ev.getPoint());		if (o != null) {			//System.out.println(" HOTSPOT "+o.toString());			if (o instanceof Task) {				Task task = (Task) o;				String notes = task.getNotes();				if (!"".equals(notes)) {					StringBuffer sb = new StringBuffer(notes);					for (int i = 0; i < sb.length(); i++) {						if (sb.charAt(i) == '\n') {							sb.insert(i + 1, "<br>");						}					}					sb.insert(						0,						"<html><b>Task</b>: "							+ task.getName()							+ "<br><b>Notes</b>:<br>");					sb.append("</html>");					viewer.setToolTipText(sb.toString());				}			} else {				viewer.setToolTipText(null);			}		} else {			viewer.setToolTipText(null);		}	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -