X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=qui%2Fseqbrowser%2FSequenceBrowserWidget.cpp;h=34c7a9a14067f690eb35b82967726c6d7890232e;hb=02fc4144044a430f8bee6617c0c9871d4ebe5e4d;hp=f0f0b4432385e6c55a5b1398e6be5597ba779253;hpb=2b80bb5d34ddbc31b466a102df6410307a96a016;p=mussa.git diff --git a/qui/seqbrowser/SequenceBrowserWidget.cpp b/qui/seqbrowser/SequenceBrowserWidget.cpp index f0f0b44..34c7a9a 100644 --- a/qui/seqbrowser/SequenceBrowserWidget.cpp +++ b/qui/seqbrowser/SequenceBrowserWidget.cpp @@ -18,28 +18,73 @@ #include using namespace std; +SequenceBrowserWidget::SequenceBrowserWidget( + QWidget *parent) + : QScrollArea(parent), + left_sidebar(0), + scrollable_browser(0), + right_sidebar(0), + layout(0), + layout_container(0) +{ + boost::shared_ptr empty_dir(new QDir); + default_dir = empty_dir; + + init(); +} + SequenceBrowserWidget::SequenceBrowserWidget( boost::shared_ptr default_dir_, QWidget *parent ) - : QWidget(parent), - default_dir(default_dir_), - left_sidebar(new SequenceBrowserSidebar), - scrollable_browser(new ScrollableSequenceBrowser), - right_sidebar(new SequenceBrowserSidebar), - layout(new QHBoxLayout) + : QScrollArea(parent), + left_sidebar(0), + scrollable_browser(0), + right_sidebar(0), + layout(0), + layout_container(0) { + default_dir = default_dir_; + + init(); +} + +void SequenceBrowserWidget::init() +{ + layout_container = new QWidget(this); + layout = new QHBoxLayout(layout_container); + left_sidebar = new SequenceBrowserSidebar(layout_container); + scrollable_browser = new ScrollableSequenceBrowser(layout_container); + right_sidebar = new SequenceBrowserSidebar(layout_container); + layout->addWidget(left_sidebar, 0); layout->addWidget(scrollable_browser, 1); layout->addWidget(right_sidebar, 0); - - setLayout(layout); - + + layout_container->setLayout(layout); + setWidget(layout_container); + setWidgetResizable(true); + // update position values when something in the SequenceBrowser changes connect(&(scrollable_browser->browser()), SIGNAL(viewportChanged()), this, SLOT(updatePosition())); connect(&(scrollable_browser->browser()), SIGNAL(basepairsCopied(size_t)), this, SIGNAL(basepairsCopied(size_t))); + + // Send the signal mouseWheelZoom signal from seq browser upward. + connect(&(scrollable_browser->browser()), SIGNAL(mouseWheelZoom(double)), + this, SIGNAL(mouseWheelZoom(double))); +} + + +SequenceBrowserWidget::SequenceBrowserWidget(const SequenceBrowserWidget &o) + : QScrollArea(o.window()), + left_sidebar(o.left_sidebar), + scrollable_browser(o.scrollable_browser), + right_sidebar(o.right_sidebar), + layout(o.layout), + layout_container(o.layout_container) +{ } QSize SequenceBrowserWidget::sizeHint() const @@ -60,7 +105,6 @@ QSize SequenceBrowserWidget::sizeHint() const return QSize(width, center.height()); } - void SequenceBrowserWidget::clear() { converted_sequences.clear(); @@ -94,6 +138,11 @@ QAction *SequenceBrowserWidget::getCopySelectedSequenceAsFastaAction() return scrollable_browser->browser().getCopySelectedSequenceAsFastaAction(); } +QAction *SequenceBrowserWidget::getEditSequencePropertiesAction() +{ + return scrollable_browser->browser().getEditSequencePropertiesAction(); +} + void SequenceBrowserWidget::copySelectedSequenceAsFasta() { scrollable_browser->browser().copySelectedSequenceAsFasta(); @@ -107,15 +156,16 @@ void SequenceBrowserWidget::copySelectedTracksAsSeqLocation( } void SequenceBrowserWidget::setSequences( - const std::vector >& sequences, - boost::shared_ptr cm) + const std::vector& new_sequences, + AnnotationColorsRef cm) { SequenceBrowser& browser = scrollable_browser->browser(); clear(); - for(Mussa::vector_sequence_type::const_iterator seq_i = sequences.begin(); - seq_i != sequences.end(); + for(Mussa::vector_sequence_type::const_iterator seq_i = new_sequences.begin(); + seq_i != new_sequences.end(); ++seq_i) { + // Blech *(*seq_i) is dereferencing the shared_ptr stored in the iterator. boost::shared_ptr gs(new GlSequence(*seq_i, cm)); converted_sequences.push_back(gs); browser.push_sequence(gs); @@ -126,7 +176,7 @@ void SequenceBrowserWidget::setSequences( // connect the text change signals to each other SequenceBrowserSidebar::collection left = left_sidebar->descriptions; SequenceBrowserSidebar::collection right = right_sidebar->descriptions; - for(size_t i = 0; i != sequences.size() and i != right.size(); ++i) + for(size_t i = 0; i != new_sequences.size() and i != right.size(); ++i) { connect(left[i], SIGNAL(nameChanged(const QString &)), right[i], SLOT(setName(const QString &)));