diff --git a/indra/newview/statemachine/aifilepicker.cpp b/indra/newview/statemachine/aifilepicker.cpp index 35b069a78..d7a57949a 100644 --- a/indra/newview/statemachine/aifilepicker.cpp +++ b/indra/newview/statemachine/aifilepicker.cpp @@ -147,9 +147,6 @@ void AIFilePicker::open(ELoadFilter filter, std::string const& default_path, std case FFLOAD_ANIM: mFilter = "anim"; break; - case FFLOAD_COLLADA: - mFilter = "dae"; - break; #ifdef _CORY_TESTING case FFLOAD_GEOMETRY: mFilter = "geometry"; @@ -164,6 +161,18 @@ void AIFilePicker::open(ELoadFilter filter, std::string const& default_path, std case FFLOAD_RAW: mFilter = "raw"; break; + case FFLOAD_MODEL: + mFilter = "model"; + break; + case FFLOAD_COLLADA: + mFilter = "collada"; + break; + case FFLOAD_LSL: + mFilter = "lsl"; + break; + case FFLOAD_DICTIONARY: + mFilter = "dictionary"; + break; case FFLOAD_INVGZ: mFilter = "invgz"; break; diff --git a/indra/newview/statemachine/aifilepicker.h b/indra/newview/statemachine/aifilepicker.h index e8584d90d..af3850e31 100644 --- a/indra/newview/statemachine/aifilepicker.h +++ b/indra/newview/statemachine/aifilepicker.h @@ -43,10 +43,13 @@ enum ELoadFilter FFLOAD_WAV, FFLOAD_IMAGE, FFLOAD_ANIM, - FFLOAD_COLLADA, FFLOAD_XML, FFLOAD_SLOBJECT, FFLOAD_RAW, + FFLOAD_MODEL, + FFLOAD_COLLADA, + FFLOAD_LSL, + FFLOAD_DICTIONARY, FFLOAD_INVGZ, FFLOAD_AO, FFLOAD_BLACKLIST @@ -66,11 +69,11 @@ enum ESaveFilter FFSAVE_J2C, FFSAVE_PNG, FFSAVE_JPEG, + FFSAVE_LSL, FFSAVE_ANIMATN, FFSAVE_OGG, FFSAVE_NOTECARD, FFSAVE_GESTURE, - FFSAVE_LSL, FFSAVE_SHAPE, FFSAVE_SKIN, FFSAVE_HAIR, diff --git a/indra/plugins/filepicker/basic_plugin_filepicker.cpp b/indra/plugins/filepicker/basic_plugin_filepicker.cpp index 7e3a4f0b0..72b0a8b3e 100644 --- a/indra/plugins/filepicker/basic_plugin_filepicker.cpp +++ b/indra/plugins/filepicker/basic_plugin_filepicker.cpp @@ -88,6 +88,8 @@ static LLFilePicker::ESaveFilter str2savefilter(std::string const& filter) return LLFilePicker::FFSAVE_PNG; else if (filter == "jpeg") return LLFilePicker::FFSAVE_JPEG; + else if (filter == "lsl") + return LLFilePicker::FFSAVE_LSL; else if (filter == "animatn") return LLFilePicker::FFSAVE_ANIMATN; else if (filter == "ogg") @@ -96,8 +98,6 @@ static LLFilePicker::ESaveFilter str2savefilter(std::string const& filter) return LLFilePicker::FFSAVE_NOTECARD; else if (filter == "gesture") return LLFilePicker::FFSAVE_GESTURE; - else if (filter == "lsl") - return LLFilePicker::FFSAVE_LSL; else if (filter == "shape") return LLFilePicker::FFSAVE_SHAPE; else if (filter == "skin") @@ -157,6 +157,14 @@ static LLFilePicker::ELoadFilter str2loadfilter(std::string const& filter) return LLFilePicker::FFLOAD_SLOBJECT; else if (filter == "raw") return LLFilePicker::FFLOAD_RAW; + else if (filter == "model") + return LLFilePicker::FFLOAD_MODEL; + else if (filter == "collada") + return LLFilePicker::FFLOAD_COLLADA; + else if (filter == "lsl") + return LLFilePicker::FFLOAD_LSL; + else if (filter == "dictionary") + return LLFilePicker::FFLOAD_DICTIONARY; else if (filter == "invgz") return LLFilePicker::FFLOAD_INVGZ; else if (filter == "ao") diff --git a/indra/plugins/filepicker/llfilepicker.cpp b/indra/plugins/filepicker/llfilepicker.cpp index ed86e0f6e..790c32bfc 100644 --- a/indra/plugins/filepicker/llfilepicker.cpp +++ b/indra/plugins/filepicker/llfilepicker.cpp @@ -50,12 +50,16 @@ LLFilePicker LLFilePicker::sInstance; #define BLACKLIST_FILTER L"Asset Blacklist (*.blacklist)\0*.blacklist\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" +#define SCRIPT_FILTER L"Script files (*.lsl)\0*.lsl\0" +#define DICTIONARY_FILTER L"Dictionary files (*.dic; *.xcu)\0*.dic;*.xcu\0" #endif // @@ -164,6 +168,10 @@ bool LLFilePickerBase::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 \ @@ -182,6 +190,18 @@ bool LLFilePickerBase::setupFilter(ELoadFilter filter) mOFN.lpstrFilter = RAW_FILTER \ L"\0"; break; + case FFLOAD_MODEL: + mOFN.lpstrFilter = MODEL_FILTER \ + L"\0"; + break; + case FFLOAD_LSL: + mOFN.lpstrFilter = SCRIPT_FILTER \ + L"\0"; + break; + case FFLOAD_DICTIONARY: + mOFN.lpstrFilter = DICTIONARY_FILTER \ + L"\0"; + break; // case FFLOAD_INVGZ: mOFN.lpstrFilter = INVGZ_FILTER \ @@ -490,9 +510,7 @@ bool LLFilePickerBase::getSaveFile(ESaveFilter filter, std::string const& filena wcsncpy( mFilesW,L"untitled.lsl", FILENAME_BUFFER_SIZE); } mOFN.lpstrDefExt = L"lsl"; - mOFN.lpstrFilter = - L"LSL (*.lsl)\0*.lsl\0" \ - L"\0"; + mOFN.lpstrFilter = L"LSL Files (*.lsl)\0*.lsl\0" L"\0"; break; case FFSAVE_SHAPE: if(filename.empty()) @@ -762,6 +780,15 @@ Boolean LLFilePickerBase::navOpenFilterProc(AEDesc *theItem, void *info, void *c result = false; } } + else if (filter == FFLOAD_COLLADA) + { + if (fileInfo.filetype != 'DAE ' && + (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("dae"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) + ) + { + result = false; + } + } else if (filter == FFLOAD_XML) { if (fileInfo.filetype != 'XML ' && @@ -795,7 +822,25 @@ Boolean LLFilePickerBase::navOpenFilterProc(AEDesc *theItem, void *info, void *c result = false; } } - + else if (filter == FFLOAD_LSL) + { + if (fileInfo.filetype != 'LSL ' && + (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("lsl"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) ) + { + result = false; + } + } + else if (filter == FFLOAD_DICTIONARY) + { + if (fileInfo.filetype != 'DIC ' && + fileInfo.filetype != 'XCU ' && + (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("dic"), kCFCompareCaseInsensitive) != kCFCompareEqualTo) && + fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("xcu"), kCFCompareCaseInsensitive) != kCFCompareEqualTo))) + { + result = false; + } + } + if (fileInfo.extension) { CFRelease(fileInfo.extension); @@ -985,6 +1030,12 @@ OSStatus LLFilePickerBase::doNavSaveDialog(ESaveFilter filter, std::string const extension = CFSTR(".j2c"); break; + case FFSAVE_LSL: + type = 'LSL '; + creator = '\?\?\?\?'; + extension = CFSTR(".lsl"); + break; + case FFSAVE_ALL: default: type = '\?\?\?\?'; @@ -1349,6 +1400,12 @@ static std::string add_xml_filter_to_gtkchooser(GtkWindow *picker) LLTrans::getString("xml_file") + " (*.xml)"); } +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(); @@ -1362,6 +1419,17 @@ static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker) return filtername; } +static std::string add_script_filter_to_gtkchooser(GtkWindow *picker) +{ + return add_simple_mime_filter_to_gtkchooser(picker, "text/plain", + LLTrans::getString("script_files") + " (*.lsl)"); +} + +static std::string add_dictionary_filter_to_gtkchooser(GtkWindow *picker) +{ + return add_simple_mime_filter_to_gtkchooser(picker, "text/plain", + LLTrans::getString("dictionary_files") + " (*.dic; *.xcu)"); +} bool LLFilePickerBase::getSaveFile(ESaveFilter filter, std::string const& filename, std::string const& folder) { @@ -1421,6 +1489,10 @@ bool LLFilePickerBase::getSaveFile(ESaveFilter filter, std::string const& filena LLTrans::getString("compressed_image_files") + " (*.j2c)"); suggest_ext = ".j2c"; break; + case FFSAVE_LSL: + caption += add_script_filter_to_gtkchooser(picker); + suggest_ext = ".lsl"; + break; default:; break; } @@ -1475,9 +1547,18 @@ bool LLFilePickerBase::getLoadFile(ELoadFilter filter, std::string const& folder 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; + case FFLOAD_LSL: + filtername = add_script_filter_to_gtkchooser(picker); + break; + case FFLOAD_DICTIONARY: + filtername = add_dictionary_filter_to_gtkchooser(picker); + break; case FFLOAD_XML: filtername = add_xml_filter_to_gtkchooser(picker); break; diff --git a/indra/plugins/filepicker/llfilepicker.h b/indra/plugins/filepicker/llfilepicker.h index 0ba7ff614..a5ff46228 100644 --- a/indra/plugins/filepicker/llfilepicker.h +++ b/indra/plugins/filepicker/llfilepicker.h @@ -60,10 +60,14 @@ public: FFLOAD_XML = 6, FFLOAD_SLOBJECT = 7, FFLOAD_RAW = 8, + FFLOAD_MODEL = 9, + FFLOAD_COLLADA = 10, + FFLOAD_LSL = 11, + FFLOAD_DICTIONARY = 12, // - FFLOAD_INVGZ = 9, - FFLOAD_AO = 10, - FFLOAD_BLACKLIST = 11 + FFLOAD_INVGZ = 13, + FFLOAD_AO = 14, + FFLOAD_BLACKLIST = 15 // }; @@ -84,12 +88,12 @@ public: FFSAVE_J2C = 12, FFSAVE_PNG = 13, FFSAVE_JPEG = 14, + FFSAVE_LSL = 15, // - FFSAVE_ANIMATN = 15, - FFSAVE_OGG = 16, - FFSAVE_NOTECARD = 17, - FFSAVE_GESTURE = 18, - FFSAVE_LSL = 19, + FFSAVE_ANIMATN = 16, + FFSAVE_OGG = 17, + FFSAVE_NOTECARD = 18, + FFSAVE_GESTURE = 19, // good grief FFSAVE_SHAPE = 20, FFSAVE_SKIN = 21,