OpenSim compatible prim backup
This commit is contained in:
@@ -64,6 +64,7 @@ include_directories(
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(viewer_SOURCE_FILES
|
set(viewer_SOURCE_FILES
|
||||||
|
llviewerobjectbackup.cpp
|
||||||
slfloatermediafilter.cpp
|
slfloatermediafilter.cpp
|
||||||
floaterlocalassetbrowse.cpp
|
floaterlocalassetbrowse.cpp
|
||||||
aoremotectrl.cpp
|
aoremotectrl.cpp
|
||||||
@@ -533,6 +534,7 @@ set(viewer_HEADER_FILES
|
|||||||
CMakeLists.txt
|
CMakeLists.txt
|
||||||
ViewerInstall.cmake
|
ViewerInstall.cmake
|
||||||
|
|
||||||
|
llviewerobjectbackup.h
|
||||||
slfloatermediafilter.h
|
slfloatermediafilter.h
|
||||||
floaterlocalassetbrowse.h
|
floaterlocalassetbrowse.h
|
||||||
aoremotectrl.h
|
aoremotectrl.h
|
||||||
|
|||||||
@@ -9,6 +9,22 @@
|
|||||||
<string>settings_rlv.xml</string>
|
<string>settings_rlv.xml</string>
|
||||||
</array>
|
</array>
|
||||||
|
|
||||||
|
<key>FloaterObjectBackuptRect</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Rectangle for the object backup floater</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Rect</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<array>
|
||||||
|
<integer>0</integer>
|
||||||
|
<integer>0</integer>
|
||||||
|
<integer>0</integer>
|
||||||
|
<integer>0</integer>
|
||||||
|
</array>
|
||||||
|
</map>
|
||||||
|
|
||||||
<key>MediaEnableFilter</key>
|
<key>MediaEnableFilter</key>
|
||||||
<map>
|
<map>
|
||||||
|
|||||||
@@ -250,6 +250,7 @@
|
|||||||
#include "llavatarnamecache.h"
|
#include "llavatarnamecache.h"
|
||||||
#include "floaterao.h"
|
#include "floaterao.h"
|
||||||
#include "slfloatermediafilter.h"
|
#include "slfloatermediafilter.h"
|
||||||
|
#include "llviewerobjectbackup.h"
|
||||||
|
|
||||||
#include "hippogridmanager.h"
|
#include "hippogridmanager.h"
|
||||||
|
|
||||||
@@ -575,14 +576,6 @@ void handle_grab_texture(void*);
|
|||||||
BOOL enable_grab_texture(void*);
|
BOOL enable_grab_texture(void*);
|
||||||
void handle_dump_region_object_cache(void*);
|
void handle_dump_region_object_cache(void*);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOL menu_ui_enabled(void *user_data);
|
BOOL menu_ui_enabled(void *user_data);
|
||||||
BOOL menu_check_control( void* user_data);
|
BOOL menu_check_control( void* user_data);
|
||||||
void menu_toggle_variable( void* user_data );
|
void menu_toggle_variable( void* user_data );
|
||||||
@@ -2803,6 +2796,90 @@ class LLGoToObject : public view_listener_t
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
// Object backup
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class LLObjectEnableExport : public view_listener_t
|
||||||
|
{
|
||||||
|
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||||
|
{
|
||||||
|
LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
|
||||||
|
bool new_value = (object != NULL);
|
||||||
|
if (new_value)
|
||||||
|
{
|
||||||
|
struct ff : public LLSelectedNodeFunctor
|
||||||
|
{
|
||||||
|
ff(const LLSD& data) : LLSelectedNodeFunctor(), userdata(data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
const LLSD& userdata;
|
||||||
|
virtual bool apply(LLSelectNode* node)
|
||||||
|
{
|
||||||
|
// Note: the actual permission checking algorithm depends on the grid TOS and must be
|
||||||
|
// performed for each prim and texture. This is done later in llviewerobjectbackup.cpp.
|
||||||
|
// This means that even if the item is enabled in the menu, the export may fail should
|
||||||
|
// the permissions not be met for each exported asset. The permissions check below
|
||||||
|
// therefore only corresponds to the minimal permissions requirement common to all grids.
|
||||||
|
LLPermissions *item_permissions = node->mPermissions;
|
||||||
|
return (gAgent.getID() == item_permissions->getOwner() &&
|
||||||
|
(gAgent.getID() == item_permissions->getCreator() ||
|
||||||
|
(item_permissions->getMaskOwner() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ff * the_ff = new ff(userdata);
|
||||||
|
new_value = LLSelectMgr::getInstance()->getSelection()->applyToNodes(the_ff, false);
|
||||||
|
}
|
||||||
|
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class LLObjectExport : public view_listener_t
|
||||||
|
{
|
||||||
|
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||||
|
{
|
||||||
|
LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
|
||||||
|
if (!object) return true;
|
||||||
|
|
||||||
|
LLVOAvatar* avatar = find_avatar_from_object(object);
|
||||||
|
|
||||||
|
if (!avatar)
|
||||||
|
{
|
||||||
|
LLObjectBackup::getInstance()->exportObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class LLObjectEnableImport : public view_listener_t
|
||||||
|
{
|
||||||
|
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||||
|
{
|
||||||
|
gMenuHolder->findControl(userdata["control"].asString())->setValue(TRUE);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class LLObjectImport : public view_listener_t
|
||||||
|
{
|
||||||
|
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||||
|
{
|
||||||
|
LLObjectBackup::getInstance()->importObject(FALSE);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class LLObjectImportUpload : public view_listener_t
|
||||||
|
{
|
||||||
|
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||||
|
{
|
||||||
|
LLObjectBackup::getInstance()->importObject(TRUE);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
// Parcel freeze, eject, etc.
|
// Parcel freeze, eject, etc.
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
@@ -10254,22 +10331,6 @@ void initialize_menus()
|
|||||||
addMenu(new LLViewCheckRenderType(), "View.CheckRenderType");
|
addMenu(new LLViewCheckRenderType(), "View.CheckRenderType");
|
||||||
addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments");
|
addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// World menu
|
// World menu
|
||||||
addMenu(new LLWorldChat(), "World.Chat");
|
addMenu(new LLWorldChat(), "World.Chat");
|
||||||
addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
|
addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
|
||||||
@@ -10383,7 +10444,6 @@ void initialize_menus()
|
|||||||
addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse");
|
addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse");
|
||||||
addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse");
|
addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse");
|
||||||
// <edit>
|
// <edit>
|
||||||
//addMenu(new LLObjectImport(), "Object.Import");
|
|
||||||
addMenu(new LLObjectMeasure(), "Object.Measure");
|
addMenu(new LLObjectMeasure(), "Object.Measure");
|
||||||
addMenu(new LLObjectData(), "Object.Data");
|
addMenu(new LLObjectData(), "Object.Data");
|
||||||
addMenu(new LLScriptCount(), "Object.ScriptCount");
|
addMenu(new LLScriptCount(), "Object.ScriptCount");
|
||||||
@@ -10398,6 +10458,10 @@ void initialize_menus()
|
|||||||
addMenu(new LLObjectInspect(), "Object.Inspect");
|
addMenu(new LLObjectInspect(), "Object.Inspect");
|
||||||
// <dogmode> Visual mute, originally by Phox.
|
// <dogmode> Visual mute, originally by Phox.
|
||||||
addMenu(new LLObjectDerender(), "Object.DERENDER");
|
addMenu(new LLObjectDerender(), "Object.DERENDER");
|
||||||
|
addMenu(new LLObjectExport(), "Object.Export");
|
||||||
|
addMenu(new LLObjectImport(), "Object.Import");
|
||||||
|
addMenu(new LLObjectImportUpload(), "Object.ImportUpload");
|
||||||
|
|
||||||
|
|
||||||
addMenu(new LLObjectEnableOpen(), "Object.EnableOpen");
|
addMenu(new LLObjectEnableOpen(), "Object.EnableOpen");
|
||||||
addMenu(new LLObjectEnableTouch(), "Object.EnableTouch");
|
addMenu(new LLObjectEnableTouch(), "Object.EnableTouch");
|
||||||
@@ -10406,11 +10470,10 @@ void initialize_menus()
|
|||||||
addMenu(new LLObjectEnableWear(), "Object.EnableWear");
|
addMenu(new LLObjectEnableWear(), "Object.EnableWear");
|
||||||
addMenu(new LLObjectEnableReturn(), "Object.EnableReturn");
|
addMenu(new LLObjectEnableReturn(), "Object.EnableReturn");
|
||||||
addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse");
|
addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse");
|
||||||
// <edit>
|
|
||||||
//addMenu(new LLObjectEnableImport(), "Object.EnableImport");
|
|
||||||
// </edit>
|
|
||||||
addMenu(new LLObjectEnableMute(), "Object.EnableMute");
|
addMenu(new LLObjectEnableMute(), "Object.EnableMute");
|
||||||
addMenu(new LLObjectEnableBuy(), "Object.EnableBuy");
|
addMenu(new LLObjectEnableBuy(), "Object.EnableBuy");
|
||||||
|
addMenu(new LLObjectEnableExport(), "Object.EnableExport");
|
||||||
|
addMenu(new LLObjectEnableImport(), "Object.EnableImport");
|
||||||
|
|
||||||
/*addMenu(new LLObjectVisibleTouch(), "Object.VisibleTouch");
|
/*addMenu(new LLObjectVisibleTouch(), "Object.VisibleTouch");
|
||||||
addMenu(new LLObjectVisibleCustomTouch(), "Object.VisibleCustomTouch");
|
addMenu(new LLObjectVisibleCustomTouch(), "Object.VisibleCustomTouch");
|
||||||
|
|||||||
1197
indra/newview/llviewerobjectbackup.cpp
Executable file
1197
indra/newview/llviewerobjectbackup.cpp
Executable file
File diff suppressed because it is too large
Load Diff
176
indra/newview/llviewerobjectbackup.h
Executable file
176
indra/newview/llviewerobjectbackup.h
Executable file
@@ -0,0 +1,176 @@
|
|||||||
|
/**
|
||||||
|
* @file llviewerobjectbackup.h
|
||||||
|
*
|
||||||
|
* $LicenseInfo:firstyear=2007&license=viewergpl$
|
||||||
|
*
|
||||||
|
* Second Life Viewer Source Code
|
||||||
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||||
|
* to you under the terms of the GNU General Public License, version 2.0
|
||||||
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||||
|
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||||
|
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||||
|
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||||
|
*
|
||||||
|
* There are special exceptions to the terms and conditions of the GPL as
|
||||||
|
* it is applied to this Source Code. View the full text of the exception
|
||||||
|
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||||
|
* online at
|
||||||
|
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||||
|
*
|
||||||
|
* By copying, modifying or distributing this software, you acknowledge
|
||||||
|
* that you have read and understood your obligations described above,
|
||||||
|
* and agree to abide by those obligations.
|
||||||
|
*
|
||||||
|
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||||
|
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||||
|
* COMPLETENESS OR PERFORMANCE.
|
||||||
|
* $/LicenseInfo$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "llviewerinventory.h"
|
||||||
|
|
||||||
|
enum export_states {
|
||||||
|
EXPORT_INIT,
|
||||||
|
EXPORT_STRUCTURE,
|
||||||
|
EXPORT_TEXTURES,
|
||||||
|
EXPORT_LLSD,
|
||||||
|
EXPORT_DONE,
|
||||||
|
EXPORT_FAILED
|
||||||
|
};
|
||||||
|
|
||||||
|
class LLObjectBackup : public LLFloater
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~LLObjectBackup();
|
||||||
|
|
||||||
|
// Floater stuff
|
||||||
|
virtual void show(bool exporting);
|
||||||
|
virtual void draw();
|
||||||
|
virtual void onClose(bool app_quitting);
|
||||||
|
|
||||||
|
// Static accessor
|
||||||
|
static LLObjectBackup* getInstance();
|
||||||
|
|
||||||
|
// Export idle callback
|
||||||
|
static void exportWorker(void *userdata);
|
||||||
|
|
||||||
|
// Import entry point
|
||||||
|
void importObject(bool upload=FALSE);
|
||||||
|
|
||||||
|
// Export entry point
|
||||||
|
void exportObject();
|
||||||
|
|
||||||
|
// Update map from texture worker
|
||||||
|
void updateMap(LLUUID uploaded_asset);
|
||||||
|
|
||||||
|
// Move to next texture upload
|
||||||
|
void uploadNextAsset();
|
||||||
|
|
||||||
|
// Folder public geter
|
||||||
|
std::string getfolder() { return mFolder; };
|
||||||
|
|
||||||
|
// Prim updated callback
|
||||||
|
void primUpdate(LLViewerObject* object);
|
||||||
|
|
||||||
|
// New prim call back
|
||||||
|
bool newPrim(LLViewerObject* pobject);
|
||||||
|
|
||||||
|
static const U32 TEXTURE_OK = 0x00;
|
||||||
|
static const U32 TEXTURE_BAD_PERM = 0x01;
|
||||||
|
static const U32 TEXTURE_MISSING = 0x02;
|
||||||
|
static const U32 TEXTURE_BAD_ENCODING = 0x04;
|
||||||
|
static const U32 TEXTURE_IS_NULL = 0x08;
|
||||||
|
static const U32 TEXTURE_SAVED_FAILED = 0x10;
|
||||||
|
|
||||||
|
// Is ready for next texture?
|
||||||
|
bool mNextTextureReady;
|
||||||
|
|
||||||
|
// Export state machine
|
||||||
|
enum export_states mExportState;
|
||||||
|
|
||||||
|
// Export result flags for textures.
|
||||||
|
U32 mNonExportedTextures;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Static singleton stuff
|
||||||
|
LLObjectBackup();
|
||||||
|
static LLObjectBackup* sInstance;
|
||||||
|
|
||||||
|
// Update the floater with status numbers
|
||||||
|
void updateImportNumbers();
|
||||||
|
void updateExportNumbers();
|
||||||
|
|
||||||
|
// Permissions stuff.
|
||||||
|
bool validatePerms(const LLPermissions* item_permissions);
|
||||||
|
LLUUID validateTextureID(LLUUID asset_id);
|
||||||
|
|
||||||
|
// Convert a selection list of objects to LLSD
|
||||||
|
LLSD primsToLLSD(LLViewerObject::child_list_t child_list);
|
||||||
|
|
||||||
|
// Start the import process
|
||||||
|
void importFirstObject();
|
||||||
|
|
||||||
|
// Move to the next import group
|
||||||
|
void importNextObject();
|
||||||
|
|
||||||
|
// Export the next texture in list
|
||||||
|
void exportNextTexture();
|
||||||
|
|
||||||
|
// Apply LLSD to object
|
||||||
|
void xmlToPrim(LLSD prim_llsd, LLViewerObject* pobject);
|
||||||
|
|
||||||
|
// Rez a prim at a given position (note not agent offset X/Y screen for raycast)
|
||||||
|
void rezAgentOffset(LLVector3 offset);
|
||||||
|
|
||||||
|
// Get an offset from the agent based on rotation and current pos
|
||||||
|
LLVector3 offsetAgent(LLVector3 offset);
|
||||||
|
|
||||||
|
// Are we active flag
|
||||||
|
bool mRunning;
|
||||||
|
|
||||||
|
// File and folder name control
|
||||||
|
std::string mFileName;
|
||||||
|
std::string mFolder;
|
||||||
|
|
||||||
|
// True if we need to rebase the assets
|
||||||
|
bool mRetexture;
|
||||||
|
|
||||||
|
// Counts of import and export objects and prims
|
||||||
|
U32 mObjects;
|
||||||
|
U32 mCurObject;
|
||||||
|
U32 mPrims;
|
||||||
|
U32 mCurPrim;
|
||||||
|
|
||||||
|
// No prims rezed
|
||||||
|
U32 mRezCount;
|
||||||
|
|
||||||
|
// Rebase map
|
||||||
|
std::map<LLUUID,LLUUID> mAssetMap;
|
||||||
|
|
||||||
|
// Export texture list
|
||||||
|
std::list<LLUUID> mTexturesList;
|
||||||
|
|
||||||
|
// Import object tracking
|
||||||
|
std::vector<LLViewerObject*> mToSelect;
|
||||||
|
std::vector<LLViewerObject*>::iterator mProcessIter;
|
||||||
|
|
||||||
|
// Working LLSD holders
|
||||||
|
LLUUID mCurrentAsset;
|
||||||
|
LLSD mLLSD;
|
||||||
|
LLSD mThisGroup;
|
||||||
|
LLUUID mExpectingUpdate;
|
||||||
|
|
||||||
|
// Working llsd itterators for objects and linksets
|
||||||
|
LLSD::map_const_iterator mPrimImportIter;
|
||||||
|
LLSD::array_const_iterator mGroupPrimImportIter;
|
||||||
|
|
||||||
|
// Root pos and rotation and central root pos for link set
|
||||||
|
LLVector3 mRootPos;
|
||||||
|
LLQuaternion mRootRot;
|
||||||
|
LLVector3 mRootRootPos;
|
||||||
|
LLVector3 mGroupOffset;
|
||||||
|
|
||||||
|
// Agent inital pos and rot when starting import
|
||||||
|
LLVector3 mAgentPos;
|
||||||
|
LLQuaternion mAgentRot;
|
||||||
|
};
|
||||||
@@ -75,6 +75,8 @@
|
|||||||
|
|
||||||
#include "llappviewer.h"
|
#include "llappviewer.h"
|
||||||
|
|
||||||
|
#include "llviewerobjectbackup.h"
|
||||||
|
|
||||||
extern F32 gMinObjectDistance;
|
extern F32 gMinObjectDistance;
|
||||||
extern BOOL gAnimateTextures;
|
extern BOOL gAnimateTextures;
|
||||||
|
|
||||||
@@ -247,6 +249,11 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp,
|
|||||||
{
|
{
|
||||||
gPipeline.addObject(objectp);
|
gPipeline.addObject(objectp);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LLObjectBackup::getInstance()->primUpdate(objectp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Also sets the approx. pixel area
|
// Also sets the approx. pixel area
|
||||||
objectp->setPixelAreaAndAngle(gAgent);
|
objectp->setPixelAreaAndAngle(gAgent);
|
||||||
@@ -272,6 +279,8 @@ void LLViewerObjectList::processUpdateCore(LLViewerObject* objectp,
|
|||||||
objectp->mCreateSelected = false;
|
objectp->mCreateSelected = false;
|
||||||
gViewerWindow->getWindow()->decBusyCount();
|
gViewerWindow->getWindow()->decBusyCount();
|
||||||
gViewerWindow->getWindow()->setCursor( UI_CURSOR_ARROW );
|
gViewerWindow->getWindow()->setCursor( UI_CURSOR_ARROW );
|
||||||
|
|
||||||
|
LLObjectBackup::getInstance()->newPrim(objectp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,10 @@
|
|||||||
<on_click function="Tools.SelectedScriptAction" userdata="reset" />
|
<on_click function="Tools.SelectedScriptAction" userdata="reset" />
|
||||||
<on_enable function="EditableSelected" />
|
<on_enable function="EditableSelected" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
<menu_item_call enabled="false" hidden="false" label="Export" mouse_opaque="true" name="Export">
|
||||||
|
<on_click function="Object.Export" />
|
||||||
|
<on_enable function="Object.EnableExport" />
|
||||||
|
</menu_item_call>
|
||||||
</pie_menu>
|
</pie_menu>
|
||||||
<menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute">
|
<menu_item_call enabled="false" label="Mute" mouse_opaque="true" name="Object Mute">
|
||||||
<on_click function="Object.Mute" />
|
<on_click function="Object.Mute" />
|
||||||
@@ -81,6 +85,11 @@
|
|||||||
<menu_item_call enabled="true" label="Derender" mouse_opaque="true" name="Derender">
|
<menu_item_call enabled="true" label="Derender" mouse_opaque="true" name="Derender">
|
||||||
<on_click function="Object.DERENDER" />
|
<on_click function="Object.DERENDER" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
<menu_item_call enabled="false" label="Report..." mouse_opaque="true"
|
||||||
|
name="Report Abuse...">
|
||||||
|
<on_click function="Object.ReportAbuse" />
|
||||||
|
<on_enable function="Object.EnableReportAbuse" />
|
||||||
|
</menu_item_call>
|
||||||
</pie_menu>
|
</pie_menu>
|
||||||
<menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy...">
|
<menu_item_call enabled="false" label="Buy..." mouse_opaque="true" name="Buy...">
|
||||||
<on_click function="Object.Buy" />
|
<on_click function="Object.Buy" />
|
||||||
|
|||||||
@@ -24,11 +24,11 @@
|
|||||||
mouse_opaque="true" enabled="true" >
|
mouse_opaque="true" enabled="true" >
|
||||||
<on_click function="File.UploadBulk" userdata="" />
|
<on_click function="File.UploadBulk" userdata="" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
<menu_item_call enabled="false" hidden="false" label="Import" mouse_opaque="true" name="Import">
|
<menu_item_call enabled="false" hidden="false" label="Import XML" mouse_opaque="true" name="Import">
|
||||||
<on_click function="Object.Import" />
|
<on_click function="Object.Import" />
|
||||||
<on_enable function="Object.EnableImport" />
|
<on_enable function="Object.EnableImport" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
<menu_item_call enabled="false" hidden="false" label="Upload Textures + Import" mouse_opaque="true" name="Import">
|
<menu_item_call enabled="false" hidden="false" label="Import with Textures" mouse_opaque="true" name="Import">
|
||||||
<on_click function="Object.ImportUpload" />
|
<on_click function="Object.ImportUpload" />
|
||||||
<on_enable function="Object.EnableImport" />
|
<on_enable function="Object.EnableImport" />
|
||||||
</menu_item_call>
|
</menu_item_call>
|
||||||
|
|||||||
@@ -5236,6 +5236,27 @@ Cannot retrieve grid info from server.
|
|||||||
Builds with extended hollow or extended hole size do not render properly on other viewers. Please keep this option checked, if you want your builds looking properly in other viewers.
|
Builds with extended hollow or extended hole size do not render properly on other viewers. Please keep this option checked, if you want your builds looking properly in other viewers.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="ExportFailed"
|
||||||
|
type="alertmodal">
|
||||||
|
Bad permissions for the exported object. Export aborted.
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
|
name="ExportPartial"
|
||||||
|
type="alertmodal">
|
||||||
|
Object exported. Some textures could not be saved due to: [REASON]
|
||||||
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="notifytip.tga"
|
||||||
|
name="ExportSuccessful"
|
||||||
|
type="notifytip">
|
||||||
|
Export successful.
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="notifytip.tga"
|
icon="notifytip.tga"
|
||||||
name="SystemMessageTip"
|
name="SystemMessageTip"
|
||||||
|
|||||||
Reference in New Issue
Block a user