From: martinahansen Date: Thu, 18 Mar 2010 15:11:41 +0000 (+0000) Subject: added collapsable tracks to BGB X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=cf49b97bfd296c8a08b72392a04a2b4f03d23435;p=biopieces.git added collapsable tracks to BGB git-svn-id: http://biopieces.googlecode.com/svn/trunk@933 74ccb610-7750-0410-82ae-013aeee3265d --- diff --git a/code_perl/Maasha/BGB/Draw.pm b/code_perl/Maasha/BGB/Draw.pm index 3034974..7cfe938 100644 --- a/code_perl/Maasha/BGB/Draw.pm +++ b/code_perl/Maasha/BGB/Draw.pm @@ -114,6 +114,12 @@ sub draw_feature $cr->set_font_size( $feature->{ 'font_size' } ); $cr->show_text( $feature->{ 'txt' } ); } + elsif ( $feature->{ 'type' } eq 'track_name' ) + { + $cr->move_to( $feature->{ 'x1' }, $feature->{ 'y1' } ); + $cr->set_font_size( $feature->{ 'font_size' } ); + $cr->show_text( $feature->{ 'txt' } ); + } #$cr->stroke; } diff --git a/code_perl/Maasha/BGB/Track.pm b/code_perl/Maasha/BGB/Track.pm index c43f124..e007f68 100644 --- a/code_perl/Maasha/BGB/Track.pm +++ b/code_perl/Maasha/BGB/Track.pm @@ -173,38 +173,50 @@ sub track_feature # Returns a list. - my ( $data_wig, $data_kiss, $track_name, $features ); + my ( $data_wig, $data_kiss, $track_pretty, $track_name, $features, $color ); $track_name = ( split "/", $track )[ -1 ]; - $track_name =~ s/^\d+_//; - $track_name =~ s/_/ /g; + + $track_pretty = $track_name; + $track_pretty =~ s/^\d+_//; + $track_pretty =~ s/_/ /g; + + if ( track_hide( $cookie, $track_name ) ) { + $color = [ 0.6, 0.6, 0.6 ]; + } else { + $color = $cookie->{ 'SEQ_COLOR' }; + } push @{ $features }, { - type => 'text', - txt => $track_name, + type => 'track_name', + track => $track_name, + txt => $track_pretty, font_size => $cookie->{ 'SEQ_FONT_SIZE' }, - color => $cookie->{ 'SEQ_COLOR' }, + color => $color, x1 => 0, y1 => $cookie->{ 'TRACK_OFFSET' }, }; $cookie->{ 'TRACK_OFFSET' } += 10; - if ( -f "$track/track_data.wig" ) + if ( not track_hide( $cookie, $track_name ) ) { - $data_wig = Maasha::BGB::Wiggle::wiggle_retrieve( "$track/track_data.wig", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } ); + if ( -f "$track/track_data.wig" ) + { + $data_wig = Maasha::BGB::Wiggle::wiggle_retrieve( "$track/track_data.wig", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } ); - push @{ $features }, track_wiggle( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_wig ); - } - elsif ( -f "$track/track_data.kiss" ) - { - $data_kiss = Maasha::KISS::kiss_retrieve( "$track/track_data.kiss", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } ); + push @{ $features }, track_wiggle( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_wig ); + } + elsif ( -f "$track/track_data.kiss" ) + { + $data_kiss = Maasha::KISS::kiss_retrieve( "$track/track_data.kiss", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } ); - push @{ $features }, track_linear( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_kiss ); - } - else - { - Maasha::Common::error( "Unknown track data type" ); + push @{ $features }, track_linear( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_kiss ); + } + else + { + Maasha::Common::error( "Unknown track data type" ); + } } return wantarray ? @{ $features } : $features; @@ -991,6 +1003,35 @@ sub max_track } +sub track_hide +{ + # Martin A. Hansen, March 2010. + + # Check cookie information to see if a given track + # should be hidden or not. + + my ( $cookie, # cookie hash + $track, # track name + ) = @_; + + # Returns boolean. + + my ( $clade, $genome, $assembly ); + + $clade = $cookie->{ 'CLADE' }; + $genome = $cookie->{ 'GENOME' }; + $assembly = $cookie->{ 'ASSEMBLY' }; + + if ( exists $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } and + $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } ) + { + return 1; + } + + return 0; +} + + # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 1; diff --git a/www/index.cgi b/www/index.cgi index fc1390f..85fed67 100755 --- a/www/index.cgi +++ b/www/index.cgi @@ -103,13 +103,13 @@ sub cookie_default } } - $cookie->{ 'SCRIPT' } = Maasha::Common::get_scriptname(); - $cookie->{ 'DATA_DIR' } = "Data"; - $cookie->{ 'SESSION_DIR' } = "Sessions"; - $cookie->{ 'LIST_PAGES' } = [ qw( clade genome assembly contig browse ) ]; - $cookie->{ 'USER' } = $cgi->param( 'user' ); - $cookie->{ 'PASSWORD' } = $cgi->param( 'password' ); - $cookie->{ 'SESSION_ID' } = $cgi->param( 'session_id' ); + $cookie->{ 'SCRIPT' } = Maasha::Common::get_scriptname(); + $cookie->{ 'DATA_DIR' } = "Data"; + $cookie->{ 'SESSION_DIR' } = "Sessions"; + $cookie->{ 'LIST_PAGES' } = [ qw( clade genome assembly contig browse ) ]; + $cookie->{ 'USER' } = $cgi->param( 'user' ); + $cookie->{ 'PASSWORD' } = $cgi->param( 'password' ); + $cookie->{ 'SESSION_ID' } = $cgi->param( 'session_id' ); $session = session_restore( $cookie ); @@ -138,17 +138,19 @@ sub cookie_default $cookie->{ 'PAGE' } = $cgi->param( 'page' ) || 'login'; } + $cookie->{ 'TRACK_STATUS' } = $session->{ 'TRACK_STATUS' }; $cookie->{ 'CLADE' } = $cgi->param( 'clade' ) || $session->{ 'CLADE' }; $cookie->{ 'GENOME' } = $cgi->param( 'genome' ) || $session->{ 'GENOME' }; $cookie->{ 'ASSEMBLY' } = $cgi->param( 'assembly' ) || $session->{ 'ASSEMBLY' }; $cookie->{ 'CONTIG' } = $cgi->param( 'contig' ) || $session->{ 'CONTIG' }; $cookie->{ 'Q_ID' } = $cgi->param( 'q_id' ) || $session->{ 'Q_ID' }; $cookie->{ 'NAV_START' } ||= defined $cgi->param( 'nav_start' ) ? $cgi->param( 'nav_start' ) : $session->{ 'NAV_START' }; - $cookie->{ 'NAV_END' } ||= $cgi->param( 'nav_end' ) || $session->{ 'NAV_END' }; + $cookie->{ 'NAV_END' } ||= defined $cgi->param( 'nav_end' ) ? $cgi->param( 'nav_end' ) : $session->{ 'NAV_END' }; $cookie->{ 'NAV_CENTER' } = $cgi->param( 'nav_center' ); $cookie->{ 'S_BEG' } = $cgi->param( 's_beg' ) || $session->{ 'S_BEG' }; $cookie->{ 'S_END' } = $cgi->param( 's_end' ) || $session->{ 'S_END' }; $cookie->{ 'STRAND' } = $cgi->param( 'strand' ) || $session->{ 'STRAND' }; + $cookie->{ 'TRACK' } = $cgi->param( 'track' ); $cookie->{ 'ZOOM_IN1' } = $cgi->param( 'zoom_in1' ); $cookie->{ 'ZOOM_IN2' } = $cgi->param( 'zoom_in2' ); $cookie->{ 'ZOOM_IN3' } = $cgi->param( 'zoom_in3' ); @@ -173,7 +175,7 @@ sub cookie_default $cookie->{ 'SEQ_COLOR' } = [ 0, 0, 0, ]; $cookie->{ 'FEAT_WIDTH' } = 5; $cookie->{ 'FEAT_COLOR' } = [ 0, 0, 0 ]; - $cookie->{ 'FEAT_MAX' } = 5000; # TODO: Reduntant? +# $cookie->{ 'FEAT_MAX' } = 5000; # TODO: Reduntant? # $cookie->{ 'LIST_USER' } = Maasha::BGB::Track::list_users(); # TODO: Redundant? @@ -191,6 +193,7 @@ sub cookie_default cookie_zoom( $cookie ); cookie_move( $cookie ); cookie_center( $cookie ); + cookie_track_status( $cookie ); } } @@ -280,6 +283,8 @@ sub session_store $new_session->{ 'STRAND' } = $cookie->{ 'STRAND' }; } + $new_session->{ 'TRACK_STATUS' } = $cookie->{ 'TRACK_STATUS' }; + Maasha::BGB::Session::session_store( "$cookie->{ 'SESSION_DIR' }/$cookie->{ 'USER' }/session.json", $new_session ); } } @@ -495,7 +500,7 @@ sub cookie_move sub cookie_center { - # Martin A. Hansen, March 2010 + # Martin A. Hansen, March 2010. # Adjust the cookie values for NAV_START and NAV_END based # on cookie CENTER value if defined. @@ -521,6 +526,35 @@ sub cookie_center } +sub cookie_track_status +{ + # Martin A. Hansen, March 2010. + + # + + my ( $cookie, # cookie hash + ) = @_; + + # Returns nothing. + + my ( $clade, $genome, $assembly, $track ); + + $clade = $cookie->{ 'CLADE' }; + $genome = $cookie->{ 'GENOME' }; + $assembly = $cookie->{ 'ASSEMBLY' }; + $track = $cookie->{ 'TRACK' }; + + if ( $track ) + { + if ( $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } ) { + $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } = 0; + } else { + $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } = 1; + } + } +} + + # >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PAGES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -1148,23 +1182,68 @@ sub section_browse { next if $elem->{ 'type' } =~ /text|wiggle/; - push @img, Maasha::XHTML::area( - href => join( "&", "$cookie->{ 'SCRIPT' }?page=export", - "session_id=$cookie->{ 'SESSION_ID' }", - "user=$cookie->{ 'USER' }", - "clade=$cookie->{ 'CLADE' }", - "genome=$cookie->{ 'GENOME' }", - "assembly=$cookie->{ 'ASSEMBLY' }", - "contig=$cookie->{ 'CONTIG' }", - "s_beg=$elem->{ 's_beg' }", - "s_end=$elem->{ 's_end' }", - "strand=$elem->{ 'strand' }", - "q_id=$elem->{ 'q_id' }", - ), - shape => 'rect', - coords => "$elem->{ x1 }, $elem->{ y1 }, $elem->{ x2 }, $elem->{ y2 }", - title => "$elem->{ 'title' }", - ); + if ( $elem->{ 'type' } eq 'track_name' ) + { + $x1 = $elem->{ 'x1' }; + $y1 = $elem->{ 'y1' } - 10; + $x2 = $elem->{ 'x1' } + 6 * length $elem->{ 'txt' }; + $y2 = $elem->{ 'y1' }; + + if ( Maasha::BGB::Track::track_hide( $cookie, $elem->{ 'track' } ) ) + { + push @img, Maasha::XHTML::area( + href => join( "&", "$cookie->{ 'SCRIPT' }?page=browse", + "session_id=$cookie->{ 'SESSION_ID' }", + "user=$cookie->{ 'USER' }", + "clade=$cookie->{ 'CLADE' }", + "genome=$cookie->{ 'GENOME' }", + "assembly=$cookie->{ 'ASSEMBLY' }", + "contig=$cookie->{ 'CONTIG' }", + "track=$elem->{ 'track' }", + ), + shape => 'rect', + coords => "$x1, $y1, $x2, $y2", + title => qq(Show track: $elem->{ 'txt' }), + ); + } + else + { + push @img, Maasha::XHTML::area( + href => join( "&", "$cookie->{ 'SCRIPT' }?page=browse", + "session_id=$cookie->{ 'SESSION_ID' }", + "user=$cookie->{ 'USER' }", + "clade=$cookie->{ 'CLADE' }", + "genome=$cookie->{ 'GENOME' }", + "assembly=$cookie->{ 'ASSEMBLY' }", + "contig=$cookie->{ 'CONTIG' }", + "track=$elem->{ 'track' }", + ), + shape => 'rect', + coords => "$x1, $y1, $x2, $y2", + title => qq(Hide track: $elem->{ 'txt' }), + ); + } + } + else + { + push @img, Maasha::XHTML::area( + href => join( "&", "$cookie->{ 'SCRIPT' }?page=export", + "session_id=$cookie->{ 'SESSION_ID' }", + "user=$cookie->{ 'USER' }", + "clade=$cookie->{ 'CLADE' }", + "genome=$cookie->{ 'GENOME' }", + "assembly=$cookie->{ 'ASSEMBLY' }", + "contig=$cookie->{ 'CONTIG' }", + "s_beg=$elem->{ 's_beg' }", + "s_end=$elem->{ 's_end' }", + "strand=$elem->{ 'strand' }", + "q_id=$elem->{ 'q_id' }", + ), + shape => 'rect', + coords => "$elem->{ x1 }, $elem->{ y1 }, $elem->{ x2 }, $elem->{ y2 }", + title => "$elem->{ 'title' }", + ); + } } }