00001
00032 #include "llviewerprecompiledheaders.h"
00033
00034
00035 #include "llpanelweb.h"
00036
00037
00038 #include "llerror.h"
00039 #include "llrect.h"
00040 #include "llstring.h"
00041
00042
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
00055
00056
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
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
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
00177 void LLPanelWeb::onClickClearCache(void*)
00178 {
00179 gViewerWindow->alertXml("ConfirmClearBrowserCache", callback_clear_browser_cache, 0);
00180 }
00181
00182
00183 void LLPanelWeb::callback_clear_browser_cache(S32 option, void* userdata)
00184 {
00185 if ( option == 0 )
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
00195 void LLPanelWeb::onClickClearCookies(void*)
00196 {
00197 gViewerWindow->alertXml("ConfirmClearCookies", callback_clear_cookies, 0);
00198 }
00199
00200
00201 void LLPanelWeb::callback_clear_cookies(S32 option, void* userdata)
00202 {
00203 if ( option == 0 )
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
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
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
00281 void LLPanelWeb::onSelectBrowser(LLUICtrl* ctrl, void* data)
00282 {
00283
00284 gSavedSettings.setBOOL("UseExternalBrowser", ctrl->getValue().asString() == "external");
00285 }