Files
VisualSapfor/src/_VisualDVM/Visual/Windows/SapforVersionsComparisonForm.java
2024-10-14 15:19:13 +03:00

175 lines
7.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package _VisualDVM.Visual.Windows;
import Common.Utils.Utils_;
import Common.Visual.Controls.MenuBarButton;
import _VisualDVM.Constants;
import _VisualDVM.Current;
import _VisualDVM.Global;
import _VisualDVM.GlobalData.Settings.SettingName;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.ProjectData.Files.ProjectFile;
import _VisualDVM.TestingSystem.SAPFOR.Json.SapforVersion_json;
import _VisualDVM.Utils;
import javax.swing.*;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Vector;
public class SapforVersionsComparisonForm extends ComparisonForm<SapforVersion_json> {
private final JComboBox<ProjectFile> cbFile;
//--
protected LinkedHashMap<SapforVersionComparisonState, JButton> buttons = null;
protected ProjectFile file = null;
//почти полный клон VersionsComparsionForm. В будущем нужен рефакторинг. Наверное.
Current current;
public SapforVersionsComparisonForm(SapforVersionsComparisonForm slave_in, Current current_in) {
super(SapforVersion_json.class, slave_in);
current = current_in;
bApplyObject.setVisible(false);
bClose.setVisible(false);
cbFile = new JComboBox<>();
tools.add(Global.mainModule.getPass(
(current.equals(Current.SapforEtalonVersion) ? PassCode.OpenSapforEtalonVersion : PassCode.OpenSapforVersion
)).createButton(), 3);
tools.add(cbFile, 4);
//--
cbFile.addActionListener(e -> {
SelectFile(((cbFile.getSelectedItem() instanceof ProjectFile) ? ((ProjectFile) cbFile.getSelectedItem()) : null));
});
//--
buttons = new LinkedHashMap<>();
int i = 5;
for (SapforVersionComparisonState state : SapforVersionComparisonState.values()) {
MenuBarButton button = new MenuBarButton();
button.setIcon("/icons/" + state.toString() + ".png");
button.setToolTipText(state.getDescription());
button.addActionListener(e -> {
if (object != null) {
ProjectFile projectFile = null;
switch (state) {
case CompilationOutput:
projectFile = object.parse_out;
break;
case CompilationErrors:
projectFile = object.parse_err;
break;
case RunOutput:
projectFile = object.out;
break;
case RunErrors:
projectFile = object.err;
break;
}
SelectFile(projectFile);
}
});
tools.add(button, i);
buttons.put(state, button);
++i;
}
}
private SapforVersionsComparisonForm getMaster() {
return (SapforVersionsComparisonForm) master;
}
private SapforVersionsComparisonForm getSlave() {
return (SapforVersionsComparisonForm) slave;
}
public void SelectFile(ProjectFile file_in) {
file = file_in;
if (isMaster()) {
if (isReady() && !getSlave().selectSameFile(file))
DoShowPass(true);
} else {
if (isReady()) {
if (getMaster().isReady()) {
boolean ExtensionsOn = (Global.mainModule.getDb()).settings.get(SettingName.ExtensionsOn).toBoolean();
String name1 = ExtensionsOn ? getMaster().file.file.getName() : Utils_.getFileNameWithoutExtension(getMaster().file.file);
String name2 = ExtensionsOn ? file.file.getName() : Utils_.getFileNameWithoutExtension(file.file);
if ((Global.mainModule.getDb()).settings.get(SettingName.ComparsionDiffMergeOn).toBoolean()) {
if (name1.equalsIgnoreCase(name2))
master.DoComparePass(true);
} else
master.DoShowPass(true);
} else {
master.DoShowPass(true);
}
}
}
}
@Override
protected Current getCurrentObjectName() {
return current;
}
@Override
protected String getText() {
return isReady() ?
(file.file.exists() ? Utils.ReadAllText(file.file) : "файл не найден")
: "объект не назначен";
}
@Override
public boolean isReady() {
return super.isReady() && file != null;
}
@Override
protected void showObject() {
lObjectName.setText(object.toString());
lObjectName.setToolTipText(object.Home.getName() + " : " + Utils_.Brackets(object.description));
cbFile.removeAllItems();
for (ProjectFile file : object.files.values())
cbFile.addItem(file);
}
@Override
protected void removeObject() {
cbFile.removeAllItems();
file = null;
}
public boolean selectSameFile(ProjectFile file_in) {
file = null;
Vector<String> data_names = new Vector<>(Arrays.asList(
Constants.parse_out_file,
Constants.parse_err_file,
Constants.out_file,
Constants.err_file));
String file_name = file_in.file.getName();
if (data_names.contains(file_name)) {
SapforVersionComparisonState state = null;
switch (file_name) {
case Constants.parse_out_file:
state = SapforVersionComparisonState.CompilationOutput;
break;
case Constants.parse_err_file:
state = SapforVersionComparisonState.CompilationErrors;
break;
case Constants.out_file:
state = SapforVersionComparisonState.RunOutput;
break;
case Constants.err_file:
state = SapforVersionComparisonState.RunErrors;
break;
}
if (state != null) {
buttons.get(state).doClick();
}
return isReady();
} else {
cbFile.setSelectedIndex(-1);
for (int i = 0; i < cbFile.getItemCount(); ++i) {
ProjectFile projectFile = cbFile.getItemAt(i);
if ((Global.mainModule.getDb()).settings.get(SettingName.ExtensionsOn).toBoolean()) {
//если учитываем расширения, ищем полное совпадение
if (projectFile.file.getName().equals(file_name)) {
cbFile.setSelectedIndex(i);
return true;
}
} else {
if (Utils_.getNameWithoutExtension(projectFile.file.getName()).equals(
Utils_.getNameWithoutExtension(file_name))) {
cbFile.setSelectedIndex(i);
return true;
}
}
}
return (cbFile.getSelectedItem() != null) && (cbFile.getSelectedItem() instanceof ProjectFile);
}
}
}