123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- package holeg.ui.view.window;
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.util.ArrayList;
- import java.util.logging.Logger;
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTabbedPane;
- import javax.swing.JTree;
- import javax.swing.event.TreeModelEvent;
- import javax.swing.event.TreeModelListener;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeCellRenderer;
- import holeg.model.AbstractCanvasObject;
- import holeg.model.Edge;
- import holeg.preferences.ColorPreference;
- import holeg.preferences.ImagePreference;
- import holeg.ui.controller.Control;
- import holeg.ui.model.MinimumNetwork;
- import holeg.ui.model.Model;
- import holeg.utility.image.Import;
- import holeg.utility.listener.WindowClosingListener;
- public class Outliner extends JFrame {
- private static final Logger log = Logger.getLogger(Outliner.class.getName());
- Control control;
- JTabbedPane tabbedPane = new JTabbedPane();
- JPanel listPanel = new JPanel(new BorderLayout());
- JPanel statePanel = new JPanel(new BorderLayout());
- ArrayList<MinimumNetwork> list;
- Runnable update = this::update;
- public Outliner(JFrame parentFrame, Model model, Control control) {
- setBounds(0, 0, 400, parentFrame.getHeight());
- this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
- this.setTitle("Outliner");
- setLocationRelativeTo(parentFrame);
- this.setVisible(true);
- this.control = control;
- update();
- this.getContentPane().add(tabbedPane);
- this.addWindowListener((WindowClosingListener) e -> {
- control.OnCanvasUpdate.removeListener(update);
- });
- control.OnCanvasUpdate.addListener(update);
- tabbedPane.addTab("List", listPanel);
- tabbedPane.addTab("State", statePanel);
- }
- public void update() {
- // tabbedPane.removeAll();
- listPanel.removeAll();
- statePanel.removeAll();
- DefaultMutableTreeNode topListPanel = new DefaultMutableTreeNode();
- DefaultMutableTreeNode objects = new DefaultMutableTreeNode("HolonObjects");
- DefaultMutableTreeNode switches = new DefaultMutableTreeNode("Switches");
- DefaultMutableTreeNode nodes = new DefaultMutableTreeNode("Nodes");
- DefaultMutableTreeNode cables = new DefaultMutableTreeNode("Cable");
- topListPanel.add(objects);
- topListPanel.add(switches);
- topListPanel.add(nodes);
- topListPanel.add(cables);
- DefaultMutableTreeNode topStatePanel = new DefaultMutableTreeNode();
- Model model = control.getModel();
- model.getCanvas().getAllSwitchObjectsRecursive().forEach(hS -> {
- switches.add(new DefaultMutableTreeNode(hS.getName()));
- });
- //TODO(Tom2022-01-13): Fix Outliner
- // for (DecoratedNetwork dNet : decoratedState.getNetworkList()) {
- // DefaultMutableTreeNode network = new DefaultMutableTreeNode("Network");
- // if (!dNet.getConsumerList().isEmpty() || !dNet.getConsumerSelfSuppliedList().isEmpty()) {
- // DefaultMutableTreeNode consumer = new DefaultMutableTreeNode("ConsumerList");
- // for (Consumer con : dNet.getConsumerList()) {
- // DefaultMutableTreeNode consumerNode = new ColoredTreeNode(con.toString(), con.getState().toString(),
- // ColorPreference.HolonObject.getStateColor(con.getState()));
- // consumer.add(consumerNode);
- // objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
- // }
- // for (Consumer con : dNet.getConsumerSelfSuppliedList()) {
- // DefaultMutableTreeNode consumerNode = new DefaultMutableTreeNode(con.toString() + con.getState());
- // consumer.add(consumerNode);
- // objects.add(new DefaultMutableTreeNode(con.getModel().getName()));
- // }
- // network.add(consumer);
- // }
- // if (!dNet.getSupplierList().isEmpty()) {
- // DefaultMutableTreeNode supplier = new DefaultMutableTreeNode("SupplierList");
- // for (Supplier sup : dNet.getSupplierList()) {
- // supplier.add(new DefaultMutableTreeNode(sup.toString()));
- // objects.add(new DefaultMutableTreeNode(sup.getModel().getName()));
- // }
- // network.add(supplier);
- // }
- // for (Passiv pas : dNet.getPassivNoEnergyList()) {
- // objects.add(new DefaultMutableTreeNode(pas.getModel().getName()));
- // }
- // topStatePanel.add(network);
- // for (Edge cable : dNet.getDecoratedCableList()) {
- // cables.add(new DefaultMutableTreeNode(cable.toString()));
- // }
- // }
- //
- // for (Edge cable : decoratedState.getLeftOverEdges()) {
- // cables.add(new DefaultMutableTreeNode(cable.toString()));
- // }
- JTree listTree = new JTree(topListPanel);
- signIconsForTree(listTree);
- listTree.setRootVisible(false);
- for (int i = 0; i < listTree.getRowCount(); i++) {
- listTree.expandRow(i);
- }
- JScrollPane listScroller = new JScrollPane(listTree);
- listPanel.add(listScroller);
- JTree stateTree = new JTree(topStatePanel);
- signIconsForTree(stateTree);
- stateTree.setRootVisible(false);
- for (int i = 0; i < stateTree.getRowCount(); i++) {
- stateTree.expandRow(i);
- }
- statePanel.add(new JScrollPane(stateTree));
- listPanel.revalidate();
- ;
- statePanel.revalidate();
- listPanel.repaint();
- }
- private void signIconsForTree(JTree t) {
- ImageIcon ClosedIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Closed, 9, 9));
- ImageIcon OpenIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Open, 9, 9));
- ImageIcon LeafIcon = new ImageIcon(Import.loadImage(ImagePreference.Button.Outliner.Leaf, 9, 9));
- if (ClosedIcon != null && OpenIcon != null && LeafIcon != null) {
- DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
- renderer.setClosedIcon(ClosedIcon);
- renderer.setOpenIcon(OpenIcon);
- renderer.setLeafIcon(LeafIcon);
- t.setCellRenderer(renderer);
- }
- }
- class MyTreeModelListener implements TreeModelListener {
- @Override
- public void treeNodesChanged(TreeModelEvent tmE) {
- log.info("treeNodesChanged");
- }
- @Override
- public void treeNodesInserted(TreeModelEvent tmE) {
- log.info("treeNodesInserted");
- }
- @Override
- public void treeNodesRemoved(TreeModelEvent tmE) {
- log.info("treeNodesRemoved");
- }
- @Override
- public void treeStructureChanged(TreeModelEvent tmE) {
- log.info("treeStructureChanged");
- }
- }
- class ColoredTreeNode extends DefaultMutableTreeNode {
- private Color color;
- public ColoredTreeNode(String string, String state, Color color) {
- // "<html>Some text <font color='red'>" + "bla" + "some text in
- // red</font></html>"
- // Integer.toHexString(color.getRGB()).substring(2)
- // String c = string + "<html><font bgcolor='#132122'>" + state
- // +"</font></html>";
- super(("<html>" + string + "<font bgcolor='#" + Integer.toHexString(color.getRGB()).substring(2) + "'>"
- + state + "</font></html>"));
- // this.color = color;
- }
- public Color getColor() {
- return color;
- }
- public void setColor(Color color) {
- this.color = color;
- }
- }
- class AbstractCpsObjectInfo {
- private AbstractCanvasObject aCps;
- AbstractCpsObjectInfo(AbstractCanvasObject aCps) {
- this.aCps = aCps;
- }
- @Override
- public String toString() {
- return aCps.getName() + " Id:" + aCps.getId();
- }
- public AbstractCanvasObject getAbstractCpsObject() {
- return aCps;
- }
- }
- }
|