📄 ganttgraphicarea.java
字号:
int chartHeight = task_image.getHeight(); List myItemsToConsider = myTaskImageGenerator.getPrintableNodes(settings); return new RenderedGanttChartImage(myChartModel, myChartComponentImpl, GanttTree2.convertNodesListToItemList(myItemsToConsider), task_image, chartWidth, chartHeight); } private GanttTree2 getTree() { return this.tree; } GPUndoManager getUndoManager() { return myUndoManager; } protected ChartModelBase getChartModel() { return myChartModel; } protected MouseListener getMouseListener() { return new MouseListener() { public void mouseClicked(MouseEvent e) { getChartImplementation().getMouseListener().mouseClicked(e); } public void mouseEntered(MouseEvent e) { getChartImplementation().getMouseListener().mouseEntered(e); } public void mouseExited(MouseEvent e) { getChartImplementation().getMouseListener().mouseExited(e); } public void mousePressed(MouseEvent e) { getChartImplementation().getMouseListener().mousePressed(e); } public void mouseReleased(MouseEvent e) { getChartImplementation().getMouseListener().mouseReleased(e); } }; } protected MouseMotionListener getMouseMotionListener() { return new MouseMotionListener() { public void mouseDragged(MouseEvent e) { getChartImplementation().getMouseMotionListener().mouseDragged(e); } public void mouseMoved(MouseEvent e) { getChartImplementation().getMouseMotionListener().mouseMoved(e); } }; } private Action[] getPopupMenuActions() { return new Action[] { getOptionsDialogAction(), new PublicHolidayDialogAction(getProject(), getUIFacade()) }; // actions.add(createMenuAction(GanttProject.correctLabel(language // .getText("editPublicHolidays")), ")); } protected Component createPreviewComponent() { return myPreviewPanel; } public void repaint() { try { myChartModel.setHeaderHeight(myTableHeader.getHeight() + HEADER_OFFSET); } catch (NullPointerException e) { // e.printStackTrace(); } super.repaint(); } class MouseSupport { protected Task findTaskUnderMousePointer(int xpos, int ypos) { // int taskID = detectPosition(xpos, ypos, false); // return taskID==-1 ? null : getTaskManager().getTask(taskID); ChartItem chartItem = myChartModel.getChartItemWithCoordinates( xpos, ypos); return chartItem == null ? null : chartItem.getTask(); } protected ChartItem getChartItemUnderMousePoint(int xpos, int ypos) { ChartItem result = myChartModel.getChartItemWithCoordinates(xpos, ypos); return result; } } abstract class ChangeTaskBoundaryInteraction extends MouseInteractionBase { private TaskInteractionHintRenderer myLastNotes; private final Task myTask; private final float myInitialDuration; private GanttCalendar myInitialEnd; private GanttCalendar myInitialStart; protected ChangeTaskBoundaryInteraction(MouseEvent initiatingEvent, TaskBoundaryChartItem taskBoundary) { super(initiatingEvent); myTask = taskBoundary.getTask(); myInitialDuration = myTask.getDuration().getLength( getViewState().getBottomTimeUnit()); myInitialEnd = getTask().getEnd(); myInitialStart = getTask().getStart(); } public void apply(MouseEvent e) { if (myLastNotes == null) { myLastNotes = new TaskInteractionHintRenderer("", e.getX(), e .getY()); } float diff = getLengthDiff(e); apply(diff); myLastNotes.setString(getNotesText()); myLastNotes.setX(e.getX()); } protected Task getTask() { return myTask; } protected float getInitialDuration() { return myInitialDuration; } public void finish(final TaskMutator mutator) { mutator.setIsolationLevel(TaskMutator.READ_COMMITED); // if // ((!myInitialEnd.equals(getTask().getEnd()))||(!myInitialStart.equals(getTask().getStart()))) getUndoManager().undoableEdit("Task boundary changed", new Runnable() { public void run() { doFinish(mutator); } }); } private void doFinish(TaskMutator mutator) { mutator.commit(); myLastNotes = null; try { getTaskManager().getAlgorithmCollection() .getRecalculateTaskScheduleAlgorithm().run(); } catch (TaskDependencyException e) { // TODO Auto-generated catch block e.printStackTrace(); } GanttGraphicArea.this.repaint(); } public void paint(Graphics g) { if (myLastNotes != null) { myLastNotes.paint(g); } } protected abstract void apply(float diff); protected abstract String getNotesText(); } class ChangeTaskEndInteraction extends ChangeTaskBoundaryInteraction implements MouseInteraction { private TaskMutator myMutator; private GanttCalendar myInitialEnd; public ChangeTaskEndInteraction(MouseEvent initiatingEvent, TaskBoundaryChartItem taskBoundary) { super(initiatingEvent, taskBoundary); setCursor(E_RESIZE_CURSOR); myMutator = getTask().createMutator(); myInitialEnd = getTask().getEnd(); } protected void apply(float diff) { TaskLength newLength = getTaskManager().createLength( getViewState().getBottomTimeUnit(), getInitialDuration() + diff); TaskLength translated = getTask().translateDuration(newLength); if (translated.getLength() != 0) { myMutator.setDuration(translated); } } protected String getNotesText() { return getTask().getEnd().toString(); } public void finish() { super.finish(myMutator); } } class ChangeTaskStartInteraction extends ChangeTaskBoundaryInteraction implements MouseInteraction { private TaskLength myInitialLength; private TaskMutator myMutator; private GanttCalendar myInitialStart; ChangeTaskStartInteraction(MouseEvent e, TaskBoundaryChartItem taskBoundary) { super(e, taskBoundary); setCursor(W_RESIZE_CURSOR); myInitialLength = getTask().getDuration(); myMutator = getTask().createMutator(); myInitialStart = getTask().getStart(); } protected void apply(float diff) { TaskLength newLength = getTaskManager().createLength( getViewState().getBottomTimeUnit(), getInitialDuration() + diff); TaskLength translated = getTask().translateDuration(newLength); int dayDiff = (int) (translated.getValue() - myInitialLength .getValue()); // System.err.println("[ChangeTaskStart] dayDiff="+dayDiff+" // newLength="+newLength+" translated="+translated); if (dayDiff != 0) { // System.err.println("[ChangeTaskStartInteraction] apply(): // oldStart="+getTask().getStart()); GanttCalendar newStart = myInitialStart.newAdd(dayDiff); // System.err.println("newStart"+newStart); myMutator.setStart(newStart); if ((getTask().getThird() != null) && (getTask().getThirdDateConstraint() == TaskImpl.EARLIESTBEGIN)) myMutator.setEnd(getTask().getEnd().Clone()); getTask().applyThirdDateConstraint(); // mutator.commit(); // myInitialLength = getTask().getDuration(); } } public void finish() { super.finish(myMutator); getTask().applyThirdDateConstraint(); } protected String getNotesText() { return getTask().getStart().toString(); } } class ChangeTaskProgressInteraction extends MouseInteractionBase implements MouseInteraction { private TaskProgressChartItem myTaskProgrssItem; private TaskMutator myMutator; private TaskInteractionHintRenderer myLastNotes; private int myProgressWas; private int myProgressIs; public ChangeTaskProgressInteraction(MouseEvent e, TaskProgressChartItem taskProgress) { super(e); Toolkit toolkit = Toolkit.getDefaultToolkit(); try { setCursor(CHANGE_PROGRESS_CURSOR); } catch (Exception exept) { setCursor(E_RESIZE_CURSOR); } myTaskProgrssItem = taskProgress; myMutator = myTaskProgrssItem.getTask().createMutator(); myProgressWas = myTaskProgrssItem.getTask() .getCompletionPercentage(); } public void apply(MouseEvent event) { // int deltaProgress = // (int)myTaskProgrssItem.getProgressDelta(event.getX()); float deltaUnits = getLengthDiff(event); int deltaPercents = (int) (100 * deltaUnits / myTaskProgrssItem .getTask().getDuration().getLength( getViewState().getBottomTimeUnit())); int newProgress = myProgressWas + deltaPercents; if (newProgress > 100) { newProgress = 100; } if (newProgress < 0) { newProgress = 0; } myProgressIs = newProgress; myMutator.setCompletionPercentage(newProgress); myLastNotes = new TaskInteractionHintRenderer(newProgress + "%", event.getX(), event.getY() - 30); } public void finish() { myMutator.setIsolationLevel(TaskMutator.READ_COMMITED); getUndoManager().undoableEdit("Task progress changed", new Runnable() { public void run() { doFinish(myMutator); } }); GanttGraphicArea.this.repaint(); } private void doFinish(TaskMutator mutator) { mutator.commit(); myLastNotes = null; try { getTaskManager().getAlgorithmCollection() .getRecalculateTaskScheduleAlgorithm().run(); } catch (TaskDependencyException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (myProgressIs == myProgressWas) { // getUndoManager ().die (); myMutator.commit(); repaint(); int myProgressIs = myTaskProgrssItem.getTask() .getCompletionPercentage(); if (myProgressIs != myProgressWas) { // appli.setQuickSave(true); // appli.quickSave ("Task progress changed"); } } } public void paint(Graphics g) { if (myLastNotes != null) { myLastNotes.paint(g); } } } class DrawDependencyInteraction extends MouseInteractionBase implements MouseInteraction { private final Task myTask; private Point myStartPoint; private DependencyInteractionRenderer myArrow; private GanttGraphicArea.MouseSupport myMouseSupport; private Task myDependant; public DrawDependencyInteraction(MouseEvent initiatingEvent, TaskRegularAreaChartItem taskArea, MouseSupport mouseSupport) { super(initiatingEvent); myStartPoint = initiatingEvent.getPoint(); myTask = taskArea.getTask(); myArrow = new DependencyInteractionRenderer(myStartPoint.x, myStartPoint.y, myStartPoint.x, myStartPoint.y); myMouseSupport = mouseSupport; } public void apply(MouseEvent event) { myArrow.changePoint2(event.getX(), event.getY()); // myDependant = myMouseSupport.findTaskUnderMousePointer( // event.getX(), event.getY()); myLastMouseEvent = event; } public void finish() { if (myLastMouseEvent != null) { myDependant = myMouseSupport.findTaskUnderMousePointer( myLastMouseEvent.getX(), myLastMouseEvent.getY()); final Task dependee = myTask; if (myDependant != null) { if (getTaskManager().getDependencyCollection() .canCreateDependency(myDependant, dependee)) { getUndoManager().undoableEdit("Draw dependency",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -