ticket:127
the previous sidebar clearing code didn't remove the spacers between
the various widgets. This will do that (though for some reason
QLayout::removeItem wouldn't properly destroy my widgets, I had to use
QLayout;:removeWidget on them, which is why there are two loops in
SequenceBrowserSidebar::clear.
I also defined some typedefs in SequenceBrowserSidebar to abstract out
the exact type being used to store the sidebar detail widgets
(SequenceDescription) in case I want to switch to a boost::shared_ptr in case I want to switch to a boost::shared_ptr in case I want to switch to a boost::shared_ptr in case I want to switch to a boost::shared_ptr
void SequenceBrowserSidebar::clear()
{
void SequenceBrowserSidebar::clear()
{
- for (vector<SequenceDescription *>::iterator desc_i = descriptions.begin();
+ // remove our widgets
+ for (SequenceBrowserSidebar::iterator desc_i = descriptions.begin();
desc_i != descriptions.end();
++desc_i)
{
layout.removeWidget(*desc_i);
delete *desc_i;
}
desc_i != descriptions.end();
++desc_i)
{
layout.removeWidget(*desc_i);
delete *desc_i;
}
+ // remove any crud that's left over (like spacers)
+ QLayoutItem *child;
+ while ((child = layout.takeAt(0)) != 0) {
+ layout.removeItem(child);
+ delete child;
+ }
+SequenceBrowserSidebar::size_type SequenceBrowserSidebar::size() const
+{
+ return descriptions.size();
+}
+
void SequenceBrowserSidebar::setSequences(
vector<boost::shared_ptr<GlSequence> > sequences
)
void SequenceBrowserSidebar::setSequences(
vector<boost::shared_ptr<GlSequence> > sequences
)
track_i != sequences.end();
++track_i)
{
track_i != sequences.end();
++track_i)
{
- SequenceDescription *desc = new SequenceDescription(this);
+ seq_description_type desc = new SequenceDescription(this);
desc->setGlSequence(*track_i);
descriptions.push_back(desc);
layout.addWidget(desc);
desc->setGlSequence(*track_i);
descriptions.push_back(desc);
layout.addWidget(desc);
+ //! pointer to our sequence description widget
+ typedef SequenceDescription *seq_description_type;
+ //! an STL collection of our sequence description widget
+ typedef std::vector<seq_description_type> collection;
+ typedef collection::size_type size_type;
+ typedef collection::iterator iterator;
enum SidebarSide { Left, Right };
SequenceBrowserSidebar(QWidget *parent = 0);
//! clear our list of descriptions
void clear();
enum SidebarSide { Left, Right };
SequenceBrowserSidebar(QWidget *parent = 0);
//! clear our list of descriptions
void clear();
+ //! how many items are we storing
+ size_t size() const;
+ //! set the glsequences we're going to be displaying
void setSequences(std::vector<boost::shared_ptr<GlSequence> > );
void setSequences(std::vector<boost::shared_ptr<GlSequence> > );
- std::vector<SequenceDescription *> descriptions;
+ collection descriptions;
public slots:
//! update the reported sequence position for each of our sequences
/*! for example when the right side is at position 3000 call
public slots:
//! update the reported sequence position for each of our sequences
/*! for example when the right side is at position 3000 call
{
converted_sequences.clear();
scrollable_browser.browser().clear();
{
converted_sequences.clear();
scrollable_browser.browser().clear();
+
+ SequenceBrowserSidebar::collection left = left_sidebar.descriptions;
+ SequenceBrowserSidebar::collection right = right_sidebar.descriptions;
+ for(size_t i = 0; i != left_sidebar.size(); ++i)
+ {
+ disconnect(left[i], SIGNAL(nameChanged(const QString &)),
+ right[i], SLOT(setName(const QString &)));
+ disconnect(right[i], SIGNAL(nameChanged(const QString &)),
+ left[i], SLOT(setName(const QString &)));
+ }
left_sidebar.clear();
right_sidebar.clear();
}
left_sidebar.clear();
right_sidebar.clear();
}
right_sidebar.setSequences(converted_sequences);
// connect the text change signals to each other
right_sidebar.setSequences(converted_sequences);
// connect the text change signals to each other
- vector<SequenceDescription *> left = left_sidebar.descriptions;
- vector<SequenceDescription *> right = right_sidebar.descriptions;
+ 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)
{
connect(left[i], SIGNAL(nameChanged(const QString &)),
for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
{
connect(left[i], SIGNAL(nameChanged(const QString &)),
{
const SequenceBrowser& browser = scrollable_browser.browser();
const vector<boost::shared_ptr<GlSequence> > &sequences = browser.sequences();
{
const SequenceBrowser& browser = scrollable_browser.browser();
const vector<boost::shared_ptr<GlSequence> > &sequences = browser.sequences();
- vector<SequenceDescription *> left = left_sidebar.descriptions;
- vector<SequenceDescription *> right = right_sidebar.descriptions;
+ 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)
{
left[i]->setPosition(sequences[i]->leftbase(browser.viewportLeft()));
for(size_t i = 0; i != sequences.size() and i != right.size(); ++i)
{
left[i]->setPosition(sequences[i]->leftbase(browser.viewportLeft()));