Перенос.
This commit is contained in:
167
src/Common/UI/Trees/StyledTree.java
Normal file
167
src/Common/UI/Trees/StyledTree.java
Normal file
@@ -0,0 +1,167 @@
|
||||
package Common.UI.Trees;
|
||||
import Common.Current;
|
||||
import Common.UI.Menus.GraphMenu;
|
||||
import Common.UI.Themes.ThemeElement;
|
||||
import Common.UI.Themes.VisualiserFonts;
|
||||
import Common.UI.UI;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.TreePath;
|
||||
import javax.swing.tree.TreeSelectionModel;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
public class StyledTree extends JTree implements ThemeElement {
|
||||
//---------------------------------
|
||||
private final GraphMenu menu;
|
||||
public DefaultMutableTreeNode root = null;
|
||||
//-включение /отключение событий --
|
||||
protected boolean events_on = true;
|
||||
public StyledTree(DefaultMutableTreeNode root_in) {
|
||||
super(root_in);
|
||||
root = root_in;
|
||||
setOpaque(true);
|
||||
setFont(Current.getTheme().Fonts.get(VisualiserFonts.TreePlain));
|
||||
setToggleClickCount(0); //отключение сворачивание разворачивания по двойному клику
|
||||
//--
|
||||
if (!getRenderer().equals(TreeRenderers.RendererUndefined))
|
||||
setCellRenderer(UI.TreeRenderers.get(getRenderer()));
|
||||
//--
|
||||
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
|
||||
addTreeSelectionListener(e -> {
|
||||
if (events_on && e.isAddedPath())
|
||||
SelectionAction(e.getPath());
|
||||
});
|
||||
addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (e.getClickCount() == 1) {
|
||||
switch ((e.getButton())) {
|
||||
//левая клавиша.
|
||||
case MouseEvent.BUTTON1:
|
||||
if (getSelectionCount() > 0) LeftMouseAction1();
|
||||
break;
|
||||
//колесо
|
||||
case MouseEvent.BUTTON2:
|
||||
break;
|
||||
//правая клавиша
|
||||
case MouseEvent.BUTTON3:
|
||||
if (menu != null)
|
||||
menu.Show(e);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (e.getClickCount() == 2) {
|
||||
switch ((e.getButton())) {
|
||||
case MouseEvent.BUTTON1:
|
||||
if (getSelectionCount() > 0) LeftMouseAction2();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
menu = createMenu();
|
||||
applyTheme();
|
||||
ExpandAll();
|
||||
}
|
||||
public TreeRenderers getRenderer() {
|
||||
return TreeRenderers.RendererUndefined;
|
||||
}
|
||||
public void EventsOn() {
|
||||
events_on = true;
|
||||
}
|
||||
public void EventsOff() {
|
||||
events_on = false;
|
||||
}
|
||||
public String getBranchesName() {
|
||||
return "";
|
||||
}
|
||||
public void LeftMouseAction1() {
|
||||
}
|
||||
public void LeftMouseAction2() {
|
||||
}
|
||||
public void SelectionAction(TreePath e) {
|
||||
}
|
||||
@Override
|
||||
public void applyTheme() {
|
||||
setBackground(Current.getTheme().trees_background);
|
||||
setForeground(Current.getTheme().foreground);
|
||||
menu.applyTheme();
|
||||
}
|
||||
protected GraphMenu createMenu() {
|
||||
return new GraphMenu(this);
|
||||
}
|
||||
public DefaultMutableTreeNode getNodeByRow(int row) {
|
||||
DefaultMutableTreeNode res = null;
|
||||
if (row >= 0) {
|
||||
TreePath p = getPathForRow(row);
|
||||
res = (DefaultMutableTreeNode) p.getLastPathComponent();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
protected int getStartLine() {
|
||||
return 0;
|
||||
}
|
||||
public void ExpandAll() {
|
||||
for (int i = getStartLine(); i < getRowCount(); ++i)
|
||||
expandRow(i);
|
||||
}
|
||||
public void CollapseAll() {
|
||||
for (int i = getRowCount() - 1; i >= getStartLine(); --i) {
|
||||
collapseRow(i);
|
||||
}
|
||||
}
|
||||
protected boolean findNode(Object userObject, Object criteria) {
|
||||
return true;
|
||||
}
|
||||
public DefaultMutableTreeNode FindByCriteria(Object criteria) {
|
||||
DefaultMutableTreeNode res = root;
|
||||
for (int i = 0; i < getRowCount(); ++i) {
|
||||
DefaultMutableTreeNode node = getNodeByRow(i);
|
||||
if (findNode(node.getUserObject(), criteria)) {
|
||||
res = node;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
public TreePath ShowNode(DefaultMutableTreeNode node) {
|
||||
TreePath res = new TreePath(((DefaultTreeModel) getModel()).getPathToRoot(node));
|
||||
scrollPathToVisible(res);
|
||||
return res;
|
||||
}
|
||||
public TreePath ShowNodeByCriteria(Object criteria) {
|
||||
return ShowNode(FindByCriteria(criteria));
|
||||
}
|
||||
public void SelectNodeByCriteria(Object criteria) {
|
||||
EventsOff();
|
||||
TreePath res = ShowNodeByCriteria(criteria);
|
||||
setSelectionPath(res);
|
||||
EventsOn();
|
||||
}
|
||||
public void SelectNode(DefaultMutableTreeNode node) {
|
||||
setSelectionPath(new TreePath(((DefaultTreeModel) getModel()).getPathToRoot(node)));
|
||||
}
|
||||
//https://stackoverflow.com/questions/7928839/adding-and-removing-nodes-from-a-jtree !!!
|
||||
public void AddNode(DefaultMutableTreeNode parent, DefaultMutableTreeNode node){
|
||||
parent.add(node);
|
||||
DefaultTreeModel model = (DefaultTreeModel) getModel();
|
||||
model.reload(parent);
|
||||
//--->>
|
||||
TreePath path = new TreePath(model.getPathToRoot(node)); //брать путь к узлу так и только так.иначе не работает.!!
|
||||
setSelectionPath(path);
|
||||
//scrollPathToVisible(path);
|
||||
}
|
||||
public void RemoveNode(DefaultMutableTreeNode node){
|
||||
if (node.getParent()!=null) {
|
||||
DefaultTreeModel model = (DefaultTreeModel) getModel();
|
||||
model.removeNodeFromParent(node);
|
||||
}
|
||||
}
|
||||
public void RefreshNode(DefaultMutableTreeNode node){
|
||||
DefaultTreeModel model = (DefaultTreeModel) getModel();
|
||||
model.reload(node);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user