Tag list view - adding new tags by category

This commit is contained in:
Jindra Petřík
2022-10-30 13:27:12 +01:00
parent 536fde6bb4
commit 056038dc3b
4 changed files with 52 additions and 13 deletions

View File

@@ -66,17 +66,24 @@ public class TagListTree extends AbstractTagTree {
@Override
public List<Integer> getNestedTagIds(Tag obj) {
if (obj instanceof DefineSpriteTag) {
return Arrays.asList(PlaceObjectTag.ID, PlaceObject2Tag.ID, PlaceObject3Tag.ID, PlaceObject4Tag.ID,
return getSpriteNestedTagIds();
}
return new ArrayList<>();
}
private List<Integer> getSpriteNestedTagIds() {
return Arrays.asList(PlaceObjectTag.ID, PlaceObject2Tag.ID, PlaceObject3Tag.ID, PlaceObject4Tag.ID,
RemoveObjectTag.ID, RemoveObject2Tag.ID, ShowFrameTag.ID, FrameLabelTag.ID,
StartSoundTag.ID, StartSound2Tag.ID, VideoFrameTag.ID,
SoundStreamBlockTag.ID, SoundStreamHeadTag.ID, SoundStreamHead2Tag.ID,
DefineScalingGridTag.ID); //scaling grid? FIXME?
}
return new ArrayList<>(); //FIXME: it should be actually all tags
}
@Override
public List<Integer> getFrameNestedTagIds() {
return new ArrayList<>(); //FIXME: it should be alltags for swf timeline, limited for sprite timeline
public List<Integer> getFrameNestedTagIds(boolean inSprite) {
if (inSprite) {
return getSpriteNestedTagIds();
}
return null; //null = all possible tags
}
}

View File

@@ -496,7 +496,7 @@ public abstract class AbstractTagTree extends JTree {
public abstract List<Integer> getNestedTagIds(Tag obj);
public abstract List<Integer> getFrameNestedTagIds();
public abstract List<Integer> getFrameNestedTagIds(boolean inSprite);
public TreeItem getCurrentTreeItem() {
TreeItem item = (TreeItem) getLastSelectedPathComponent();

View File

@@ -418,8 +418,8 @@ public class TagTree extends AbstractTagTree {
return TreeNodeType.FOLDER;
}
public List<Integer> getSwfFolderItemNestedTagIds(String folderName, boolean gfx) {
List<Integer> ret = null;
public static List<Integer> getSwfFolderItemNestedTagIds(String folderName, boolean gfx) {
List<Integer> ret = new ArrayList<>();
switch (folderName) {
case TagTreeModel.FOLDER_SHAPES:
ret = Arrays.asList(DefineShapeTag.ID, DefineShape2Tag.ID, DefineShape3Tag.ID, DefineShape4Tag.ID);
@@ -481,7 +481,7 @@ public class TagTree extends AbstractTagTree {
}
@Override
public List<Integer> getFrameNestedTagIds() {
public List<Integer> getFrameNestedTagIds(boolean inSprite) {
return Arrays.asList(PlaceObjectTag.ID, PlaceObject2Tag.ID, PlaceObject3Tag.ID, PlaceObject4Tag.ID,
RemoveObjectTag.ID, RemoveObject2Tag.ID, FrameLabelTag.ID,
StartSoundTag.ID, StartSound2Tag.ID, VideoFrameTag.ID,
@@ -509,7 +509,7 @@ public class TagTree extends AbstractTagTree {
if (obj instanceof DefineButton2Tag) {
return Arrays.asList(DefineButtonSoundTag.ID, DefineScalingGridTag.ID);
}
return null;
return new ArrayList<>();
}

View File

@@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.parser.ActionParseException;
import com.jpexs.decompiler.flash.action.parser.script.ActionScript2Parser;
import com.jpexs.decompiler.flash.gui.AppDialog;
import com.jpexs.decompiler.flash.gui.AppStrings;
import com.jpexs.decompiler.flash.gui.SelectTagPositionDialog;
import com.jpexs.decompiler.flash.gui.Main;
import com.jpexs.decompiler.flash.gui.MainPanel;
@@ -717,7 +718,6 @@ public class TagTreeContextMenu extends JPopupMenu {
private List<Integer> getAllowedTagTypes(TreeItem item) {
if (item instanceof FolderItem) {
List<Integer> allowedTagTypes;
FolderItem folderItem = (FolderItem) item;
SWF swf = item.getSwf();
@@ -725,7 +725,7 @@ public class TagTreeContextMenu extends JPopupMenu {
} else if (item instanceof Tag) {
return getTree().getNestedTagIds((Tag) item);
} else if (item instanceof Frame) {
return getTree().getFrameNestedTagIds();
return getTree().getFrameNestedTagIds(((Frame) item).timeline.timelined instanceof DefineSpriteTag);
}
return new ArrayList<>();
@@ -736,8 +736,40 @@ public class TagTreeContextMenu extends JPopupMenu {
void call(ActionEvent evt, TreeItem item, Class<?> cl);
}
private void addAddTagMenuFolder(JMenu addTagMenu, String folder, boolean gfx, TreeItem item, AddTagActionLisener listener) {
String folderTranslated = AppStrings.translate("node."+folder);
JMenu folderMenu = new JMenu(folderTranslated);
List<Integer> allowedTagTypes = TagTree.getSwfFolderItemNestedTagIds(folder, gfx);
if (allowedTagTypes.isEmpty()) {
return;
}
addAddTagMenuItems(allowedTagTypes, folderMenu, item, listener);
addTagMenu.add(folderMenu);
}
private void addAddTagMenuItems(List<Integer> allowedTagTypes, JMenu addTagMenu, TreeItem item, AddTagActionLisener listener) {
if (allowedTagTypes == null) {
boolean gfx = mainPanel.getCurrentSwf().gfx;
String folders[] = new String[] {
TagTreeModel.FOLDER_SHAPES,
TagTreeModel.FOLDER_MORPHSHAPES,
TagTreeModel.FOLDER_SPRITES,
TagTreeModel.FOLDER_TEXTS,
TagTreeModel.FOLDER_IMAGES,
TagTreeModel.FOLDER_MOVIES,
TagTreeModel.FOLDER_SOUNDS,
TagTreeModel.FOLDER_BUTTONS,
TagTreeModel.FOLDER_FONTS,
TagTreeModel.FOLDER_BINARY_DATA,
TagTreeModel.FOLDER_FRAMES,
TagTreeModel.FOLDER_OTHERS
};
for (String folder : folders) {
addAddTagMenuFolder(addTagMenu, folder, gfx, item, listener);
}
return;
}