diff options
Diffstat (limited to 'linden/indra/newview/llfloaterhtmlhelp.cpp')
-rw-r--r-- | linden/indra/newview/llfloaterhtmlhelp.cpp | 329 |
1 files changed, 76 insertions, 253 deletions
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp index c9bf1cd..4a00a48 100644 --- a/linden/indra/newview/llfloaterhtmlhelp.cpp +++ b/linden/indra/newview/llfloaterhtmlhelp.cpp | |||
@@ -32,7 +32,6 @@ | |||
32 | #include "llviewerprecompiledheaders.h" | 32 | #include "llviewerprecompiledheaders.h" |
33 | 33 | ||
34 | #include "llfloaterhtmlhelp.h" | 34 | #include "llfloaterhtmlhelp.h" |
35 | #include "llfloaterhtml.h" | ||
36 | 35 | ||
37 | #include "llparcel.h" | 36 | #include "llparcel.h" |
38 | #include "lluictrlfactory.h" | 37 | #include "lluictrlfactory.h" |
@@ -50,6 +49,13 @@ | |||
50 | #include "llviewerparcelmedia.h" | 49 | #include "llviewerparcelmedia.h" |
51 | #include "llcombobox.h" | 50 | #include "llcombobox.h" |
52 | 51 | ||
52 | #include "llchat.h" | ||
53 | #include "lllineeditor.h" | ||
54 | #include "llfloaterchat.h" | ||
55 | #include "lltrans.h" | ||
56 | |||
57 | // static | ||
58 | LLFloaterMediaBrowser* LLFloaterMediaBrowser::sInstance = NULL; | ||
53 | 59 | ||
54 | LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data) | 60 | LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data) |
55 | { | 61 | { |
@@ -58,7 +64,9 @@ LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data) | |||
58 | 64 | ||
59 | void LLFloaterMediaBrowser::draw() | 65 | void LLFloaterMediaBrowser::draw() |
60 | { | 66 | { |
61 | childSetEnabled("go", !mAddressCombo->getValue().asString().empty()); | 67 | BOOL url_exists = !mAddressCombo->getValue().asString().empty(); |
68 | childSetEnabled("go", url_exists); | ||
69 | childSetEnabled("set_home", url_exists); | ||
62 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); | 70 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); |
63 | if(parcel) | 71 | if(parcel) |
64 | { | 72 | { |
@@ -84,6 +92,8 @@ BOOL LLFloaterMediaBrowser::postBuild() | |||
84 | childSetAction("close", onClickClose, this); | 92 | childSetAction("close", onClickClose, this); |
85 | childSetAction("open_browser", onClickOpenWebBrowser, this); | 93 | childSetAction("open_browser", onClickOpenWebBrowser, this); |
86 | childSetAction("assign", onClickAssign, this); | 94 | childSetAction("assign", onClickAssign, this); |
95 | childSetAction("home", onClickHome, this); | ||
96 | childSetAction("set_home", onClickSetHome, this); | ||
87 | 97 | ||
88 | buildURLHistory(); | 98 | buildURLHistory(); |
89 | return TRUE; | 99 | return TRUE; |
@@ -114,7 +124,7 @@ void LLFloaterMediaBrowser::buildURLHistory() | |||
114 | 124 | ||
115 | void LLFloaterMediaBrowser::onClose(bool app_quitting) | 125 | void LLFloaterMediaBrowser::onClose(bool app_quitting) |
116 | { | 126 | { |
117 | //setVisible(FALSE); | 127 | //setVisible(FALSE) |
118 | destroy(); | 128 | destroy(); |
119 | } | 129 | } |
120 | 130 | ||
@@ -146,14 +156,55 @@ void LLFloaterMediaBrowser::onLocationChange( const EventType& eventIn ) | |||
146 | childSetEnabled("back", mBrowser->canNavigateBack()); | 156 | childSetEnabled("back", mBrowser->canNavigateBack()); |
147 | childSetEnabled("forward", mBrowser->canNavigateForward()); | 157 | childSetEnabled("forward", mBrowser->canNavigateForward()); |
148 | childSetEnabled("reload", TRUE); | 158 | childSetEnabled("reload", TRUE); |
159 | gSavedSettings.setString("BrowserLastVisited", truncated_url); | ||
149 | } | 160 | } |
150 | 161 | ||
151 | LLFloaterMediaBrowser* LLFloaterMediaBrowser::showInstance(const LLSD& media_url) | 162 | LLFloaterMediaBrowser* LLFloaterMediaBrowser::showInstance(const LLSD& media_url) |
152 | { | 163 | { |
153 | LLFloaterMediaBrowser* floaterp = LLUISingleton<LLFloaterMediaBrowser, VisibilityPolicy<LLFloater> >::showInstance(media_url); | 164 | LLFloaterMediaBrowser* sInstance = LLUISingleton<LLFloaterMediaBrowser, VisibilityPolicy<LLFloater> >::showInstance(media_url); |
154 | 165 | ||
155 | floaterp->openMedia(media_url.asString()); | 166 | sInstance->openMedia(media_url.asString()); |
156 | return floaterp; | 167 | return sInstance; |
168 | } | ||
169 | |||
170 | //static | ||
171 | void LLFloaterMediaBrowser::toggle() | ||
172 | { | ||
173 | bool visible = LLFloaterMediaBrowser::instanceVisible(); | ||
174 | LLFloaterMediaBrowser* self = sInstance->getInstance(); | ||
175 | |||
176 | if(visible && self) | ||
177 | { | ||
178 | self->close(); | ||
179 | } | ||
180 | else | ||
181 | { | ||
182 | //Show home url if new session, last visited if not | ||
183 | std::string last_url = gSavedSettings.getString("BrowserLastVisited"); | ||
184 | if(last_url.empty()) | ||
185 | last_url = gSavedSettings.getString("BrowserHome"); | ||
186 | showInstance(last_url); | ||
187 | } | ||
188 | } | ||
189 | |||
190 | //static | ||
191 | void LLFloaterMediaBrowser::helpF1() | ||
192 | { | ||
193 | std::string url = gSavedSettings.getString("HelpSupportURL"); | ||
194 | std::string* url_copy = new std::string(url); | ||
195 | |||
196 | gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, url_copy); | ||
197 | } | ||
198 | |||
199 | // static | ||
200 | void LLFloaterMediaBrowser::onClickF1HelpLoadURL(S32 option, void* userdata) | ||
201 | { | ||
202 | std::string* urlp = (std::string*)userdata; | ||
203 | if (0 == option) | ||
204 | { | ||
205 | showInstance(urlp->c_str()); | ||
206 | } | ||
207 | delete urlp; | ||
157 | } | 208 | } |
158 | 209 | ||
159 | //static | 210 | //static |
@@ -234,266 +285,38 @@ void LLFloaterMediaBrowser::onClickAssign(void* user_data) | |||
234 | LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true ); | 285 | LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel, true ); |
235 | // now check for video | 286 | // now check for video |
236 | LLViewerParcelMedia::update( parcel ); | 287 | LLViewerParcelMedia::update( parcel ); |
237 | |||
238 | |||
239 | } | ||
240 | |||
241 | void LLFloaterMediaBrowser::openMedia(const std::string& media_url) | ||
242 | { | ||
243 | mBrowser->setHomePageUrl(media_url); | ||
244 | mBrowser->navigateTo(media_url); | ||
245 | } | 288 | } |
246 | 289 | ||
247 | LLViewerHtmlHelp gViewerHtmlHelp; | 290 | void LLFloaterMediaBrowser::onClickHome(void* user_data) |
248 | |||
249 | class LLFloaterHtmlHelp : | ||
250 | public LLFloater, | ||
251 | public LLWebBrowserCtrlObserver | ||
252 | { | ||
253 | public: | ||
254 | LLFloaterHtmlHelp(std::string start_url, std::string title); | ||
255 | virtual ~LLFloaterHtmlHelp(); | ||
256 | |||
257 | virtual void onClose( bool app_quitting ); | ||
258 | virtual void draw(); | ||
259 | |||
260 | static void show(std::string url, std::string title); | ||
261 | static void onClickBack( void* data ); | ||
262 | static void onClickHome( void* data ); | ||
263 | static void onClickForward( void* data ); | ||
264 | static void onClickClose( void* data ); | ||
265 | |||
266 | // browser observer impls | ||
267 | virtual void onStatusTextChange( const EventType& eventIn ); | ||
268 | virtual void onLocationChange( const EventType& eventIn ); | ||
269 | |||
270 | // used for some stats logging - will be removed at some point | ||
271 | static BOOL sFloaterOpened; | ||
272 | |||
273 | static void onClickF1HelpLoadURL(S32 option, void* userdata); | ||
274 | |||
275 | protected: | ||
276 | LLWebBrowserCtrl* mWebBrowser; | ||
277 | static LLFloaterHtmlHelp* sInstance; | ||
278 | LLButton* mBackButton; | ||
279 | LLButton* mForwardButton; | ||
280 | LLButton* mCloseButton; | ||
281 | LLTextBox* mStatusText; | ||
282 | std::string mStatusTextContents; | ||
283 | std::string mCurrentUrl; | ||
284 | std::string mSupportUrl; | ||
285 | }; | ||
286 | |||
287 | LLFloaterHtmlHelp* LLFloaterHtmlHelp::sInstance = 0; | ||
288 | |||
289 | BOOL LLFloaterHtmlHelp::sFloaterOpened = FALSE; | ||
290 | |||
291 | //////////////////////////////////////////////////////////////////////////////// | ||
292 | // | ||
293 | LLFloaterHtmlHelp::LLFloaterHtmlHelp(std::string start_url, std::string title) | ||
294 | : LLFloater( std::string("HTML Help") ), | ||
295 | mWebBrowser( 0 ), | ||
296 | mStatusTextContents( LLStringUtil::null ), | ||
297 | mCurrentUrl( LLStringUtil::null ) | ||
298 | { | 291 | { |
299 | sInstance = this; | 292 | LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data; |
300 | 293 | if (self) | |
301 | // create floater from its XML definition | ||
302 | LLUICtrlFactory::getInstance()->buildFloater( this, "floater_html_help.xml" ); | ||
303 | |||
304 | childSetAction("back_btn", onClickBack, this); | ||
305 | childSetAction("home_btn", onClickHome, this); | ||
306 | childSetAction("forward_btn", onClickForward, this); | ||
307 | |||
308 | if (!title.empty()) | ||
309 | { | ||
310 | setTitle(title); | ||
311 | } | ||
312 | |||
313 | mWebBrowser = getChild<LLWebBrowserCtrl>("html_help_browser" ); | ||
314 | if ( mWebBrowser ) | ||
315 | { | 294 | { |
316 | // observe browser control events | 295 | if (self->mBrowser) |
317 | mWebBrowser->addObserver( this ); | ||
318 | |||
319 | if (start_url != "") | ||
320 | { | 296 | { |
321 | mWebBrowser->navigateTo( start_url ); | 297 | std::string home_url = gSavedSettings.getString("BrowserHome"); |
298 | self->mBrowser->navigateTo(home_url); | ||
322 | } | 299 | } |
323 | else | ||
324 | { | ||
325 | // if the last page we were at before the client was closed is valid, go there and | ||
326 | // override what is in the XML file | ||
327 | // (not when the window was closed - it's only ever hidden - not closed) | ||
328 | std::string lastPageUrl = gSavedSettings.getString( "HtmlHelpLastPage" ); | ||
329 | if ( lastPageUrl != "" ) | ||
330 | { | ||
331 | mWebBrowser->navigateTo( lastPageUrl ); | ||
332 | }; | ||
333 | } | ||
334 | }; | ||
335 | } | ||
336 | |||
337 | //////////////////////////////////////////////////////////////////////////////// | ||
338 | // | ||
339 | LLFloaterHtmlHelp::~LLFloaterHtmlHelp() | ||
340 | { | ||
341 | // stop observing browser events | ||
342 | if ( mWebBrowser ) | ||
343 | { | ||
344 | mWebBrowser->remObserver( this ); | ||
345 | }; | ||
346 | |||
347 | // save position of floater | ||
348 | gSavedSettings.setRect( "HtmlHelpRect", getRect() ); | ||
349 | |||
350 | // save the location we were at when SL closed | ||
351 | gSavedSettings.setString( "HtmlHelpLastPage", mCurrentUrl ); | ||
352 | |||
353 | sInstance = 0; | ||
354 | } | ||
355 | |||
356 | //////////////////////////////////////////////////////////////////////////////// | ||
357 | // virtual | ||
358 | void LLFloaterHtmlHelp::draw() | ||
359 | { | ||
360 | // enable/disable buttons depending on state | ||
361 | if ( mWebBrowser ) | ||
362 | { | ||
363 | bool enable_back = mWebBrowser->canNavigateBack(); | ||
364 | childSetEnabled( "back_btn", enable_back ); | ||
365 | |||
366 | bool enable_forward = mWebBrowser->canNavigateForward(); | ||
367 | childSetEnabled( "forward_btn", enable_forward ); | ||
368 | }; | ||
369 | |||
370 | LLFloater::draw(); | ||
371 | } | ||
372 | |||
373 | //////////////////////////////////////////////////////////////////////////////// | ||
374 | // | ||
375 | void LLFloaterHtmlHelp::show(std::string url, std::string title) | ||
376 | { | ||
377 | LLFloaterHtml* floater_html = LLFloaterHtml::getInstance(); | ||
378 | floater_html->setVisible(FALSE); | ||
379 | |||
380 | if(url.empty()) | ||
381 | { | ||
382 | url = floater_html->getSupportUrl(); | ||
383 | } | 300 | } |
384 | std::string* url_copy = new std::string(url); | ||
385 | |||
386 | gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, url_copy); | ||
387 | |||
388 | } | 301 | } |
389 | 302 | ||
390 | // static | 303 | void LLFloaterMediaBrowser::onClickSetHome(void* user_data) |
391 | void LLFloaterHtmlHelp::onClickF1HelpLoadURL(S32 option, void* userdata) | ||
392 | { | 304 | { |
393 | std::string* urlp = (std::string*)userdata; | 305 | LLFloaterMediaBrowser* self = (LLFloaterMediaBrowser*)user_data; |
394 | if (0 == option) | 306 | std::string url = self->mCurrentURL; |
307 | if(!url.empty()) | ||
395 | { | 308 | { |
396 | LLWeb::loadURL(urlp->c_str()); | 309 | LLChat chat; |
310 | std::string log_message = LLTrans::getString("new_home_page") + " "; | ||
311 | log_message += url; | ||
312 | chat.mText = log_message; | ||
313 | LLFloaterChat::addChat(chat, FALSE, FALSE); | ||
314 | gSavedSettings.setString("BrowserHome", url); | ||
397 | } | 315 | } |
398 | delete urlp; | ||
399 | } | ||
400 | |||
401 | //////////////////////////////////////////////////////////////////////////////// | ||
402 | // | ||
403 | void LLFloaterHtmlHelp::onClose( bool app_quitting ) | ||
404 | { | ||
405 | setVisible( false ); | ||
406 | } | ||
407 | |||
408 | //////////////////////////////////////////////////////////////////////////////// | ||
409 | // | ||
410 | void LLFloaterHtmlHelp::onClickClose( void* data ) | ||
411 | { | ||
412 | LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data; | ||
413 | |||
414 | self->setVisible( false ); | ||
415 | } | ||
416 | |||
417 | //////////////////////////////////////////////////////////////////////////////// | ||
418 | // | ||
419 | void LLFloaterHtmlHelp::onClickBack( void* data ) | ||
420 | { | ||
421 | LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data; | ||
422 | if ( self ) | ||
423 | { | ||
424 | if ( self->mWebBrowser ) | ||
425 | { | ||
426 | self->mWebBrowser->navigateBack(); | ||
427 | }; | ||
428 | }; | ||
429 | } | ||
430 | |||
431 | //////////////////////////////////////////////////////////////////////////////// | ||
432 | // | ||
433 | void LLFloaterHtmlHelp::onClickHome( void* data ) | ||
434 | { | ||
435 | LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data; | ||
436 | if ( self ) | ||
437 | { | ||
438 | // get the home page URL (which can differ from the start URL) from XML and go there | ||
439 | LLWebBrowserCtrl* web_browser = self->getChild<LLWebBrowserCtrl>("html_help_browser" ); | ||
440 | if ( web_browser ) | ||
441 | { | ||
442 | web_browser->navigateHome(); | ||
443 | }; | ||
444 | }; | ||
445 | } | 316 | } |
446 | 317 | ||
447 | //////////////////////////////////////////////////////////////////////////////// | 318 | void LLFloaterMediaBrowser::openMedia(const std::string& media_url) |
448 | // | ||
449 | void LLFloaterHtmlHelp::onClickForward( void* data ) | ||
450 | { | ||
451 | LLFloaterHtmlHelp* self = ( LLFloaterHtmlHelp* )data; | ||
452 | if ( self ) | ||
453 | { | ||
454 | if ( self->mWebBrowser ) | ||
455 | { | ||
456 | self->mWebBrowser->navigateForward(); | ||
457 | }; | ||
458 | }; | ||
459 | } | ||
460 | |||
461 | //////////////////////////////////////////////////////////////////////////////// | ||
462 | // | ||
463 | void LLFloaterHtmlHelp::onStatusTextChange( const EventType& eventIn ) | ||
464 | { | ||
465 | mStatusTextContents = std::string( eventIn.getStringValue() ); | ||
466 | |||
467 | childSetText("status_text", mStatusTextContents); | ||
468 | } | ||
469 | |||
470 | //////////////////////////////////////////////////////////////////////////////// | ||
471 | // | ||
472 | void LLFloaterHtmlHelp::onLocationChange( const EventType& eventIn ) | ||
473 | { | ||
474 | llinfos << "MOZ> Location changed to " << eventIn.getStringValue() << llendl; | ||
475 | mCurrentUrl = std::string( eventIn.getStringValue() ); | ||
476 | } | ||
477 | |||
478 | //////////////////////////////////////////////////////////////////////////////// | ||
479 | // | ||
480 | LLViewerHtmlHelp::LLViewerHtmlHelp() | ||
481 | { | ||
482 | LLUI::setHtmlHelp(this); | ||
483 | } | ||
484 | |||
485 | LLViewerHtmlHelp::~LLViewerHtmlHelp() | ||
486 | { | ||
487 | LLUI::setHtmlHelp(NULL); | ||
488 | } | ||
489 | |||
490 | void LLViewerHtmlHelp::show() | ||
491 | { | ||
492 | LLFloaterHtmlHelp::show("", ""); | ||
493 | } | ||
494 | |||
495 | void LLViewerHtmlHelp::show(std::string url) | ||
496 | { | 319 | { |
497 | std::string title; // empty | 320 | mBrowser->setHomePageUrl(media_url); |
498 | LLFloaterHtmlHelp::show(url, title); | 321 | mBrowser->navigateTo(media_url); |
499 | } | 322 | } |