diff --git a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java
index 2282682c0..333994e84 100644
--- a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java
@@ -1,1128 +1,1145 @@
-/*
- * Copyright (C) 2010-2015 JPEXS
- *
- * 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 3 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, see .
- */
-package com.jpexs.decompiler.flash.gui;
-
-import com.jpexs.decompiler.flash.SWF;
-import com.jpexs.decompiler.flash.gui.generictageditors.BooleanEditor;
-import com.jpexs.decompiler.flash.gui.generictageditors.ColorEditor;
-import com.jpexs.decompiler.flash.gui.generictageditors.GenericTagEditor;
-import com.jpexs.decompiler.flash.gui.generictageditors.NumberEditor;
-import com.jpexs.decompiler.flash.gui.generictageditors.StringEditor;
-import com.jpexs.decompiler.flash.tags.Tag;
-import com.jpexs.decompiler.flash.tags.base.ASMSource;
-import com.jpexs.decompiler.flash.types.ARGB;
-import com.jpexs.decompiler.flash.types.BasicType;
-import com.jpexs.decompiler.flash.types.RGB;
-import com.jpexs.decompiler.flash.types.RGBA;
-import com.jpexs.decompiler.flash.types.annotations.Conditional;
-import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit;
-import com.jpexs.decompiler.flash.types.annotations.Internal;
-import com.jpexs.decompiler.flash.types.annotations.Multiline;
-import com.jpexs.decompiler.flash.types.annotations.SWFArray;
-import com.jpexs.decompiler.flash.types.annotations.SWFType;
-import com.jpexs.decompiler.flash.types.annotations.Table;
-import com.jpexs.decompiler.flash.types.annotations.parser.AnnotationParseException;
-import com.jpexs.decompiler.flash.types.annotations.parser.ConditionEvaluator;
-import com.jpexs.helpers.ByteArrayRange;
-import com.jpexs.helpers.ConcreteClasses;
-import com.jpexs.helpers.ReflectionTools;
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Component;
-import static java.awt.Component.TOP_ALIGNMENT;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.EventObject;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.swing.AbstractCellEditor;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.JTree;
-import javax.swing.event.TreeModelListener;
-import javax.swing.plaf.basic.BasicLabelUI;
-import javax.swing.plaf.basic.BasicTreeUI;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.tree.DefaultTreeModel;
-import javax.swing.tree.TreeCellEditor;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreePath;
-
-/**
- *
- * @author JPEXS
- */
-public class GenericTagTreePanel extends GenericTagPanel {
-
- private static final Logger logger = Logger.getLogger(GenericTagTreePanel.class.getName());
-
- private JTree tree;
-
- private Tag editedTag;
-
- private static final Map> fieldCache = new HashMap<>();
-
- private static final int FIELD_INDEX = 0;
-
- private class MyTree extends JTree {
-
- public MyTree() {
- setBackground(Color.white);
- setUI(new BasicTreeUI() {
-
- @Override
- public void paint(Graphics g, JComponent c) {
- setHashColor(Color.gray);
- super.paint(g, c);
- }
-
- });
- setCellRenderer(new MyTreeCellRenderer());
- setCellEditor(new MyTreeCellEditor(this));
- setInvokesStopCellEditing(true);
-
- }
- }
-
- private class MyTreeCellEditor extends AbstractCellEditor implements TreeCellEditor {
-
- private List editors = null;
-
- private final JTree tree;
-
- private FieldNode fnode;
-
- public MyTreeCellEditor(JTree tree) {
- this.tree = tree;
- }
-
- @Override
- public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
- if (value instanceof FieldNode) {
- fnode = (FieldNode) value;
- JPanel panSum = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
- panSum.setOpaque(false);
- for (int i = 0; i < fnode.fieldSet.size(); i++) {
- Field field = fnode.fieldSet.get(i);//fnode.fieldSet.get(FIELD_INDEX);
- int index = fnode.index;
- Object obj = fnode.obj;
- Class> type;
- try {
- type = ReflectionTools.getValue(obj, field, index).getClass();
- } catch (IllegalArgumentException | IllegalAccessException ex) {
- logger.log(Level.SEVERE, "Fixing characters order failed, recursion detected.");
- return null;
- }
- GenericTagEditor editor = null;
- SWFType swfType = field.getAnnotation(SWFType.class);
- Multiline multiline = field.getAnnotation(Multiline.class);
- if (type.equals(int.class) || type.equals(Integer.class)
- || type.equals(short.class) || type.equals(Short.class)
- || type.equals(long.class) || type.equals(Long.class)
- || type.equals(double.class) || type.equals(Double.class)
- || type.equals(float.class) || type.equals(Float.class)) {
- editor = new NumberEditor(field.getName(), obj, field, index, type, swfType);
- } else if (type.equals(boolean.class) || type.equals(Boolean.class)) {
- editor = new BooleanEditor(field.getName(), obj, field, index, type);
- } else if (type.equals(String.class)) {
- editor = new StringEditor(field.getName(), obj, field, index, type, multiline != null);
- } else if (type.equals(RGB.class) || type.equals(RGBA.class) || type.equals(ARGB.class)) {
- editor = new ColorEditor(field.getName(), obj, field, index, type);
- }
- if (editor != null) {
- if (editors == null) {
- editors = new ArrayList<>();
- }
- editors.add(editor);
- }
- JPanel pan = new JPanel();
- FlowLayout fl = new FlowLayout(FlowLayout.LEFT, 0, 0);
- fl.setAlignOnBaseline(true);
- pan.setLayout(fl);
- JLabel nameLabel = new JLabel(fnode.getNameType(i) + " = ") {
-
- @Override
- public BaselineResizeBehavior getBaselineResizeBehavior() {
- return Component.BaselineResizeBehavior.CONSTANT_ASCENT;
- }
-
- @Override
- public int getBaseline(int width, int height) {
- return 0;
- }
-
- };
- pan.setBackground(Color.white);
- nameLabel.setAlignmentY(TOP_ALIGNMENT);
- pan.add(nameLabel);
-
- JComponent editorComponent = (JComponent) editor;
- if (editorComponent != null) {
- nameLabel.setSize(nameLabel.getWidth(), editorComponent.getHeight());
- editorComponent.setAlignmentY(TOP_ALIGNMENT);
- pan.add(editorComponent);
- pan.setPreferredSize(new Dimension((int) nameLabel.getPreferredSize().getWidth() + 5 + (int) editorComponent.getPreferredSize().getWidth(), (int) editorComponent.getPreferredSize().getHeight()));
- } else {
- pan.setPreferredSize(new Dimension((int) nameLabel.getPreferredSize().getWidth(), (int) nameLabel.getPreferredSize().getHeight()));
- }
- panSum.add(pan);
- }
- return panSum;
- }
- return null;
-
- }
-
- @Override
- public Object getCellEditorValue() {
- List