diff --git a/.github/workflows/build_viewer.yml b/.github/workflows/build_viewer.yml index 5c8697fc82..790502eb8a 100644 --- a/.github/workflows/build_viewer.yml +++ b/.github/workflows/build_viewer.yml @@ -35,12 +35,9 @@ jobs: build_matrix: strategy: matrix: - os: [macos-15,ubuntu-24.04,windows-2022] + os: [macos-15,ubuntu-22.04,windows-2022] grid: [sl,os] variant: [regular, avx] - include: - - os: ubuntu-24.04 - container_image: ubuntu:22.04 # only Linux uses a container runs-on: ${{ matrix.os }} container: ${{ matrix.container_image }} outputs: @@ -62,16 +59,39 @@ jobs: echo "$(brew --prefix)/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - id: py311 + # Use apt-based Python when inside the Ubuntu 22.04 container + - name: Install Python 3.11 (container case) + if: matrix.container_image == 'ubuntu:22.04' + id: py311_apt + run: | + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + python3.11 python3.11-venv python3-pip python-is-python3 + python3.11 -m pip install --upgrade pip setuptools wheel + echo "python-path=$(command -v python3.11)" >> "$GITHUB_OUTPUT" + # Use setup-python for all other jobs + - name: Set up Python (normal case) + if: matrix.container_image != 'ubuntu:22.04' + id: py311_setup + uses: actions/setup-python@v5 with: python-version: '3.11' - + check-latest: true + - name: resolve python path + id: py311 + shell: bash + run: | + if [ -n "${{ steps.py311_apt.outputs.python-path }}" ]; then + PY="${{ steps.py311_apt.outputs.python-path }}" + else + PY="${{ steps.py311_setup.outputs.python-path }}" + fi + echo "python-path=$PY" >> "$GITHUB_OUTPUT" + echo "Resolved Python at: $PY" - name: Set PYTHON environment for CMake run: | echo "PYTHON=${{ steps.py311.outputs.python-path }}" >> $GITHUB_ENV shell: bash - - name: Install python requirements run: | python3 -m pip install -r requirements.txt @@ -105,17 +125,16 @@ jobs: with: swap-storage: false - - name: Install GCC-14 + - name: Install GCC-13 if: runner.os == 'Linux' run: | sudo apt-get update - sudo apt-get install -y software-properties-common sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get update - sudo apt-get install -y gcc-14 g++-14 - echo "CC=gcc-14" >> $GITHUB_ENV - echo "CXX=g++-14" >> $GITHUB_ENV - + sudo apt-get install -y gcc-13 g++-13 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 130 \ + --slave /usr/bin/g++ g++ /usr/bin/g++-13 + echo "CC=gcc-13" >> $GITHUB_ENV + echo "CXX=g++-13" >> $GITHUB_ENV - name: Setup rclone and download the folder uses: beqjanus/setup-rclone@main with: diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index c33bf14354..548ee2037d 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -338,8 +338,10 @@ void LLFloater::initFloater(const Params& p) // Help button: '?' //SL-14050 Disable all Help question marks - // Nope! - mButtonsEnabled[BUTTON_HELP] = !mHelpTopic.empty();// false; + // Disable the help button only if the debug setting is on + static LLUICachedControl hide_help_buttons ("FSHideHelpButtons", false); + mButtonsEnabled[BUTTON_HELP] = !mHelpTopic.empty() && !hide_help_buttons;// false; + // // Minimize button only for top draggers if ( !mDragOnLeft && mCanMinimize ) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 48bf1bb2f3..4e7f801f1c 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -26927,5 +26927,16 @@ Change of this parameter will affect the layout of buttons in notification toast 0 + FSHideHelpButtons + + Comment + When enabled, hides the help button from floaters (requires restart) + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 85bff9a29e..71a3aa0c01 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -632,8 +632,9 @@ void LLFloaterWorldMap::reshape( S32 width, S32 height, bool called_from_parent void LLFloaterWorldMap::draw() { // Performance improvement - static LLView* show_destination_btn = getChildView("Show Destination"); - static LLUICtrl* zoom_slider = getChild("zoom slider"); + static LLView* show_destination_btn = getChildView("Show Destination"); + static LLUICtrl* zoom_slider = getChild("zoom slider"); + static LLButton* track_region_btn = getChild("track_region"); // Performance improvement static LLUIColor map_track_color = LLUIColorTable::instance().getColor("MapTrackColor", LLColor4::white); @@ -709,7 +710,7 @@ void LLFloaterWorldMap::draw() mGoHomeButton->setEnabled((!rlv_handler_t::isEnabled()) || !(gRlvHandler.hasBehaviour(RLV_BHVR_TPLM) && gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC))); // Performance improvement // Alchemy region tracker - getChild("track_region")->setEnabled((bool) tracking_status || LLWorldMap::getInstance()->isTracking()); + track_region_btn->setEnabled((bool) tracking_status || LLWorldMap::getInstance()->isTracking()); setMouseOpaque(true); getDragHandle()->setMouseOpaque(true); @@ -1270,13 +1271,13 @@ void LLFloaterWorldMap::buildAvatarIDList() //} std::multimap buddymap; - for(; it != end; ++it) + for (; it != end; ++it) { - buddymap.insert(std::make_pair((*it).second, (*it).first)); + buddymap.emplace(it->second, it->first); } - for (std::multimap::iterator bit = buddymap.begin(); bit != buddymap.end(); ++bit) + for (const auto& [name, id] : buddymap) { - mFriendCombo->addSimpleElement((*bit).first, ADD_BOTTOM, (*bit).second); + mFriendCombo->addSimpleElement(name, ADD_BOTTOM, id); } // @@ -1331,11 +1332,11 @@ void LLFloaterWorldMap::buildLandmarkIDLists() // Filter duplicate landmarks on world map if (filterLandmarks) { - if (used_landmarks.find(item->getAssetUUID()) != used_landmarks.end()) + if (used_landmarks.contains(item->getAssetUUID())) { continue; } - used_landmarks.insert(item->getAssetUUID()); + used_landmarks.emplace(item->getAssetUUID()); } // @@ -1982,7 +1983,7 @@ void LLFloaterWorldMap::updateSims(bool found_null_sim) if (num_results > 0) { - // Ansariel: Let's sort the list to make it more user-friendly + // Let's sort the list to make it more user-friendly mSearchResults->sortByColumn("sim_name", true); // if match found, highlight it and go diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 09f7ec42a6..13370a4cca 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -318,12 +318,12 @@ void LLNetMap::draw() } // : Synchronize netmap scale throughout instances -// Aurora Sim + // Aurora Sim if (!LLWorld::getInstance()->getAllowMinimap()) { return; } -// Aurora Sim + // Aurora Sim static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white); static LLUIColor map_track_color = LLUIColorTable::instance().getColor("MapTrackColor", LLColor4::white); @@ -699,7 +699,9 @@ void LLNetMap::draw() // Draw avatars for (U32 i = 0; i < avatar_ids.size(); i++) { - LLUUID uuid = avatar_ids[i]; + // Performance improvement + //LLUUID uuid = avatar_ids[i]; + const LLUUID& uuid = avatar_ids.at(i); // Skip self, we'll draw it later if (uuid == gAgent.getID()) continue; @@ -872,8 +874,8 @@ void LLNetMap::draw() F32 ctr_x = (F32)center_sw_left; F32 ctr_y = (F32)center_sw_bottom; - const F32 steps_per_circle = 40.0f; - const F32 steps_per_radian = steps_per_circle / F_TWO_PI; + constexpr F32 steps_per_circle = 40.0f; + constexpr F32 steps_per_radian = steps_per_circle / F_TWO_PI; const F32 arc_start = -(horiz_fov / 2.0f) + F_PI_BY_TWO; const F32 arc_end = (horiz_fov / 2.0f) + F_PI_BY_TWO; const S32 steps = llmax(1, (S32)((horiz_fov * steps_per_radian) + 0.5f)); @@ -1958,8 +1960,7 @@ void LLNetMap::handleClearMarks() // static bool LLNetMap::getAvatarMarkColor(const LLUUID& avatar_id, LLColor4& color) { - avatar_marks_map_t::iterator found = sAvatarMarksMap.find(avatar_id); - if (found != sAvatarMarksMap.end()) + if (auto found = sAvatarMarksMap.find(avatar_id); found != sAvatarMarksMap.end()) { color = found->second; return true; @@ -2025,8 +2026,7 @@ LLColor4 LLNetMap::getAvatarColor(const LLUUID& avatar_id) cs_instance.hasFriendColorThatShouldShow(avatar_id, ContactSetType::MINIMAP, color); // Mark Avatars with special colors - avatar_marks_map_t::iterator found = sAvatarMarksMap.find(avatar_id); - if (found != sAvatarMarksMap.end()) + if (auto found = sAvatarMarksMap.find(avatar_id); found != sAvatarMarksMap.end()) { color = found->second; } diff --git a/indra/newview/particleeditor.cpp b/indra/newview/particleeditor.cpp index 5f8e591dc7..70fab5970d 100644 --- a/indra/newview/particleeditor.cpp +++ b/indra/newview/particleeditor.cpp @@ -22,8 +22,6 @@ #include "llviewerprecompiledheaders.h" #include "particleeditor.h" -#include - #include "llagent.h" #include "llappviewer.h" #include "llcheckboxctrl.h" @@ -47,10 +45,7 @@ #include "llwindow.h" #include "llviewerassetupload.h" -ParticleEditor::ParticleEditor(const LLSD& key) -: LLFloater(key), - mObject(0), - mParticleScriptInventoryItem(0) +ParticleEditor::ParticleEditor(const LLSD& key) : LLFloater(key) { mPatternMap["drop"] = LLPartSysData::LL_PART_SRC_PATTERN_DROP; mPatternMap["explode"] = LLPartSysData::LL_PART_SRC_PATTERN_EXPLODE; @@ -325,11 +320,11 @@ void ParticleEditor::updateUI() bool targetLinear = mTargetLinearCheckBox->getValue(); bool interpolateColor = mInterpolateColorCheckBox->getValue(); bool interpolateScale = mInterpolateScaleCheckBox->getValue(); - bool targetEnabled = targetLinear | (mTargetPositionCheckBox->getValue().asBoolean() ? true : false); + bool targetEnabled = targetLinear || (mTargetPositionCheckBox->getValue().asBoolean() ? true : false); - mBurstRadiusSpinner->setEnabled(!(targetLinear | (mFollowSourceCheckBox->getValue().asBoolean() ? true : false) | dropPattern)); - mBurstSpeedMinSpinner->setEnabled(!(targetLinear | dropPattern)); - mBurstSpeedMaxSpinner->setEnabled(!(targetLinear | dropPattern)); + mBurstRadiusSpinner->setEnabled(!targetLinear && !(mFollowSourceCheckBox->getValue().asBoolean() ? true : false) && !dropPattern); + mBurstSpeedMinSpinner->setEnabled(!targetLinear && !dropPattern); + mBurstSpeedMaxSpinner->setEnabled(!targetLinear && !dropPattern); // disabling a color swatch does nothing visually, so we also set alpha LLColor4 endColor = mEndColorSelector->get(); @@ -355,8 +350,8 @@ void ParticleEditor::updateUI() mOmegaYSpinner->setEnabled(!targetLinear); mOmegaZSpinner->setEnabled(!targetLinear); - mAngleBeginSpinner->setEnabled(!(explodePattern | dropPattern)); - mAngleEndSpinner->setEnabled(!(explodePattern | dropPattern)); + mAngleBeginSpinner->setEnabled(!explodePattern && !dropPattern); + mAngleEndSpinner->setEnabled(!explodePattern && !dropPattern); } void ParticleEditor::onClearTargetButtonClicked() @@ -369,15 +364,13 @@ void ParticleEditor::onTargetPickerButtonClicked() { mPickTargetButton->setToggleState(true); mPickTargetButton->setEnabled(false); - startPicking(this); + startPicking(); } // inspired by the LLFloaterReporter object picker -// static -void ParticleEditor::startPicking(void* userdata) +void ParticleEditor::startPicking() { - ParticleEditor* self = (ParticleEditor*) userdata; - LLToolObjPicker::getInstance()->setExitCallback(ParticleEditor::onTargetPicked, self); + LLToolObjPicker::getInstance()->setExitCallback(ParticleEditor::onTargetPicked, this); LLToolMgr::getInstance()->setTransientTool(LLToolObjPicker::getInstance()); } @@ -386,14 +379,12 @@ void ParticleEditor::onTargetPicked(void* userdata) { ParticleEditor* self = (ParticleEditor*)userdata; - LLUUID picked = LLToolObjPicker::getInstance()->getObjectID(); - LLToolMgr::getInstance()->clearTransientTool(); self->mPickTargetButton->setEnabled(true); self->mPickTargetButton->setToggleState(false); - if (picked.notNull()) + if (LLUUID picked = LLToolObjPicker::getInstance()->getObjectID(); picked.notNull()) { self->mTargetKeyInput->setValue(picked.asString()); self->onParameterChange(); @@ -522,8 +513,7 @@ default\n\ void ParticleEditor::onCopyButtonClicked() { - std::string script = createScript(); - if (!script.empty()) + if (std::string script = createScript(); !script.empty()) { getWindow()->copyTextToClipboard(utf8str_to_wstring(script)); LLNotificationsUtil::add("ParticleScriptCopiedToClipboard"); @@ -608,9 +598,7 @@ void ParticleEditor::callbackReturned(const LLUUID& inventoryItemID) gInventory.notifyObservers(); //caps import - std::string url = gAgent.getRegionCapability("UpdateScriptAgent"); - - if (!url.empty()) + if (std::string url = gAgent.getRegionCapability("UpdateScriptAgent"); !url.empty()) { std::string script = createScript(); @@ -633,30 +621,23 @@ void ParticleEditor::callbackReturned(const LLUUID& inventoryItemID) void ParticleEditor::scriptInjectReturned() { setCanClose(true); + mMainPanel->setEnabled(true); // play it safe, because some time may have passed - LLViewerObject* object = gObjectList.findObject(mObject->getID()); - if (!object || mObject->isDead()) + if (LLViewerObject* object = gObjectList.findObject(mObject->getID()); object && mObject&& !mObject->isDead()) + { + mObject->saveScript(mParticleScriptInventoryItem, true, false); + LLNotificationsUtil::add("ParticleScriptInjected"); + } + else { LL_WARNS() << "Can't inject script - object is dead or went away!" << LL_ENDL; - mMainPanel->setEnabled(true); - return; } - - mObject->saveScript(mParticleScriptInventoryItem, true, false); - LLNotificationsUtil::add("ParticleScriptInjected"); - - delete this; } // ---------------------------------- Callbacks ---------------------------------- -ParticleScriptCreationCallback::ParticleScriptCreationCallback(ParticleEditor* editor) -{ - mEditor = editor; -} - -ParticleScriptCreationCallback::~ParticleScriptCreationCallback() +ParticleScriptCreationCallback::ParticleScriptCreationCallback(ParticleEditor* editor) : mEditor(editor) { } diff --git a/indra/newview/particleeditor.h b/indra/newview/particleeditor.h index d0865d8644..c930866822 100644 --- a/indra/newview/particleeditor.h +++ b/indra/newview/particleeditor.h @@ -43,117 +43,117 @@ class ParticleEditor : public LLFloater friend class ParticleScriptCreationCallback; friend class ParticleScriptUploadResponder; - public: - ParticleEditor(const LLSD& key); - ~ParticleEditor(); +public: + ParticleEditor(const LLSD& key); + ~ParticleEditor(); - bool postBuild() override; + bool postBuild() override; - void setObject(LLViewerObject* objectp); - void scriptInjectReturned( ); + void setObject(LLViewerObject* objectp); + void scriptInjectReturned(); - protected: - void clearParticles(); - void updateParticles(); - void updateUI(); +protected: + void clearParticles(); + void updateParticles(); + void updateUI(); - std::string createScript(); - void createScriptInventoryItem(LLUUID categoryID); + std::string createScript(); + void createScriptInventoryItem(LLUUID categoryID); - void onParameterChange(); - void onCopyButtonClicked(); - void onInjectButtonClicked(); + void onParameterChange(); + void onCopyButtonClicked(); + void onInjectButtonClicked(); - void onClearTargetButtonClicked(); - void onTargetPickerButtonClicked(); - static void startPicking(void* userdata); - static void onTargetPicked(void* userdata); + void onClearTargetButtonClicked(); + void onTargetPickerButtonClicked(); + void startPicking(); + static void onTargetPicked(void* userdata); - void callbackReturned(const LLUUID& inv_item); + void callbackReturned(const LLUUID& inv_item); - std::string lslVector(F32 x, F32 y, F32 z); - std::string lslColor(const LLColor4& color); + std::string lslVector(F32 x, F32 y, F32 z); + std::string lslColor(const LLColor4& color); - LLViewerObject* mObject; - LLViewerTexture* mTexture; - LLViewerInventoryItem* mParticleScriptInventoryItem; + LLViewerObject* mObject{ nullptr }; + LLViewerTexture* mTexture{ nullptr }; + LLViewerInventoryItem* mParticleScriptInventoryItem{ nullptr }; - LLViewerTexture* mDefaultParticleTexture; + LLViewerTexture* mDefaultParticleTexture{ nullptr }; - LLPartSysData mParticles; + LLPartSysData mParticles; - std::map mPatternMap; - std::map mScriptPatternMap; + std::map mPatternMap; + std::map mScriptPatternMap; - std::map mBlendMap; - std::map mScriptBlendMap; + std::map mBlendMap; + std::map mScriptBlendMap; - LLPanel* mMainPanel; + LLPanel* mMainPanel{ nullptr }; - LLComboBox* mPatternTypeCombo; - LLTextureCtrl* mTexturePicker; + LLComboBox* mPatternTypeCombo{ nullptr }; + LLTextureCtrl* mTexturePicker{ nullptr }; - LLSpinCtrl* mBurstRateSpinner; - LLSpinCtrl* mBurstCountSpinner; - LLSpinCtrl* mBurstRadiusSpinner; - LLSpinCtrl* mAngleBeginSpinner; - LLSpinCtrl* mAngleEndSpinner; - LLSpinCtrl* mBurstSpeedMinSpinner; - LLSpinCtrl* mBurstSpeedMaxSpinner; - LLSpinCtrl* mStartAlphaSpinner; - LLSpinCtrl* mEndAlphaSpinner; - LLSpinCtrl* mScaleStartXSpinner; - LLSpinCtrl* mScaleStartYSpinner; - LLSpinCtrl* mScaleEndXSpinner; - LLSpinCtrl* mScaleEndYSpinner; - LLSpinCtrl* mSourceMaxAgeSpinner; - LLSpinCtrl* mParticlesMaxAgeSpinner; - LLSpinCtrl* mStartGlowSpinner; - LLSpinCtrl* mEndGlowSpinner; + LLSpinCtrl* mBurstRateSpinner{ nullptr }; + LLSpinCtrl* mBurstCountSpinner{ nullptr }; + LLSpinCtrl* mBurstRadiusSpinner{ nullptr }; + LLSpinCtrl* mAngleBeginSpinner{ nullptr }; + LLSpinCtrl* mAngleEndSpinner{ nullptr }; + LLSpinCtrl* mBurstSpeedMinSpinner{ nullptr }; + LLSpinCtrl* mBurstSpeedMaxSpinner{ nullptr }; + LLSpinCtrl* mStartAlphaSpinner{ nullptr }; + LLSpinCtrl* mEndAlphaSpinner{ nullptr }; + LLSpinCtrl* mScaleStartXSpinner{ nullptr }; + LLSpinCtrl* mScaleStartYSpinner{ nullptr }; + LLSpinCtrl* mScaleEndXSpinner{ nullptr }; + LLSpinCtrl* mScaleEndYSpinner{ nullptr }; + LLSpinCtrl* mSourceMaxAgeSpinner{ nullptr }; + LLSpinCtrl* mParticlesMaxAgeSpinner{ nullptr }; + LLSpinCtrl* mStartGlowSpinner{ nullptr }; + LLSpinCtrl* mEndGlowSpinner{ nullptr }; - LLComboBox* mBlendFuncSrcCombo; - LLComboBox* mBlendFuncDestCombo; + LLComboBox* mBlendFuncSrcCombo{ nullptr }; + LLComboBox* mBlendFuncDestCombo{ nullptr }; - LLCheckBoxCtrl* mBounceCheckBox; - LLCheckBoxCtrl* mEmissiveCheckBox; - LLCheckBoxCtrl* mFollowSourceCheckBox; - LLCheckBoxCtrl* mFollowVelocityCheckBox; - LLCheckBoxCtrl* mInterpolateColorCheckBox; - LLCheckBoxCtrl* mInterpolateScaleCheckBox; - LLCheckBoxCtrl* mTargetPositionCheckBox; - LLCheckBoxCtrl* mTargetLinearCheckBox; - LLCheckBoxCtrl* mWindCheckBox; - LLCheckBoxCtrl* mRibbonCheckBox; + LLCheckBoxCtrl* mBounceCheckBox{ nullptr }; + LLCheckBoxCtrl* mEmissiveCheckBox{ nullptr }; + LLCheckBoxCtrl* mFollowSourceCheckBox{ nullptr }; + LLCheckBoxCtrl* mFollowVelocityCheckBox{ nullptr }; + LLCheckBoxCtrl* mInterpolateColorCheckBox{ nullptr }; + LLCheckBoxCtrl* mInterpolateScaleCheckBox{ nullptr }; + LLCheckBoxCtrl* mTargetPositionCheckBox{ nullptr }; + LLCheckBoxCtrl* mTargetLinearCheckBox{ nullptr }; + LLCheckBoxCtrl* mWindCheckBox{ nullptr }; + LLCheckBoxCtrl* mRibbonCheckBox{ nullptr }; - LLLineEditor* mTargetKeyInput; - LLButton* mClearTargetButton; - LLButton* mPickTargetButton; + LLLineEditor* mTargetKeyInput{ nullptr }; + LLButton* mClearTargetButton{ nullptr }; + LLButton* mPickTargetButton{ nullptr }; - LLSpinCtrl* mAcellerationXSpinner; - LLSpinCtrl* mAcellerationYSpinner; - LLSpinCtrl* mAcellerationZSpinner; + LLSpinCtrl* mAcellerationXSpinner{ nullptr }; + LLSpinCtrl* mAcellerationYSpinner{ nullptr }; + LLSpinCtrl* mAcellerationZSpinner{ nullptr }; - LLSpinCtrl* mOmegaXSpinner; - LLSpinCtrl* mOmegaYSpinner; - LLSpinCtrl* mOmegaZSpinner; + LLSpinCtrl* mOmegaXSpinner{ nullptr }; + LLSpinCtrl* mOmegaYSpinner{ nullptr }; + LLSpinCtrl* mOmegaZSpinner{ nullptr }; - LLColorSwatchCtrl* mStartColorSelector; - LLColorSwatchCtrl* mEndColorSelector; + LLColorSwatchCtrl* mStartColorSelector{ nullptr }; + LLColorSwatchCtrl* mEndColorSelector{ nullptr }; - LLButton* mCopyToLSLButton; - LLButton* mInjectScriptButton; + LLButton* mCopyToLSLButton{ nullptr }; + LLButton* mInjectScriptButton{ nullptr }; }; class ParticleScriptCreationCallback : public LLInventoryCallback { - public: - ParticleScriptCreationCallback(ParticleEditor* editor); - void fire(const LLUUID& inventoryItem); +public: + ParticleScriptCreationCallback(ParticleEditor* editor); + void fire(const LLUUID& inventoryItem); - protected: - ~ParticleScriptCreationCallback(); +protected: + ~ParticleScriptCreationCallback() = default; - ParticleEditor* mEditor; + ParticleEditor* mEditor; }; #endif // PARTICLEEDITOR_H