JAL-1684 removed reflection from ViewStyle (to Junit), and removed
[jalview.git] / src / jalview / viewmodel / styles / ViewStyle.java
1 package jalview.viewmodel.styles;
2
3 import java.awt.Color;
4
5 import jalview.api.ViewStyleI;
6
7 /**
8  * A container for holding alignment view properties. View properties are
9  * data-independent, which means they can be safely copied between views
10  * involving different alignment data without causing exceptions in the
11  * rendering system.
12  * 
13  * @author jprocter
14  *
15  */
16 public class ViewStyle implements ViewStyleI
17 {
18   private boolean abovePIDThreshold = false;
19
20   int charHeight;
21
22   int charWidth;
23
24   int idWidth = -1;
25
26   /**
27    * gui state - changes to colour scheme propagated to all groups
28    */
29   private boolean colourAppliesToAllGroups;
30
31   /**
32    * centre columnar annotation labels in displayed alignment annotation
33    */
34   boolean centreColumnLabels = false;
35
36   private boolean showdbrefs;
37
38   private boolean shownpfeats;
39
40   // --------END Structure Conservation
41
42   /**
43    * colour according to the reference sequence defined on the alignment
44    */
45   private boolean colourByReferenceSeq = false;
46
47   boolean conservationColourSelected = false;
48
49   /**
50    * show the reference sequence in the alignment view
51    */
52   private boolean displayReferenceSeq = false;
53
54   private int increment;
55
56   /**
57    * display gap characters
58    */
59   boolean renderGaps = true;
60
61   private boolean rightAlignIds = false;
62
63   boolean scaleAboveWrapped = false;
64
65   boolean scaleLeftWrapped = true;
66
67   boolean scaleRightWrapped = true;
68
69   boolean seqNameItalics;
70
71   /**
72    * show annotation tracks on the alignment
73    */
74   private boolean showAnnotation = true;
75
76   /**
77    * render each residue in a coloured box
78    */
79   boolean showBoxes = true;
80
81   /**
82    * Colour sequence text
83    */
84   boolean showColourText = false;
85
86   /**
87    * show blue triangles
88    */
89   boolean showHiddenMarkers = true;
90
91   /**
92    * show /start-end in ID panel
93    */
94   boolean showJVSuffix = true;
95
96   /**
97    * scale features height according to score
98    */
99   boolean showSeqFeaturesHeight;
100
101   /**
102    * display setting for showing/hiding sequence features on alignment view
103    */
104   boolean showSequenceFeatures = false;
105
106   /**
107    * display sequence symbols
108    */
109   boolean showText = true;
110
111   /**
112    * show non-conserved residues only
113    */
114   protected boolean showUnconserved = false;
115
116   Color textColour = Color.black;
117
118   Color textColour2 = Color.white;
119
120   /**
121    * PID or consensus threshold
122    */
123   int threshold;
124
125   /**
126    * threshold for switching between textColour & textColour2
127    */
128   int thresholdTextColour = 0;
129
130   /**
131    * upper case characters in sequence are shown in bold
132    */
133   boolean upperCasebold = false;
134
135   /**
136    * name of base font for view
137    */
138   private String fontName;
139
140   /**
141    * size for base font
142    */
143   private int fontSize;
144
145   /*
146    * If true, scale protein residues to 3 times width of cDNA bases (in
147    * SplitFrame views only)
148    */
149   private boolean scaleProteinAsCdna = true;
150
151   /**
152    * Copy constructor
153    * 
154    * @param vs
155    */
156   public ViewStyle(ViewStyleI vs)
157   {
158     setAbovePIDThreshold(vs.getAbovePIDThreshold());
159     setCentreColumnLabels(vs.isCentreColumnLabels());
160     setCharHeight(vs.getCharHeight());
161     setCharWidth(vs.getCharWidth());
162     setColourAppliesToAllGroups(vs.getColourAppliesToAllGroups());
163     setColourByReferenceSeq(vs.isColourByReferenceSeq());
164     setColourText(vs.getColourText());
165     setConservationColourSelected(vs.isConservationColourSelected());
166     setConservationSelected(vs.getConservationSelected());
167     setDisplayReferenceSeq(vs.isDisplayReferenceSeq());
168     setFontName(vs.getFontName());
169     setFontSize(vs.getFontSize());
170     setFontStyle(vs.getFontStyle());
171     setIdWidth(vs.getIdWidth());
172     setIncrement(vs.getIncrement());
173     setRenderGaps(vs.isRenderGaps());
174     setRightAlignIds(vs.isRightAlignIds());
175     setScaleAboveWrapped(vs.getScaleAboveWrapped());
176     setScaleLeftWrapped(vs.getScaleLeftWrapped());
177     setScaleProteinAsCdna(vs.isScaleProteinAsCdna());
178     setScaleRightWrapped(vs.getScaleRightWrapped());
179     setSeqNameItalics(vs.isSeqNameItalics());
180     setShowAnnotation(vs.isShowAnnotation());
181     setShowBoxes(vs.getShowBoxes());
182     setShowColourText(vs.isShowColourText());
183     setShowDBRefs(vs.isShowDBRefs());
184     setShowHiddenMarkers(vs.getShowHiddenMarkers());
185     setShowJVSuffix(vs.getShowJVSuffix());
186     setShowNPFeats(vs.isShowNPFeats());
187     setShowSequenceFeaturesHeight(vs.isShowSequenceFeaturesHeight());
188     setShowSequenceFeatures(vs.isShowSequenceFeatures());
189     setShowText(vs.getShowText());
190     setShowUnconserved(vs.getShowUnconserved());
191     setTextColour(vs.getTextColour());
192     setTextColour2(vs.getTextColour2());
193     setThreshold(vs.getThreshold());
194     setThresholdTextColour(vs.getThresholdTextColour());
195     setUpperCasebold(vs.isUpperCasebold());
196     setWrapAlignment(vs.getWrapAlignment());
197     setWrappedWidth(vs.getWrappedWidth());
198     // ViewStyle.configureFrom(this, viewStyle);
199   }
200
201   public ViewStyle()
202   {
203   }
204
205   /**
206    * Returns true if all attributes of the ViewStyles have the same value
207    */
208   @Override
209   public boolean equals(Object other)
210   {
211     if (other == null || !(other instanceof ViewStyle))
212     {
213       return false;
214     }
215     ViewStyle vs = (ViewStyle) other;
216
217     boolean match = (getAbovePIDThreshold() == vs.getAbovePIDThreshold()
218             && isCentreColumnLabels() == vs.isCentreColumnLabels()
219             && getCharHeight() == vs.getCharHeight()
220             && getCharWidth() == vs.getCharWidth()
221             && getColourAppliesToAllGroups() == vs
222                     .getColourAppliesToAllGroups()
223             && isColourByReferenceSeq() == vs.isColourByReferenceSeq()
224             && getColourText() == vs.getColourText()
225             && isConservationColourSelected() == vs
226                     .isConservationColourSelected()
227             && getConservationSelected() == vs.getConservationSelected()
228             && isDisplayReferenceSeq() == vs.isDisplayReferenceSeq()
229             && getFontSize() == vs.getFontSize()
230             && getFontStyle() == vs.getFontStyle()
231             && getIdWidth() == vs.getIdWidth()
232             && getIncrement() == vs.getIncrement()
233             && isRenderGaps() == vs.isRenderGaps()
234             && isRightAlignIds() == vs.isRightAlignIds()
235             && getScaleAboveWrapped() == vs.getScaleAboveWrapped()
236             && getScaleLeftWrapped() == vs.getScaleLeftWrapped()
237             && isScaleProteinAsCdna() == vs.isScaleProteinAsCdna()
238             && getScaleRightWrapped() == vs.getScaleRightWrapped()
239             && isSeqNameItalics() == vs.isSeqNameItalics()
240             && isShowAnnotation() == vs.isShowAnnotation()
241             && getShowBoxes() == vs.getShowBoxes()
242             && isShowColourText() == vs.isShowColourText()
243             && isShowDBRefs() == vs.isShowDBRefs()
244             && getShowHiddenMarkers() == vs.getShowHiddenMarkers()
245             && getShowJVSuffix() == vs.getShowJVSuffix()
246             && isShowNPFeats() == vs.isShowNPFeats()
247             && isShowSequenceFeaturesHeight() == vs
248                     .isShowSequenceFeaturesHeight()
249             && isShowSequenceFeatures() == vs.isShowSequenceFeatures()
250             && getShowText() == vs.getShowText()
251             && getShowUnconserved() == vs.getShowUnconserved()
252             && getThreshold() == vs.getThreshold()
253             && getThresholdTextColour() == vs.getThresholdTextColour()
254             && isUpperCasebold() == vs.isUpperCasebold()
255             && getWrapAlignment() == vs.getWrapAlignment() && getWrappedWidth() == vs
256             .getWrappedWidth());
257     /*
258      * and compare non-primitive types; syntax below will match null with null values
259      */
260     match = match
261             && String.valueOf(getFontName()).equals(
262                     String.valueOf(vs.getFontName()));
263     match = match
264             && String.valueOf(getTextColour()).equals(
265                     String.valueOf(vs.getTextColour()));
266     match = match
267             && String.valueOf(getTextColour2()).equals(
268                     String.valueOf(vs.getTextColour2()));
269     return match;
270     // return equivalent(this, (ViewStyle) other);
271   }
272
273   @Override
274   public int hashCode()
275   {
276     return 0; // TODO
277   }
278   /**
279    * @return the upperCasebold
280    */
281   @Override
282   public boolean isUpperCasebold()
283   {
284     return upperCasebold;
285   }
286
287   /**
288    * @param upperCasebold
289    *          the upperCasebold to set
290    */
291   @Override
292   public void setUpperCasebold(boolean upperCasebold)
293   {
294     this.upperCasebold = upperCasebold;
295   }
296
297   /**
298    * flag for wrapping
299    */
300   boolean wrapAlignment = false;
301
302   /**
303    * number columns in wrapped alignment
304    */
305   int wrappedWidth;
306
307   private int fontStyle;
308
309   /**
310    * GUI state
311    * 
312    * @return true if percent identity threshold is applied to shading
313    */
314   @Override
315   public boolean getAbovePIDThreshold()
316   {
317     return abovePIDThreshold;
318   }
319
320   /**
321    * DOCUMENT ME!
322    * 
323    * @return DOCUMENT ME!
324    */
325   @Override
326   public int getCharHeight()
327   {
328     return charHeight;
329   }
330
331   /**
332    * DOCUMENT ME!
333    * 
334    * @return DOCUMENT ME!
335    */
336   @Override
337   public int getCharWidth()
338   {
339     return charWidth;
340   }
341
342   /**
343    * 
344    * 
345    * @return flag indicating if colourchanges propagated to all groups
346    */
347   @Override
348   public boolean getColourAppliesToAllGroups()
349   {
350     return colourAppliesToAllGroups;
351   }
352
353   /**
354    * DOCUMENT ME!
355    * 
356    * @return DOCUMENT ME!
357    */
358   @Override
359   public boolean getColourText()
360   {
361     return showColourText;
362   }
363
364   /**
365    * GUI state
366    * 
367    * @return true if conservation based shading is enabled
368    */
369   @Override
370   public boolean getConservationSelected()
371   {
372     return conservationColourSelected;
373   }
374
375   /**
376    * GUI State
377    * 
378    * @return get scalar for bleaching colourschemes by conservation
379    */
380   @Override
381   public int getIncrement()
382   {
383     return increment;
384   }
385
386   /**
387    * DOCUMENT ME!
388    * 
389    * @return DOCUMENT ME!
390    */
391   @Override
392   public boolean getScaleAboveWrapped()
393   {
394     return scaleAboveWrapped;
395   }
396
397   /**
398    * DOCUMENT ME!
399    * 
400    * @return DOCUMENT ME!
401    */
402   @Override
403   public boolean getScaleLeftWrapped()
404   {
405     return scaleLeftWrapped;
406   }
407
408   /**
409    * DOCUMENT ME!
410    * 
411    * @return DOCUMENT ME!
412    */
413   @Override
414   public boolean getScaleRightWrapped()
415   {
416     return scaleRightWrapped;
417   }
418
419   /**
420    * DOCUMENT ME!
421    * 
422    * @return DOCUMENT ME!
423    */
424   @Override
425   public boolean getShowBoxes()
426   {
427     return showBoxes;
428   }
429
430   @Override
431   public boolean getShowHiddenMarkers()
432   {
433     return showHiddenMarkers;
434   }
435
436   /**
437    * DOCUMENT ME!
438    * 
439    * @return DOCUMENT ME!
440    */
441   @Override
442   public boolean getShowJVSuffix()
443   {
444     return showJVSuffix;
445   }
446
447   /**
448    * DOCUMENT ME!
449    * 
450    * @return DOCUMENT ME!
451    */
452   @Override
453   public boolean getShowText()
454   {
455     return showText;
456   }
457
458   @Override
459   public boolean getShowUnconserved()
460   {
461     return showUnconserved;
462   }
463
464   /**
465    * @return the textColour
466    */
467   @Override
468   public Color getTextColour()
469   {
470     return textColour;
471   }
472
473   /**
474    * @return the textColour2
475    */
476   @Override
477   public Color getTextColour2()
478   {
479     return textColour2;
480   }
481
482   /**
483    * DOCUMENT ME!
484    * 
485    * @return DOCUMENT ME!
486    */
487   @Override
488   public int getThreshold()
489   {
490     return threshold;
491   }
492
493   /**
494    * @return the thresholdTextColour
495    */
496   @Override
497   public int getThresholdTextColour()
498   {
499     return thresholdTextColour;
500   }
501
502   /**
503    * DOCUMENT ME!
504    * 
505    * @return DOCUMENT ME!
506    */
507   @Override
508   public boolean getWrapAlignment()
509   {
510     return wrapAlignment;
511   }
512
513   /**
514    * DOCUMENT ME!
515    * 
516    * @return DOCUMENT ME!
517    */
518   @Override
519   public int getWrappedWidth()
520   {
521     return wrappedWidth;
522   }
523
524   @Override
525   public boolean isColourByReferenceSeq()
526   {
527     return colourByReferenceSeq;
528   }
529
530   /**
531    * @return the conservationColourSelected
532    */
533   @Override
534   public boolean isConservationColourSelected()
535   {
536     return conservationColourSelected;
537   }
538
539   @Override
540   public boolean isDisplayReferenceSeq()
541   {
542     return displayReferenceSeq;
543   }
544
545   /**
546    * @return the renderGaps
547    */
548   @Override
549   public boolean isRenderGaps()
550   {
551     return renderGaps;
552   }
553
554   @Override
555   public boolean isRightAlignIds()
556   {
557     return rightAlignIds;
558   }
559
560   /**
561    * @return the seqNameItalics
562    */
563   @Override
564   public boolean isSeqNameItalics()
565   {
566     return seqNameItalics;
567   }
568
569   @Override
570   public boolean isShowAnnotation()
571   {
572     return showAnnotation;
573   }
574
575   /**
576    * @return the showColourText
577    */
578   @Override
579   public boolean isShowColourText()
580   {
581     return showColourText;
582   }
583
584   /**
585    * @return the showSeqFeaturesHeight
586    */
587   @Override
588   public boolean isShowSequenceFeaturesHeight()
589   {
590     return showSeqFeaturesHeight;
591   }
592
593   @Override
594   public boolean isShowSequenceFeatures()
595   {
596     return showSequenceFeatures;
597   }
598
599   /**
600    * GUI state
601    * 
602    * 
603    * @param b
604    *          indicate if percent identity threshold is applied to shading
605    */
606   @Override
607   public void setAbovePIDThreshold(boolean b)
608   {
609     abovePIDThreshold = b;
610   }
611
612   
613   /**
614    * DOCUMENT ME!
615    * 
616    * @param h
617    *          DOCUMENT ME!
618    */
619   @Override
620   public void setCharHeight(int h)
621   {
622     this.charHeight = h;
623   }
624
625   /**
626    * DOCUMENT ME!
627    * 
628    * @param w
629    *          DOCUMENT ME!
630    */
631   @Override
632   public void setCharWidth(int w)
633   {
634     this.charWidth = w;
635   }
636
637
638   /**
639    * @param value
640    *          indicating if subsequent colourscheme changes will be propagated
641    *          to all groups
642    */
643   @Override
644   public void setColourAppliesToAllGroups(boolean b)
645   {
646     colourAppliesToAllGroups = b;
647   }
648
649   @Override
650   public void setColourByReferenceSeq(boolean colourByReferenceSeq)
651   {
652     this.colourByReferenceSeq = colourByReferenceSeq;
653   }
654
655   /**
656    * DOCUMENT ME!
657    * 
658    * @param state
659    *          DOCUMENT ME!
660    */
661   @Override
662   public void setColourText(boolean state)
663   {
664     showColourText = state;
665   }
666
667   /**
668    * @param conservationColourSelected
669    *          the conservationColourSelected to set
670    */
671   @Override
672   public void setConservationColourSelected(
673           boolean conservationColourSelected)
674   {
675     this.conservationColourSelected = conservationColourSelected;
676   }
677
678   /**
679    * GUI state
680    * 
681    * @param b
682    *          enable conservation based shading
683    */
684   @Override
685   public void setConservationSelected(boolean b)
686   {
687     conservationColourSelected = b;
688   }
689
690   @Override
691   public void setDisplayReferenceSeq(boolean displayReferenceSeq)
692   {
693     this.displayReferenceSeq = displayReferenceSeq;
694   }
695
696   /**
697    * 
698    * @param inc
699    *          set the scalar for bleaching colourschemes according to degree of
700    *          conservation
701    */
702   @Override
703   public void setIncrement(int inc)
704   {
705     increment = inc;
706   }
707
708   /**
709    * DOCUMENT ME!
710    * 
711    * @param state
712    *          DOCUMENT ME!
713    */
714   @Override
715   public void setRenderGaps(boolean state)
716   {
717     renderGaps = state;
718   }
719
720   @Override
721   public void setRightAlignIds(boolean rightAlignIds)
722   {
723     this.rightAlignIds = rightAlignIds;
724   }
725
726   /**
727    * DOCUMENT ME!
728    * 
729    * @param b
730    *          DOCUMENT ME!
731    */
732   @Override
733   public void setScaleAboveWrapped(boolean b)
734   {
735     scaleAboveWrapped = b;
736   }
737
738   /**
739    * DOCUMENT ME!
740    * 
741    * @param b
742    *          DOCUMENT ME!
743    */
744   @Override
745   public void setScaleLeftWrapped(boolean b)
746   {
747     scaleLeftWrapped = b;
748   }
749
750   /**
751    * 
752    * 
753    * @param scaleRightWrapped
754    *          - true or false
755    */
756
757   @Override
758   public void setScaleRightWrapped(boolean b)
759   {
760     scaleRightWrapped = b;
761   }
762
763   @Override
764   public void setSeqNameItalics(boolean italics)
765   {
766     seqNameItalics = italics;
767   }
768
769   @Override
770   public void setShowAnnotation(boolean b)
771   {
772     showAnnotation = b;
773   }
774
775   /**
776    * DOCUMENT ME!
777    * 
778    * @param state
779    *          DOCUMENT ME!
780    */
781   @Override
782   public void setShowBoxes(boolean state)
783   {
784     showBoxes = state;
785   }
786
787   /**
788    * @param showColourText
789    *          the showColourText to set
790    */
791   @Override
792   public void setShowColourText(boolean showColourText)
793   {
794     this.showColourText = showColourText;
795   }
796
797   @Override
798   public void setShowHiddenMarkers(boolean show)
799   {
800     showHiddenMarkers = show;
801   }
802
803   /**
804    * DOCUMENT ME!
805    * 
806    * @param b
807    *          DOCUMENT ME!
808    */
809   @Override
810   public void setShowJVSuffix(boolean b)
811   {
812     showJVSuffix = b;
813   }
814
815   @Override
816   public void setShowSequenceFeaturesHeight(boolean selected)
817   {
818     showSeqFeaturesHeight = selected;
819
820   }
821
822   /**
823    * set the flag
824    * 
825    * @param b
826    *          features are displayed if true
827    */
828   @Override
829   public void setShowSequenceFeatures(boolean b)
830   {
831     showSequenceFeatures = b;
832   }
833
834   /**
835    * DOCUMENT ME!
836    * 
837    * @param state
838    *          DOCUMENT ME!
839    */
840   @Override
841   public void setShowText(boolean state)
842   {
843     showText = state;
844   }
845
846   @Override
847   public void setShowUnconserved(boolean showunconserved)
848   {
849     showUnconserved = showunconserved;
850   }
851
852   /**
853    * @param textColour
854    *          the textColour to set
855    */
856   @Override
857   public void setTextColour(Color textColour)
858   {
859     this.textColour = textColour;
860   }
861
862   /**
863    * @param textColour2
864    *          the textColour2 to set
865    */
866   @Override
867   public void setTextColour2(Color textColour2)
868   {
869     this.textColour2 = textColour2;
870   }
871
872   /**
873    * DOCUMENT ME!
874    * 
875    * @param thresh
876    *          DOCUMENT ME!
877    */
878   @Override
879   public void setThreshold(int thresh)
880   {
881     threshold = thresh;
882   }
883
884   /**
885    * @param thresholdTextColour
886    *          the thresholdTextColour to set
887    */
888   @Override
889   public void setThresholdTextColour(int thresholdTextColour)
890   {
891     this.thresholdTextColour = thresholdTextColour;
892   }
893
894   /**
895    * DOCUMENT ME!
896    * 
897    * @param state
898    *          DOCUMENT ME!
899    */
900   @Override
901   public void setWrapAlignment(boolean state)
902   {
903     wrapAlignment = state;
904   }
905
906   /**
907    * DOCUMENT ME!
908    * 
909    * @param w
910    *          DOCUMENT ME!
911    */
912   @Override
913   public void setWrappedWidth(int w)
914   {
915     this.wrappedWidth = w;
916   }
917
918   @Override
919   public boolean sameStyle(ViewStyleI that)
920   {
921     return this.equals(that);
922   }
923
924   @Override
925   public String getFontName()
926   {
927     return fontName;
928   }
929
930   @Override
931   public int getFontSize()
932   {
933     return fontSize;
934   }
935
936   @Override
937   public int getFontStyle()
938   {
939     return fontStyle;
940   }
941
942   @Override
943   public void setFontName(String name)
944   {
945     fontName = name;
946   }
947
948   @Override
949   public void setFontSize(int size)
950   {
951     fontSize = size;
952
953   }
954
955   @Override
956   public void setFontStyle(int style)
957   {
958     fontStyle = style;
959   }
960
961   @Override
962   public int getIdWidth()
963   {
964     return idWidth;
965   }
966
967   /**
968    * @param idWidth
969    *          the idWidth to set
970    */
971   @Override
972   public void setIdWidth(int idWidth)
973   {
974     this.idWidth = idWidth;
975   }
976
977   /**
978    * @return the centreColumnLabels
979    */
980   @Override
981   public boolean isCentreColumnLabels()
982   {
983     return centreColumnLabels;
984   }
985
986   /**
987    * @param centreColumnLabels
988    *          the centreColumnLabels to set
989    */
990   @Override
991   public void setCentreColumnLabels(boolean centreColumnLabels)
992   {
993     this.centreColumnLabels = centreColumnLabels;
994   }
995
996   /**
997    * @return the showdbrefs
998    */
999   @Override
1000   public boolean isShowDBRefs()
1001   {
1002     return showdbrefs;
1003   }
1004
1005   /**
1006    * @param showdbrefs
1007    *          the showdbrefs to set
1008    */
1009   @Override
1010   public void setShowDBRefs(boolean showdbrefs)
1011   {
1012     this.showdbrefs = showdbrefs;
1013   }
1014
1015   /**
1016    * @return the shownpfeats
1017    */
1018   @Override
1019   public boolean isShowNPFeats()
1020   {
1021     return shownpfeats;
1022   }
1023
1024   /**
1025    * @param shownpfeats
1026    *          the shownpfeats to set
1027    */
1028   @Override
1029   public void setShowNPFeats(boolean shownpfeats)
1030   {
1031     this.shownpfeats = shownpfeats;
1032   }
1033
1034   @Override
1035   public boolean isScaleProteinAsCdna()
1036   {
1037     return this.scaleProteinAsCdna;
1038   }
1039
1040   @Override
1041   public void setScaleProteinAsCdna(boolean b)
1042   {
1043     this.scaleProteinAsCdna = b;
1044   }
1045 }