Merge commit 'alpha/update_2_12_for_2_11_2_series_merge^2' into HEAD
[jalview.git] / src / jalview / api / FeatureSettingsModelI.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;
22
23 import jalview.datamodel.features.FeatureMatcherSetI;
24
25 import java.util.Comparator;
26
27 /**
28  * An interface that describes the settings configurable in the Feature Settings
29  * dialog.
30  * 
31  * @author gmcarstairs
32  */
33 public interface FeatureSettingsModelI extends Comparator<String>
34 {
35
36   // note Java 8 will allow default implementations of these methods in the
37   // interface, simplifying instantiating classes
38
39   /**
40    * Answers true if the specified feature type is to be displayed, false if no
41    * preference
42    * 
43    * @param type
44    * @return
45    */
46   boolean isFeatureDisplayed(String type);
47
48   /**
49    * Answers true if the specified feature type is to be hidden, false if no
50    * preference
51    * 
52    * @param type
53    * @return
54    */
55   boolean isFeatureHidden(String type);
56
57   /**
58    * Answers true if the specified feature group is displayed
59    * 
60    * @param group
61    * @return
62    */
63   boolean isGroupDisplayed(String group);
64
65   /**
66    * Returns the colour (or graduated colour) for the feature type, or null if
67    * not known
68    * 
69    * @param type
70    * @return
71    */
72   FeatureColourI getFeatureColour(String type);
73
74   /**
75    * Returns any filters defined for the feature type, or null if not known
76    * 
77    * @param type
78    * @return
79    */
80
81   FeatureMatcherSetI getFeatureFilters(String type);
82
83   /**
84    * Returns the transparency value, from 0 (fully transparent) to 1 (fully
85    * opaque)
86    * 
87    * @return
88    */
89   float getTransparency();
90
91   /**
92    * Returns -1 if feature1 is displayed before (below) feature 2, +1 if
93    * feature2 is displayed after (on top of) feature1, or 0 if we don't care.
94    * 
95    * <br>
96    * Note that this is the opposite ordering to how features are displayed in
97    * the feature settings dialogue. FeatureRendererModel.setFeaturePriority
98    * takes care of converting between the two.
99    * 
100    * @param feature1
101    * @param feature2
102    * @return
103    */
104   @Override
105   int compare(String feature1, String feature2);
106
107   /**
108    * Answers true if features should be initially sorted so that features with a
109    * shorter average length are displayed on top of those with a longer average
110    * length
111    * 
112    * @return
113    */
114   boolean optimiseOrder();
115
116 }