From 4319caf5c98d8910939cc84728b2b6b06a32a946 Mon Sep 17 00:00:00 2001 From: Hazim Gazov Date: Mon, 3 May 2010 04:09:35 -0300 Subject: [PATCH] added code for import, compensated for changes in the llapr library --- indra/llui/llfloater.cpp | 30 ++++- indra/llui/llfloater.h | 3 + indra/newview/llviewermenufile.cpp | 203 +++++++++++++++++++++++++++-- 3 files changed, 226 insertions(+), 10 deletions(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index d804d412a..5bf35cee1 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2182,8 +2182,34 @@ void LLFloaterView::closeAllChildren(bool app_quitting) floaterp->close(app_quitting); } } -} - +} + +// +void LLFloaterView::minimizeAllChildren() +{ + // iterate over a copy of the list, because closing windows will destroy + // some windows on the list. + child_list_t child_list = *(getChildList()); + + for (child_list_const_iter_t it = child_list.begin(); it != child_list.end(); ++it) + { + LLView* viewp = *it; + child_list_const_iter_t exists = std::find(getChildList()->begin(), getChildList()->end(), viewp); + if (exists == getChildList()->end()) + { + // this floater has already been removed + continue; + } + + LLFloater* floaterp = (LLFloater*)viewp; + + if (!floaterp->isDead()) + { + floaterp->setMinimized(TRUE); + } + } +} +// BOOL LLFloaterView::allChildrenClosed() { diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index b43e7c489..39ac100f5 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -368,6 +368,9 @@ public: // attempt to close all floaters void closeAllChildren(bool app_quitting); BOOL allChildrenClosed(); + // + void minimizeAllChildren(); + // LLFloater* getFrontmost(); LLFloater* getBackmost(); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 3ad069eda..9e69fe720 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -55,6 +55,14 @@ #include "llviewerwindow.h" #include "llappviewer.h" #include "lluploaddialog.h" +// +#include "llselectmgr.h" +#include "llimportobject.h" +#include "llfloaterexport.h" +#include "llassettype.h" +#include "llinventorytype.h" +#include "llbvhloader.h" +// // linden libraries @@ -233,6 +241,9 @@ const std::string upload_pick(void* data) //now we check to see //if the file is actually a valid image/sound/etc. + // Screw their checks + /* + // if (type == LLFilePicker::FFLOAD_WAV) { // pre-qualify wavs to make sure the format is acceptable @@ -246,6 +257,9 @@ const std::string upload_pick(void* data) return std::string(); } }//end if a wave/sound file + // + */ + // return filename; @@ -316,7 +330,12 @@ class LLFileUploadBulk : public view_listener_t LLFilePicker& picker = LLFilePicker::instance(); if (picker.getMultipleOpenFiles()) { - const std::string& filename = picker.getFirstFile(); + // + //const std::string& filename = picker.getFirstFile(); + std::string filename; + while(!(filename = picker.getNextFile()).empty()) + { + // std::string name = gDirUtilp->getBaseFileName(filename, true); std::string asset_name = name; @@ -336,6 +355,8 @@ class LLFileUploadBulk : public view_listener_t // *NOTE: Ew, we don't iterate over the file list here, // we handle the next files in upload_done_callback() + // not anymore! + } } else { @@ -345,6 +366,35 @@ class LLFileUploadBulk : public view_listener_t } }; +// +class LLFileImportXML : public view_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + LLFilePicker& picker = LLFilePicker::instance(); + if (!picker.getOpenFile(LLFilePicker::FFLOAD_XML)) + { + return true; + } + std::string file_name = picker.getFirstFile(); + new LLFloaterXmlImportOptions(new LLXmlImportOptions(file_name)); + return true; + } +}; + +class LLFileEnableImportXML : public view_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + bool new_value = !LLXmlImport::sImportInProgress; + + // horrendously opaque, this code + gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value); + return true; + } +}; +// + void upload_error(const std::string& error_message, const std::string& label, const std::string& filename, const LLSD& args) { llwarns << error_message << llendl; @@ -399,6 +449,17 @@ class LLFileCloseAllWindows : public view_listener_t } }; +// +class LLFileMinimizeAllWindows : public view_listener_t +{ + bool handleEvent(LLPointer event, const LLSD& userdata) + { + gFloaterView->minimizeAllChildren(); + return true; + } +}; +// + class LLFileSaveTexture : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -406,8 +467,20 @@ class LLFileSaveTexture : public view_listener_t LLFloater* top = gFloaterView->getFrontmost(); if (top) { - top->saveAs(); - } + // + if(top->canSaveAs()) + { + // + top->saveAs(); + // + return true; + } + // + } + // + top = new LLFloaterExport(); + top->center(); + // return true; } }; @@ -649,6 +722,13 @@ void upload_new_resource(const std::string& src_filename, std::string name, return; } } + // + else if(exten == "ogg") + { + asset_type = LLAssetType::AT_SOUND; // tag it as audio + filename = src_filename; + } + // else if(exten == "tmp") { // This is a generic .lin resource file @@ -768,10 +848,83 @@ void upload_new_resource(const std::string& src_filename, std::string name, } else if (exten == "bvh") { - error_message = llformat("We do not currently support bulk upload of animation files\n"); - upload_error(error_message, "DoNotSupportBulkAnimationUpload", filename, args); - return; - } + // THE FUCK WE DON'T + //error_message = llformat("We do not currently support bulk upload of animation files\n"); + //upload_error(error_message, "DoNotSupportBulkAnimationUpload", filename, args); + //return; + asset_type = LLAssetType::AT_ANIMATION; + S32 file_size; + LLAPRFile fp; + + if(!fp.open(src_filename, LL_APR_RB, LLAPRFile::local, &file_size)) + { + args["ERROR_MESSAGE"] = llformat("Couldn't read file %s\n", src_filename.c_str()); + LLNotifications::instance().add("ErrorMessage", args); + return; + } + char* file_buffer = new char[file_size + 1]; + if(!fp.read(file_buffer, file_size)) + { + fp.close(); + delete[] file_buffer; + args["ERROR_MESSAGE"] = llformat("Couldn't read file %s\n", src_filename.c_str()); + LLNotifications::instance().add("ErrorMessage", args); + return; + } + LLBVHLoader* loaderp = new LLBVHLoader(file_buffer); + if(!loaderp->isInitialized()) + { + fp.close(); + delete[] file_buffer; + args["ERROR_MESSAGE"] = llformat("Couldn't convert file %s to internal animation format\n", src_filename.c_str()); + LLNotifications::instance().add("ErrorMessage", args); + return; + } + S32 buffer_size = loaderp->getOutputSize(); + U8* buffer = new U8[buffer_size]; + LLDataPackerBinaryBuffer dp(buffer, buffer_size); + loaderp->serialize(dp); + LLAPRFile apr_file; + apr_file.open(filename, LL_APR_WB, LLAPRFile::local); + apr_file.write(buffer, buffer_size); + delete[] file_buffer; + delete[] buffer; + fp.close(); + apr_file.close(); + // + } + // + else if (exten == "animatn") + { + asset_type = LLAssetType::AT_ANIMATION; + filename = src_filename; + } + else if(exten == "jp2" || exten == "j2k" || exten == "j2c") + { + asset_type = LLAssetType::AT_TEXTURE; + filename = src_filename; + } + else if(exten == "gesture") + { + asset_type = LLAssetType::AT_GESTURE; + filename = src_filename; + } + else if(exten == "notecard") + { + asset_type = LLAssetType::AT_NOTECARD; + filename = src_filename; + } + else if(exten == "lsl") + { + asset_type = LLAssetType::AT_LSL_TEXT; + filename = src_filename; + } + else if(exten == "eyes" || exten == "gloves" || exten == "hair" || exten == "jacket" || exten == "pants" || exten == "shape" || exten == "shirt" || exten == "shoes" || exten == "skin" || exten == "skirt" || exten == "socks" || exten == "underpants" || exten == "undershirt" || exten == "bodypart" || exten == "clothing") + { + asset_type = LLAssetType::AT_CLOTHING; + filename = src_filename; + } + // else { // Unknown extension @@ -817,6 +970,27 @@ void upload_new_resource(const std::string& src_filename, std::string name, { t_disp_name = src_filename; } + // hack to create scripts and gestures + if(exten == "lsl" || exten == "gesture" || exten == "notecard") // added notecard Oct 15 2009 + { + LLInventoryType::EType inv_type = LLInventoryType::IT_GESTURE; + if(exten == "lsl") inv_type = LLInventoryType::IT_LSL; + else if(exten == "gesture") inv_type = LLInventoryType::IT_GESTURE; + else if(exten == "notecard") inv_type = LLInventoryType::IT_NOTECARD; + create_inventory_item( gAgent.getID(), + gAgent.getSessionID(), + gInventory.findCategoryUUIDForType(asset_type), + LLTransactionID::tnull, + name, + uuid.asString(), // fake asset id, but in vfs + asset_type, + inv_type, + NOT_WEARABLE, + PERM_ITEM_UNRESTRICTED, + new NewResourceItemCallback); + } + else + // upload_new_resource(tid, asset_type, name, desc, compression_info, // tid destination_folder_type, inv_type, next_owner_perms, group_perms, everyone_perms, display_name, callback, expected_upload_cost, userdata); @@ -834,7 +1008,7 @@ void upload_new_resource(const std::string& src_filename, std::string name, LLFilePicker::instance().reset(); } } - + void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExtStat ext_status) // StoreAssetData callback (fixed) { LLResourceData* data = (LLResourceData*)user_data; @@ -921,6 +1095,9 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt LLUploadDialog::modalUploadFinished(); delete data; + // + /* + // // *NOTE: This is a pretty big hack. What this does is check the // file picker if there are any more pending uploads. If so, // upload that file. @@ -944,6 +1121,9 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt expected_upload_cost, // assuming next in a group of uploads is of roughly the same type, i.e. same upload cost userdata); } + // + */ + // } void upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type, @@ -1080,10 +1260,17 @@ void init_menu_file() (new LLFileUploadSound())->registerListener(gMenuHolder, "File.UploadSound"); (new LLFileUploadAnim())->registerListener(gMenuHolder, "File.UploadAnim"); (new LLFileUploadBulk())->registerListener(gMenuHolder, "File.UploadBulk"); + // + (new LLFileImportXML())->registerListener(gMenuHolder, "File.ImportXML"); + (new LLFileEnableImportXML())->registerListener(gMenuHolder, "File.EnableImportXML"); + // (new LLFileCloseWindow())->registerListener(gMenuHolder, "File.CloseWindow"); (new LLFileCloseAllWindows())->registerListener(gMenuHolder, "File.CloseAllWindows"); (new LLFileEnableCloseWindow())->registerListener(gMenuHolder, "File.EnableCloseWindow"); (new LLFileEnableCloseAllWindows())->registerListener(gMenuHolder, "File.EnableCloseAllWindows"); + // + (new LLFileMinimizeAllWindows())->registerListener(gMenuHolder, "File.MinimizeAllWindows"); + // (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk");