From e1fb1fa6b7df0f4ac3bc897d64402be4a31f885b Mon Sep 17 00:00:00 2001 From: Aleric Inglewood Date: Wed, 18 May 2011 03:52:15 +0200 Subject: [PATCH] API change of AIFilePicker. Call AIFilePicker::create() instead of new AIFilePicker. Renamed deleteMe() to kill() and bs_deleted to bs_killed. Only default to auto destruct when created with create(true), otherwise kill() has to be called explicitely. --- indra/newview/floaterlocalassetbrowse.cpp | 2 +- indra/newview/llfloaterblacklist.cpp | 4 ++-- indra/newview/llfloatercustomize.cpp | 4 ++-- indra/newview/llfloaterfriends.cpp | 4 ++-- indra/newview/llfloaterregioninfo.cpp | 4 ++-- indra/newview/llfloatervfs.cpp | 2 +- indra/newview/llinventoryactions.cpp | 2 +- indra/newview/llinventorybackup.cpp | 4 ++-- indra/newview/llinventorybridge.cpp | 2 +- indra/newview/llpanelpick.cpp | 4 ++-- indra/newview/llpreviewanim.cpp | 2 +- indra/newview/llpreviewnotecard.cpp | 2 +- indra/newview/llpreviewscript.cpp | 4 ++-- indra/newview/llpreviewsound.cpp | 2 +- indra/newview/llpreviewtexture.cpp | 2 +- indra/newview/llviewermenu.cpp | 18 +++++++++--------- indra/newview/llviewermenufile.cpp | 6 +++--- indra/newview/llviewerobjectbackup.cpp | 4 ++-- indra/newview/llviewerwindow.cpp | 2 +- indra/newview/statemachine/aifilepicker.cpp | 11 +++++++---- indra/newview/statemachine/aifilepicker.h | 6 +++++- indra/newview/statemachine/aistatemachine.cpp | 17 ++++++++--------- indra/newview/statemachine/aistatemachine.h | 12 ++++++------ 23 files changed, 63 insertions(+), 57 deletions(-) diff --git a/indra/newview/floaterlocalassetbrowse.cpp b/indra/newview/floaterlocalassetbrowse.cpp index 700fb8dca..90458e09f 100644 --- a/indra/newview/floaterlocalassetbrowse.cpp +++ b/indra/newview/floaterlocalassetbrowse.cpp @@ -459,7 +459,7 @@ LocalAssetBrowser::~LocalAssetBrowser() void LocalAssetBrowser::AddBitmap() { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_IMAGE, "", "image", true); filepicker->run(boost::bind(&LocalAssetBrowser::AddBitmap_continued, filepicker)); } diff --git a/indra/newview/llfloaterblacklist.cpp b/indra/newview/llfloaterblacklist.cpp index ff76ec407..65c64cce7 100644 --- a/indra/newview/llfloaterblacklist.cpp +++ b/indra/newview/llfloaterblacklist.cpp @@ -241,7 +241,7 @@ void LLFloaterBlacklist::saveToDisk() //static void LLFloaterBlacklist::onClickSave(void* user_data) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("untitled.blacklist", FFSAVE_BLACKLIST); filepicker->run(boost::bind(&LLFloaterBlacklist::onClickSave_continued, filepicker)); } @@ -266,7 +266,7 @@ void LLFloaterBlacklist::onClickSave_continued(AIFilePicker* filepicker) //static void LLFloaterBlacklist::onClickLoad(void* user_data) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_BLACKLIST); filepicker->run(boost::bind(&LLFloaterBlacklist::onClickLoad_continued, filepicker)); } diff --git a/indra/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp index 96f300cd5..96008bbdb 100644 --- a/indra/newview/llfloatercustomize.cpp +++ b/indra/newview/llfloatercustomize.cpp @@ -1850,7 +1850,7 @@ void LLFloaterCustomize::setCurrentWearableType( EWearableType type ) // reX: new function void LLFloaterCustomize::onBtnImport( void* userdata ) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_XML); filepicker->run(boost::bind(&LLFloaterCustomize::onBtnImport_continued, filepicker)); } @@ -1910,7 +1910,7 @@ void LLFloaterCustomize::onBtnImport_continued(AIFilePicker* filepicker) // reX: new function void LLFloaterCustomize::onBtnExport( void* userdata ) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("", FFSAVE_XML); filepicker->run(boost::bind(&LLFloaterCustomize::onBtnExport_continued, filepicker)); } diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index c210caa1c..1d2e9142a 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -1082,7 +1082,7 @@ void LLPanelFriends::onClickExport(void* user_data) { std::string agn; gAgent.getName(agn); - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(agn + ".friendlist", FFSAVE_ALL); filepicker->run(boost::bind(&LLPanelFriends::onClickExport_continued, user_data, filepicker)); } @@ -1132,7 +1132,7 @@ bool LLPanelFriends::merging; void LLPanelFriends::onClickImport(void* user_data) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(); filepicker->run(boost::bind(&LLPanelFriends::onClickImport_filepicker_continued, filepicker)); } diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 994fe3ad3..d91f4067b 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -1325,7 +1325,7 @@ void LLPanelRegionTerrainInfo::onChangeSunHour(LLUICtrl* ctrl, void*) void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data) { LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data; - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("terrain.raw", FFSAVE_RAW); filepicker->run(boost::bind(&LLPanelRegionTerrainInfo::onClickUploadRaw_continued, self, filepicker)); } @@ -1350,7 +1350,7 @@ void LLPanelRegionTerrainInfo::onClickDownloadRaw_continued(AIFilePicker* filepi void LLPanelRegionTerrainInfo::onClickUploadRaw(void* data) { LLPanelRegionTerrainInfo* self = (LLPanelRegionTerrainInfo*)data; - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_RAW); filepicker->run(boost::bind(&LLPanelRegionTerrainInfo::onClickUploadRaw_continued, self, filepicker)); } diff --git a/indra/newview/llfloatervfs.cpp b/indra/newview/llfloatervfs.cpp index 0192e76b9..d8b91b428 100644 --- a/indra/newview/llfloatervfs.cpp +++ b/indra/newview/llfloatervfs.cpp @@ -234,7 +234,7 @@ void LLFloaterVFS::setEditEnabled(bool enabled) void LLFloaterVFS::onClickAdd(void* user_data) { if(!user_data) return; - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(); filepicker->run(boost::bind(&LLFloaterVFS::onClickAdd_continued, user_data, filepicker)); } diff --git a/indra/newview/llinventoryactions.cpp b/indra/newview/llinventoryactions.cpp index 8b04a1744..aa2374d24 100644 --- a/indra/newview/llinventoryactions.cpp +++ b/indra/newview/llinventoryactions.cpp @@ -570,7 +570,7 @@ class LLLoadInvCacheFloater : public inventory_listener_t { LLInventoryModel* model = mPtr->getPanel()->getModel(); if(!model) return false; - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_INVGZ, "", "invgz"); filepicker->run(boost::bind(&LLLoadInvCacheFloater::filepicker_callback, this, filepicker)); return true; diff --git a/indra/newview/llinventorybackup.cpp b/indra/newview/llinventorybackup.cpp index 416c82065..055cc2d61 100644 --- a/indra/newview/llinventorybackup.cpp +++ b/indra/newview/llinventorybackup.cpp @@ -357,7 +357,7 @@ void LLInventoryBackup::imageCallback(BOOL success, return; } - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(LLDir::getScrubbedFileName(item->getName()), getSaveFilter(item)); filepicker->run(boost::bind(&LLInventoryBackup::imageCallback_continued, src, filepicker)); } @@ -421,7 +421,7 @@ void LLInventoryBackup::assetCallback(LLVFS *vfs, // Write it back out... - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(LLDir::getScrubbedFileName(item->getName()), getSaveFilter(item)); filepicker->run(boost::bind(&LLInventoryBackup::assetCallback_continued, buffer, size, filepicker)); } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index aa6dc78d5..d728d4274 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1109,7 +1109,7 @@ void LLItemBridge::performAction(LLFolderView* folder, LLInventoryModel* model, LLInventoryItem* item = model->getItem(mUUID); if (item && item->getType() == LLAssetType::AT_TEXTURE) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_IMAGE, "", "image"); filepicker->run(boost::bind(&LLItemBridge::showFloaterImagePreview, item, filepicker)); } diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 9af829e9b..a33b3dd60 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -203,7 +203,7 @@ void LLPanelPick::initNewPick() //Imports a new pick from an xml - RK void LLPanelPick::importNewPick(void (*callback)(void*, bool), void* data) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_XML, "", "export"); filepicker->run(boost::bind(&LLPanelPick::importNewPick_continued, this, callback, data, filepicker)); } @@ -244,7 +244,7 @@ void LLPanelPick::importNewPick_continued(void (*callback)(void*, bool), void* d //Exports a pick to an XML - RK void LLPanelPick::exportPick() { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("", FFSAVE_XML, "", "export"); filepicker->run(boost::bind(&LLPanelPick::exportPick_continued, this, filepicker)); } diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp index 85349883b..845129a38 100644 --- a/indra/newview/llpreviewanim.cpp +++ b/indra/newview/llpreviewanim.cpp @@ -392,7 +392,7 @@ void LLPreviewAnim::gotAssetForSave(LLVFS *vfs, // Write it back out... - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(LLDir::getScrubbedFileName(self->getItem()->getName()) + ".animatn", FFSAVE_ANIMATN); filepicker->run(boost::bind(&LLPreviewAnim::gotAssetForSave_continued, buffer, size, filepicker)); } diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp index 6acdc32ba..cf67ca516 100644 --- a/indra/newview/llpreviewnotecard.cpp +++ b/indra/newview/llpreviewnotecard.cpp @@ -720,7 +720,7 @@ void LLPreviewNotecard::saveAs() default_filename = LLDir::getScrubbedFileName(item->getName()) + ".notecard"; } - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(default_filename, FFSAVE_NOTECARD); filepicker->run(boost::bind(&LLPreviewNotecard::saveAs_continued, this, filepicker)); } diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index a58f1180e..e4abac51d 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1704,7 +1704,7 @@ void LLPreviewLSL::saveAs() default_filename = LLDir::getScrubbedFileName(item->getName()) + ".lsl"; } - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(default_filename, FFSAVE_LSL); filepicker->run(boost::bind(&LLPreviewLSL::saveAs_continued, this, filepicker)); } @@ -2655,7 +2655,7 @@ void LLLiveLSLEditor::saveAs() default_filename = LLDir::getScrubbedFileName(item->getName()); } - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(default_filename, FFSAVE_LSL); filepicker->run(boost::bind(&LLLiveLSLEditor::saveAs_continued, this, filepicker)); } diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp index 890979578..a91cc25d0 100644 --- a/indra/newview/llpreviewsound.cpp +++ b/indra/newview/llpreviewsound.cpp @@ -330,7 +330,7 @@ void LLPreviewSound::gotAssetForSave(LLVFS *vfs, // Write it back out... - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(LLDir::getScrubbedFileName(self->getItem()->getName()) + ".ogg", FFSAVE_OGG); filepicker->run(boost::bind(&LLPreviewSound::gotAssetForSave_continued, buffer, size, filepicker)); } diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 2e52f3d47..e23e662ec 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -381,7 +381,7 @@ void LLPreviewTexture::saveAs() return; const LLViewerInventoryItem* item = getItem() ; - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(item ? LLDir::getScrubbedFileName(item->getName()) + ".tga" : LLStringUtil::null, FFSAVE_TGA, "", "image"); filepicker->run(boost::bind(&LLPreviewTexture::saveAs_continued, this, item, filepicker)); } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 50b76cc8c..afff999fa 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1241,7 +1241,7 @@ void init_debug_world_menu(LLMenuGL* menu) static void handle_export_menus_to_xml_continued(AIFilePicker* filepicker); void handle_export_menus_to_xml(void*) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("", FFSAVE_XML); filepicker->run(boost::bind(&handle_export_menus_to_xml_continued, filepicker)); } @@ -8519,7 +8519,7 @@ void handle_mesh_save_llm(void* data) return; } - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(*mesh_name, FFSAVE_ALL, default_path, "mesh_llm"); filepicker->run(boost::bind(&handle_mesh_save_llm_continued, data, filepicker)); } @@ -8595,7 +8595,7 @@ void handle_mesh_save_current_obj(void* data) std::string file_name = *mesh_name + "_current.obj"; std::string default_path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER, ""); - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(file_name, FFSAVE_ALL, default_path, "mesh_obj"); filepicker->run(boost::bind(&handle_mesh_save_current_obj_continued, data, filepicker)); } @@ -8644,7 +8644,7 @@ void handle_mesh_save_obj(void* data) std::string file_name = *mesh_name + ".obj"; std::string default_path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER, ""); - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(file_name, FFSAVE_ALL, default_path, "mesh_obj"); filepicker->run(boost::bind(&handle_mesh_save_obj_continued, data, filepicker)); } @@ -8687,7 +8687,7 @@ void handle_mesh_load_obj(void* data) return; } - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_ALL, default_path, "mesh_obj"); filepicker->run(boost::bind(&handle_mesh_load_obj_continued, data, filepicker)); } @@ -8737,7 +8737,7 @@ void handle_morph_save_obj(void* data) std::string file_name = *mesh_name + "." + morph_name + ".obj"; std::string default_path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER, ""); - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(file_name, FFSAVE_ALL, default_path, "mesh_obj"); filepicker->run(boost::bind(&handle_morph_save_obj_continued, data, filepicker)); } @@ -8782,7 +8782,7 @@ void handle_morph_load_obj(void* data) llinfos << "Load morph OBJ " << morph_name << " of mesh " << *mesh_name <open(FFLOAD_ALL, default_path, "mesh_obj"); filepicker->run(boost::bind(&handle_morph_load_obj_continued, data, filepicker)); } @@ -9091,7 +9091,7 @@ void handle_save_to_xml(void*) LLStringUtil::replaceChar(default_name, ':', '_'); LLStringUtil::replaceChar(default_name, '"', '_'); - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(default_name, FFSAVE_XML); filepicker->run(boost::bind(&handle_save_to_xml_continued, frontmost, filepicker)); } @@ -9108,7 +9108,7 @@ static void handle_save_to_xml_continued(LLFloater* frontmost, AIFilePicker* fil static void handle_load_from_xml_continued(AIFilePicker* filepicker); void handle_load_from_xml(void*) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_XML); filepicker->run(boost::bind(&handle_load_from_xml_continued, filepicker)); } diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 0a3254ea0..d246ffe62 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -179,7 +179,7 @@ void AIFileUpload::start_filepicker(ELoadFilter filter, char const* context) } llassert(!mPicker); - mPicker = new AIFilePicker; + mPicker = AIFilePicker::create(); mPicker->open(filter, "", context); mPicker->run(boost::bind(&AIFileUpload::filepicker_callback, this, filter)); } @@ -370,7 +370,7 @@ class LLFileUploadBulk : public view_listener_t else // cancel return false; - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_ALL, "", "openfile", true); filepicker->run(boost::bind(&LLFileUploadBulk::onConfirmBulkUploadTemp_continued, enabled, filepicker)); return true; @@ -586,7 +586,7 @@ class LLFileQuit : public view_listener_t static void handle_compress_image_continued(AIFilePicker* filepicker); void handle_compress_image(void*) { - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_IMAGE, "", "openfile", true); filepicker->run(boost::bind(&handle_compress_image_continued, filepicker)); } diff --git a/indra/newview/llviewerobjectbackup.cpp b/indra/newview/llviewerobjectbackup.cpp index 51d0a4336..0ec25719e 100644 --- a/indra/newview/llviewerobjectbackup.cpp +++ b/indra/newview/llviewerobjectbackup.cpp @@ -341,7 +341,7 @@ void LLObjectBackup::exportObject() mThisGroup.clear(); // Open the file save dialog - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open("", FFSAVE_XML); filepicker->run(boost::bind(&LLObjectBackup::exportObject_continued, this, filepicker)); } @@ -739,7 +739,7 @@ void LLObjectBackup::importObject(bool upload) mRetexture = upload; // Open the file open dialog - AIFilePicker* filepicker = new AIFilePicker; + AIFilePicker* filepicker = AIFilePicker::create(); filepicker->open(FFLOAD_XML, "", "import"); filepicker->run(boost::bind(&LLObjectBackup::importObject_continued, this, filepicker)); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 4b84744e4..64163b895 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -4018,7 +4018,7 @@ void LLViewerWindow::saveImageNumbered(LLPointer image) // AIFilePicker will append an appropriate extension to the proposed name, based on the ESaveFilter constant passed in. // pick a directory in which to save - AIFilePicker* filepicker = new AIFilePicker; // Deleted in LLViewerWindow::saveImageNumbered_continued1 + AIFilePicker* filepicker = AIFilePicker::create(); // Deleted in LLViewerWindow::saveImageNumbered_continued1 filepicker->open(proposed_name, pick_type, "", "snapshot"); filepicker->run(boost::bind(&LLViewerWindow::saveImageNumbered_continued1, this, image, extension, filepicker)); return; diff --git a/indra/newview/statemachine/aifilepicker.cpp b/indra/newview/statemachine/aifilepicker.cpp index 5e7a64da9..fdfb5a968 100644 --- a/indra/newview/statemachine/aifilepicker.cpp +++ b/indra/newview/statemachine/aifilepicker.cpp @@ -60,7 +60,7 @@ char const* AIFilePicker::state_str_impl(state_type run_state) const return "UNKNOWN STATE"; } -AIFilePicker::AIFilePicker(void) : mPluginManager(NULL), mCanceled(false) +AIFilePicker::AIFilePicker(void) : mPluginManager(NULL), mAutoKill(false), mCanceled(false) { } @@ -400,9 +400,12 @@ void AIFilePicker::finish_impl(void) mPluginManager = NULL; } mFilter.clear(); // Check that open is called before calling run (again). - // The default behavior is to delete the plugin. This can be overridden in - // the callback by calling run() again. - deleteMe(); + if (mAutoKill) + { + // The default behavior is to delete the plugin. This can be overridden in + // the callback by calling run() again. + kill(); + } } // This function is called when a new message is received from the plugin. diff --git a/indra/newview/statemachine/aifilepicker.h b/indra/newview/statemachine/aifilepicker.h index ee2013306..c86223124 100644 --- a/indra/newview/statemachine/aifilepicker.h +++ b/indra/newview/statemachine/aifilepicker.h @@ -132,7 +132,7 @@ new AIFilePicker which sets the state to AIFilePicker_canceled or AIFilePicker_done respectively, causing a call to AIStateMachine::finish(), which calls AIFilePicker::finish_impl which destroys the plugin (mPluginBase), - the plugin manager (mPluginManager) and calls AIStateMachine::deleteMe() + the plugin manager (mPluginManager) and calls AIStateMachine::kill() causing the AIFilePicker to be deleted. */ @@ -150,6 +150,9 @@ class AIFilePicker : public AIStateMachine { public: AIFilePicker(void); + // Create a dynamically created AIFilePicker object. + static AIFilePicker* create(bool auto_kill = true) { AIFilePicker* filepicker = new AIFilePicker; filepicker->mAutoKill = auto_kill; return filepicker; } + // The starting directory that the user will be in when the file picker opens // will be the same as the directory used the last time the file picker was // opened with the same context. If the file picker was never opened before @@ -184,6 +187,7 @@ private: typedef std::map context_map_type; //!< Type of mContextMap. static AIThreadSafeSimple sContextMap; //!< Map context (ie, "snapshot" or "image") to last used folder. std::string mContext; //!< Some key to indicate the context (remembers the folder per key). + bool mAutoKill; //!< True if the default behavior is to delete itself after being finished. // Input variables (cache variable between call to open and run). open_type mOpenType; //!< Set to whether opening a filepicker to select for saving one file, for loading one file, or loading multiple files. diff --git a/indra/newview/statemachine/aistatemachine.cpp b/indra/newview/statemachine/aistatemachine.cpp index d53a053c4..6d128b467 100644 --- a/indra/newview/statemachine/aistatemachine.cpp +++ b/indra/newview/statemachine/aistatemachine.cpp @@ -71,7 +71,6 @@ namespace { bool calling_mainloop; }; static AITHREADSAFE(cscm_type, continued_statemachines_and_calling_mainloop, ); - } // static @@ -177,8 +176,8 @@ void AIStateMachine::finish(void) idle(); mState = bs_finish; finish_impl(); - // Did finish_impl call deleteMe? Then that is only the default. Remember it. - bool default_delete = (mState == bs_deleted); + // Did finish_impl call kill()? Then that is only the default. Remember it. + bool default_delete = (mState == bs_killed); mState = bs_finish; if (mParent) { @@ -202,20 +201,20 @@ void AIStateMachine::finish(void) mState = bs_initialize; if (mCallback) { - mCallback->callback(!mAborted); // This can/may call deleteMe(), in which case the whole AIStateMachine will be deleted from the mainloop. + mCallback->callback(!mAborted); // This can/may call kill(), in which case the whole AIStateMachine will be deleted from the mainloop. delete mCallback; mCallback = NULL; } // Restore the request for deletion if we weren't started again from the callback. if (default_delete && mState == bs_initialize) - mState = bs_deleted; + mState = bs_killed; } -void AIStateMachine::deleteMe(void) +void AIStateMachine::kill(void) { // Should only be called from finish(). llassert(mIdle && (mState == bs_initialize || mState == bs_finish)); - mState = bs_deleted; + mState = bs_killed; } // Return stringified 'state'. @@ -229,7 +228,7 @@ char const* AIStateMachine::state_str(state_type state) AI_CASE_RETURN(bs_run); AI_CASE_RETURN(bs_abort); AI_CASE_RETURN(bs_finish); - AI_CASE_RETURN(bs_deleted); + AI_CASE_RETURN(bs_killed); } } return state_str_impl(state); @@ -326,7 +325,7 @@ void AIStateMachine::mainloop(void*) { Dout(dc::statemachine, "Erasing " << (void*)&statemachine << " from active_statemachines"); iter = active_statemachines.erase(iter); - if (statemachine.mState == bs_deleted) + if (statemachine.mState == bs_killed) { Dout(dc::statemachine, "Deleting " << (void*)&statemachine); delete &statemachine; diff --git a/indra/newview/statemachine/aistatemachine.h b/indra/newview/statemachine/aistatemachine.h index dff51c99b..4e041adff 100644 --- a/indra/newview/statemachine/aistatemachine.h +++ b/indra/newview/statemachine/aistatemachine.h @@ -169,7 +169,7 @@ class AIStateMachine { bs_run, bs_abort, bs_finish, - bs_deleted + bs_killed }; public: @@ -178,7 +178,7 @@ class AIStateMachine { //! Integral value equal to the state with the lowest value. static state_type const min_state = bs_initialize; //! Integral value one more than the state with the highest value. - static state_type const max_state = bs_deleted + 1; + static state_type const max_state = bs_killed + 1; private: base_state_type mState; //!< State of the base class. @@ -214,8 +214,8 @@ class AIStateMachine { AIStateMachine(void) : mState(bs_initialize), mIdle(true), mAborted(true), mSleep(0), mParent(NULL), mCallback(NULL) { updateSettings(); } protected: - //! The user should call 'deleteMe()', not delete a AIStateMachine (derived) directly. - virtual ~AIStateMachine() { llassert(mState == bs_deleted); } + //! The user should call 'kill()', not delete a AIStateMachine (derived) directly. + virtual ~AIStateMachine() { llassert(mState == bs_killed); } public: //! Halt the state machine until cont() is called. @@ -286,8 +286,8 @@ class AIStateMachine { //! Refine state while in the bs_run state. May only be called while in the bs_run state. void set_state(state_type run_state); - //! Change state to 'bs_deleted'. May only be called while in the bs_finish state. - void deleteMe(void); + //! Change state to 'bs_killed'. May only be called while in the bs_finish state. + void kill(void); //--------------------------------------- // Other.