From feabeb496518f28359f654fdc397354355743589 Mon Sep 17 00:00:00 2001 From: Adam Moss Date: Wed, 30 Sep 2009 17:46:31 +0000 Subject: DEV-35039 Viewer 2.0 Help System - Viewer Development svn merge -r134800:134805 svn+ssh://svn.lindenlab.com/svn/linden/branches/viewer2help-3 --- indra/newview/llfloaterhelpbrowser.cpp | 138 +++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 indra/newview/llfloaterhelpbrowser.cpp (limited to 'indra/newview/llfloaterhelpbrowser.cpp') diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp new file mode 100644 index 0000000000..d67b26d36c --- /dev/null +++ b/indra/newview/llfloaterhelpbrowser.cpp @@ -0,0 +1,138 @@ +/** + * @file llfloaterhelpbrowser.cpp + * @brief HTML Help floater - uses embedded web browser control + * + * $LicenseInfo:firstyear=2006&license=viewergpl$ + * + * Copyright (c) 2006-2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterhelpbrowser.h" + +#include "llfloaterreg.h" +#include "llpluginclassmedia.h" +#include "llmediactrl.h" +#include "llviewerwindow.h" +#include "llviewercontrol.h" +#include "llweb.h" +#include "llui.h" + +#include "llurlhistory.h" +#include "llmediactrl.h" +#include "llviewermedia.h" + + +LLFloaterHelpBrowser::LLFloaterHelpBrowser(const LLSD& key) + : LLFloater(key) +{ + // really really destroy the help browser when it's closed, it'll be recreated. + // *TODO: when onClose() is resurrected as a virtual, this bind can go away. + mCloseSignal.connect(boost::bind(&LLFloaterHelpBrowser::onClose, this)); +} + +BOOL LLFloaterHelpBrowser::postBuild() +{ + mBrowser = getChild("browser"); + mBrowser->addObserver(this); + + childSetAction("open_browser", onClickOpenWebBrowser, this); + + buildURLHistory(); + return TRUE; +} + +void LLFloaterHelpBrowser::buildURLHistory() +{ + // Get all of the entries in the "browser" collection + LLSD browser_history = LLURLHistory::getURLHistory("browser"); + + // initialize URL history in the plugin + mBrowser->getMediaPlugin()->initializeUrlHistory(browser_history); +} + +void LLFloaterHelpBrowser::onClose() +{ + destroy(); // really destroy this dialog on closure, it's relatively heavyweight. +} + +void LLFloaterHelpBrowser::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) +{ + if(event == MEDIA_EVENT_LOCATION_CHANGED) + { + setCurrentURL(self->getLocation()); + } + else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) + { + // nothing yet + } +} + +void LLFloaterHelpBrowser::setCurrentURL(const std::string& url) +{ + mCurrentURL = url; + + // redirects will navigate momentarily to about:blank, don't add to history + if (mCurrentURL != "about:blank") + { + // Serialize url history + LLURLHistory::removeURL("browser", mCurrentURL); + LLURLHistory::addURL("browser", mCurrentURL); + } +} + +//static +void LLFloaterHelpBrowser::onClickClose(void* user_data) +{ + LLFloaterHelpBrowser* self = (LLFloaterHelpBrowser*)user_data; + + self->closeFloater(); +} + +//static +void LLFloaterHelpBrowser::onClickOpenWebBrowser(void* user_data) +{ + LLFloaterHelpBrowser* self = (LLFloaterHelpBrowser*)user_data; + + std::string url = self->mCurrentURL.empty() ? + self->mBrowser->getHomePageUrl() : + self->mCurrentURL; + LLWeb::loadURLExternal(url); +} + +void LLFloaterHelpBrowser::openMedia(const std::string& media_url) +{ + mBrowser->setHomePageUrl(media_url); + //mBrowser->navigateTo("data:text/html;charset=utf-8,I'd really love to be going to:
" + media_url + ""); // tofu HACK for debugging =:) + mBrowser->navigateTo(media_url); + setCurrentURL(media_url); +} + +void LLFloaterHelpBrowser::navigateToLocalPage( const std::string& subdir, const std::string& filename_in ) +{ + mBrowser->navigateToLocalPage(subdir, filename_in); +} -- cgit v1.2.3 From 090977608d3d4e1d6d26689064910221c66f6084 Mon Sep 17 00:00:00 2001 From: Martin Reddy Date: Thu, 1 Oct 2009 10:23:23 +0000 Subject: DEV-39995: the help browser would crash on open if the media ctrl returned no media plugin for text/html (NULL dereference), which seems to be happening in viewer-2.0.0-3 for me at the moment. Clearly there's not too much to do if we can't display HTML, but this fix will at least stop the help browser from crashing. --- indra/newview/llfloaterhelpbrowser.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'indra/newview/llfloaterhelpbrowser.cpp') diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp index d67b26d36c..6b0b5ed5e0 100644 --- a/indra/newview/llfloaterhelpbrowser.cpp +++ b/indra/newview/llfloaterhelpbrowser.cpp @@ -72,7 +72,11 @@ void LLFloaterHelpBrowser::buildURLHistory() LLSD browser_history = LLURLHistory::getURLHistory("browser"); // initialize URL history in the plugin - mBrowser->getMediaPlugin()->initializeUrlHistory(browser_history); + LLPluginClassMedia *plugin = mBrowser->getMediaPlugin(); + if (plugin) + { + plugin->initializeUrlHistory(browser_history); + } } void LLFloaterHelpBrowser::onClose() -- cgit v1.2.3