/* GanttProject is an opensource project management tool. Copyright (C) 2002-2011 Thomas Alexandre, GanttProject team 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.Action; import net.sourceforge.ganttproject.action.GPAction; import net.sourceforge.ganttproject.chart.ChartModelBase; import net.sourceforge.ganttproject.chart.ChartModelResource; import net.sourceforge.ganttproject.chart.ChartSelection; import net.sourceforge.ganttproject.chart.ChartViewState; import net.sourceforge.ganttproject.chart.ResourceChart; import net.sourceforge.ganttproject.chart.export.ChartImageVisitor; import net.sourceforge.ganttproject.chart.mouse.MouseListenerBase; import net.sourceforge.ganttproject.chart.mouse.MouseMotionListenerBase; import net.sourceforge.ganttproject.font.Fonts; import net.sourceforge.ganttproject.gui.ResourceTreeUIFacade; import net.sourceforge.ganttproject.gui.UIFacade; import net.sourceforge.ganttproject.gui.zoom.ZoomManager; import net.sourceforge.ganttproject.language.GanttLanguage; import net.sourceforge.ganttproject.resource.HumanResource; import net.sourceforge.ganttproject.resource.HumanResourceManager; import net.sourceforge.ganttproject.util.MouseUtil; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; /** * Class for the graphic part of the soft */ public class ResourceLoadGraphicArea extends ChartComponentBase implements ResourceChart { /** The main application */ private final GanttProject appli; private final ChartModelResource myChartModel; private final ChartViewState myViewState; private final ResourceTreeUIFacade myTreeUi; public ResourceLoadGraphicArea(GanttProject app, ZoomManager zoomManager, ResourceTreeUIFacade treeUi) { super(app.getProject(), app.getUIFacade(), zoomManager); myTreeUi = treeUi; this.setBackground(Color.WHITE); myChartModel = new ChartModelResource(getTaskManager(), app.getHumanResourceManager(), getTimeUnitStack(), getUIConfiguration(), this); myChartImplementation = new ResourcechartImplementation(app.getProject(), getUIFacade(), myChartModel, this); myViewState = new ChartViewState(this, app.getUIFacade()); app.getUIFacade().getZoomManager().addZoomListener(myViewState); appli = app; initMouseListeners(); } /** @return the preferred size of the panel. */ @Override public Dimension getPreferredSize() { return new Dimension(465, 600); } protected int getRowHeight() { return appli.getResourcePanel().getRowHeight(); } @Override protected GPTreeTableBase getTreeTable() { return appli.getResourcePanel().getResourceTreeTable(); } @Override public String getName() { return GanttLanguage.getInstance().getText("resourcesChart"); } @Override protected ChartModelBase getChartModel() { return myChartModel; } @Override protected MouseListener getMouseListener() { if (myMouseListener == null) { myMouseListener = new MouseListenerBase(getUIFacade(), this, getImplementation()) { @Override protected Action[] getPopupMenuActions(MouseEvent e) { return new Action[] { getOptionsDialogAction() }; } @Override public void mousePressed(MouseEvent e) { String text = MouseUtil.toString(e); super.mousePressed(e); if (text.equals(GPAction.getKeyStrokeText("mouse.drag.chart"))) { startScrollView(e); return; } } }; } return myMouseListener; } @Override protected MouseMotionListener getMouseMotionListener() { if (myMouseMotionListener == null) { myMouseMotionListener = new MouseMotionListenerBase(getUIFacade(), getImplementation()); } return myMouseMotionListener; } @Override protected AbstractChartImplementation getImplementation() { if (myChartImplementation == null) { myChartImplementation = new ResourcechartImplementation(getProject(), getUIFacade(), myChartModel, this); } return myChartImplementation; } @Override public boolean isExpanded(HumanResource resource) { return true; } private MouseMotionListener myMouseMotionListener; private MouseListener myMouseListener; private AbstractChartImplementation myChartImplementation; private class ResourcechartImplementation extends AbstractChartImplementation { public ResourcechartImplementation(IGanttProject project, UIFacade uiFacade, ChartModelBase chartModel, ChartComponentBase chartComponent) { super(project, uiFacade, chartModel, chartComponent); } @Override public void paintChart(Graphics g) { synchronized (ChartModelBase.STATIC_MUTEX) { // LaboPM // ResourceLoadGraphicArea.super.paintComponent(g); if (isShowing()) { myChartModel.setHeaderHeight(getImplementation().getHeaderHeight(appli.getResourcePanel(), appli.getResourcePanel().getTreeTable().getScrollPane().getViewport())); } myChartModel.setBottomUnitWidth(getViewState().getBottomUnitWidth()); myChartModel.setRowHeight(getRowHeight());// myChartModel.setRowHeight(tree.getJTree().getRowHeight()); myChartModel.setTopTimeUnit(getViewState().getTopTimeUnit()); myChartModel.setBottomTimeUnit(getViewState().getBottomTimeUnit()); // myChartModel.paint(g); super.paintChart(g); } } @Override public ChartSelection getSelection() { ChartSelectionImpl result = new ChartSelectionImpl() { @Override public boolean isEmpty() { return appli.getResourcePanel().getSelectedNodes().length == 0; } @Override public void startCopyClipboardTransaction() { super.startCopyClipboardTransaction(); appli.getResourcePanel().copySelection(); } @Override public void startMoveClipboardTransaction() { super.startMoveClipboardTransaction(); appli.getResourcePanel().cutSelection(); } }; return result; } @Override public IStatus canPaste(ChartSelection selection) { return Status.OK_STATUS; } @Override public void paste(ChartSelection selection) { appli.getResourcePanel().pasteSelection(); } @Override public void buildImage(GanttExportSettings settings, ChartImageVisitor imageVisitor) { int rowCount = getResourceManager().getResources().size(); for (HumanResource hr : getResourceManager().getResources()) { if (settings.isExpanded(hr)) { myTreeUi.setExpanded(hr, true); } if (myTreeUi.isExpanded(hr)) { rowCount += hr.getAssignments().length; } } settings.setRowCount(rowCount); super.buildImage(settings, imageVisitor); } } @Override public ChartViewState getViewState() { return myViewState; } private HumanResourceManager getResourceManager() { return appli.getHumanResourceManager(); } }