diff --git a/README.md b/README.md index 0e62fd9..b78a7c6 100755 --- a/README.md +++ b/README.md @@ -81,9 +81,9 @@ Decoder Improved. #### An Improved Hex Editor -Decoder Improved comes bundled with the Delta Hexadecimal Editor, a -swing Hex Editor, developed by the [ExBin](http://www.exbin.org/) -project. Delta provides an improved hex editing experience over the +Decoder Improved comes bundled with the BinEd Hexadecimal Editor, a +swing Hex Editor, developed by the [ExBin](http://bined.exbin.org/) +project. BinEd provides an improved hex editing experience over the built-in decoder's hex editor by allowing easy insertion and removal, highlighting, and Unicode support. diff --git a/build.gradle b/build.gradle index 76a37c7..13b84bf 100755 --- a/build.gradle +++ b/build.gradle @@ -31,9 +31,9 @@ repositories { } dependencies { - compile group: 'org.exbin.deltahex', name: 'deltahex-core', version: '0.1.3' - compile group: 'org.exbin.deltahex', name: 'deltahex-swing', version: '0.1.3' - compile group: 'org.exbin.utils', name: 'exbin-binary_data', version: '0.1.3-20171017.212506-7' + compile group: 'org.exbin.bined', name: 'bined-swing-extended', version: '0.2.0' + compile group: 'org.exbin.bined', name: 'bined-highlight-swing', version: '0.2.0' + compile group: 'org.exbin.auxiliary', name: 'paged_data', version: '0.2.0' compile group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.54' compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' compile 'org.jsoup:jsoup:1.12.1' diff --git a/lib/deltahex-core-0.1.3.jar b/lib/deltahex-core-0.1.3.jar deleted file mode 100644 index 5ab83c0..0000000 Binary files a/lib/deltahex-core-0.1.3.jar and /dev/null differ diff --git a/lib/deltahex-swing-0.1.3.jar b/lib/deltahex-swing-0.1.3.jar deleted file mode 100644 index 22d64e1..0000000 Binary files a/lib/deltahex-swing-0.1.3.jar and /dev/null differ diff --git a/lib/exbin-binary_data-0.1.3-20171017.212506-7.jar b/lib/exbin-binary_data-0.1.3-20171017.212506-7.jar deleted file mode 100644 index d52acb9..0000000 Binary files a/lib/exbin-binary_data-0.1.3-20171017.212506-7.jar and /dev/null differ diff --git a/src/main/trust/nccgroup/decoderimproved/Utils.java b/src/main/trust/nccgroup/decoderimproved/Utils.java index 94442be..5bcbb84 100644 --- a/src/main/trust/nccgroup/decoderimproved/Utils.java +++ b/src/main/trust/nccgroup/decoderimproved/Utils.java @@ -5,11 +5,10 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CodingErrorAction; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.exbin.utils.binary_data.BinaryData; +import org.exbin.auxiliary.paged_data.BinaryData; /** diff --git a/src/main/trust/nccgroup/decoderimproved/components/DecoderSegment.java b/src/main/trust/nccgroup/decoderimproved/components/DecoderSegment.java index f021f3a..0298f16 100644 --- a/src/main/trust/nccgroup/decoderimproved/components/DecoderSegment.java +++ b/src/main/trust/nccgroup/decoderimproved/components/DecoderSegment.java @@ -1,10 +1,10 @@ package trust.nccgroup.decoderimproved.components; -import org.exbin.deltahex.CodeType; -import org.exbin.deltahex.DataChangedListener; -import org.exbin.deltahex.SelectionRange; -import org.exbin.deltahex.swing.CodeArea; -import org.exbin.utils.binary_data.ByteArrayEditableData; +import org.exbin.bined.CodeType; +import org.exbin.bined.DataChangedListener; +import org.exbin.bined.SelectionRange; +import org.exbin.bined.swing.extended.ExtCodeArea; +import org.exbin.auxiliary.paged_data.ByteArrayEditableData; import trust.nccgroup.decoderimproved.CONSTANTS; import trust.nccgroup.decoderimproved.Logger; import trust.nccgroup.decoderimproved.ModificationModeManager; @@ -25,6 +25,8 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; +import org.exbin.bined.RowWrappingMode; +import org.exbin.bined.highlight.swing.extended.ExtendedHighlightNonAsciiCodeAreaPainter; public class DecoderSegment extends JPanel { private DecoderTab decoderTab; @@ -54,7 +56,7 @@ public class DecoderSegment extends JPanel { private JScrollPane editorPanel; private JScrollPane hexPanel; private JTextArea textEditor; - private CodeArea hexEditor; + private ExtCodeArea hexEditor; // This handles all the modes @@ -89,7 +91,7 @@ void updateEditors(DecoderSegmentState dsState) { lockDocumentEvents = true; textEditor.setText(dsState.getDisplayString()); textEditor.setEditable(true); - hexEditor.setData(new ByteArrayEditableData(dsState.getByteArray())); + hexEditor.setContentData(new ByteArrayEditableData(dsState.getByteArray())); lockDocumentEvents = false; } @@ -177,7 +179,8 @@ private void setupComponents() { // Theses are the drop down labels - hexEditor = new CodeArea(); + hexEditor = new ExtCodeArea(); + hexEditor.setPainter(new ExtendedHighlightNonAsciiCodeAreaPainter(hexEditor)); // "this" is the decoder segment this.setMaximumSize(new Dimension(3000, CONSTANTS.SEGMENT_HEIGHT)); @@ -360,7 +363,7 @@ private void setupComponents() { @Override public void dataChanged() { if (!lockDocumentEvents) { - dsState.setByteArrayList(Utils.convertHexDataToByteArray(hexEditor.getData())); + dsState.setByteArrayList(Utils.convertHexDataToByteArray(hexEditor.getContentData())); decoderTab.updateDecoderSegments(getSegmentIndex(), false); } } @@ -442,7 +445,7 @@ private static class MenuHandler { private static final String NEW_TAB_ACTION_NAME = "Send to new tab"; - private static JPopupMenu createHexEditorPopupMenu(final CodeArea codeArea, final DecoderSegment decoderSegment) { + private static JPopupMenu createHexEditorPopupMenu(final ExtCodeArea codeArea, final DecoderSegment decoderSegment) { JPopupMenu popupMenu = new JPopupMenu(); // Undo popup menu item @@ -489,11 +492,21 @@ public void actionPerformed(ActionEvent e) { JMenu viewMenu = new JMenu("View"); + final JCheckBoxMenuItem highlightNonAsciiMenuItem = new JCheckBoxMenuItem("Highlight Non-ASCII"); + highlightNonAsciiMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ExtendedHighlightNonAsciiCodeAreaPainter painter = ((ExtendedHighlightNonAsciiCodeAreaPainter) codeArea.getPainter()); + painter.setNonAsciiHighlightingEnabled(!painter.isNonAsciiHighlightingEnabled()); + } + }); + viewMenu.add(highlightNonAsciiMenuItem); + final JCheckBoxMenuItem showUnprintableMenuItem = new JCheckBoxMenuItem("Unprintable Characters"); showUnprintableMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - codeArea.setShowUnprintableCharacters(!codeArea.isShowUnprintableCharacters()); + codeArea.setShowUnprintables(!codeArea.isShowUnprintables()); } }); viewMenu.add(showUnprintableMenuItem); @@ -502,7 +515,13 @@ public void actionPerformed(ActionEvent e) { wrappingModeMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - codeArea.setWrapMode(!codeArea.isWrapMode()); + if (codeArea.getRowWrapping() == RowWrappingMode.WRAPPING) { + codeArea.setMaxBytesPerRow(16); + codeArea.setRowWrapping(RowWrappingMode.NO_WRAPPING); + } else { + codeArea.setMaxBytesPerRow(0); + codeArea.setRowWrapping(RowWrappingMode.WRAPPING); + } } }); viewMenu.add(wrappingModeMenuItem); @@ -607,14 +626,14 @@ public void actionPerformed(ActionEvent e) { byte[] selectedData; if (codeArea.hasSelection()) { SelectionRange selectionRange = codeArea.getSelection(); - // org.exbin.deltahex.SelectionRange has different length for forward and backward selections + // org.exbin.bined.SelectionRange has different length for forward and backward selections if (selectionRange.getStart() > selectionRange.getLast()) { - selectedData = Utils.convertHexDataToByteArray(codeArea.getData().copy(selectionRange.getFirst(), selectionRange.getLength())); + selectedData = Utils.convertHexDataToByteArray(codeArea.getContentData().copy(selectionRange.getFirst(), selectionRange.getLength())); } else { - selectedData = Utils.convertHexDataToByteArray(codeArea.getData().copy(selectionRange.getFirst(), selectionRange.getLength() + 1)); + selectedData = Utils.convertHexDataToByteArray(codeArea.getContentData().copy(selectionRange.getFirst(), selectionRange.getLength() + 1)); } } else { - selectedData = Utils.convertHexDataToByteArray(codeArea.getData()); + selectedData = Utils.convertHexDataToByteArray(codeArea.getContentData()); } if (selectedData.length > 0) { decoderSegment.decoderTab.mainTab.receiveTextFromMenu(selectedData); @@ -669,8 +688,9 @@ public void popupMenuWillBecomeVisible(PopupMenuEvent e) { } } - showUnprintableMenuItem.setSelected(codeArea.isShowUnprintableCharacters()); - wrappingModeMenuItem.setSelected(codeArea.isWrapMode()); + highlightNonAsciiMenuItem.setSelected(((ExtendedHighlightNonAsciiCodeAreaPainter) codeArea.getPainter()).isNonAsciiHighlightingEnabled()); + showUnprintableMenuItem.setSelected(codeArea.isShowUnprintables()); + wrappingModeMenuItem.setSelected(codeArea.getRowWrapping() == RowWrappingMode.WRAPPING); } @Override