📄 ganttprojectbase.java
字号:
/* * Created on 05.04.2005 */package net.sourceforge.ganttproject;import java.awt.BorderLayout;import java.awt.Component;import java.awt.Container;import java.awt.Frame;import java.awt.event.ActionEvent;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.io.File;import java.io.PrintWriter;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import javax.swing.Action;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.Icon;import javax.swing.JButton;import javax.swing.JComponent;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.KeyStroke;import javax.swing.WindowConstants;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.table.AbstractTableModel;import net.sourceforge.ganttproject.action.CancelAction;import net.sourceforge.ganttproject.action.GPAction;import net.sourceforge.ganttproject.action.OkAction;import net.sourceforge.ganttproject.calendar.GPCalendar;import net.sourceforge.ganttproject.chart.Chart;import net.sourceforge.ganttproject.chart.ChartModelImpl;import net.sourceforge.ganttproject.chart.ChartSelection;import net.sourceforge.ganttproject.chart.ChartSelectionListener;import net.sourceforge.ganttproject.chart.overview.OverviewPaneAction;import net.sourceforge.ganttproject.document.Document;import net.sourceforge.ganttproject.document.DocumentCreator;import net.sourceforge.ganttproject.document.DocumentManager;import net.sourceforge.ganttproject.gui.DialogAligner;import net.sourceforge.ganttproject.gui.GanttDialogInfo;import net.sourceforge.ganttproject.gui.GanttStatusBar;import net.sourceforge.ganttproject.gui.GanttTabbedPane;import net.sourceforge.ganttproject.gui.ProjectUIFacade;import net.sourceforge.ganttproject.gui.ProjectUIFacadeImpl;import net.sourceforge.ganttproject.gui.UIConfiguration;import net.sourceforge.ganttproject.gui.UIFacade;import net.sourceforge.ganttproject.gui.options.model.GPOptionChangeListener;import net.sourceforge.ganttproject.gui.scrolling.ScrollingManager;import net.sourceforge.ganttproject.gui.scrolling.ScrollingManagerImpl;import net.sourceforge.ganttproject.gui.zoom.ZoomManager;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.parser.ParserFactory;import net.sourceforge.ganttproject.resource.ResourceManager;import net.sourceforge.ganttproject.roles.RoleManager;import net.sourceforge.ganttproject.task.Task;import net.sourceforge.ganttproject.task.TaskContainmentHierarchyFacade;import net.sourceforge.ganttproject.task.TaskManager;import net.sourceforge.ganttproject.time.TimeUnitStack;import net.sourceforge.ganttproject.time.gregorian.GPTimeUnitStack;import net.sourceforge.ganttproject.undo.GPUndoManager;import net.sourceforge.ganttproject.undo.UndoManagerImpl;import org.eclipse.core.runtime.IAdaptable;import org.jdesktop.swing.calendar.JXDatePickerFormatterFactory;/** * This class is designed to be a GanttProject-after-refactorings. I am going to * refactor GanttProject in order to make true view communicating with other * views through interfaces. This class is intentionally package local to * prevent using it in other packages (use interfaces rather than concrete * implementations!) * * @author dbarashev */abstract class GanttProjectBase extends JFrame implements IGanttProject, UIFacade { private final ViewManagerImpl myViewManager; private final List myModifiedStateChangeListeners = new ArrayList(); private final UIFacadeImpl myUIFacade; private final GanttStatusBar statusBar; private final TimeUnitStack myTimeUnitStack; private final ProjectUIFacadeImpl myProjectUIFacade; private final DocumentManager myDocumentManager; /** The tabbed pane with the differents parts of the project */ private GanttTabbedPane myTabPane; private final GPUndoManager myUndoManager; protected GanttProjectBase() { super("Gantt Chart"); statusBar = new GanttStatusBar(this); myTabPane = new GanttTabbedPane(); myViewManager = new ViewManagerImpl(myTabPane); addProjectEventListener(myViewManager); myTimeUnitStack = new GPTimeUnitStack(getLanguage()); JXDatePickerFormatterFactory.setDateFormats(myTimeUnitStack.getDateFormats()); myUIFacade =new UIFacadeImpl(this, statusBar, getProject(), (UIFacade)this); myDocumentManager = new DocumentCreator(this, getUIFacade(), null) { protected ParserFactory getParserFactory() { return GanttProjectBase.this.getParserFactory(); } }; myUndoManager = new UndoManagerImpl((IGanttProject) this, null, myDocumentManager) { protected ParserFactory getParserFactory() { return GanttProjectBase.this.getParserFactory(); } }; Mediator.registerUndoManager(myUndoManager); myProjectUIFacade = new ProjectUIFacadeImpl(myUIFacade, myDocumentManager, myUndoManager); OverviewPaneAction overviewAction = new OverviewPaneAction(myUIFacade); myTabPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(GPAction.getKeyStroke("overview.shortcut"), "overview"); myTabPane.getActionMap().put("overview", overviewAction); } private GanttLanguage getLanguage() { return GanttLanguage.getInstance(); } public void addProjectEventListener(ProjectEventListener listener) { myModifiedStateChangeListeners.add(listener); } public void removeProjectEventListener(ProjectEventListener listener) { myModifiedStateChangeListeners.remove(listener); } protected void fireProjectModified(boolean isModified){ for (int i=0; i<myModifiedStateChangeListeners.size(); i++) { ProjectEventListener next = (ProjectEventListener) myModifiedStateChangeListeners.get(i); try { if (isModified) { next.projectModified(); } else { next.projectSaved(); } } catch(Exception e) { showErrorDialog(e); } } } protected void fireProjectClosed() { for (int i=0; i<myModifiedStateChangeListeners.size(); i++) { ProjectEventListener next = (ProjectEventListener) myModifiedStateChangeListeners.get(i); next.projectClosed(); } } // //////////////////////////////////////////////////////////////// // UIFacade public ProjectUIFacade getProjectUIFacade() { return myProjectUIFacade; } public UIFacade getUIFacade() { return myUIFacade; } public Frame getMainFrame() { return myUIFacade.getMainFrame(); } public ScrollingManager getScrollingManager() { return myUIFacade.getScrollingManager(); } public ZoomManager getZoomManager() { return myUIFacade.getZoomManager(); } public GPUndoManager getUndoManager() { return myUndoManager; } public void setStatusText(String text) { myUIFacade.setStatusText(text); } public void showDialog(Component content, Action[] actions) { myUIFacade.showDialog(content,actions); } public void showDialog(Component content, Action[] actions, String title) { myUIFacade.showDialog(content,actions,title); } public void showUndecoratedDialog(Component content, Action[] actions) { myUIFacade.showUndecoratedDialog(content, actions); } public UIFacade.Choice showConfirmationDialog(String message, String title) { return myUIFacade.showConfirmationDialog(message, title); } public void showErrorDialog(String message) { myUIFacade.showErrorDialog(message); } public void showErrorDialog(Throwable e) { myUIFacade.showErrorDialog(e); } public void logErrorMessage(Exception e) { myUIFacade.logErrorMessage(e); } public void showPopupMenu(Component invoker, Action[] actions, int x, int y) { myUIFacade.showPopupMenu(invoker, actions, x, y); }// public void changeWorkingDirectory(File directory) {// myUIFacade.changeWorkingDirectory(directory);// } public void setWorkbenchTitle(String title) { myUIFacade.setWorkbenchTitle(title); } protected GPViewManager getViewManager() { return myViewManager; } private class ViewManagerImpl implements GPViewManager, ProjectEventListener { private GanttTabbedPane myTabs; private List myViews = new ArrayList(); private GPViewImpl mySelectedView; ViewManagerImpl(GanttTabbedPane tabs) { myTabs = tabs; myTabs.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { GPViewImpl selectedView = (GPViewImpl) myTabs.getSelectedUserObject(); if (mySelectedView==selectedView) { return; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -