Java tutorial
/* * Copyright (C) ExBin Project * * This application or library is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * This application or library 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along this application. If not, see <http://www.gnu.org/licenses/>. */ package org.exbin.deltahex.intellij.panel; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.ui.DialogWrapper; import org.exbin.deltahex.*; import org.exbin.deltahex.delta.DeltaDocument; import org.exbin.deltahex.highlight.swing.HighlightNonAsciiCodeAreaPainter; import org.exbin.deltahex.intellij.DeltaHexFileEditor; import org.exbin.deltahex.intellij.DialogUtils; import org.exbin.deltahex.swing.CodeArea; import org.exbin.deltahex.swing.CodeAreaSpace; import org.exbin.framework.editor.text.panel.TextFontOptionsPanel; import org.exbin.framework.editor.text.panel.TextFontPanel; import org.exbin.framework.gui.utils.LanguageUtils; import org.exbin.framework.gui.utils.WindowUtils; import org.exbin.framework.gui.utils.handler.DefaultControlHandler; import org.exbin.framework.gui.utils.panel.DefaultControlPanel; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.font.TextAttribute; import java.util.HashMap; import java.util.Map; /** * Hexadecimal editor options panel. * * @author ExBin Project (http://exbin.org) * @version 0.1.5 2017/09/30 */ public class DeltaHexOptionsPanel extends javax.swing.JPanel { private final PropertiesComponent preferences; private final java.util.ResourceBundle resourceBundle = LanguageUtils .getResourceBundleByClass(DeltaHexOptionsPanel.class); private DefaultListModel<CategoryItem> categoryModel = new DefaultListModel<>(); private JPanel currentCategoryPanel = null; private Font deltaHexDefaultFont = new Font(Font.MONOSPACED, Font.PLAIN, 12); private Font deltaHexFont = new Font(Font.MONOSPACED, Font.PLAIN, 12); public DeltaHexOptionsPanel() { initComponents(); preferences = DeltaHexFileEditor.getPreferences(); categoryModel.addElement(new CategoryItem("Mode", modePanel)); categoryModel.addElement(new CategoryItem("Layout", layoutPanel)); categoryModel.addElement(new CategoryItem("Decoration", decorationPanel)); categoryModel.addElement(new CategoryItem("Fonts & Colors", fontsAndColorPanel)); categoriesList.setModel(categoryModel); categoriesList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { int selectedIndex = categoriesList.getSelectedIndex(); if (selectedIndex >= 0) { CategoryItem categoryItem = categoryModel.get(selectedIndex); currentCategoryPanel = categoryItem.getCategoryPanel(); mainPane.setViewportView(currentCategoryPanel); mainPane.invalidate(); revalidate(); mainPane.repaint(); } } }); categoriesList.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component component = super.getListCellRendererComponent(list, ((CategoryItem) value).categoryName, index, isSelected, cellHasFocus); return component; } }); categoriesList.setSelectedIndex(0); updateFontTextField(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { layoutPanel = new javax.swing.JPanel(); wrapLineModeCheckBox = new javax.swing.JCheckBox(); lineLengthLabel = new javax.swing.JLabel(); lineLengthSpinner = new javax.swing.JSpinner(); headerPanel = new javax.swing.JPanel(); showHeaderCheckBox = new javax.swing.JCheckBox(); headerSpaceLabel = new javax.swing.JLabel(); headerSpaceComboBox = new javax.swing.JComboBox<>(); headerSpaceSpinner = new javax.swing.JSpinner(); lineNumbersPanel = new javax.swing.JPanel(); showLineNumbersCheckBox = new javax.swing.JCheckBox(); lineNumberLengthLabel = new javax.swing.JLabel(); lineNumbersLengthComboBox = new javax.swing.JComboBox<>(); lineNumbersLengthSpinner = new javax.swing.JSpinner(); lineNumberSpaceLabel = new javax.swing.JLabel(); lineNumbersSpaceComboBox = new javax.swing.JComboBox<>(); lineNumbersSpaceSpinner = new javax.swing.JSpinner(); byteGroupSizeLabel = new javax.swing.JLabel(); byteGroupSizeSpinner = new javax.swing.JSpinner(); spaceGroupSizeSpinner = new javax.swing.JSpinner(); spaceGroupSizeLabel = new javax.swing.JLabel(); modePanel = new javax.swing.JPanel(); codeTypeScrollModeLabel = new javax.swing.JLabel(); codeTypeComboBox = new javax.swing.JComboBox<>(); viewModeComboBox = new javax.swing.JComboBox<>(); showNonprintableCharactersCheckBox = new javax.swing.JCheckBox(); viewModeScrollModeLabel = new javax.swing.JLabel(); codeColorizationCheckBox = new javax.swing.JCheckBox(); memoryModeLabel = new javax.swing.JLabel(); memoryModeComboBox = new javax.swing.JComboBox<>(); showValuesPanelCheckBox = new javax.swing.JCheckBox(); decorationPanel = new javax.swing.JPanel(); hexCharactersModeLabel = new javax.swing.JLabel(); backgroundModeLabel = new javax.swing.JLabel(); hexCharactersModeComboBox = new javax.swing.JComboBox<>(); backgroundModeComboBox = new javax.swing.JComboBox<>(); positionCodeTypeLabel = new javax.swing.JLabel(); lineNumbersBackgroundCheckBox = new javax.swing.JCheckBox(); positionCodeTypeComboBox = new javax.swing.JComboBox<>(); linesPanel = new javax.swing.JPanel(); decoratorLineNumLineCheckBox = new javax.swing.JCheckBox(); decoratorPreviewLineCheckBox = new javax.swing.JCheckBox(); decoratorBoxCheckBox = new javax.swing.JCheckBox(); decoratorHeaderLineCheckBox = new javax.swing.JCheckBox(); fontsAndColorPanel = new javax.swing.JPanel(); fontLabel = new javax.swing.JLabel(); fontTextField = new javax.swing.JTextField(); selectFontButton = new javax.swing.JButton(); useDefaultFontCheckBox = new javax.swing.JCheckBox(); colorsLabel = new javax.swing.JLabel(); categoriesLabel = new javax.swing.JLabel(); categoriesScrollPane = new javax.swing.JScrollPane(); categoriesList = new javax.swing.JList<>(); mainPane = new javax.swing.JScrollPane(); wrapLineModeCheckBox.setText(resourceBundle.getString("wrapLineModeCheckBox.text")); // NOI18N lineLengthLabel.setText(resourceBundle.getString("lineLengthLabel.text")); // NOI18N lineLengthSpinner.setModel(new javax.swing.SpinnerNumberModel(16, 1, null, 1)); headerPanel.setBorder( javax.swing.BorderFactory.createTitledBorder(resourceBundle.getString("headerPanel.border.title"))); // NOI18N showHeaderCheckBox.setText(resourceBundle.getString("showHeaderCheckBox.text")); // NOI18N headerSpaceLabel.setText(resourceBundle.getString("headerSpaceLabel.text")); // NOI18N headerSpaceComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "NONE", "SPECIFIED", "QUARTER_UNIT", "HALF_UNIT", "ONE_UNIT", "ONE_AND_HALF_UNIT", "DOUBLE_UNIT" })); headerSpaceComboBox.setSelectedIndex(2); headerSpaceSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, null, 1)); javax.swing.GroupLayout headerPanelLayout = new javax.swing.GroupLayout(headerPanel); headerPanel.setLayout(headerPanelLayout); headerPanelLayout.setHorizontalGroup(headerPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(headerPanelLayout.createSequentialGroup().addContainerGap() .addGroup(headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(headerPanelLayout.createSequentialGroup() .addComponent(headerSpaceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(headerSpaceSpinner)) .addGroup(headerPanelLayout.createSequentialGroup() .addGroup(headerPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(showHeaderCheckBox).addComponent(headerSpaceLabel)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap())); headerPanelLayout.setVerticalGroup(headerPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(headerPanelLayout.createSequentialGroup().addComponent(showHeaderCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(headerSpaceLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(headerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(headerSpaceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(headerSpaceSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); lineNumbersPanel.setBorder(javax.swing.BorderFactory .createTitledBorder(resourceBundle.getString("lineNumbersPanel.border.title"))); // NOI18N showLineNumbersCheckBox.setText(resourceBundle.getString("showLineNumbersCheckBox.text")); // NOI18N lineNumberLengthLabel.setText(resourceBundle.getString("lineNumberLengthLabel.text")); // NOI18N lineNumbersLengthComboBox .setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "AUTO", "SPECIFIED" })); lineNumbersLengthComboBox.setSelectedIndex(1); lineNumbersLengthSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, null, 1)); lineNumbersLengthSpinner.setValue(8); lineNumberSpaceLabel.setText(resourceBundle.getString("lineNumberSpaceLabel.text")); // NOI18N lineNumbersSpaceComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "NONE", "SPECIFIED", "QUARTER_UNIT", "HALF_UNIT", "ONE_UNIT", "ONE_AND_HALF_UNIT", "DOUBLE_UNIT" })); lineNumbersSpaceComboBox.setSelectedIndex(4); lineNumbersSpaceSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, null, 1)); javax.swing.GroupLayout lineNumbersPanelLayout = new javax.swing.GroupLayout(lineNumbersPanel); lineNumbersPanel.setLayout(lineNumbersPanelLayout); lineNumbersPanelLayout.setHorizontalGroup( lineNumbersPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(lineNumbersPanelLayout.createSequentialGroup() .addComponent(showLineNumbersCheckBox).addGap(0, 0, Short.MAX_VALUE)) .addGroup(lineNumbersPanelLayout.createSequentialGroup().addContainerGap() .addGroup(lineNumbersPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(lineNumbersPanelLayout.createSequentialGroup() .addComponent(lineNumbersLengthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineNumbersLengthSpinner)) .addGroup(lineNumbersPanelLayout.createSequentialGroup() .addGroup(lineNumbersPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lineNumberLengthLabel) .addComponent(lineNumberSpaceLabel)) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(lineNumbersPanelLayout.createSequentialGroup() .addComponent(lineNumbersSpaceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineNumbersSpaceSpinner))) .addContainerGap())); lineNumbersPanelLayout.setVerticalGroup(lineNumbersPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(lineNumbersPanelLayout.createSequentialGroup().addComponent(showLineNumbersCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineNumberLengthLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(lineNumbersPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lineNumbersLengthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lineNumbersLengthSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineNumberSpaceLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(lineNumbersPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lineNumbersSpaceComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lineNumbersSpaceSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); byteGroupSizeLabel.setText(resourceBundle.getString("byteGroupSizeLabel.text")); // NOI18N byteGroupSizeSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, null, 1)); spaceGroupSizeSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, null, 1)); spaceGroupSizeLabel.setText(resourceBundle.getString("spaceGroupSizeLabel.text")); // NOI18N javax.swing.GroupLayout layoutPanelLayout = new javax.swing.GroupLayout(layoutPanel); layoutPanel.setLayout(layoutPanelLayout); layoutPanelLayout.setHorizontalGroup(layoutPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layoutPanelLayout.createSequentialGroup().addContainerGap().addGroup(layoutPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layoutPanelLayout.createSequentialGroup() .addGroup(layoutPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lineLengthLabel).addComponent(wrapLineModeCheckBox)) .addGap(67, 67, 67)) .addComponent(spaceGroupSizeSpinner).addComponent(byteGroupSizeSpinner) .addComponent(headerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lineLengthSpinner) .addComponent(lineNumbersPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layoutPanelLayout.createSequentialGroup().addGroup(layoutPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(byteGroupSizeLabel, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(spaceGroupSizeLabel, javax.swing.GroupLayout.Alignment.LEADING)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap())); layoutPanelLayout.setVerticalGroup(layoutPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layoutPanelLayout.createSequentialGroup().addContainerGap() .addComponent(wrapLineModeCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineLengthLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineLengthSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(headerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineNumbersPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(byteGroupSizeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(byteGroupSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spaceGroupSizeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(spaceGroupSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); codeTypeScrollModeLabel.setText(resourceBundle.getString("codeTypeScrollModeLabel.text")); // NOI18N codeTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<>( new String[] { "BINARY", "OCTAL", "DECIMAL", "HEXADECIMAL" })); codeTypeComboBox.setSelectedIndex(3); viewModeComboBox.setModel( new javax.swing.DefaultComboBoxModel<>(new String[] { "DUAL", "HEXADECIMAL", "PREVIEW" })); showNonprintableCharactersCheckBox .setText(resourceBundle.getString("showNonprintableCharactersCheckBox.text")); // NOI18N viewModeScrollModeLabel.setText(resourceBundle.getString("viewModeScrollModeLabel.text")); // NOI18N codeColorizationCheckBox.setText(resourceBundle.getString("codeColorizationCheckBox.text")); // NOI18N memoryModeLabel.setText(resourceBundle.getString("memoryModeLabel.text")); // NOI18N memoryModeComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "DELTA", "MEMORY" })); showValuesPanelCheckBox.setText(resourceBundle.getString("showValuesPanelCheckBox.text")); // NOI18N javax.swing.GroupLayout modePanelLayout = new javax.swing.GroupLayout(modePanel); modePanel.setLayout(modePanelLayout); modePanelLayout.setHorizontalGroup(modePanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(modePanelLayout.createSequentialGroup().addContainerGap().addGroup(modePanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(memoryModeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(viewModeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(showNonprintableCharactersCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(codeTypeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(codeColorizationCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(modePanelLayout.createSequentialGroup() .addGroup(modePanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(viewModeScrollModeLabel).addComponent(codeTypeScrollModeLabel) .addComponent(memoryModeLabel)) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(showValuesPanelCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())); modePanelLayout.setVerticalGroup(modePanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(modePanelLayout.createSequentialGroup().addContainerGap() .addComponent(viewModeScrollModeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(viewModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(codeTypeScrollModeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(codeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(showNonprintableCharactersCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(codeColorizationCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(showValuesPanelCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(memoryModeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(memoryModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); hexCharactersModeLabel.setText(resourceBundle.getString("hexCharactersModeLabel.text")); // NOI18N backgroundModeLabel.setText(resourceBundle.getString("backgroundModeLabel.text")); // NOI18N hexCharactersModeComboBox .setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "LOWER", "UPPER" })); backgroundModeComboBox.setModel( new javax.swing.DefaultComboBoxModel<>(new String[] { "NONE", "PLAIN", "STRIPPED", "GRIDDED" })); backgroundModeComboBox.setSelectedIndex(2); positionCodeTypeLabel.setText(resourceBundle.getString("positionCodeTypeLabel.text")); // NOI18N lineNumbersBackgroundCheckBox.setText(resourceBundle.getString("lineNumbersBackgroundCheckBox.text")); // NOI18N positionCodeTypeComboBox.setModel( new javax.swing.DefaultComboBoxModel<>(new String[] { "OCTAL", "DECIMAL", "HEXADECIMAL" })); positionCodeTypeComboBox.setSelectedIndex(2); linesPanel.setBorder( javax.swing.BorderFactory.createTitledBorder(resourceBundle.getString("linesPanel.border.title"))); // NOI18N decoratorLineNumLineCheckBox.setText(resourceBundle.getString("decoratorLineNumLineCheckBox.text")); // NOI18N decoratorPreviewLineCheckBox.setText(resourceBundle.getString("decoratorPreviewLineCheckBox.text")); // NOI18N decoratorBoxCheckBox.setText(resourceBundle.getString("decoratorBoxCheckBox.text")); // NOI18N decoratorHeaderLineCheckBox.setText(resourceBundle.getString("decoratorHeaderLineCheckBox.text")); // NOI18N javax.swing.GroupLayout linesPanelLayout = new javax.swing.GroupLayout(linesPanel); linesPanel.setLayout(linesPanelLayout); linesPanelLayout.setHorizontalGroup(linesPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(linesPanelLayout.createSequentialGroup().addContainerGap() .addGroup(linesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(decoratorLineNumLineCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(decoratorPreviewLineCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(decoratorBoxCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(decoratorHeaderLineCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())); linesPanelLayout .setVerticalGroup(linesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(linesPanelLayout.createSequentialGroup().addComponent(decoratorHeaderLineCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(decoratorLineNumLineCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(decoratorPreviewLineCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(decoratorBoxCheckBox))); javax.swing.GroupLayout decorationPanelLayout = new javax.swing.GroupLayout(decorationPanel); decorationPanel.setLayout(decorationPanelLayout); decorationPanelLayout .setHorizontalGroup( decorationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(decorationPanelLayout.createSequentialGroup().addContainerGap() .addGroup(decorationPanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addGroup(decorationPanelLayout.createSequentialGroup() .addComponent(backgroundModeLabel) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(decorationPanelLayout .createSequentialGroup().addGroup(decorationPanelLayout .createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING) .addComponent(hexCharactersModeLabel) .addComponent(positionCodeTypeLabel)) .addGap(138, 138, 138)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, decorationPanelLayout.createSequentialGroup() .addGroup(decorationPanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(positionCodeTypeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( hexCharactersModeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( backgroundModeComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent( lineNumbersBackgroundCheckBox, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(linesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())))); decorationPanelLayout.setVerticalGroup(decorationPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, decorationPanelLayout.createSequentialGroup() .addContainerGap().addComponent(backgroundModeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(backgroundModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lineNumbersBackgroundCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(linesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(hexCharactersModeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(hexCharactersModeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(positionCodeTypeLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(positionCodeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); fontLabel.setText(resourceBundle.getString("fontLabel.text")); // NOI18N fontTextField.setEditable(false); fontTextField.setText(resourceBundle.getString("fontTextField.text")); // NOI18N selectFontButton.setText(resourceBundle.getString("selectFontButton.text")); // NOI18N selectFontButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { selectFontButtonActionPerformed(evt); } }); useDefaultFontCheckBox.setText(resourceBundle.getString("useDefaultFontCheckBox.text")); // NOI18N colorsLabel.setText(resourceBundle.getString("colorsLabel.text")); // NOI18N javax.swing.GroupLayout fontsAndColorPanelLayout = new javax.swing.GroupLayout(fontsAndColorPanel); fontsAndColorPanel.setLayout(fontsAndColorPanelLayout); fontsAndColorPanelLayout.setHorizontalGroup(fontsAndColorPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(fontsAndColorPanelLayout.createSequentialGroup().addContainerGap() .addGroup(fontsAndColorPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(fontsAndColorPanelLayout.createSequentialGroup() .addComponent(fontTextField) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(selectFontButton, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(fontsAndColorPanelLayout.createSequentialGroup() .addGroup(fontsAndColorPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(useDefaultFontCheckBox).addComponent(fontLabel) .addComponent(colorsLabel)) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap())); fontsAndColorPanelLayout.setVerticalGroup(fontsAndColorPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(fontsAndColorPanelLayout.createSequentialGroup().addContainerGap() .addComponent(useDefaultFontCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(fontLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(fontsAndColorPanelLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(fontTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(selectFontButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(colorsLabel) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); categoriesLabel.setText("Categories:"); categoriesList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); categoriesScrollPane.setViewportView(categoriesList); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addComponent(categoriesLabel) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addComponent(categoriesScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(mainPane, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE))); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addComponent(categoriesLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(categoriesScrollPane).addComponent(mainPane)))); }// </editor-fold>//GEN-END:initComponents private void selectFontButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectFontButtonActionPerformed final TextFontPanel textFontPanel = new TextFontPanel(); DefaultControlPanel textFontControlPanel = new DefaultControlPanel(); textFontPanel.setStoredFont(deltaHexFont); textFontPanel.setVisible(true); JPanel dialogPanel = WindowUtils.createDialogPanel(textFontPanel, textFontControlPanel); WindowUtils.assignGlobalKeyListener(dialogPanel, textFontControlPanel.createOkCancelListener()); final DialogWrapper dialog = DialogUtils.createDialog(dialogPanel, "Select Font"); textFontControlPanel.setHandler(new DefaultControlHandler() { @Override public void controlActionPerformed(DefaultControlHandler.ControlActionType actionType) { if (actionType == DefaultControlHandler.ControlActionType.OK) { deltaHexFont = textFontPanel.getStoredFont(); updateFontTextField(); useDefaultFontCheckBox.setSelected(false); } dialog.close(0); } }); dialog.showAndGet(); }//GEN-LAST:event_selectFontButtonActionPerformed public void load() { // Layout wrapLineModeCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_LINE_WRAPPING, false)); lineLengthSpinner.setValue(preferences.getInt(DeltaHexFileEditor.PREFERENCES_BYTES_PER_LINE, 16)); showHeaderCheckBox.setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_SHOW_HEADER, true)); String headerSpaceTypeName = preferences.getValue(DeltaHexFileEditor.PREFERENCES_HEADER_SPACE_TYPE, CodeAreaSpace.SpaceType.HALF_UNIT.name()); CodeAreaSpace.SpaceType headerSpaceType = CodeAreaSpace.SpaceType.valueOf(headerSpaceTypeName); headerSpaceComboBox.setSelectedIndex(headerSpaceType.ordinal()); headerSpaceSpinner.setValue(preferences.getInt(DeltaHexFileEditor.PREFERENCES_HEADER_SPACE, 0)); showLineNumbersCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_SHOW_LINE_NUMBERS, true)); String lineNumbersSpaceTypeName = preferences.getValue( DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_SPACE_TYPE, CodeAreaSpace.SpaceType.ONE_UNIT.name()); CodeAreaSpace.SpaceType lineNumbersSpaceType = CodeAreaSpace.SpaceType.valueOf(lineNumbersSpaceTypeName); lineNumbersSpaceComboBox.setSelectedIndex(lineNumbersSpaceType.ordinal()); lineNumbersSpaceSpinner.setValue(preferences.getInt(DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_SPACE, 8)); String lineNumbersLengthTypeName = preferences.getValue( DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_LENGTH_TYPE, CodeAreaLineNumberLength.LineNumberType.SPECIFIED.name()); CodeAreaLineNumberLength.LineNumberType lineNumbersLengthType = CodeAreaLineNumberLength.LineNumberType .valueOf(lineNumbersLengthTypeName); lineNumbersLengthComboBox.setSelectedIndex(lineNumbersLengthType.ordinal()); lineNumbersLengthSpinner .setValue(preferences.getInt(DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_LENGTH, 8)); byteGroupSizeSpinner.setValue(preferences.getInt(DeltaHexFileEditor.PREFERENCES_BYTE_GROUP_SIZE, 1)); spaceGroupSizeSpinner.setValue(preferences.getInt(DeltaHexFileEditor.PREFERENCES_SPACE_GROUP_SIZE, 0)); // Mode ViewMode viewMode = ViewMode .valueOf(preferences.getValue(DeltaHexFileEditor.PREFERENCES_VIEW_MODE, ViewMode.DUAL.name())); viewModeComboBox.setSelectedIndex(viewMode.ordinal()); CodeType codeType = CodeType.valueOf( preferences.getValue(DeltaHexFileEditor.PREFERENCES_CODE_TYPE, CodeType.HEXADECIMAL.name())); codeTypeComboBox.setSelectedIndex(codeType.ordinal()); showNonprintableCharactersCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_SHOW_UNPRINTABLES, true)); codeColorizationCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_CODE_COLORIZATION, true)); showValuesPanelCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_SHOW_VALUES_PANEL, true)); memoryModeComboBox.setSelectedIndex( preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_MEMORY_DELTA_MODE, true) ? 0 : 1); // Decoration CodeArea.BackgroundMode backgroundMode = CodeArea.BackgroundMode.valueOf(preferences .getValue(DeltaHexFileEditor.PREFERENCES_BACKGROUND_MODE, CodeArea.BackgroundMode.STRIPPED.name())); backgroundModeComboBox.setSelectedIndex(backgroundMode.ordinal()); lineNumbersBackgroundCheckBox.setSelected( preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_PAINT_LINE_NUMBERS_BACKGROUND, true)); decoratorHeaderLineCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_DECORATION_HEADER_LINE, true)); decoratorPreviewLineCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_DECORATION_PREVIEW_LINE, true)); decoratorBoxCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_DECORATION_BOX, false)); decoratorLineNumLineCheckBox .setSelected(preferences.getBoolean(DeltaHexFileEditor.PREFERENCES_DECORATION_LINENUM_LINE, true)); HexCharactersCase hexCharactersCase = HexCharactersCase.valueOf(preferences .getValue(DeltaHexFileEditor.PREFERENCES_HEX_CHARACTERS_CASE, HexCharactersCase.UPPER.name())); hexCharactersModeComboBox.setSelectedIndex(hexCharactersCase.ordinal()); PositionCodeType positionCodeType = PositionCodeType.valueOf(preferences .getValue(DeltaHexFileEditor.PREFERENCES_POSITION_CODE_TYPE, PositionCodeType.HEXADECIMAL.name())); positionCodeTypeComboBox.setSelectedIndex(positionCodeType.ordinal()); // Font Boolean useDefaultFont = Boolean.valueOf( preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_DEFAULT, Boolean.toString(true))); useDefaultFontCheckBox.setSelected(useDefaultFont); String value; Map<TextAttribute, Object> attribs = new HashMap<>(); value = preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_FAMILY, null); if (value != null) { attribs.put(TextAttribute.FAMILY, value); } value = preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SIZE, null); if (value != null) { attribs.put(TextAttribute.SIZE, new Integer(value).floatValue()); } if (Boolean.valueOf(preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_UNDERLINE, null))) { attribs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_ONE_PIXEL); } if (Boolean.valueOf(preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_STRIKETHROUGH, null))) { attribs.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON); } if (Boolean.valueOf(preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_STRONG, null))) { attribs.put(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD); } if (Boolean.valueOf(preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_ITALIC, null))) { attribs.put(TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE); } if (Boolean.valueOf(preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SUBSCRIPT, null))) { attribs.put(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUB); } if (Boolean.valueOf(preferences.getValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SUPERSCRIPT, null))) { attribs.put(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER); } Font derivedFont = deltaHexFont.deriveFont(attribs); if (derivedFont != null) { deltaHexFont = derivedFont; } updateFontTextField(); } public void store() { // Layout preferences.setValue(DeltaHexFileEditor.PREFERENCES_LINE_WRAPPING, wrapLineModeCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_BYTES_PER_LINE, (int) ((Integer) lineLengthSpinner.getValue()), 0); preferences.setValue(DeltaHexFileEditor.PREFERENCES_SHOW_HEADER, showHeaderCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_HEADER_SPACE_TYPE, CodeAreaSpace.SpaceType.values()[headerSpaceComboBox.getSelectedIndex()].name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_HEADER_SPACE, (int) ((Integer) headerSpaceSpinner.getValue()), 0); preferences.setValue(DeltaHexFileEditor.PREFERENCES_SHOW_LINE_NUMBERS, showLineNumbersCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_SPACE_TYPE, CodeAreaSpace.SpaceType.values()[lineNumbersSpaceComboBox.getSelectedIndex()].name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_SPACE, (Integer) lineNumbersSpaceSpinner.getValue(), 0); preferences.setValue(DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_LENGTH_TYPE, CodeAreaLineNumberLength.LineNumberType.values()[lineNumbersLengthComboBox.getSelectedIndex()] .name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_LINE_NUMBERS_LENGTH, (Integer) lineNumbersLengthSpinner.getValue(), 0); preferences.setValue(DeltaHexFileEditor.PREFERENCES_BYTE_GROUP_SIZE, (Integer) byteGroupSizeSpinner.getValue(), 0); preferences.setValue(DeltaHexFileEditor.PREFERENCES_SPACE_GROUP_SIZE, (Integer) spaceGroupSizeSpinner.getValue(), 0); // Mode preferences.setValue(DeltaHexFileEditor.PREFERENCES_VIEW_MODE, ViewMode.values()[viewModeComboBox.getSelectedIndex()].name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_CODE_TYPE, CodeType.values()[codeTypeComboBox.getSelectedIndex()].name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_SHOW_UNPRINTABLES, showNonprintableCharactersCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_CODE_COLORIZATION, codeColorizationCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_SHOW_VALUES_PANEL, showValuesPanelCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_MEMORY_DELTA_MODE, isDeltaMemoryMode()); // Decoration preferences.setValue(DeltaHexFileEditor.PREFERENCES_BACKGROUND_MODE, CodeArea.BackgroundMode.values()[backgroundModeComboBox.getSelectedIndex()].name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_PAINT_LINE_NUMBERS_BACKGROUND, lineNumbersBackgroundCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_DECORATION_HEADER_LINE, decoratorHeaderLineCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_DECORATION_PREVIEW_LINE, decoratorPreviewLineCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_DECORATION_BOX, decoratorBoxCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_DECORATION_LINENUM_LINE, decoratorLineNumLineCheckBox.isSelected()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_HEX_CHARACTERS_CASE, HexCharactersCase.values()[hexCharactersModeComboBox.getSelectedIndex()].name()); preferences.setValue(DeltaHexFileEditor.PREFERENCES_POSITION_CODE_TYPE, PositionCodeType.values()[positionCodeTypeComboBox.getSelectedIndex()].name()); // Font preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_DEFAULT, Boolean.toString(useDefaultFontCheckBox.isSelected())); Map<TextAttribute, ?> attribs = deltaHexFont.getAttributes(); String value = (String) attribs.get(TextAttribute.FAMILY); if (value != null) { preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_FAMILY, value); } else { preferences.unsetValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_FAMILY); } Float fontSize = (Float) attribs.get(TextAttribute.SIZE); if (fontSize != null) { preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SIZE, Integer.toString((int) (float) fontSize)); } else { preferences.unsetValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SIZE); } preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_UNDERLINE, Boolean .toString(TextAttribute.UNDERLINE_LOW_ONE_PIXEL.equals(attribs.get(TextAttribute.UNDERLINE)))); preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_STRIKETHROUGH, Boolean.toString(TextAttribute.STRIKETHROUGH_ON.equals(attribs.get(TextAttribute.STRIKETHROUGH)))); preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_STRONG, Boolean.toString(TextAttribute.WEIGHT_BOLD.equals(attribs.get(TextAttribute.WEIGHT)))); preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_ITALIC, Boolean.toString(TextAttribute.POSTURE_OBLIQUE.equals(attribs.get(TextAttribute.POSTURE)))); preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SUBSCRIPT, Boolean.toString(TextAttribute.SUPERSCRIPT_SUB.equals(attribs.get(TextAttribute.SUPERSCRIPT)))); preferences.setValue(TextFontOptionsPanel.PREFERENCES_TEXT_FONT_SUPERSCRIPT, Boolean.toString(TextAttribute.SUPERSCRIPT_SUPER.equals(attribs.get(TextAttribute.SUPERSCRIPT)))); } public void setFromCodeArea(CodeArea codeArea) { // Layout wrapLineModeCheckBox.setSelected(codeArea.isWrapMode()); lineLengthSpinner.setValue(codeArea.getLineLength()); showHeaderCheckBox.setSelected(codeArea.isShowHeader()); headerSpaceComboBox.setSelectedIndex(codeArea.getHeaderSpaceType().ordinal()); headerSpaceSpinner.setValue(codeArea.getHeaderSpaceSize()); showLineNumbersCheckBox.setSelected(codeArea.isShowLineNumbers()); lineNumbersSpaceComboBox.setSelectedIndex(codeArea.getLineNumberSpaceType().ordinal()); lineNumbersSpaceSpinner.setValue(codeArea.getLineNumberSpaceSize()); lineNumbersLengthComboBox.setSelectedIndex(codeArea.getLineNumberType().ordinal()); lineNumbersLengthSpinner.setValue(codeArea.getLineNumberSpecifiedLength()); byteGroupSizeSpinner.setValue(codeArea.getByteGroupSize()); spaceGroupSizeSpinner.setValue(codeArea.getSpaceGroupSize()); // Mode viewModeComboBox.setSelectedIndex(codeArea.getViewMode().ordinal()); codeTypeComboBox.setSelectedIndex(codeArea.getCodeType().ordinal()); showNonprintableCharactersCheckBox.setSelected(codeArea.isShowUnprintableCharacters()); codeColorizationCheckBox.setSelected( ((HighlightNonAsciiCodeAreaPainter) codeArea.getPainter()).isNonAsciiHighlightingEnabled()); memoryModeComboBox.setSelectedIndex(codeArea.getData() instanceof DeltaDocument ? 0 : 1); // Decoration backgroundModeComboBox.setSelectedIndex(codeArea.getBackgroundMode().ordinal()); lineNumbersBackgroundCheckBox.setSelected(codeArea.isLineNumberBackground()); setDecorationMode(codeArea.getDecorationMode()); hexCharactersModeComboBox.setSelectedIndex(codeArea.getHexCharactersCase().ordinal()); positionCodeTypeComboBox.setSelectedIndex(codeArea.getPositionCodeType().ordinal()); // Font deltaHexFont = codeArea.getFont(); updateFontTextField(); useDefaultFontCheckBox.setSelected(deltaHexFont.equals(deltaHexDefaultFont)); } public void applyToCodeArea(CodeArea codeArea) { // Layout codeArea.setWrapMode(wrapLineModeCheckBox.isSelected()); codeArea.setLineLength((Integer) lineLengthSpinner.getValue()); codeArea.setShowHeader(showHeaderCheckBox.isSelected()); codeArea.setHeaderSpaceType(CodeAreaSpace.SpaceType.values()[headerSpaceComboBox.getSelectedIndex()]); codeArea.setHeaderSpaceSize((Integer) headerSpaceSpinner.getValue()); codeArea.setShowLineNumbers(showLineNumbersCheckBox.isSelected()); codeArea.setLineNumberSpaceType( CodeAreaSpace.SpaceType.values()[lineNumbersSpaceComboBox.getSelectedIndex()]); codeArea.setLineNumberSpaceSize((Integer) lineNumbersSpaceSpinner.getValue()); codeArea.setLineNumberType( CodeAreaLineNumberLength.LineNumberType.values()[lineNumbersLengthComboBox.getSelectedIndex()]); codeArea.setLineNumberSpecifiedLength((Integer) lineNumbersLengthSpinner.getValue()); codeArea.setByteGroupSize((Integer) byteGroupSizeSpinner.getValue()); codeArea.setSpaceGroupSize((Integer) spaceGroupSizeSpinner.getValue()); // Mode codeArea.setViewMode(ViewMode.values()[viewModeComboBox.getSelectedIndex()]); codeArea.setCodeType(CodeType.values()[codeTypeComboBox.getSelectedIndex()]); codeArea.setShowUnprintableCharacters(showNonprintableCharactersCheckBox.isSelected()); ((HighlightNonAsciiCodeAreaPainter) codeArea.getPainter()) .setNonAsciiHighlightingEnabled(codeColorizationCheckBox.isSelected()); // Memory mode handled from outside by isDeltaMemoryMode() method, worth fixing? // Decoration codeArea.setBackgroundMode(CodeArea.BackgroundMode.values()[backgroundModeComboBox.getSelectedIndex()]); codeArea.setLineNumberBackground(lineNumbersBackgroundCheckBox.isSelected()); codeArea.setDecorationMode(getDecorationMode()); codeArea.setHexCharactersCase(HexCharactersCase.values()[hexCharactersModeComboBox.getSelectedIndex()]); codeArea.setPositionCodeType(PositionCodeType.values()[positionCodeTypeComboBox.getSelectedIndex()]); // Font if (useDefaultFontCheckBox.isSelected()) { codeArea.setFont(deltaHexDefaultFont); } else { codeArea.setFont(deltaHexFont); } } public boolean isShowValuesPanel() { return showValuesPanelCheckBox.isSelected(); } public void setShowValuesPanel(boolean flag) { showValuesPanelCheckBox.setSelected(flag); } private int getDecorationMode() { return (decoratorHeaderLineCheckBox.isSelected() ? CodeArea.DECORATION_HEADER_LINE : 0) + (decoratorPreviewLineCheckBox.isSelected() ? CodeArea.DECORATION_PREVIEW_LINE : 0) + (decoratorBoxCheckBox.isSelected() ? CodeArea.DECORATION_BOX : 0) + (decoratorLineNumLineCheckBox.isSelected() ? CodeArea.DECORATION_LINENUM_LINE : 0); } private void setDecorationMode(int decorationMode) { decoratorHeaderLineCheckBox.setSelected((decorationMode & CodeArea.DECORATION_HEADER_LINE) > 0); decoratorLineNumLineCheckBox.setSelected((decorationMode & CodeArea.DECORATION_LINENUM_LINE) > 0); decoratorPreviewLineCheckBox.setSelected((decorationMode & CodeArea.DECORATION_PREVIEW_LINE) > 0); decoratorBoxCheckBox.setSelected((decorationMode & CodeArea.DECORATION_BOX) > 0); } public boolean isDeltaMemoryMode() { return memoryModeComboBox.getSelectedIndex() == 0; } boolean valid() { // TODO check whether form is consistent and complete return true; } private void updateFontTextField() { int fontStyle = deltaHexFont.getStyle(); String fontStyleName; if ((fontStyle & (Font.BOLD + Font.ITALIC)) == Font.BOLD + Font.ITALIC) { fontStyleName = "Bold Italic"; } else if ((fontStyle & Font.BOLD) > 0) { fontStyleName = "Bold"; } else if ((fontStyle & Font.ITALIC) > 0) { fontStyleName = "Italic"; } else { fontStyleName = "Plain"; } fontTextField.setText( deltaHexFont.getFamily() + " " + String.valueOf(deltaHexFont.getSize()) + " " + fontStyleName); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JComboBox<String> backgroundModeComboBox; private javax.swing.JLabel backgroundModeLabel; private javax.swing.JLabel byteGroupSizeLabel; private javax.swing.JSpinner byteGroupSizeSpinner; private javax.swing.JLabel categoriesLabel; private javax.swing.JList<CategoryItem> categoriesList; private javax.swing.JScrollPane categoriesScrollPane; private javax.swing.JCheckBox codeColorizationCheckBox; private javax.swing.JComboBox<String> codeTypeComboBox; private javax.swing.JLabel codeTypeScrollModeLabel; private javax.swing.JLabel colorsLabel; private javax.swing.JPanel decorationPanel; private javax.swing.JCheckBox decoratorBoxCheckBox; private javax.swing.JCheckBox decoratorHeaderLineCheckBox; private javax.swing.JCheckBox decoratorLineNumLineCheckBox; private javax.swing.JCheckBox decoratorPreviewLineCheckBox; private javax.swing.JLabel fontLabel; private javax.swing.JTextField fontTextField; private javax.swing.JPanel fontsAndColorPanel; private javax.swing.JPanel headerPanel; private javax.swing.JComboBox<String> headerSpaceComboBox; private javax.swing.JLabel headerSpaceLabel; private javax.swing.JSpinner headerSpaceSpinner; private javax.swing.JComboBox<String> hexCharactersModeComboBox; private javax.swing.JLabel hexCharactersModeLabel; private javax.swing.JPanel layoutPanel; private javax.swing.JLabel lineLengthLabel; private javax.swing.JSpinner lineLengthSpinner; private javax.swing.JLabel lineNumberLengthLabel; private javax.swing.JLabel lineNumberSpaceLabel; private javax.swing.JCheckBox lineNumbersBackgroundCheckBox; private javax.swing.JComboBox<String> lineNumbersLengthComboBox; private javax.swing.JSpinner lineNumbersLengthSpinner; private javax.swing.JPanel lineNumbersPanel; private javax.swing.JComboBox<String> lineNumbersSpaceComboBox; private javax.swing.JSpinner lineNumbersSpaceSpinner; private javax.swing.JPanel linesPanel; private javax.swing.JScrollPane mainPane; private javax.swing.JComboBox<String> memoryModeComboBox; private javax.swing.JLabel memoryModeLabel; private javax.swing.JPanel modePanel; private javax.swing.JComboBox<String> positionCodeTypeComboBox; private javax.swing.JLabel positionCodeTypeLabel; private javax.swing.JButton selectFontButton; private javax.swing.JCheckBox showHeaderCheckBox; private javax.swing.JCheckBox showLineNumbersCheckBox; private javax.swing.JCheckBox showNonprintableCharactersCheckBox; private javax.swing.JCheckBox showValuesPanelCheckBox; private javax.swing.JLabel spaceGroupSizeLabel; private javax.swing.JSpinner spaceGroupSizeSpinner; private javax.swing.JCheckBox useDefaultFontCheckBox; private javax.swing.JComboBox<String> viewModeComboBox; private javax.swing.JLabel viewModeScrollModeLabel; private javax.swing.JCheckBox wrapLineModeCheckBox; // End of variables declaration//GEN-END:variables private static class CategoryItem { String categoryName; JPanel categoryPanel; public CategoryItem(String categoryName, JPanel categoryPanel) { this.categoryName = categoryName; this.categoryPanel = categoryPanel; } public String getCategoryName() { return categoryName; } public JPanel getCategoryPanel() { return categoryPanel; } } }