35c991e9bfc8a52d1092edbc7dd464f476179a7a
[mussa.git] / qui / mussa_setup_dialog / SequenceSetupWidget.cpp
1 #include <QHBoxLayout>
2 #include <QVBoxLayout>
3 #include <QLineEdit>
4 #include <QLabel>
5 #include <QFileDialog>
6 #include <QPushButton>
7
8 #include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp"
9 #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp"
10
11 #include <cassert>
12
13 SequenceSetupWidget::SequenceSetupWidget(SequenceSetupFrame *setupFrame_,
14                                          QWidget *parent) :
15   QWidget(parent),
16   sequenceNameEdit(0),
17   sequenceLineEdit(0), 
18   annotLineEdit(0),
19   fastaIndexLineEdit(0),
20   seqStartLineEdit(0),
21   seqStopLineEdit(0),
22   setupFrame(setupFrame_)
23 {
24   // we really need the setupFrame, so lets declair that requirement
25   assert(setupFrame != 0);
26
27   sequenceNameEdit = new QLineEdit;
28   QLabel *sequenceNameLabel = new QLabel(tr("Sequence name:"));
29   sequenceNameLabel->setBuddy(sequenceNameEdit);
30
31   // Sequence row
32   sequenceLineEdit = new QLineEdit;
33   //const IsFileValidator *fileValidator = new IsFileValidator(this);
34   //sequenceLineEdit->setValidator(fileValidator);
35   QLabel *sequenceLabel = new QLabel("Sequence Filename:");
36   sequenceLabel->setBuddy(sequenceLineEdit);
37   
38   QPushButton *sequenceButton = new QPushButton("Browse...");
39   connect(sequenceButton, SIGNAL(clicked()), 
40           this, SLOT(promptForFastaFile()));
41
42   // Annotation row
43   annotLineEdit = new QLineEdit;
44   //const IsFileValidator *fileValidator2 = new IsFileValidator(this);
45   //annotLineEdit->setValidator(fileValidator2);
46   QLabel *annotLabel = new QLabel("Annotation Filename:");
47   annotLabel->setBuddy(annotLineEdit);
48
49   QPushButton *annotButton = new QPushButton("Browse...");
50   connect(annotButton, SIGNAL(clicked()),
51           this, SLOT(promptForAnnotFile()));
52
53   // Index row
54   fastaIndexLineEdit = new QLineEdit;
55   //fastaIndexLineEdit->setMaximumWidth(100);
56
57   QLabel *fastaIndexLabel = new QLabel("Fasta Index:");
58   fastaIndexLabel->setBuddy(fastaIndexLineEdit);
59
60   seqStartLineEdit = new QLineEdit;
61   //seqStartLineEdit->setMinimumWidth(60);
62   //seqStartLineEdit->setMaximumWidth(80);
63
64   QLabel *seqStartLabel = new QLabel("Sequence Start:");
65   seqStartLabel->setBuddy(seqStartLineEdit);
66   
67   seqStopLineEdit = new QLineEdit;
68   //seqStopLineEdit->setMinimumWidth(40);
69   //seqStopLineEdit->setMaximumWidth(60);
70
71   QLabel *seqStopLabel = new QLabel("Sequence Stop:");
72   seqStopLabel->setBuddy(seqStopLineEdit);
73
74   // Layout
75   QHBoxLayout *sequenceNameLayout = new QHBoxLayout;
76   QHBoxLayout *sequenceRowLayout = new QHBoxLayout;
77   QHBoxLayout *annotRowLayout = new QHBoxLayout;
78   QHBoxLayout *indexRowLayout = new QHBoxLayout;
79   QVBoxLayout *mainLayout = new QVBoxLayout;
80
81   sequenceNameLayout->addWidget(sequenceNameLabel);
82   sequenceNameLayout->addWidget(sequenceNameEdit);
83
84   sequenceRowLayout->addWidget(sequenceLabel);
85   sequenceRowLayout->addWidget(sequenceLineEdit);
86   sequenceRowLayout->addWidget(sequenceButton);
87
88   annotRowLayout->addWidget(annotLabel);
89   annotRowLayout->addWidget(annotLineEdit);
90   annotRowLayout->addWidget(annotButton);
91
92   indexRowLayout->addWidget(fastaIndexLabel);
93   indexRowLayout->addWidget(fastaIndexLineEdit);
94   indexRowLayout->addWidget(seqStartLabel);
95   indexRowLayout->addWidget(seqStartLineEdit);
96   indexRowLayout->addWidget(seqStopLabel);
97   indexRowLayout->addWidget(seqStopLineEdit);
98
99   mainLayout->addLayout(sequenceNameLayout);
100   mainLayout->addLayout(sequenceRowLayout);
101   mainLayout->addLayout(annotRowLayout);
102   mainLayout->addLayout(indexRowLayout);
103   setLayout(mainLayout);
104 }
105
106 //SequenceSetupWidget::SequenceSetupWidget(const SequenceSetupWidget& ssw) :
107 //  sequenceLineEdit(ssw.sequenceLineEdit), 
108 //  annotLineEdit(ssw.annotLineEdit),
109 //  fastaIndexLineEdit(ssw.fastaIndexLineEdit),
110 //  seqStartLineEdit(ssw.seqStartLineEdit),
111 //  seqStopLineEdit(ssw.seqStopLineEdit)
112 //{
113 //}
114
115 int SequenceSetupWidget::getFastaIndex() const
116 {
117   if (fastaIndexLineEdit->text().size() == 0)
118     return 1;
119   else
120     return fastaIndexLineEdit->text().toInt(); 
121 }
122
123 void SequenceSetupWidget::promptForFastaFile()
124 {
125   QString default_dir = setupFrame->get_default_dir().absolutePath();
126   QString fastaFilePath = QFileDialog::getOpenFileName(this,
127                                                "Choose a fasta file",
128                                                default_dir,
129                                                "Fasta (*.fa *.fasta *.fsa *.txt)");
130   if (fastaFilePath.isEmpty())
131     return;
132
133   sequenceLineEdit->setText(fastaFilePath);
134   setupFrame->set_default_dir(QDir(fastaFilePath));
135   return;
136 }
137
138 void SequenceSetupWidget::promptForAnnotFile()
139 {
140   QString default_dir = setupFrame->get_default_dir().absolutePath();
141   QString annotFilePath = QFileDialog::getOpenFileName(this,
142                                                "Choose a annotation file",
143                                                default_dir,
144                                                "Annot (*.txt *.annot)");
145   if (annotFilePath.isEmpty())
146     return;
147
148   annotLineEdit->setText(annotFilePath);
149   setupFrame->set_default_dir(QDir(annotFilePath));
150   return;
151 }