llpanelweb.cpp

Go to the documentation of this file.
00001 
00032 #include "llviewerprecompiledheaders.h"
00033 
00034 // file include
00035 #include "llpanelweb.h"
00036 
00037 // linden library includes
00038 #include "llerror.h"
00039 #include "llrect.h"
00040 #include "llstring.h"
00041 
00042 // project includes
00043 #include "llbutton.h"
00044 #include "llcheckboxctrl.h"
00045 #include "lllineeditor.h"
00046 #include "llui.h"
00047 #include "lluictrlfactory.h"
00048 #include "llviewercontrol.h"
00049 #include "lluictrlfactory.h"
00050 #include "llviewerwindow.h"
00051 #include "llmediamanager.h"
00052 
00053 
00054 // helper functions for getting/freeing the web browser media
00055 // if creating/destroying these is too slow, we'll need to create
00056 // a static member and update all our static callbacks
00057 LLMediaBase *get_web_media()
00058 {
00059         LLMediaBase *media_source;
00060         LLMediaManager *mgr = LLMediaManager::getInstance();
00061         
00062         if (!mgr)
00063         {
00064                 llwarns << "cannot get media manager" << llendl;
00065                 return NULL;
00066         }
00067 
00068         media_source = mgr->createSourceFromMimeType("http", "text/html" );
00069         if ( !media_source )
00070         {
00071                 llwarns << "media source create failed " << llendl;
00072                 return NULL;
00073         }
00074 
00075         return media_source;
00076 }
00077 
00078 void free_web_media(LLMediaBase *media_source)
00079 {
00080         if (!media_source)
00081                 return;
00082         
00083         LLMediaManager *mgr = LLMediaManager::getInstance();
00084         if (!mgr)
00085         {
00086                 llwarns << "cannot get media manager" << llendl;
00087                 return;
00088         }
00089 
00090         mgr->destroySource(media_source);
00091 }
00092 
00093 LLPanelWeb::LLPanelWeb()
00094 {
00095         LLUICtrlFactory::getInstance()->buildPanel(this, "panel_preferences_web.xml");
00096 }
00097 
00098 BOOL LLPanelWeb::postBuild()
00099 {
00100         childSetAction( "clear_cache", onClickClearCache, this );
00101         childSetAction( "clear_cookies", onClickClearCookies, this );
00102         childSetCommitCallback("use_external_browser", onSelectBrowser, this );
00103 //      childSetEnabled( "connection_port", gSavedSettings.getBOOL( "CookiesEnabled" ) );
00104         childSetCommitCallback( "cookies_enabled", onCommitCookies, this );
00105         childSetCommitCallback( "web_proxy_editor", onCommitWebProxyAddress, this);
00106         childSetCommitCallback( "web_proxy_port", onCommitWebProxyPort, this);
00107         
00108         childSetEnabled("web_proxy_editor", 
00109                         gSavedSettings.getBOOL("BrowserProxyEnabled"));
00110         childSetEnabled("web_proxy_port", 
00111                         gSavedSettings.getBOOL("BrowserProxyEnabled"));
00112         childSetEnabled("proxy_text_label", 
00113                         gSavedSettings.getBOOL("BrowserProxyEnabled"));
00114         childSetCommitCallback("web_proxy_enabled", onCommitWebProxyEnabled, this);
00115 
00116         refresh();
00117 
00118         return TRUE;
00119 }
00120 
00121 
00122 
00123 LLPanelWeb::~LLPanelWeb()
00124 {
00125         // Children all cleaned up by default view destructor.
00126 }
00127 
00128 void LLPanelWeb::apply()
00129 {
00130 }
00131 
00132 void LLPanelWeb::refresh()
00133 {
00134         LLPanel::refresh();
00135 
00136         mCookiesEnabled = gSavedSettings.getBOOL("CookiesEnabled");
00137         mWebProxyEnabled = gSavedSettings.getBOOL("BrowserProxyEnabled");
00138         mWebProxyAddress = gSavedSettings.getString("BrowserProxyAddress");
00139         mWebProxyPort =  gSavedSettings.getS32("BrowserProxyPort");
00140         
00141         LLLineEditor* web_proxy_editor = getChild<LLLineEditor>("web_proxy_editor");
00142         if (web_proxy_editor)
00143         {
00144                 web_proxy_editor->setText( gSavedSettings.getString("BrowserProxyAddress") );
00145         }
00146         mExternalBrowser = gSavedSettings.getBOOL("UseExternalBrowser");
00147 
00148         childSetValue("use_external_browser", mExternalBrowser ? "external" : "internal");
00149 
00150         LLMediaBase *media_source = get_web_media();
00151         if (media_source)
00152                 media_source->enableCookies(mCookiesEnabled);
00153         free_web_media(media_source);
00154 
00155 }
00156 
00157 void LLPanelWeb::cancel()
00158 {
00159         
00160         gSavedSettings.setBOOL( "CookiesEnabled", mCookiesEnabled );
00161         gSavedSettings.setBOOL( "BrowserProxyEnabled", mWebProxyEnabled );
00162         gSavedSettings.setString( "BrowserProxyAddress", mWebProxyAddress );
00163         gSavedSettings.setS32( "BrowserProxyPort", mWebProxyPort );
00164 
00165         gSavedSettings.setBOOL("UseExternalBrowser", mExternalBrowser);
00166         LLMediaBase *media_source = get_web_media();
00167         if (media_source)
00168         {
00169                 media_source->enableCookies(mCookiesEnabled);
00170                 media_source->enableProxy( mWebProxyEnabled, mWebProxyAddress, mWebProxyPort );
00171         }
00172         free_web_media(media_source);
00173 
00174 }
00175 
00176 // static
00177 void LLPanelWeb::onClickClearCache(void*)
00178 {
00179         gViewerWindow->alertXml("ConfirmClearBrowserCache", callback_clear_browser_cache, 0);
00180 }
00181 
00182 //static
00183 void LLPanelWeb::callback_clear_browser_cache(S32 option, void* userdata)
00184 {
00185         if ( option == 0 ) // YES
00186         {
00187                 LLMediaBase *media_source = get_web_media();
00188                 if (media_source)
00189                         media_source->clearCache();
00190                 free_web_media(media_source);
00191         }
00192 }
00193 
00194 // static
00195 void LLPanelWeb::onClickClearCookies(void*)
00196 {
00197         gViewerWindow->alertXml("ConfirmClearCookies", callback_clear_cookies, 0);
00198 }
00199 
00200 //static
00201 void LLPanelWeb::callback_clear_cookies(S32 option, void* userdata)
00202 {
00203         if ( option == 0 ) // YES
00204         {
00205                 LLMediaBase *media_source = get_web_media();
00206                 if (media_source)
00207                         media_source->clearCookies();
00208                 free_web_media(media_source);
00209         }
00210 }
00211 
00212 // static
00213 void LLPanelWeb::onCommitCookies(LLUICtrl* ctrl, void* data)
00214 {
00215   LLPanelWeb* self = (LLPanelWeb*)data;
00216   LLCheckBoxCtrl* check = (LLCheckBoxCtrl*)ctrl;
00217 
00218   if (!self || !check) return;
00219 
00220   LLMediaBase *media_source = get_web_media();
00221   if (media_source)
00222           media_source->enableCookies(check->get());
00223   free_web_media(media_source);
00224 }
00225 // static
00226 void LLPanelWeb::onCommitWebProxyEnabled(LLUICtrl* ctrl, void* data)
00227 {
00228         LLPanelWeb* self = (LLPanelWeb*)data;
00229         LLCheckBoxCtrl* check = (LLCheckBoxCtrl*)ctrl;
00230 
00231         if (!self || !check) return;
00232         self->childSetEnabled("web_proxy_editor", 
00233                                 check->get());
00234         self->childSetEnabled("web_proxy_port", 
00235                                 check->get());
00236         self->childSetEnabled("proxy_text_label", 
00237                                 check->get());
00238                 
00239         LLMediaBase *media_source = get_web_media();
00240         if (media_source)
00241         {
00242                 media_source->enableProxy( gSavedSettings.getBOOL("BrowserProxyEnabled"), 
00243                         gSavedSettings.getString("BrowserProxyAddress"), 
00244                         gSavedSettings.getS32("BrowserProxyPort") );
00245         }
00246         free_web_media(media_source);
00247 
00248 }
00249 
00250 void LLPanelWeb::onCommitWebProxyAddress(LLUICtrl *ctrl, void *userdata)
00251 {
00252   LLLineEditor* web_proxy = (LLLineEditor*)ctrl;
00253 
00254   if (web_proxy)
00255   {
00256           gSavedSettings.setString("BrowserProxyAddress", web_proxy->getText());
00257   }     
00258   LLMediaBase *media_source = get_web_media();
00259   if (media_source)
00260   {
00261           media_source->enableProxy( gSavedSettings.getBOOL("BrowserProxyEnabled"), 
00262                   gSavedSettings.getString("BrowserProxyAddress"), 
00263                   gSavedSettings.getS32("BrowserProxyPort") );
00264   }
00265   free_web_media(media_source);
00266 }
00267 
00268 void LLPanelWeb::onCommitWebProxyPort(LLUICtrl *ctrl, void *userdata)
00269 {
00270         LLMediaBase *media_source = get_web_media();
00271         if (media_source)
00272         {
00273                 media_source->enableProxy( gSavedSettings.getBOOL("BrowserProxyEnabled"), 
00274                         gSavedSettings.getString("BrowserProxyAddress"), 
00275                         gSavedSettings.getS32("BrowserProxyPort") );
00276         }
00277         free_web_media(media_source);
00278 }
00279 
00280 // static 
00281 void LLPanelWeb::onSelectBrowser(LLUICtrl* ctrl, void* data)
00282 {
00283         // "external" or "internal"
00284         gSavedSettings.setBOOL("UseExternalBrowser", ctrl->getValue().asString() == "external");
00285 }

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