JAL-3148 SequenceRenderer, ResidueColourFinder overloads and
[jalview.git] / src / jalview / api / structures / JalviewStructureDisplayI.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.api.structures;
22
23 import jalview.api.AlignmentViewPanel;
24 import jalview.datamodel.PDBEntry;
25 import jalview.datamodel.SequenceI;
26 import jalview.gui.AlignmentPanel;
27 import jalview.structures.models.AAStructureBindingModel;
28
29 public interface JalviewStructureDisplayI
30 {
31
32   AAStructureBindingModel getBinding();
33
34   /**
35    * @return true if there is an active GUI handling a structure display
36    */
37   boolean isVisible();
38
39   /**
40    * enable or disable the structure display - note this might just hide or show
41    * a GUI element, but not actually reset the display
42    * 
43    * @param b
44    */
45   void setVisible(boolean b);
46
47   /**
48    * free up any external resources that were used by this display and collect
49    * garbage
50    */
51   void dispose();
52
53   /**
54    * Shutdown any Jalview structure viewing processes started by this display
55    * 
56    * @param closeExternalViewer
57    *          if true, force close any linked external viewer process
58    */
59   void closeViewer(boolean closeExternalViewer);
60
61   /**
62    * 
63    * @return true if all background sequence/structure binding threads have
64    *         completed for this viewer instance
65    */
66   boolean hasMapping();
67
68   /**
69    * Checks if the PDB file is already loaded in this viewer, if so just adds
70    * mappings as necessary and answers true, else answers false. This supports
71    * the use case of adding additional chains of the same structure to a viewer.
72    * 
73    * @param seq
74    * @param chains
75    * @param apanel
76    * @param pdbId
77    * @return
78    */
79   boolean addAlreadyLoadedFile(SequenceI[] seq, String[] chains,
80           AlignmentViewPanel apanel, String pdbId);
81
82   /**
83    * Adds one or more chains (sequences) of a PDB structure to this structure
84    * viewer
85    * 
86    * @param pdbentry
87    * @param seq
88    * @param chains
89    * @param apanel
90    * @param pdbId
91    * @return
92    */
93   void addToExistingViewer(PDBEntry pdbentry, SequenceI[] seq,
94           String[] chains, AlignmentViewPanel apanel, String pdbId);
95
96   /**
97    * refresh GUI after reconfiguring structure(s) and alignment panels
98    */
99   void updateTitleAndMenus();
100
101   /**
102    * Answers true if the viewer should attempt to align any added structures,
103    * else false
104    * 
105    * @return
106    */
107   boolean isAlignAddedStructures();
108
109   /**
110    * Sets the flag for whether added structures should be aligned
111    * 
112    * @param alignAdded
113    */
114   void setAlignAddedStructures(boolean alignAdded);
115
116   /**
117    * Raise the panel to the top of the stack...
118    */
119   void raiseViewer();
120
121   /**
122    * Answers true if the argument is a view used as the basis for structure 
123    * colouring
124    * 
125    * @param o
126    * @return
127    */
128   boolean isUsedForColourBy(Object o);
129
130 }