Actually copy our selected sequence to the clipboard
authorDiane Trout <diane@caltech.edu>
Mon, 12 Jun 2006 22:15:32 +0000 (22:15 +0000)
committerDiane Trout <diane@caltech.edu>
Mon, 12 Jun 2006 22:15:32 +0000 (22:15 +0000)
alg/glseqbrowser.cpp
qui/MussaAlignedWindow.cpp
qui/MussaAlignedWindow.hpp
qui/seqbrowser/SequenceBrowserWidget.cpp

index 560662b0188e1fb3b1a790e538626e1debd64da4..dd8ee2b0fed6826cfd5c2afc2ddf9554923a3a07 100644 (file)
@@ -406,7 +406,6 @@ void GlSeqBrowser::copySelectedTracks(std::string& copy_buffer,
       copy_buffer += formatter(seq, track_i->left, track_i->right);
     }
   }
-  cout << "copy" << endl << copy_buffer << endl;
 }
 
 //! copy sequence from selected tracks as plain sequences
index 255b74f5f2e0feb14178eddac5a26d609698c55e..23a297e54ece3615c829b8d3f2a279fcf7d15ba2 100644 (file)
@@ -20,6 +20,7 @@ MussaAlignedWindow::MussaAlignedWindow(Mussa& m,
     pick_align_menu(tr("Choose Alignment")),
     view_align_menu(tr("View Alignment"))
 {
+  setupActions();
   browser.setSequences(analysis.sequences(), analysis.colorMapper());
   setSelectedPaths(m, sel_paths);
   setAlignment(0);
@@ -27,6 +28,7 @@ MussaAlignedWindow::MussaAlignedWindow(Mussa& m,
   zoom.setValue(zoom_level);
   computeMatchLines();
   setupMenus();
+  setupAlignmentMenus();
   
   setCentralWidget(&browser);
 
@@ -36,55 +38,37 @@ MussaAlignedWindow::MussaAlignedWindow(Mussa& m,
   connect(&zoom, SIGNAL(valueChanged(double)), 
           &browser, SLOT(setZoom(double)));
  
+  ostringstream message;
+  message << "Selected " << selected_paths.size() << " paths";
+  statusBar()->showMessage(message.str().c_str(), 5000);
+  browser.updatePosition();
+}
+
+void MussaAlignedWindow::setupActions()
+{
+  // create our copy action
+  copySelectedSequenceAsFastaAction = new QAction(tr("&Copy As Fasta"), this);
+  connect(copySelectedSequenceAsFastaAction, SIGNAL(triggered()), 
+          &browser, SLOT(copySelectedSequenceAsFasta()));
 
   //Save pixel map action
   saveBrowserPixmapAction = new QAction(tr("Save to image..."), this);
   connect(saveBrowserPixmapAction, (SIGNAL(triggered())),
          &browser, SLOT(promptSaveBrowserPixmap()));
   saveBrowserPixmapAction->setIcon(QIcon(":/icons/image2.png"));
-  QMenu *newMenu = menuBar()->addMenu(tr("&File"));
-  newMenu->addAction(saveBrowserPixmapAction);
-  menuBar()->addMenu(&pick_align_menu);
-  menuBar()->addMenu(&view_align_menu);
-
-  ostringstream message;
-  message << "Selected " << selected_paths.size() << " paths";
-  statusBar()->showMessage(message.str().c_str(), 5000);
-  browser.updatePosition();
 }
 
-
-void MussaAlignedWindow::setSelectedPaths(Mussa &m, const set<int>& sel_paths)
+void MussaAlignedWindow::setupMenus()
 {
-  // sets are sorted
-  set<int>::iterator sel_i = sel_paths.begin();
-  list<ConservedPath>::const_iterator path_i = m.paths().refined_pathz.begin();
-  list<ConservedPath>::const_iterator path_end = m.paths().refined_pathz.end();
-  size_t path_size = m.paths().refined_pathz.size();
-  size_t pathid=0;
+  QMenu *newMenu = menuBar()->addMenu(tr("&File"));
+  newMenu->addAction(saveBrowserPixmapAction);
+
+  newMenu = menuBar()->addMenu(tr("&Edit"));
+  newMenu->addAction(copySelectedSequenceAsFastaAction);
 
-  selected_paths.reserve(sel_paths.size());
-  view_paths.reserve(sel_paths.size());
-  while (pathid != path_size and sel_i != sel_paths.end())
-  {
-    assert (*sel_i >= 0);
-    size_t sel_pathid = (size_t)(*sel_i);
-    if (pathid == sel_pathid) {
-      selected_paths.push_back(*path_i);
-      view_paths.push_back(true);
-      ++pathid;
-      ++path_i;
-      ++sel_i;
-    } else if (pathid < sel_pathid) {
-      ++pathid;
-      ++path_i;
-    } else if (pathid > sel_pathid) {
-      ++sel_i;
-    }
-  }
 }
 
-void MussaAlignedWindow::setupMenus()
+void MussaAlignedWindow::setupAlignmentMenus()
 {
   pick_align_menu.clear();
   view_align_menu.clear();
@@ -119,6 +103,40 @@ void MussaAlignedWindow::setupMenus()
     view_actions.push_back(view);
     view_align_menu.addAction(view);
   }
+
+  menuBar()->addMenu(&pick_align_menu);
+  menuBar()->addMenu(&view_align_menu);
+}
+
+
+void MussaAlignedWindow::setSelectedPaths(Mussa &m, const set<int>& sel_paths)
+{
+  // sets are sorted
+  set<int>::iterator sel_i = sel_paths.begin();
+  list<ConservedPath>::const_iterator path_i = m.paths().refined_pathz.begin();
+  list<ConservedPath>::const_iterator path_end = m.paths().refined_pathz.end();
+  size_t path_size = m.paths().refined_pathz.size();
+  size_t pathid=0;
+
+  selected_paths.reserve(sel_paths.size());
+  view_paths.reserve(sel_paths.size());
+  while (pathid != path_size and sel_i != sel_paths.end())
+  {
+    assert (*sel_i >= 0);
+    size_t sel_pathid = (size_t)(*sel_i);
+    if (pathid == sel_pathid) {
+      selected_paths.push_back(*path_i);
+      view_paths.push_back(true);
+      ++pathid;
+      ++path_i;
+      ++sel_i;
+    } else if (pathid < sel_pathid) {
+      ++pathid;
+      ++path_i;
+    } else if (pathid > sel_pathid) {
+      ++sel_i;
+    }
+  }
 }
 
 void MussaAlignedWindow::setAlignment(int alignment_index)
index ec426fbd8d555135d9fd9ccfae64d1d4d742c24a..8d4ead06cdea74e31de26af176ca5294599cff39 100644 (file)
@@ -30,9 +30,14 @@ public slots:
   void update();
 
 protected:
+  // figure out what Alignments we have (needed for setupAlignmentMenus)
   void setSelectedPaths(Mussa &m, const std::set<int>& sel_paths);
-  //! set menus (must be called after setSelectedPaths)
+  // create our cations
+  void setupActions();
+  // create our menus
   void setupMenus();
+  //! set menus (must be called after setSelectedPaths)
+  void setupAlignmentMenus();
   void computeMatchLines();
   
   Mussa& analysis;
@@ -43,7 +48,10 @@ protected:
   SequenceBrowserWidget browser;
   QMenu pick_align_menu;
   QMenu view_align_menu;
+
   QAction *saveBrowserPixmapAction;
+  QAction *copySelectedSequenceAsFastaAction;
+
   std::vector <IntAction *> pick_actions;
   std::vector <IntAction *> view_actions;
   ZoomWidget zoom;
index 8c3633d0a2f068c3fb5c65254e38428652283160..25af9b0629b2a2c8381526293f4e7b1a6e8c00a6 100644 (file)
@@ -1,5 +1,7 @@
 #include <iostream>
 
+#include <QApplication>
+#include <QClipboard>
 #include <QLabel>
 #include <QScrollBar>
 #include <QSpacerItem>
@@ -81,8 +83,13 @@ const vector<GlSequence>& SequenceBrowserWidget::sequences() const
 
 void SequenceBrowserWidget::copySelectedSequenceAsFasta()
 {
+  // get fasta data
   std::string buffer;
   scrollable_browser.browser().copySelectedTracksAsFasta(buffer);
+
+  // get reference to clipboard
+  QClipboard *clipboard = QApplication::clipboard();
+  clipboard->setText(buffer.c_str());
 }
 
 void SequenceBrowserWidget::clear_links()