JAL-535 interface for GUI state update methods that the AlignViewController can call
[jalview.git] / src / jalview / controller / AlignViewController.java
1 package jalview.controller;
2
3 import java.awt.Color;
4
5 import jalview.api.AlignViewControllerI;
6 import jalview.api.AlignViewportI;
7 import jalview.api.AlignmentViewPanel;
8 import jalview.datamodel.SequenceGroup;
9 import jalview.datamodel.SequenceI;
10
11 public class AlignViewController implements AlignViewControllerI
12 {
13   AlignViewportI viewport=null;
14   AlignmentViewPanel alignPanel=null;
15   /**
16    * the GUI container that is handling interactions with the user
17    */
18   private AlignViewControllerGuiI avcg;
19   @Override
20   protected void finalize() throws Throwable {
21     viewport = null;
22     alignPanel = null;
23     avcg = null;
24   };
25   
26   public AlignViewController(AlignViewControllerGuiI alignFrame, AlignViewportI viewport,
27           AlignmentViewPanel alignPanel)
28   {
29     this.avcg = alignFrame;
30     this.viewport=viewport;
31     this.alignPanel = alignPanel;
32   }
33   @Override
34   public void setViewportAndAlignmentPanel(AlignViewportI viewport,AlignmentViewPanel alignPanel)
35   {
36     this.alignPanel = alignPanel;
37     this.viewport = viewport;
38     
39   }
40   @Override
41   public boolean makeGroupsFromSelection()
42   {
43
44     if (viewport.getSelectionGroup() != null)
45     {
46       SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom(
47               viewport.getSequenceSelection(),
48               viewport.getAlignmentView(true).getSequenceStrings(
49                       viewport.getGapCharacter()), viewport.getAlignment()
50                       .getGroups());
51       viewport.getAlignment().deleteAllGroups();
52       viewport.clearSequenceColours();
53       viewport.setSelectionGroup(null);
54       // set view properties for each group
55       for (int g = 0; g < gps.length; g++)
56       {
57         // gps[g].setShowunconserved(viewport.getShowUnconserved());
58         gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo());
59         viewport.getAlignment().addGroup(gps[g]);
60         Color col = new Color((int) (Math.random() * 255),
61                 (int) (Math.random() * 255), (int) (Math.random() * 255));
62         col = col.brighter();
63         for (SequenceI sq : gps[g].getSequences(null))
64           viewport.setSequenceColour(sq, col);
65       }
66       return true;
67     }
68     return false;
69 }
70   @Override
71   public boolean createGroup()
72   {
73
74     SequenceGroup sg = viewport.getSelectionGroup();
75     if (sg!=null)
76     {
77         viewport.getAlignment().addGroup(sg);
78         return true;
79       } 
80     return false;
81   }
82   @Override
83   public boolean unGroup()
84   {
85     SequenceGroup sg = viewport.getSelectionGroup();
86     if (sg!=null)
87     {
88         viewport.getAlignment().deleteGroup(sg);
89         return true;
90     }
91     return false;
92   }
93   @Override
94   public boolean deleteGroups()
95   {
96     if (viewport.getAlignment().getGroups()!=null && viewport.getAlignment().getGroups().size()>0)
97     {
98     viewport.getAlignment().deleteAllGroups();
99     viewport.clearSequenceColours();
100     viewport.setSelectionGroup(null);
101     return true;
102     }
103     return false;
104   }
105     
106   }