📄 gptaskpropertysheet.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 + -