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 { //-- protected LinkedHashMap buttons = null; //почти полный клон VersionsComparsionForm. В будущем нужен рефакторинг. Наверное. Current current; private final JComboBox 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 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); } } }