00001 00032 #include "llviewerprecompiledheaders.h" 00033 00034 #include "lluictrlfactory.h" 00035 #include "llviewerwindow.h" 00036 #include "llviewercontrol.h" 00037 #include "llfloaterreleasemsg.h" 00038 #include "llagent.h" 00039 #include "llviewerregion.h" 00040 #include "llappviewer.h" 00041 00042 extern LLAgent gAgent; 00043 00044 00045 LLFloaterReleaseMsg* LLFloaterReleaseMsg::sInstance = 0; 00046 bool LLFloaterReleaseMsg::sDisplayMessage = false; 00047 00049 // 00050 LLFloaterReleaseMsg* LLFloaterReleaseMsg::getInstance() 00051 { 00052 if ( ! sInstance ) 00053 sInstance = new LLFloaterReleaseMsg; 00054 00055 return sInstance; 00056 } 00057 00059 // 00060 LLFloaterReleaseMsg::LLFloaterReleaseMsg() 00061 : LLFloater( "Release Message Floater" ) 00062 00063 , 00064 mWebBrowser( 0 ) 00065 { 00066 // create floater from its XML definition 00067 LLUICtrlFactory::getInstance()->buildFloater( this, "floater_sim_release_message.xml" ); 00068 00069 mTitleBase = getTitle(); 00070 00071 // reposition floater from saved settings 00072 LLRect rect = gSavedSettings.getRect( "HtmlReleaseMessage" ); 00073 reshape( rect.getWidth(), rect.getHeight(), FALSE ); 00074 setRect( rect ); 00075 00076 mWebBrowser = getChild<LLWebBrowserCtrl>("release_message_floater_browser" ); 00077 if ( mWebBrowser ) 00078 { 00079 // observe browser events 00080 mWebBrowser->addObserver( this ); 00081 00082 // make links open in external browser 00083 mWebBrowser->setOpenInExternalBrowser( true ); 00084 00085 // don't automatically open secondlife links since we want to catch 00086 // special ones that do other stuff (like open F1 Help) 00087 //mWebBrowser->setOpenSecondLifeLinksInMap( false ); 00088 } 00089 00090 childSetAction("close_btn", onClickClose, this); 00091 setDefaultBtn("close_btn"); 00092 } 00093 00095 // 00096 LLFloaterReleaseMsg::~LLFloaterReleaseMsg() 00097 { 00098 // stop observing browser events 00099 if ( mWebBrowser ) 00100 mWebBrowser->remObserver( this ); 00101 00102 // save position of floater 00103 gSavedSettings.setRect( "HtmlReleaseMessage", getRect() ); 00104 00105 sInstance = 0; 00106 } 00107 00109 // 00110 void LLFloaterReleaseMsg::show() 00111 { 00112 00113 std::string url = gAgent.getRegion()->getCapability("ServerReleaseNotes"); 00114 00115 if (url.empty()) return; 00116 00117 llinfos << "Release message url: " << url << llendl; 00118 00119 if (!sInstance) 00120 { 00121 sInstance = new LLFloaterReleaseMsg(); 00122 sInstance->center(); 00123 } 00124 00125 sInstance->setTitle(sInstance->mTitleBase + " " + gLastVersionChannel); 00126 sInstance->open(); 00127 00128 // navigate to the URL 00129 if ( sInstance->mWebBrowser ) 00130 sInstance->mWebBrowser->navigateTo( url ); 00131 00132 // make floater appear 00133 sInstance->setVisibleAndFrontmost(); 00134 } 00135 00136 00138 // 00139 void LLFloaterReleaseMsg::onClickClose( void* data ) 00140 { 00141 LLFloaterReleaseMsg* self = ( LLFloaterReleaseMsg* )data; 00142 00143 self->setVisible( false ); 00144 } 00145 00146 00148 // 00149 00150 // return true if it's a new version and we should display a notification 00151 bool LLFloaterReleaseMsg::checkVersion(const LLString& version_channel) 00152 { 00153 bool res = false; 00154 if (gLastVersionChannel != version_channel) 00155 { 00156 res = !gLastVersionChannel.empty(); // don't show message on initial login 00157 gLastVersionChannel = version_channel; 00158 } 00159 return res; 00160 } 00161 00162 void LLFloaterReleaseMsg::displayMessage(const LLString& version_channel) 00163 { 00164 //if we have the capability already, display the url, otherwise wait on it 00165 if (gAgent.getRegion()->getCapability("ServerReleaseNotes").empty()) 00166 { 00167 sDisplayMessage = true; 00168 } 00169 else 00170 { 00171 sDisplayMessage = false; 00172 show(); 00173 } 00174 }