finish dialog box to setup an analysis
[mussa.git] / qui / mussa_setup_dialog / MussaSetupWidget.cpp
1 #include <QFrame>
2 #include <QLabel>
3 #include <QLineEdit>
4 #include <QSpinBox>
5 #include <QVBoxLayout>
6 #include <QHBoxLayout>
7 #include <QPushButton>
8
9 #include <list>
10
11 using namespace std;
12
13 //#include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp"
14 #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp"
15 #include "qui/mussa_setup_dialog/MussaSetupWidget.hpp"
16 #include "qui/mussa_setup_dialog/SetupInfo.hpp"
17 #include "alg/mussa.hpp"
18 #include "mussa_exceptions.hpp"
19
20 MussaSetupWidget::MussaSetupWidget(QWidget *parent)
21   : QWidget(parent),
22     createPushButton(tr("Create")),
23     cancelPushButton(tr("Cancel")),
24     seqSetupFrame(0)
25 {
26   
27   // Analysis name
28   QLabel *analysisNameLabel = new QLabel(tr("Analysis Name"));
29   analysisNameLabel->setBuddy(&analysisNameLineEdit);
30
31   // Window
32   QLabel *windowLabel = new QLabel(tr("Window"));
33   windowLabel->setBuddy(&windowLineEdit);
34
35   // Threshold
36   QLabel *thresholdLabel = new QLabel(tr("Threshold"));
37   thresholdLabel->setBuddy(&thresholdLineEdit);
38
39   // Number of sequences
40   QLabel *numOfSequencesLabel = new QLabel(tr("Number of sequences"));
41   numOfSequencesLabel->setBuddy(&numOfSequencesSpinBox);
42   numOfSequencesSpinBox.setMinimum(1);
43
44   //Sequence setup frame
45   seqSetupFrame = new SequenceSetupFrame;
46
47   connect(&numOfSequencesSpinBox, SIGNAL(valueChanged(int)),
48           seqSetupFrame, SLOT(changeSequenceCount(int)));
49
50   numOfSequencesSpinBox.setValue(2);
51
52   // Create Experiment Button
53   connect(&createPushButton, SIGNAL(pressed()),
54           this, SLOT(mussaCreatePushed()));
55   
56   // Cancle Button
57   connect(&cancelPushButton, SIGNAL(pressed()),
58           this, SLOT(mussaCancelPushed()));
59
60   // LAYOUT
61   QHBoxLayout *row1Layout = new QHBoxLayout;
62   QHBoxLayout *row2Layout = new QHBoxLayout;
63   QVBoxLayout *mainLayout = new QVBoxLayout;
64   QHBoxLayout *buttonLayout = new QHBoxLayout;
65
66   row1Layout->addWidget(analysisNameLabel);
67   row1Layout->addWidget(&analysisNameLineEdit);
68
69   row2Layout->addWidget(windowLabel);
70   row2Layout->addWidget(&windowLineEdit);
71   row2Layout->addWidget(thresholdLabel);
72   row2Layout->addWidget(&thresholdLineEdit);
73   row2Layout->addWidget(numOfSequencesLabel);
74   row2Layout->addWidget(&numOfSequencesSpinBox);
75
76   buttonLayout->addWidget(&createPushButton);
77   buttonLayout->addWidget(&cancelPushButton);
78
79   mainLayout->addLayout(row1Layout);
80   mainLayout->addLayout(row2Layout);
81   mainLayout->addWidget(seqSetupFrame);
82   mainLayout->addLayout(buttonLayout);
83   setLayout(mainLayout);
84
85 }
86
87 void MussaSetupWidget::mussaCreatePushed()
88 {
89   emit createButtonPushed();
90 }
91
92 void MussaSetupWidget::mussaCancelPushed()
93 {
94   emit cancelButtonPushed();
95 }
96
97 Mussa* MussaSetupWidget::getMussaObject()
98 {
99   Mussa *mussa = new Mussa;
100
101   std::string seqFile;
102   std::string annotFile;
103   int fastaIndex;
104   int start;
105   int end;
106
107   list<SetupInfo *> setupInfoList = seqSetupFrame->getSetupInfo();
108   
109   for (list<SetupInfo *>::iterator setup_item = setupInfoList.begin();
110        setup_item != setupInfoList.end();
111        ++setup_item)
112   {
113     seqFile = (*setup_item)->getSeqFile();
114     annotFile = (*setup_item)->getAnnotFile();
115     fastaIndex = (*setup_item)->getFastaIndex();
116     start = (*setup_item)->getSubSeqStart();
117     end = (*setup_item)->getSubSeqEnd();
118    
119     mussa->load_sequence(seqFile, annotFile, fastaIndex, start, end);
120   }
121   setupInfoList.clear();
122
123   int win_size = windowLineEdit.text().toInt();
124   int threshold = thresholdLineEdit.text().toInt();
125   if (win_size == 0 or threshold == 0) {
126     throw mussa_load_error("must set analysis parameters");
127   } else {
128     mussa->analyze(win_size, threshold, Mussa::TransitiveNway, 0.0);
129   }
130
131   return mussa;
132 }
133
134 //MussaSetupWidget::MussaSetupWidget(const MussaSetupWidget& msw)
135 //  : analysisNameLineEdit(msw.analysisNameLineEdit),
136 //    windowLineEdit(msw.windowLineEdit),
137 //    thresholdLineEdit(msw.thresholdLineEdit),
138 //    numOfSequencesLineEdit(msw.numOfSequencesLineEdit),
139 //    seqSetupFrame(msw.seqSetupFrame)
140 //{
141 //}