123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package holeg.ui.view.window;
- import holeg.model.Holon;
- import holeg.model.HolonObject;
- import holeg.preferences.ColorPreference;
- import holeg.preferences.ImagePreference;
- import holeg.ui.controller.Control;
- import holeg.ui.view.image.Import;
- import holeg.utility.listener.WindowClosingListener;
- import holeg.utility.math.decimal.Format;
- import javax.swing.*;
- import javax.swing.tree.DefaultMutableTreeNode;
- import javax.swing.tree.DefaultTreeCellRenderer;
- import java.awt.*;
- import java.util.logging.Logger;
- public class Outliner extends JFrame {
- private static final Logger log = Logger.getLogger(Outliner.class.getName());
- private final Control control;
- JTabbedPane tabbedPane = new JTabbedPane();
- JPanel listPanel = new JPanel(new BorderLayout());
- JPanel statePanel = new JPanel(new BorderLayout());
- Runnable update = this::update;
- private static final String ConsumptionFontHTMLBracket = "<font bgcolor='#"
- + Integer.toHexString(ColorPreference.Energy.Consumption.getRGB()).substring(2) + "'>";
- private static final String ProductionFontHTMLBracket = "<font bgcolor='#"
- + Integer.toHexString(ColorPreference.Energy.Production.getRGB()).substring(2) + "'>";
- private static final String FontClosingBracket = "</font> ";
- public Outliner(JFrame parentFrame, 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("State", statePanel);
- }
- public void update() {
- 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();
- for (Holon dNet : control.getModel().holons) {
- DefaultMutableTreeNode network = new DefaultMutableTreeNode("Holon");
- for(HolonObject hObject : dNet.holonObjects){
- DefaultMutableTreeNode holonObjectNode = createColoredTreeNodeFromHolonObject(hObject);
- network.add(holonObjectNode);
- }
- topStatePanel.add(network);
- }
- 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));
- DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
- renderer.setClosedIcon(ClosedIcon);
- renderer.setOpenIcon(OpenIcon);
- renderer.setLeafIcon(LeafIcon);
- t.setCellRenderer(renderer);
- }
- private DefaultMutableTreeNode createColoredTreeNodeFromHolonObject(HolonObject obj){
- String context = "<html>" + obj.getName() + "<font bgcolor='#"
- + Integer.toHexString(ColorPreference.HolonObject.getStateColor(obj.getState()).getRGB()).substring(2) + "'>" +
- " " + obj.getState().toString() + FontClosingBracket
- + ConsumptionFontHTMLBracket + Format.doubleTwoPlaces(obj.getConsumption()) + FontClosingBracket
- + ProductionFontHTMLBracket + Format.doubleTwoPlaces(obj.getProduction()) + FontClosingBracket
- + "</html>";
- return new DefaultMutableTreeNode(context);
- }
- }
|