public ViewPane(GameSessionViewer gsv) { _gameSessionViewer = gsv; this.setLayout(_layout); GridBagConstraints cons = new GridBagConstraints(); cons.insets = new Insets(5, 5, 5, 5); cons.weightx = 0.5; cons.gridy = 0; cons.gridheight = 5; cons.weighty = 0.95; cons.fill = GridBagConstraints.BOTH; _packetTableModel = new PacketTableModel(); _packetTable = new JTable(_packetTableModel); _packetTable.addMouseListener(new PacketTableMouseListener()); _packetTable.setDefaultRenderer(Object.class, new PacketTableRenderer(_packetTableModel)); _packetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); _packetTable.getSelectionModel().addListSelectionListener(new PacketSelectionListener()); _packetTable.getColumnModel().getColumn(0).setMaxWidth(35); _packetTable.getColumnModel().getColumn(1).setMaxWidth(50); _packetTable.getColumnModel().getColumn(2).setMaxWidth(90); _packetTable.getColumnModel().getColumn(3).setMaxWidth(45); JScrollPane scrollPane = new JScrollPane(_packetTable); this.add(scrollPane, cons); cons.fill = GridBagConstraints.BOTH; // cons.anchor = GridBagConstraints.NORTH; cons.weightx = 0.5; cons.weighty = 0.5; cons.gridx = 1; cons.gridy = 1; cons.gridheight = 1; _hexDumpArea = new JTextPane(); _hexDumpArea.setPreferredSize(new Dimension(100, 317)); // _hexDumpArea.setDoubleBuffered(true); _hexStyledDoc = (DefaultStyledDocument) _hexDumpArea.getStyledDocument(); addStylesToHexDump(_hexStyledDoc); // Font font = new Font("Monospaced", Font.PLAIN, 12); // _hexDumpArea.setFont(font); // _hexDumpArea.setRows(18); // _hexDumpArea.setColumns(20); JScrollPane hexDumpScrollPane = new JScrollPane( _hexDumpArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); this.add(hexDumpScrollPane, cons); JPanel smallPane = new JPanel(); smallPane.setLayout(_layout); cons.fill = GridBagConstraints.NONE; cons.weightx = 0.05; cons.weighty = 0.1; cons.gridx = 0; cons.gridy = 2; cons.gridheight = 1; JLabel label = new JLabel("Format:"); _packetFormat = new JTextField(); _packetFormat.setEditable(false); cons.anchor = GridBagConstraints.WEST; smallPane.add(label, cons); cons.gridx = 1; cons.weightx = 0.95; cons.fill = GridBagConstraints.HORIZONTAL; smallPane.add(_packetFormat, cons); cons.weightx = 0.5; this.add(smallPane, cons); cons.fill = GridBagConstraints.BOTH; cons.weightx = 0.5; cons.weighty = 0.4; cons.gridx = 1; cons.gridy = 4; cons.gridheight = 1; _packetViewTableModel = new PacketViewTableModel(null); _packetViewTable = new JXTreeTable(_packetViewTableModel); _packetViewTable.setSelectionModel(new DefaultListSelectionModel()); _packetViewTable .getSelectionModel() .addListSelectionListener(new PartSelectionListener(_packetViewTable)); _packetViewTable.setDefaultRenderer(Object.class, new IconTableRenderer()); _packetViewTable.addMouseListener(new JTableButtonMouseListener(_packetViewTable)); _packetViewTable.setTreeCellRenderer(new PacketViewTreeRenderer()); JScrollPane packetViewScrollPane = new JScrollPane(_packetViewTable); this.add(packetViewScrollPane, cons); cons.fill = GridBagConstraints.BOTH; cons.anchor = GridBagConstraints.NORTH; cons.gridx = 1; cons.gridy = 0; cons.weighty = 0.1; cons.gridwidth = 1; _detailsPanel = new SessionDetailPanel(_gameSessionViewer.getSession()); this.add(_detailsPanel, cons); this.displaySession(); }
public void updateCurrentPacket(boolean forced) { if (!forced && _currentSelectedPacket == _packetTable.getSelectedRow()) return; /*try { DataStructure gp = _gameSessionViewer.getPacket(_currentSelectedPacket); if(gp!= null) gp.setViewed(false); } catch (IndexOutOfBoundsException e) { }*/ _currentSelectedPacket = _packetTable.getSelectedRow(); // reset the selected part as we selected another packet _currentSelectedPart = null; DataPacket gp = _gameSessionViewer.getPacket(_currentSelectedPacket); // gp.setViewed(true); // System.out.println("Selected row/packet: "+_table.getSelectedRow()); _hexDumpArea.setText(""); if (gp.getPacketFormat() != null && gp.isValid()) { _packetFormat.setText(gp.getPacketFormat().getPartsStr()); // colorfull hex dump :P // opcode if (gp.getPacketId() != null) { for (IdPart part : gp.getPacketId().getParts()) { int bytes = part.getType().getTypeByteNumber(); for (int i2 = 0; i2 < bytes; i2++) { addStyledText( Util.zeropad(Long.toHexString(part.getValue() << (8 * i2) & 0xff), 2).toUpperCase(), "op"); if (i2 < bytes - 1) addStyledText(" ", "op"); } addStyledText(" ", "base"); } } // chksum if (gp.getProtocol().getChecksumSize() > 0) { int size = gp.getProtocol().getChecksumSize(); for (int i = 1; i < size + 1; i++) { addStyledText( Util.zeropad(Integer.toHexString(gp.getIdData()[i] & 0xff), 2).toUpperCase(), "chk"); if (i < size) addStyledText(" ", "chk"); } addStyledText(" ", "base"); } // parsed packet parts for (ValuePart part : gp.getValuePartList()) { addStyledText(Util.rawHexDump(part.getBytes()), part.getType().getName(), true); addStyledText(" ", "base"); } // unparsed data (if any) addStyledText(Util.rawHexDump(gp.getUnparsedData()), "base"); this.addLineBreaksToHexDump(gp.getIdData(), gp.getByteBuffer().array()); int opSize = 0; for (PartType pt : gp.getPacketFormat().getIdParts()) { opSize += pt.getTypeByteNumber() * 3; } DataPartNode root = new DataPartNode(gp.getRootNode(), opSize + gp.getProtocol().getChecksumSize() * 3); _packetViewTableModel.setRoot(root); _packetViewTable.revalidate(); _packetViewTable.expandAll(); } else { // clear the format _packetFormat.setText(""); // dump everything _hexDumpArea.setText(""); // if we know the opcode but the format was invalid still show the opcode if (gp.getFormat() != null) { for (IdPart part : gp.getPacketId().getParts()) { int bytes = part.getType().getTypeByteNumber(); for (int i2 = 0; i2 < bytes; i2++) { addStyledText( Util.zeropad(Long.toHexString(part.getValue() << (8 * i2) & 0xff), 2).toUpperCase(), "op"); if (i2 < bytes - 1) addStyledText(" ", "op"); } addStyledText(" ", "base"); } } ViewPane.this.addStyledText(Util.rawHexDump(gp.getData()), "base"); this.addLineBreaksToHexDump(gp.getIdData(), gp.getByteBuffer().array()); // no part for u _packetViewTableModel.setRoot(null); } }