diff options
| -rw-r--r-- | indra/llprimitive/llgltfmaterial.h | 6 | ||||
| -rw-r--r-- | indra/newview/llfloaterchangeitemthumbnail.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lllocalbitmaps.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/lllocalbitmaps.h | 28 | ||||
| -rw-r--r-- | indra/newview/llmaterialeditor.cpp | 75 | ||||
| -rw-r--r-- | indra/newview/llmaterialeditor.h | 2 | ||||
| -rw-r--r-- | indra/newview/llpanelprofile.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/lltexturectrl.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/lltexturectrl.h | 12 | 
9 files changed, 168 insertions, 36 deletions
| diff --git a/indra/llprimitive/llgltfmaterial.h b/indra/llprimitive/llgltfmaterial.h index 822a0aab22..548e2c52f4 100644 --- a/indra/llprimitive/llgltfmaterial.h +++ b/indra/llprimitive/llgltfmaterial.h @@ -222,6 +222,10 @@ public:      virtual void addTextureEntry(LLTextureEntry* te) {};      virtual void removeTextureEntry(LLTextureEntry* te) {}; +    // For local textures so that editor will know to track changes +    void setHasLocalTextures(bool val) { mHasLocalTextures = val; } +    bool hasLocalTextures() { return mHasLocalTextures; } +  protected:      static LLVector2 vec2FromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const LLVector2& default_value);      static F32 floatFromJson(const std::map<std::string, tinygltf::Value>& object, const char* key, const F32 default_value); @@ -238,4 +242,6 @@ protected:      void writeToTexture(tinygltf::Model& model, T& texture_info, TextureInfo texture_info_id, bool force_write = false) const;      template<typename T>      static void writeToTexture(tinygltf::Model& model, T& texture_info, const LLUUID& texture_id, const TextureTransform& transform, bool force_write = false); + +    bool mHasLocalTextures;  }; diff --git a/indra/newview/llfloaterchangeitemthumbnail.cpp b/indra/newview/llfloaterchangeitemthumbnail.cpp index f54240f6f4..0301627c15 100644 --- a/indra/newview/llfloaterchangeitemthumbnail.cpp +++ b/indra/newview/llfloaterchangeitemthumbnail.cpp @@ -760,7 +760,7 @@ void LLFloaterChangeItemThumbnail::showTexturePicker(const LLUUID &thumbnail_id)          {              //texture_floaterp->setTextureSelectedCallback();              //texture_floaterp->setOnUpdateImageStatsCallback(); -            texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource, const LLUUID&, const LLUUID&) +            texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource, const LLUUID&, const LLUUID&, const LLUUID&)              {                  if (op == LLTextureCtrl::TEXTURE_SELECT)                  { diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp index 257208470e..6f1e4c9419 100644 --- a/indra/newview/lllocalbitmaps.cpp +++ b/indra/newview/lllocalbitmaps.cpp @@ -142,27 +142,27 @@ LLLocalBitmap::~LLLocalBitmap()  }  /* accessors */ -std::string LLLocalBitmap::getFilename() +std::string LLLocalBitmap::getFilename() const  {  	return mFilename;  } -std::string LLLocalBitmap::getShortName() +std::string LLLocalBitmap::getShortName() const  {  	return mShortName;  } -LLUUID LLLocalBitmap::getTrackingID() +LLUUID LLLocalBitmap::getTrackingID() const  {  	return mTrackingID;  } -LLUUID LLLocalBitmap::getWorldID() +LLUUID LLLocalBitmap::getWorldID() const  {  	return mWorldID;  } -bool LLLocalBitmap::getValid() +bool LLLocalBitmap::getValid() const  {  	return mValid;  } @@ -273,6 +273,11 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)  	return updated;  } +boost::signals2::connection LLLocalBitmap::setChangedCallback(const LLLocalTextureCallback& cb) +{ +    return mChangedSignal.connect(cb); +} +  bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)  {  	bool decode_successful = false; @@ -340,7 +345,7 @@ bool LLLocalBitmap::decodeBitmap(LLPointer<LLImageRaw> rawimg)  	return decode_successful;  } -void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id) +void LLLocalBitmap::replaceIDs(const LLUUID& old_id, LLUUID new_id)  {  	// checking for misuse.  	if (old_id == new_id) @@ -350,6 +355,8 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)  		return;  	} +    mChangedSignal(old_id, new_id); +  	// processing updates per channel; makes the process scalable.  	// the only actual difference is in SetTE* call i.e. SetTETexture, SetTENormal, etc.  	updateUserPrims(old_id, new_id, LLRender::DIFFUSE_MAP); @@ -381,6 +388,9 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)  	updateUserLayers(old_id, new_id, LLWearableType::WT_UNIVERSAL);  	updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERPANTS);  	updateUserLayers(old_id, new_id, LLWearableType::WT_UNDERSHIRT); + +    // Go over any local material +  }  // this function sorts the faces from a getFaceList[getNumFaces] into a list of objects @@ -1020,11 +1030,11 @@ void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)  	}  } -LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id) +LLUUID LLLocalBitmapMgr::getWorldID(const LLUUID &tracking_id) const  {  	LLUUID world_id = LLUUID::null; -	for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++) +	for (local_list_citer iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)  	{  		LLLocalBitmap* unit = *iter;  		if (unit->getTrackingID() == tracking_id) @@ -1036,9 +1046,9 @@ LLUUID LLLocalBitmapMgr::getWorldID(LLUUID tracking_id)  	return world_id;  } -bool LLLocalBitmapMgr::isLocal(const LLUUID world_id) +bool LLLocalBitmapMgr::isLocal(const LLUUID &world_id) const  { -    for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++) +    for (local_list_citer iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)      {          LLLocalBitmap* unit = *iter;          if (unit->getWorldID() == world_id) @@ -1049,11 +1059,11 @@ bool LLLocalBitmapMgr::isLocal(const LLUUID world_id)      return false;  } -std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id) +std::string LLLocalBitmapMgr::getFilename(const LLUUID &tracking_id) const  {  	std::string filename = ""; -	for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++) +	for (local_list_citer iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++)  	{  		LLLocalBitmap* unit = *iter;  		if (unit->getTrackingID() == tracking_id) @@ -1065,6 +1075,20 @@ std::string LLLocalBitmapMgr::getFilename(LLUUID tracking_id)  	return filename;  } +boost::signals2::connection LLLocalBitmapMgr::setOnChangedCallback(const LLUUID tracking_id, const LLLocalBitmap::LLLocalTextureCallback &cb) +{ +    for (local_list_iter iter = mBitmapList.begin(); iter != mBitmapList.end(); iter++) +    { +        LLLocalBitmap* unit = *iter; +        if (unit->getTrackingID() == tracking_id) +        { +            unit->setChangedCallback(cb); +        } +    } + +    return boost::signals2::connection(); +} +  void LLLocalBitmapMgr::feedScrollList(LLScrollListCtrl* ctrl)  {  	if (ctrl) diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h index bb026ed3aa..f36fd6d320 100644 --- a/indra/newview/lllocalbitmaps.h +++ b/indra/newview/lllocalbitmaps.h @@ -44,11 +44,11 @@ class LLLocalBitmap  		~LLLocalBitmap();  	public: /* accessors */ -		std::string	getFilename(); -		std::string	getShortName(); -		LLUUID		getTrackingID(); -		LLUUID		getWorldID(); -		bool		getValid(); +		std::string	getFilename() const; +		std::string	getShortName() const; +		LLUUID		getTrackingID() const; +		LLUUID		getWorldID() const; +		bool		getValid() const;  	public: /* self update public section */  		enum EUpdateType @@ -59,9 +59,14 @@ class LLLocalBitmap  		bool updateSelf(EUpdateType = UT_REGUPDATE); +        typedef boost::signals2::signal<void(const LLUUID& old_id, +                                             const LLUUID& new_id)> LLLocalTextureChangedSignal; +        typedef LLLocalTextureChangedSignal::slot_type LLLocalTextureCallback; +        boost::signals2::connection setChangedCallback(const LLLocalTextureCallback& cb); +  	private: /* self update private section */  		bool decodeBitmap(LLPointer<LLImageRaw> raw); -		void replaceIDs(LLUUID old_id, LLUUID new_id); +        void replaceIDs(const LLUUID &old_id, LLUUID new_id);  		std::vector<LLViewerObject*> prepUpdateObjects(LLUUID old_id, U32 channel);  		void updateUserPrims(LLUUID old_id, LLUUID new_id, U32 channel);  		void updateUserVolumes(LLUUID old_id, LLUUID new_id, U32 channel); @@ -93,6 +98,7 @@ class LLLocalBitmap  		EExtension  mExtension;  		ELinkStatus mLinkStatus;  		S32         mUpdateRetries; +        LLLocalTextureChangedSignal	mChangedSignal;  }; @@ -120,10 +126,11 @@ public:  	void         delUnit(LLUUID tracking_id);  	bool 		checkTextureDimensions(std::string filename); -	LLUUID       getWorldID(LLUUID tracking_id); -    bool         isLocal(LLUUID world_id); -	std::string  getFilename(LLUUID tracking_id); -     +	LLUUID       getWorldID(const LLUUID &tracking_id) const; +    bool         isLocal(const LLUUID& world_id) const; +	std::string  getFilename(const LLUUID &tracking_id) const; +    boost::signals2::connection setOnChangedCallback(const LLUUID tracking_id, const LLLocalBitmap::LLLocalTextureCallback& cb); +  	void         feedScrollList(LLScrollListCtrl* ctrl);  	void         doUpdates();  	void         setNeedsRebake(); @@ -134,6 +141,7 @@ private:  	LLLocalBitmapTimer           mTimer;  	bool                         mNeedsRebake;  	typedef std::list<LLLocalBitmap*>::iterator local_list_iter; +    typedef std::list<LLLocalBitmap*>::const_iterator local_list_citer;  };  #endif diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp index 7a65231a2d..63d86cda61 100644 --- a/indra/newview/llmaterialeditor.cpp +++ b/indra/newview/llmaterialeditor.cpp @@ -532,6 +532,11 @@ void LLMaterialEditor::onClose(bool app_quitting)          mSelectionUpdateSlot.disconnect();      } +    for (boost::signals2::connection& cn : mTextureChangesUpdates) +    { +        cn.disconnect(); +    } +      LLPreview::onClose(app_quitting);  } @@ -861,6 +866,47 @@ void LLMaterialEditor::setEnableEditing(bool can_modify)      mNormalTextureCtrl->setEnabled(can_modify);  } +void LLMaterialEditor::replaceTexture(const LLUUID& old_id, const LLUUID& new_id) +{ +    // todo: might be a good idea to set mBaseColorTextureUploadId here +    // and when texturectrl picks a local texture +    if (getBaseColorId() == old_id) +    { +        mBaseColorTextureCtrl->setValue(new_id); +    } +    if (mBaseColorTextureCtrl->getDefaultImageAssetID() == old_id) +    { +        mBaseColorTextureCtrl->setDefaultImageAssetID(new_id); +    } + +    if (getMetallicRoughnessId() == old_id) +    { +        mMetallicTextureCtrl->setValue(new_id); +    } +    if (mMetallicTextureCtrl->getDefaultImageAssetID() == old_id) +    { +        mMetallicTextureCtrl->setDefaultImageAssetID(new_id); +    } + +    if (getEmissiveId() == old_id) +    { +        mEmissiveTextureCtrl->setValue(new_id); +    } +    if (mEmissiveTextureCtrl->getDefaultImageAssetID() == old_id) +    { +        mEmissiveTextureCtrl->setDefaultImageAssetID(new_id); +    } + +    if (getNormalId() == old_id) +    { +        mNormalTextureCtrl->setValue(new_id); +    } +    if (mNormalTextureCtrl->getDefaultImageAssetID() == old_id) +    { +        mNormalTextureCtrl->setDefaultImageAssetID(new_id); +    } +} +  void LLMaterialEditor::onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag)  {      if (!mIsOverride) @@ -911,6 +957,20 @@ void LLMaterialEditor::onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dir              // the texture that is not in use              childSetValue(upload_fee_ctrl_name, getString("no_upload_fee_string"));          } + +        LLTextureCtrl* tex_ctrl = (LLTextureCtrl*)ctrl; +        if (tex_ctrl->isImageLocal()) +        { +            // Theoretically LLSD should be smart enough to not need this, but for extra safety +            LLSD key = llsd_clone(getKey()); +            // Subscribe material editor to local texture updates +            mTextureChangesUpdates.push_back( +                LLLocalBitmapMgr::getInstance()->setOnChangedCallback(tex_ctrl->getLocalTrackingID(), +                                                                      [this](const LLUUID &old_id, const LLUUID& new_id) +                                                                      { +                                                                          replaceTexture(old_id, new_id); +                                                                      })); +        }      }      markChangesUnsaved(dirty_flag); @@ -923,6 +983,17 @@ void LLMaterialEditor::onCancelCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_      applyToSelection();  } +void update_local_texture(LLUICtrl* ctrl, LLGLTFMaterial* mat) +{ +    LLTextureCtrl* tex_ctrl = (LLTextureCtrl*)ctrl; +    if (tex_ctrl->isImageLocal()) +    { +        mat->setHasLocalTextures(true); +        // Todo: subscrive material for an update +        // tex_ctrl->getLocalTrackingID(); +    } +} +  void LLMaterialEditor::onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag)  {      mUnsavedChanges |= dirty_flag; @@ -958,21 +1029,25 @@ void LLMaterialEditor::onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_                      case MATERIAL_BASE_COLOR_TEX_DIRTY:                      {                          nodep->mSavedGLTFOverrideMaterials[te]->setBaseColorId(mCtrl->getValue().asUUID(), true); +                        update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());                          break;                      }                      case MATERIAL_METALLIC_ROUGHTNESS_TEX_DIRTY:                      {                          nodep->mSavedGLTFOverrideMaterials[te]->setOcclusionRoughnessMetallicId(mCtrl->getValue().asUUID(), true); +                        update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());                          break;                      }                      case MATERIAL_EMISIVE_TEX_DIRTY:                      {                          nodep->mSavedGLTFOverrideMaterials[te]->setEmissiveId(mCtrl->getValue().asUUID(), true); +                        update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());                          break;                      }                      case MATERIAL_NORMAL_TEX_DIRTY:                      {                          nodep->mSavedGLTFOverrideMaterials[te]->setNormalId(mCtrl->getValue().asUUID(), true); +                        update_local_texture(mCtrl, nodep->mSavedGLTFOverrideMaterials[te].get());                          break;                      }                      // Colors diff --git a/indra/newview/llmaterialeditor.h b/indra/newview/llmaterialeditor.h index 1c40fcc348..4af68adce2 100644 --- a/indra/newview/llmaterialeditor.h +++ b/indra/newview/llmaterialeditor.h @@ -219,6 +219,7 @@ class LLMaterialEditor : public LLPreview, public LLVOInventoryListener      void setCanSave(bool value);      void setEnableEditing(bool can_modify); +    void replaceTexture(const LLUUID& old_id, const LLUUID& new_id); // Local texture support      void onCommitTexture(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);      void onCancelCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag);      void onSelectCtrl(LLUICtrl* ctrl, const LLSD& data, S32 dirty_flag); @@ -306,5 +307,6 @@ private:      static bool mOverrideInProgress;      static bool mSelectionNeedsUpdate;      boost::signals2::connection mSelectionUpdateSlot; +    std::list <boost::signals2::connection> mTextureChangesUpdates;  }; diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 1a4546875d..c2c9139c19 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -1959,7 +1959,7 @@ void LLPanelProfileSecondLife::onShowTexturePicker()              mFloaterTexturePickerHandle = texture_floaterp->getHandle(); -            texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&) +            texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&, const LLUUID&)              {                  if (op == LLTextureCtrl::TEXTURE_SELECT)                  { @@ -2285,7 +2285,7 @@ void LLPanelProfileFirstLife::onChangePhoto()              mFloaterTexturePickerHandle = texture_floaterp->getHandle(); -            texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&) +            texture_floaterp->setOnFloaterCommitCallback([this](LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID&, const LLUUID&)              {                  if (op == LLTextureCtrl::TEXTURE_SELECT)                  { diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 10667b02d9..3988bceb4e 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -846,6 +846,7 @@ void LLFloaterTexturePicker::commitCallback(LLTextureCtrl::ETexturePickOp op)      }      LLUUID asset_id = mImageAssetID;      LLUUID inventory_id; +    LLUUID tracking_id;      LLPickerSource mode = (LLPickerSource)mModeSelector->getValue().asInteger();      switch (mode) @@ -886,16 +887,16 @@ void LLFloaterTexturePicker::commitCallback(LLTextureCtrl::ETexturePickOp op)                  if (!mLocalScrollCtrl->getAllSelected().empty())                  {                      LLSD data = mLocalScrollCtrl->getFirstSelected()->getValue(); -                    LLUUID temp_id = data["id"]; +                    tracking_id = data["id"];                      S32 asset_type = data["type"].asInteger();                      if (LLAssetType::AT_MATERIAL == asset_type)                      { -                        asset_id = LLLocalGLTFMaterialMgr::getInstance()->getWorldID(temp_id); +                        asset_id = LLLocalGLTFMaterialMgr::getInstance()->getWorldID(tracking_id);                      }                      else                      { -                        asset_id = LLLocalBitmapMgr::getInstance()->getWorldID(temp_id); +                        asset_id = LLLocalBitmapMgr::getInstance()->getWorldID(tracking_id);                      }                  }                  else @@ -912,13 +913,13 @@ void LLFloaterTexturePicker::commitCallback(LLTextureCtrl::ETexturePickOp op)              break;      } -    mOnFloaterCommitCallback(op, mode, asset_id, inventory_id); +    mOnFloaterCommitCallback(op, mode, asset_id, inventory_id, tracking_id);  }  void LLFloaterTexturePicker::commitCancel()  {  	if (!mNoCopyTextureSelected && mOnFloaterCommitCallback && mCanApply)  	{ -		mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, mOriginalImageAssetID, LLUUID::null); +		mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, mOriginalImageAssetID, LLUUID::null, LLUUID::null);  	}  } @@ -972,7 +973,7 @@ void LLFloaterTexturePicker::onBtnCancel(void* userdata)  	self->setImageID( self->mOriginalImageAssetID );  	if (self->mOnFloaterCommitCallback)  	{ -		self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, self->mOriginalImageAssetID, LLUUID::null); +		self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CANCEL, PICKER_UNKNOWN, self->mOriginalImageAssetID, LLUUID::null, LLUUID::null);  	}  	self->mViewModel->resetDirty();  	self->closeFloater(); @@ -1177,7 +1178,7 @@ void LLFloaterTexturePicker::onLocalScrollCommit(LLUICtrl* ctrl, void* userdata)  		{  			if (self->mOnFloaterCommitCallback)  			{ -				self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CHANGE, PICKER_LOCAL, inworld_id, LLUUID::null); +				self->mOnFloaterCommitCallback(LLTextureCtrl::TEXTURE_CHANGE, PICKER_LOCAL, inworld_id, LLUUID::null, tracking_id);  			}  		}  	} @@ -1804,7 +1805,7 @@ void LLTextureCtrl::showPicker(BOOL take_focus)  		}  		if (texture_floaterp)  		{ -			texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLTextureCtrl::onFloaterCommit, this, _1, _2, _3, _4)); +			texture_floaterp->setOnFloaterCommitCallback(boost::bind(&LLTextureCtrl::onFloaterCommit, this, _1, _2, _3, _4, _5));  		}  		if (texture_floaterp)  		{ @@ -1928,7 +1929,7 @@ void LLTextureCtrl::onFloaterClose()  	mFloaterHandle.markDead();  } -void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inv_id) +void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inv_id, const LLUUID& tracking_id)  {      LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get(); @@ -1951,16 +1952,23 @@ void LLTextureCtrl::onFloaterCommit(ETexturePickOp op, LLPickerSource source, co                  case PICKER_INVENTORY:                      mImageItemID = inv_id;                      mImageAssetID = asset_id; +                    mLocalTrackingID.setNull();                      break;                  case PICKER_BAKE: +                    mImageItemID = LLUUID::null; +                    mImageAssetID = asset_id; +                    mLocalTrackingID.setNull(); +                    break;                  case PICKER_LOCAL:                      mImageItemID = LLUUID::null;                      mImageAssetID = asset_id; +                    mLocalTrackingID = tracking_id;                      break;                  case PICKER_UNKNOWN:                  default:                      mImageItemID = floaterp->findItemID(asset_id, FALSE);                      mImageAssetID = asset_id; +                    mLocalTrackingID.setNull();                      break;              } @@ -2018,6 +2026,7 @@ void LLTextureCtrl::setImageAssetID( const LLUUID& asset_id )  	{  		mImageItemID.setNull();  		mImageAssetID = asset_id; +        mLocalTrackingID.setNull();  		LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();  		if( floaterp && getEnabled() )  		{ diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index 180c4fa4b8..c47df5accb 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -200,7 +200,11 @@ public:  	void			closeDependentFloater();  	void			onFloaterClose(); -	void			onFloaterCommit(ETexturePickOp op, LLPickerSource source, const LLUUID& local_id, const LLUUID& inv_id); +    void			onFloaterCommit(ETexturePickOp op, +                                    LLPickerSource source, +                                    const LLUUID& local_id, +                                    const LLUUID& inv_id, +                                    const LLUUID& tracking_id);  	// This call is returned when a drag is detected. Your callback  	// should return TRUE if the drag is acceptable. @@ -230,6 +234,9 @@ public:      void setInventoryPickType(EPickInventoryType type);      EPickInventoryType getInventoryPickType() { return mInventoryPickType; }; +    bool isImageLocal() { return mLocalTrackingID.notNull(); } +    LLUUID getLocalTrackingID() { return mLocalTrackingID; } +  private:  	BOOL allowDrop(LLInventoryItem* item, EDragAndDropType cargo_type, std::string& tooltip_msg);  	BOOL doDrop(LLInventoryItem* item); @@ -247,6 +254,7 @@ private:  	LLUUID					 	mImageAssetID;  	LLUUID					 	mDefaultImageAssetID;  	LLUUID					 	mBlankImageAssetID; +    LLUUID						mLocalTrackingID;  	LLUIImagePtr				mFallbackImage;  	std::string					mDefaultImageName;  	LLHandle<LLFloater>			mFloaterHandle; @@ -272,7 +280,7 @@ private:  //////////////////////////////////////////////////////////////////////////////////////////  // LLFloaterTexturePicker -typedef boost::function<void(LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inventory_id)> floater_commit_callback; +typedef boost::function<void(LLTextureCtrl::ETexturePickOp op, LLPickerSource source, const LLUUID& asset_id, const LLUUID& inventory_id, const LLUUID& tracking_id)> floater_commit_callback;  typedef boost::function<void()> floater_close_callback;  typedef boost::function<void(const LLUUID& asset_id)> set_image_asset_id_callback;  typedef boost::function<void(LLPointer<LLViewerTexture> texture)> set_on_update_image_stats_callback; | 
