return cur_ortho.right - cur_ortho.left;
}
+int GlSeqBrowser::viewportPixelHeight() const
+{
+ return viewport_size.y;
+}
+
+int GlSeqBrowser::viewportPixelWidth() const
+{
+ return viewport_size.x;
+}
+
double GlSeqBrowser::zoomOut()
{
//! copy sequence from selected track using formating function
template<class Item>
-void GlSeqBrowser::copySelectedTracks(std::list<Item>& result,
+size_t GlSeqBrowser::copySelectedTracks(std::list<Item>& result,
Item (*formatter)(boost::shared_ptr<Sequence> s,
int left,
int right))
{
+ size_t base_pairs_copied = 0;
result.clear();
for(selected_track_iterator track_i = selected_tracks.begin();
// we should be safe
boost::shared_ptr<Sequence> seq = track_container[track_index]->sequence();
result.push_back(formatter(seq, track_i->left, track_i->right));
+ base_pairs_copied += max(track_i->right-track_i->left, 0);
}
}
+ return base_pairs_copied;
}
//! copy sequence from selected tracks as FASTA sequences
-void GlSeqBrowser::copySelectedTracksAsFasta(std::string& copy_buffer)
+size_t GlSeqBrowser::copySelectedTracksAsFasta(std::string& copy_buffer)
{
std::list<std::string> result;
struct AsFasta {
return s.str();
}
};
- copySelectedTracks(result, AsFasta::formatter);
+ size_t base_pairs_copied = copySelectedTracks(result, AsFasta::formatter);
// I wish there was some way to use for_each and bind here
for (list<string>::iterator result_i = result.begin();
result_i != result.end();
{
copy_buffer.append(*result_i);
}
+ return base_pairs_copied;
}
//! copy sequence from selected tracks as new sequences
-void GlSeqBrowser::copySelectedTracksAsSequences(std::list<Sequence>& result)
+size_t GlSeqBrowser::copySelectedTracksAsSequences(std::list<Sequence>& result)
{
struct AsSequence {
static Sequence formatter(boost::shared_ptr<Sequence> seq,
return seq->subseq(left, right-left+1);
}
};
- copySelectedTracks(result, AsSequence::formatter);
+ return copySelectedTracks(result, AsSequence::formatter);
}
-void GlSeqBrowser::copySelectedTracksAsSeqLocation(
+size_t GlSeqBrowser::copySelectedTracksAsSeqLocation(
std::list<SequenceLocation>& result)
{
struct AsSeqLocation {
return SequenceLocation(seq, left, right);
}
};
- copySelectedTracks(result, AsSeqLocation::formatter);
+ return copySelectedTracks(result, AsSeqLocation::formatter);
}
//! copy sequence from selected tracks as plain sequences
-void GlSeqBrowser::copySelectedTracksAsString(std::string& copy_buffer)
+size_t GlSeqBrowser::copySelectedTracksAsString(std::string& copy_buffer)
{
std::list<string> result;
struct AsString {
int right)
{
stringstream s;
- s << seq->subseq(left, right-left+1) << std::endl;
+ s << seq->subseq(left, right-left+1);
return s.str();
}
};
- copySelectedTracks(result, AsString::formatter);
+ size_t base_pairs_copied = copySelectedTracks(result, AsString::formatter);
// I wish there was some way to use for_each and bind here
for (list<string>::iterator result_i = result.begin();
result_i != result.end();
{
copy_buffer.append(*result_i);
}
-
+ return base_pairs_copied;
}
void GlSeqBrowser::centerOnPath(const vector<int>& paths)
back_inserter(selected));
if (not s.reversed) {
+ // forward
if (selected_paths.size() == 0 or selected.size() > 0) {
glColor4f(1.0, 0.0, 0.0, 1.0);
} else {
glColor4f(1.0, 0.7, 0.7, 0.4);
}
} else {
+ // reverse
if (selected_paths.size() == 0 or selected.size() > 0) {
glColor4f(0.0, 0.0, 1.0, 1.0);
} else {