void CodeRevision::draw() { //assume we are a scale of 1 glPushMatrix(); glPushName(_id); UIButton rev; switch ( _status ) { case rev_PARSED : rev.setCols( UI_BASE, Color4D( 1.0,0.85,0.85,1.0 ), Color4D(0,0,0,1.0)); break; case rev_TYPED : rev.setCols( UI_BASE, Color4D( 1.0,0.92,0.85,1.0 ), Color4D(0,0,0,1.0)); break; case rev_COMPILED : rev.setCols( UI_BASE, Color4D( 1.0,1.0,0.85,1.0 ), Color4D(0,0,0,1.0)); break; case rev_READY : case rev_RUNNING : rev.setCols( UI_BASE, Color4D( 0.85,1.0,0.85,1.0 ), Color4D(0,0,0,1.0)); break; case rev_EDITED : rev.setCols( UI_BASE, Color4D( 0.9,0.9,1.0,1.0 ), Color4D(0,0,0,1.0)); break; default : rev.setCols( UI_BASE, Color4D( 1.0,1.0,1.0,1.0 ), Color4D(0,0,0,1.0)); break; } rev.seth( 1.0 ); rev.setLabel( (char*)_buffer->filename().c_str() ); rev.fitXLabel( 0.75 ); rev.draw(0.75); if ( _selected ) { _killButton->moveto( rev.left()-_killButton->w(), rev.top() - 0.5* ( rev.h()-_killButton->h() ) ); _killButton->drawNamed(0.75); _sporkButton->moveto( rev.right(), rev.top() - 0.5* ( rev.h()-_sporkButton->h() ) ); _sporkButton->drawNamed( 0.75 ); } glTranslated ( 0, -1.0 , 0 ); rev.seth ( ( size() - 1 ) ); glColor4d(0.8, 1.0, 0.9, 0.3); glBegin(GL_POLYGON); rev.roundVerts(); glEnd(); glTranslated ( 1.0, 0 , 0 ); for ( int i=0; i < _shreds.size() ; i++ ) { ShredInstance * s = _shreds[i]; if ( s->stat == NULL ) { EM_log( CK_LOG_WARNING, "CodeRevision::draw: (%s) shred stat is NULL (%d)!", (char*)_buffer->filename().c_str(), _shreds[i]->procID); s->stat = Chuck_Stats::instance()->get_shred( s->procID ); if ( !s->stat ) { EM_log( CK_LOG_WARNING, "CodeRevision::draw: adding as dead(%d)!", (char*)_buffer->filename().c_str(), _shreds[i]->procID); s->stat = new Shred_Stat(); s->stat->state = shred_KILLED; } if ( s->stat && !s->stat->data ) { AudicleFaceShredder::initialize_stat_data ( s->stat ); } } else { s->draw(); glTranslated ( 0, -1.0 , 0 ); } } glTranslated ( -1.0, 0, 0); glPopName(); glPopMatrix(); }