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