Files
VisualSapfor/src/_VisualDVM/ProjectData/Files/UI/FilesTree.java

108 lines
4.8 KiB
Java

package _VisualDVM.ProjectData.Files.UI;
import Common.Current_;
import _VisualDVM.Current;
import _VisualDVM.Global;
import Common.Visual.DragDrop.FileDrop;
import _VisualDVM.Visual.Menus.GraphMenu;
import _VisualDVM.Visual.Menus.ProjectFilesMenu;
import _VisualDVM.Visual.UI;
import Common.Visual.Trees.StyledTree;
import Common.Visual.Trees.TreeRenderers;
import _VisualDVM.ProjectData.Files.DBProjectFile;
import Visual_DVM_2021.Passes.PassCode;
import Common.Passes.Pass;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
public class FilesTree extends StyledTree {
public FilesTree() {
super(Global.mainModule.getProject().filesTreeRoot);
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_DELETE:
forkFD(PassCode.DeleteFile, PassCode.DeleteDirectory);
break;
case KeyEvent.VK_ADD: //num lock +
case KeyEvent.VK_EQUALS: //+
Global.mainModule.getPass(PassCode.IncludeFile).Do();
break;
case KeyEvent.VK_SUBTRACT: //num lock -
case KeyEvent.VK_MINUS: //-
Global.mainModule.getPass(PassCode.ExcludeFile).Do();
break;
case KeyEvent.VK_F2:
forkFD(PassCode.RenameFile, PassCode.RenameDirectory);
break;
case KeyEvent.VK_ENTER:
LeftMouseAction2();
break;
}
}
}
);
new FileDrop(System.out, this, files -> {
Global.mainModule.getPass(PassCode.ImportFiles).Do(files);
});
Global.mainModule.set(Current.File, null);
}
private static void forkFD(PassCode file_pass, PassCode folder_pass) {
DefaultMutableTreeNode node = Global.mainModule.getProjectNode();
if (node != null)
Global.mainModule.getPass((node.getUserObject() instanceof DBProjectFile) ?
file_pass : folder_pass).Do();
}
@Override
public TreeRenderers getRenderer() {
return TreeRenderers.RendererFile;
}
@Override
protected GraphMenu createMenu() {
return new ProjectFilesMenu(this);
}
@Override
public void SelectionAction(TreePath e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.getLastPathComponent();
Global.mainModule.set(Current.ProjectNode, node);
Object o = node.getUserObject();
if (o instanceof File) {
Global.mainModule.set(Current.SelectedDirectory, o);
Global.mainModule.set(Current.SelectedFile, null);
UI.getMainWindow().getProjectWindow().ShowNoSelectedFile();
} else if (o instanceof DBProjectFile) {
Global.mainModule.set(Current.SelectedFile, o);
File file = ((DBProjectFile) o).file;
Global.mainModule.set(Current.SelectedDirectory, file.getParentFile());
UI.getMainWindow().getProjectWindow().ShowSelectedFile();
}
UI.getMainWindow().getProjectWindow().ShowSelectedDirectory();
}
@Override
public void LeftMouseAction2() {
if (Global.mainModule.getProjectNode() != null) {
Object o = Global.mainModule.getProjectNode().getUserObject();
if (o instanceof DBProjectFile) {
//очень важно. иначе по открытии файла дерево остается в фокусе.
//и не происходит прокрутки скролла к строке!!
UI.getMainWindow().getProjectWindow().FocusFileTabs();
Global.mainModule.getPass(PassCode.OpenCurrentFile).Do(o);
}
}
}
@Override
public void LeftMouseAction1() {
if (Global.files_multiselection && Global.mainModule.getSelectedFile() != null) {
Global.mainModule.getSelectedFile().SwitchSelection();
updateUI();
}
}
@Override
protected int getStartLine() {
return 1;
}
}