#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),
zoom(0),
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);
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();
setCentralWidget(&browser);
+ // Add a threhold widget set to our current threshold and make it readonly
+ threshold_widget = new ThresholdWidget;
+ threshold_widget->setRange(analysis->get_threshold(),analysis->get_window());
+ threshold_widget->setBasepairThreshold(analysis->get_soft_threshold());
+ threshold_widget->setReadOnly(true);
+
alignTB = new QToolBar();
alignTB->addWidget(zoom);
+ alignTB->addWidget(threshold_widget);
addToolBar(alignTB);
ostringstream message;
message << "Selected " << selected_paths.size() << " paths";
statusBar()->showMessage(message.str().c_str(), 5000);
browser.updatePosition();
+
+ updateTitle();
}
void MussaAlignedWindow::setupActions()
newMenu->addAction(saveBrowserPixmapAction);
newMenu = menuBar()->addMenu(tr("&Edit"));
+ newMenu->addAction(browser.getCopySelectedSequenceAsStringAction());
newMenu->addAction(browser.getCopySelectedSequenceAsFastaAction());
newMenu->addAction(createSubAnalysisAction);
}
}
+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];
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();