00001 #include "../borqueror.h" 00002 00003 void PlanetImageObject::Draw( void ) 00004 { 00005 XBox::Draw(); 00006 00007 XRect r( 0 , 0 , -1 , -1 ); 00008 SDL_Surface *planets = Graf::Img( id , &r ); 00009 00010 XRect src( r.h * atPlanet , 0 , r.h , r.h ); 00011 00012 Graf::SDL_StretchBlt( planets , &src , GetGDI() , this ); 00013 } 00014 00016 PlanetInfoDlg::PlanetInfoDlg( StarSystem *&aSs , Window *aParent ) 00017 : ss( aSs ) , BqBase( ePlanetInfoDlg , aParent ) 00018 { 00019 f = Load( "PlanetInfoDlg" , ePlanetInfoDlg ); 00020 } 00021 00022 PlanetInfoDlg::~PlanetInfoDlg( void ) 00023 { 00024 } 00025 00026 const bool PlanetInfoDlg::SetupWindow( const Message &aMsg ) 00027 { 00028 BqBase::SetupWindow( aMsg ); 00029 00030 return true; 00031 } 00032 00033 void PlanetInfoDlg::SetupInfo( Planet *aPl ) 00034 { 00035 if( f ) 00036 { 00037 PlanetImageObject *pio = dynamic_cast<PlanetImageObject *>( f->GetArsObject( 10 ) ); 00038 pio->SetImageId( Graf::LoadImg( "Planets" , "Planets" , "@Images" ) ); 00039 pio->SetPlanetIndex( aPl->planetType ); 00040 map<int,PlanetInfo *>::iterator pos = Parameters::plIndice.find( aPl->planetType ); 00041 if( pos == Parameters::plIndice.end() ) 00042 { 00043 for( int i = 20 ; i < 41 ; 20 ) 00044 f->GetArsObject( i )->SetWndText( "" ); 00045 } 00046 else 00047 { 00048 char temp[128]; 00049 int i = 20; 00050 f->GetArsObject( 20 )->SetWndText( string( " " ) + aPl->planetName ); 00051 f->GetArsObject( 21 )->SetWndText( string( " " ) + pos->second->type ); 00052 f->GetArsObject( 22 )->SetWndText( string( " " ) + pos->second->surface ); 00053 f->GetArsObject( 23 )->SetWndText( string( " " ) + pos->second->athmosphere ); 00054 00055 sprintf( temp , " between %d and %d" , pos->second->sizeMin , pos->second->sizeMax ); f->GetArsObject( 24 )->SetWndText( temp ); 00056 sprintf( temp , " between %d and %d million years" , pos->second->ageMin , pos->second->ageMax ); f->GetArsObject( 25 )->SetWndText( temp ); 00057 sprintf( temp , " %4.1f" , aPl->GetTotalHumidity() ); f->GetArsObject( 26 )->SetWndText( temp ); 00058 sprintf( temp , " %4.1f" , aPl->GetTotalPressure() ); f->GetArsObject( 27 )->SetWndText( temp ); 00059 sprintf( temp , " %4.1f" , aPl->GetTotalSurfaceTemperature() ); f->GetArsObject( 28 )->SetWndText( temp ); 00060 sprintf( temp , " %5.2f" , aPl->GetSurfaceGravity() ); f->GetArsObject( 29 )->SetWndText( temp ); 00061 00062 sprintf( temp , " %d" , (int)aPl->GetOre() ); f->GetArsObject( 30 )->SetWndText( temp ); 00063 sprintf( temp , " %d" , (int)aPl->GetDeuterium() ); f->GetArsObject( 31 )->SetWndText( temp ); 00064 sprintf( temp , " %d" , (int)aPl->GetLithium() ); f->GetArsObject( 32 )->SetWndText( temp ); 00065 sprintf( temp , " %d" , (int)aPl->GetEnergy() ); f->GetArsObject( 33 )->SetWndText( temp ); 00066 sprintf( temp , " %d" , (int)aPl->GetSunFactor() ); f->GetArsObject( 34 )->SetWndText( temp ); 00067 f->GetArsObject( 35 )->SetWndText( string( " " ) + pos->second->lifeForm ); 00068 sprintf( temp , " %d" , (int)aPl->GetSoil() ); f->GetArsObject( 36 )->SetWndText( temp ); 00069 sprintf( temp , " %d" , (int)aPl->GetFlora() ); f->GetArsObject( 37 )->SetWndText( temp ); 00070 sprintf( temp , " %d" , (int)aPl->GetFauna() ); f->GetArsObject( 38 )->SetWndText( temp ); 00071 sprintf( temp , " %d" , (int)aPl->GetWater() ); f->GetArsObject( 39 )->SetWndText( temp ); 00072 XLabel *lbl = dynamic_cast<XLabel *>( f->GetArsObject( 40 ) ); 00073 lbl->SetWndText( "" ); 00074 if( !pos->second->Description.empty() ) 00075 lbl->SetWndText( string( " " ) + pos->second->Description + "\n\n" ); 00076 if( !pos->second->example.empty() ) 00077 lbl->AppendWindowText( string( "Examples are:\n" ) + pos->second->example ); 00078 } 00079 } 00080 } 00081 00082 const bool PlanetInfoDlg::MainLoop( void ) 00083 { 00084 SetupDialog( "PlanetInfoDlg" ); 00085 ans = true; 00086 BqBase::MainLoop(); 00087 00088 return ans; 00089 } 00090 00091 const bool PlanetInfoDlg::evMouseLClick( const CtrlMessage &msg ) 00092 { 00093 BqBase::evMouseLClick( msg ); 00094 00095 if( isDisplayed ) 00096 if( ((Window *)msg.source)->GetId() == 1 ) 00097 isDisplayed= false; 00098 else if( ((Window *)msg.source)->GetId() == 2 ) 00099 { 00100 vector<Planet *>::iterator pos = find_if( ss->begin() , ss->end() , bind2nd( mem_fun( &Planet::ClickedOn ) , &ArsApplication::mousexy ) ); 00101 if( pos != ss->end() ) 00102 { 00103 SetupInfo( *pos ); 00104 f->Draw(); 00105 } 00106 else 00107 ans = isDisplayed= false; 00108 } 00109 00110 return true; 00111 }