Define analysis scroll area implementation
[mussa.git] / qui / mussa_setup_dialog / SequenceSetupFrame.cpp
1 #include <QFrame>
2 #include <QList>
3 #include <QScrollArea>
4 #include <QVBoxLayout>
5
6 #include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp"
7 #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp"
8 #include "qui/mussa_setup_dialog/SetupInfo.hpp"
9
10
11 SequenceSetupFrame::SequenceSetupFrame(QWidget *parent)
12   : QWidget(parent),
13     sequenceFrame(0),
14     scrollArea(0),
15     seqCount(1),
16     sequenceLayout(0)
17 {
18
19   // frame
20   sequenceFrame = new QFrame;
21   sequenceFrame->setFrameStyle(QFrame::Panel | QFrame::Sunken);
22   
23   sequenceLayout = new QVBoxLayout;  
24
25   sequenceFrame->setLayout(sequenceLayout);
26   sequenceFrame->resize(500,500);
27
28   //scroll area
29   scrollArea = new QScrollArea;
30   scrollArea->setWidget(sequenceFrame);
31
32   QVBoxLayout *mainLayout = new QVBoxLayout;
33   mainLayout->addWidget(scrollArea);
34   setLayout(mainLayout);
35
36   //Initialize to one sequence
37   changeSequenceCount(1);
38   
39   scrollArea->show();
40 }
41
42
43 //SequenceSetupFrame::SequenceSetupFrame(const SequenceSetupFrame &ssf)
44 //  : sequenceFrame(ssf.sequenceFrame),
45 //    sequenceLayout(ssf.sequenceLayout),
46 //    seqCount(ssf.seqCount)//,
47 //    //seqList(0)
48 //{
49 //}
50
51 void SequenceSetupFrame::changeSequenceCount(int newSeqCount)
52 {
53   seqCount = newSeqCount;
54   setupSequences(seqCount);
55   resizeInnerFrame(seqCount);
56 }
57
58 void SequenceSetupFrame::resizeInnerFrame(int seqCount)
59 {
60   if (seqCount >= 1)
61   {
62     sequenceFrame->resize(565, 125 * seqCount + 30);
63   }
64   else
65   {
66     sequenceFrame->resize(565, 125 + 30);
67   }
68 }
69
70 void SequenceSetupFrame::setupSequences(int newSeqCount)
71 {
72   const int curSeqCount = seqList.size();
73
74   if (curSeqCount == newSeqCount)
75   {
76     return;
77   }
78   else if (curSeqCount < newSeqCount)
79   {
80     int numSeqsToAdd = newSeqCount - curSeqCount;
81
82     SequenceSetupWidget *seq = 0;
83     for (int i = 1; i <= numSeqsToAdd; i++)
84     {
85       seq = new SequenceSetupWidget;
86       seqList.push_back(seq);
87       sequenceLayout->addWidget(seq);
88     } 
89   }
90   else if (curSeqCount > newSeqCount)
91   {
92     int numSeqsToRemove = curSeqCount - newSeqCount;
93     
94     if (numSeqsToRemove > curSeqCount)
95     {
96       numSeqsToRemove = curSeqCount;
97     }
98     
99     SequenceSetupWidget *seqWidget = 0;
100     for (int i=1; i <= numSeqsToRemove; i++)
101     {
102       seqWidget = seqList.back();
103       sequenceLayout->removeWidget(seqWidget);
104       seqList.pop_back();
105       delete seqWidget;
106     }
107
108   }
109   
110 }
111
112 std::list<SetupInfo *> SequenceSetupFrame::getSetupInfo()
113 {
114   const int curSeqCount = seqList.size();
115   
116   std::list<SetupInfo *> setupInfoList;
117
118   QString seqName;
119   QString seqFile;
120   QString annotFile;
121   int fastaIndex;
122   int start;
123   int end;
124
125
126   SequenceSetupWidget *seq = 0;
127   //SetupInfo *setupInfo = 0;
128   for (int i = 0; i < curSeqCount; i++)
129   {
130     seq = seqList.back();
131    
132     seqName = seq->getName();
133     seqFile = seq->getSeqFile();
134     annotFile = seq->getAnnotFile();
135     fastaIndex = seq->getFastaIndex();
136     start = seq->getStart();
137     end = seq->getEnd();
138
139     seqList.push_front(seq);
140     seqList.pop_back();
141
142     setupInfoList.push_back(new SetupInfo(seqName.toStdString(),
143             seqFile.toStdString(), 
144                                           annotFile.toStdString(), 
145                                           fastaIndex, start, end));
146     
147   } 
148
149   return setupInfoList;
150 }
151