Mouse scroll wheel zooming! =o)
[mussa.git] / qui / MussaAlignedWindow.cpp
index 4daa5d8a6068be9b280f39560b1002d1e952eb98..7e4246dfb79509db70a90d15dd275605d9e4646e 100644 (file)
 #include <iostream>
 using namespace std;
 
-MussaAlignedWindow::MussaAlignedWindow(MussaRef m, 
+MussaAlignedWindow::MussaAlignedWindow(MussaRef m,
+                                       boost::shared_ptr<QDir> default_dir_,
                                        const set<int>& sel_paths,
                                        SubanalysisWindowRef window, 
                                        QWidget *parent)
   : QMainWindow(parent),
     analysis(m),
+    default_dir(default_dir_),
     subanalysis_window(window),
+    browser(default_dir),
     pick_align_menu(tr("Choose Alignment")),
     view_align_menu(tr("View Alignment")),
     threshold_widget(0),
@@ -26,6 +29,8 @@ MussaAlignedWindow::MussaAlignedWindow(MussaRef m,
     alignTB(0)
 {
   setupActions();
+  connect(&browser, SIGNAL(basepairsCopied(size_t)), 
+          this, SLOT(showBasePairsCopied(size_t)));
   browser.setSequences(analysis->sequences(), analysis->colorMapper());
   setSelectedPaths(analysis, sel_paths);
   setAlignment(0);
@@ -35,6 +40,11 @@ MussaAlignedWindow::MussaAlignedWindow(MussaRef m,
   connect(zoom, SIGNAL(valueChanged(double)), 
           &browser, SLOT(setZoom(double)));
   zoom->setValue(zoom_level);
+  
+  // Mouse scroll wheel zooming!
+  connect(&browser, SIGNAL(mouseWheelZoom(double)),
+                 zoom, SLOT(setValue(double)));
+  
   computeMatchLines();
   setupMenus();
   setupAlignmentMenus();
@@ -56,6 +66,8 @@ MussaAlignedWindow::MussaAlignedWindow(MussaRef m,
   message << "Selected " << selected_paths.size() << " paths";
   statusBar()->showMessage(message.str().c_str(), 5000);
   browser.updatePosition();
+  
+  updateTitle();
 }
 
 void MussaAlignedWindow::setupActions()
@@ -78,6 +90,7 @@ void MussaAlignedWindow::setupMenus()
   newMenu->addAction(saveBrowserPixmapAction);
 
   newMenu = menuBar()->addMenu(tr("&Edit"));
+  newMenu->addAction(browser.getCopySelectedSequenceAsStringAction());
   newMenu->addAction(browser.getCopySelectedSequenceAsFastaAction());
   newMenu->addAction(createSubAnalysisAction);
   
@@ -185,6 +198,15 @@ void MussaAlignedWindow::setAlignment(int alignment_index)
   }
 }
 
+void MussaAlignedWindow::showBasePairsCopied(size_t bp_copied)
+{
+  QString msg("Copied ");
+  QString num;
+  num.setNum(bp_copied);
+  msg += num + " base pairs";
+  statusBar()->showMessage(msg, 5000);
+}
+
 void MussaAlignedWindow::toggleViewAlignment(int alignment_index)
 {
   view_paths[alignment_index]= not view_paths[alignment_index]; 
@@ -199,6 +221,15 @@ void MussaAlignedWindow::update()
   browser.update();
 }
 
+void MussaAlignedWindow::updateTitle()
+{
+  std::string title("Sequence View: ");
+  if (analysis) {
+    title += analysis->get_title();
+  }
+  setWindowTitle(title.c_str());
+}
+
 void MussaAlignedWindow::computeMatchLines()
 {
   browser.clear_links();