WhatsThis update
[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   sequenceNameEdit->setWhatsThis("Name of input sequence ");
29   QLabel *sequenceNameLabel = new QLabel(tr("Sequence name:"));
30   sequenceNameLabel->setBuddy(sequenceNameEdit);
31   sequenceNameLabel->setWhatsThis("Name of input sequence ");
32
33   // Sequence row
34   sequenceLineEdit = new QLineEdit;
35   sequenceLineEdit->setWhatsThis("File path to input sequence ");
36   //const IsFileValidator *fileValidator = new IsFileValidator(this);
37   //sequenceLineEdit->setValidator(fileValidator);
38   QLabel *sequenceLabel = new QLabel("Sequence Filename:");
39   sequenceLabel->setBuddy(sequenceLineEdit);
40   sequenceLabel->setWhatsThis("File path to input sequence ");
41   
42   QPushButton *sequenceButton = new QPushButton("Browse...");
43   sequenceButton->setWhatsThis("Browse for input sequence ");
44   connect(sequenceButton, SIGNAL(clicked()), 
45           this, SLOT(promptForFastaFile()));
46
47   // Annotation row
48   annotLineEdit = new QLineEdit;
49   annotLineEdit->setWhatsThis("Annotation file path for above input sequence ");
50   //const IsFileValidator *fileValidator2 = new IsFileValidator(this);
51   //annotLineEdit->setValidator(fileValidator2);
52   QLabel *annotLabel = new QLabel("Annotation Filename:");
53   annotLabel->setBuddy(annotLineEdit);
54   annotLabel->setWhatsThis("Annotation file path for above input sequence ");
55
56   QPushButton *annotButton = new QPushButton("Browse...");
57   annotButton->setWhatsThis("Browse for annotation file for above input sequence ");
58   connect(annotButton, SIGNAL(clicked()),
59           this, SLOT(promptForAnnotFile()));
60
61   // Index row
62   fastaIndexLineEdit = new QLineEdit;
63   fastaIndexLineEdit->setWhatsThis("When a FASTA file contains more then one FASTA record, provide a 1 based index (first record is index 1) to select which one to use. ");
64   //fastaIndexLineEdit->setMaximumWidth(100);
65
66   QLabel *fastaIndexLabel = new QLabel("Fasta Index:");
67   fastaIndexLabel->setBuddy(fastaIndexLineEdit);
68   fastaIndexLabel->setWhatsThis("When a FASTA file contains more then one FASTA record, provide a 1 based index (first record is index 1) to select which one to use. ");
69
70   seqStartLineEdit = new QLineEdit;
71   seqStartLineEdit->setWhatsThis("Start base pair in input sequence (0 based: 1st base pair is 0) ");
72   //seqStartLineEdit->setMinimumWidth(60);
73   //seqStartLineEdit->setMaximumWidth(80);
74
75   QLabel *seqStartLabel = new QLabel("Sequence Start:");
76   seqStartLabel->setWhatsThis("Start base pair in input sequence (0 based: 1st base pair is 0) ");
77   seqStartLabel->setBuddy(seqStartLineEdit);
78   
79   seqStopLineEdit = new QLineEdit;
80   seqStopLineEdit->setWhatsThis("Stop base pair in input sequence (0 based: 1st base pair is 0) 0 means all of remaining sequence. ");
81   //seqStopLineEdit->setMinimumWidth(40);
82   //seqStopLineEdit->setMaximumWidth(60);
83
84   QLabel *seqStopLabel = new QLabel("Sequence Stop:");
85   seqStopLabel->setWhatsThis("Stop base pair in input sequence (0 based: 1st base pair is 0) 0 means all of remaining sequence. ");
86   seqStopLabel->setBuddy(seqStopLineEdit);
87
88   // Layout
89   QHBoxLayout *sequenceNameLayout = new QHBoxLayout;
90   QHBoxLayout *sequenceRowLayout = new QHBoxLayout;
91   QHBoxLayout *annotRowLayout = new QHBoxLayout;
92   QHBoxLayout *indexRowLayout = new QHBoxLayout;
93   QVBoxLayout *mainLayout = new QVBoxLayout;
94
95   sequenceNameLayout->addWidget(sequenceNameLabel);
96   sequenceNameLayout->addWidget(sequenceNameEdit);
97
98   sequenceRowLayout->addWidget(sequenceLabel);
99   sequenceRowLayout->addWidget(sequenceLineEdit);
100   sequenceRowLayout->addWidget(sequenceButton);
101
102   annotRowLayout->addWidget(annotLabel);
103   annotRowLayout->addWidget(annotLineEdit);
104   annotRowLayout->addWidget(annotButton);
105
106   indexRowLayout->addWidget(fastaIndexLabel);
107   indexRowLayout->addWidget(fastaIndexLineEdit);
108   indexRowLayout->addWidget(seqStartLabel);
109   indexRowLayout->addWidget(seqStartLineEdit);
110   indexRowLayout->addWidget(seqStopLabel);
111   indexRowLayout->addWidget(seqStopLineEdit);
112
113   mainLayout->addLayout(sequenceNameLayout);
114   mainLayout->addLayout(sequenceRowLayout);
115   mainLayout->addLayout(annotRowLayout);
116   mainLayout->addLayout(indexRowLayout);
117   setLayout(mainLayout);
118 }
119
120 //SequenceSetupWidget::SequenceSetupWidget(const SequenceSetupWidget& ssw) :
121 //  sequenceLineEdit(ssw.sequenceLineEdit), 
122 //  annotLineEdit(ssw.annotLineEdit),
123 //  fastaIndexLineEdit(ssw.fastaIndexLineEdit),
124 //  seqStartLineEdit(ssw.seqStartLineEdit),
125 //  seqStopLineEdit(ssw.seqStopLineEdit)
126 //{
127 //}
128
129 int SequenceSetupWidget::getFastaIndex() const
130 {
131   if (fastaIndexLineEdit->text().size() == 0)
132     return 1;
133   else
134     return fastaIndexLineEdit->text().toInt(); 
135 }
136
137 void SequenceSetupWidget::promptForFastaFile()
138 {
139   QString default_dir = setupFrame->get_default_dir().absolutePath();
140   QString fastaFilePath = QFileDialog::getOpenFileName(this,
141                                                "Choose a fasta file",
142                                                default_dir,
143                                                "Fasta (*.fa *.fasta *.fsa *.txt)");
144   if (fastaFilePath.isEmpty())
145     return;
146
147   sequenceLineEdit->setText(fastaFilePath);
148   setupFrame->set_default_dir(QDir(fastaFilePath));
149   return;
150 }
151
152 void SequenceSetupWidget::promptForAnnotFile()
153 {
154   QString default_dir = setupFrame->get_default_dir().absolutePath();
155   QString annotFilePath = QFileDialog::getOpenFileName(this,
156                                                "Choose a annotation file",
157                                                default_dir,
158                                                "Annot (*.txt *.annot)");
159   if (annotFilePath.isEmpty())
160     return;
161
162   annotLineEdit->setText(annotFilePath);
163   setupFrame->set_default_dir(QDir(annotFilePath));
164   return;
165 }