JAL-1385 Alignment view controller logic implementation and API
[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   @Override
16   protected void finalize() throws Throwable {
17     viewport = null;
18     alignPanel = null;
19   };
20   
21   public AlignViewController(AlignViewportI viewport,
22           AlignmentViewPanel alignPanel)
23   {
24     this.viewport=viewport;
25     this.alignPanel = alignPanel;
26   }
27   @Override
28   public void setViewportAndAlignmentPanel(AlignViewportI viewport,AlignmentViewPanel alignPanel)
29   {
30     this.alignPanel = alignPanel;
31     this.viewport = viewport;
32     
33   }
34   @Override
35   public boolean makeGroupsFromSelection()
36   {
37
38     if (viewport.getSelectionGroup() != null)
39     {
40       SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom(
41               viewport.getSequenceSelection(),
42               viewport.getAlignmentView(true).getSequenceStrings(
43                       viewport.getGapCharacter()), viewport.getAlignment()
44                       .getGroups());
45       viewport.getAlignment().deleteAllGroups();
46       viewport.clearSequenceColours();
47       viewport.setSelectionGroup(null);
48       // set view properties for each group
49       for (int g = 0; g < gps.length; g++)
50       {
51         // gps[g].setShowunconserved(viewport.getShowUnconserved());
52         gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo());
53         viewport.getAlignment().addGroup(gps[g]);
54         Color col = new Color((int) (Math.random() * 255),
55                 (int) (Math.random() * 255), (int) (Math.random() * 255));
56         col = col.brighter();
57         for (SequenceI sq : gps[g].getSequences(null))
58           viewport.setSequenceColour(sq, col);
59       }
60       return true;
61     }
62     return false;
63 }
64   @Override
65   public boolean createGroup()
66   {
67
68     SequenceGroup sg = viewport.getSelectionGroup();
69     if (sg!=null)
70     {
71         viewport.getAlignment().addGroup(sg);
72         return true;
73       } 
74     return false;
75   }
76   @Override
77   public boolean unGroup()
78   {
79     SequenceGroup sg = viewport.getSelectionGroup();
80     if (sg!=null)
81     {
82         viewport.getAlignment().deleteGroup(sg);
83         return true;
84     }
85     return false;
86   }
87   @Override
88   public boolean deleteGroups()
89   {
90     if (viewport.getAlignment().getGroups()!=null && viewport.getAlignment().getGroups().size()>0)
91     {
92     viewport.getAlignment().deleteAllGroups();
93     viewport.clearSequenceColours();
94     viewport.setSelectionGroup(null);
95     return true;
96     }
97     return false;
98   }
99     
100   }