/* * RomRaider Open-Source Tuning, Logging and Reflashing * Copyright (C) 2006-2017 RomRaider.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.romraider.swing; import java.util.HashMap; import java.util.Map; import java.util.Vector; import javax.swing.*; import javax.swing.GroupLayout.Alignment; import javax.swing.LayoutStyle.ComponentPlacement; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import com.romraider.Settings; import com.romraider.maps.Scale; import com.romraider.maps.Table; import com.romraider.maps.TableSwitch; public class TablePropertyPanel extends javax.swing.JPanel { private static final long serialVersionUID = -5817685772039277602L; public TablePropertyPanel(Table table) { initComponents(); setVisible(true); category.setText(table.getCategory()); int dim; if (Settings.TABLE_SWITCH == table.getType()) { dim = 1; storageSize.setText("switch"); scrollPane.setViewportView(populateScalesTable( ((TableSwitch) table).getSwitchStates())); } else { if (Settings.STORAGE_TYPE_FLOAT == table.getStorageType()) { storageSize.setText("float"); } else if (table.getStorageType() == Settings.STORAGE_TYPE_MOVI20) { storageSize.setText("int20"); } else if (table.getStorageType() == Settings.STORAGE_TYPE_MOVI20S) { storageSize.setText("int28"); } else { String dataType; if (table.isSignedData()) { dataType = "int"; } else { dataType = "uint"; } storageSize.setText(dataType + (table.getStorageType() * 8)); } dim = table.getType(); scrollPane.setViewportView(populateScalesTable(table.getScales())); } tableName.setText(String.format("%s (%dD)", table.getName(), dim)); storageAddress.setText("0x" + Integer.toHexString(table.getStorageAddress())); if (table.getEndian() == Settings.ENDIAN_BIG) { endian.setText("big"); } else { endian.setText("little"); } description.setText(table.getDescription()); if (table.getUserLevel() == 1) { userLevel.setText("Beginner"); } else if (table.getUserLevel() == 2) { userLevel.setText("Intermediate"); } else if (table.getUserLevel() == 3) { userLevel.setText("Advanced"); } else if (table.getUserLevel() == 4) { userLevel.setText("All"); } else if (table.getUserLevel() == 5) { userLevel.setText("Debug"); } logIDscrollPane.setViewportView(populateLogParamTable(table.getLogParamString())); } // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { lblTable = new javax.swing.JLabel(); tableName = new javax.swing.JLabel(); lblCategory = new javax.swing.JLabel(); category = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); lblStorageAddress = new javax.swing.JLabel(); lblStorageSize = new javax.swing.JLabel(); lblEndian = new javax.swing.JLabel(); endian = new javax.swing.JLabel(); storageSize = new javax.swing.JLabel(); storageAddress = new javax.swing.JLabel(); jPanel3 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); description = new javax.swing.JTextArea(); jLabel5 = new javax.swing.JLabel(); userLevel = new javax.swing.JLabel(); scrollPane = new JScrollPane(); logIDscrollPane = new JScrollPane(); setAutoscrolls(true); setFont(new java.awt.Font("Tahoma", 0, 12)); setInheritsPopupMenu(true); lblTable.setText("Table:"); lblTable.setFocusable(false); tableName.setText("Tablename (3D)"); tableName.setFocusable(false); lblCategory.setText("Category:"); lblCategory.setFocusable(false); category.setText("Category"); category.setFocusable(false); jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder("Conversions"))); GroupLayout jPanel1Layout = new GroupLayout(jPanel1); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(Alignment.LEADING) .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 170, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(Alignment.LEADING) .addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE) ); jPanel1.setLayout(jPanel1Layout); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Storage")); lblStorageAddress.setText("Storage Address:"); lblStorageAddress.setFocusable(false); lblStorageSize.setText("Data Type:"); lblStorageSize.setFocusable(false); lblEndian.setText("Endian:"); lblEndian.setFocusable(false); endian.setText("little"); endian.setFocusable(false); storageSize.setText("unkn"); storageSize.setFocusable(false); storageAddress.setText("0x00"); storageAddress.setFocusable(false); GroupLayout jPanel2Layout = new GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(lblStorageAddress) .addComponent(lblStorageSize) .addComponent(lblEndian)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(endian) .addComponent(storageSize) .addComponent(storageAddress)) .addContainerGap(28, Short.MAX_VALUE)) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(lblStorageSize) .addComponent(storageSize)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(lblStorageAddress) .addComponent(storageAddress)) .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(lblEndian) .addComponent(endian)) .addContainerGap(37, Short.MAX_VALUE)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Description")); jScrollPane1.setBorder(null); description.setBackground(new java.awt.Color(236, 233, 216)); description.setColumns(20); description.setEditable(false); description.setFont(new java.awt.Font("Tahoma", 0, 11)); description.setLineWrap(true); description.setRows(5); description.setText("Description"); description.setWrapStyleWord(true); description.setBorder(null); description.setOpaque(false); description.setRequestFocusEnabled(false); jScrollPane1.setViewportView(description); GroupLayout jPanel3Layout = new GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 102, Short.MAX_VALUE) .addContainerGap()) ); jLabel5.setText("User Level:"); userLevel.setText("Beginner"); lblLogId = new JLabel("Log Param:"); GroupLayout layout = new GroupLayout(this); layout.setHorizontalGroup( layout.createParallelGroup(Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(Alignment.LEADING) .addComponent(lblCategory) .addComponent(lblTable) .addComponent(lblLogId)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(Alignment.TRAILING) .addComponent(tableName, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE) .addComponent(category, GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE) .addComponent(logIDscrollPane, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 300, 300))) .addGroup(layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(userLevel, GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE)) .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE) .addComponent(jPanel2, GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE) .addComponent(jPanel3, GroupLayout.DEFAULT_SIZE, 430, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(tableName) .addComponent(lblTable)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(lblCategory) .addComponent(category)) .addGap(6) .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(jLabel5) .addComponent(userLevel)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(Alignment.BASELINE) .addComponent(lblLogId) .addComponent(logIDscrollPane, GroupLayout.PREFERRED_SIZE, 75, GroupLayout.PREFERRED_SIZE)) .addGap(8) .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(jPanel2, GroupLayout.PREFERRED_SIZE, 89, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(jPanel3, GroupLayout.PREFERRED_SIZE, 93, GroupLayout.PREFERRED_SIZE) .addGap(23)) ); this.setLayout(layout); }// </editor-fold>//GEN-END:initComponents private javax.swing.JLabel category; private javax.swing.JTextArea description; private javax.swing.JLabel endian; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel lblCategory; private javax.swing.JLabel lblEndian; private javax.swing.JLabel lblStorageAddress; private javax.swing.JLabel lblStorageSize; private javax.swing.JLabel lblTable; private javax.swing.JLabel storageAddress; private javax.swing.JLabel storageSize; private javax.swing.JLabel tableName; private javax.swing.JLabel userLevel; private JScrollPane scrollPane; private JLabel lblLogId; private JScrollPane logIDscrollPane; private JTable populateScalesTable(Vector<Scale> scales) { final ScalesTableModel scalesModel = new ScalesTableModel(); scalesModel.setScalesList(scales); return createScalesTable(scalesModel); } private JTable populateScalesTable(Map<String, byte[]> switchStates) { final SwitchStateTableModel scalesModel = new SwitchStateTableModel(); scalesModel.setScalesList(switchStates); return createScalesTable(scalesModel); } private JTable createScalesTable(DefaultTableModel tableModel) { final JTable table = new JTable(tableModel); table.setAutoCreateRowSorter(false); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(true); table.setFillsViewportHeight(true); return table; } private JTable populateLogParamTable(String logParams) { final Map<String, String> paramMap = new HashMap<String, String>(); final String[] paramEntries = logParams.split(", "); for (String entry : paramEntries) { final String[] entries = entry.split(":"); if(!paramMap.containsKey(entries[0])){ paramMap.put(entries[0], entries.length > 1 ? entries[1] : "n/a"); } } final ParameterIdsTableModel tableModel = new ParameterIdsTableModel(); tableModel.setParameterList(paramMap); final JTable table = new JTable(tableModel); TableColumn column = null; for (int i = 0; i < table.getColumnCount(); i++) { column = table.getColumnModel().getColumn(i); if (i == 0) { column.setPreferredWidth(240); } else { column.setPreferredWidth(80); } } table.setAutoCreateRowSorter(false); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(true); table.setFillsViewportHeight(true); return table; } }