diff options
Diffstat (limited to 'indra/test_apps')
| -rw-r--r-- | indra/test_apps/llplugintest/llmediaplugintest.cpp | 88 | ||||
| -rw-r--r-- | indra/test_apps/llplugintest/llmediaplugintest.h | 6 | 
2 files changed, 84 insertions, 10 deletions
| diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp index 40ac019721..873fa23db8 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.cpp +++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp @@ -956,6 +956,23 @@ mediaPanel*  LLMediaPluginTest::findMediaPanel( LLPluginClassMedia* source )  ////////////////////////////////////////////////////////////////////////////////  // +mediaPanel* LLMediaPluginTest::findMediaPanel( const std::string &target_name ) +{ +	mediaPanel *result = NULL; + +	for( int panel = 0; panel < (int)mMediaPanels.size(); ++panel ) +	{ +		if ( mMediaPanels[ panel ]->mTarget == target_name ) +		{ +			result = mMediaPanels[ panel ]; +		} +	} + +	return result; +} + +//////////////////////////////////////////////////////////////////////////////// +//  void LLMediaPluginTest::navigateToNewURI( std::string uri )  {  	if ( uri.length() ) @@ -1566,7 +1583,7 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )  ////////////////////////////////////////////////////////////////////////////////  // -void LLMediaPluginTest::addMediaPanel( std::string url ) +mediaPanel* LLMediaPluginTest::addMediaPanel( std::string url )  {  	// Get the plugin filename using the URL  	std::string mime_type = mimeTypeFromUrl( url ); @@ -1598,7 +1615,7 @@ void LLMediaPluginTest::addMediaPanel( std::string url )  	if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))  	{  		std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl; -		return; +		return NULL;  	}  	std::string user_data_path = std::string( cwd ) + "/";  #endif @@ -1668,6 +1685,8 @@ void LLMediaPluginTest::addMediaPanel( std::string url )  		std::cout << "Adding new media panel for " << url << "(" << media_width << "x" << media_height << ") with index " << panel->mId << " - total panels = " << mMediaPanels.size() << std::endl;  	} +	 +	return panel;  }  //////////////////////////////////////////////////////////////////////////////// @@ -1773,15 +1792,15 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )  ////////////////////////////////////////////////////////////////////////////////  // -void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url ) +mediaPanel* LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )  {  	// no media panels so we can't change anything - have to add  	if ( mMediaPanels.size() == 0 ) -		return; +		return NULL;  	// sanity check  	if ( ! panel ) -		return; +		return NULL;  	int index;  	for(index = 0; index < (int)mMediaPanels.size(); index++) @@ -1793,7 +1812,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )  	if(index >= (int)mMediaPanels.size())  	{  		// panel isn't in mMediaPanels -		return; +		return NULL;  	}  	std::cout << "Replacing media panel with index " << panel->mId << std::endl; @@ -1835,7 +1854,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )  	if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))  	{  		std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl; -		return; +		return NULL;  	}  	std::string user_data_path = std::string( cwd ) + "/";  #endif @@ -1875,6 +1894,8 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )  	// load and start the URL  	panel->mMediaSource->loadURI( url );  	panel->mMediaSource->start(); +	 +	return panel;  }  //////////////////////////////////////////////////////////////////////////////// @@ -2134,7 +2155,39 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e  		break;  		case MEDIA_EVENT_CLICK_LINK_HREF: -			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << std::endl; +		{ +			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << ", target is " << self->getClickTarget() << std::endl; +			// retrieve the event parameters +			std::string url = self->getClickURL(); +			std::string target = self->getClickTarget(); +			 +			if(target == "_external") +			{ +				// this should open in an external browser, but since this is a test app we don't care. +			} +			else if(target == "_blank") +			{ +				// Create a new panel with the specified URL. +				addMediaPanel(url); +			} +			else // other named target +			{ +				mediaPanel *target_panel = findMediaPanel(target); +				if(target_panel) +				{ +					target_panel = replaceMediaPanel(target_panel, url); +				} +				else +				{ +					target_panel = addMediaPanel(url); +				} + +				if(target_panel) +				{ +					target_panel->mTarget = target; +				} +			} +		}  		break;  		case MEDIA_EVENT_CLICK_LINK_NOFOLLOW: @@ -2148,6 +2201,25 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e  		case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:  			std::cerr <<  "Media event:  MEDIA_EVENT_PLUGIN_FAILED_LAUNCH" << std::endl;  		break; + +		case MEDIA_EVENT_CLOSE_REQUEST: +			std::cerr <<  "Media event:  MEDIA_EVENT_CLOSE_REQUEST" << std::endl; +		break; +		 +		case MEDIA_EVENT_PICK_FILE_REQUEST: +			std::cerr <<  "Media event:  MEDIA_EVENT_PICK_FILE_REQUEST" << std::endl; +			// TODO: display an actual file picker +			self->sendPickFileResponse("cake"); +		break; + +		case MEDIA_EVENT_GEOMETRY_CHANGE: +			std::cerr <<  "Media event:  MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID()  +				<< ", x = " << self->getGeometryX()  +				<< ", y = " << self->getGeometryY()  +				<< ", width = " << self->getGeometryWidth()  +				<< ", height = " << self->getGeometryHeight()  +				<< std::endl; +		break;  	}  } diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h index 8fa20b8d72..1f6f18e43c 100644 --- a/indra/test_apps/llplugintest/llmediaplugintest.h +++ b/indra/test_apps/llplugintest/llmediaplugintest.h @@ -51,6 +51,7 @@ struct mediaPanel  		int mId;  		std::string mStartUrl;  		std::string mMimeType; +		std::string mTarget;  		LLPluginClassMedia *mMediaSource;  		int mMediaWidth;  		int mMediaHeight; @@ -91,16 +92,17 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner  		void draw( int draw_type );  		void windowPosToTexturePos( int window_x, int window_y, int& media_x, int& media_y, int& id ); -		void addMediaPanel( std::string url ); +		mediaPanel* addMediaPanel( std::string url );  		void updateMediaPanel( mediaPanel* panel );  		void remMediaPanel( mediaPanel* panel ); -		void replaceMediaPanel( mediaPanel* panel, std::string url ); +		mediaPanel* replaceMediaPanel( mediaPanel* panel, std::string url );  		void getRandomMediaSize( int& width, int& height, std::string mime_type );  		void navigateToNewURI( std::string uri );          void initUrlHistory( std::string uri );  		void selectPanelById( int id );  		void selectPanel( mediaPanel* panel );  		mediaPanel* findMediaPanel( LLPluginClassMedia* panel ); +		mediaPanel* findMediaPanel( const std::string &target_name );  		void makePickTexture( int id, GLuint* texture_handle, unsigned char** texture_pixels );  		void makeChrome();  		void resetView(); | 
