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