Files
VisualSapfor/src/_VisualDVM/Visual/Windows/SapforVersionsComparisonForm.java
2024-10-09 22:15:56 +03:00

176 lines
7.3 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.CommonUtils;
import _VisualDVM.Constants;
import _VisualDVM.Current;
import Common.Visual.Controls.MenuBarButton;
import _VisualDVM.Utils;
import GlobalData.GlobalDatabase;
import GlobalData.Settings.SettingName;
import ProjectData.Files.ProjectFile;
import TestingSystem.SAPFOR.Json.SapforVersion_json;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Vector;
public class SapforVersionsComparisonForm extends ComparisonForm<SapforVersion_json> {
//--
protected LinkedHashMap<SapforVersionComparisonState, JButton> buttons = null;
//почти полный клон VersionsComparsionForm. В будущем нужен рефакторинг. Наверное.
Current current;
private final JComboBox<ProjectFile> cbFile;
protected ProjectFile file = null;
private SapforVersionsComparisonForm getMaster() {
return (SapforVersionsComparisonForm) master;
}
private SapforVersionsComparisonForm getSlave() {
return (SapforVersionsComparisonForm) slave;
}
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(Pass_2021.passes.get(
(current.equals(Current.SapforEtalonVersion) ? PassCode_2021.OpenSapforEtalonVersion : PassCode_2021.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;
}
}
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 = ((GlobalDatabase)CommonUtils.db).settings.get(SettingName.ExtensionsOn).toBoolean();
String name1 = ExtensionsOn ? getMaster().file.file.getName() : CommonUtils.getFileNameWithoutExtension(getMaster().file.file);
String name2 = ExtensionsOn ? file.file.getName() : CommonUtils.getFileNameWithoutExtension(file.file);
if (((GlobalDatabase)CommonUtils.db).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() + " : " + CommonUtils.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 (((GlobalDatabase)CommonUtils.db).settings.get(SettingName.ExtensionsOn).toBoolean()) {
//если учитываем расширения, ищем полное совпадение
if (projectFile.file.getName().equals(file_name)) {
cbFile.setSelectedIndex(i);
return true;
}
} else {
if (CommonUtils.getNameWithoutExtension(projectFile.file.getName()).equals(
CommonUtils.getNameWithoutExtension(file_name))) {
cbFile.setSelectedIndex(i);
return true;
}
}
}
return (cbFile.getSelectedItem() != null) && (cbFile.getSelectedItem() instanceof ProjectFile);
}
}
}