From: Brandon King Date: Wed, 22 Mar 2006 02:36:02 +0000 (+0000) Subject: Progress towards MussaSetupDialog (Currently will cause crash! Be warned!) X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=commitdiff_plain;h=ea28f8c00d598073c43907dbeef476514f310c0a Progress towards MussaSetupDialog (Currently will cause crash! Be warned!) --- diff --git a/mussagl.pro b/mussagl.pro index 815a62f..551dec9 100644 --- a/mussagl.pro +++ b/mussagl.pro @@ -29,6 +29,7 @@ HEADERS += mussa_exceptions.hpp \ qui/mussa_setup_dialog/MussaSetupDialog.hpp \ qui/mussa_setup_dialog/SequenceSetupWidget.hpp \ qui/mussa_setup_dialog/SequenceSetupFrame.hpp \ + qui/mussa_setup_dialog/SetupInfo.hpp \ alg/annotation_colors.hpp \ alg/color.hpp \ alg/conserved_path.hpp \ @@ -57,6 +58,7 @@ SOURCES += mussagl.cpp \ qui/mussa_setup_dialog/MussaSetupDialog.cpp \ qui/mussa_setup_dialog/SequenceSetupWidget.cpp \ qui/mussa_setup_dialog/SequenceSetupFrame.cpp \ + qui/mussa_setup_dialog/SetupInfo.cpp \ alg/annotation_colors.cpp \ alg/color.cpp \ alg/conserved_path.cpp \ diff --git a/qui/MussaWindow.cpp b/qui/MussaWindow.cpp index 4b12443..e2525b9 100644 --- a/qui/MussaWindow.cpp +++ b/qui/MussaWindow.cpp @@ -196,6 +196,10 @@ void MussaWindow::createNewAnalysis() if (msd->exec()) { std::cout << "New mussa exp. defined!\n"; + Mussa *m = 0; + m = msd->getMussa(); + std::cout << " Mussa Object at: " << m << "\n"; + delete m; } else { diff --git a/qui/mussa_setup_dialog/MussaSetupDialog.cpp b/qui/mussa_setup_dialog/MussaSetupDialog.cpp index 35a3d31..9bd234d 100644 --- a/qui/mussa_setup_dialog/MussaSetupDialog.cpp +++ b/qui/mussa_setup_dialog/MussaSetupDialog.cpp @@ -4,6 +4,7 @@ #include "qui/mussa_setup_dialog/MussaSetupWidget.hpp" #include "qui/mussa_setup_dialog/MussaSetupDialog.hpp" +#include "alg/mussa.hpp" MussaSetupDialog::MussaSetupDialog(QWidget *parent, Qt::WFlags f) @@ -12,6 +13,12 @@ MussaSetupDialog::MussaSetupDialog(QWidget *parent, Qt::WFlags f) { setupWidget = new MussaSetupWidget; + connect(setupWidget, SIGNAL(createButtonPushed()), + this, SLOT(accept())); + connect(setupWidget, SIGNAL(cancelButtonPushed()), + this, SLOT(reject())); + + QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(setupWidget); @@ -30,3 +37,8 @@ void MussaSetupDialog::reject() std::cout << "Rejected\n"; done(0); } + +Mussa* MussaSetupDialog::getMussa() +{ + return setupWidget->getMussaObject(); +} diff --git a/qui/mussa_setup_dialog/MussaSetupDialog.hpp b/qui/mussa_setup_dialog/MussaSetupDialog.hpp index 01b6114..2acc971 100644 --- a/qui/mussa_setup_dialog/MussaSetupDialog.hpp +++ b/qui/mussa_setup_dialog/MussaSetupDialog.hpp @@ -5,6 +5,7 @@ #include class MussaSetupWidget; +class Mussa; class MussaSetupDialog : public QDialog { @@ -13,6 +14,8 @@ class MussaSetupDialog : public QDialog public: MussaSetupDialog(QWidget *parent = 0, Qt::WFlags f = 0); + Mussa* getMussa(); + public slots: void accept(); void reject(); diff --git a/qui/mussa_setup_dialog/MussaSetupWidget.cpp b/qui/mussa_setup_dialog/MussaSetupWidget.cpp index 02a92eb..e896e53 100644 --- a/qui/mussa_setup_dialog/MussaSetupWidget.cpp +++ b/qui/mussa_setup_dialog/MussaSetupWidget.cpp @@ -1,19 +1,27 @@ #include #include #include +#include #include #include +#include + +#include //#include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp" #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp" #include "qui/mussa_setup_dialog/MussaSetupWidget.hpp" +#include "qui/mussa_setup_dialog/SetupInfo.hpp" +#include "alg/mussa.hpp" MussaSetupWidget::MussaSetupWidget(QWidget *parent) : QWidget(parent), analysisNameLineEdit(0), windowLineEdit(0), thresholdLineEdit(0), - numOfSequencesLineEdit(0), + numOfSequencesSpinBox(0), + createPushButton(0), + cancelPushButton(0), seqSetupFrame(0) { @@ -33,34 +41,35 @@ MussaSetupWidget::MussaSetupWidget(QWidget *parent) thresholdLabel->setBuddy(thresholdLineEdit); // Number of sequences - numOfSequencesLineEdit = new QLineEdit; + numOfSequencesSpinBox = new QSpinBox; QLabel *numOfSequencesLabel = new QLabel(tr("Number of sequences")); - numOfSequencesLabel->setBuddy(numOfSequencesLineEdit); - - // frame - //sequenceFrame = new QFrame; - //sequenceFrame->setFrameStyle(QFrame::Panel | QFrame::Sunken); - // - //QVBoxLayout *sequenceLayout = new QVBoxLayout; - // - //SequenceSetupWidget *seq1 = new SequenceSetupWidget; - //sequenceLayout->addWidget(seq1); - // - //SequenceSetupWidget *seq2 = new SequenceSetupWidget; - //sequenceLayout->addWidget(seq2); - // - //sequenceFrame->setLayout(sequenceLayout); + numOfSequencesLabel->setBuddy(numOfSequencesSpinBox); + numOfSequencesSpinBox->setMinimum(1); + + + //Sequence setup frame seqSetupFrame = new SequenceSetupFrame; - seqSetupFrame->changeSequenceCount(3); - seqSetupFrame->changeSequenceCount(2); - //connect(numOfSequencesLineEdit, SIGNAL(changed, - // seqSetupFrame, SLOT(changeSequenceCount(int))); + connect(numOfSequencesSpinBox, SIGNAL(valueChanged(int)), + seqSetupFrame, SLOT(changeSequenceCount(int))); + + numOfSequencesSpinBox->setValue(1); + + // Create Experiment Button + createPushButton = new QPushButton(tr("Create")); + connect(createPushButton, SIGNAL(pressed()), + this, SLOT(mussaCreatePushed())); + + // Cancle Button + cancelPushButton = new QPushButton(tr("Cancel")); + connect(cancelPushButton, SIGNAL(pressed()), + this, SLOT(mussaCancelPushed())); // LAYOUT QHBoxLayout *row1Layout = new QHBoxLayout; QHBoxLayout *row2Layout = new QHBoxLayout; QVBoxLayout *mainLayout = new QVBoxLayout; + QHBoxLayout *buttonLayout = new QHBoxLayout; row1Layout->addWidget(analysisNameLabel); row1Layout->addWidget(analysisNameLineEdit); @@ -70,20 +79,71 @@ MussaSetupWidget::MussaSetupWidget(QWidget *parent) row2Layout->addWidget(thresholdLabel); row2Layout->addWidget(thresholdLineEdit); row2Layout->addWidget(numOfSequencesLabel); - row2Layout->addWidget(numOfSequencesLineEdit); + row2Layout->addWidget(numOfSequencesSpinBox); + + buttonLayout->addWidget(createPushButton); + buttonLayout->addWidget(cancelPushButton); mainLayout->addLayout(row1Layout); mainLayout->addLayout(row2Layout); mainLayout->addWidget(seqSetupFrame); + mainLayout->addLayout(buttonLayout); setLayout(mainLayout); } -MussaSetupWidget::MussaSetupWidget(const MussaSetupWidget& msw) - : analysisNameLineEdit(msw.analysisNameLineEdit), - windowLineEdit(msw.windowLineEdit), - thresholdLineEdit(msw.thresholdLineEdit), - numOfSequencesLineEdit(msw.numOfSequencesLineEdit), - seqSetupFrame(msw.seqSetupFrame) +void MussaSetupWidget::mussaCreatePushed() +{ + emit createButtonPushed(); +} + +void MussaSetupWidget::mussaCancelPushed() { + emit cancelButtonPushed(); } + +Mussa* MussaSetupWidget::getMussaObject() +{ + Mussa *mussa = new Mussa; + + + + std::string seqFile; + std::string annotFile; + int fastaIndex; + int start; + int end; + + std::list setupInfoList = seqSetupFrame->getSetupInfo(); + + const int count = setupInfoList.size(); + + SetupInfo *setupInfo = 0; + for (int i=0; i < count; i++) + { + setupInfo = setupInfoList.back(); + setupInfoList.pop_back(); + + seqFile = setupInfo->getSeqFile(); + annotFile = setupInfo->getAnnotFile(); + fastaIndex = setupInfo->getFastaIndex(); + start = setupInfo->getSubSeqStart(); + end = setupInfo->getSubSeqEnd(); + + mussa->load_sequence(seqFile, annotFile, fastaIndex, start, end); + delete setupInfo; + } + + mussa->analyze(0, 0, Mussa::TransitiveNway, 0.0); + + return mussa; +} + +//MussaSetupWidget::MussaSetupWidget(const MussaSetupWidget& msw) +// : analysisNameLineEdit(msw.analysisNameLineEdit), +// windowLineEdit(msw.windowLineEdit), +// thresholdLineEdit(msw.thresholdLineEdit), +// numOfSequencesLineEdit(msw.numOfSequencesLineEdit), +// seqSetupFrame(msw.seqSetupFrame) +//{ +//} diff --git a/qui/mussa_setup_dialog/MussaSetupWidget.hpp b/qui/mussa_setup_dialog/MussaSetupWidget.hpp index fe891c5..4ced62b 100644 --- a/qui/mussa_setup_dialog/MussaSetupWidget.hpp +++ b/qui/mussa_setup_dialog/MussaSetupWidget.hpp @@ -5,8 +5,11 @@ //class QFrame; class QLineEdit; +class QSpinBox; +class QPushButton; class SequenceSetupFrame; +class Mussa; class MussaSetupWidget : public QWidget { @@ -14,13 +17,26 @@ class MussaSetupWidget : public QWidget public: MussaSetupWidget(QWidget *parent = 0); - MussaSetupWidget(const MussaSetupWidget&); + // MussaSetupWidget(const MussaSetupWidget&); + + Mussa* getMussaObject(); + +signals: + void createButtonPushed(); + void cancelButtonPushed(); + +private slots: + void mussaCreatePushed(); + void mussaCancelPushed(); private: + QLineEdit *analysisNameLineEdit; QLineEdit *windowLineEdit; QLineEdit *thresholdLineEdit; - QLineEdit *numOfSequencesLineEdit; + QSpinBox *numOfSequencesSpinBox; + QPushButton *createPushButton; + QPushButton *cancelPushButton; SequenceSetupFrame *seqSetupFrame; }; diff --git a/qui/mussa_setup_dialog/SequenceSetupFrame.cpp b/qui/mussa_setup_dialog/SequenceSetupFrame.cpp index e8cd37d..10059a8 100644 --- a/qui/mussa_setup_dialog/SequenceSetupFrame.cpp +++ b/qui/mussa_setup_dialog/SequenceSetupFrame.cpp @@ -4,6 +4,7 @@ #include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp" #include "qui/mussa_setup_dialog/SequenceSetupFrame.hpp" +#include "qui/mussa_setup_dialog/SetupInfo.hpp" SequenceSetupFrame::SequenceSetupFrame(QWidget *parent) @@ -17,9 +18,7 @@ SequenceSetupFrame::SequenceSetupFrame(QWidget *parent) sequenceFrame = new QFrame; sequenceFrame->setFrameStyle(QFrame::Panel | QFrame::Sunken); - sequenceLayout = new QVBoxLayout; - - + sequenceLayout = new QVBoxLayout; sequenceFrame->setLayout(sequenceLayout); @@ -27,15 +26,18 @@ SequenceSetupFrame::SequenceSetupFrame(QWidget *parent) mainLayout->addWidget(sequenceFrame); setLayout(mainLayout); + //Initialize to one sequence + changeSequenceCount(1); } -SequenceSetupFrame::SequenceSetupFrame(const SequenceSetupFrame &ssf) - : sequenceFrame(ssf.sequenceFrame), - sequenceLayout(ssf.sequenceLayout), - seqCount(ssf.seqCount)//, - //seqList(0) -{ -} + +//SequenceSetupFrame::SequenceSetupFrame(const SequenceSetupFrame &ssf) +// : sequenceFrame(ssf.sequenceFrame), +// sequenceLayout(ssf.sequenceLayout), +// seqCount(ssf.seqCount)//, +// //seqList(0) +//{ +//} void SequenceSetupFrame::changeSequenceCount(int newSeqCount) { @@ -55,10 +57,11 @@ void SequenceSetupFrame::setupSequences(int newSeqCount) { int numSeqsToAdd = newSeqCount - curSeqCount; + SequenceSetupWidget *seq = 0; for (int i = 1; i <= numSeqsToAdd; i++) { - SequenceSetupWidget *seq = new SequenceSetupWidget; - seqList.push_back(*seq); + seq = new SequenceSetupWidget; + seqList.push_back(seq); sequenceLayout->addWidget(seq); } } @@ -71,16 +74,53 @@ void SequenceSetupFrame::setupSequences(int newSeqCount) numSeqsToRemove = curSeqCount; } - //SequenceSetupWidget *seqWidget = 0; + SequenceSetupWidget *seqWidget = 0; for (int i=1; i <= numSeqsToRemove; i++) { - SequenceSetupWidget& seqWidget(seqList.back()); - sequenceLayout->removeWidget(&seqWidget); + seqWidget = seqList.back(); + sequenceLayout->removeWidget(seqWidget); seqList.pop_back(); - //delete seqWidget; + delete seqWidget; } } +} + +std::list SequenceSetupFrame::getSetupInfo() +{ + const int curSeqCount = seqList.size(); + + std::list setupInfoList; + + QString seqFile; + QString annotFile; + int fastaIndex; + int start; + int end; + + + SequenceSetupWidget *seq = 0; + //SetupInfo *setupInfo = 0; + for (int i = 0; i < curSeqCount; i++) + { + seq = seqList.back(); + + seqFile = seq->getSeqFile(); + annotFile = seq->getAnnotFile(); + fastaIndex = seq->getFastaIndex(); + start = seq->getStart(); + end = seq->getEnd(); + + seqList.push_front(seq); + seqList.pop_back(); + setupInfoList.push_back(new SetupInfo(seqFile.toStdString(), + annotFile.toStdString(), + fastaIndex, start, end)); + + } + + return setupInfoList; } + diff --git a/qui/mussa_setup_dialog/SequenceSetupFrame.hpp b/qui/mussa_setup_dialog/SequenceSetupFrame.hpp index 4bba612..97f0396 100644 --- a/qui/mussa_setup_dialog/SequenceSetupFrame.hpp +++ b/qui/mussa_setup_dialog/SequenceSetupFrame.hpp @@ -6,6 +6,7 @@ //#include #include #include "qui/mussa_setup_dialog/SequenceSetupWidget.hpp" +#include "qui/mussa_setup_dialog/SetupInfo.hpp" class QFrame; class QVBoxLayout; @@ -16,7 +17,9 @@ class SequenceSetupFrame : public QWidget public: SequenceSetupFrame(QWidget *parent = 0); - SequenceSetupFrame(const SequenceSetupFrame&); + //SequenceSetupFrame(const SequenceSetupFrame&); + + std::list getSetupInfo(); public slots: void changeSequenceCount(int seqCount); @@ -30,7 +33,7 @@ protected: //QList *seqList; - std::list seqList; + std::list seqList; QFrame *sequenceFrame; QVBoxLayout *sequenceLayout; diff --git a/qui/mussa_setup_dialog/SequenceSetupWidget.cpp b/qui/mussa_setup_dialog/SequenceSetupWidget.cpp index 832abbf..731b41b 100644 --- a/qui/mussa_setup_dialog/SequenceSetupWidget.cpp +++ b/qui/mussa_setup_dialog/SequenceSetupWidget.cpp @@ -88,14 +88,14 @@ SequenceSetupWidget::SequenceSetupWidget(QWidget *parent) : setLayout(mainLayout); } -SequenceSetupWidget::SequenceSetupWidget(const SequenceSetupWidget& ssw) : - sequenceLineEdit(ssw.sequenceLineEdit), - annotLineEdit(ssw.annotLineEdit), - fastaIndexLineEdit(ssw.fastaIndexLineEdit), - seqStartLineEdit(ssw.seqStartLineEdit), - seqStopLineEdit(ssw.seqStopLineEdit) -{ -} +//SequenceSetupWidget::SequenceSetupWidget(const SequenceSetupWidget& ssw) : +// sequenceLineEdit(ssw.sequenceLineEdit), +// annotLineEdit(ssw.annotLineEdit), +// fastaIndexLineEdit(ssw.fastaIndexLineEdit), +// seqStartLineEdit(ssw.seqStartLineEdit), +// seqStopLineEdit(ssw.seqStopLineEdit) +//{ +//} void SequenceSetupWidget::promptForFastaFile() { diff --git a/qui/mussa_setup_dialog/SequenceSetupWidget.hpp b/qui/mussa_setup_dialog/SequenceSetupWidget.hpp index e36bac0..0998c66 100644 --- a/qui/mussa_setup_dialog/SequenceSetupWidget.hpp +++ b/qui/mussa_setup_dialog/SequenceSetupWidget.hpp @@ -2,8 +2,8 @@ #define _SEQUENCE_SETUP_WIDGET_H_ #include - -class QLineEdit; +#include +#include class SequenceSetupWidget : public QWidget { @@ -11,7 +11,14 @@ class SequenceSetupWidget : public QWidget public: SequenceSetupWidget(QWidget *parent = 0); - SequenceSetupWidget(const SequenceSetupWidget&); + // SequenceSetupWidget(const SequenceSetupWidget&); + + QString getSeqFile() { return sequenceLineEdit->text(); } + QString getAnnotFile() { return annotLineEdit->text(); } + int getFastaIndex() { return fastaIndexLineEdit->text().toInt(); } + int getStart() { return seqStartLineEdit->text().toInt(); } + int getEnd() { return seqStopLineEdit->text().toInt(); } + public slots: void promptForFastaFile(); diff --git a/qui/mussa_setup_dialog/SetupInfo.cpp b/qui/mussa_setup_dialog/SetupInfo.cpp new file mode 100644 index 0000000..c0bef3d --- /dev/null +++ b/qui/mussa_setup_dialog/SetupInfo.cpp @@ -0,0 +1,12 @@ +#include "qui/mussa_setup_dialog/SetupInfo.hpp" + +SetupInfo::SetupInfo(std::string newSeqFile, std::string newAnnotFile, + int newFastaIndex, int newSubSeqStart, int newSubSeqEnd) + : seqFile(newSeqFile), + annotFile(newAnnotFile), + fastaIndex(newFastaIndex), + subSeqStart(newSubSeqStart), + subSeqEnd(newSubSeqEnd) +{ + +} diff --git a/qui/mussa_setup_dialog/SetupInfo.hpp b/qui/mussa_setup_dialog/SetupInfo.hpp new file mode 100644 index 0000000..1b92fd1 --- /dev/null +++ b/qui/mussa_setup_dialog/SetupInfo.hpp @@ -0,0 +1,30 @@ +#ifndef _SETUP_INFO_H_ +#define _SETUP_INFO_H_ + +#include + +class SetupInfo +{ +public: + SetupInfo(std::string seqFile, + std::string annotFile, + int fastaIndex, + int subSeqStart=0, + int subSeqEnd=0); + + std::string getSeqFile() { return seqFile; }; + std::string getAnnotFile() { return annotFile; }; + int getFastaIndex() { return fastaIndex; }; + int getSubSeqStart() { return subSeqStart; }; + int getSubSeqEnd() { return subSeqEnd; }; + +private: + std::string seqFile; + std::string annotFile; + int fastaIndex; + int subSeqStart; + int subSeqEnd; + +}; + +#endif