X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmol.java;h=900d3be86a5b56ce8e7d1bfd57f51e55d5924115;hb=8edebdd9789b2d93fb8f9db24b8be2c1e6317690;hp=6139669c4cf6eeaa336efe1107b76df46027670b;hpb=36933f9b768b9f8ace600215c1ddb4882331b92b;p=jalview.git diff --git a/src/jalview/gui/AppJmol.java b/src/jalview/gui/AppJmol.java index 6139669..900d3be 100644 --- a/src/jalview/gui/AppJmol.java +++ b/src/jalview/gui/AppJmol.java @@ -20,6 +20,32 @@ */ package jalview.gui; +import jalview.bin.Cache; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.SequenceI; +import jalview.gui.StructureViewer.ViewerType; +import jalview.io.AppletFormatAdapter; +import jalview.io.JalviewFileChooser; +import jalview.io.JalviewFileView; +import jalview.schemes.BuriedColourScheme; +import jalview.schemes.ColourSchemeI; +import jalview.schemes.HelixColourScheme; +import jalview.schemes.HydrophobicColourScheme; +import jalview.schemes.PurinePyrimidineColourScheme; +import jalview.schemes.StrandColourScheme; +import jalview.schemes.TaylorColourScheme; +import jalview.schemes.TurnColourScheme; +import jalview.schemes.ZappoColourScheme; +import jalview.structures.models.AAStructureBindingModel; +import jalview.util.BrowserLauncher; +import jalview.util.ImageMaker; +import jalview.util.MessageManager; +import jalview.util.Platform; +import jalview.ws.dbsources.Pdb; + import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; @@ -34,8 +60,8 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; +import java.io.IOException; import java.io.PrintWriter; -import java.util.Enumeration; import java.util.Vector; import javax.swing.JCheckBoxMenuItem; @@ -51,29 +77,6 @@ import javax.swing.event.InternalFrameEvent; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; -import jalview.bin.Cache; -import jalview.datamodel.Alignment; -import jalview.datamodel.AlignmentI; -import jalview.datamodel.ColumnSelection; -import jalview.datamodel.PDBEntry; -import jalview.datamodel.SequenceI; -import jalview.gui.StructureViewer.ViewerType; -import jalview.io.AppletFormatAdapter; -import jalview.io.JalviewFileChooser; -import jalview.io.JalviewFileView; -import jalview.schemes.BuriedColourScheme; -import jalview.schemes.ColourSchemeI; -import jalview.schemes.HelixColourScheme; -import jalview.schemes.HydrophobicColourScheme; -import jalview.schemes.PurinePyrimidineColourScheme; -import jalview.schemes.StrandColourScheme; -import jalview.schemes.TaylorColourScheme; -import jalview.schemes.TurnColourScheme; -import jalview.schemes.ZappoColourScheme; -import jalview.structures.models.AAStructureBindingModel; -import jalview.util.MessageManager; -import jalview.util.Platform; - public class AppJmol extends StructureViewerBase { AppJmolBinding jmb; @@ -84,41 +87,8 @@ public class AppJmol extends StructureViewerBase RenderPanel renderPanel; - Vector atomsPicked = new Vector(); - private boolean addingStructures = false; - /** - * - * @param file - * @param id - * @param seq - * @param ap - * @param loadStatus - * @param bounds - * @deprecated defaults to AppJmol(String[] files, ... , viewid); - */ - @Deprecated - public AppJmol(String file, String id, SequenceI[] seq, - AlignmentPanel ap, String loadStatus, Rectangle bounds) - { - this(file, id, seq, ap, loadStatus, bounds, null); - } - - /** - * @deprecated - */ - @Deprecated - public AppJmol(String file, String id, SequenceI[] seq, - AlignmentPanel ap, String loadStatus, Rectangle bounds, - String viewid) - { - this(new String[] - { file }, new String[] - { id }, new SequenceI[][] - { seq }, ap, true, true, false, loadStatus, bounds, viewid); - } - ViewSelectionMenu seqColourBy; /** @@ -180,11 +150,12 @@ public class AppJmol extends StructureViewerBase this.setBounds(bounds); initMenus(); setViewId(viewid); - // jalview.gui.Desktop.addInternalFrame(this, "Loading File", + // Desktop.addInternalFrame(this, "Loading File", // bounds.width,bounds.height); this.addInternalFrameListener(new InternalFrameAdapter() { + @Override public void internalFrameClosing(InternalFrameEvent internalFrameEvent) { closeViewer(false); @@ -345,36 +316,30 @@ public class AppJmol extends StructureViewerBase return; } } - // ///////////////////////////////// - // Check if there are other Jmol views involving this alignment - // and prompt user about adding this molecule to one of them - Vector existingViews = getJmolsFor(ap); - if (existingViews.size() > 0) + + /* + * Check if there are other Jmol views involving this alignment and prompt + * user about adding this molecule to one of them + */ + for (AppJmol topJmol : getJmolsFor(ap)) { - Enumeration jm = existingViews.elements(); - while (jm.hasMoreElements()) + // TODO: highlight topJmol in view somehow + int option = JOptionPane.showInternalConfirmDialog(Desktop.desktop, + MessageManager.formatMessage("label.add_pdbentry_to_view", + new String[] + { pdbentry.getId(), topJmol.getTitle() }), + MessageManager + .getString("label.align_to_existing_structure_view"), + JOptionPane.YES_NO_CANCEL_OPTION); + if (option == JOptionPane.CANCEL_OPTION) { - AppJmol topJmol = (AppJmol) jm.nextElement(); - // TODO: highlight topJmol in view somehow - int option = JOptionPane - .showInternalConfirmDialog( - Desktop.desktop, - MessageManager.formatMessage( - "label.add_pdbentry_to_view", new String[] - { pdbentry.getId(), topJmol.getTitle() }), - MessageManager - .getString("label.align_to_existing_structure_view"), - JOptionPane.YES_NO_CANCEL_OPTION); - if (option == JOptionPane.CANCEL_OPTION) - { - return; - } - if (option == JOptionPane.YES_OPTION) - { - topJmol.useAlignmentPanelForSuperposition(ap); - topJmol.addStructure(pdbentry, seq, chains, true, ap.alignFrame); - return; - } + return; + } + if (option == JOptionPane.YES_OPTION) + { + topJmol.useAlignmentPanelForSuperposition(ap); + topJmol.addStructure(pdbentry, seq, chains, true, ap.alignFrame); + return; } } // ///////////////////////////////// @@ -407,6 +372,7 @@ public class AppJmol extends StructureViewerBase } this.addInternalFrameListener(new InternalFrameAdapter() { + @Override public void internalFrameClosing(InternalFrameEvent internalFrameEvent) { closeViewer(false); @@ -489,18 +455,18 @@ public class AppJmol extends StructureViewerBase return; } - private Vector getJmolsFor(AlignmentPanel apanel) + private Vector getJmolsFor(AlignmentPanel apanel) { - Vector result = new Vector(); + Vector result = new Vector(); JInternalFrame[] frames = Desktop.instance.getAllFrames(); for (JInternalFrame frame : frames) { if (frame instanceof AppJmol) { - if (((StructureViewerBase) frame).isLinkedWith(apanel)) + if (((AppJmol) frame).isLinkedWith(apanel)) { - result.addElement(frame); + result.addElement((AppJmol) frame); } } } @@ -514,7 +480,7 @@ public class AppJmol extends StructureViewerBase // TODO: consider waiting until the structure/view is fully loaded before // displaying this.getContentPane().add(renderPanel, java.awt.BorderLayout.CENTER); - jalview.gui.Desktop.addInternalFrame(this, jmb.getViewerTitle(), + Desktop.addInternalFrame(this, jmb.getViewerTitle(), getBounds().width, getBounds().height); if (scriptWindow == null) { @@ -524,10 +490,10 @@ public class AppJmol extends StructureViewerBase scriptWindow = new JPanel(bl); scriptWindow.setVisible(false); } - ; + jmb.allocateViewer(renderPanel, true, "", null, null, "", scriptWindow, null); - jmb.newJmolPopup(true, "Jmol", true); + // jmb.newJmolPopup("Jmol"); if (command == null) { command = ""; @@ -536,7 +502,7 @@ public class AppJmol extends StructureViewerBase jmb.setFinishedInit(true); } - void setChainMenuItems(Vector chains) + void setChainMenuItems(Vector chains) { chainMenu.removeAll(); if (chains == null) @@ -564,9 +530,9 @@ public class AppJmol extends StructureViewerBase chainMenu.add(menuItem); - for (int c = 0; c < chains.size(); c++) + for (String chain : chains) { - menuItem = new JCheckBoxMenuItem(chains.elementAt(c).toString(), true); + menuItem = new JCheckBoxMenuItem(chain, true); menuItem.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent evt) @@ -588,9 +554,7 @@ public class AppJmol extends StructureViewerBase void centerViewer() { - Vector toshow = new Vector(); - String lbl; - int mlength, p, mnum; + Vector toshow = new Vector(); for (int i = 0; i < chainMenu.getItemCount(); i++) { if (chainMenu.getItem(i) instanceof JCheckBoxMenuItem) @@ -634,7 +598,7 @@ public class AppJmol extends StructureViewerBase String[] curfiles = jmb.getPdbFile(); // files currently in viewer // TODO: replace with reference fetching/transfer code (validate PDBentry // as a DBRef?) - jalview.ws.dbsources.Pdb pdbclient = new jalview.ws.dbsources.Pdb(); + Pdb pdbclient = new Pdb(); for (int pi = 0; pi < jmb.getPdbCount(); pi++) { String file = jmb.getPdbEntry(pi).getFile(); @@ -763,7 +727,7 @@ public class AppJmol extends StructureViewerBase // need to wait around until script has finished while (addingStructures ? lastnotify >= jmb.getLoadNotifiesHandled() - : (jmb.isFinishedInit() && jmb.getPdbFile() != null && jmb + : (!jmb.isFinishedInit() && jmb.getPdbFile() != null && jmb .getPdbFile().length != jmb.getPdbCount())) { try @@ -774,6 +738,7 @@ public class AppJmol extends StructureViewerBase { } } + // refresh the sequence colours for the new structure(s) for (AlignmentPanel ap : _colourwith) { @@ -803,7 +768,7 @@ public class AppJmol extends StructureViewerBase public void pdbFile_actionPerformed(ActionEvent actionEvent) { JalviewFileChooser chooser = new JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); + Cache.getProperty("LAST_DIRECTORY")); chooser.setFileView(new JalviewFileView()); chooser.setDialogTitle(MessageManager.getString("label.save_pdb_file")); @@ -813,10 +778,11 @@ public class AppJmol extends StructureViewerBase if (value == JalviewFileChooser.APPROVE_OPTION) { + BufferedReader in = null; try { // TODO: cope with multiple PDB files in view - BufferedReader in = new BufferedReader(new FileReader( + in = new BufferedReader(new FileReader( jmb.getPdbFile()[0])); File outFile = chooser.getSelectedFile(); @@ -833,6 +799,18 @@ public class AppJmol extends StructureViewerBase } catch (Exception ex) { ex.printStackTrace(); + } finally + { + if (in != null) + { + try + { + in.close(); + } catch (IOException e) + { + // ignore + } + } } } } @@ -840,7 +818,7 @@ public class AppJmol extends StructureViewerBase @Override public void viewMapping_actionPerformed(ActionEvent actionEvent) { - jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer(); + CutAndPasteTransfer cap = new CutAndPasteTransfer(); try { cap.appendText(jmb.printMappings()); @@ -852,7 +830,7 @@ public class AppJmol extends StructureViewerBase cap.dispose(); return; } - jalview.gui.Desktop.addInternalFrame(cap, + Desktop.addInternalFrame(cap, MessageManager.getString("label.pdb_sequence_mapping"), 550, 600); } @@ -860,47 +838,44 @@ public class AppJmol extends StructureViewerBase @Override public void eps_actionPerformed(ActionEvent e) { - makePDBImage(jalview.util.ImageMaker.TYPE.EPS); + makePDBImage(ImageMaker.TYPE.EPS); } @Override public void png_actionPerformed(ActionEvent e) { - makePDBImage(jalview.util.ImageMaker.TYPE.PNG); + makePDBImage(ImageMaker.TYPE.PNG); } - void makePDBImage(jalview.util.ImageMaker.TYPE type) + void makePDBImage(ImageMaker.TYPE type) { int width = getWidth(); int height = getHeight(); - jalview.util.ImageMaker im; + ImageMaker im; - if (type == jalview.util.ImageMaker.TYPE.PNG) + if (type == ImageMaker.TYPE.PNG) { - im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.TYPE.PNG, + im = new ImageMaker(this, ImageMaker.TYPE.PNG, "Make PNG image from view", width, height, null, null); } - else if (type == jalview.util.ImageMaker.TYPE.EPS) + else if (type == ImageMaker.TYPE.EPS) { - im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.TYPE.EPS, + im = new ImageMaker(this, ImageMaker.TYPE.EPS, "Make EPS file from view", width, height, null, this.getTitle()); } else { - im = new jalview.util.ImageMaker(this, - jalview.util.ImageMaker.TYPE.SVG, "Make SVG file from PCA", + im = new ImageMaker(this, ImageMaker.TYPE.SVG, + "Make SVG file from PCA", width, height, null, this.getTitle()); } if (im.getGraphics() != null) { - Rectangle rect = new Rectangle(width, height); - jmb.viewer.renderScreenImage(im.getGraphics(), rect.getSize(), rect); + jmb.viewer.renderScreenImage(im.getGraphics(), width, height); im.writeImage(); } } @@ -936,7 +911,7 @@ public class AppJmol extends StructureViewerBase // Set the colour using the current view for the associated alignframe for (AlignmentPanel ap : _colourwith) { - jmb.colourBySequence(ap.av.isShowSequenceFeatures(), ap); + jmb.colourBySequence(ap); } } } @@ -1033,7 +1008,7 @@ public class AppJmol extends StructureViewerBase { try { - jalview.util.BrowserLauncher + BrowserLauncher .openURL("http://jmol.sourceforge.net/docs/JmolUserGuide/"); } catch (Exception ex) { @@ -1077,14 +1052,12 @@ public class AppJmol extends StructureViewerBase { final Dimension currentSize = new Dimension(); - final Rectangle rectClip = new Rectangle(); - + @Override public void paintComponent(Graphics g) { getSize(currentSize); - g.getClipBounds(rectClip); - if (jmb.fileLoadingError != null) + if (jmb != null && jmb.fileLoadingError != null) { g.setColor(Color.black); g.fillRect(0, 0, currentSize.width, currentSize.height); @@ -1121,7 +1094,8 @@ public class AppJmol extends StructureViewerBase } else { - jmb.viewer.renderScreenImage(g, currentSize, rectClip); + jmb.viewer.renderScreenImage(g, currentSize.width, + currentSize.height); } } }