From 027fa562c5791a915a989c4637bda0f8232c1e1a Mon Sep 17 00:00:00 2001 From: Diane Trout Date: Mon, 12 Jun 2006 22:15:32 +0000 Subject: [PATCH] Actually copy our selected sequence to the clipboard --- alg/glseqbrowser.cpp | 1 - qui/MussaAlignedWindow.cpp | 92 ++++++++++++++---------- qui/MussaAlignedWindow.hpp | 10 ++- qui/seqbrowser/SequenceBrowserWidget.cpp | 7 ++ 4 files changed, 71 insertions(+), 39 deletions(-) diff --git a/alg/glseqbrowser.cpp b/alg/glseqbrowser.cpp index 560662b..dd8ee2b 100644 --- a/alg/glseqbrowser.cpp +++ b/alg/glseqbrowser.cpp @@ -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 diff --git a/qui/MussaAlignedWindow.cpp b/qui/MussaAlignedWindow.cpp index 255b74f..23a297e 100644 --- a/qui/MussaAlignedWindow.cpp +++ b/qui/MussaAlignedWindow.cpp @@ -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& sel_paths) +void MussaAlignedWindow::setupMenus() { - // sets are sorted - set::iterator sel_i = sel_paths.begin(); - list::const_iterator path_i = m.paths().refined_pathz.begin(); - list::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& sel_paths) +{ + // sets are sorted + set::iterator sel_i = sel_paths.begin(); + list::const_iterator path_i = m.paths().refined_pathz.begin(); + list::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) diff --git a/qui/MussaAlignedWindow.hpp b/qui/MussaAlignedWindow.hpp index ec426fb..8d4ead0 100644 --- a/qui/MussaAlignedWindow.hpp +++ b/qui/MussaAlignedWindow.hpp @@ -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& 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 pick_actions; std::vector view_actions; ZoomWidget zoom; diff --git a/qui/seqbrowser/SequenceBrowserWidget.cpp b/qui/seqbrowser/SequenceBrowserWidget.cpp index 8c3633d..25af9b0 100644 --- a/qui/seqbrowser/SequenceBrowserWidget.cpp +++ b/qui/seqbrowser/SequenceBrowserWidget.cpp @@ -1,5 +1,7 @@ #include +#include +#include #include #include #include @@ -81,8 +83,13 @@ const vector& 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() -- 2.30.2