no message
This commit is contained in:
32
src/_VisualDVM/Visual/Menus/AttachementsMenu.java
Normal file
32
src/_VisualDVM/Visual/Menus/AttachementsMenu.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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("?");
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
84
src/_VisualDVM/Visual/Menus/FileMenuBar/FileMenuBar.java
Normal file
84
src/_VisualDVM/Visual/Menus/FileMenuBar/FileMenuBar.java
Normal 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();}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
26
src/_VisualDVM/Visual/Menus/FileStyleMenu.java
Normal file
26
src/_VisualDVM/Visual/Menus/FileStyleMenu.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
37
src/_VisualDVM/Visual/Menus/GraphMenu.java
Normal file
37
src/_VisualDVM/Visual/Menus/GraphMenu.java
Normal 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());
|
||||
}
|
||||
}
|
||||
34
src/_VisualDVM/Visual/Menus/LanguagesSubmenu.java
Normal file
34
src/_VisualDVM/Visual/Menus/LanguagesSubmenu.java
Normal 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);
|
||||
}
|
||||
344
src/_VisualDVM/Visual/Menus/MainEditorMenu.java
Normal file
344
src/_VisualDVM/Visual/Menus/MainEditorMenu.java
Normal 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("Отменить последнюю модификацию.");
|
||||
}
|
||||
}
|
||||
}
|
||||
14
src/_VisualDVM/Visual/Menus/MainMenuBar/AnalysesMenu.java
Normal file
14
src/_VisualDVM/Visual/Menus/MainMenuBar/AnalysesMenu.java
Normal 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());
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
90
src/_VisualDVM/Visual/Menus/MainMenuBar/MainMenuBar.java
Normal file
90
src/_VisualDVM/Visual/Menus/MainMenuBar/MainMenuBar.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
20
src/_VisualDVM/Visual/Menus/MainMenuBar/MainWindow.java
Normal file
20
src/_VisualDVM/Visual/Menus/MainMenuBar/MainWindow.java
Normal 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();
|
||||
}
|
||||
@@ -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()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
18
src/_VisualDVM/Visual/Menus/PassMenuItem.java
Normal file
18
src/_VisualDVM/Visual/Menus/PassMenuItem.java
Normal 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);
|
||||
}
|
||||
}
|
||||
18
src/_VisualDVM/Visual/Menus/PassesSubMenu.java
Normal file
18
src/_VisualDVM/Visual/Menus/PassesSubMenu.java
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
132
src/_VisualDVM/Visual/Menus/ProjectFilesMenu.java
Normal file
132
src/_VisualDVM/Visual/Menus/ProjectFilesMenu.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" );
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
18
src/_VisualDVM/Visual/Menus/PropertiesSubmenu.java
Normal file
18
src/_VisualDVM/Visual/Menus/PropertiesSubmenu.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
86
src/_VisualDVM/Visual/Menus/SelectionTreeMenu.java
Normal file
86
src/_VisualDVM/Visual/Menus/SelectionTreeMenu.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
19
src/_VisualDVM/Visual/Menus/SettingsSubmenu.java
Normal file
19
src/_VisualDVM/Visual/Menus/SettingsSubmenu.java
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
41
src/_VisualDVM/Visual/Menus/StableMenuItem.java
Normal file
41
src/_VisualDVM/Visual/Menus/StableMenuItem.java
Normal 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());
|
||||
}
|
||||
}
|
||||
17
src/_VisualDVM/Visual/Menus/StablePassMenuItem.java
Normal file
17
src/_VisualDVM/Visual/Menus/StablePassMenuItem.java
Normal 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);
|
||||
}
|
||||
}
|
||||
25
src/_VisualDVM/Visual/Menus/StylesSubmenu.java
Normal file
25
src/_VisualDVM/Visual/Menus/StylesSubmenu.java
Normal 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);
|
||||
}
|
||||
30
src/_VisualDVM/Visual/Menus/TestsCompilationFilterMenu.java
Normal file
30
src/_VisualDVM/Visual/Menus/TestsCompilationFilterMenu.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
26
src/_VisualDVM/Visual/Menus/TypesSubmenu.java
Normal file
26
src/_VisualDVM/Visual/Menus/TypesSubmenu.java
Normal 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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
53
src/_VisualDVM/Visual/Menus/VersionsMenu.java
Normal file
53
src/_VisualDVM/Visual/Menus/VersionsMenu.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
27
src/_VisualDVM/Visual/Menus/VisualiserMenu.java
Normal file
27
src/_VisualDVM/Visual/Menus/VisualiserMenu.java
Normal 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());
|
||||
}
|
||||
}
|
||||
49
src/_VisualDVM/Visual/Menus/VisualiserMenuBar.java
Normal file
49
src/_VisualDVM/Visual/Menus/VisualiserMenuBar.java
Normal 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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user