Package org.hxzon.netprotocol.ui.javafx.parse

Source Code of org.hxzon.netprotocol.ui.javafx.parse.PacketDisplay_2

package org.hxzon.netprotocol.ui.javafx.parse;

import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.SplitPane;
import javafx.scene.web.WebView;

import org.hxzon.javafx.layout.simple.SimplePane;
import org.hxzon.netprotocol.packet.Packet;
import org.hxzon.util.BytesUtil;

public class PacketDisplay_2 extends SplitPane {

//    private static final Font font = Font.font("Courier New", 12);
    private static final int byteSplitLen = BytesUtil.HtmlWordSplit.length();
    private static final int lineSplitLen = BytesUtil.HtmlLineSplit.length();

    private final PacketTreeView packetTreeView;
    private final WebView indexPane;
    private final WebView dataPane;
    private byte[] dataByte;
    private String dataString;

    public PacketDisplay_2() {
        packetTreeView = new PacketTreeView();
        //
        indexPane = new WebView();
        indexPane.setPrefWidth(80);
        indexPane.setPrefHeight(1000);
        //
        dataPane = new WebView();
        dataPane.setPrefWidth(500);
        dataPane.setPrefHeight(1000);
        //
        SimplePane messagePane = new SimplePane(true);
        messagePane.setStyle("-fx-background-color:red");
        messagePane.getChildren().add(indexPane);
        messagePane.getChildren().add(dataPane);
        //
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(messagePane);
        getItems().addAll(scrollPane, packetTreeView);
        //
        packetTreeView.getSelectionModel().selectedItemProperty().addListener(new InvalidationListener() {

            @Override
            public void invalidated(Observable arg0) {
                PacketTreeItem node = (PacketTreeItem) packetTreeView.getSelectionModel().getSelectedItem();
                if (node == null) {
                    return;
                }
                //
                int charLenForByte = byteSplitLen + 2;
                int offset = node.getOffset();
                int len = node.getLen();
                int end = offset + len;
                offset = offset * charLenForByte;
                end = end * charLenForByte;
                offset += offset / (16 * charLenForByte) * lineSplitLen;
                end += end / (16 * charLenForByte) * lineSplitLen;
                //fix bug when len=0 make end=offset
                if (end > offset) {
                    end -= byteSplitLen;
                }
                if (dataByte != node.getBytes()) {
                    dataByte = node.getBytes();
                    dataString = BytesUtil.toDisplayHexString(dataByte, true);
                    setText(indexPane, BytesUtil.toIndex(dataByte, true));
                }
                StringBuffer detailText = new StringBuffer(dataString);
                detailText.insert(end, "</span>");
                detailText.insert(offset, "<span style='background:#bce2ec'>");
                setText(dataPane, detailText.toString());
            }

        });
//        .addListener(new ChangeListener<TreeItem<Object>>() {
//
//            @Override
//            public void changed(ObservableValue<? extends TreeItem<Object>> ov, TreeItem<Object> old_val, TreeItem<Object> new_val) {
//                PacketTreeItem node = (PacketTreeItem) new_val;
//                Packet packet = (Packet) ((PacketTreeItem) packetTreeView.getRoot()).getData();
//                //
//                int charLenForByte = byteSplitLen + 2;
//                int offset = node.getOffset();
//                int len = node.getLen();
//                int end = offset + len;
//                offset = offset * charLenForByte;
//                end = end * charLenForByte;
//                offset += offset / (16 * charLenForByte) * lineSplitLen;
//                end += end / (16 * charLenForByte) * lineSplitLen;
//                //fix bug when len=0 make end=offset
//                if (end > offset) {
//                    end -= byteSplitLen;
//                }
//                StringBuffer detailText = new StringBuffer(BytesUtil.toDisplayHexString(packet.getData(), true));
//                detailText.insert(end, "</span>");
//                detailText.insert(offset, "<span style='background:#bce2ec'>");
//                hexPane.getEngine().loadContent(detailText.toString());
//            }
//
//        });
    }

    public void updateData(Packet packet) {
        if (packet == null) {
            indexPane.getEngine().loadContent("");
            dataPane.getEngine().loadContent("");
            packetTreeView.updateData(null);
        } else {
            packetTreeView.updateData(packet);
            packetTreeView.getSelectionModel().select(0);
        }
    }

    private void setText(WebView webView, String content) {
        webView.getEngine().loadContent("<div style=\"font-family:'Courier New';\">" + content + "</div>");
    }

}
TOP

Related Classes of org.hxzon.netprotocol.ui.javafx.parse.PacketDisplay_2

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.