Fix the new analysis dialog so it starts at a good size on os x
[mussa.git] / qui / mussa_setup_dialog / SequenceSetupFrame.cpp
index e8cd37d78b2c41b4dbad522f1b3a8100abf89eb8..0e12da4782216ccac868141390b8f0f39c234fa1 100644 (file)
@@ -1,46 +1,71 @@
 #include <QFrame>
 #include <QList>
+#include <QScrollArea>
 #include <QVBoxLayout>
 
 #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)
   : QWidget(parent),
-    sequenceLayout(0),
-    seqCount(0)//,
-    //seqList(0)
+    sequenceFrame(0),
+    scrollArea(0),
+    seqCount(1),
+    default_directory(QDir::current()),
+    sequenceLayout(0)
 {
 
   // frame
   sequenceFrame = new QFrame;
   sequenceFrame->setFrameStyle(QFrame::Panel | QFrame::Sunken);
   
-  sequenceLayout = new QVBoxLayout;
-
-  
+  sequenceLayout = new QVBoxLayout;  
 
   sequenceFrame->setLayout(sequenceLayout);
 
+  //scroll area
+  scrollArea = new QScrollArea;
+  scrollArea->setWidget(sequenceFrame);
+
   QVBoxLayout *mainLayout = new QVBoxLayout;
-  mainLayout->addWidget(sequenceFrame);
+  mainLayout->addWidget(scrollArea);
   setLayout(mainLayout);
 
+  //Initialize to one sequence
+  changeSequenceCount(2);
+  
+  //scrollArea->resize(sequenceFrame->sizeHint());
+  //sequenceFrame->resize(500,500);
+  //sequenceFrame->resize(scrollArea->size());
+  scrollArea->setWidgetResizable(TRUE);
+  scrollArea->show();
+
+}
+
+QDir SequenceSetupFrame::get_default_dir() const 
+{
+  return default_directory;
 }
 
-SequenceSetupFrame::SequenceSetupFrame(const SequenceSetupFrame &ssf)
-  : sequenceFrame(ssf.sequenceFrame),
-    sequenceLayout(ssf.sequenceLayout),
-    seqCount(ssf.seqCount)//,
-    //seqList(0)
+void SequenceSetupFrame::set_default_dir(const QDir& d)
 {
+  default_directory = d;
 }
 
 void SequenceSetupFrame::changeSequenceCount(int newSeqCount)
 {
   seqCount = newSeqCount;
   setupSequences(seqCount);
+  resizeInnerFrame();
+}
+
+void SequenceSetupFrame::resizeInnerFrame()
+{
+  QSize box(seqList.front()->sizeHint());
+
+  sequenceFrame->resize(box.width(), box.height() * seqList.size() + 30);
 }
 
 void SequenceSetupFrame::setupSequences(int newSeqCount)
@@ -55,10 +80,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(this);
+      seqList.push_back(seq);
       sequenceLayout->addWidget(seq);
     } 
   }
@@ -71,16 +97,56 @@ 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;
     }
 
   }
+  updateGeometry();  
+}
+
+std::list<SetupInfo *> SequenceSetupFrame::getSetupInfo()
+{
+  const int curSeqCount = seqList.size();
   
+  std::list<SetupInfo *> setupInfoList;
+
+  QString seqName;
+  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();
+   
+    seqName = seq->getName();
+    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(seqName.toStdString(),
+            seqFile.toStdString(), 
+                                         annotFile.toStdString(), 
+                                         fastaIndex, start, end));
+    
+  } 
+
+  return setupInfoList;
 }
+