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