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

📄 projectviewmodel.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.adapters;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Date;import jgantt.model.Change;import jgantt.model.ChangeSupport;import jgantt.model.Project;import jgantt.model.Task;import jgantt.model.ViewOptions;import jgantt.view.GanttActionListener;import jgantt.view.gantt.GanttGraph;import jgantt.view.tree.TaskTree;import com.sun.image.codec.jpeg.ImageFormatException;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;/** * ProjectViewModel representa el estado de visualizacion del proyecto * Ademas provee la ejeucion de funciones de soporte a la interfaz * como movimientos de tareas, creacion, borrado etc. *  * TODO: Documentar mas *  * <p>$Date: 2005/06/13 23:43:27 $</p>  * @version $Revision: 1.17 $ * @author Carlos Silva */public class ProjectViewModel {	Project project;	GanttActionListener mainActionListener;	Task currentTask = null;	File file = null;				Date currentSnapShot=null;	public Date getCurrentSnapShot(){		return currentSnapShot;	}	public void setCurrentSnapShot(Date d){		currentSnapShot=d;		viewOptions.notifyObservers();	}	ViewOptions viewOptions = null;	public ProjectViewModel(Project p, File f) {		setProject(p, f);		setCurrentTask(null);		mainActionListener = new GanttActionListener(this);	}	/**	 * Asigna un nuevo proyecto, 	 * TODO: asigna los observadores del proyecto antiguo al proyecto nuevo.	 * notifica del nuevo proyecto cargado.	 * @param p	 * @param f	 */	public void setProject(Project p, File f) {		project = p;		file = f;		setCurrentTask(null);		viewOptions = p.getViewOptions();				sendChange(new ProjectViewModelChange(ProjectViewModelChange.NEW_PROJECT_LOADED,this));	}	/**	 * 设置新的项目	 * @param p	 */	public void setProject(Project p) {		project = p;		//file = f;		setCurrentTask(null);		viewOptions = p.getViewOptions();				sendChange(new ProjectViewModelChange(ProjectViewModelChange.NEW_PROJECT_LOADED,this));	}		/**	 * Asigna el archivo de trabajo.	 * @param f	 */	public void setFile(File f) {		file = f;	}	/**	 * Retorna el archivo de trabajo actual	 * @return	 */	public File getFile() {		return file;	}	public Project getProject() {		return project;	}	public ViewOptions getViewOptions() {		return viewOptions;	}	public Task getCurrentTask() {		return currentTask;	}		public void setCurrentTask(Task newTask) {		Task oldTask = currentTask;		currentTask = newTask;		if (oldTask == newTask)			return;				sendChange(new ProjectViewModelChange(ProjectViewModelChange.CURRENT_TASK_CHANGED,this, currentTask));			}		public GanttActionListener getMainActionListener() {		return mainActionListener;	}	/**	 * Observer, observadores de esta clase	 * 	 * <p>$Date: 2005/06/13 23:43:27 $</p> 	 * @version $Revision: 1.17 $	 * @author {user}	 */	public static interface Observer {		public void newProjectLoaded(ProjectViewModel pvm);		public void currentTaskChanged(Task currentTask, Task oldTask);	}	/**		 * hace que esta tarea sea la ultima hija de su hermana anterior		 */	public void asChildTask() {		if (currentTask == null)			return;		currentTask.asChild();	}	/**	 * Hace que esta tarea sea la ultima hija de su hermana anterior	 */	public void deChildTask() {		if (currentTask == null)			return;		currentTask.deChild();	}	/**	 * Hace que esta tarea sea la ultima hija de su hermana anterior	 */	public void goUpTask() {		if (currentTask == null)			return;		currentTask.goUp();	}	/**	 * Hace que esta tarea sea la ultima hija de su hermana anterior	 */	public void goDownTask() {		if (currentTask == null)			return;		currentTask.goDown();	}	/**	 * Inserta una tarea vacia en el projecto antes de la tarea actual	 */	public void insertTask() {		//System.out.println("TaskTree2.insertTask() focusTask="+focusTask);		Task newTask = project.createTask("", 1);		if (currentTask != null)			currentTask.addBefore(newTask);		else			project.getMainTask().addChild(newTask);		setCurrentTask(newTask);	}		/**	 * Inserta una tarea vacia en el projecto	 */	public void appendTask() {		//System.out.println("TaskTree2.insertTask() focusTask="+focusTask);		Task newTask = project.createTask("", 1);		if (currentTask != null)			currentTask.addAfter(newTask);		else			project.getMainTask().addChild(newTask);		setCurrentTask(newTask);	}	/**	 * Borra la tarea actual en la pantalla	 */	public void deleteCurrentTask() {		if (currentTask != null) {			int id = currentTask.getId();			currentTask.remove();			if (project.getTaskCount() == 0)				setCurrentTask(null);			else if (id >= project.getTaskCount())				setCurrentTask(project.getTask(project.getTaskCount() - 1));			else if (id > 0)				setCurrentTask(project.getTask(id - 1));			else				setCurrentTask(null);		}	}	GanttGraph ganttGraph = null;	public void setGanttGraph(GanttGraph gg) {		ganttGraph = gg;	}	TaskTree taskTree = null;	public void setTaskTree(TaskTree tt) {		taskTree = tt;	}	/**	 * Graba una imagen de la carta gantt segun las opciones existentes.	 * 	 * @param f	 * @throws ImageFormatException	 * @throws IOException	 */	public void exportImage(File f) throws ImageFormatException, IOException {		BufferedImage image = makeImage();		FileOutputStream out = new FileOutputStream(f);		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);		encoder.encode(image);		out.flush();		out.close();	}	/**	 * Genera una imagen de la carta gantt con las condiciones existentes	 * @return	 */	public BufferedImage makeImage() {				Dimension treeSize = taskTree.getImageSize();				Dimension graphSize = ganttGraph.getImageSize();				// Crear imagen en memoria		int imWidth = treeSize.width+ graphSize.width;		BufferedImage preview = new BufferedImage(imWidth, treeSize.height, BufferedImage.TYPE_INT_RGB);				Graphics g = preview.getGraphics();		int topRow = getViewOptions().getTopRow();		getViewOptions().setTopRow(0);				int leftPos = taskTree.getLeftPos();		taskTree.setLeftPos(0);				// Escribir la imagen en g.		taskTree.paintTree(g);				//mover el punto 0		g.translate(treeSize.width,0);		ganttGraph.paintGraph(g);				g.dispose();		g = preview.getGraphics();				g.setColor(Color.black);				g.drawRect(0,0,imWidth-1, treeSize.height-1);				g.dispose();		getViewOptions().setTopRow(topRow);		taskTree.setLeftPos(leftPos);		return preview;	}//	Soporte a eventos	 /**	  * Objeto para administrar listeners	  */	 protected ChangeSupport changeSupport = new ChangeSupport(){		 protected void notifyListener(Object listener, Change change) {			 ((ProjectViewModelListener)listener).viewModelChanged( (ProjectViewModelChange) change);		 }	 };	 /**	  * Agrega un listener a los suscritos	  * @param o	  */	 public void addListener(ProjectViewModelListener listener) {		 changeSupport.addListener(listener);	 }	 /**	  * Remueve un listener de los suscritos	  * @param listener	  */	 public void removeListener(ProjectViewModelListener listener) {		 changeSupport.removeListener(listener);	 }	 /**	  * Comienza una bloque de cambios que deben despacharse todos	  * juntos al final.	  * <p>El ultimo mensaje del bloque se envia con la marca:<code>isLast</code>.</p>	  */	 public void beginBlockChanges() {		 changeSupport.beginBlockChanges();	 }	 /**	  * Envia en bloque todos los cambios recibidos y que estan en la cola.	  * <p>El ultimo mensaje del bloque se envia con la marca:<code>isLast</code>.</p>	  */	 public void commitBlockChanges() {		 changeSupport.commitBlockChanges();	 }	 /**	  * Envia una cambio a todos los escuchadores	  * @param change ProjectChange	  */	 public void sendChange(ProjectViewModelChange change) {		 changeSupport.sendChange(change);	 }}

⌨️ 快捷键说明

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