X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=alg%2Fglseqbrowser.hpp;h=f88caf5e7e5bb57e4dea0b1ff56f20d4f8c21408;hb=1498ea34399110d081cd06cb8eefb8950e2312c7;hp=9b2e16f26572bf4d1d55afdb0113b226cba822a9;hpb=48ddb0a496be84b7f6c7d3dc3205bd0ffd11ab26;p=mussa.git diff --git a/alg/glseqbrowser.hpp b/alg/glseqbrowser.hpp index 9b2e16f..f88caf5 100644 --- a/alg/glseqbrowser.hpp +++ b/alg/glseqbrowser.hpp @@ -28,6 +28,8 @@ public: //! select a region (using canvas coordinates) void selectRegion(int top, int left, int bottom, int right); + //! turn off selection + void clearSelection(); //! border size float border() const; @@ -36,6 +38,8 @@ public: float left() const; //! max world right coordinate float right() const; + // return how wide is a pixel in world coordinates? + float get_pixel_width() const; void setViewportCenter(float x); //! return world coordinate of the left side of the viewport @@ -48,6 +52,16 @@ public: float viewportHeight() const; //! return width of the viewport in world coordinates float viewportWidth() const; + + //! return viewport height in pixels + int viewportPixelHeight() const; + //! return viewport width in pixels + int viewportPixelWidth() const; + + //! convert x axis from display to world coordinates + float viewportXtoWorldX(int x); + //! convert y axis from display to world coordinates + float viewportYtoWorldY(int y); //! zoom out far enough to show the full size of the sequence double zoomOut(); @@ -62,7 +76,7 @@ public: void centerOnPath(const std::vector&); void setColorMapper(boost::shared_ptr cm); - const AnnotationColors& colorMapper(); + const AnnotationColorsRef colorMapper(); //! clear our tracks and connections void clear(); @@ -97,19 +111,23 @@ public: //! copy sequence from selected track using formating function template - void copySelectedTracks(std::list& result, - Item (*format_track)(boost::shared_ptr s, - int left, - int right)); + size_t copySelectedTracks(std::list& result, + Item (*format_track)(const Sequence& s, int left, int right)); //! copy sequence from selected tracks as FASTA sequences - void copySelectedTracksAsFasta(std::string& copy_buffer); + /*! \return number of base pairs copied + */ + size_t copySelectedTracksAsFasta(std::string& copy_buffer); //! copy sequence from selected tracks as a list of sequences - void copySelectedTracksAsSequences(std::list& result); + /*! \return number of base pairs copied + */ + size_t copySelectedTracksAsSequences(std::list& result); //! copy sequence from selected tracks as plain sequences - void copySelectedTracksAsString(std::string& copy_buffer); + /*! \return number of base pairs copied + */ + size_t copySelectedTracksAsString(std::string& copy_buffer); //! copy tracks as a sequence and its coordinates - void copySelectedTracksAsSeqLocation(std::list& result); + size_t copySelectedTracksAsSeqLocation(std::list& result); //! Provide a logical name for a type discriminator for our glName stack @@ -197,13 +215,13 @@ private: //! the center of our current viewport (world coord) (used for scrollbar) float viewport_center; double zoom_level; - boost::shared_ptr color_mapper; - //! container of all the GlSequences loaded into our scene - std::vector > track_container; + AnnotationColorsRef color_mapper; //! counter for each path added to us via connect int pathid; protected: + //! container of all the GlSequences loaded into our scene + std::vector track_container; //! where to draw our box (world coordinates) rect selectedRegion; //! true if we have a selection @@ -214,4 +232,15 @@ protected: std::list selected_tracks; typedef std::list::iterator selected_track_iterator; }; + +inline float GlSeqBrowser::viewportXtoWorldX(int x) { + GLfloat x_scale = cur_ortho.width()/((float)viewport_size.x); + return (cur_ortho.left + (x * x_scale)); +} + +inline float GlSeqBrowser::viewportYtoWorldY(int y) { + GLfloat y_scale = cur_ortho.height()/((float)viewport_size.y); + return cur_ortho.top-(y * y_scale); +} + #endif