📄 projectviewmodel.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 + -