X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructures%2Fmodels%2FAAStructureBindingModel.java;h=289d340260858586e695f5bfd6d036b6f13bcc0e;hb=7856e91f60adc5c2d4943bad84a5a83e1412f00c;hp=1afa15e7673a9a992a60d268311aef9e7d533b84;hpb=4ee3a368d2de9eaa050137f7d45cfac0c432ef53;p=jalview.git diff --git a/src/jalview/structures/models/AAStructureBindingModel.java b/src/jalview/structures/models/AAStructureBindingModel.java index 1afa15e..289d340 100644 --- a/src/jalview/structures/models/AAStructureBindingModel.java +++ b/src/jalview/structures/models/AAStructureBindingModel.java @@ -57,7 +57,6 @@ import jalview.schemes.ColourSchemeI; import jalview.schemes.ResidueProperties; import jalview.structure.AtomSpec; import jalview.structure.AtomSpecModel; -import jalview.structure.StructureCommand; import jalview.structure.StructureCommandI; import jalview.structure.StructureCommandsI; import jalview.structure.StructureListener; @@ -981,8 +980,8 @@ public abstract class AAStructureBindingModel // TODO: JAL-628 colour chains distinctly across all visible models - executeCommand(commandGenerator.colourByChain(), false, - COLOURING_STRUCTURES); + executeCommand(false, COLOURING_STRUCTURES, + commandGenerator.colourByChain()); } /** @@ -1040,34 +1039,69 @@ public abstract class AAStructureBindingModel public void setBackgroundColour(Color col) { StructureCommandI cmd = commandGenerator.setBackgroundColour(col); - executeCommand(cmd, false, null); + executeCommand(false, null, cmd); } /** - * Sends one command to the structure viewer. If {@code getReply} is true, the - * command is sent synchronously, otherwise in a deferred thread. - *

- * If a progress message is supplied, this is displayed before command - * execution, and removed afterwards. + * Execute one structure viewer command. If {@code getReply} is true, may + * optionally return one or more reply messages, else returns null. * * @param cmd * @param getReply + */ + protected abstract List executeCommand(StructureCommandI cmd, + boolean getReply); + + /** + * Executes one or more structure viewer commands + * + * @param commands + * @param getReply * @param msg - * @return */ - private List executeCommand(StructureCommandI cmd, + protected List executeCommands(List commands, boolean getReply, String msg) { - final JalviewStructureDisplayI theViewer = getViewer(); + return executeCommand(getReply, msg, + commands.toArray(new StructureCommandI[commands.size()])); + } + + /** + * Executes one or more structure viewer commands, optionally returning the + * reply, and optionally showing a status message while the command is being + * executed. + *

+ * If a reply is wanted, the execution is done synchronously (waits), + * otherwise it is done in a separate thread (doesn't wait). + * + * @param getReply + * @param msg + * @param cmds + * @return + */ + protected List executeCommand(boolean getReply, String msg, + StructureCommandI... cmds) + { + JalviewStructureDisplayI theViewer = getViewer(); final long handle = msg == null ? 0 : theViewer.startProgressBar(msg); + if (getReply) { /* - * synchronous (same thread) execution so reply can be returned + * execute and wait for reply */ + List response = new ArrayList<>(); try { - return executeCommand(cmd, true); + for (StructureCommandI cmd : cmds) + { + List replies = executeCommand(cmd, true); + if (replies != null) + { + response.addAll(replies); + } + } + return response; } finally { if (msg != null) @@ -1076,62 +1110,39 @@ public abstract class AAStructureBindingModel } } } - else + + /* + * fire and forget + */ + String threadName = msg == null ? "StructureCommand" : msg; + new Thread(new Runnable() { - /* - * asynchronous (new thread) execution if no reply needed - */ - SwingUtilities.invokeLater(new Runnable() + @Override + public void run() { - @Override - public void run() + try { - try + for (StructureCommandI cmd : cmds) { executeCommand(cmd, false); - } finally + } + } finally + { + if (msg != null) { - if (msg != null) + SwingUtilities.invokeLater(new Runnable() { - theViewer.stopProgressBar(null, handle); - } + @Override + public void run() + { + theViewer.stopProgressBar(null, handle); + } + }); } } - }); - return null; - } - } - - /** - * Execute one structure viewer command. If {@code getReply} is true, may - * optionally return one or more reply messages, else returns null. - * - * @param cmd - * @param getReply - */ - protected abstract List executeCommand(StructureCommandI cmd, - boolean getReply); - - /** - * Executes one or more structure viewer commands - * - * @param commands - * @param getReply - * @param msg - */ - protected List executeCommands(List commands, - boolean getReply, String msg) - { - List response = getReply ? new ArrayList<>() : null; - for (StructureCommandI cmd : commands) - { - List replies = executeCommand(cmd, getReply, msg); - if (replies != null) - { - response.addAll(replies); } - } - return response; + }, threadName).start(); + return null; } /** @@ -1157,7 +1168,7 @@ public abstract class AAStructureBindingModel */ public void focusView() { - executeCommand(commandGenerator.focusView(), false, null); + executeCommand(false, null, commandGenerator.focusView()); } /** @@ -1276,40 +1287,6 @@ public abstract class AAStructureBindingModel protected abstract ViewerType getViewerType(); /** - * Send a structure viewer command asynchronously in a new thread. If the - * progress message is not null, display this message while the command is - * executing. - * - * @param command - * @param progressMsg - */ - protected void sendAsynchronousCommand(StructureCommandI command, - String progressMsg) - { - final JalviewStructureDisplayI theViewer = getViewer(); - final long handle = progressMsg == null ? 0 - : theViewer.startProgressBar(progressMsg); - SwingUtilities.invokeLater(new Runnable() - { - @Override - public void run() - { - try - { - executeCommand(command, false, null); - } finally - { - if (progressMsg != null) - { - theViewer.stopProgressBar(null, handle); - } - } - } - }); - - } - - /** * Builds a data structure which records mapped structure residues for each * colour. From this we can easily generate the viewer commands for colour by * sequence. Constructs and returns a map of {@code Color} to