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

📄 gptaskpropertysheet.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
字号:
package net.sourceforge.ganttproject.gui.taskproperties;import java.awt.BorderLayout;import java.awt.Component;import java.awt.event.ActionEvent;import java.awt.event.FocusAdapter;import java.awt.event.FocusEvent;import java.util.Date;import javax.swing.Action;import javax.swing.BorderFactory;import javax.swing.JComponent;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import org.eclipse.core.runtime.IStatus;import org.eclipse.core.runtime.Status;import net.sourceforge.ganttproject.GanttCalendar;import net.sourceforge.ganttproject.IGanttProject;import net.sourceforge.ganttproject.action.CancelAction;import net.sourceforge.ganttproject.action.OkAction;import net.sourceforge.ganttproject.gui.HierarchicalPropertySheetBuilderImpl;import net.sourceforge.ganttproject.gui.IPropertySheetBuilder;import net.sourceforge.ganttproject.gui.UIFacade;import net.sourceforge.ganttproject.gui.options.model.BooleanOption;import net.sourceforge.ganttproject.gui.options.model.ChangeValueEvent;import net.sourceforge.ganttproject.gui.options.model.ChangeValueListener;import net.sourceforge.ganttproject.gui.options.model.DateOption;import net.sourceforge.ganttproject.gui.options.model.DefaultBooleanOption;import net.sourceforge.ganttproject.gui.options.model.DefaultDateOption;import net.sourceforge.ganttproject.gui.options.model.DefaultEnumerationOption;import net.sourceforge.ganttproject.gui.options.model.DefaultStringOption;import net.sourceforge.ganttproject.gui.options.model.GPOption;import net.sourceforge.ganttproject.gui.options.model.GPOptionGroup;import net.sourceforge.ganttproject.gui.options.model.ValidationException;import net.sourceforge.ganttproject.gui.options.model.WritableStateHint;import net.sourceforge.ganttproject.gui.options.model.StringOption;import net.sourceforge.ganttproject.language.GanttLanguage;import net.sourceforge.ganttproject.task.Task;import net.sourceforge.ganttproject.task.TaskLength;import net.sourceforge.ganttproject.task.TaskMutator;public class GPTaskPropertySheet {	private final UIFacade myUIFacade;    private GPOptionGroup myMainPropertiesGroup;        private Task myTask;    private TaskMutator myTaskMutator;    private GPOptionGroup mySchedulePropertiesGroup;    private boolean areDefaultNotes;    private JTextArea myNotesArea;    private TaskScheduleFields myTaskScheduleFields;	private final IGanttProject myProject;    	public GPTaskPropertySheet(IGanttProject project, UIFacade uiFacade) {		myProject = project;		myUIFacade = uiFacade;	}    private void applyValues() {        myMainPropertiesGroup.commit();        if (myTaskMutator!=null) {            myTaskMutator.commit();        }        myTaskMutator = myTaskScheduleFields.myDurationOption.isWritable() ?  myTask.createMutator() : myTask.createMutatorFixingDuration();        myMainPropertiesGroup.lock();    }        private void resetMutator() {        if (myTaskMutator!=null) {            myTaskMutator.rollback();        }        myTaskMutator = myTaskScheduleFields.myDurationOption.isWritable() ? myTask.createMutator() : myTask.createMutatorFixingDuration();             }            public void show(Task task) {		Action[] actions = new Action[] {			new OkAction() {				public void actionPerformed(ActionEvent e) {                    onCommit();				}			}, 			new CancelAction(){				public void actionPerformed(ActionEvent e) {                    onCancel();				}			}		};        myTask = task;		myUIFacade.showDialog(getContent(), actions, "Task properties");	}		protected void onCancel() {        myMainPropertiesGroup.rollback();    }    protected void onCommit() {        myMainPropertiesGroup.commit();        myTaskMutator.setNotes(myNotesArea.getText());        myTaskMutator.commit();            }        private Component getContent() {		final JPanel panel = new JPanel(new BorderLayout());        {            final int columns = 20;            String notes = myTask.getNotes();            if (notes==null || "".equals(notes.trim())) {                notes = GanttLanguage.getInstance().getText("option.taskProperties.notes.defaultValue");                areDefaultNotes = true;            }    		myNotesArea = new JTextArea(notes);            myNotesArea.setColumns(columns);            myNotesArea.addFocusListener(new FocusAdapter() {                @Override                public void focusGained(FocusEvent e) {                    super.focusGained(e);                    if (areDefaultNotes) {                        myNotesArea.setText("");                        areDefaultNotes = false;                    }                }                            });            myNotesArea.setBorder(BorderFactory.createLoweredBevelBorder());            JPanel notesPanel = new JPanel(new BorderLayout());            notesPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));            notesPanel.add(new JScrollPane(myNotesArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));    		panel.add(notesPanel, BorderLayout.CENTER);        }        {                		IPropertySheetBuilder builder = new HierarchicalPropertySheetBuilderImpl();            myMainPropertiesGroup = createMainProperties();            myMainPropertiesGroup.lock();            GPOptionGroup myViewPropertiesGroup = new GPOptionGroup("taskProperties.view", new GPOption[] {});            GPOptionGroup myCostPropertiesGroup = new GPOptionGroup("taskProperties.cost", new GPOption[] {});            GPOptionGroup myCustomPropertiesGroup = new GPOptionGroup("taskProperties.custom", new GPOption[] {});//            mySchedulePropertiesGroup = new GPOptionGroup("taskProperties.schedule", new GPOption[] {//                startDate, duration//            });//            mySchedulePropertiesGroup.lock();    		JComponent fields = builder.buildPlanePage(new GPOptionGroup[] {myMainPropertiesGroup, myViewPropertiesGroup, myCostPropertiesGroup, myCustomPropertiesGroup});        	final JTabbedPane tabs = new JTabbedPane();        	final GanttLanguage language = GanttLanguage.getInstance();            tabs.add(language.getText("taskProperties.tab.general.label"), fields);            tabs.add(language.getText("taskProperties.tab.resources.label"), new JPanel());            tabs.add(language.getText("taskProperties.tab.dependencies.label"), new JPanel());//    		JPanel fieldsWrapper = new JPanel(new BorderLayout());//    		fieldsWrapper.add(fields, BorderLayout.NORTH);    		panel.add(tabs, BorderLayout.WEST);        }		return panel;	}        private GPOptionGroup createMainProperties() {        myTaskScheduleFields = new TaskScheduleFields() {            @Override            protected void apply() {                if (myMainPropertiesGroup.isChanged()) {                    applyValues();                }                else {                    resetMutator();                }            }            @Override            protected TaskMutator getMutator() {                return myTaskMutator;            }            @Override            protected Task getTask() {                return myTask;            }			@Override			protected IGanttProject getProject() {				return myProject;			}        };                final StringOption nameField = new DefaultStringOption("taskProperties.main.name") {            @Override            public void commit() {                super.commit();                myTaskMutator.setName(getValue());            }        };        nameField.setValue(myTask.getName());        final BooleanOption milestone = new DefaultBooleanOption("taskProperties.main.milestone", myTask.isMilestone()) {            public void commit() {                super.commit();                myTaskMutator.setMilestone(isChecked());            }                    };        milestone.addChangeValueListener(new ChangeValueListener() {            {                onMilestoneToggle(myTask.isMilestone());            }            public void changeValue(ChangeValueEvent event) {                onMilestoneToggle((Boolean)event.getNewValue());            }            private void onMilestoneToggle(Boolean isMilestone) {                myTaskScheduleFields.myDurationOption.setWritable(!isMilestone.booleanValue());                myTaskScheduleFields.myEndDateOption.setWritable(!isMilestone.booleanValue());            }        });        myTaskScheduleFields.myDurationOption.setWritable(false);        resetMutator();        final GPOption completion = new  DefaultStringOption("taskProperties.main.completion") {			@Override			public void setValue(String value) {				try {					int completion = Integer.parseInt(value);					if (completion<0 || completion>100) {						throw new ValidationException();					}				}				catch(NumberFormatException e) {					throw new ValidationException("", e);				}				super.setValue(value);			}			@Override			public void commit() {				super.commit();                if (getValue()!=null) {                    myTaskMutator.setCompletionPercentage(Integer.parseInt(getValue()));                }			}        	        };        final GPOption priority = new DefaultEnumerationOption("taskProperties.main.priority", new String[] {                "high", "medium", "low"        });        return new GPOptionGroup("taskProperties.main", new GPOption[]{                nameField, milestone, myTaskScheduleFields.myStartDateOption, myTaskScheduleFields.myEndDateOption, myTaskScheduleFields.myDurationOption, completion, priority         }) {//            @Override//            public void commit() {//                //                nameField.commit();//                milestone.commit();//                completion.commit();//                priority.commit();//            }//                    };            }}

⌨️ 快捷键说明

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