572 lines
19 KiB
C++
572 lines
19 KiB
C++
/**
|
|
* @file llfloaterregioninfo.h
|
|
* @author Aaron Brashears
|
|
* @brief Declaration of the region info and controls floater and panels.
|
|
*
|
|
* $LicenseInfo:firstyear=2004&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2010, Linden Research, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation;
|
|
* version 2.1 of the License only.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*
|
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#ifndef LL_LLFLOATERREGIONINFO_H
|
|
#define LL_LLFLOATERREGIONINFO_H
|
|
|
|
#include <vector>
|
|
#include "llagent.h"
|
|
#include "llassettype.h"
|
|
#include "llfloater.h"
|
|
#include "llhost.h"
|
|
#include "llpanel.h"
|
|
#include "llextendedstatus.h"
|
|
#include "llpanelenvironment.h"
|
|
#include "llvlcomposition.h"
|
|
|
|
#include "lleventcoro.h"
|
|
|
|
class LLAvatarName;
|
|
class LLDispatcher;
|
|
class LLLineEditor;
|
|
class LLMessageSystem;
|
|
class LLPanelRegionInfo;
|
|
class LLTabContainer;
|
|
class LLViewerRegion;
|
|
class LLViewerTextEditor;
|
|
class LLInventoryItem;
|
|
class LLCheckBoxCtrl;
|
|
class LLComboBox;
|
|
class LLNameListCtrl;
|
|
class LLRadioGroup;
|
|
class LLSliderCtrl;
|
|
class LLSpinCtrl;
|
|
class LLTextBox;
|
|
class LLTextureCtrl;
|
|
|
|
class LLPanelRegionGeneralInfo;
|
|
// <FS:CR> Aurora Sim - Region Settings Panel
|
|
class LLPanelRegionOpenSettingsInfo;
|
|
// </FS:CR> Aurora Sim - Region Settings Panel
|
|
class LLPanelRegionDebugInfo;
|
|
class LLPanelRegionTerrainInfo;
|
|
class LLPanelEstateInfo;
|
|
class LLPanelEstateCovenant;
|
|
class LLPanelExperienceListEditor;
|
|
class LLPanelExperiences;
|
|
class LLPanelRegionExperiences;
|
|
class LLPanelEstateAccess;
|
|
class LLPanelRegionEnvironment;
|
|
|
|
class LLEventTimer;
|
|
|
|
class LLFloaterRegionInfo : public LLFloater
|
|
{
|
|
friend class LLFloaterReg;
|
|
public:
|
|
|
|
|
|
void onOpen(const LLSD& key) override;
|
|
void onClose(bool app_quitting) override;
|
|
bool postBuild() override;
|
|
|
|
static void processEstateOwnerRequest(LLMessageSystem* msg, void**);
|
|
|
|
// get and process region info if necessary.
|
|
static void processRegionInfo(LLMessageSystem* msg);
|
|
static void sRefreshFromRegion(LLViewerRegion* region);
|
|
|
|
static const LLUUID& getLastInvoice() { return sRequestInvoice; }
|
|
static void nextInvoice() { sRequestInvoice.generate(); }
|
|
//static S32 getSerial() { return sRequestSerial; }
|
|
//static void incrementSerial() { sRequestSerial++; }
|
|
|
|
static LLPanelEstateInfo* getPanelEstate();
|
|
static LLPanelEstateAccess* getPanelAccess();
|
|
static LLPanelEstateCovenant* getPanelCovenant();
|
|
static LLPanelRegionTerrainInfo* getPanelRegionTerrain();
|
|
static LLPanelRegionExperiences* getPanelExperiences();
|
|
static LLPanelRegionGeneralInfo* getPanelGeneral();
|
|
static LLPanelRegionEnvironment* getPanelEnvironment();
|
|
// <FS:CR> Aurora Sim - Region Settings Panel
|
|
static LLPanelRegionOpenSettingsInfo* getPanelOpenSettings();
|
|
// </FS:CR> Aurora Sim - Region Settings Panel
|
|
|
|
// from LLPanel
|
|
void refresh() override;
|
|
|
|
void onRegionChanged();
|
|
void requestRegionInfo();
|
|
void enableTopButtons();
|
|
void disableTopButtons();
|
|
|
|
private:
|
|
|
|
LLFloaterRegionInfo(const LLSD& seed);
|
|
~LLFloaterRegionInfo();
|
|
|
|
protected:
|
|
void onTabSelected(const LLSD& param);
|
|
void disableTabCtrls();
|
|
void refreshFromRegion(LLViewerRegion* region);
|
|
void onGodLevelChange(U8 god_level);
|
|
|
|
// member data
|
|
LLTabContainer* mTab;
|
|
typedef std::vector<LLPanelRegionInfo*> info_panels_t;
|
|
info_panels_t mInfoPanels;
|
|
LLPanelRegionEnvironment *mEnvironmentPanel;
|
|
//static S32 sRequestSerial; // serial # of last EstateOwnerRequest
|
|
static LLUUID sRequestInvoice;
|
|
|
|
private:
|
|
LLAgent::god_level_change_slot_t mGodLevelChangeSlot;
|
|
boost::signals2::connection mRegionChangedCallback;
|
|
};
|
|
|
|
|
|
// Base class for all region information panels.
|
|
class LLPanelRegionInfo : public LLPanel
|
|
{
|
|
public:
|
|
LLPanelRegionInfo();
|
|
|
|
void onBtnSet();
|
|
void onChangeChildCtrl(LLUICtrl* ctrl);
|
|
void onChangeAnything();
|
|
static void onChangeText(LLLineEditor* caller, void* user_data);
|
|
|
|
virtual bool refreshFromRegion(LLViewerRegion* region);
|
|
virtual bool estateUpdate(LLMessageSystem* msg) { return true; }
|
|
|
|
bool postBuild() override;
|
|
virtual void updateChild(LLUICtrl* child_ctrl);
|
|
|
|
void enableButton(const std::string& btn_name, bool enable = true);
|
|
void disableButton(const std::string& btn_name);
|
|
|
|
void onClickManageTelehub();
|
|
void onClickManageRestartSchedule();
|
|
|
|
protected:
|
|
void initCtrl(const std::string& name);
|
|
template<typename CTRL> void initAndSetCtrl(CTRL*& ctrl, const std::string& name);
|
|
void initAndSetTexCtrl(LLTextureCtrl*& ctrl, const std::string& name);
|
|
|
|
// Returns true if update sent and apply button should be
|
|
// disabled.
|
|
virtual bool sendUpdate() { return true; }
|
|
|
|
typedef std::vector<std::string> strings_t;
|
|
//typedef std::vector<U32> integers_t;
|
|
void sendEstateOwnerMessage(
|
|
LLMessageSystem* msg,
|
|
const std::string& request,
|
|
const LLUUID& invoice,
|
|
const strings_t& strings);
|
|
|
|
|
|
// member data
|
|
LLHost mHost;
|
|
LLHandle<LLFloater> mFloaterRestartScheduleHandle;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Actual panels start here
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// <FS:CR> Aurora Sim - Region Settings Panel
|
|
class LLPanelRegionOpenSettingsInfo : public LLPanelRegionInfo
|
|
{
|
|
public:
|
|
LLPanelRegionOpenSettingsInfo()
|
|
: LLPanelRegionInfo() {}
|
|
~LLPanelRegionOpenSettingsInfo() {}
|
|
|
|
virtual bool refreshFromRegion(LLViewerRegion* region);
|
|
|
|
// LLPanel
|
|
virtual bool postBuild();
|
|
|
|
protected:
|
|
static void onClickOrs(void* userdata);
|
|
static void onClickHelp(void* data);
|
|
};
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// </FS:CR> Aurora Sim - Region Settings Panel
|
|
|
|
class LLPanelRegionGeneralInfo : public LLPanelRegionInfo
|
|
{
|
|
|
|
public:
|
|
LLPanelRegionGeneralInfo()
|
|
: LLPanelRegionInfo() {}
|
|
~LLPanelRegionGeneralInfo() {}
|
|
|
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
|
|
|
bool postBuild() override;
|
|
|
|
void onBtnSet();
|
|
void setObjBonusFactor(F32 object_bonus_factor) {mObjBonusFactor = object_bonus_factor;}
|
|
|
|
protected:
|
|
bool sendUpdate() override;
|
|
void onClickKick();
|
|
void onKickCommit(const uuid_vec_t& ids);
|
|
static void onClickKickAll(void* userdata);
|
|
bool onKickAllCommit(const LLSD& notification, const LLSD& response);
|
|
static void onClickMessage(void* userdata);
|
|
bool onMessageCommit(const LLSD& notification, const LLSD& response);
|
|
bool onChangeObjectBonus(const LLSD& notification, const LLSD& response);
|
|
|
|
F32 mObjBonusFactor;
|
|
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class LLPanelRegionDebugInfo : public LLPanelRegionInfo
|
|
{
|
|
public:
|
|
LLPanelRegionDebugInfo()
|
|
: LLPanelRegionInfo(), mTargetAvatar() {}
|
|
~LLPanelRegionDebugInfo() {}
|
|
|
|
bool postBuild() override;
|
|
|
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
|
|
|
protected:
|
|
bool sendUpdate() override;
|
|
|
|
void onClickChooseAvatar();
|
|
void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName> names);
|
|
static void onClickReturn(void *);
|
|
bool callbackReturn(const LLSD& notification, const LLSD& response);
|
|
static void onClickTopColliders(void*);
|
|
static void onClickTopScripts(void*);
|
|
static void onClickRestart(void* data);
|
|
bool callbackRestart(const LLSD& notification, const LLSD& response, const LLSD& seconds); // Ansariel, added seconds for FIRE-1073
|
|
static void onClickCancelRestart(void* data);
|
|
static void onClickDebugConsole(void* data);
|
|
|
|
private:
|
|
LLUUID mTargetAvatar;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class LLPanelRegionTerrainInfo : public LLPanelRegionInfo
|
|
{
|
|
LOG_CLASS(LLPanelRegionTerrainInfo);
|
|
|
|
public:
|
|
LLPanelRegionTerrainInfo();
|
|
~LLPanelRegionTerrainInfo() {}
|
|
|
|
bool postBuild() override;
|
|
|
|
bool refreshFromRegion(LLViewerRegion* region) override; // refresh local settings from region update from simulator
|
|
void setEnvControls(bool available); // Whether environment settings are available for this region
|
|
|
|
bool validateTextureSizes();
|
|
bool validateMaterials();
|
|
bool validateTextureHeights();
|
|
|
|
//static void onChangeAnything(LLUICtrl* ctrl, void* userData); // callback for any change, to enable commit button
|
|
|
|
void onSelectMaterialType();
|
|
void updateForMaterialType();
|
|
|
|
static void onClickDownloadRaw(void*);
|
|
static void onClickUploadRaw(void*);
|
|
// <FS:Ansariel> Threaded filepickers
|
|
void onDownloadRawFilepickerCB(const std::vector<std::string>& filenames);
|
|
void onUploadRawFilepickerCB(const std::vector<std::string>& filenames);
|
|
// </FS:Ansariel>
|
|
static void onClickBakeTerrain(void*);
|
|
bool callbackBakeTerrain(const LLSD& notification, const LLSD& response);
|
|
bool callbackTextureHeights(const LLSD& notification, const LLSD& response);
|
|
void callbackMaterialCommit(S32 index);
|
|
|
|
protected:
|
|
bool sendUpdate() override;
|
|
|
|
void initMaterialCtrl(LLTextureCtrl*& ctrl, const std::string& name, S32 index);
|
|
|
|
private:
|
|
bool mConfirmedTextureHeights;
|
|
bool mAskedTextureHeights;
|
|
LLCheckBoxCtrl* mMaterialTypeCtrl = nullptr;
|
|
LLTextureCtrl* mTextureDetailCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
LLTextureCtrl* mMaterialDetailCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
|
|
LLUUID mLastSetTextures[LLTerrainMaterials::ASSET_COUNT];
|
|
LLUUID mLastSetMaterials[LLTerrainMaterials::ASSET_COUNT];
|
|
|
|
LLSpinCtrl* mMaterialScaleUCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
LLSpinCtrl* mMaterialScaleVCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
LLSpinCtrl* mMaterialRotationCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
LLSpinCtrl* mMaterialOffsetUCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
LLSpinCtrl* mMaterialOffsetVCtrl[LLTerrainMaterials::ASSET_COUNT];
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class LLPanelEstateInfo : public LLPanelRegionInfo
|
|
{
|
|
public:
|
|
static void initDispatch(LLDispatcher& dispatch);
|
|
|
|
void onChangeFixedSun();
|
|
void onChangeUseGlobalTime();
|
|
void onChangeAccessOverride();
|
|
|
|
void onClickEditSky();
|
|
void onClickEditSkyHelp();
|
|
void onClickEditDayCycle();
|
|
void onClickEditDayCycleHelp();
|
|
|
|
void onClickKickUser();
|
|
|
|
|
|
bool kickUserConfirm(const LLSD& notification, const LLSD& response);
|
|
|
|
void onKickUserCommit(const uuid_vec_t& ids);
|
|
static void onClickMessageEstate(void* data);
|
|
bool onMessageCommit(const LLSD& notification, const LLSD& response);
|
|
|
|
LLPanelEstateInfo();
|
|
~LLPanelEstateInfo();
|
|
|
|
void updateControls(LLViewerRegion* region);
|
|
|
|
static void updateEstateName(const std::string& name);
|
|
static void updateEstateOwnerName(const std::string& name);
|
|
|
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
|
bool estateUpdate(LLMessageSystem* msg) override;
|
|
|
|
bool postBuild() override;
|
|
void updateChild(LLUICtrl* child_ctrl) override;
|
|
void refresh() override;
|
|
|
|
void refreshFromEstate();
|
|
|
|
static bool isLindenEstate();
|
|
|
|
const std::string getOwnerName() const;
|
|
void setOwnerName(const std::string& name);
|
|
|
|
protected:
|
|
bool sendUpdate() override;
|
|
// confirmation dialog callback
|
|
bool callbackChangeLindenEstate(const LLSD& notification, const LLSD& response);
|
|
|
|
void commitEstateAccess();
|
|
void commitEstateManagers();
|
|
|
|
bool checkSunHourSlider(LLUICtrl* child_ctrl);
|
|
|
|
U32 mEstateID;
|
|
boost::signals2::connection mEstateInfoCommitConnection;
|
|
boost::signals2::connection mEstateInfoUpdateConnection;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
class LLPanelEstateCovenant : public LLPanelRegionInfo
|
|
{
|
|
public:
|
|
LLPanelEstateCovenant();
|
|
~LLPanelEstateCovenant() {}
|
|
|
|
bool postBuild() override;
|
|
void updateChild(LLUICtrl* child_ctrl) override;
|
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
|
bool estateUpdate(LLMessageSystem* msg) override;
|
|
|
|
// LLView overrides
|
|
bool handleDragAndDrop(S32 x, S32 y, MASK mask,
|
|
bool drop, EDragAndDropType cargo_type,
|
|
void *cargo_data, EAcceptance *accept,
|
|
std::string& tooltip_msg) override;
|
|
static bool confirmChangeCovenantCallback(const LLSD& notification, const LLSD& response);
|
|
static void resetCovenantID(void* userdata);
|
|
static bool confirmResetCovenantCallback(const LLSD& notification, const LLSD& response);
|
|
void sendChangeCovenantID(const LLUUID &asset_id);
|
|
void loadInvItem(LLInventoryItem *itemp);
|
|
static void onLoadComplete(const LLUUID& asset_uuid,
|
|
LLAssetType::EType type,
|
|
void* user_data, S32 status, LLExtStat ext_status);
|
|
|
|
// Accessor functions
|
|
static void updateCovenant(const LLTextBase* source, const LLUUID& asset_id);
|
|
static void updateCovenantText(const std::string& string, const LLUUID& asset_id);
|
|
static void updateEstateName(const std::string& name);
|
|
static void updateLastModified(const std::string& text);
|
|
static void updateEstateOwnerName(const std::string& name);
|
|
|
|
const LLUUID& getCovenantID() const { return mCovenantID; }
|
|
void setCovenantID(const LLUUID& id) { mCovenantID = id; }
|
|
std::string getEstateName() const;
|
|
void setEstateName(const std::string& name);
|
|
std::string getOwnerName() const;
|
|
void setOwnerName(const std::string& name);
|
|
void setCovenantTextEditor(const std::string& text);
|
|
|
|
typedef enum e_asset_status
|
|
{
|
|
ASSET_ERROR,
|
|
ASSET_UNLOADED,
|
|
ASSET_LOADING,
|
|
ASSET_LOADED
|
|
} EAssetStatus;
|
|
|
|
protected:
|
|
bool sendUpdate() override;
|
|
LLTextBox* mEstateNameText;
|
|
LLTextBox* mEstateOwnerText;
|
|
LLTextBox* mLastModifiedText;
|
|
// CovenantID from sim
|
|
LLUUID mCovenantID;
|
|
LLViewerTextEditor* mEditor;
|
|
EAssetStatus mAssetStatus;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
class LLPanelRegionExperiences : public LLPanelRegionInfo
|
|
{
|
|
LOG_CLASS(LLPanelRegionExperiences);
|
|
|
|
public:
|
|
LLPanelRegionExperiences(){}
|
|
bool postBuild() override;
|
|
|
|
static bool experienceCoreConfirm(const LLSD& notification, const LLSD& response);
|
|
static void sendEstateExperienceDelta(U32 flags, const LLUUID& agent_id);
|
|
|
|
static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content);
|
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
|
void sendPurchaseRequest()const;
|
|
void processResponse( const LLSD& content );
|
|
|
|
protected:
|
|
bool sendUpdate() override;
|
|
|
|
private:
|
|
void refreshRegionExperiences();
|
|
|
|
static std::string regionCapabilityQuery(LLViewerRegion* region, const std::string &cap);
|
|
|
|
LLPanelExperienceListEditor* setupList(const char* control_name, U32 add_id, U32 remove_id);
|
|
static LLSD addIds( LLPanelExperienceListEditor* panel );
|
|
|
|
void itemChanged(U32 event_type, const LLUUID& id);
|
|
|
|
LLPanelExperienceListEditor* mTrusted;
|
|
LLPanelExperienceListEditor* mAllowed;
|
|
LLPanelExperienceListEditor* mBlocked;
|
|
LLUUID mDefaultExperience;
|
|
};
|
|
|
|
|
|
class LLPanelEstateAccess : public LLPanelRegionInfo
|
|
{
|
|
LOG_CLASS(LLPanelEstateAccess);
|
|
|
|
public:
|
|
LLPanelEstateAccess();
|
|
|
|
bool postBuild() override;
|
|
void updateChild(LLUICtrl* child_ctrl) override;
|
|
|
|
void updateControls(LLViewerRegion* region);
|
|
void updateLists();
|
|
|
|
void setPendingUpdate(bool pending) { mPendingUpdate = pending; }
|
|
bool getPendingUpdate() { return mPendingUpdate; }
|
|
|
|
bool refreshFromRegion(LLViewerRegion* region) override;
|
|
|
|
// <FS:Ansariel> Moved to public
|
|
static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
|
|
|
|
// <FS:PP> Ban and access lists export/import
|
|
void onClickExportEstateManagerList();
|
|
void onClickExportAllowedList();
|
|
void onClickExportAllowedGroupList();
|
|
void onClickExportBannedList();
|
|
void onClickExportList(LLNameListCtrl* list, const std::string& filename);
|
|
void exportListCallback(LLNameListCtrl* list, const std::vector<std::string>& filenames);
|
|
void onClickImportEstateManagerList();
|
|
void onClickImportAllowedList();
|
|
void onClickImportAllowedGroupList();
|
|
void onClickImportBannedList();
|
|
void onClickImportList(LLNameListCtrl* list);
|
|
void importListCallback(LLNameListCtrl* list, const std::vector<std::string>& filenames);
|
|
// </FS:PP> Ban and access lists export/import
|
|
|
|
private:
|
|
void onClickAddAllowedAgent();
|
|
void onClickRemoveAllowedAgent();
|
|
void onClickCopyAllowedList();
|
|
void onClickAddAllowedGroup();
|
|
void onClickRemoveAllowedGroup();
|
|
void onClickCopyAllowedGroupList();
|
|
void onClickAddBannedAgent();
|
|
void onClickRemoveBannedAgent();
|
|
void onClickCopyBannedList();
|
|
void onClickAddEstateManager();
|
|
void onClickRemoveEstateManager();
|
|
void onAllowedSearchEdit(const std::string& search_string);
|
|
void onAllowedGroupsSearchEdit(const std::string& search_string);
|
|
void onBannedSearchEdit(const std::string& search_string);
|
|
|
|
// Group picker callback is different, can't use core methods below
|
|
bool addAllowedGroup(const LLSD& notification, const LLSD& response);
|
|
void addAllowedGroup2(LLUUID id);
|
|
|
|
// Core methods for all above add/remove button clicks
|
|
static void accessAddCore(U32 operation_flag, const std::string& dialog_name);
|
|
static bool accessAddCore2(const LLSD& notification, const LLSD& response);
|
|
static void accessAddCore3(const uuid_vec_t& ids, std::vector<LLAvatarName> names, void* data);
|
|
|
|
static void accessRemoveCore(U32 operation_flag, const std::string& dialog_name, const std::string& list_ctrl_name);
|
|
static bool accessRemoveCore2(const LLSD& notification, const LLSD& response);
|
|
|
|
// used for both add and remove operations
|
|
static bool accessCoreConfirm(const LLSD& notification, const LLSD& response);
|
|
|
|
// Send the actual EstateOwnerRequest "estateaccessdelta" message
|
|
// <FS:Ansariel> Moved to public
|
|
//static void sendEstateAccessDelta(U32 flags, const LLUUID& agent_id);
|
|
|
|
static void requestEstateGetAccessCoro(std::string url);
|
|
|
|
void searchAgent(LLNameListCtrl* listCtrl, const std::string& search_string);
|
|
void copyListToClipboard(std::string list_name);
|
|
|
|
bool mPendingUpdate;
|
|
bool mCtrlsEnabled;
|
|
};
|
|
|
|
#endif
|