package name.admitriev.jhelper.ui;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.LabeledComponent;
import name.admitriev.jhelper.task.TaskData;
import net.egork.chelper.task.StreamConfiguration;
import net.egork.chelper.task.Test;
import net.egork.chelper.task.TestType;
import org.jdesktop.swingx.VerticalLayout;
import javax.swing.*;
/**
* Panel for task configuration.
*/
public final class TaskSettingsComponent extends JPanel {
private JTextField name = null;
private JTextField className = null;
private FileSelector cppPath = null;
private StreamConfigurationPanel input = null;
private StreamConfigurationPanel output = null;
private ComboBox<TestType> testType = null;
private final boolean canChangeName;
private Project project;
private StreamConfigurationPanel.SizeChangedListener listener;
public TaskSettingsComponent(Project project, boolean canChangeName) {
this(project, canChangeName, null);
}
public TaskSettingsComponent(Project project, boolean canChangeName, StreamConfigurationPanel.SizeChangedListener listener) {
super(new VerticalLayout());
this.project = project;
this.listener = listener;
this.canChangeName = canChangeName;
setTaskData(TaskData.emptyTaskData(project));
}
public void setTaskData(TaskData taskData) {
removeAll();
name = new JTextField(taskData.getName());
name.setEnabled(canChangeName);
className = new JTextField(taskData.getClassName());
cppPath = new FileSelector(
project,
taskData.getCppPath(),
RelativeFileChooserDescriptor.fileChooser(project.getBaseDir())
);
input = new StreamConfigurationPanel(
taskData.getInput(),
StreamConfiguration.StreamType.values(),
"input.txt",
listener
);
output = new StreamConfigurationPanel(
taskData.getOutput(),
StreamConfiguration.OUTPUT_TYPES,
"output.txt",
listener
);
testType = new ComboBox<>(TestType.values());
testType.setSelectedItem(taskData.getTestType());
add(LabeledComponent.create(name, "Task name"));
add(LabeledComponent.create(className, "Class name"));
add(LabeledComponent.create(cppPath, "Path"));
add(LabeledComponent.create(input, "Input"));
add(LabeledComponent.create(output, "Output"));
add(LabeledComponent.create(testType, "Test type"));
UIUtils.mirrorFields(name, className);
UIUtils.mirrorFields(name, cppPath.getTextField(), TaskData.defaultCppPathFormat(project));
}
public TaskData getTask() {
return new TaskData(
name.getText(),
className.getText(),
cppPath.getText(),
input.getStreamConfiguration(),
output.getStreamConfiguration(),
(TestType) testType.getSelectedItem(),
new Test[0]
);
}
}