423e5fe48736b36be60ccacc9e0e7b7ec943df44
[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     seqCount(0),
13     sequenceLayout(0)
14 {
15   // frame
16   sequenceFrame = new QFrame;
17   sequenceFrame->setFrameStyle(QFrame::Panel | QFrame::Sunken);
18   
19   sequenceLayout = new QVBoxLayout;  
20
21   sequenceFrame->setLayout(sequenceLayout);
22
23   QVBoxLayout *mainLayout = new QVBoxLayout;
24   mainLayout->addWidget(sequenceFrame);
25   setLayout(mainLayout);
26
27   //Initialize to one sequence
28   changeSequenceCount(1);
29 }
30
31
32 //SequenceSetupFrame::SequenceSetupFrame(const SequenceSetupFrame &ssf)
33 //  : sequenceFrame(ssf.sequenceFrame),
34 //    sequenceLayout(ssf.sequenceLayout),
35 //    seqCount(ssf.seqCount)//,
36 //    //seqList(0)
37 //{
38 //}
39
40 void SequenceSetupFrame::changeSequenceCount(int newSeqCount)
41 {
42   seqCount = newSeqCount;
43   setupSequences(seqCount);
44 }
45
46 void SequenceSetupFrame::setupSequences(int newSeqCount)
47 {
48   const int curSeqCount = seqList.size();
49
50   if (curSeqCount == newSeqCount)
51   {
52     return;
53   }
54   else if (curSeqCount < newSeqCount)
55   {
56     int numSeqsToAdd = newSeqCount - curSeqCount;
57
58     SequenceSetupWidget *seq = 0;
59     for (int i = 1; i <= numSeqsToAdd; i++)
60     {
61       seq = new SequenceSetupWidget;
62       seqList.push_back(seq);
63       sequenceLayout->addWidget(seq);
64     } 
65   }
66   else if (curSeqCount > newSeqCount)
67   {
68     int numSeqsToRemove = curSeqCount - newSeqCount;
69     
70     if (numSeqsToRemove > curSeqCount)
71     {
72       numSeqsToRemove = curSeqCount;
73     }
74     
75     SequenceSetupWidget *seqWidget = 0;
76     for (int i=1; i <= numSeqsToRemove; i++)
77     {
78       seqWidget = seqList.back();
79       sequenceLayout->removeWidget(seqWidget);
80       seqList.pop_back();
81       delete seqWidget;
82     }
83
84   }
85   
86 }
87
88 std::list<SetupInfo *> SequenceSetupFrame::getSetupInfo()
89 {
90   const int curSeqCount = seqList.size();
91   
92   std::list<SetupInfo *> setupInfoList;
93
94   QString seqName;
95   QString seqFile;
96   QString annotFile;
97   int fastaIndex;
98   int start;
99   int end;
100
101
102   SequenceSetupWidget *seq = 0;
103   //SetupInfo *setupInfo = 0;
104   for (int i = 0; i < curSeqCount; i++)
105   {
106     seq = seqList.back();
107    
108     seqName = seq->getName();
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(seqName.toStdString(),
119             seqFile.toStdString(), 
120                                           annotFile.toStdString(), 
121                                           fastaIndex, start, end));
122     
123   } 
124
125   return setupInfoList;
126 }
127