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

📄 ganttgraphicarea.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/*************************************************************************** GanttGraphicArea.java  -  description ------------------- begin                : dec 2002 copyright            : (C) 2002 by Thomas Alexandre email                : alexthomas(at)ganttproject.org ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/package net.sourceforge.ganttproject;import java.awt.Color;import java.awt.Component;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Point;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.datatransfer.DataFlavor;import java.awt.event.ActionEvent;import java.awt.event.InputEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.image.BufferedImage;import java.awt.image.ComponentColorModel;import java.awt.image.DataBuffer;import java.awt.image.DataBufferByte;import java.awt.image.DataBufferInt;import java.awt.image.RenderedImage;import java.awt.image.WritableRaster;import java.net.URL;import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Vector;import javax.swing.Action;import javax.swing.Icon;import javax.swing.JPanel;import javax.swing.table.JTableHeader;import org.eclipse.core.runtime.IStatus;import org.eclipse.core.runtime.Status;import net.sourceforge.ganttproject.action.GPAction;import net.sourceforge.ganttproject.calendar.GPCalendar;import net.sourceforge.ganttproject.chart.ChartModel;import net.sourceforge.ganttproject.chart.ChartModelBase;import net.sourceforge.ganttproject.chart.ChartModelImpl;import net.sourceforge.ganttproject.chart.ChartSelection;import net.sourceforge.ganttproject.chart.ChartViewState;import net.sourceforge.ganttproject.chart.DependencyInteractionRenderer;import net.sourceforge.ganttproject.chart.GanttChart;import net.sourceforge.ganttproject.chart.PublicHolidayDialogAction;import net.sourceforge.ganttproject.chart.RenderedChartImage;import net.sourceforge.ganttproject.chart.RenderedGanttChartImage;import net.sourceforge.ganttproject.chart.TaskInteractionHintRenderer;import net.sourceforge.ganttproject.chart.VisibleNodesFilter;import net.sourceforge.ganttproject.chart.item.ChartItem;import net.sourceforge.ganttproject.chart.item.TaskBoundaryChartItem;import net.sourceforge.ganttproject.chart.item.TaskProgressChartItem;import net.sourceforge.ganttproject.chart.item.TaskRegularAreaChartItem;import net.sourceforge.ganttproject.font.Fonts;import net.sourceforge.ganttproject.gui.UIConfiguration;import net.sourceforge.ganttproject.gui.UIFacade;import net.sourceforge.ganttproject.gui.options.model.ChangeValueDispatcher;import net.sourceforge.ganttproject.gui.options.model.ChangeValueEvent;import net.sourceforge.ganttproject.gui.options.model.ChangeValueListener;import net.sourceforge.ganttproject.gui.options.model.GPOptionChangeListener;import net.sourceforge.ganttproject.gui.scrolling.ScrollingManager;import net.sourceforge.ganttproject.gui.zoom.ZoomListener;import net.sourceforge.ganttproject.gui.zoom.ZoomManager;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.task.CustomColumEvent;import net.sourceforge.ganttproject.task.CustomColumsListener;import net.sourceforge.ganttproject.task.Task;import net.sourceforge.ganttproject.task.TaskImpl;import net.sourceforge.ganttproject.task.TaskLength;import net.sourceforge.ganttproject.task.TaskManager;import net.sourceforge.ganttproject.task.TaskMutator;import net.sourceforge.ganttproject.task.TaskSelectionManager;import net.sourceforge.ganttproject.task.algorithm.RecalculateTaskScheduleAlgorithm;import net.sourceforge.ganttproject.task.dependency.TaskDependencyException;import net.sourceforge.ganttproject.task.dependency.constraint.FinishStartConstraintImpl;import net.sourceforge.ganttproject.task.event.TaskDependencyEvent;import net.sourceforge.ganttproject.task.event.TaskListenerAdapter;import net.sourceforge.ganttproject.task.event.TaskScheduleEvent;import net.sourceforge.ganttproject.time.TimeUnit;import net.sourceforge.ganttproject.time.gregorian.GregorianCalendar;import net.sourceforge.ganttproject.undo.GPUndoManager;import javax.swing.*;import org.jdesktop.swing.*;/** * Class for the graphic part of the soft */public class GanttGraphicArea extends ChartComponentBase implements GanttChart,        CustomColumsListener, ProjectEventListener {    static {        Toolkit toolkit = Toolkit.getDefaultToolkit();        URL cursorResource = GanttGraphicArea.class.getClassLoader()                .getResource("icons/cursorpercent.gif");        Image image = toolkit.getImage(cursorResource);        CHANGE_PROGRESS_CURSOR = toolkit.createCustomCursor(image, new Point(                10, 5), "CursorPercent");    }    private static final Cursor W_RESIZE_CURSOR = new Cursor(            Cursor.W_RESIZE_CURSOR);    private static final Cursor E_RESIZE_CURSOR = new Cursor(            Cursor.E_RESIZE_CURSOR);    private static final Cursor CHANGE_PROGRESS_CURSOR;    private static final int HEADER_OFFSET = 44;    /** Begin of display. *///    public GanttCalendar date;    /** Reference to the GanttTree */    public GanttTree2 tree;    /** Default color for tasks */    public static Color taskDefaultColor    // = new Color( (float) 0.549, (float) 0.713, (float) 0.807);    = new Color(140, 182, 206);    /** This value is connected to the GanttTRee Scrollbar to move up or down */    private int margY;    /* ! The main application */    GanttProject appli;    private UIConfiguration myUIConfiguration;    private Color myProjectLevelTaskColor;    private final ChartModelImpl myChartModel;    private final TaskManager myTaskManager;    private GPUndoManager myUndoManager;    private JTableHeader myTableHeader = null;    private MouseEvent myLastMouseEvent = null;    //private List myItemsToConsider;    private JPanel myPreviewPanel = new ChartOptionsPreviewPanel();    private TaskTreeImageGenerator myTaskImageGenerator;    private ChartViewState myViewState;    /** Constructor */    public GanttGraphicArea(GanttProject app, GanttTree2 ttree,            TaskManager taskManager, ZoomManager zoomManager,            GPUndoManager undoManager) {        super(app.getProject(), app.getUIFacade(), zoomManager);        this.setBackground(Color.WHITE);        myTaskManager = taskManager;        myUndoManager = undoManager;        //        myChartModel = new ChartModelImpl(getTaskManager(), app                .getTimeUnitStack(), app.getUIConfiguration());        myChartModel.addOptionChangeListener(new GPOptionChangeListener() {            public void optionsChanged() {                repaint();                            }        });        myViewState = new ChartViewState(this, app.getUIFacade());        super.setStartDate(GregorianCalendar.getInstance().getTime());        myTaskManager.addTaskListener(new TaskListenerAdapter() {            public void taskScheduleChanged(TaskScheduleEvent e) {                adjustDependencies((Task) e.getSource());            }            public void dependencyAdded(TaskDependencyEvent e) {                adjustDependencies(e.getDependency().getDependee());                repaint();            }            public void dependencyRemoved(TaskDependencyEvent e) {                repaint();            }            private void adjustDependencies(Task task) {                RecalculateTaskScheduleAlgorithm alg = myTaskManager                        .getAlgorithmCollection()                        .getRecalculateTaskScheduleAlgorithm();                if (!alg.isRunning()) {                    try {                        alg.run(task);                    } catch (TaskDependencyException e1) {                        e1.printStackTrace(); // To change body of catch                        // statement use File | Settings                        // | File Templates.                    }                    // appli.setQuickSave (true);                }            }        });//        date = new GanttCalendar();////        date.setDay(1);        this.tree = ttree;        margY = 0;        appli = app;        // creation of the different color use to paint        // arrayColor[0] = new Color((float)0.905,(float)0.905,(float)0.905);        myTableHeader = tree.getTreeTable().getTable().getTableHeader();        Mediator.getCustomColumnsManager().addCustomColumnsListener(this);        myTaskImageGenerator = new TaskTreeImageGenerator(ttree, app.getUIConfiguration());    }    /** Return the color of the task */    public Color getTaskColor() {        return myProjectLevelTaskColor == null ? myUIConfiguration                .getTaskColor() : myProjectLevelTaskColor;    }    /** Change the color of the task */    public void setProjectLevelTaskColor(Color c) {        myProjectLevelTaskColor = c;    }    /** The size of the panel. */    public Dimension getPreferredSize() {        return new Dimension(465, 600);    }    public ChartModelImpl getMyChartModel() {        return myChartModel;    }    public void drawGPVersion(Graphics g) {        g.setColor(Color.black);        g.setFont(Fonts.GP_VERSION_FONT);        g.drawString("GanttProject (" + GanttProject.version + ")", 3,                getHeight() + 18);    }    /** Change the velue connected to the JTree's Scrollbar */    public void setScrollBar(int v) {        margY = v;    }    /** Return the value of the JTree's Scrollbar */    public int getScrollBar() {        return margY;    }    public String getName() {        return GanttLanguage.getInstance().getText("gantt");    }    /** Return an image with the gantt chart */    // TODO: 1.11 take into account flags "render this and don't render that"    public BufferedImage getChart(GanttExportSettings settings) {    	RenderedChartImage renderedImage = (RenderedChartImage) getRenderedImage(settings);    	BufferedImage result = renderedImage.getWholeImage();        repaint();        return result;    }        public RenderedImage getRenderedImage(GanttExportSettings settings) {                GanttTreeTable treetable = Mediator.getGanttProjectSingleton().getTree().getTreeTable();        JXTreeTable xtreetable = treetable.getTreeTable();        //      I don't know why we need to add 67 to the height to make it fit the real height        int tree_height = xtreetable.getHeight()+67;                GanttImagePanel logo_panel= new GanttImagePanel("big.png", 1024, 44);        BufferedImage tree  = new BufferedImage(xtreetable.getWidth(), tree_height, BufferedImage.TYPE_INT_RGB);        BufferedImage treeview = new BufferedImage(treetable.getWidth(), treetable.getHeight(), BufferedImage.TYPE_INT_RGB);        BufferedImage logo  = new BufferedImage(xtreetable.getWidth(), 44, BufferedImage.TYPE_INT_RGB);                Graphics2D glogo = logo.createGraphics();        logo_panel.paintComponent(glogo);                Graphics2D gtreeview = treeview.createGraphics();        treetable.paintComponents(gtreeview);                BufferedImage header = treeview.getSubimage(0, 0, treeview.getWidth(), treetable.getRowHeight()+3);        treeview.flush();                Graphics2D gtree = tree.createGraphics();        xtreetable.printAll(gtree);                //create a new image that will contain the logo, the table/tree and the chart        BufferedImage task_image = new BufferedImage(xtreetable.getWidth(), tree_height+logo_panel.getHeight(), BufferedImage.TYPE_INT_RGB);                Graphics2D gimage = task_image.createGraphics();                //draw the logo on the image        gimage.drawImage(logo, 0, 0, tree.getWidth(), logo.getHeight(), Color.WHITE, null);        //draw the header on the image        gimage.drawImage(header, 0, logo.getHeight(), header.getWidth(), header.getHeight(), null);        //draw the tree on the image        gimage.drawImage(tree, 0, logo.getHeight()+header.getHeight(), tree.getWidth(), tree.getHeight(), null);                Date dateStart = null;        Date dateEnd = null;        TimeUnit unit = getViewState().getBottomTimeUnit();        dateStart = settings.getStartDate() == null ? getStartDate() : settings.getStartDate();        dateEnd = settings.getEndDate() == null ? getEndDate() : settings.getEndDate();        if (dateStart.after(dateEnd)) {            Date tmp = (Date) dateStart.clone();            dateStart = (Date) dateEnd.clone();            dateEnd = tmp;        }        TaskLength printedLength = getTaskManager().createLength(unit, dateStart, dateEnd);                int chartWidth = (int) ((printedLength.getLength(getViewState().getBottomTimeUnit()) + 1) * getViewState().getBottomUnitWidth());        if (chartWidth<this.getWidth()) {            chartWidth = this.getWidth();        }

⌨️ 快捷键说明

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