llfloaterreleasemsg.cpp

Go to the documentation of this file.
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 }

Generated on Fri May 16 08:33:30 2008 for SecondLife by  doxygen 1.5.5