Issue #1062 Editing/displaying script initializers

This commit is contained in:
Jindra Petřík
2015-10-20 16:37:39 +02:00
parent 057a12ccba
commit f143434d9e
23 changed files with 876 additions and 859 deletions
@@ -37,6 +37,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst;
import com.jpexs.decompiler.flash.gui.AppStrings;
import com.jpexs.decompiler.flash.gui.View;
import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane;
import com.jpexs.decompiler.flash.helpers.GraphTextWriter;
import com.jpexs.decompiler.flash.helpers.hilight.HighlightData;
import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType;
import com.jpexs.decompiler.flash.helpers.hilight.Highlighting;
@@ -516,8 +517,8 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL
Highlighting cm = Highlighting.searchPos(classHighlights, pos);
if (cm != null) {
classIndex = (int) cm.getProperties().index;
displayClass(classIndex, script.scriptIndex);
}
displayClass(classIndex, script.scriptIndex);
Highlighting tm = Highlighting.searchPos(methodHighlights, pos);
if (tm != null) {
String name = "";
@@ -594,13 +595,11 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL
}
public void gotoTrait(int traitId) {
if (traitId == -1) {
return;
}
boolean isScriptInit = traitId == GraphTextWriter.TRAIT_SCRIPT_INITIALIZER;
Highlighting tc = Highlighting.searchIndex(classHighlights, classIndex);
if (tc != null) {
Highlighting th = Highlighting.searchIndex(traitHighlights, traitId, tc.startPos, tc.startPos + tc.len);
if (tc != null || isScriptInit) {
Highlighting th = Highlighting.searchIndex(traitHighlights, traitId, isScriptInit ? 0 : tc.startPos, isScriptInit ? -1 : tc.startPos + tc.len);
int pos;
if (th != null) {
if (th.len > 1) {
@@ -70,6 +70,10 @@ public class IconListRenderer extends DefaultListCellRenderer {
if (tli.getType() == TraitsListItem.Type.INITIALIZER) {
label.setIcon(functionIcon);
}
if (tli.getType() == TraitsListItem.Type.SCRIPT_INITIALIZER) {
label.setIcon(functionIcon);
}
return label;
}
}
@@ -71,11 +71,8 @@ public class TraitsList extends JList<Object> implements ListSelectionListener {
return;
}
this.classIndex = classIndex;
if (classIndex == -1) {
setModel(new DefaultListModel<>());
} else {
setModel(new TraitsListModel(abc, classIndex, scriptIndex, sorted));
}
setModel(new TraitsListModel(abc, classIndex, scriptIndex, sorted));
}
private int lastSelected = -1;
@@ -51,6 +51,8 @@ public class TraitsListItem {
public String STR_CLASS_INITIALIZER = AppStrings.translate("abc.traitslist.classinitializer");
public String STR_SCRIPT_INITIALIZER = AppStrings.translate("abc.traitslist.scriptinitializer");
public TraitsListItem(Type type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) {
this.type = type;
this.index = index;
@@ -63,11 +65,17 @@ public class TraitsListItem {
public int getGlobalTraitId() {
if (type == Type.INITIALIZER) {
if (!isStatic) {
return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size();
return -1;
//return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size();
} else {
return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size() + 1;
return -2;
//return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size() + 1;
}
}
if (type == Type.SCRIPT_INITIALIZER) {
//return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size() + 2;
return -3;
}
if (isStatic) {
return index;
} else {
@@ -76,14 +84,21 @@ public class TraitsListItem {
}
public String toStringName() {
if ((type != Type.INITIALIZER) && isStatic) {
if (type == Type.INITIALIZER) {
if (!isStatic) {
return "__" + STR_INSTANCE_INITIALIZER;
} else {
return "__" + STR_CLASS_INITIALIZER;
}
}
if (type == Type.SCRIPT_INITIALIZER) {
return "__" + STR_SCRIPT_INITIALIZER;
}
if (isStatic) {
return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false);
} else if ((type != Type.INITIALIZER) && (!isStatic)) {
return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false);
} else if (!isStatic) {
return "__" + STR_INSTANCE_INITIALIZER;
} else {
return "__" + STR_CLASS_INITIALIZER;
return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false);
}
}
@@ -91,20 +106,24 @@ public class TraitsListItem {
public String toString() {
String s = "";
try {
if ((type != Type.INITIALIZER) && isStatic) {
if (type == Type.SCRIPT_INITIALIZER) {
s = STR_SCRIPT_INITIALIZER;
} else if (type == Type.INITIALIZER) {
if (!isStatic) {
s = STR_INSTANCE_INITIALIZER;
} else {
s = STR_CLASS_INITIALIZER;
}
} else if (isStatic) {
abc.class_info.get(classIndex).static_traits.traits.get(index).convertHeader(null, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false);
HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false);
abc.class_info.get(classIndex).static_traits.traits.get(index).toStringHeader(null, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false);
s = writer.toString();
} else if ((type != Type.INITIALIZER) && (!isStatic)) {
} else {
abc.instance_info.get(classIndex).instance_traits.traits.get(index).convertHeader(null, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false);
HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false);
abc.instance_info.get(classIndex).instance_traits.traits.get(index).toStringHeader(null, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false);
s = writer.toString();
} else if (!isStatic) {
s = STR_INSTANCE_INITIALIZER;
} else {
s = STR_CLASS_INITIALIZER;
}
} catch (InterruptedException ex) {
Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex);
@@ -126,7 +145,8 @@ public class TraitsListItem {
METHOD,
VAR,
CONST,
INITIALIZER;
INITIALIZER,
SCRIPT_INITIALIZER;
public static Type getTypeForTrait(Trait t) {
if (t instanceof TraitMethodGetterSetter) {
@@ -49,14 +49,17 @@ public final class TraitsListModel implements ListModel<Object> {
private void reset() {
items = new ArrayList<>();
for (int t = 0; t < abc.class_info.get(classIndex).static_traits.traits.size(); t++) {
items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(abc.class_info.get(classIndex).static_traits.traits.get(t)), t, true, abc, classIndex, scriptIndex));
if (classIndex > -1) {
for (int t = 0; t < abc.class_info.get(classIndex).static_traits.traits.size(); t++) {
items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(abc.class_info.get(classIndex).static_traits.traits.get(t)), t, true, abc, classIndex, scriptIndex));
}
for (int t = 0; t < abc.instance_info.get(classIndex).instance_traits.traits.size(); t++) {
items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(abc.instance_info.get(classIndex).instance_traits.traits.get(t)), t, false, abc, classIndex, scriptIndex));
}
items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, false, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, true, abc, classIndex, scriptIndex));
}
for (int t = 0; t < abc.instance_info.get(classIndex).instance_traits.traits.size(); t++) {
items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(abc.instance_info.get(classIndex).instance_traits.traits.get(t)), t, false, abc, classIndex, scriptIndex));
}
items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, false, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, true, abc, classIndex, scriptIndex));
items.add(new TraitsListItem(TraitsListItem.Type.SCRIPT_INITIALIZER, 0, true, abc, classIndex, scriptIndex));
}
public TraitsListModel(ABC abc, int classIndex, int scriptIndex, boolean sorted) {
@@ -177,19 +177,19 @@ config.name.gui.window.maximized.vertical = (Internal) Window maximized vertical
config.description.gui.window.maximized.vertical = Last window state - maximized vertically
config.name.gui.avm2.splitPane.dividerLocationPercent = (Internal) AS3 Splitter location
config.description.gui.avm2.splitPane.dividerLocationPercent =
config.description.gui.avm2.splitPane.dividerLocationPercent =
config.name.gui.actionSplitPane.dividerLocationPercent = (Internal) AS1/2 splitter location
config.description.gui.actionSplitPane.dividerLocationPercent =
config.description.gui.actionSplitPane.dividerLocationPercent =
config.name.gui.previewSplitPane.dividerLocationPercent = (Internal) Preview splitter location
config.description.gui.previewSplitPane.dividerLocationPercent =
config.description.gui.previewSplitPane.dividerLocationPercent =
config.name.gui.splitPane1.dividerLocationPercent = (Internal) Splitter location 1
config.description.gui.splitPane1.dividerLocationPercent =
config.description.gui.splitPane1.dividerLocationPercent =
config.name.gui.splitPane2.dividerLocationPercent = (Internal) Splitter location 2
config.description.gui.splitPane2.dividerLocationPercent =
config.description.gui.splitPane2.dividerLocationPercent =
config.name.saveAsExeScaleMode = Save as EXE scale mode
config.description.saveAsExeScaleMode = Scaling mode for EXE export
@@ -201,16 +201,16 @@ config.name.guiFontPreviewSampleText = (Internal) Last font preview sample text
config.description.guiFontPreviewSampleText = Last font preview sample text list index
config.name.gui.fontPreviewWindow.width = (Internal) Last font preview window width
config.description.gui.fontPreviewWindow.width =
config.description.gui.fontPreviewWindow.width =
config.name.gui.fontPreviewWindow.height = (Internal) Last font preview window height
config.description.gui.fontPreviewWindow.height =
config.description.gui.fontPreviewWindow.height =
config.name.gui.fontPreviewWindow.posX = (Internal) Last font preview window X
config.description.gui.fontPreviewWindow.posX =
config.description.gui.fontPreviewWindow.posX =
config.name.gui.fontPreviewWindow.posY = (Internal) Last font preview window Y
config.description.gui.fontPreviewWindow.posY =
config.description.gui.fontPreviewWindow.posY =
config.name.formatting.indent.size = Characters per indent
config.description.formatting.indent.size = Number or spaces(or tabs) for one indentation
@@ -307,7 +307,7 @@ config.name.textImportResizeTextBoundsMode = Text bounds resize mode
config.description.textImportResizeTextBoundsMode = Text bounds resize mode after text editing.
config.name.showCloseConfirmation = Show again SWF close confirmation
config.description.showCloseConfirmation = Show again SWF close confirmation for modified files.
config.description.showCloseConfirmation = Show again SWF close confirmation for modified files.
config.name.showCodeSavedMessage = Show again code saved message
config.description.showCodeSavedMessage = Show again code saved message
@@ -352,7 +352,7 @@ config.name.loopMedia = Loop sounds and sprites
config.description.loopMedia = Automatically restarts the playing of the sounds and sprites
config.name.gui.timeLineSplitPane.dividerLocationPercent = (Internal) Timeline Splitter location
config.description.gui.timeLineSplitPane.dividerLocationPercent =
config.description.gui.timeLineSplitPane.dividerLocationPercent =
config.name.cacheImages = Cache images
config.description.cacheImages = Cache the decoded image objects
@@ -374,3 +374,6 @@ config.description.overwriteExistingFiles = Overwrite the existing files during
config.name.smartNumberFormatting = Use smart number formatting
config.description.smartNumberFormatting = Format special numbers (for example colors and times)
config.name.enableScriptInitializerDisplay = Display script initializers
config.description.enableScriptInitializerDisplay = Enable script initializers display and editation. This setting may add one newline to each class file for highlighting.
@@ -629,3 +629,4 @@ error.image.alpha.invalid = Invalid alpha channel data.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Save to Uncompressed File
abc.traitslist.scriptinitializer = script initializer
@@ -199,7 +199,7 @@ button.viewgraph = Zobrazit Graf
button.viewhex = Zobrazit Hex
abc.traitslist.instanceinitializer = inicializ\u00e1tor instance
abc.traitslist.classinitializer = inicializ\u00e1tor t\u0159\u00eddy
abc.traitslist.classinitializer = inicializ\u00e1tor t\u0159\u00eddy
action.edit.experimental = (Experiment\u00e1ln\u00ed)
@@ -603,4 +603,29 @@ tagInfo.neededCharacters = Pot\u0159ebn\u00e9 charaktery
button.viewhexpcode = Zobrazit Hex s instrukcemi
taginfo.header = Z\u00e1kladn\u00ed informace o tagu
tagInfo.dependentCharacters = Z\u00e1visl\u00e9 charaktery
tagInfo.dependentCharacters = Z\u00e1visl\u00e9 charaktery
#after version 5.3.0
header.uncompressed = Bez komprese
header.warning.unsupportedGfxCompression = GFX podporuje pouze soubor se Zlib nebo \u017e\u00e1dnou kompres\u00ed.
header.warning.minimumZlibVersion = Zlib komprese vy\u017eaduje SWF verze 6 \u010di vy\u0161\u0161\u00ed.
header.warning.minimumLzmaVersion = LZMA komprese vy\u017eaduje SWF verze 13 \u010di vy\u0161\u0161\u00ed.
tagInfo.codecName = N\u00e1zev kodeku
tagInfo.exportFormat = Form\u00e1t exportu
tagInfo.samplingRate = Vzorkovac\u00ed frekvence
tagInfo.stereo = Stereo
tagInfo.sampleCount = Po\u010det vzork\u016f
filter.dmg = Spustieln\u00e9 soubory Macu (*.dmg)
filter.linuxExe = Linuxov\u00e9 spustiteln\u00e9 soubory
import.script.result = %count% skript\u016f importov\u00e1no.
import.script.as12warning = Import skript\u016f funguje jen pro AS1/2 skripty.
error.constantPoolTooBig = Seznam konstant je moc velk\u00fd index=%index%, velikost=%size%
error.image.alpha.invalid = Neplatn\u00e1 data alpha kan\u00e1lu.
#after version 6.0.2
contextmenu.saveUncompressedToFile = Ulo\u017eit nekomprimovan\u011b
abc.traitslist.scriptinitializer = inicializ\u00e1tor skriptu