no message

This commit is contained in:
2024-10-09 20:35:18 +03:00
parent e5f4ee40aa
commit 63b7f7dfd2
183 changed files with 443 additions and 266 deletions

View File

@@ -0,0 +1,39 @@
package Common.Visual.Trees;
import Common.CurrentAnchestor;
import Common.Utils.CommonUtils;
import Common.Visual.DataControl_OLD;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
public class DataTree extends StyledTree implements DataControl_OLD {
public DataTree(DefaultMutableTreeNode root_in) {
super(root_in);
}
public void ChangeCurrentObject(DefaultMutableTreeNode node) {
if (getCurrent() != null)
CurrentAnchestor.set(getCurrent(), node.getUserObject());
}
@Override
public void ShowCurrentObject() throws Exception {
}
@Override
public void ShowNoCurrentObject() throws Exception {
}
@Override
public void SelectionAction(TreePath path) {
ChangeCurrentObject((DefaultMutableTreeNode) path.getLastPathComponent());
try {
ShowCurrentObject();
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
public void SelectNodeByCriteria(Object criteria) {
EventsOff();
TreePath res = ShowNodeByCriteria(criteria);
setSelectionPath(res);
ChangeCurrentObject((DefaultMutableTreeNode) res.getLastPathComponent());
EventsOn();
}
}

View File

@@ -0,0 +1,27 @@
package Common.Visual.Trees;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
import ProjectData.SapforData.FileObjectWithMessages;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class GraphTreeCellRenderer extends StyledTreeCellRenderer {
public java.awt.Component getTreeCellRendererComponent(
JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof FileObjectWithMessages) {
FileObjectWithMessages target = (FileObjectWithMessages) o;
setIcon(CommonUtils.getIcon(target.ImageKey()));
setFont(CommonUI.getTheme().Fonts.get(target.getFont()));
} else {
setIcon(null);
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
}
setForeground(tree.getForeground());
return this;
}
}

View File

@@ -0,0 +1,18 @@
package Common.Visual.Trees;
import Common.CurrentAnchestor;
import Common.Visual.Selectable;
import javax.swing.tree.DefaultMutableTreeNode;
public class SelectableTree extends DataTree {
public SelectableTree(DefaultMutableTreeNode root_in) {
super(root_in);
}
@Override
public void LeftMouseAction1() {
Object element = CurrentAnchestor.get(getCurrent());
if ((element instanceof Selectable)) {
((Selectable) element).SwitchSelection();
updateUI();
}
}
}

View File

@@ -0,0 +1,26 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common.Visual.Selectable;
import Common.Visual.Fonts.VisualiserFonts;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class SelectionTreeCellRenderer extends StyledTreeCellRenderer {
public java.awt.Component getTreeCellRendererComponent(
JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof Selectable) {
Selectable selectable = (Selectable) o;
setText(selectable.getSelectionText());
setIcon(selectable.GetSelectionIcon());
} else {
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
setIcon(null);
}
setForeground(tree.getForeground());
return this;
}
}

View File

@@ -0,0 +1,167 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common_old.UI.Menus.GraphMenu;
import Common.Visual.Themes.ThemeElement;
import Common.Visual.Fonts.VisualiserFonts;
import Common_old.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(CommonUI.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(CommonUI.getTheme().trees_background);
setForeground(CommonUI.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);
}
}

View File

@@ -0,0 +1,15 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common.Visual.Themes.ThemeElement;
import javax.swing.tree.DefaultTreeCellRenderer;
public class StyledTreeCellRenderer extends DefaultTreeCellRenderer implements ThemeElement {
public StyledTreeCellRenderer() {
applyTheme();
}
@Override
public void applyTheme() {
setBackgroundNonSelectionColor(CommonUI.getTheme().trees_background);
setBackgroundSelectionColor(CommonUI.getTheme().selection_background);
}
}

View File

@@ -0,0 +1,30 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common.Visual.ControlForm;
import java.awt.*;
public class TreeForm<C extends StyledTree> extends ControlForm<C> {
public TreeForm(Class<C> class_in) {
super(class_in);
}
//временно, чтобы не затрагивать коды раньше времени.
public StyledTree getTree() {
return control;
}
@Override
protected void refresh() {
getTree().revalidate();
getTree().repaint();
}
@Override
public void Show() {
super.Show();
content.add(scroll, BorderLayout.CENTER);
content.updateUI();
}
@Override
public void Clear() {
super.Clear();
CommonUI.Clear(content);
}
}

View File

@@ -0,0 +1,13 @@
package Common.Visual.Trees;
public enum TreeRenderers {
RendererUndefined,
//-
RendererGraph,
RendererFile,
RendererRemoteFile,
RendererVersion,
RendererRule,
RendererAttachment,
RendererSapforVersion,
RendererSelection,
}