no message

This commit is contained in:
2024-10-09 22:01:19 +03:00
parent 63b7f7dfd2
commit 90b5abb70f
451 changed files with 1127 additions and 886 deletions

View File

@@ -0,0 +1,26 @@
package _VisualDVM.Visual.Controls;
import Common.Visual.Controls.MenuBarButton;
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,8 @@
package _VisualDVM.Visual.Controls;
public interface PassControl {
void setIcon(String icon_path);
void setEnabled(boolean flag);
void setVisible(boolean flag);
void setToolTipText(String text);
void setText(String text);
}

View File

@@ -0,0 +1,13 @@
package _VisualDVM.Visual.Interface;
public interface AnalysisWindow extends FormWithSplitters, VisualizerForm{
void ShowProjectMaxDim();
void ShowNoProjectMaxDim();
void ShowMetrics();
void ShowNoMetrics();
void ShowRegions();
void ShowNoRegions();
void ShowLoopsCount();
void ShowFunctionsCount();
void ShowArraysCount();
}

View File

@@ -0,0 +1,5 @@
package _VisualDVM.Visual.Interface;
public interface ArraysWindow extends VisualizerForm, FormWithSplitters{
void ShowArrays();
void ShowNoArrays();
}

View File

@@ -0,0 +1,28 @@
package _VisualDVM.Visual.Interface;
public interface CallbackWindow extends VisualizerForm {
void ShowAccount();
void ShowBugReports();
void ShowNoBugReports();
void ShowSubscribers();
void ShowNoSubscribers();
void ShowCurrentBugReport();
void ShowNoCurrentBugReport();
void ShowSubscription();
//-
default void ShowAll() {
ShowAccount();
ShowSubscription();
ShowBugReports();
ShowSubscribers();
}
String getBugReportDescriptionText();
String getBugReportDescriptionAdditionText();
String getBugReportCommentText();
String getBugReportCommentAdditionText();
void ClearBugReportDescriptionAdditionText();
void ClearBugReportCommentAdditionText();
void FocusRecipients();
void SwitchScreen(boolean small);
void setUserRights();
void setAdminRights();
}

View File

@@ -0,0 +1,6 @@
package _VisualDVM.Visual.Interface;
import javax.swing.*;
public interface CommentInterface extends VisualizerForm, FormWithSplitters {
void setEditorScroll(JScrollPane scroll_in);
void setAdditionScroll(JScrollPane scroll_in);
}

View File

@@ -0,0 +1,13 @@
package _VisualDVM.Visual.Interface;
import javax.swing.*;
public interface DebugWindow {
JPanel getContent();
void ShowAll();
//--
void DropRunTasksComparison();
void DropCompilationTasksComparison();
void ShowLastCompilationTask();
void ShowCurrentRunTask();
void ShowLastRunTask();
void ShowNoCurrentRunTask();
}

View File

@@ -0,0 +1,6 @@
package _VisualDVM.Visual.Interface;
import javax.swing.*;
public interface DescriptionInterface extends VisualizerForm,FormWithSplitters {
void setEditorScroll(JScrollPane scroll_in);
void setAdditionScroll(JScrollPane scroll_in);
}

View File

@@ -0,0 +1,67 @@
package _VisualDVM.Visual.Interface;
public interface FileWindow extends VisualizerForm{
void ShowText();
void ShowLanguage();
void ShowType();
void ShowStyle();
default void ShowProperties() {
ShowLanguage();
ShowType();
ShowStyle();
}
void ShowMessages();
void ShowNoMessages();
void ShowLoops();
void ShowNoLoops();
void ShowGCOV();
void ShowNoGCOV();
void ShowFunctions();
void ShowNoFunctions();
void ShowArrays();
void ShowNoArrays();
void ShowCaretInfo();
void FocusMessagesPriority();
void ShowFirstError();
//-
void ShowCompilationOutput();
void ShowNoCompilationOutput();
void ShowRunOutput();
void ShowNoRunOutput();
void ShowGCOVLog();
void ShowNoGCOVLog();
void FocusGCOVLog();
SPFEditorInterface getEditor();
default void ShowAllAnalyses() {
ShowLoops();
ShowFunctions();
ShowArrays();
ShowGCOV();
ShowCompilationOutput();
ShowRunOutput();
}
default void ShowNoAnalyses() {
ShowNoLoops();
ShowNoFunctions();
ShowNoArrays();
ShowNoGCOV();
ShowNoCompilationOutput();
ShowNoRunOutput();
}
void FocusLoops();
void FocusFunctions();
void FocusArrays();
void RefreshTabsNames();
void FocusCompilationOut();
void FocusCompilationErrors();
//--
void ShowWarningsCount();
void ShowErrorsCount();
void ShowNotesCount();
void ShowRecommendationsCount();
//--
void CollapseGraphs();
void ExpandGraphs();
//--
void CollapseMessages();
void ExpandMessages();
}

View File

@@ -0,0 +1,10 @@
package _VisualDVM.Visual.Interface;
import Common.Utils.CommonUtils;
public interface FormWithSplitters {
default void LoadSplitters() {
CommonUtils.db.splitters.Load(this);
}
default void SaveSplitters() {
CommonUtils.db.splitters.Save(this);
}
}

View File

@@ -0,0 +1,11 @@
package _VisualDVM.Visual.Interface;
import ProjectData.SapforData.Functions.UI.Graph.FunctionsGraphForm;
import javafx.util.Pair;
public interface FunctionsWindow extends VisualizerForm, FormWithSplitters {
void ShowFunctions();
void ShowNoFunctions();
void ShowCurrentFunction();
void ShowNoCurrentFunction();
Pair<Integer, Integer> getFunctionsGraphPanelSizes();
FunctionsGraphForm getFunctionsGraphWindow();
}

View File

@@ -0,0 +1,83 @@
package _VisualDVM.Visual.Interface;
import Common.Visual.Trees.TreeForm;
import _VisualDVM.Visual.UI;
public interface ProjectWindow {
//-
ArraysWindow getArraysWindow();
FunctionsWindow getFunctionsWindow();
AnalysisWindow getAnalysisWindow();
//-
void RefreshProjectFiles();
void ShowSelectedDirectory();
void ShowSelectedFile();
void ShowNoSelectedFile();
void ShowProjectSapforLog();
void ShowIncludes();
void ShowNoIncludes();
void ShowFunctions();
void ShowNoFunctions();
void RefreshProjectTreeAndMessages();
TreeForm getFilesTreeForm();
//-
void SwitchScreen(boolean small);
void ShowProjectView();
//-
default void ShowAllAnalyses() {
ShowProjectSapforLog();
ShowIncludes();
ShowFunctions();
getArraysWindow().ShowArrays();
//------------------------------>>
UI.getVersionsWindow().getVariantsWindow().ShowVariantsFilterButtons();
UI.getVersionsWindow().getVariantsWindow().ShowProjectDistribution();
UI.getVersionsWindow().getVariantsWindow().ShowVariantsFilter();
UI.getVersionsWindow().getVariantsWindow().ShowTotalVariantsCount();
UI.getVersionsWindow().getVariantsWindow().ShowFilteredVariantsCount();
UI.getVersionsWindow().getVariantsWindow().ShowCheckedVariantsCount();
//----------------------------->>
getAnalysisWindow().ShowMetrics();
getAnalysisWindow().ShowLoopsCount();
getAnalysisWindow().ShowFunctionsCount();
getAnalysisWindow().ShowArraysCount();
getAnalysisWindow().ShowRegions();
getAnalysisWindow().ShowProjectMaxDim();
}
default void ShowNoAnalyses() {
ShowNoIncludes();
ShowNoFunctions();
getFunctionsWindow().ShowNoCurrentFunction();
getArraysWindow().ShowNoArrays();
UI.getVersionsWindow().getVariantsWindow().ShowNoProjectDistribution();
UI.getVersionsWindow().getVariantsWindow().ShowNoVariants();
UI.getVersionsWindow().getVariantsWindow().ShowNoVariantsFilter();
UI.getVersionsWindow().getVariantsWindow().ShowNoTotalVariantsCount();
UI.getVersionsWindow().getVariantsWindow().ShowNoFilteredVariantsCount();
UI.getVersionsWindow().getVariantsWindow().ShowNoCheckedVariantsCount();
getAnalysisWindow().ShowNoMetrics();
getAnalysisWindow().ShowNoRegions();
getAnalysisWindow().ShowLoopsCount();
getAnalysisWindow().ShowFunctionsCount();
getAnalysisWindow().ShowArraysCount();
getAnalysisWindow().ShowNoProjectMaxDim();
}
//---
void ShowFile();
void ShowNoFile();
//---
void GotoFile(String fileName, int line, boolean focus);
void FocusFile();
void FocusFileTabs();
//-
void FocusDependencies();
void FocusArrays();
void FocusFunctions();
void FocusAnalysis();
void FocusHierarchy();
void FocusPoints();
//-
void RefreshTabsNames();
void FocusVersions();
//--
void CollapseProjectTrees();
void ExpandProjectTrees();
}

View File

@@ -0,0 +1,16 @@
package _VisualDVM.Visual.Interface;
public interface SPFEditorInterface {
//-----------------------------------
void ClearHighlights();
//---------------->>
void ClearLoopsHighLights();
void ClearGOCVHighlights();
//----------------->>
void HighlightLoops();
void HighlightGCOV();
//------------------------------------
void gotoLine(int num);
int getCurrentLine();
int getCaretPosition();
String getText();
}

View File

@@ -0,0 +1,7 @@
package _VisualDVM.Visual.Interface;
public interface ScenariosWindow extends FormWithSplitters, VisualizerForm{
void ShowAll();
void FocusSapforTasksPackages();
void ShowCurrentSapforTasksPackage();
void ShowNoSapforTasksPackage();
}

View File

@@ -0,0 +1,4 @@
package _VisualDVM.Visual.Interface;
public interface StatisticsWindow extends VisualizerForm{
void ShowAll();
}

View File

@@ -0,0 +1,37 @@
package _VisualDVM.Visual.Interface;
import TestingSystem.DVM.DVMPackage.DVMPackage;
import TestingSystem.DVM.DVMTasks.DVMRunTask;
import TestingSystem.SAPFOR.SapforPackage.SapforPackage;
public interface TestingWindow extends VisualizerForm {
void ShowAll();
//-
void ShowCurrentTestsPackage();
void DropTestRunTasksComparison();
void DropSapforComparison();
void ShowCurrentTestRunTask();
void ShowNoTestRunTask();
//-
void RefreshTabsNames();
//-
void FocusTestingTasks();
void ShowCurrentSapforPackageVersionEtalon();
void ShowCurrentSapforPackageVersion();
void ShowNoSapforPackageVersionEtalon();
void ShowNoSapforPackageVersion();
void FocusSapforTesting();
void ShowCurrentCompiler();
void ShowCurrentServerSapfor();
void ShowNoServerSapfor();
void ShowCurrentDVMPackage();
void ShowNoCurrentDVMPackage();
//--
void ShowDVMRunTask(DVMRunTask master);
void ShowSapforPackage(SapforPackage master);
//-
void CompareDVMRunTasks(DVMRunTask master, DVMRunTask slave);
void CompareSapforPackages(SapforPackage master, SapforPackage slave);
//-
void ShowDVMPackage(DVMPackage master);
void CollapseCredentials();
void ExpandCredentials();
}

View File

@@ -0,0 +1,6 @@
package _VisualDVM.Visual.Interface;
import javax.swing.*;
public interface TestsWindow {
void ShowAll();
JPanel getContent();
}

View File

@@ -0,0 +1,17 @@
package _VisualDVM.Visual.Interface;
public interface VariantsWindow extends VisualizerForm, FormWithSplitters {
void ShowProjectDistribution();
void ShowNoProjectDistribution();
void ShowVariantsFilterButtons();
void ShowVariantsFilter();
void ShowNoVariantsFilter();
void ShowTotalVariantsCount();
void ShowFilteredVariantsCount();
void ShowCheckedVariantsCount();
void ShowNoCheckedVariantsCount();
void ShowNoFilteredVariantsCount();
void ShowNoTotalVariantsCount();
void ShowVariants();
void RefreshVariants();
void ShowNoVariants();
}

View File

@@ -0,0 +1,13 @@
package _VisualDVM.Visual.Interface;
import Common.Visual.Trees.TreeForm;
import ProjectData.Project.db_project_info;
public interface VersionsWindow extends VisualizerForm {
VariantsWindow getVariantsWindow();
void ShowProjectVariants();
void ShowNoProjectVariants();
void FocusDistribution();
void BlockVariants();
void UnblockVariants();
void RemoveVersionFromComparison(db_project_info version);
TreeForm getVersionsForm();
}

View File

@@ -0,0 +1,9 @@
package _VisualDVM.Visual.Interface;
import javax.swing.*;
public interface VisualizerForm {
//просто некая панель, на которой может быть все что угодно. монтируется на панель родителя,
//при условии что она BorderLayout
default JPanel getContent() {
return null;
}
}

View File

@@ -0,0 +1,32 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import _VisualDVM.Current;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class AttachementsMenu extends StyledPopupMenu {
JMenuItem mscreenshot;
JMenuItem mExplorer;
public AttachementsMenu() {
add(mscreenshot = Pass_2021.passes.get(PassCode_2021.MakeScreenShot).createMenuItem());
addSeparator();
mExplorer = new VisualiserMenuItem("Открыть вложения в проводнике...", "/icons/Explorer.png");
mExplorer.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Desktop.getDesktop().open(Current.getProject().getAttachmentsDirectory());
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
});
add(mExplorer);
}
}

View File

@@ -0,0 +1,56 @@
package _VisualDVM.Visual.Menus.CredentialsBar;
import _VisualDVM.Current;
import Common.Visual.Controls.MenuBarButton;
import _VisualDVM.Visual.Menus.VisualiserMenuBar;
import Common.Visual.Fonts.VisualiserFonts;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CredentialsBar extends VisualiserMenuBar {
public MenuBarButton MachineButton;
public MenuBarButton UserButton;
MenuBarButton bExpand;
public CredentialsBar(){
this.add(bExpand = new MenuBarButton() {
{
setIcon("/icons/ExpandDown.png");
setToolTipText("Развернуть");
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Pass_2021.passes.get(PassCode_2021.UpdateProperty).Do("collapseCredentials", false);
}
});
}
}, 0);
add(MachineButton = new MenuBarButton() {
{
setIcon("/icons/Machine.png");
setFont(VisualiserFonts.TreeBold);
setToolTipText("Текущая машина");
}
});
//--
add(UserButton = new MenuBarButton() {
{
setIcon("/icons/User.png");
setFont(VisualiserFonts.TreeBold);
setToolTipText("Текущий пользователь");
}
});
}
public void ShowMachine(){
MachineButton.setText(Current.getMachine().getURL());
}
public void ShowUser(){
UserButton.setText(Current.getUser().login);
}
public void ShowNoMachine(){
MachineButton.setText("?");
}
public void ShowNoUser(){
UserButton.setText("?");
}
}

View File

@@ -0,0 +1,50 @@
package _VisualDVM.Visual.Menus.FastAccessMenuBar;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import _VisualDVM.Visual.Menus.VisualiserMenuBar;
import GlobalData.GlobalDatabase;
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() {
CommonUI.Clear(this);
int i = 1;
for (Pass_2021 pass : Pass_2021.FAPasses) {
if (pass.stats.HasUsages()) {
showPass(pass);
++i;
if (i > (((GlobalDatabase)CommonUtils.db).settings.get(SettingName.FastAccessPassesCount).toInt32())) break;
}
}
}
public void Drop(){
CommonUI.Clear(this);
}
}

View File

@@ -0,0 +1,84 @@
package _VisualDVM.Visual.Menus.FileMenuBar;
import Common.Visual.Controls.MenuBarButton;
import _VisualDVM.Visual.Menus.VisualiserMenuBar;
import _VisualDVM.Visual.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 _VisualDVM.Visual.Menus.FileMenuBar;
import _VisualDVM.Current;
import _VisualDVM.Visual.Menus.LanguagesSubmenu;
import _VisualDVM.Visual.Menus.StylesSubmenu;
import _VisualDVM.Visual.Menus.TypesSubmenu;
import _VisualDVM.Visual.Menus.VisualiserMenu;
import _VisualDVM.Visual.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,26 @@
package _VisualDVM.Visual.Menus;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import _VisualDVM.Current;
import ProjectData.Files.LanguageStyle;
import javax.swing.*;
import java.awt.event.ActionEvent;
public class FileStyleMenu extends StyledPopupMenu {
public FileStyleMenu() {
for (LanguageStyle s : LanguageStyle.values()) {
JMenuItem m = new VisualiserMenuItem(s.getDescription());
m.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (Current.getFile().UpdateStyle(s)) {
Current.getSapfor().ResetAllAnalyses();
Current.getFile().form.ShowStyle();
}
}
});
add(m);
}
}
}

View File

@@ -0,0 +1,37 @@
package _VisualDVM.Visual.Menus;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import Common.Visual.Trees.StyledTree;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
public class GraphMenu<T extends StyledTree> extends StyledPopupMenu {
public T tree;
public GraphMenu(T tree_in, String branches_name) {
tree = tree_in;
JMenuItem m = null;
m = new VisualiserMenuItem("Свернуть все " + branches_name);
m.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
tree.CollapseAll();
}
});
add(m);
m = new VisualiserMenuItem("Развернуть все " + branches_name);
m.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
tree.ExpandAll();
}
});
add(m);
}
public GraphMenu(T tree) {
this(tree, tree.getBranchesName());
}
public void Show(MouseEvent mouseEvent) {
show(tree, mouseEvent.getX(), mouseEvent.getY());
}
}

View File

@@ -0,0 +1,34 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
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(CommonUtils.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,344 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.TextEditorMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import _VisualDVM.Current;
import _VisualDVM.Visual.Editor.CaretInfo;
import _VisualDVM.Utils;
import ProjectData.Files.DBProjectFile;
import ProjectData.Files.UI.Editor.SPFEditor;
import ProjectData.SapforData.Functions.FuncCall;
import ProjectData.SapforData.Functions.FuncInfo;
import ProjectData.SapforData.Functions.FunctionType;
import ProjectData.SapforData.Loops.Loop;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MainEditorMenu extends TextEditorMenu {
FuncCall call = null;
FuncInfo decl = null;
Loop loop = null;
DBProjectFile header = null;
//------------------
JMenuItem m_comment;
JMenuItem m_uncomment;
JMenuItem m_inline;
JMenuItem m_add_lines_to_region;
JMenuItem m_remove_lines_from_region;
JMenuItem m_loop_union;
JMenuItem m_undo;
JMenuItem m_gotoFunction;
JMenuItem m_gotoHeader;
//-----------------
public MainEditorMenu(RSyntaxTextArea editor_in) {
super(editor_in);
addSeparator();
m_gotoHeader = new VisualiserMenuItem("Перейти к заголовочному файлу", "/icons/Transformations/SPF_InsertIncludesPass.png");
m_gotoHeader.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Pass_2021.passes.get(PassCode_2021.OpenCurrentFile).Do(header);
}
});
add(m_gotoHeader);
addSeparator();
m_gotoFunction = new VisualiserMenuItem("Перейти к объявлению процедуры", "/icons/versions/currentVersion.png");
m_gotoFunction.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
decl.Show(true);
}
});
add(m_gotoFunction);
m_inline = new VisualiserMenuItem("Подставить вызов процедуры", "/icons/Transformations/SPF_InlineProcedures.png");
m_inline.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Pass_2021.passes.get(PassCode_2021.SPF_InlineProcedure).Do(call);
}
});
add(m_inline);
addSeparator();
m_loop_union = new VisualiserMenuItem("Объединить цикл со следующим", "/icons/Transformations/SPF_LoopUnion.png");
m_loop_union.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Pass_2021.passes.get(PassCode_2021.SPF_LoopUnionCurrent).Do();
}
});
add(m_loop_union);
m_add_lines_to_region = new VisualiserMenuItem("Добавить строки в область", "/icons/Menu/AddLines.png");
m_add_lines_to_region.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Pass_2021.passes.get(PassCode_2021.SPF_ChangeSpfIntervals).Do(
((RSyntaxTextArea) editor).getLineOfOffset(editor.getSelectionStart()) + 1,
((RSyntaxTextArea) editor).getLineOfOffset(editor.getSelectionEnd()) + 1,
1
);
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
});
add(m_add_lines_to_region);
m_remove_lines_from_region = new VisualiserMenuItem("Удалить строки из области", "/icons/Menu/RemoveLines.png");
m_remove_lines_from_region.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Pass_2021.passes.get(PassCode_2021.SPF_ChangeSpfIntervals).Do(
((RSyntaxTextArea) editor).getLineOfOffset(editor.getSelectionStart()) + 1,
((RSyntaxTextArea) editor).getLineOfOffset(editor.getSelectionEnd()) + 1,
0
);
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
});
add(m_remove_lines_from_region);
addSeparator();
m_comment = new VisualiserMenuItem("Закомментировать блок", "/icons/Editor/Comment.png");
m_comment.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String new_ = "";
String[] data = selectedText.split("\n");
int i = 0;
switch (Current.getFile().languageName) {
case fortran:
for (String line : data) {
if (!line.startsWith("!")) {
new_ += "!" + line;
} else new_ += line;
if (i < data.length - 1) new_ += "\n";
++i;
}
break;
case c:
case cpp:
for (String line : data) {
if (!line.startsWith("//")) {
new_ += "//" + line;
} else new_ += line;
if (i < data.length - 1) new_ += "\n";
++i;
}
break;
default:
new_ = selectedText;
break;
}
editor.replaceSelection(new_);
}
});
add(m_comment);
m_uncomment = new VisualiserMenuItem("Раскомментировать блок", "/icons/Editor/Uncomment.png");
m_uncomment.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String new_ = "";
String[] data = selectedText.split("\n");
int i = 0;
switch (Current.getFile().languageName) {
case fortran:
for (String line : data) {
if (line.startsWith("!")) {
new_ += line.substring(1);
} else new_ += line;
if (i < data.length - 1) new_ += "\n";
++i;
}
break;
case c:
case cpp:
for (String line : data) {
if (line.startsWith("//")) {
new_ += line.substring(2);
} else new_ += line;
if (i < data.length - 1) new_ += "\n";
++i;
}
break;
default:
new_ = selectedText;
break;
}
//todo. возможно, изменить концепцию на выделенные строки?
editor.replaceSelection(new_);
}
});
add(m_uncomment);
addSeparator();
m_undo = new VisualiserMenuItem("Отменить последнюю модификацию", "/icons/Menu/Undo.png");
m_undo.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Current.getSapfor().UpdateProjectFiles(false);
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
});
add(m_undo);
}
private void checkFunction() {
call = null;
decl = null;
//--
m_inline.setEnabled(false);
m_gotoFunction.setEnabled(false);
//--
m_inline.setToolTipText("");
m_gotoFunction.setToolTipText("");
//--
if (selectedText == null) {
m_inline.setText("Невозможно подставить вызов процедуры. Не выделено имя процедуры.");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры. Не выделено имя процедуры");
return;
}
if (selectedText.contains("\n")) {
m_inline.setText("Невозможно подставить вызов процедуры. Выделено несколько строк");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры. Выделено несколько строк.");
return;
}
if (!Utils.isFunctionName(selectedText)) {
String tip = "Имя процедуры может содержать только английские буквы, цифры и подчеркивания, и не может начинаться с цифры.";
//-
m_inline.setText("Невозможно подставить вызов процедуры " + CommonUtils.Brackets(selectedText) +
" . Выделено некорректное имя.");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры " + CommonUtils.Brackets(selectedText) +
" . Выделено некорректное имя.");
//-
m_inline.setToolTipText(tip);
m_gotoFunction.setToolTipText(tip);
return;
}
if (!Pass_2021.passes.get(PassCode_2021.SPF_GetGraphFunctions).isDone()) {
m_inline.setText("Невозможно подставить вызов процедуры " + CommonUtils.Brackets(selectedText) +
" . Выполните проход \"Граф процедур \".");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры " + CommonUtils.Brackets(selectedText) +
" . Выполните проход \"Граф процедур \"");
return;
}
if (Current.getSapfor().isIntrinsic(selectedText)) {
m_inline.setText("Невозможно подставить вызов процедуры " + CommonUtils.Brackets(selectedText) +
" . Процедура является стандартной.");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры " + CommonUtils.Brackets(selectedText) +
" . Процедура является стандартной.");
return;
}
call = Current.getFile().find_func_call(selectedText);
if (call == null) {
m_inline.setText("Невозможно подставить вызов процедуры " + CommonUtils.Brackets(selectedText) +
" . Вызов не найден в текущей строке.");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры " + CommonUtils.Brackets(selectedText) +
" . Объявление процедуры уже находится в текущей строке.");
return;
}
decl = Current.getProject().allFunctions.get(call.funcName);
if (decl.type.equals(FunctionType.NotFound)) {
m_inline.setText("Невозможно подставить вызов процедуры " + CommonUtils.Brackets(selectedText) +
" . Объявление процедуры не найдено в проекте.");
m_gotoFunction.setText("Невозможно перейти к объявлению процедуры " + CommonUtils.Brackets(selectedText) +
" . Объявление процедуры не найдено в проекте.");
return;
}
//---
m_inline.setEnabled(true);
m_gotoFunction.setEnabled(true);
m_inline.setText("Подставить вызов процедуры " + CommonUtils.Brackets(selectedText));
m_gotoFunction.setText("Перейти к объявлению процедуры " + CommonUtils.Brackets(selectedText));
//--
}
private void checkHeader() {
header = null;
m_gotoHeader.setEnabled(false);
//--
CaretInfo caretInfo = ((SPFEditor) editor).getCaretInfo();
if (caretInfo != null) {
String header_ = Utils.extractHeaderName(caretInfo.current_line);
if (header_ == null) {
m_gotoHeader.setText("Невозможно перейти к заголовочному файлу. В текущей строке не найдено включений.");
return;
}
if (!Pass_2021.passes.get(PassCode_2021.SPF_GetIncludeDependencies).isDone()) {
m_gotoHeader.setText("Невозможно перейти к заголовочному файлу. Выполните проход \"Поиск зависимостей по включению\"");
return;
}
if (!Current.getFile().relativeHeaders.containsKey(header_)) {
m_gotoHeader.setText("Невозможно перейти к заголовочному файлу " + CommonUtils.Brackets(header_) + " . Файл не найден среди включений текущего файла.");
return;
}
header = Current.getFile().relativeHeaders.get(header_);
m_gotoHeader.setText("Переход к заголовочному файлу " + CommonUtils.Brackets(header_));
m_gotoHeader.setEnabled(true);
}
}
private void checkLoop() {
loop = null;
m_loop_union.setEnabled(false);
if (!Pass_2021.passes.get(PassCode_2021.SPF_GetGraphLoops).isDone()) {
m_loop_union.setText("Невозможно объединить цикл в текущей строке со следующим. " +
"Выполните проход \"Граф циклов\"");
return;
}
loop = Current.getFile().find_current_loop();
if (loop == null) {
m_loop_union.setText("Невозможно объединить цикл в текущей строке со следующим. Не найдено циклов в текущей строке.");
return;
}
m_loop_union.setEnabled(true);
m_loop_union.setText("Объединить цикл в строке " + CommonUtils.Brackets(loop.line) + " со следующим");
}
@Override
public void CheckElementsVisibility() {
super.CheckElementsVisibility();
m_strike.setVisible(false);
m_unstrike.setVisible(false);
checkFunction();
checkHeader();
checkLoop();
if (selectedText == null) {
m_comment.setEnabled(false);
m_uncomment.setEnabled(false);
m_add_lines_to_region.setEnabled(false);
m_remove_lines_from_region.setEnabled(false);
m_comment.setText("Невозможно закомментировать блок. Не выделено ни одной строки.");
m_uncomment.setText("Невозможно раскомментировать блок. Не выделено ни одной строки.");
m_add_lines_to_region.setText("Невозможно добавить строки в область. Не выделено ни одной строки.");
m_remove_lines_from_region.setText("Невозможно удалить строки из области. Не выделено ни одной строки.");
} else {
m_comment.setEnabled(true);
m_uncomment.setEnabled(true);
m_add_lines_to_region.setEnabled(true);
m_remove_lines_from_region.setEnabled(true);
m_comment.setText("Закомментировать блок");
m_uncomment.setText("Раскомментировать блок");
m_add_lines_to_region.setText("Добавить строки в область");
m_remove_lines_from_region.setText("Удалить строки из области");
}
if (Current.getSapfor().OldFiles.isEmpty()) {
m_undo.setEnabled(false);
m_undo.setText("Невозможно отменить последнюю модификацию. Модификации отсутствуют.");
} else {
m_undo.setEnabled(true);
m_undo.setText("Отменить последнюю модификацию.");
}
}
}

View File

@@ -0,0 +1,14 @@
package _VisualDVM.Visual.Menus.MainMenuBar;
import _VisualDVM.Visual.Menus.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 _VisualDVM.Visual.Menus.MainMenuBar;
import _VisualDVM.Visual.Menus.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,49 @@
package _VisualDVM.Visual.Menus.MainMenuBar;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.VisualiserMenuItem;
import _VisualDVM.Visual.Menus.VisualiserMenu;
import GlobalData.DBLastProject.DBLastProject;
import GlobalData.GlobalDatabase;
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 = ((GlobalDatabase)CommonUtils.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 > (((GlobalDatabase)CommonUtils.db).settings.get(SettingName.LastOpenedProjectsCount).toInt32())) break;
}
}
}
@Override
public void menuDeselected(MenuEvent e) {
}
@Override
public void menuCanceled(MenuEvent e) {
}
});
}
}

View File

@@ -0,0 +1,90 @@
package _VisualDVM.Visual.Menus.MainMenuBar;
import Common.Visual.CommonUI;
import _VisualDVM.Global;
import Common.Visual.Controls.MenuBarButton;
import _VisualDVM.Visual.Menus.VisualiserMenuBar;
import _VisualDVM.Visual.Menus.MainMenuBar.VisualiserSettingsMenu.VisualiserSettingsMenu;
import _VisualDVM.Visual.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) {
CommonUI.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 -> {
Pass_2021.passes.get(PassCode_2021.TestPass).Do();
});
}
});
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,20 @@
package _VisualDVM.Visual.Menus.MainMenuBar;
import _VisualDVM.Visual.Interface.*;
public interface MainWindow {
void Show();
void ShowProject();
void ShowNoProject();
ProjectWindow getProjectWindow();
CallbackWindow getCallbackWindow();
TestsWindow getTestsWindow();
TestingWindow getTestingWindow();
//-
void ShowUpdatesIcon();
void FocusProject();
void FocusCallback();
void FocusTests();
void FocusTesting();
void SwitchTestingTabs(boolean flag);
//-
void ShowCheckedTestsCount();
}

View File

@@ -0,0 +1,37 @@
package _VisualDVM.Visual.Menus.MainMenuBar;
import _VisualDVM.Visual.Menus.PassesSubMenu;
import _VisualDVM.Visual.Menus.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("Директивы", "/icons/Directives.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(Pass_2021.passes.get(PassCode_2021.SPF_SharedMemoryParallelization).createMenuItem());
addSeparator();
add(new PassesSubMenu("Предобработка проекта", "/icons/Menu/Preprocessing.png",
Sapfor.getPreparationTransformationsCodes()
)
);
}
}

View File

@@ -0,0 +1,25 @@
package _VisualDVM.Visual.Menus.MainMenuBar.VisualiserSettingsMenu;
import _VisualDVM.Global;
import _VisualDVM.Visual.Menus.SettingsSubmenu;
import GlobalData.Settings.SettingName;
public class CompactnessSettingsMenu extends SettingsSubmenu {
public CompactnessSettingsMenu(){
super("Компактность отображения", null,
SettingName.SmallScreen,
SettingName.ShowFullTabsNames,
SettingName.ShowFullArraysDeclarations,
SettingName.FastAccessPassesCount,
SettingName.LastOpenedProjectsCount
);
addSeparator();
String [] propertiesNames = new String[]{
// "collapseCredentials",
"collapseProjectTrees",
"collapseFileGraphs",
"collapseFileMessages"
};
for (String name: propertiesNames){
Global.properties.addFlagMenuItem(this, name);
};
}
}

View File

@@ -0,0 +1,43 @@
package _VisualDVM.Visual.Menus.MainMenuBar.VisualiserSettingsMenu;
import Common.Utils.CommonUtils;
import _VisualDVM.Visual.Menus.PropertiesSubmenu;
import _VisualDVM.Visual.Menus.SettingsSubmenu;
import _VisualDVM.Visual.Menus.VisualiserMenu;
import GlobalData.GlobalDatabase;
import GlobalData.Settings.SettingName;
public class VisualiserSettingsMenu extends VisualiserMenu {
public VisualiserSettingsMenu() {
super("Настройки визуализатора", "/icons/Settings.png");
//-
add(new PropertiesSubmenu("Подтверждения и уведомления", null,
"ShowPassesDone",
"ConfirmPassesStart",
"FocusPassesResult"
));
add(new CompactnessSettingsMenu());
if (CommonUtils.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(((GlobalDatabase)CommonUtils.db).settings.get(SettingName.Workspace).getMenuItem());
add(((GlobalDatabase)CommonUtils.db).settings.get(SettingName.BugReportsAgeLimit).getMenuItem());
}
}

View File

@@ -0,0 +1,18 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.VisualiserMenuItem;
import Visual_DVM_2021.Passes.Pass_2021;
import _VisualDVM.Visual.Controls.PassControl;
public class PassMenuItem extends VisualiserMenuItem implements PassControl {
@Override
public void setIcon(String icon_path) {
setIcon(CommonUtils.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,18 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
public class PassesSubMenu extends JMenu {
public PassesSubMenu(String title, String icon, PassCode_2021... passes) {
super(title);
setIcon(CommonUtils.getIcon(icon));
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Menu));
for (PassCode_2021 code : passes) {
add(Pass_2021.passes.get(code).createMenuItem());
}
}
}

View File

@@ -0,0 +1,132 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.VisualiserMenuItem;
import _VisualDVM.Current;
import _VisualDVM.Global;
import Common.Visual.Trees.StyledTree;
import _VisualDVM.Visual.UI;
import ProjectData.Files.FileType;
import ProjectData.Files.LanguageStyle;
import ProjectData.LanguageName;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class ProjectFilesMenu extends GraphMenu {
VisualiserMenuItem m_select_all;
VisualiserMenuItem m_unselect_all;
VisualiserMenuItem m_multiselection;
JMenu mLanguage;
JMenu mStyle;
JMenu mType;
public ProjectFilesMenu(StyledTree tree) {
super(tree, "подпапки");
addSeparator();
JMenuItem m = new VisualiserMenuItem("Открыть в проводнике...", "/icons/Explorer.png");
m.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Desktop.getDesktop().open(Current.getProject().Home);
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
});
add(m);
addSeparator();
add(new PassesSubMenu("Добавить", "/icons/RedAdd.png",
PassCode_2021.AddFile,
PassCode_2021.CreateEmptyDirectory,
PassCode_2021.ImportFiles));
addSeparator();
add(new PassesSubMenu("Переименовать", "/icons/Menu/Rename.png",
PassCode_2021.RenameFile,
PassCode_2021.RenameDirectory));
add(new VisualiserMenuItem("Удалить текущий проект", "/icons/Delete.png") {
{
addActionListener(e -> {
if (Current.HasProject()) {
UI.getVersionsWindow().getVersionsForm().getTree().SelectNode(Current.getProject().node);
Pass_2021.passes.get(PassCode_2021.DeleteVersion).Do();
}
});
}
});
addSeparator();
m_multiselection = new VisualiserMenuItem("Массовый режим работы с файлами");
m_multiselection.setIcon(CommonUtils.getIcon(Global.files_multiselection ? "/icons/Pick.png" : "/icons/NotPick.png"));
m_multiselection.addActionListener(e -> {
Global.files_multiselection = !Global.files_multiselection;
m_multiselection.setIcon(CommonUtils.getIcon(Global.files_multiselection ? "/icons/Pick.png" : "/icons/NotPick.png"));
Current.getProject().SelectAllFiles(false);
UI.getMainWindow().getProjectWindow().RefreshProjectFiles();
//-
});
add(m_multiselection);
addSeparator();
//-
m_select_all = new StableMenuItem("Выбрать всё", "/icons/SelectAll.png");
m_select_all.addActionListener(e -> {
Current.getProject().SelectAllFiles(true);
tree.updateUI();
});
add(m_select_all);
m_unselect_all = new StableMenuItem("Отменить всё", "/icons/UnselectAll.png");
m_unselect_all.addActionListener(e -> {
Current.getProject().SelectAllFiles(false);
tree.updateUI();
});
add(m_unselect_all);
//--------------------------------------------------
add(mLanguage = new LanguagesSubmenu(PassCode_2021.SetSelectedFilesLanguage.getDescription()) {
@Override
public void action(LanguageName languageName) {
Pass_2021.passes.get(PassCode_2021.SetSelectedFilesLanguage).Do(languageName);
}
});
add(mStyle = new StylesSubmenu(PassCode_2021.SetSelectedFilesStyle.getDescription()) {
@Override
public void action(LanguageStyle languageStyle) {
Pass_2021.passes.get(PassCode_2021.SetSelectedFilesStyle).Do(languageStyle);
}
});
add(mType = new TypesSubmenu(PassCode_2021.SetSelectedFilesType.getDescription()) {
@Override
public void action(FileType fileType) {
Pass_2021.passes.get(PassCode_2021.SetSelectedFilesType).Do(fileType);
}
});
//--------------------------------------------------
add(Pass_2021.passes.get(PassCode_2021.ExcludeSelectedFiles).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.IncludeSelectedFiles).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.ExcludeFile).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.IncludeFile).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DeleteFile).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DeleteDirectory).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DeleteSelectedFiles).createMenuItem());
}
@Override
public void CheckElementsVisibility() {
m_select_all.setVisible(Global.files_multiselection);
m_unselect_all.setVisible(Global.files_multiselection);
mLanguage.setVisible(Global.files_multiselection);
mStyle.setVisible(Global.files_multiselection);
mType.setVisible(Global.files_multiselection);
//-
Pass_2021.passes.get(PassCode_2021.ExcludeFile).setControlsVisible(!Global.files_multiselection);
Pass_2021.passes.get(PassCode_2021.IncludeFile).setControlsVisible(!Global.files_multiselection);
//-
Pass_2021.passes.get(PassCode_2021.DeleteFile).setControlsVisible(!Global.files_multiselection);
Pass_2021.passes.get(PassCode_2021.DeleteDirectory).setControlsVisible(!Global.files_multiselection);
//--
Pass_2021.passes.get(PassCode_2021.ExcludeSelectedFiles).setControlsVisible(Global.files_multiselection);
Pass_2021.passes.get(PassCode_2021.IncludeSelectedFiles).setControlsVisible(Global.files_multiselection);
Pass_2021.passes.get(PassCode_2021.DeleteSelectedFiles).setControlsVisible(Global.files_multiselection);
}
}

View File

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

View File

@@ -0,0 +1,33 @@
package _VisualDVM.Visual.Menus.ProjectMenuBar;
import Common.Visual.Controls.MenuBarButton;
import _VisualDVM.Visual.Menus.VisualiserMenuBar;
import _VisualDVM.Visual.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 _VisualDVM.Visual.Menus.ProjectMenuBar;
import Common.Utils.CommonUtils;
import _VisualDVM.Current;
import _VisualDVM.Visual.Menus.LanguagesSubmenu;
import _VisualDVM.Visual.Menus.SettingsSubmenu;
import _VisualDVM.Visual.Menus.StylesSubmenu;
import _VisualDVM.Visual.Menus.VisualiserMenu;
import GlobalData.GlobalDatabase;
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
));
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(((GlobalDatabase)CommonUtils.db).settings.get(SettingName.TRANSLATE_MESSAGES).getMenuItem());
add(((GlobalDatabase)CommonUtils.db).settings.get(SettingName.DEBUG_PRINT_ON).getMenuItem());
add(((GlobalDatabase)CommonUtils.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,36 @@
package _VisualDVM.Visual.Menus.ProjectMenuBar;
import Common.CurrentAnchestor;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import _VisualDVM.Current;
import _VisualDVM.Visual.Menus.VisualiserMenu;
import Common.Visual.Fonts.VisualiserFonts;
import _VisualDVM.Visual.UI;
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(CommonUtils.getIcon(view.getIcon()));
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
addActionListener(e -> {
CurrentAnchestor.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,18 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import _VisualDVM.Global;
import Common.Visual.Fonts.VisualiserFonts;
import javax.swing.*;
public class PropertiesSubmenu extends JMenu {
public PropertiesSubmenu(String title, String icon, String... settings) {
super(title);
if (icon != null)
setIcon(CommonUtils.getIcon(icon));
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Menu));
for (String name : settings) {
Global.properties.addFlagMenuItem(this, name);
}
}
}

View File

@@ -0,0 +1,86 @@
package _VisualDVM.Visual.Menus;
import Common.CurrentAnchestor;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.VisualiserMenuItem;
import Common.Visual.Selectable;
import Common.Visual.Trees.DataTree;
import Common.Visual.Trees.SelectableTree;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public abstract class SelectionTreeMenu extends GraphMenu<DataTree> {
VisualiserMenuItem m_select_for_current;
VisualiserMenuItem m_unselect_for_current;
VisualiserMenuItem m_select_all;
VisualiserMenuItem m_unselect_all;
public SelectionTreeMenu(SelectableTree tree_in) {
super(tree_in, "");
addSeparator();
//-
m_select_all = new StableMenuItem("Выбрать всё", "/icons/SelectAll.png");
m_select_all.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SelectAll(true);
tree.updateUI();
}
});
add(m_select_all);
m_unselect_all = new StableMenuItem("Отменить всё", "/icons/UnselectAll.png");
m_unselect_all.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SelectAll(false);
tree.updateUI();
}
});
add(m_unselect_all);
addSeparator();
m_select_for_current = new VisualiserMenuItem("");
m_select_for_current.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Object o = CurrentAnchestor.get(tree.getCurrent());
if (o instanceof Selectable) {
((Selectable) o).SelectAllChildren(true);
}
tree.updateUI();
}
});
add(m_select_for_current);
//--------
m_unselect_for_current = new VisualiserMenuItem("");
m_unselect_for_current.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Object o = CurrentAnchestor.get(tree.getCurrent());
if (o instanceof Selectable) {
((Selectable) o).SelectAllChildren(false);
}
tree.updateUI();
}
});
//-------
add(m_unselect_for_current);
}
public abstract Class getTargetClass(); //для кого позволяется выбирать всех потомков.
public abstract void SelectAll(boolean select);
@Override
public void CheckElementsVisibility() {
Object current = CurrentAnchestor.get(tree.getCurrent());
if ((current != null) && (current.getClass().equals(getTargetClass()))) {
String name = ((Selectable) current).getSelectionText();
m_select_for_current.setText("Выбрать всё для " +
CommonUtils.Brackets(name));
m_unselect_for_current.setText("Отменить выбор всех для " +
CommonUtils.Brackets(name));
//-
m_select_for_current.setVisible(true);
m_unselect_for_current.setVisible(true);
} else {
m_select_for_current.setVisible(false);
m_unselect_for_current.setVisible(false);
}
}
}

View File

@@ -0,0 +1,19 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import GlobalData.GlobalDatabase;
import Common.Visual.Fonts.VisualiserFonts;
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(CommonUtils.getIcon(icon));
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Menu));
for (SettingName c : settings) {
add(((GlobalDatabase)CommonUtils.db).settings.get(c).getMenuItem());
}
}
}

View File

@@ -0,0 +1,41 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Menus.VisualiserMenuItem;
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 (CommonUI.last_menu_path != null)
MenuSelectionManager.defaultManager().setSelectedPath(CommonUI.last_menu_path);
}
}
public class StableMenuItem extends VisualiserMenuItem {
{
getModel().addChangeListener(e -> {
if (getModel().isArmed() && isShowing())
CommonUI.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(CommonUtils.getIcon(icon_path));
setUI(new StableItemUI());
}
public StableMenuItem() {
setUI(new StableItemUI());
}
}

View File

@@ -0,0 +1,17 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Visual_DVM_2021.Passes.Pass_2021;
import _VisualDVM.Visual.Controls.PassControl;
public class StablePassMenuItem extends StableMenuItem implements PassControl {
@Override
public void setIcon(String icon_path) {
setIcon(CommonUtils.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 _VisualDVM.Visual.Menus;
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,30 @@
package _VisualDVM.Visual.Menus;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import GlobalData.Tasks.TaskState;
import javax.swing.*;
import java.awt.event.ActionListener;
public class TestsCompilationFilterMenu extends StyledPopupMenu {
public void CreateStateItem(TaskState state, ActionListener listener){
JMenuItem m = new VisualiserMenuItem(state.getDescription());
m.addActionListener(listener);
add(m);
}
public TestsCompilationFilterMenu(){
for (TaskState taskState: TaskState.values()){
switch (taskState){
case Queued:
case FailedToQueue:
case NoSuchTask:
case AbortingByUser:
break;
case Waiting:
CreateStateItem(taskState, e -> {
});
break;
}
}
}
}

View File

@@ -0,0 +1,26 @@
package _VisualDVM.Visual.Menus;
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,10 @@
package _VisualDVM.Visual.Menus.VariantsMenuBar;
import Common.Visual.Menus.DataMenuBar;
import Visual_DVM_2021.Passes.PassCode_2021;
public class VariantsMenuBar extends DataMenuBar {
public VariantsMenuBar() {
super("варианты");
addPasses(PassCode_2021.ShowAllParallelVariants, PassCode_2021.ShowParallelVariantsCoverage,
PassCode_2021.PredictParallelVariants, PassCode_2021.CreateParallelVariants);
}
}

View File

@@ -0,0 +1,53 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.VisualiserMenuItem;
import _VisualDVM.Current;
import _VisualDVM.Global;
import Common.Visual.Trees.DataTree;
import _VisualDVM.Visual.UI;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
public class VersionsMenu extends GraphMenu<DataTree> {
VisualiserMenuItem m_select_all;
VisualiserMenuItem m_unselect_all;
VisualiserMenuItem m_multiselection;
public VersionsMenu(DataTree tree) {
super(tree, "подверсии");
add(Pass_2021.passes.get(PassCode_2021.DeleteSubversions).createMenuItem());
add(Pass_2021.passes.get(PassCode_2021.DeleteLonelyM).createMenuItem());
addSeparator();
m_multiselection = new VisualiserMenuItem("Массовый режим работы с версиями");
m_multiselection.setIcon(CommonUtils.getIcon(Global.versions_multiselection ? "/icons/Pick.png" : "/icons/NotPick.png"));
m_multiselection.addActionListener(e -> {
Global.versions_multiselection = !Global.versions_multiselection;
m_multiselection.setIcon(CommonUtils.getIcon(Global.versions_multiselection ? "/icons/Pick.png" : "/icons/NotPick.png"));
Current.getRoot().SelectAllVersions(false);
UI.getVersionsWindow().getVersionsForm().getTree().updateUI();
});
add(m_multiselection);
addSeparator();
add(Pass_2021.passes.get(PassCode_2021.DeleteVersion).createMenuItem());
//-
m_select_all = new StableMenuItem("Выбрать всё, кроме резервных копий","/icons/SelectAll.png");
m_select_all.addActionListener(e -> {
Current.getRoot().SelectAllVersions(true);
tree.updateUI();
});
add(m_select_all);
m_unselect_all = new StableMenuItem("Отменить всё","/icons/UnselectAll.png");
m_unselect_all.addActionListener(e -> {
Current.getRoot().SelectAllVersions(false);
tree.updateUI();
});
add(m_unselect_all);
add(Pass_2021.passes.get(PassCode_2021.DeleteSelectedVersions).createMenuItem());
}
@Override
public void CheckElementsVisibility() {
Pass_2021.passes.get(PassCode_2021.DeleteSelectedVersions).setControlsVisible(!Global.versions_multiselection);
Pass_2021.passes.get(PassCode_2021.DeleteSelectedVersions).setControlsVisible(Global.versions_multiselection);
Pass_2021.passes.get(PassCode_2021.DeleteVersion).setControlsVisible(!Global.versions_multiselection);
m_select_all.setVisible(Global.versions_multiselection);
m_unselect_all.setVisible(Global.versions_multiselection);
}
}

View File

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

View File

@@ -0,0 +1,27 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
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(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
if (!iconPath.isEmpty())
setIcon(CommonUtils.getIcon(iconPath));
}
public VisualiserMenu(String text, String iconPath) {
this(text, iconPath, false);
}
public void addPasses(PassCode_2021... codes) {
for (PassCode_2021 code : codes)
add(Pass_2021.passes.get(code).createMenuItem());
}
}

View File

@@ -0,0 +1,49 @@
package _VisualDVM.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
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 JLabel addLabel(String text_in) {
return addLabel(text_in, null);
}
public JLabel addLabel(String text_in, String icon_path_in) {
JLabel res = new JLabel(text_in) {
{
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
if (icon_path_in != null) {
setIcon(CommonUtils.getIcon(icon_path_in));
}
}
};
add(res);
return res;
}
public void setSizeLimits() {
setPreferredSize(new Dimension(0, 30));
}
}

View File

@@ -0,0 +1,305 @@
package _VisualDVM.Visual;
import Common.Database.Tables.DataSet;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Menus.DataMenuBar;
import _VisualDVM.Current;
import _VisualDVM.Visual.Menus.CredentialsBar.CredentialsBar;
import _VisualDVM.Visual.Menus.FastAccessMenuBar.FastAccessMenuBar;
import _VisualDVM.Visual.Menus.FileMenuBar.FileMenuBar;
import _VisualDVM.Visual.Menus.MainMenuBar.MainMenuBar;
import _VisualDVM.Visual.Menus.MainMenuBar.MainWindow;
import _VisualDVM.Visual.Menus.VariantsMenuBar.VariantsMenuBar;
import _VisualDVM.Visual.Menus.VersionsMenuBar.VersionsMenuBar;
import Common.Visual.Tables.*;
import Common.Visual.Trees.GraphTreeCellRenderer;
import Common.Visual.Trees.SelectionTreeCellRenderer;
import _VisualDVM.Visual.Windows.SearchReplaceForm;
import GlobalData.Compiler.CompilersDBTable;
import GlobalData.Compiler.CompilersMenuBar;
import GlobalData.CompilerEnvironment.UI.CompilerEnvironmentValueEditor;
import GlobalData.CompilerEnvironment.UI.CompilerEnvironmentValueRenderer;
import GlobalData.CompilerOption.UI.CompilerOptionParameterNameRenderer;
import GlobalData.CompilerOption.UI.CompilerOptionParameterValueEditor;
import GlobalData.CompilerOption.UI.CompilerOptionParameterValueRenderer;
import GlobalData.DVMParameter.DVMParameterDBTable;
import GlobalData.DVMParameter.DVMParametersMenuBar;
import GlobalData.EnvironmentValue.EnvironmentValuesDBTable;
import GlobalData.EnvironmentValue.EnvironmentValuesMenuBar;
import GlobalData.GlobalDatabase;
import GlobalData.Machine.MachinesDBTable;
import GlobalData.Machine.MachinesMenuBar;
import GlobalData.Makefile.MakefilesDBTable;
import GlobalData.Makefile.MakefilesMenuBar;
import GlobalData.Module.ModulesDBTable;
import GlobalData.Module.ModulesMenuBar;
import GlobalData.RemoteFile.UI.RemoteFileChooser;
import GlobalData.RemoteFile.UI.RemoteFileRenderer;
import GlobalData.RunConfiguration.RunConfigurationsDBTable;
import GlobalData.RunConfiguration.RunConfigurationsMenuBar;
import GlobalData.SapforProfile.SapforProfilesDBTable;
import GlobalData.Settings.SettingName;
import GlobalData.Tasks.CompilationTask.CompilationTasksDBTable;
import GlobalData.Tasks.RunTask.RunTasksDBTable;
import GlobalData.User.UsersDBTable;
import GlobalData.User.UsersMenuBar;
import ProjectData.DBArray.ArraysDBTable;
import ProjectData.Files.UI.FilesTreeCellRenderer;
import ProjectData.Project.UI.VersionsTreeCellRenderer;
import ProjectData.SapforData.Arrays.ArraysSet;
import ProjectData.SapforData.Arrays.UI.DimensionRenderer;
import ProjectData.SapforData.Arrays.UI.DimensionStateChanger;
import ProjectData.SapforData.Arrays.UI.RulesTreeCellRenderer;
import ProjectData.SapforData.Regions.RegionsSet;
import ProjectData.SapforData.Variants.UI.VariantRankRenderer;
import ProjectData.SapforData.Variants.VariantsSet;
import Repository.BugReport.BugReportsDBTable;
import Repository.BugReport.BugReportsMenuBar;
import Repository.Component.UI.ComponentsForm;
import Repository.SubscriberWorkspace.SubscriberWorkspaceDBTable;
import Repository.SubscriberWorkspace.SubscriberWorkspacesMenuBar;
import Repository.Subscribes.SubscribersMenuBar;
import Repository.Subscribes.SubsribersDBTable;
import TestingSystem.Common.Group.GroupsDBTable;
import TestingSystem.Common.Group.GroupsMenuBar;
import TestingSystem.Common.Test.TestDBTable;
import TestingSystem.Common.Test.TestsMenuBar;
import TestingSystem.Common.TestingBar;
import TestingSystem.DVM.DVMConfiguration.DVMConfigurationDBTable;
import TestingSystem.DVM.DVMConfiguration.DVMConfigurationsMenuBar;
import TestingSystem.DVM.DVMPackage.DVMPackageDBTable;
import TestingSystem.DVM.DVMPackage.DVMPackagesBar;
import TestingSystem.DVM.DVMSettings.DVMSettingsDBTable;
import TestingSystem.DVM.DVMSettings.UI.DVMSettingsBar;
import TestingSystem.DVM.DVMTasks.DVMRunTasksBar;
import TestingSystem.DVM.DVMTasks.DVMRunTasksSet;
import TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationDBTable;
import TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationsMenuBar;
import TestingSystem.SAPFOR.SapforPackage.SapforPackageDBTable;
import TestingSystem.SAPFOR.SapforSettings.SapforSettingsBar;
import TestingSystem.SAPFOR.SapforSettings.SapforSettingsDBTable;
import TestingSystem.SAPFOR.SapforSettingsCommand.SapforSettingsCommandsBar;
import TestingSystem.SAPFOR.SapforSettingsCommand.SapforSettingsCommandsDBTable;
import TestingSystem.SAPFOR.SapforTasksPackage.UI.SapforPackagesBar;
import TestingSystem.SAPFOR.SapforTasksPackage.UI.SapforVersionsTreeCellRenderer;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsBar;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable;
import Visual_DVM_2021.Passes.PassCode_2021;
import _VisualDVM.Visual.Interface.DebugWindow;
import _VisualDVM.Visual.Interface.VersionsWindow;
import Visual_DVM_2021.UI.Main.DebugForm;
import Visual_DVM_2021.UI.Main.MainForm;
import Visual_DVM_2021.UI.Main.ProfilesForm;
import Visual_DVM_2021.UI.Main.VersionsForm;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.tree.TreeCellRenderer;
import java.awt.*;
import java.util.LinkedHashMap;
import static Common.Visual.Tables.TableEditors.*;
import static Common.Visual.Tables.TableRenderers.*;
import static Common.Visual.Trees.TreeRenderers.*;
public class UI {
public static MainMenuBar mainMenuBar = null;
public static TestingBar testingBar = null;
public static CredentialsBar credentialsBar = null;
public static FileMenuBar fileMenuBar = null;
public static VersionsMenuBar versionsMenuBar = null;
public static FastAccessMenuBar fastAccessMenuBar = null;
//ФОРМЫ
static MainWindow mainWindow = null;
static ComponentsForm componentsWindow = null;
static SearchReplaceForm searchReplaceWindow = null;
static ProfilesForm profilesWindow = null;
static VersionsWindow versionsWindow = null;
static DebugWindow debugWindow = null;
static RemoteFileChooser remoteFileChooser = null;
//------------
public static final Highlighter.HighlightPainter GoodLoopPainter = new DefaultHighlighter.DefaultHighlightPainter(new Color(152, 251, 152, 90));
public static final Highlighter.HighlightPainter BadLoopPainter = new DefaultHighlighter.DefaultHighlightPainter(new Color(240, 128, 128, 90));
public static LinkedHashMap<Common.Visual.Tables.TableRenderers, TableCellRenderer> TableRenderers = new LinkedHashMap<>();
public static LinkedHashMap<Common.Visual.Tables.TableEditors, TableCellEditor> TableEditors = new LinkedHashMap<>();
public static LinkedHashMap<Common.Visual.Trees.TreeRenderers, TreeCellRenderer> TreeRenderers = new LinkedHashMap<>();
public static boolean HasMainWindow() {
return mainWindow != null;
}
public static void CreateMenus() {
mainMenuBar = new MainMenuBar();
testingBar = new TestingBar();
credentialsBar = new CredentialsBar();
versionsMenuBar = new VersionsMenuBar();
fastAccessMenuBar = new FastAccessMenuBar();
//---------------------------------------------------->>
CommonUI.menuBars.put(BugReportsDBTable.class, new BugReportsMenuBar());
CommonUI.menuBars.put(SubscriberWorkspaceDBTable.class, new SubscriberWorkspacesMenuBar());
//---------------------------------------------------->>
CommonUI.menuBars.put(GroupsDBTable.class, new GroupsMenuBar());
CommonUI.menuBars.put(TestDBTable.class, new TestsMenuBar());
CommonUI.menuBars.put(DVMConfigurationDBTable.class, new DVMConfigurationsMenuBar());
CommonUI.menuBars.put(DVMPackageDBTable.class, new DVMPackagesBar());
CommonUI.menuBars.put(SapforPackageDBTable.class, new SapforPackagesBar());
CommonUI.menuBars.put(DVMRunTasksSet.class, new DVMRunTasksBar());
//--->>>
CommonUI.menuBars.put(MachinesDBTable.class, new MachinesMenuBar());
CommonUI.menuBars.put(UsersDBTable.class, new UsersMenuBar());
CommonUI.menuBars.put(CompilersDBTable.class, new CompilersMenuBar());
CommonUI.menuBars.put(MakefilesDBTable.class, new MakefilesMenuBar());
CommonUI.menuBars.put(ModulesDBTable.class, new ModulesMenuBar());
CommonUI.menuBars.put(RunConfigurationsDBTable.class, new RunConfigurationsMenuBar());
CommonUI.menuBars.put(EnvironmentValuesDBTable.class, new EnvironmentValuesMenuBar());
CommonUI.menuBars.put(DVMParameterDBTable.class, new DVMParametersMenuBar());
CommonUI.menuBars.put(CompilationTasksDBTable.class, new DataMenuBar("задачи на компиляцию"));
CommonUI.menuBars.put(RunTasksDBTable.class, new DataMenuBar("задачи на запуск"));
//---->>
CommonUI.menuBars.put(SapforConfigurationDBTable.class, new SapforConfigurationsMenuBar());
//---->>
CommonUI.menuBars.put(RegionsSet.class, new DataMenuBar("области распараллеливания"));
CommonUI.menuBars.put(ArraysSet.class, new DataMenuBar("массивы"));
CommonUI.menuBars.put(ArraysDBTable.class, new DataMenuBar("сохранённые состояния") {
@Override
public void createSelectionButtons(DataSet dataSet) {
//не нужны.
}
});
CommonUI.menuBars.put(VariantsSet.class, new VariantsMenuBar());
CommonUI.menuBars.put(SubsribersDBTable.class, new SubscribersMenuBar());
CommonUI.menuBars.put(SapforProfilesDBTable.class, new DataMenuBar("профили", PassCode_2021.SaveProfile, PassCode_2021.EditProfile, PassCode_2021.ApplyProfile, PassCode_2021.DeleteProfile));
CommonUI.menuBars.put(ServerSapforsDBTable.class, new ServerSapforsBar());
CommonUI.menuBars.put(SapforSettingsDBTable.class, new SapforSettingsBar());
CommonUI.menuBars.put(SapforSettingsCommandsDBTable.class, new SapforSettingsCommandsBar());
CommonUI.menuBars.put(DVMSettingsDBTable.class, new DVMSettingsBar());
//---->>
}
public static void CreateWindows() {
searchReplaceWindow = new SearchReplaceForm();
remoteFileChooser = new RemoteFileChooser();
profilesWindow = new ProfilesForm();
mainWindow = new MainForm();
//---------------------------------------
mainWindow.Show();
}
//-
public static void CreateAll() {
//<editor-fold desc="Локализация компонентов окна JFileChooser">
UIManager.put("FileChooser.openButtonText", "Открыть");
UIManager.put("FileChooser.cancelButtonText", "Отмена");
UIManager.put("FileChooser.lookInLabelText", "Смотреть в");
UIManager.put("FileChooser.fileNameLabelText", "Имя файла");
UIManager.put("FileChooser.filesOfTypeLabelText", "Тип файла");
UIManager.put("FileChooser.saveButtonText", "Сохранить");
UIManager.put("FileChooser.saveButtonToolTipText", "Сохранить");
UIManager.put("FileChooser.openButtonToolTipText", "Открыть");
UIManager.put("FileChooser.cancelButtonText", "Отмена");
UIManager.put("FileChooser.cancelButtonToolTipText", "Отмена");
UIManager.put("FileChooser.lookInLabelText", "Папка");
UIManager.put("FileChooser.saveInLabelText", "Папка");
UIManager.put("FileChooser.fileNameLabelText", "Имя файла");
UIManager.put("FileChooser.filesOfTypeLabelText", "Тип файлов");
UIManager.put("FileChooser.upFolderToolTipText", "На один уровень вверх");
UIManager.put("FileChooser.newFolderToolTipText", "Создание новой папки");
UIManager.put("FileChooser.listViewButtonToolTipText", "Список");
UIManager.put("FileChooser.detailsViewButtonToolTipText", "Таблица");
UIManager.put("FileChooser.fileNameHeaderText", "Имя");
UIManager.put("FileChooser.fileSizeHeaderText", "Размер");
UIManager.put("FileChooser.fileTypeHeaderText", "Тип");
UIManager.put("FileChooser.fileDateHeaderText", "Изменен");
UIManager.put("FileChooser.fileAttrHeaderText", "Атрибуты");
UIManager.put("FileChooser.acceptAllFileFilterText", "Все файлы");
//</editor-fold>
//<editor-fold desc="Локализация компонентов окна подтверждения">
UIManager.put("OptionPane.yesButtonText", "Да");
UIManager.put("OptionPane.noButtonText", "Нет");
UIManager.put("OptionPane.cancelButtonText", "Отмена");
UIManager.put("OptionPane.okButtonText", "Готово");
//</editor-fold>
//</editor-fold>
//<editor-fold desc="Объекты отрисовки и редактирования деревьев и таблиц">
TableRenderers.put(RendererDate, new DateRenderer_());
TableRenderers.put(RendererProgress, new ProgressBarRenderer());
TableRenderers.put(RendererSelect, new DBObjectSelectionRenderer());
TableRenderers.put(RendererDimension, new DimensionRenderer());
TableRenderers.put(RendererMultiline, new MultilineRenderer());
TableRenderers.put(RendererHyperlinks, new HyperlinksRenderer());
TableRenderers.put(RendererTopLeft, new TopLeftRenderer());
TableRenderers.put(RendererMaskedInt, new MaskedIntegerValueRenderer());
TableRenderers.put(RendererVariantRank, new VariantRankRenderer());
TableRenderers.put(RendererHiddenList, new HiddenListRenderer());
TableRenderers.put(RendererWrapText, new WrapTextRenderer());
TableRenderers.put(RendererCompilerOptionParameterValue, new CompilerOptionParameterValueRenderer());
TableRenderers.put(RendererCompilerOptionParameterName, new CompilerOptionParameterNameRenderer());
TableRenderers.put(RendererCompilerEnvironmentValue, new CompilerEnvironmentValueRenderer());
TableRenderers.put(RendererStatusEnum, new StatusEnumRenderer());
TableRenderers.put(RendererAutoConfiguration, new ConfigurationAutoRenderer());
//---------------------------------------------
TreeRenderers.put(RendererGraph, new GraphTreeCellRenderer());
TreeRenderers.put(RendererRemoteFile, new RemoteFileRenderer());
TreeRenderers.put(RendererFile, new FilesTreeCellRenderer());
TreeRenderers.put(RendererVersion, new VersionsTreeCellRenderer());
TreeRenderers.put(RendererSapforVersion, new SapforVersionsTreeCellRenderer());
TreeRenderers.put(RendererRule, new RulesTreeCellRenderer());
TreeRenderers.put(RendererSelection, new SelectionTreeCellRenderer());
//----------------------------------------------
TableEditors.put(EditorSelect, new DBObjectSelector());
TableEditors.put(EditorHyperlinks, new VectorEditor());
TableEditors.put(EditorDimension, new DimensionStateChanger());
TableEditors.put(EditorCompilerOptionParameterValue, new CompilerOptionParameterValueEditor());
TableEditors.put(EditorCompilerEnvironmentValue, new CompilerEnvironmentValueEditor());
TableEditors.put(EditorAutoConfiguration, new ConfigurationAutoSwitcher());
//</editor-fold>
}
public static void CreateComponentsForm() {
componentsWindow = new ComponentsForm();
}
//-----
public static void ShowTabsNames(JTabbedPane tabs) {
ShowTabsNames(tabs, 0);
}
public static void ShowTabsNames(JTabbedPane tabs, int startIndex) {
boolean flag = ((GlobalDatabase) CommonUtils.db).settings.get(SettingName.ShowFullTabsNames).toBoolean();
for (int i = startIndex; i < tabs.getTabCount(); ++i)
tabs.setTitleAt(i, flag ? tabs.getToolTipTextAt(i) : "");
}
public static void CreateVersionsWindow() {
versionsWindow = new VersionsForm(Current.getRoot());
}
//-
public static void ShowSearchForm(boolean replace) {
searchReplaceWindow.setMode(replace);
searchReplaceWindow.ShowMode();
ShowSearchForm();
}
public static void HideSearchForm() {
if (searchReplaceWindow.isVisible())
searchReplaceWindow.setVisible(false);
}
public static void ShowSearchForm() {
if (searchReplaceWindow.isVisible())
searchReplaceWindow.Refresh();
else
searchReplaceWindow.Show();
}
public static void ShowComponentsWindow() {
componentsWindow.ShowDialog("");
}
public static void ShowProfilesWindow() {
profilesWindow.ShowDialog("");
}
//----
public static MainWindow getMainWindow(){return mainWindow;}
public static VersionsWindow getVersionsWindow(){return versionsWindow;}
public static ComponentsForm getComponentsWindow(){return componentsWindow;}
public static SearchReplaceForm getSearchReplaceWindow(){return searchReplaceWindow;}
public static ProfilesForm getProfilesWindow(){return profilesWindow;}
public static RemoteFileChooser getRemoteFileChooser(){return remoteFileChooser;}
//возможно перекинуть на тестирование. потом.
public static DebugWindow getDebugWindow() {
if (debugWindow == null)
debugWindow = new DebugForm();
return debugWindow;
}
}

View File

@@ -1,7 +1,7 @@
package _VisualDVM.Visual.Windows;
import Common.Utils.CommonUtils;
import Common.Visual.Windows.Dialog.VFileChooser_;
import Common_old.Constants;
import _VisualDVM.Constants;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

View File

@@ -2,10 +2,10 @@ package _VisualDVM.Visual.Windows;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Windows.Form;
import Common_old.Current;
import _VisualDVM.Current;
import Common.Visual.TextField.StyledTextField;
import Common.Visual.Trees.StyledTree;
import Common_old.UI.UI;
import _VisualDVM.Visual.UI;
import Visual_DVM_2021.Passes.PassCode_2021;
import Visual_DVM_2021.Passes.Pass_2021;
import javafx.util.Pair;