Fixed Proper disabling switching items or other actions on editation

This commit is contained in:
Jindra Petřík
2022-12-18 23:10:24 +01:00
parent 8e8dadc23b
commit 60c5eb14ba
5 changed files with 165 additions and 36 deletions
@@ -128,6 +128,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return false;
}
if (mainFrame.getPanel().checkEdited()) {
return false;
}
Main.openFileDialog();
return true;
@@ -182,6 +185,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
protected void newActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
return;
}
Main.newFile();
}
@@ -189,6 +195,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return false;
}
if (mainFrame.getPanel().checkEdited()) {
return false;
}
return saveOpenable(openable);
}
@@ -196,6 +205,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return false;
}
if (mainFrame.getPanel().checkEdited()) {
return false;
}
if (openable != null) {
if (saveAs(openable, SaveFileMode.SAVEAS)) {
@@ -230,6 +242,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
if (openable != null) {
saveAs(openable, SaveFileMode.EXE);
@@ -255,6 +270,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
Set<OpenableList> listsToClose = new LinkedHashSet<>();
for (TreeItem item : mainFrame.getPanel().getCurrentTree().getSelected()) {
if (item instanceof OpenableList) {
@@ -285,6 +303,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return false;
}
if (mainFrame.getPanel().checkEdited()) {
return false;
}
if (openable != null) {
boolean result = Main.closeAll();
@@ -308,6 +329,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importText((SWF) openable);
}
@@ -316,6 +340,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importScript(openable);
}
@@ -324,6 +351,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importImage((SWF) openable);
}
@@ -331,6 +361,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importShape((SWF) openable, false);
}
@@ -338,6 +371,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importShape((SWF) openable, true);
}
@@ -345,6 +381,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importSymbolClass((SWF) openable);
}
@@ -353,6 +392,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return false;
}
if (mainFrame.getPanel().checkEdited()) {
return false;
}
return export(false);
}
@@ -361,6 +403,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return false;
}
if (mainFrame.getPanel().checkEdited()) {
return false;
}
return export(true);
}
@@ -380,6 +425,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().exportFla((SWF) openable);
}
@@ -388,6 +436,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().importSwfXml(mainFrame.getPanel().getCurrentTree().getSelected());
}
@@ -396,6 +447,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().exportSwfXml(mainFrame.getPanel().getCurrentTree().getSelected());
}
@@ -436,6 +490,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
Main.showProxy();
}
@@ -449,6 +506,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().renameOneIdentifier((SWF) openable);
}
@@ -459,6 +519,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().renameColliding(openable);
}
@@ -469,6 +532,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().renameIdentifiers(openable);
}
@@ -477,6 +543,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
mainFrame.getPanel().deobfuscate();
}
@@ -485,6 +554,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
AbstractButton button = (AbstractButton) evt.getSource();
boolean selected = button.isSelected();
@@ -600,6 +672,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
if (!Main.checkForUpdates()) {
ViewMessages.showMessageDialog(Main.getDefaultMessagesComponent(), translate("update.check.nonewversion"), translate("update.check.title"), JOptionPane.INFORMATION_MESSAGE);
@@ -610,6 +685,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
String helpUsURL = ApplicationInfo.PROJECT_PAGE;
if (!View.navigateUrl(helpUsURL)) {
@@ -621,6 +699,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
String homePageURL = ApplicationInfo.PROJECT_PAGE;
if (!View.navigateUrl(homePageURL)) {
@@ -632,11 +713,17 @@ public abstract class MainFrameMenu implements MenuBuilder {
if (Main.isWorking()) {
return;
}
if (mainFrame.getPanel().checkEdited()) {
return;
}
Main.about();
}
protected boolean reloadActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
return false;
}
if (openable != null) {
if (!Configuration.showCloseConfirmation.get() || ViewMessages.showConfirmDialog(Main.getDefaultMessagesComponent(), translate("message.confirm.reload"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
if (openable.getOpenableList() == null) {
@@ -655,6 +742,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
protected boolean reloadAllActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
return false;
}
if (openable != null) {
if (!Configuration.showCloseConfirmation.get() || ViewMessages.showConfirmDialog(Main.getDefaultMessagesComponent(), translate("message.confirm.reloadAll"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
Main.reloadApp();
@@ -668,6 +758,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
protected void advancedSettingsActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
return;
}
Main.advancedSettings();
}
@@ -719,6 +812,9 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
}*/
protected void setLanguageActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
return;
}
new SelectLanguageDialog(Main.getDefaultDialogsOwner()).display();
}
@@ -1303,15 +1399,37 @@ public abstract class MainFrameMenu implements MenuBuilder {
public void showTagListView() {
viewTagListActionPerformed(null);
}
private void reselectView() {
switch(mainFrame.getPanel().getCurrentView()) {
case MainPanel.VIEW_RESOURCES:
setMenuChecked("/file/view/viewResources", true);
break;
case MainPanel.VIEW_TAGLIST:
setMenuChecked("/file/view/viewTagList", true);
break;
case MainPanel.VIEW_DUMP:
setMenuChecked("/file/view/viewHex", true);
break;
}
}
private void viewResourcesActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
reselectView();
return;
}
Configuration.dumpView.set(false);
mainFrame.getPanel().showView(MainPanel.VIEW_RESOURCES);
setGroupSelection("view", "/file/view/viewResources");
setMenuChecked("/tools/timeline", false);
}
}
private void viewHexActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
reselectView();
return;
}
Configuration.dumpView.set(true);
MainPanel mainPanel = mainFrame.getPanel();
if (mainPanel.isModified()) {
@@ -1324,6 +1442,10 @@ public abstract class MainFrameMenu implements MenuBuilder {
}
private void viewTagListActionPerformed(ActionEvent evt) {
if (mainFrame.getPanel().checkEdited()) {
reselectView();
return;
}
Configuration.dumpView.set(false);
MainPanel mainPanel = mainFrame.getPanel();
mainPanel.showView(MainPanel.VIEW_TAGLIST);
@@ -660,35 +660,37 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
public boolean isClipboardCut() {
return clipboardCut;
}
public boolean checkEdited() {
if (abcPanel != null && abcPanel.isEditing()) {
abcPanel.tryAutoSave();
}
if (actionPanel != null && actionPanel.isEditing()) {
actionPanel.tryAutoSave();
}
if (previewPanel.isEditing()) {
previewPanel.tryAutoSave();
}
if (headerPanel.isEditing()) {
headerPanel.tryAutoSave();
}
return (abcPanel != null && abcPanel.isEditing())
|| (actionPanel != null && actionPanel.isEditing())
|| previewPanel.isEditing() || headerPanel.isEditing();
}
private class MyTreeSelectionModel extends DefaultTreeSelectionModel {
private boolean isModified() {
if (abcPanel != null && abcPanel.isEditing()) {
abcPanel.tryAutoSave();
}
if (actionPanel != null && actionPanel.isEditing()) {
actionPanel.tryAutoSave();
}
if (previewPanel.isEditing()) {
previewPanel.tryAutoSave();
}
if (headerPanel.isEditing()) {
headerPanel.tryAutoSave();
}
return (abcPanel != null && abcPanel.isEditing())
|| (actionPanel != null && actionPanel.isEditing())
|| previewPanel.isEditing() || headerPanel.isEditing();
}
@Override
public void addSelectionPath(TreePath path) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -697,7 +699,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void addSelectionPaths(TreePath[] paths) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -706,7 +708,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void setSelectionPath(TreePath path) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -715,7 +717,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void setSelectionPaths(TreePath[] pPaths) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -724,7 +726,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void clearSelection() {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -732,7 +734,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
public void setSelection(TreePath[] selection) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -741,7 +743,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void removeSelectionPath(TreePath path) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -750,7 +752,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void removeSelectionPaths(TreePath[] paths) {
if (isModified()) {
if (checkEdited()) {
return;
}
@@ -1900,7 +1902,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), singleScriptFile, false);
String singleFileName = Path.combine(scriptsFolder, openable.getShortFileName() + scriptExportSettings.getFileExtension());
try ( FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
if (swf.isAS3()) {
ret.addAll(new AS3ScriptExporter().exportActionScript3(swf, handler, scriptsFolder, as3scripts, scriptExportSettings, parallel, evl));
@@ -2007,7 +2009,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
ScriptExportSettings scriptExportSettings = new ScriptExportSettings(export.getValue(ScriptExportMode.class), singleScriptFile, false);
String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension());
try ( FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
swf.exportActionScript(handler, scriptsFolder, scriptExportSettings, parallel, evl);
}
@@ -2124,7 +2126,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
ScriptExportSettings scriptExportSettings = new ScriptExportSettings(exportMode, singleScriptFile, false);
String singleFileName = Path.combine(scriptsFolder, swf.getShortFileName() + scriptExportSettings.getFileExtension());
try ( FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
try (FileTextWriter writer = scriptExportSettings.singleFile ? new FileTextWriter(Configuration.getCodeFormatting(), new FileOutputStream(singleFileName)) : null) {
scriptExportSettings.singleFileWriter = writer;
swf.exportActionScript(handler, scriptsFolder, scriptExportSettings, parallel, evl);
}
@@ -3528,7 +3530,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
if (selectedFile != null) {
File selfile = Helper.fixDialogFile(selectedFile);
try {
try ( FileInputStream fis = new FileInputStream(selfile)) {
try (FileInputStream fis = new FileInputStream(selfile)) {
new SwfXmlImporter().importSwf(swf, fis);
}
swf.clearAllCache();
@@ -157,6 +157,9 @@ public class PinsPanel extends JPanel {
pinButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (mainPanel.checkEdited()) {
return;
}
current = pinButton.getItem();
if (lastSelectedButton != null) {
lastSelectedButton.setSelected(false);
@@ -1212,7 +1212,8 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
public boolean isEditing() {
return textPanel.isEditing()
|| (genericSaveButton.isVisible() && genericSaveButton.isEnabled())
|| (metadataSaveButton.isVisible() && metadataSaveButton.isEnabled());
|| (metadataSaveButton.isVisible() && metadataSaveButton.isEnabled())
|| (placeSaveButton.isVisible() && placeSaveButton.isEnabled());
}
public void selectImageDepth(int depth) {