📄 ganttcharttabcontentpanel.java
字号:
/* * Created on 22.10.2005 */package net.sourceforge.ganttproject;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.ComponentOrientation;import java.awt.Container;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.AdjustmentEvent;import java.awt.event.AdjustmentListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.Date;import javax.swing.Action;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.JComponent;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollBar;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import org.eclipse.core.runtime.IAdaptable;import net.sourceforge.ganttproject.GanttResourcePanel.CustomScrollPane.CustomViewport;import net.sourceforge.ganttproject.action.task.LinkTasksAction;import net.sourceforge.ganttproject.action.task.UnlinkTasksAction;import net.sourceforge.ganttproject.chart.Chart;import net.sourceforge.ganttproject.chart.overview.OverviewPaneAction;import net.sourceforge.ganttproject.gui.TaskTreeUIFacade;import net.sourceforge.ganttproject.gui.TestGanttRolloverButton;import net.sourceforge.ganttproject.gui.UIFacade;import net.sourceforge.ganttproject.gui.zoom.ZoomEvent;import net.sourceforge.ganttproject.gui.zoom.ZoomListener;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.time.gregorian.GregorianCalendar;class GanttChartTabContentPanel implements IAdaptable { private JSplitPane mySplitPane; private Component myTaskTree; private JComponent myGanttChart; private final TaskTreeUIFacade myTreeFacade; private JPanel myTabContentPanel; private final IGanttProject myProject; private final UIFacade myWorkbenchFacade; //private CustomScrollPane scrollPane2 ; private final OverviewPaneAction myOverviewAction; GanttChartTabContentPanel(IGanttProject project, UIFacade workbenchFacade, TaskTreeUIFacade treeFacade, JComponent ganttChart) { myProject = project; myWorkbenchFacade = workbenchFacade; myTreeFacade = treeFacade; myTaskTree = treeFacade.getTreeComponent(); myGanttChart = ganttChart; myOverviewAction = new OverviewPaneAction(workbenchFacade); //scrollPane2 = new CustomScrollPane(myGanttChart); } /** * * The pane contains the chart in its viewPort and * a custom scroll bar * */ // class CustomScrollPane extends JPanel {// protected JScrollBar m_horzSB;// protected CustomViewport m_viewport;// protected JComponent m_comp;// protected Dimension layoutSize;// protected AdjustmentListener scroll;// protected Date startProjectDate = null;// protected Date startFrameDate = null;// protected Date endFrameDate = null;// protected Date endProjectDate = null;// protected int xPosition = 0 ;// protected int mini = 0;// //// /** // * Short description of what the constructor is doing// *// * @param comp this is the chart// * // * it fills he viewPort, the scrollbar and an // * adjustment listener.// */// public CustomScrollPane(JComponent comp){// if (comp == null){// throw new IllegalArgumentException("Component cannot be null");// }// setLayout(null);// m_viewport = new CustomViewport();// m_viewport.setLayout(null);// add(m_viewport);// m_comp = comp;// m_viewport.add(m_comp); // m_horzSB = new JScrollBar(JScrollBar.HORIZONTAL,0,0,0,0);// m_horzSB.setUnitIncrement(5);// add(m_horzSB);//// scroll = new AdjustmentListener() {// public void adjustmentValueChanged(AdjustmentEvent e){//// setChartDateFromBlockPosition();// unlimitedScrolling();//// }// };// m_horzSB.addAdjustmentListener(scroll);// // }// // /** // * // * enables the block(scrolling) not to stop// * at the end and at the start of the scrollbar. // * // * // */// public void unlimitedScrolling(){// if(xPosition <= m_horzSB.getMinimum()){ // getHorzSB()// .removeAdjustmentListener(scroll);// // m_horzSB.setMinimum(m_horzSB.getMinimum()- 10);// getHorzSB()// .addAdjustmentListener(scroll);// xPosition=m_horzSB.getValue();// }// else if(xPosition >= m_horzSB.getMaximum() - m_horzSB.getVisibleAmount()){ // getHorzSB()// .removeAdjustmentListener(scroll);// // m_horzSB.setMaximum(m_horzSB.getMaximum() + 10);// // getHorzSB()// .addAdjustmentListener(scroll);// xPosition=m_horzSB.getValue();// }// // }// // public JScrollBar getHorzSB(){// return m_horzSB;// }// public AdjustmentListener getAdjustmentListener(){// return scroll;// }// /** // * // * It sets the scrollbar block position from// * the starting date of the frame.// * // * // */// void setBlockFromChart(){// // long startFrameTime = Mediator.getGanttProjectSingleton().getArea().getChartModel().getStartDate().getTime();// long startProjectTime = Mediator.getGanttProjectSingleton().getTaskManager().getProjectStart().getTime();//startProjectDate.getTime();// getHorzSB()// .removeAdjustmentListener(scroll);// if (startFrameTime<startProjectTime)// m_horzSB.setValue(m_horzSB.getMinimum());// else// m_horzSB.setValue((int)Math.abs((startFrameTime-startProjectTime)/3600000));// getHorzSB()// .addAdjustmentListener(scroll);// }// //// // // /** // * // * It sets the starting date of the the frame// * from the clock position// * // * // */// // private void setChartDateFromBlockPosition(){// // project length// int xTemp = m_horzSB.getValue();// // // endProjectDate = Mediator.getGanttProjectSingleton().getTaskManager().getProjectEnd();// double endProjectTime = endProjectDate.getTime();//// startProjectDate = Mediator.getGanttProjectSingleton().getTaskManager().getProjectStart();// double startProjectTime = startProjectDate.getTime();// // // double relativeEndOfProject;// int lgth = Mediator.getTaskManager().getTaskCount();// if(lgth == 0 ){// no tasks// relativeEndOfProject = 2880;// }// else{// relativeEndOfProject = (endProjectTime - startProjectTime ) /3600000.0 *1.09; // hours// }// // // float scrollLength = m_horzSB.getWidth();// // double bottomUnitWidth = (double)Mediator.getGanttProjectSingleton().getZoomManager().getZoomState().getBottomUnitWidth();// int zoom = Mediator.getGanttProjectSingleton().getZoomManager().getMyZooming();// double CONVERT;// double scrollHours;// long blockLength;// if (zoom>2){// CONVERT = bottomUnitWidth/(24.0 * 7.0) ; // 24 hours ==> pix / hour// scrollHours = scrollLength / CONVERT; // hours// blockLength = Math.round(scrollHours)*2;// }// else{// CONVERT = 26.0 / 24.0 ; // 26 pixel is day with zoom 2// scrollHours = scrollLength / CONVERT; // hours// blockLength = Math.round(scrollHours);// } // // // if (blockLength > relativeEndOfProject){// relativeEndOfProject = blockLength * 3 ; // }//// set the block length // m_horzSB.setValues(m_horzSB.getValue(),(int) blockLength,0, (int) relativeEndOfProject);// // double x; // x = m_horzSB.getValue();// // if(xPosition>xTemp ){//left scrolling // long time = Math.round(startProjectTime + x /CONVERT * 3600000);// Date blockDate = new Date();// blockDate.setTime(time); // Mediator.getGanttProjectSingleton().getScrollingManager().scrollLeft(blockDate);// }// else if (xPosition<xTemp ){//right scrolling// long time = Math.round(startProjectTime + m_horzSB.getValue() /CONVERT * 3600000) + blockLength/2 * 3600000;// Date blockDate = new Date();// blockDate.setTime(time); // Mediator.getGanttProjectSingleton().getScrollingManager().scrollLeft(blockDate);// }// xPosition = m_horzSB.getValue();//// }// // /** // * // * // * Initialize the layout, viewPort, scrollbar.// * // * // */// public void doLayout() {// layoutSize = getSize();// Dimension d0 = m_comp.getPreferredSize();// Dimension d2 = m_horzSB.getPreferredSize();//// int h = Math.max(layoutSize.height - d2.height-1, 0);//// m_viewport.setBounds(0, 0, layoutSize.width+100, h);// m_horzSB.setBounds(0, h, layoutSize.width, d2.height);// m_horzSB.setEnabled(true);// // setChartDateFromBlockPosition();//// }// /** // * // * bounds of the custom view port// * // * // */// class CustomViewport extends JPanel {// public void doLayout(){// m_comp.setBounds(0, 0, layoutSize.width, layoutSize.height);// }// }// }// // Component getComponent() { if (myTabContentPanel==null) { JPanel left = new JPanel(new BorderLayout()); Box treeHeader = Box.createVerticalBox(); GanttImagePanel but = new GanttImagePanel("big.png", 300, 42); treeHeader.add(but); left.add(treeHeader, BorderLayout.NORTH); left.add(myTaskTree, BorderLayout.CENTER); left.setPreferredSize(new Dimension(315, 600)); left.setBackground(new Color(102, 153, 153)); JPanel right = new JPanel(new BorderLayout()); //scrollPane2 = new CustomScrollPane(myGanttChart); right.add(myGanttChart, BorderLayout.CENTER); JLabel overviewAds = new JLabel("<html><body><b>Expected to see a scrollbar here?</b> Click me to see a better solution! <i>You may also use Ctrl-+ shortcut</i></body></html> "); overviewAds.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { myOverviewAction.actionPerformed(null); } }); right.add(overviewAds, BorderLayout.SOUTH); // A splitpane is used mySplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); if (GanttLanguage.getInstance().getComponentOrientation() == ComponentOrientation.LEFT_TO_RIGHT) { mySplitPane.setLeftComponent(left); mySplitPane.setRightComponent(right); mySplitPane .applyComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); mySplitPane.setDividerLocation((int)left.getPreferredSize() .getWidth()); } else { mySplitPane.setRightComponent(left); mySplitPane.setLeftComponent(right); mySplitPane.setDividerLocation((int) (Toolkit.getDefaultToolkit() .getScreenSize().getWidth() - left.getPreferredSize() .getWidth())); mySplitPane .applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); } mySplitPane.setOneTouchExpandable(true); mySplitPane.setPreferredSize(new Dimension(800, 500)); myTabContentPanel = new JPanel(new BorderLayout()); myTabContentPanel.add(createButtonPanel(), BorderLayout.NORTH); myTabContentPanel.add(mySplitPane, BorderLayout.CENTER); } return myTabContentPanel; } private Component createButtonPanel() { Box buttonBar = Box.createHorizontalBox(); //JToolBar buttonBar = new JToolBar(); //buttonBar.setFloatable(false); TestGanttRolloverButton unindentButton = new TestGanttRolloverButton(myTreeFacade.getUnindentAction()) { public String getText() { return null; } }; buttonBar.add(unindentButton); TestGanttRolloverButton indentButton = new TestGanttRolloverButton(myTreeFacade.getIndentAction()) { public String getText() { return null; } }; buttonBar.add(indentButton); // buttonBar.add(Box.createHorizontalStrut(3)); // TestGanttRolloverButton upButton = new TestGanttRolloverButton(myTreeFacade.getMoveUpAction()) { public String getText() { return null; } }; buttonBar.add(upButton); // TestGanttRolloverButton downButton = new TestGanttRolloverButton(myTreeFacade.getMoveDownAction()) { public String getText() { return null; } }; buttonBar.add(downButton); // buttonBar.add(Box.createHorizontalStrut(8)); Action linkAction = new LinkTasksAction(myProject.getTaskManager(), Mediator.getTaskSelectionManager(), myWorkbenchFacade); myTreeFacade.setLinkTasksAction(linkAction); TestGanttRolloverButton linkButton = new TestGanttRolloverButton(linkAction) { public String getText() { return null; } }; buttonBar.add(linkButton); // Action unlinkAction = new UnlinkTasksAction(myProject.getTaskManager(), Mediator.getTaskSelectionManager(), myWorkbenchFacade); myTreeFacade.setUnlinkTasksAction(unlinkAction); TestGanttRolloverButton unlinkButton = new TestGanttRolloverButton(unlinkAction) { public String getText() { return null; } }; buttonBar.add(unlinkButton); // JPanel buttonPanel = new JPanel(new BorderLayout()); buttonPanel.add(buttonBar, BorderLayout.WEST); return buttonPanel; } int getDividerLocation() { return mySplitPane.getDividerLocation(); } void setDividerLocation(int location) { mySplitPane.setDividerLocation(location); }// public CustomScrollPane getCustomScrollPane(){// return scrollPane2;// } public Object getAdapter(Class adapter) { if (Container.class.equals(adapter)) { return getComponent(); } if (Chart.class.equals(adapter)) { return myGanttChart; } return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -