+ @Override
+ public String colourByChain()
+ {
+ return CMD_COLOUR_BY_CHAIN;
+ }
+
+ @Override
+ public String colourByCharge()
+ {
+ return CMD_COLOUR_BY_CHARGE;
+ }
+
+ @Override
+ public String colourByResidues(Map<String, Color> colours)
+ {
+ StringBuilder cmd = new StringBuilder(12 * colours.size());
+
+ /*
+ * concatenate commands like
+ * color #4949b6 ::VAL
+ */
+ for (Entry<String, Color> entry : colours.entrySet())
+ {
+ String colorSpec = ColorUtils.toTkCode(entry.getValue());
+ String resCode = entry.getKey();
+ cmd.append("color ").append(colorSpec).append(" ::").append(resCode)
+ .append(CMD_SEPARATOR);
+ }
+ return cmd.toString();
+ }
+
+ @Override
+ public String setBackgroundColour(Color col)
+ {
+ return "set bgColor " + ColorUtils.toTkCode(col);
+ }
+
+ @Override
+ public String focusView()
+ {
+ return "focus";
+ }
+
+ @Override
+ public String showChains(List<String> toShow)
+ {
+ /*
+ * Construct a chimera command like
+ *
+ * ~display #*;~ribbon #*;ribbon :.A,:.B
+ */
+ StringBuilder cmd = new StringBuilder(64);
+ boolean first = true;
+ for (String chain : toShow)
+ {
+ String[] tokens = chain.split(":");
+ if (tokens.length == 2)
+ {
+ String showChainCmd = tokens[0] + ":." + tokens[1];
+ if (!first)
+ {
+ cmd.append(",");
+ }
+ cmd.append(showChainCmd);
+ first = false;
+ }
+ }
+
+ /*
+ * could append ";focus" to this command to resize the display to fill the
+ * window, but it looks more helpful not to (easier to relate chains to the
+ * whole)
+ */
+ final String command = "~display #*; ~ribbon #*; ribbon :"
+ + cmd.toString();
+ return command;
+ }
+