void GlSeqBrowser::selectRegion(int top, int left, int bottom, int right)
{
- GLfloat x_scale = cur_ortho.width()/((float)viewport_size.x);
- GLfloat y_scale = cur_ortho.height()/((float)viewport_size.y);
- GLfloat x_left = cur_ortho.left + (left*x_scale);
- GLfloat x_right = cur_ortho.left + (right * x_scale);
+ GLfloat x_left = viewportXtoWorldX(left);
+ GLfloat x_right = viewportXtoWorldX(right);cur_ortho.left;
if (top > bottom) {
// woah, someone gave us a rectangle with the origin in the lower left
top = temp;
}
// swap the orientation of canvas coordinates
- GLfloat y_top = cur_ortho.top-(bottom*y_scale);
- GLfloat y_bottom = cur_ortho.top - top * y_scale;
+ GLfloat y_top = viewportYtoWorldY(bottom);
+ GLfloat y_bottom = viewportYtoWorldY(top);
selectedRegion = rect<float>(y_top, x_left, y_bottom, x_right);
// hopefully this will make a buffer big enough to receive
processSelection(hits, selectBuf, select_buf_size, selectedRegion);
}
+void GlSeqBrowser::clearSelection()
+{
+ selected_paths.clear();
+ selected_tracks.clear();
+ selectedMode = false;
+}
+
float GlSeqBrowser::border() const
{
return border_width;
return zoom_level;
}
-void GlSeqBrowser::setColorMapper(boost::shared_ptr<AnnotationColors> cm)
+void GlSeqBrowser::setColorMapper(AnnotationColorsRef cm)
{
color_mapper = cm;
}
-const AnnotationColors& GlSeqBrowser::colorMapper()
+const AnnotationColorsRef GlSeqBrowser::colorMapper()
{
- return *color_mapper;
+ return color_mapper;
}
void GlSeqBrowser::clear()
void GlSeqBrowser::push_sequence(const Sequence& s)
{
- boost::shared_ptr<Sequence> seq_copy(new Sequence(s));
- GlSequence gs(seq_copy, color_mapper);
+ GlSequenceRef gs(new GlSequence(s, color_mapper));
push_sequence(gs);
}
-
-void GlSeqBrowser::push_sequence(boost::shared_ptr<Sequence> s)
+void GlSeqBrowser::push_sequence(SequenceRef s)
{
- boost::shared_ptr<GlSequence> gs(new GlSequence(s, color_mapper));
+ GlSequenceRef gs(new GlSequence(*s, color_mapper));
push_sequence(gs);
}
void GlSeqBrowser::push_sequence(GlSequence gs)
{
- boost::shared_ptr<GlSequence> new_gs(new GlSequence(gs));
+ GlSequenceRef new_gs(new GlSequence(gs));
push_sequence(new_gs);
}
-void GlSeqBrowser::push_sequence(boost::shared_ptr<GlSequence> gs)
+void GlSeqBrowser::push_sequence(GlSequenceRef gs)
{
+ ColorRef default_color(GlSequence::default_gene_color());
+ GlSequenceRef new_gs(new GlSequence(gs));
+ new_gs->update_annotation_draw_function("gene", draw_narrow_track, default_color);
+ // mark where the sequence is
+ new_gs->add_annotations_for_defined_sequence(draw_summarized_track);
+
clear_links();
- track_container.push_back(gs);
+ track_container.push_back(new_gs);
update_layout();
if (track_container.size() > 1)
path_segments.push_back(pair_segment_map());
}
-const std::vector<boost::shared_ptr<GlSequence> >& GlSeqBrowser::sequences() const
+const std::vector<GlSequenceRef >& GlSeqBrowser::sequences() const
{
return track_container;
}
//! copy sequence from selected track using formating function
template<class Item>
size_t GlSeqBrowser::copySelectedTracks(std::list<Item>& result,
- Item (*formatter)(boost::shared_ptr<Sequence> s,
- int left,
- int right))
+ Item (*formatter)(const Sequence& s, int left, int right))
{
size_t base_pairs_copied = 0;
result.clear();
<< endl;
} else {
// we should be safe
- boost::shared_ptr<Sequence> seq = track_container[track_index]->sequence();
+ Sequence seq(*track_container[track_index]);
result.push_back(formatter(seq, track_i->left, track_i->right));
base_pairs_copied += max(track_i->right-track_i->left, 0);
}
{
std::list<std::string> result;
struct AsFasta {
- static string formatter(boost::shared_ptr<Sequence> seq,
- int left,
- int right)
+ static string formatter(const Sequence& seq, int left, int right)
{
stringstream s;
- s << ">" << seq->get_fasta_header()
+ s << ">" << seq.get_fasta_header()
<< "|" << "subregion=" << left << "-" << right+1
<< std::endl
- << seq->subseq(left, right-left+1) << std::endl;
+ << seq.subseq(left, right-left+1) << std::endl;
return s.str();
}
};
size_t GlSeqBrowser::copySelectedTracksAsSequences(std::list<Sequence>& result)
{
struct AsSequence {
- static Sequence formatter(boost::shared_ptr<Sequence> seq,
+ static Sequence formatter(const Sequence& seq,
int left,
int right)
{
- return seq->subseq(left, right-left+1);
+ return seq.subseq(left, right-left+1);
}
};
return copySelectedTracks(result, AsSequence::formatter);
std::list<SequenceLocation>& result)
{
struct AsSeqLocation {
- static SequenceLocation formatter(boost::shared_ptr<Sequence> seq,
+ static SequenceLocation formatter(const Sequence& seq,
int left,
int right)
{
{
std::list<string> result;
struct AsString {
- static string formatter(boost::shared_ptr<Sequence> seq,
+ static string formatter(const Sequence& seq,
int left,
int right)
{
stringstream s;
- s << seq->subseq(left, right-left+1);
+ s << seq.subseq(left, right-left+1);
return s.str();
}
};
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 {