Перенос.

This commit is contained in:
2023-09-17 22:13:42 +03:00
parent dd2e0ca7e0
commit 629d8b8477
1239 changed files with 61161 additions and 1 deletions

View File

@@ -0,0 +1,17 @@
package Common.UI.Menus_2023.BugReportsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class BugReportsMenuBar extends DataMenuBar {
public BugReportsMenuBar() {
super("отчёты об ошибках",
PassCode_2021.SynchronizeBugReports,
PassCode_2021.DownloadAllBugReportsArchives,
PassCode_2021.AddBugReport,
PassCode_2021.PublishBugReport,
PassCode_2021.OpenBugReportTestProject,
PassCode_2021.OpenBugReport,
PassCode_2021.UpdateBugReportProgress,
PassCode_2021.CloseBugReport,
PassCode_2021.DeleteBugReport);
}
}

View File

@@ -0,0 +1,13 @@
package Common.UI.Menus_2023.CompilersMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class CompilersMenuBar extends DataMenuBar {
public CompilersMenuBar() {
super("компиляторы",
PassCode_2021.AddCompiler,
PassCode_2021.EditCompiler,
PassCode_2021.DeleteCompiler,
PassCode_2021.ShowCompilerVersion,
PassCode_2021.ShowCompilerHelp);
}
}

View File

@@ -0,0 +1,27 @@
package Common.UI.Menus_2023.ComponentsMenuBar;
import Common.Current;
import Common.UI.Menus_2023.DataMenuBar;
import Common.UI.Menus_2023.VisualiserMenu;
import Common.UI.Themes.VisualiserFonts;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
public class ComponentsMenuBar extends DataMenuBar {
public ComponentsMenuBar() {
super("компоненты");
addMenus(
new VisualiserMenu(
"Восстановление предыдущей версии компонента", "/icons/Resurrect.png") {
{
setFont(Current.getTheme().Fonts.get(VisualiserFonts.Menu));
add(Pass_2021.passes.get(PassCode_2021.ResurrectComponent).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.ResurrectComponentFromServer).createMenuItem());
}
}
);
addPasses(PassCode_2021.InstallComponentFromFolder,
PassCode_2021.UpdateSelectedComponents,
PassCode_2021.PublishComponent,
PassCode_2021.ShowComponentChangesLog);
Pass_2021.passes.get(PassCode_2021.PublishComponent).setControlsVisible(false);
}
}

View File

@@ -0,0 +1,33 @@
package Common.UI.Menus_2023.ConfigurationsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class ConfigurationsMenuBar extends DataMenuBar {
public ConfigurationsMenuBar() {
super("конфигурации");
/*
add(new MenuBarButton() {
{
setText("Оповещение по email");
setToolTipText("Оповещение о прогрессе выполнения пакета тестов");
Mark();
addActionListener(e -> {
email = !email;
Mark();
});
}
public void Mark() {
setIcon(Utils.getIcon(email ? "/icons/Pick.png" : "/icons/NotPick.png"));
}
});
*/
addPasses(
PassCode_2021.EditMachineKernels,
PassCode_2021.StartTests,
PassCode_2021.PublishConfiguration,
PassCode_2021.CopyConfigurations,
PassCode_2021.EditConfiguration,
PassCode_2021.DeleteSelectedConfigurations
);
}
}

View File

@@ -0,0 +1,11 @@
package Common.UI.Menus_2023.DVMParametersMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class DVMParametersMenuBar extends DataMenuBar {
public DVMParametersMenuBar() {
super("параметры",
PassCode_2021.AddDVMParameter,
PassCode_2021.EditDVMParameter,
PassCode_2021.DeleteDVMParameter);
}
}

View File

@@ -0,0 +1,54 @@
package Common.UI.Menus_2023;
import Common.Database.DataSet;
import Visual_DVM_2021.Passes.PassCode_2021;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class DataMenuBar extends VisualiserMenuBar {
public JLabel countLabel = null;
JButton selectAllButton = null;
JButton unselectAllButton = null;
//-
public ActionListener selectAllListener = null;
public ActionListener unselectAllListener = null;
//-
public DataMenuBar(String dataName, PassCode_2021... passes) {
// Font font = Current.getTheme().Fonts.get(VisualiserFonts.TreeBoldItalic).deriveFont(12.0F);
add(new JLabel(dataName + " "));
add(countLabel = new JLabel("?"));
addPasses(passes);
}
public void createSelectionButtons(DataSet dataSet) {
java.awt.Dimension d = new Dimension(25, 25);
if (selectAllButton == null) {
add(selectAllButton = new MenuBarButton() {
{
setIcon("/icons/SelectAll.png");
setToolTipText("Выбрать всё");
setPreferredSize(d);
setMinimumSize(d);
setMaximumSize(d);
}
}, 0);
}
if (unselectAllButton == null) {
add(unselectAllButton = new MenuBarButton() {
{
setIcon("/icons/UnselectAll.png");
setToolTipText("Отменить всё");
setPreferredSize(d);
setMinimumSize(d);
setMaximumSize(d);
}
}, 1);
}
if (selectAllListener != null) {
selectAllButton.removeActionListener(selectAllListener); }
selectAllButton.addActionListener(selectAllListener = e -> dataSet.CheckAll(true));
if (unselectAllListener != null) {
unselectAllButton.removeActionListener(unselectAllListener);
}
unselectAllButton.addActionListener(unselectAllListener = e -> dataSet.CheckAll(false));
}
}

View File

@@ -0,0 +1,12 @@
package Common.UI.Menus_2023.EnvironmentValuesMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class EnvironmentValuesMenuBar extends DataMenuBar {
public EnvironmentValuesMenuBar() {
super("переменные окружения", PassCode_2021.AddEnvironmentValue,
PassCode_2021.EditEnvironmentValue,
PassCode_2021.DeleteEnvironmentValue,
PassCode_2021.PickCompilerEnvironments
);
}
}

View File

@@ -0,0 +1,49 @@
package Common.UI.Menus_2023.FastAccessMenuBar;
import Common.Global;
import Common.UI.Menus_2023.VisualiserMenuBar;
import Common.UI.UI;
import GlobalData.Settings.SettingName;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import java.awt.*;
import java.util.LinkedHashMap;
public class FastAccessMenuBar extends VisualiserMenuBar {
LinkedHashMap<PassCode_2021, JButton> passesButtons = new LinkedHashMap<>();
public FastAccessMenuBar() {
Refresh();
}
@Override
public void setSizeLimits() {
//если задавать PreffredSize 0, скролл НЕ РАБОТАЕТ. Магия!
}
public void showPass(Pass_2021 pass) {
JButton button = null;
if (passesButtons.containsKey(pass.code()))
button = passesButtons.get((pass.code()));
else {
button = pass.createButton();
passesButtons.put(pass.code(), button);
}
add(button);
Dimension d = button.getPreferredSize();
button.setPreferredSize(new Dimension(d.width, 30));
revalidate();
repaint();
}
public void Refresh() {
UI.Clear(this);
int i = 1;
for (Pass_2021 pass : Pass_2021.FAPasses) {
if (pass.stats.HasUsages()) {
showPass(pass);
++i;
if (i > (Global.db.settings.get(SettingName.FastAccessPassesCount).toInt32())) break;
}
}
}
public void Drop(){
UI.Clear(this);
}
}

View File

@@ -0,0 +1,84 @@
package Common.UI.Menus_2023.FileMenuBar;
import Common.UI.Menus_2023.MenuBarButton;
import Common.UI.Menus_2023.VisualiserMenuBar;
import Common.UI.UI;
import ProjectData.Files.UI.Editor.SPFEditor;
import Visual_DVM_2021.Passes.PassCode_2021;
import javax.swing.*;
import java.awt.*;
public class FileMenuBar extends VisualiserMenuBar {
public JSpinner sToGo;
JLabel LineCountLabel;
public JLabel CurrentSymbolLabel;
SPFEditor editor;
FileSettingsMenu fileSettingsMenu;
public FileMenuBar(SPFEditor editor_in) {
editor = editor_in;
add(new MenuBarButton() {
{
setToolTipText("Поиск(Ctrl+F)");
setIcon("/icons/LastOpened.png");
addActionListener(e -> UI.ShowSearchForm());
}
});
addPasses(PassCode_2021.Save);
add(new MenuBarButton() {
{
setToolTipText("Увеличить шрифт(Ctrl+'+')");
setIcon("/icons/Editor/Font+.png");
addActionListener(e -> editor.FontUp());
}
});
add(new MenuBarButton() {
{
setToolTipText("Уменьшить шрифт(Ctrl+'-')");
setIcon("/icons/Editor/Font-.png");
addActionListener(e -> editor.FontDown());
}
});
add(new MenuBarButton() {
boolean isOn = false;
{
setToolTipText("Отображать спецсимволы");
setIcon("/icons/Editor/ShowNoSigns.png");
addActionListener(e-> {
isOn = !isOn;
if (isOn) {
setIcon("/icons/Editor/ShowAllSigns.png");
setToolTipText("Скрыть спецсимволы");
editor.setWhitespaceVisible(true);
editor.setEOLMarkersVisible(true);
} else {
setIcon("/icons/Editor/ShowNoSigns.png");
setToolTipText("Отображать спецсимволы");
editor.setWhitespaceVisible(false);
editor.setEOLMarkersVisible(false);
}
});
}
});
add(new JLabel(" Строка "));
add(sToGo = new JSpinner());
sToGo.setPreferredSize(new Dimension(60, 25));
sToGo.setMaximumSize(new Dimension(60, 25));
add(new JLabel(" из "));
add(LineCountLabel = new JLabel("?"));
add(new JLabel(" | "));
add(new JLabel("Позиция "));
add(CurrentSymbolLabel = new JLabel());
add(new JSeparator());
addMenus(fileSettingsMenu = new FileSettingsMenu());
//--
// addPasses(PassCode_2021.CloseCurrentFile);
//-
setPreferredSize(new Dimension(0, 30));
}
public void ShowLinesCount() {
LineCountLabel.setText(String.valueOf(editor.getLineCount()));
}
//-
public void ShowLanguage(){fileSettingsMenu.ShowLanguage();}
public void ShowType(){fileSettingsMenu.ShowType();}
public void ShowStyle(){fileSettingsMenu.ShowStyle();}
}

View File

@@ -0,0 +1,63 @@
package Common.UI.Menus_2023.FileMenuBar;
import Common.Current;
import Common.UI.Menus_2023.LanguagesSubmenu;
import Common.UI.Menus_2023.StylesSubmenu;
import Common.UI.Menus_2023.TypesSubmenu;
import Common.UI.Menus_2023.VisualiserMenu;
import Common.UI.UI;
import ProjectData.Files.FileType;
import ProjectData.Files.LanguageStyle;
import ProjectData.LanguageName;
import javax.swing.*;
public class FileSettingsMenu extends VisualiserMenu {
JMenu mLanguage;
JMenu mStyle;
JMenu mType;
public FileSettingsMenu() {
super("Настройки файла", "/icons/Settings.png");
add(mLanguage = new LanguagesSubmenu() {
@Override
public void action(LanguageName languageName) {
if (Current.getFile().UpdateLanguage(languageName)) {
Current.getSapfor().ResetAllAnalyses();
Current.getFile().form.ShowLanguage();
UI.getMainWindow().getProjectWindow().getFilesTreeForm().getTree().RefreshNode(Current.getFile().node);
}
}
});
ShowLanguage();
//--
add(mStyle = new StylesSubmenu() {
@Override
public void action(LanguageStyle languageStyle) {
if (Current.getFile().UpdateStyle(languageStyle)) {
Current.getSapfor().ResetAllAnalyses();
Current.getFile().form.ShowStyle();
}
}
});
ShowStyle();
//--
add(mType = new TypesSubmenu() {
@Override
public void action(FileType fileType) {
if (Current.getFile().UpdateType(fileType)) {
Current.getSapfor().ResetAllAnalyses();
UI.getMainWindow().getProjectWindow().getFilesTreeForm().getTree().RefreshNode(Current.getFile().node);
Current.getFile().form.ShowType();
}
}
});
ShowType();
}
public void ShowLanguage() {
mLanguage.setText("Язык: " + Current.getFile().languageName.getDescription());
}
public void ShowStyle() {
mStyle.setText("Стиль: " + Current.getFile().style.getDescription());
}
public void ShowType() {
mType.setText("Тип: " + Current.getFile().fileType.getDescription());
}
}

View File

@@ -0,0 +1,42 @@
package Common.UI.Menus_2023.GroupsMenuBar;
import Common.Global;
import Common.UI.Menus_2023.DataMenuBar;
import Common.UI.Menus_2023.MenuBarButton;
import Common.Utils.Utils;
import TestingSystem.Group.GroupInterface;
import Visual_DVM_2021.Passes.PassCode_2021;
import javax.swing.*;
public class GroupsMenuBar extends DataMenuBar {
public GroupsMenuBar() {
super("группы", PassCode_2021.SynchronizeTests, PassCode_2021.DownloadGroup, PassCode_2021.ConvertCorrectnessTests, PassCode_2021.PublishGroup, PassCode_2021.CopyGroups, PassCode_2021.EditGroup, PassCode_2021.DeleteSelectedGroups);
add(new JSeparator());
add(new MenuBarButton() {
{
setText("Свои");
setToolTipText("Отображать только группы тестов авторства пользователя");
Mark();
addActionListener(e -> {
GroupInterface.filterMyOnly = !GroupInterface.filterMyOnly;
Mark();
Global.testingServer.db.groups.ShowUI();
});
}
public void Mark() {
setIcon(Utils.getIcon(GroupInterface.filterMyOnly ? "/icons/Pick.png" : "/icons/NotPick.png"));
}
});
}
public void addFilters(JMenu typesFilterMenu, JMenu languagesFilterMenu) {
filters = addMenus(typesFilterMenu, languagesFilterMenu);
}
JMenuBar filters= null;
public void DropFilters() {
if (filters != null) {
remove(filters);
filters = null;
}
revalidate();
repaint();
}
}

View File

@@ -0,0 +1,34 @@
package Common.UI.Menus_2023;
import Common.Utils.Utils;
import ProjectData.LanguageName;
import javax.swing.*;
import java.awt.event.ActionEvent;
public abstract class LanguagesSubmenu extends VisualiserMenu {
public LanguagesSubmenu() {
this("Язык");
}
public LanguagesSubmenu(String text) {
super(text, "/icons/Language.png", true);
for (LanguageName languageName : LanguageName.values()) {
if (languageName.equals(LanguageName.fortran) ||
(languageName.equals(LanguageName.c) ||
(languageName.equals(LanguageName.cpp)))) {
JMenuItem languageItem = new StableMenuItem(languageName.getDescription());
String li = languageName.getIcon();
if (!li.isEmpty())
languageItem.setIcon(Utils.getIcon(li));
languageItem.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
action(languageName);
}
});
add(languageItem);
}
}
}
public abstract void action(LanguageName languageName);
}

View File

@@ -0,0 +1,11 @@
package Common.UI.Menus_2023.MachinesMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class MachinesMenuBar extends DataMenuBar {
public MachinesMenuBar() {
super("машины",
PassCode_2021.AddMachine,
PassCode_2021.EditMachine,
PassCode_2021.DeleteMachine);
}
}

View File

@@ -0,0 +1,14 @@
package Common.UI.Menus_2023.MainMenuBar;
import Common.UI.Menus_2023.VisualiserMenu;
import Repository.Component.Sapfor.Sapfor;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
public class AnalysesMenu extends VisualiserMenu {
public AnalysesMenu() {
super("Анализаторы","/icons/Analyses.png" );
for (PassCode_2021 code : Sapfor.getAnalysesCodes())
add(Pass_2021.passes.get(code).createMenuItem());
addSeparator();
add(Pass_2021.passes.get(PassCode_2021.SPF_GetGCovInfo).createMenuItem());
}
}

View File

@@ -0,0 +1,20 @@
package Common.UI.Menus_2023.MainMenuBar;
import Common.UI.Menus_2023.VisualiserMenu;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
public class GlobalCleaningMenu extends VisualiserMenu {
public GlobalCleaningMenu() {
super("Очистка", "/icons/Clean.png", false);
add(Pass_2021.passes.get(PassCode_2021.DropLastProjects).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DropFastAccess).createMenuItem());
addSeparator();
add(Pass_2021.passes.get(PassCode_2021.DeleteDownloadedBugReports).createMenuItem());
addSeparator();
add(Pass_2021.passes.get(PassCode_2021.DropAnalyses).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.CleanAnalyses).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DropSavedArrays).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DeleteDebugResults).createMenuItem());
addSeparator();
add(Pass_2021.passes.get(PassCode_2021.ResetCurrentProject).createMenuItem());
}
}

View File

@@ -0,0 +1,48 @@
package Common.UI.Menus_2023.MainMenuBar;
import Common.Global;
import Common.UI.Menus.VisualiserMenuItem;
import Common.UI.Menus_2023.VisualiserMenu;
import GlobalData.DBLastProject.DBLastProject;
import GlobalData.Settings.SettingName;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Vector;
public class LastOpenedProjectsMenu extends VisualiserMenu {
public LastOpenedProjectsMenu() {
super("Недавние проекты", "/icons/LastOpened.png");
addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent e) {
removeAll();
Vector<DBLastProject> projects = Global.db.lastProjects.getOrdered();
int k = 1;
for (DBLastProject p : projects) {
if (new File(p.HomePath).exists() && p.lastOpened != 0) {
VisualiserMenuItem i = new VisualiserMenuItem(p.HomePath);
i.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Pass_2021.passes.get(PassCode_2021.OpenCurrentProject).Do(new File(p.HomePath));
}
});
add(i);
++k;
if (k > (Global.db.settings.get(SettingName.LastOpenedProjectsCount).toInt32())) break;
}
}
}
@Override
public void menuDeselected(MenuEvent e) {
}
@Override
public void menuCanceled(MenuEvent e) {
}
});
}
}

View File

@@ -0,0 +1,87 @@
package Common.UI.Menus_2023.MainMenuBar;
import Common.Global;
import Common.UI.Menus_2023.MenuBarButton;
import Common.UI.Menus_2023.VisualiserMenuBar;
import Common.UI.UI;
import Repository.Component.PerformanceAnalyzer.PerformanceAnalyzer;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import java.awt.*;
public class MainMenuBar extends VisualiserMenuBar {
JMenu analyses;
JMenu transformations;
MenuBarButton components;
public MainMenuBar() {
addMenus(new LastOpenedProjectsMenu());
addPasses(PassCode_2021.OpenCurrentProject, PassCode_2021.CreateEmptyProject);
addMenus(
analyses = new AnalysesMenu(),
transformations = new TransformationsMenu(),
new GlobalCleaningMenu(),
new VisualiserSettingsMenu()
);
add(components = new MenuBarButton() {
{
setToolTipText("Компоненты");
setIcon("/icons/ComponentsActual.png");
addActionListener(e -> {
if (PerformanceAnalyzer.isActive) {
UI.Info("Перед работой с компонентами закройте анализатор производительности!");
} else {
Pass_2021.passes.get(PassCode_2021.GetComponentsActualVersions).Do();
Global.RefreshUpdatesStatus();
UI.ShowComponentsWindow();
}
});
}
});
add(new MenuBarButton() {
{
setIcon("/icons/Comparsion.png");
setToolTipText("Анализатор статистик");
addActionListener(e -> {
Global.performanceAnalyzer.Start();
});
}
});
addPasses(PassCode_2021.ShowInstruction);
//-
setPreferredSize(new Dimension(0, 30));
//---
/*
add(new MenuBarButton() {
{
setIcon("/icons/Apply.png");
setToolTipText("Test");
addActionListener(e -> {
Current.getProject().hasSubdirectories();
});
}
});
*/
//---
ShowProject(false);
}
public void ShowUpdatesIcon() {
components.setIcon(
(Global.need_update > 0) || (Global.bad_state > 0)
? "/icons/ComponentsNeedUpdate.gif"
: (Global.need_publish > 0 ? "/icons/ComponentsNeedPublish_2023.gif" : "/icons/ComponentsActual.png"));
}
public void ShowProject(boolean flag) {
analyses.setEnabled(flag);
transformations.setEnabled(flag);
Pass_2021[] cleaningPasses = new Pass_2021[]{
Pass_2021.passes.get(PassCode_2021.DropAnalyses),
Pass_2021.passes.get(PassCode_2021.DropSavedArrays),
Pass_2021.passes.get(PassCode_2021.CleanAnalyses),
Pass_2021.passes.get(PassCode_2021.DeleteDebugResults),
Pass_2021.passes.get(PassCode_2021.ResetCurrentProject)
};
for (Pass_2021 pass: cleaningPasses){
pass.setControlsEnabled(flag);
}
}
}

View File

@@ -0,0 +1,19 @@
package Common.UI.Menus_2023.MainMenuBar;
import Visual_DVM_2021.UI.Interface.CallbackWindow;
import Visual_DVM_2021.UI.Interface.ProjectWindow;
import Visual_DVM_2021.UI.Interface.TestingWindow;
public interface MainWindow {
void Show();
void ShowProject();
void ShowNoProject();
ProjectWindow getProjectWindow();
CallbackWindow getCallbackWindow();
//-
void ShowUpdatesIcon();
void FocusProject();
void FocusCallback();
void FocusTesting();
TestingWindow getTestingWindow();
void ShowTestingTab();
void HideTestingTab();
}

View File

@@ -0,0 +1,36 @@
package Common.UI.Menus_2023.MainMenuBar;
import Common.UI.Menus.PassesSubMenu;
import Common.UI.Menus_2023.VisualiserMenu;
import Repository.Component.Sapfor.Sapfor;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
public class TransformationsMenu extends VisualiserMenu {
public TransformationsMenu() {
super("Преобразования", "/icons/Transformations.png");
add(new PassesSubMenu("Циклы", "/icons/Menu/Loops.png",
Sapfor.getLoopsTransformationsCodes()));
addSeparator();
add(new PassesSubMenu("Приватные переменные", "/icons/Menu/Privates.png",
Sapfor.getPrivatesTransformationsCodes()));
addSeparator();
add(new PassesSubMenu("Процедуры", "/icons/Menu/Functions.png",
Sapfor.getProceduresTransformationsCodes()));
addSeparator();
add(new PassesSubMenu("DVM директивы", "/icons/Menu/Dvm.png",
Sapfor.getDVMTransformationsCodes()));
addSeparator();
add(new PassesSubMenu("Интервалы", "/icons/Menu/Intervals.png",
Sapfor.getIntervalsTransformationsCodes()
));
addSeparator();
add(new PassesSubMenu("Области распараллеливания", "/icons/Menu/Regions.png",
Sapfor.getRegionsTransformationsCodes()
));
addSeparator();
add(new PassesSubMenu("Предобработка проекта", "/icons/Menu/Preprocessing.png",
Sapfor.getPreparationTransformationsCodes()
)
);
add(Pass_2021.passes.get(PassCode_2021.SPF_SharedMemoryParallelization).createMenuItem());
}
}

View File

@@ -0,0 +1,47 @@
package Common.UI.Menus_2023.MainMenuBar;
import Common.Global;
import Common.UI.Menus.PropertiesSubmenu;
import Common.UI.Menus_2023.SettingsSubmenu;
import Common.UI.Menus_2023.VisualiserMenu;
import GlobalData.Settings.SettingName;
public class VisualiserSettingsMenu extends VisualiserMenu {
public VisualiserSettingsMenu() {
super("Настройки визуализатора", "/icons/Settings.png");
//-
add(new PropertiesSubmenu("Подтверждения и уведомления", null,
"ShowPassesDone",
"ConfirmPassesStart",
"FocusPassesResult"
));
add(new SettingsSubmenu("Компактность отображения", null,
SettingName.SmallScreen,
SettingName.ShowFullTabsNames,
SettingName.ShowFullArraysDeclarations,
SettingName.FastAccessPassesCount,
SettingName.LastOpenedProjectsCount
));
if (Global.isWindows) {
add(new SettingsSubmenu("Компиляция на локальной машине", null,
SettingName.LocalMakePathWindows,
SettingName.Kernels
));
} else {
add(new SettingsSubmenu("Компиляция на локальной машине", null,
SettingName.Kernels
));
}
add(new SettingsSubmenu("Синхронизация", null,
SettingName.AutoBugReportsLoad,
SettingName.AutoTestsLoad
));
add(new SettingsSubmenu("Сравнение", null,
SettingName.ExtensionsOn,
SettingName.RegisterOn,
SettingName.SpacesOn,
SettingName.EmptyLinesOn,
SettingName.FortranWrapsOn,
SettingName.ComparsionDiffMergeOn
));
add(Global.db.settings.get(SettingName.Workspace).getMenuItem());
}
}

View File

@@ -0,0 +1,14 @@
package Common.UI.Menus_2023.MakefilesMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class MakefilesMenuBar extends DataMenuBar {
public MakefilesMenuBar() {
super("мейкфайлы",
PassCode_2021.Compile,
PassCode_2021.AddMakefile,
PassCode_2021.EditMakefile,
PassCode_2021.DeleteMakefile);
addSeparator();
addPasses(PassCode_2021.ShowMakefilePreview, PassCode_2021.EditProjectCompilationMaxtime);
}
}

View File

@@ -0,0 +1,32 @@
package Common.UI.Menus_2023;
import Common.Current;
import Common.UI.Themes.VisualiserFonts;
import Common.Utils.Utils;
import javax.swing.*;
import java.awt.*;
//https://java-online.ru/swing-jbutton.xhtml
public class MenuBarButton extends JButton {
public MenuBarButton() {
super();
setFont(Current.getTheme().Fonts.get(VisualiserFonts.Menu));
//
setBorderPainted(false);
setContentAreaFilled(false);
setOpaque(false);
//setFocusPainted(false);
//-
setMinimumSize(new Dimension(38, 30)); //иначе сужаются вертикально.
}
@Override
protected void paintComponent(Graphics g) {
if (getModel().isPressed()) {
g.setColor(new Color(163, 184, 204));
g.fillRect(0, 0, getWidth(), getHeight());
}
super.paintComponent(g);
}
public void setIcon(String icon_path) {
setIcon(Utils.getIcon(icon_path));
}
}

View File

@@ -0,0 +1,8 @@
package Common.UI.Menus_2023.ModulesMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class ModulesMenuBar extends DataMenuBar {
public ModulesMenuBar() {
super("языковые модули", PassCode_2021.EditModule);
}
}

View File

@@ -0,0 +1,25 @@
package Common.UI.Menus_2023;
import Visual_DVM_2021.Passes.Pass_2021;
import java.awt.*;
public class PassButton extends MenuBarButton implements PassControl {
public PassButton(Pass_2021 pass, boolean tab) {
setText(pass.getButtonText());
setToolTipText(pass.getDescription());
if (pass.getIconPath() != null) {
if (tab) {
setIcon(pass.getTabIcon());
setPreferredSize(new Dimension(18,18));
setMaximumSize(new Dimension(18,18));
setMinimumSize(new Dimension(18,18));
}
else
setIcon(pass.getIconPath());
}
addActionListener(pass.getControlAction());
pass.controls.add(this);
}
public PassButton(Pass_2021 pass) {
this(pass, false);
}
}

View File

@@ -0,0 +1,7 @@
package Common.UI.Menus_2023;
public interface PassControl {
void setIcon(String icon_path);
void setEnabled(boolean flag);
void setVisible(boolean flag);
void setToolTipText(String text);
}

View File

@@ -0,0 +1,17 @@
package Common.UI.Menus_2023;
import Common.UI.Menus.VisualiserMenuItem;
import Common.Utils.Utils;
import Visual_DVM_2021.Passes.Pass_2021;
public class PassMenuItem extends VisualiserMenuItem implements PassControl {
@Override
public void setIcon(String icon_path) {
setIcon(Utils.getIcon(icon_path));
}
public PassMenuItem(Pass_2021 pass) {
setText(pass.getDescription());
setToolTipText(pass.getDescription());
if (pass.getIconPath() != null) setIcon(pass.getIconPath());
addActionListener(pass.getControlAction());
pass.controls.add(this);
}
}

View File

@@ -0,0 +1,7 @@
package Common.UI.Menus_2023.ProjectMenuBar;
import Common.UI.Menus_2023.VisualiserMenu;
public class FilesOperationsMenu extends VisualiserMenu {
public FilesOperationsMenu() {
super("Массовые операции над файлами","/icons/MassFiles.png" );
}
}

View File

@@ -0,0 +1,33 @@
package Common.UI.Menus_2023.ProjectMenuBar;
import Common.UI.Menus_2023.MenuBarButton;
import Common.UI.Menus_2023.VisualiserMenuBar;
import Common.UI.UI;
import javax.swing.*;
import java.awt.*;
public class ProjectMenuBar extends VisualiserMenuBar {
public ProjectViewMenu projectViewMenu;
public ProjectMenuBar() {
addMenus(projectViewMenu = new ProjectViewMenu());
add(new JSeparator());
addMenus(
new ProjectSettingsMenu()
);
add(new MenuBarButton() {
{
setToolTipText("Профили");
setIcon("/icons/Profiles.png");
addActionListener(e -> {
UI.ShowProfilesWindow();
});
}
});
}
public ProjectViewMenu getProjectViewMenu() {
return projectViewMenu;
}
@Override
public void setSizeLimits() {
setPreferredSize(new Dimension(0, 32));
}
}

View File

@@ -0,0 +1,73 @@
package Common.UI.Menus_2023.ProjectMenuBar;
import Common.Current;
import Common.Global;
import Common.UI.Menus_2023.LanguagesSubmenu;
import Common.UI.Menus_2023.SettingsSubmenu;
import Common.UI.Menus_2023.StylesSubmenu;
import Common.UI.Menus_2023.VisualiserMenu;
import GlobalData.Settings.SettingName;
import ProjectData.Files.LanguageStyle;
import ProjectData.LanguageName;
import javax.swing.*;
public class ProjectSettingsMenu extends VisualiserMenu {
JMenu mLanguage;
JMenu mStyle;
public ProjectSettingsMenu() {
super("Настройки проекта", "/icons/Settings.png");
add(mLanguage = new LanguagesSubmenu() {
@Override
public void action(LanguageName languageName) {
if (Current.getProject().UpdateLanguage(languageName)) {
Current.getSapfor().ResetAllAnalyses();
ShowLanguage();
}
}
});
ShowLanguage();
//--
add(mStyle = new StylesSubmenu() {
@Override
public void action(LanguageStyle languageStyle) {
if (Current.getProject().UpdateStyle(languageStyle))
ShowStyle();
}
});
ShowStyle();
addSeparator();
add(new SettingsSubmenu("Анализ", null,
SettingName.Precompilation,
SettingName.STATIC_SHADOW_ANALYSIS,
SettingName.KEEP_DVM_DIRECTIVES,
SettingName.IGNORE_IO_SAPFOR,
SettingName.MPI_PROGRAM,
SettingName.ANALYSIS_OPTIONS,
SettingName.PARALLELIZE_FREE_LOOPS
));
addSeparator();
add(new SettingsSubmenu("Построение системы интервалов", null,
SettingName.KEEP_LOOPS_CLOSE_NESTING,
SettingName.KEEP_GCOV
));
addSeparator();
add(new SettingsSubmenu("Построение версий", null,
SettingName.FREE_FORM,
SettingName.KEEP_SPF_DIRECTIVES,
SettingName.KEEP_SPF_DIRECTIVES_AMONG_TRANSFORMATIONS,
SettingName.OUTPUT_UPPER,
SettingName.MAX_SHADOW_WIDTH,
SettingName.DVMConvertationOptions,
SettingName.SaveModifications
));
addSeparator();
add(Global.db.settings.get(SettingName.TRANSLATE_MESSAGES).getMenuItem());
add(Global.db.settings.get(SettingName.DEBUG_PRINT_ON).getMenuItem());
add(Global.db.settings.get(SettingName.GCOVLimit).getMenuItem());
}
public void ShowLanguage() {
mLanguage.setText("Язык: " + Current.getProject().languageName.getDescription());
}
public void ShowStyle() {
mStyle.setText("Стиль: " + Current.getProject().style.getDescription());
}
}

View File

@@ -0,0 +1,34 @@
package Common.UI.Menus_2023.ProjectMenuBar;
import Common.Current;
import Common.UI.Menus_2023.VisualiserMenu;
import Common.UI.Themes.VisualiserFonts;
import Common.UI.UI;
import Common.Utils.Utils;
import ProjectData.ProjectView;
import javax.swing.*;
import java.util.LinkedHashMap;
public class ProjectViewMenu extends VisualiserMenu {
LinkedHashMap<ProjectView, JMenuItem> views;
public ProjectViewMenu() {
super("", "");
views = new LinkedHashMap<>();
for (ProjectView view : ProjectView.values()) {
JMenuItem m = new JMenuItem(view.getDescription()) {
{
setIcon(Utils.getIcon(view.getIcon()));
setFont(Current.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
addActionListener(e -> {
Current.set(Current.ProjectView, view);
UI.getMainWindow().getProjectWindow().ShowProjectView();
});
}
};
add(m);
views.put(view, m);
}
}
public void SelectView(ProjectView view){
views.get(view).doClick();
}
}

View File

@@ -0,0 +1,11 @@
package Common.UI.Menus_2023.RemoteSapforsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class RemoteSapforsMenuBar extends DataMenuBar {
public RemoteSapforsMenuBar() {
super("SAPFOR", PassCode_2021.InstallRemoteSapfor,
PassCode_2021.AddSapfor,
PassCode_2021.EditSapfor,
PassCode_2021.DeleteSapfor);
}
}

View File

@@ -0,0 +1,13 @@
package Common.UI.Menus_2023.RunConfigurationsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
import javax.swing.*;
public class RunConfigurationsMenuBar extends DataMenuBar {
public RunConfigurationsMenuBar() {
super("конфигурации запуска", PassCode_2021.Run,
PassCode_2021.AddRunConfiguration, PassCode_2021.EditRunConfiguration, PassCode_2021.DeleteRunConfiguration);
add(new JSeparator());
addPasses(PassCode_2021.EditProjectRunMaxtime);
}
}

View File

@@ -0,0 +1,12 @@
package Common.UI.Menus_2023.SapforConfigurationCommandsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class SapforConfigurationCommandsMenuBar extends DataMenuBar {
public SapforConfigurationCommandsMenuBar() {
super("команды",
PassCode_2021.PublishSapforConfigurationCommand,
PassCode_2021.EditSapforConfigurationCommand,
PassCode_2021.DeleteSapforConfigurationCommand
);
}
}

View File

@@ -0,0 +1,12 @@
package Common.UI.Menus_2023.SapforConfigurationsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class SapforConfigurationsMenuBar extends DataMenuBar {
public SapforConfigurationsMenuBar() {
super("конфигурации", PassCode_2021.StartSapforTests,
PassCode_2021.PublishSapforConfiguration,
PassCode_2021.EditSapforConfiguration,
PassCode_2021.DeleteSapforConfiguration
);
}
}

View File

@@ -0,0 +1,8 @@
package Common.UI.Menus_2023.SapforTasksMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class SapforTasksMenuBar extends DataMenuBar {
public SapforTasksMenuBar() {
super("задачи", PassCode_2021.OpenSapforTest);
}
}

View File

@@ -0,0 +1,8 @@
package Common.UI.Menus_2023.SapforTasksPackagesBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class SapforTasksPackagesBar extends DataMenuBar {
public SapforTasksPackagesBar() {
super("пакеты задач", PassCode_2021.DeleteSapforTasksPackage);
}
}

View File

@@ -0,0 +1,19 @@
package Common.UI.Menus_2023;
import Common.Current;
import Common.Global;
import Common.UI.Themes.VisualiserFonts;
import Common.Utils.Utils;
import GlobalData.Settings.SettingName;
import javax.swing.*;
public class SettingsSubmenu extends JMenu {
public SettingsSubmenu(String title, String icon, SettingName... settings) {
super(title);
if (icon != null)
setIcon(Utils.getIcon(icon));
setFont(Current.getTheme().Fonts.get(VisualiserFonts.Menu));
for (SettingName c : settings) {
add(Global.db.settings.get(c).getMenuItem());
}
}
}

View File

@@ -0,0 +1,41 @@
package Common.UI.Menus_2023;
import Common.UI.Menus.VisualiserMenuItem;
import Common.UI.UI;
import Common.Utils.Utils;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicMenuItemUI;
//неичезающий меню итем. нужен для настроек
//https://translated.turbopages.org/proxy_u/en-ru.ru.64537f6c-6460c460-8e74a1ab-74722d776562/https/tips4java.wordpress.com/2010/09/12/keeping-menus-open/
class StableItemUI extends BasicMenuItemUI {
public static ComponentUI createUI(JComponent c) {
return new StableItemUI();
}
@Override
protected void doClick(MenuSelectionManager msm) {
menuItem.doClick(0);
if (UI.last_menu_path != null)
MenuSelectionManager.defaultManager().setSelectedPath(UI.last_menu_path);
}
}
public class StableMenuItem extends VisualiserMenuItem {
{
getModel().addChangeListener(e -> {
if (getModel().isArmed() && isShowing())
UI.last_menu_path = MenuSelectionManager.defaultManager().getSelectedPath();
});
}
public StableMenuItem(String text) {
super(text);
setUI(new StableItemUI());
}
public StableMenuItem(String text, String icon_path) {
super(text);
setIcon(Utils.getIcon(icon_path));
setUI(new StableItemUI());
}
public StableMenuItem() {
setUI(new StableItemUI());
}
}

View File

@@ -0,0 +1,16 @@
package Common.UI.Menus_2023;
import Common.Utils.Utils;
import Visual_DVM_2021.Passes.Pass_2021;
public class StablePassMenuItem extends StableMenuItem implements PassControl {
@Override
public void setIcon(String icon_path) {
setIcon(Utils.getIcon(icon_path));
}
public StablePassMenuItem(Pass_2021 pass) {
setText(pass.getDescription());
setToolTipText(pass.getDescription());
if (pass.getIconPath() != null) setIcon(pass.getIconPath());
addActionListener(pass.getControlAction());
pass.controls.add(this);
}
}

View File

@@ -0,0 +1,25 @@
package Common.UI.Menus_2023;
import ProjectData.Files.LanguageStyle;
import javax.swing.*;
import java.awt.event.ActionEvent;
public abstract class StylesSubmenu extends VisualiserMenu {
public StylesSubmenu() {
this("Стиль");
}
public StylesSubmenu(String text) {
super(text, "/icons/Style.png", true);
for (LanguageStyle languageStyle : LanguageStyle.values()) {
JMenuItem m = new StableMenuItem(languageStyle.getDescription());
m.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
action(languageStyle);
}
});
add(m);
}
}
public abstract void action(LanguageStyle languageStyle);
}

View File

@@ -0,0 +1,13 @@
package Common.UI.Menus_2023.SubscribersMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class SubscribersMenuBar extends DataMenuBar {
public SubscribersMenuBar() {
super("Адресаты",
PassCode_2021.SaveBugReportExecutor,
PassCode_2021.SaveBugReportRecipients,
PassCode_2021.AddSubscriber,
PassCode_2021.EditSubscriber,
PassCode_2021.DeleteSubscriber);
}
}

View File

@@ -0,0 +1,51 @@
package Common.UI.Menus_2023.TasksPackagesMenuBar;
import Common.Current;
import Common.UI.Menus_2023.DataMenuBar;
import Common.UI.Menus_2023.MenuBarButton;
import Common.UI.Themes.VisualiserFonts;
import Common.UI.UI;
import Common.Utils.Utils;
import TestingSystem.TestingServer;
import Visual_DVM_2021.Passes.PassCode_2021;
import javax.swing.*;
import java.awt.*;
public class TasksPackagesMenuBar extends DataMenuBar {
JButton autorefreshButton;
JSpinner sCheckTime;
public TasksPackagesMenuBar() {
super("пакеты задач", PassCode_2021.SynchronizeTestsTasks, PassCode_2021.AbortSelectedPackages);
add(autorefreshButton = new MenuBarButton() {
{
setText("проверка раз в");
setToolTipText("автоматическое обновление состояния пакета задач");
Mark();
addActionListener(e -> {
TestingServer.checkTasks = !TestingServer.checkTasks;
TestingServer.switchTimer(TestingServer.checkTasks);
Mark();
});
}
public void Mark() {
setIcon(Utils.getIcon(TestingServer.checkTasks ? "/icons/Pick.png" : "/icons/NotPick.png"));
}
});
add(sCheckTime = new JSpinner());
sCheckTime.setPreferredSize(new Dimension(60, 26));
sCheckTime.setMaximumSize(new Dimension(60, 26));
sCheckTime.setModel(new SpinnerNumberModel(TestingServer.checkIntervalSecond, 10, 3600, 1));
UI.MakeSpinnerRapid(sCheckTime, e -> {
TestingServer.checkIntervalSecond = (int) sCheckTime.getValue();
if (TestingServer.checkTasks) TestingServer.ResetTimer();
});
add(new JLabel(" сек") {
{
setFont(Current.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
}
});
}
public void ShowAutorefresh() {
autorefreshButton.setIcon(Utils.getIcon(TestingServer.checkTasks ? "/icons/Pick.png" : "/icons/NotPick.png"));
}
}

View File

@@ -0,0 +1,22 @@
package Common.UI.Menus_2023.TestRunTasksMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
import javax.swing.*;
public class TestRunTasksMenuBar extends DataMenuBar {
JMenuBar filters= null;
public void DropFilters() {
if (filters != null) {
remove(filters);
filters = null;
}
revalidate();
repaint();
}
public void addFilters(JMenu cFilterMenu, JMenu rFilterMenu) {
filters= addMenus(cFilterMenu, rFilterMenu);
}
public TestRunTasksMenuBar() {
super("задачи", PassCode_2021.DownloadTaskTest);
}
}

View File

@@ -0,0 +1,12 @@
package Common.UI.Menus_2023.TestsMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class TestsMenuBar extends DataMenuBar {
public TestsMenuBar() {
super("тесты",
PassCode_2021.DownloadTest,
PassCode_2021.PublishTest,
PassCode_2021.EditTest,
PassCode_2021.DeleteSelectedTests);
}
}

View File

@@ -0,0 +1,26 @@
package Common.UI.Menus_2023;
import ProjectData.Files.FileType;
import javax.swing.*;
import java.awt.event.ActionEvent;
public abstract class TypesSubmenu extends VisualiserMenu {
public TypesSubmenu() {
this("Тип");
}
public TypesSubmenu(String text) {
super(text, "/icons/type.png", true);
for (FileType fileType : FileType.values()) {
if (fileType != FileType.forbidden) {
JMenuItem m = new StableMenuItem(fileType.getDescription());
m.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
action(fileType);
}
});
add(m);
}
}
}
public abstract void action(FileType fileType);
}

View File

@@ -0,0 +1,11 @@
package Common.UI.Menus_2023.UsersMenuBar;
import Common.UI.Menus_2023.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class UsersMenuBar extends DataMenuBar {
public UsersMenuBar() {
super("пользователи", PassCode_2021.AddUser,
PassCode_2021.EditUser,
PassCode_2021.InitialiseUser,
PassCode_2021.DeleteUser);
}
}

View File

@@ -0,0 +1,28 @@
package Common.UI.Menus_2023.VariantsMenuBar;
import Common.UI.Menus.VisualiserMenuItem;
import Common.UI.Menus_2023.DataMenuBar;
import Common.UI.Menus_2023.VisualiserMenu;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
public class VariantsMenuBar extends DataMenuBar {
public VariantsMenuBar() {
super("варианты");
addMenus(new VisualiserMenu("Отображение параллельных вариантов",
"/icons/ShowPassword.png") {
{
add(new VisualiserMenuItem("Все варианты") {
{
addActionListener(e -> Pass_2021.passes.get(PassCode_2021.GenerateParallelVariants).Do(true));
}
});
add(new VisualiserMenuItem("Минимальное покрытие вариантов") {
{
addActionListener(e -> Pass_2021.passes.get(PassCode_2021.GenerateParallelVariants).Do(false));
}
});
}
;
});
addPasses(PassCode_2021.PredictParallelVariants, PassCode_2021.CreateParallelVariants);
}
}

View File

@@ -0,0 +1,8 @@
package Common.UI.Menus_2023.VersionsMenuBar;
import Common.UI.Menus_2023.VisualiserMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class VersionsMenuBar extends VisualiserMenuBar {
public VersionsMenuBar(){
addPasses(PassCode_2021.CreateTestsGroupFromSelectedVersions);
}
}

View File

@@ -0,0 +1,21 @@
package Common.UI.Menus_2023;
import Common.Current;
import Common.UI.Themes.VisualiserFonts;
import Common.Utils.Utils;
import javax.swing.*;
import java.awt.*;
public class VisualiserMenu extends JMenu {
public VisualiserMenu(String text, String iconPath, boolean textVisible) {
setMinimumSize(new Dimension(38, 30)); //иначе сужаются вертикально.
setToolTipText(text);
if (textVisible)
setText(text);
setFont(Current.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
if (!iconPath.isEmpty())
setIcon(Utils.getIcon(iconPath));
}
public VisualiserMenu(String text, String iconPath) {
this(text, iconPath, false);
}
}

View File

@@ -0,0 +1,31 @@
package Common.UI.Menus_2023;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import java.awt.*;
//https://java-online.ru/swing-menu.xhtml
public class VisualiserMenuBar extends JToolBar {
public VisualiserMenuBar() {
setFloatable(false);
setSizeLimits();
}
public void addPasses(PassCode_2021... codes) {
//- кнопки. связать их с проходами. (!)
for (PassCode_2021 code : codes)
add(Pass_2021.passes.get(code).createButton());
}
public JMenuBar addMenus(JMenu... menus) {
JMenuBar bar = new JMenuBar() {
{
for (JMenu menu : menus)
add(menu);
}
};
add(bar);
return bar;
}
public void setSizeLimits() {
setPreferredSize(new Dimension(0, 30));
}
}