diff options
Diffstat (limited to 'indra/newview/llfilepicker.cpp')
| -rw-r--r-- | indra/newview/llfilepicker.cpp | 106 | 
1 files changed, 78 insertions, 28 deletions
| diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index c14be89641..324d99937e 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -2,25 +2,31 @@   * @file llfilepicker.cpp   * @brief OS-specific file picker   * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * $LicenseInfo:firstyear=2001&license=viewergpl$ + *  + * Copyright (c) 2001-2009, Linden Research, Inc.   *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. + * 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   *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. + * 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   *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * 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.   *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * 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$   */ @@ -49,12 +55,14 @@ LLFilePicker LLFilePicker::sInstance;  #define SOUND_FILTER L"Sounds (*.wav)\0*.wav\0"  #define IMAGE_FILTER L"Images (*.tga; *.bmp; *.jpg; *.jpeg; *.png)\0*.tga;*.bmp;*.jpg;*.jpeg;*.png\0"  #define ANIM_FILTER L"Animations (*.bvh)\0*.bvh\0" +#define COLLADA_FILTER L"Scene (*.dae)\0*.dae\0"  #ifdef _CORY_TESTING  #define GEOMETRY_FILTER L"SL Geometry (*.slg)\0*.slg\0"  #endif  #define XML_FILTER L"XML files (*.xml)\0*.xml\0"  #define SLOBJECT_FILTER L"Objects (*.slobject)\0*.slobject\0"  #define RAW_FILTER L"RAW files (*.raw)\0*.raw\0" +#define MODEL_FILTER L"Model files (*.dae)\0*.dae\0"  #endif  // @@ -170,6 +178,10 @@ BOOL LLFilePicker::setupFilter(ELoadFilter filter)  		mOFN.lpstrFilter = ANIM_FILTER \  			L"\0";  		break; +	case FFLOAD_COLLADA: +		mOFN.lpstrFilter = COLLADA_FILTER \ +			L"\0"; +		break;  #ifdef _CORY_TESTING  	case FFLOAD_GEOMETRY:  		mOFN.lpstrFilter = GEOMETRY_FILTER \ @@ -188,6 +200,10 @@ BOOL LLFilePicker::setupFilter(ELoadFilter filter)  		mOFN.lpstrFilter = RAW_FILTER \  			L"\0";  		break; +	case FFLOAD_MODEL: +		mOFN.lpstrFilter = MODEL_FILTER \ +			L"\0"; +		break;  	default:  		res = FALSE;  		break; @@ -195,7 +211,7 @@ BOOL LLFilePicker::setupFilter(ELoadFilter filter)  	return res;  } -BOOL LLFilePicker::getOpenFile(ELoadFilter filter) +BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  {  	if( mLocked )  	{ @@ -214,8 +230,11 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter)  	setupFilter(filter); -	// Modal, so pause agent -	send_agent_pause(); +	if (blocking) +	{ +		// Modal, so pause agent +		send_agent_pause(); +	}  	reset(); @@ -226,10 +245,14 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter)  		std::string filename = utf16str_to_utf8str(llutf16string(mFilesW));  		mFiles.push_back(filename);  	} -	send_agent_resume(); -	// Account for the fact that the app has been stalled. -	LLFrameTimer::updateFrameTime(); +	if (blocking) +	{ +		send_agent_resume(); +		// Account for the fact that the app has been stalled. +		LLFrameTimer::updateFrameTime(); +	} +	  	return success;  } @@ -537,6 +560,15 @@ Boolean LLFilePicker::navOpenFilterProc(AEDesc *theItem, void *info, void *callB  								result = false;  							}  						} +						else if (filter == FFLOAD_COLLADA) +						{ +							if (fileInfo.filetype != 'DAE ' &&  +								(fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("dae"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) +							) +							{ +								result = false; +							} +						}  #ifdef _CORY_TESTING  						else if (filter == FFLOAD_GEOMETRY)  						{ @@ -802,7 +834,7 @@ OSStatus	LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& fi  	return error;  } -BOOL LLFilePicker::getOpenFile(ELoadFilter filter) +BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  {  	if( mLocked )  		return FALSE; @@ -821,20 +853,29 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter)  		mNavOptions.optionFlags |= kNavSupportPackages;  	} -	// Modal, so pause agent -	send_agent_pause(); +	if (blocking) +	{ +		// Modal, so pause agent +		send_agent_pause(); +	} +  	{  		error = doNavChooseDialog(filter);  	} -	send_agent_resume(); +	  	if (error == noErr)  	{  		if (getFileCount())  			success = true;  	} -	// Account for the fact that the app has been stalled. -	LLFrameTimer::updateFrameTime(); +	if (blocking) +	{ +		send_agent_resume(); +		// Account for the fact that the app has been stalled. +		LLFrameTimer::updateFrameTime(); +	} +  	return success;  } @@ -1083,6 +1124,12 @@ static std::string add_bvh_filter_to_gtkchooser(GtkWindow *picker)  						       LLTrans::getString("animation_files") + " (*.bvh)");  } +static std::string add_collada_filter_to_gtkchooser(GtkWindow *picker) +{ +	return add_simple_pattern_filter_to_gtkchooser(picker,  "*.dae", +						       LLTrans::getString("scene_files") + " (*.dae)"); +} +  static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker)  {  	GtkFileFilter *gfilter = gtk_file_filter_new(); @@ -1185,7 +1232,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename  	return rtn;  } -BOOL LLFilePicker::getOpenFile( ELoadFilter filter ) +BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  {  	BOOL rtn = FALSE; @@ -1207,6 +1254,9 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter )  		case FFLOAD_ANIM:  			filtername = add_bvh_filter_to_gtkchooser(picker);  			break; +		case FFLOAD_COLLADA: +			filtername = add_collada_filter_to_gtkchooser(picker); +			break;  		case FFLOAD_IMAGE:  			filtername = add_imageload_filter_to_gtkchooser(picker);  			break; | 
