Skip to content

Commit

Permalink
Replace HEX viewer library by JHexView
Browse files Browse the repository at this point in the history
Bump java version to 1.8, because JHexView use 1.8 as target
  • Loading branch information
Mingun committed Feb 23, 2020
1 parent 59d4ae4 commit d09b578
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 47 deletions.
6 changes: 2 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '7.x', '8.x', '9.x', '10.x', '11.x', '12.x', '13.x' ]
java: [ '8.x', '9.x', '10.x', '11.x', '12.x', '13.x' ]
steps:
- uses: actions/checkout@v1
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
with:
java-version: ${{ matrix.java }}
- name: Build with Maven
run: |
mvn install:install-file -Dfile=lib/HexLib.jar -DgroupId=at.HexLib -DartifactId=HexLib -Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=./lib
mvn -B package --file pom.xml
run: mvn -B package --file pom.xml
22 changes: 2 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,12 @@ access to it in a nice, easy-to-comprehend API.
## Build
Install java, maven and, if on windows, git-bash

First, install dependencies into local maven repository:

```bash
mvn install:install-file -Dfile=lib/HexLib.jar -DgroupId=at.HexLib -DartifactId=HexLib -Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=./lib
```

Then build project as usual:
Run in console:

```bash
mvn install
```

If you got error:
```bash
[WARNING] The POM for kaitai_struct_visualizer_java:HexLib:jar:0.0.0 is missing, no dependency information available
```
it means, that you already tried to build project without success and maven cache
unsuccessful state of dependency resolution. Just add switch `-U` to maven invocation
to force maven re-check dependencies:

```bash
$ mvn -U install
```

## Licensing

This GUI vis tool project itself is copyright (C) 2016-2019 Kaitai
Expand All @@ -77,4 +59,4 @@ Vis tool depends on the following libraries:
* [kaitai_struct_compiler](https://github.com/kaitai_struct_compiler) — GPLv3+ license
* [fastparse](http://www.lihaoyi.com/fastparse/) — MIT license
* [snakeyaml](https://bitbucket.org/asomov/snakeyaml) — Apache 2.0 license
* [HexLib](http://hexedit-lib.sourceforge.net/)FreeBSD license
* [JHexView](https://github.com/Mingun/JHexView)LGPL-2.1 license
16 changes: 9 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,9 @@
<version>0.8</version>
</dependency>
<dependency>
<groupId>at.HexLib</groupId>
<artifactId>HexLib</artifactId>
<version>0.0.0</version>
<groupId>ru.mingun</groupId>
<artifactId>JHexView</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.github.olivergondza</groupId>
Expand All @@ -63,8 +63,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
Expand Down Expand Up @@ -112,8 +112,10 @@
</snapshots>
</repository>
<repository>
<id>local-jars</id>
<url>file://${project.basedir}/lib</url>
<!--JHexView-->
<id>bintray-mingun-maven</id>
<name>bintray</name>
<url>https://dl.bintray.com/mingun/maven</url>
</repository>
</repositories>

Expand Down
60 changes: 44 additions & 16 deletions src/main/java/io/kaitai/struct/visualizer/VisualizerPanel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.kaitai.struct.visualizer;

import java.awt.Point;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
Expand All @@ -9,9 +10,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import at.HexLib.library.HexLib;
import at.HexLib.library.HexLibSelectionModel;

import io.kaitai.struct.ByteBufferKaitaiStream;
import io.kaitai.struct.CompileLog;
import io.kaitai.struct.KaitaiStream;
Expand All @@ -37,6 +35,9 @@
import javax.swing.JSplitPane;
import javax.swing.JTree;

import tv.porst.jhexview.JHexView;
import tv.porst.jhexview.SimpleDataProvider;

public class VisualizerPanel extends JPanel {
private static final String DEST_PACKAGE = "io.kaitai.struct.visualized";
/**
Expand All @@ -51,9 +52,16 @@ public class VisualizerPanel extends JPanel {
/** Regexp, used to get parameter names from the generated source. */
private static final Pattern PARAMETER_NAME = Pattern.compile(", \\S+ ([^,\\s]+)");

/** Color of hex editor section headers. */
private static final Color HEADER = new Color(0x0000c0);
/** Color of hex data in HEX and ASCII sections. */
private static final Color UNMODIFIED = Color.BLACK;
/** Background color selected hex data in HEX and ASCII sections. */
private static final Color SELECTION = new Color(0xc0c0c0);

private final JTree tree = new JTree();
private final DefaultTreeModel model = new DefaultTreeModel(null);
private final HexLib hexEditor = new HexLib(new byte[0]);
private final JHexView hexEditor = new JHexView();
private final JSplitPane splitPane;

private KaitaiStruct struct;
Expand All @@ -62,6 +70,24 @@ public VisualizerPanel() throws IOException {
super();
JScrollPane treeScroll = new JScrollPane(tree);

hexEditor.setSeparatorsVisible(false);
hexEditor.setBytesPerColumn(1);
hexEditor.setColumnSpacing(8);
hexEditor.setHeaderFontStyle(Font.BOLD);

hexEditor.setFontColorHeader(HEADER);
hexEditor.setFontColorOffsetView(HEADER);

hexEditor.setFontColorHexView1(UNMODIFIED);
hexEditor.setFontColorHexView2(UNMODIFIED);
hexEditor.setFontColorAsciiView(UNMODIFIED);

hexEditor.setSelectionColor(SELECTION);

hexEditor.setBackgroundColorOffsetView(hexEditor.getBackground());
hexEditor.setBackgroundColorHexView(hexEditor.getBackground());
hexEditor.setBackgroundColorAsciiView(hexEditor.getBackground());

splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treeScroll, hexEditor);

tree.setShowsRootHandles(true);
Expand All @@ -79,7 +105,8 @@ public void loadAll(String dataFileName, String ksyFileName) throws Exception {
private void loadStruct() throws IOException {
struct._io().seek(0);
byte[] buf = struct._io().readBytesFull();
hexEditor.setByteContent(buf);
hexEditor.setData(new SimpleDataProvider(buf));
hexEditor.setDefinitionStatus(JHexView.DefinitionStatus.DEFINED);

final DataNode root = new DataNode(0, struct, "[root]");
model.setRoot(root);
Expand Down Expand Up @@ -195,16 +222,17 @@ public void treeWillCollapse(TreeExpansionEvent event) throws ExpandVetoExceptio

@Override
public void valueChanged(TreeSelectionEvent event) {
TreePath path = event.getPath();
if (path.getLastPathComponent() instanceof DataNode) {
DataNode node = (DataNode) path.getLastPathComponent();
if (node.posStart() == null || node.posEnd() == null)
return;
HexLibSelectionModel select = hexEditor.getSelectionModel();
ArrayList<Point> intervals = new ArrayList<>();
intervals.add(new Point(node.posStart(), node.posEnd()));
select.setSelectionIntervals(intervals);
System.out.println(node.posStart() + " - " + node.posEnd());
hexEditor.getSelectionModel().clearSelection();
for (final TreePath path : tree.getSelectionPaths()) {
final Object selected = path.getLastPathComponent();
if (!(selected instanceof DataNode)) continue;

final DataNode node = (DataNode)selected;
final Integer start = node.posStart();
final Integer end = node.posEnd();
if (start == null || end == null) continue;
// Selection in nibbles, so multiply by 2
hexEditor.getSelectionModel().addSelectionInterval(2*start, 2*end-1);
}
}
}
Expand Down

0 comments on commit d09b578

Please sign in to comment.