adding some floaters I forgot
This commit is contained in:
@@ -238,6 +238,7 @@ set(viewer_SOURCE_FILES
|
||||
llimportobject.cpp
|
||||
llimview.cpp
|
||||
llinventoryactions.cpp
|
||||
llinventorybackup.cpp
|
||||
llinventorybridge.cpp
|
||||
llinventoryclipboard.cpp
|
||||
llinventorymodel.cpp
|
||||
@@ -666,6 +667,7 @@ set(viewer_HEADER_FILES
|
||||
llimpanel.h
|
||||
llimportobject.h
|
||||
llimview.h
|
||||
llinventorybackup.h
|
||||
llinventorybridge.h
|
||||
llinventoryclipboard.h
|
||||
llinventorymodel.h
|
||||
|
||||
@@ -9546,6 +9546,17 @@
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>DisablePointAtAndBeam</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Disable pointing at objects and the pointat beam</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ShowStartLocation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -734,7 +734,9 @@ std::string LLAppViewerLinux::generateSerialNumber()
|
||||
serial_md5[0] = 0;
|
||||
#if LL_SOLARIS
|
||||
// TODO
|
||||
#elseif EXPERIMENTAL_SERIAL_NUM
|
||||
#else
|
||||
//Leave this commented out for now since it could be used to distinguish inertia from other viewers on linux
|
||||
/*
|
||||
// I'm going to assume this works on everything but solaris
|
||||
std::string rootDeviceName = "";
|
||||
std::string rootDeviceUUID = "";
|
||||
@@ -825,6 +827,7 @@ std::string LLAppViewerLinux::generateSerialNumber()
|
||||
{
|
||||
llwarns << "Could not find root device's UUID" << llendl;
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
return serial_md5;
|
||||
}
|
||||
|
||||
@@ -86,6 +86,12 @@
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llselectmgr.h"
|
||||
|
||||
// <edit>
|
||||
#include "lllocalinventory.h"
|
||||
#include "llinventorybackup.h"
|
||||
//#include "llcheats.h"
|
||||
//#include "llnotecardmagic.h"
|
||||
// </edit>
|
||||
const std::string NEW_LSL_NAME = "New Script"; // *TODO:Translate? (probably not)
|
||||
const std::string NEW_NOTECARD_NAME = "New Note"; // *TODO:Translate? (probably not)
|
||||
const std::string NEW_GESTURE_NAME = "New Gesture"; // *TODO:Translate? (probably not)
|
||||
@@ -112,6 +118,49 @@ bool doToSelected(LLFolderView* folder, std::string action)
|
||||
{
|
||||
LLInventoryClipboard::instance().reset();
|
||||
}
|
||||
// <edit>
|
||||
if("save_as" == action)
|
||||
{
|
||||
LLInventoryBackup::save(folder);
|
||||
return true;
|
||||
}
|
||||
else if("save_invcache" == action)
|
||||
{
|
||||
LLFilePicker& file_picker = LLFilePicker::instance();
|
||||
if(file_picker.getSaveFile( LLFilePicker::FFSAVE_INVGZ ))
|
||||
{
|
||||
std::string file_name = file_picker.getFirstFile();
|
||||
LLLocalInventory::saveInvCache(file_name, folder);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
else if("acquire_asset_id" == action)
|
||||
{
|
||||
if(LLCheats::cheatCodes["AcquireAssetID"].entered)
|
||||
{
|
||||
std::set<LLUUID> selected_items_set;
|
||||
folder->getSelectionList(selected_items_set);
|
||||
|
||||
if(selected_items_set.size() > 0)
|
||||
{
|
||||
LLAssetIDAcquirer::acquire(selected_items_set);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if("magic_get" == action)
|
||||
{
|
||||
std::set<LLUUID> selected_items_set;
|
||||
folder->getSelectionList(selected_items_set);
|
||||
|
||||
if(selected_items_set.size() > 0)
|
||||
{
|
||||
LLNotecardMagic::acquire(selected_items_set);
|
||||
}
|
||||
}
|
||||
*/
|
||||
// </edit>
|
||||
|
||||
std::set<LLUUID> selected_items;
|
||||
folder->getSelectionList(selected_items);
|
||||
@@ -462,11 +511,36 @@ class LLDoCreateFloater : public inventory_listener_t
|
||||
LLInventoryModel* model = mPtr->getPanel()->getModel();
|
||||
if(!model) return false;
|
||||
std::string type = userdata.asString();
|
||||
// <edit>
|
||||
if(type == "pretend")
|
||||
{
|
||||
LLFloaterNewLocalInventory* floater = new LLFloaterNewLocalInventory();
|
||||
floater->center();
|
||||
}
|
||||
else
|
||||
// </edit>
|
||||
do_create(model, mPtr->getPanel(), type);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// <edit>
|
||||
class LLLoadInvCacheFloater : public inventory_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLInventoryModel* model = mPtr->getPanel()->getModel();
|
||||
if(!model) return false;
|
||||
LLFilePicker& file_picker = LLFilePicker::instance();
|
||||
if(file_picker.getOpenFile( LLFilePicker::FFLOAD_INVGZ ))
|
||||
{
|
||||
std::string file_name = file_picker.getFirstFile();
|
||||
LLLocalInventory::loadInvCache(file_name);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
// </edit>
|
||||
class LLSetSortBy : public inventory_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
@@ -705,6 +779,9 @@ void init_inventory_actions(LLInventoryView *floater)
|
||||
(new LLCloseAllFoldersFloater())->registerListener(floater, "Inventory.CloseAllFolders");
|
||||
(new LLEmptyTrashFloater())->registerListener(floater, "Inventory.EmptyTrash");
|
||||
(new LLDoCreateFloater())->registerListener(floater, "Inventory.DoCreate");
|
||||
// <edit>
|
||||
(new LLLoadInvCacheFloater())->registerListener(floater, "Inventory.LoadInvCache");
|
||||
// </edit>
|
||||
|
||||
(new LLNewWindow())->registerListener(floater, "Inventory.NewWindow");
|
||||
(new LLShowFilters())->registerListener(floater, "Inventory.ShowFilters");
|
||||
|
||||
782
indra/newview/llinventorybackup.cpp
Normal file
782
indra/newview/llinventorybackup.cpp
Normal file
@@ -0,0 +1,782 @@
|
||||
// <edit>
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llinventorybackup.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "llviewerinventory.h"
|
||||
#include "llfilepicker.h"
|
||||
#include "lldirpicker.h"
|
||||
#include "llviewerimage.h"
|
||||
#include "llviewerimagelist.h" // gImageList
|
||||
#include "llagent.h" // gAgent
|
||||
#include "llviewerwindow.h" // gViewerWindow
|
||||
#include "llfloater.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
|
||||
|
||||
std::list<LLFloaterInventoryBackup*> LLFloaterInventoryBackup::sInstances;
|
||||
|
||||
LLInventoryBackupOrder::LLInventoryBackupOrder()
|
||||
{
|
||||
// My personal defaults based on what is assumed to not work
|
||||
mDownloadTextures = true;
|
||||
mDownloadSounds = true;
|
||||
mDownloadCallingCards = false;
|
||||
mDownloadLandmarks = true;
|
||||
mDownloadScripts = true;
|
||||
mDownloadWearables = true;
|
||||
mDownloadObjects = false;
|
||||
mDownloadNotecards = true;
|
||||
mDownloadAnimations = true;
|
||||
mDownloadGestures = true;
|
||||
//mDownloadOthers = true;
|
||||
}
|
||||
|
||||
LLFloaterInventoryBackupSettings::LLFloaterInventoryBackupSettings(LLInventoryBackupOrder* order)
|
||||
: LLFloater(),
|
||||
mOrder(order)
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_backup_settings.xml");
|
||||
}
|
||||
|
||||
LLFloaterInventoryBackupSettings::~LLFloaterInventoryBackupSettings()
|
||||
{
|
||||
}
|
||||
|
||||
BOOL LLFloaterInventoryBackupSettings::postBuild(void)
|
||||
{
|
||||
childSetValue("chk_textures", mOrder->mDownloadTextures);
|
||||
childSetValue("chk_sounds", mOrder->mDownloadSounds);
|
||||
childSetValue("chk_callingcards", mOrder->mDownloadCallingCards);
|
||||
childSetValue("chk_landmarks", mOrder->mDownloadLandmarks);
|
||||
childSetValue("chk_scripts", mOrder->mDownloadScripts);
|
||||
childSetValue("chk_wearables", mOrder->mDownloadWearables);
|
||||
childSetValue("chk_objects", mOrder->mDownloadObjects);
|
||||
childSetValue("chk_notecards", mOrder->mDownloadNotecards);
|
||||
childSetValue("chk_animations", mOrder->mDownloadAnimations);
|
||||
childSetValue("chk_gestures", mOrder->mDownloadGestures);
|
||||
//childSetValue("chk_others", mOrder->mDownloadOthers);
|
||||
|
||||
childSetAction("next_btn", LLFloaterInventoryBackupSettings::onClickNext, this);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterInventoryBackupSettings::onClickNext(void* userdata)
|
||||
{
|
||||
LLFloaterInventoryBackupSettings* floater = (LLFloaterInventoryBackupSettings*)userdata;
|
||||
LLInventoryBackupOrder* order = floater->mOrder;
|
||||
|
||||
// Apply changes to filters
|
||||
order->mDownloadAnimations = floater->childGetValue("chk_animations");
|
||||
order->mDownloadCallingCards = floater->childGetValue("chk_callingcards");
|
||||
order->mDownloadGestures = floater->childGetValue("chk_gestures");
|
||||
order->mDownloadLandmarks = floater->childGetValue("chk_landmarks");
|
||||
order->mDownloadNotecards = floater->childGetValue("chk_notecards");
|
||||
order->mDownloadObjects = floater->childGetValue("chk_objects");
|
||||
//order->mDownloadOthers = floater->childGetValue("chk_others");
|
||||
order->mDownloadScripts = floater->childGetValue("chk_scripts");
|
||||
order->mDownloadSounds = floater->childGetValue("chk_sounds");
|
||||
order->mDownloadTextures = floater->childGetValue("chk_textures");
|
||||
order->mDownloadWearables = floater->childGetValue("chk_wearables");
|
||||
|
||||
// Make filters
|
||||
std::map<LLAssetType::EType, bool> type_remove;
|
||||
type_remove[LLAssetType::AT_ANIMATION] = !order->mDownloadAnimations;
|
||||
type_remove[LLAssetType::AT_BODYPART] = !order->mDownloadWearables;
|
||||
type_remove[LLAssetType::AT_CALLINGCARD] = !order->mDownloadCallingCards;
|
||||
type_remove[LLAssetType::AT_CLOTHING] = !order->mDownloadWearables;
|
||||
type_remove[LLAssetType::AT_GESTURE] = !order->mDownloadGestures;
|
||||
type_remove[LLAssetType::AT_IMAGE_JPEG] = !order->mDownloadTextures;
|
||||
type_remove[LLAssetType::AT_IMAGE_TGA] = !order->mDownloadTextures;
|
||||
type_remove[LLAssetType::AT_LANDMARK] = !order->mDownloadLandmarks;
|
||||
type_remove[LLAssetType::AT_LSL_TEXT] = !order->mDownloadScripts;
|
||||
type_remove[LLAssetType::AT_NOTECARD] = !order->mDownloadNotecards;
|
||||
type_remove[LLAssetType::AT_OBJECT] = !order->mDownloadObjects;
|
||||
type_remove[LLAssetType::AT_SCRIPT] = !order->mDownloadScripts;
|
||||
type_remove[LLAssetType::AT_SOUND] = !order->mDownloadSounds;
|
||||
type_remove[LLAssetType::AT_SOUND_WAV] = !order->mDownloadSounds;
|
||||
type_remove[LLAssetType::AT_TEXTURE] = !order->mDownloadTextures;
|
||||
type_remove[LLAssetType::AT_TEXTURE_TGA] = !order->mDownloadTextures;
|
||||
|
||||
// Apply filters
|
||||
std::vector<LLInventoryItem*>::iterator item_iter = order->mItems.begin();
|
||||
for( ; item_iter != order->mItems.end(); )
|
||||
{
|
||||
if(type_remove[(*item_iter)->getType()])
|
||||
order->mItems.erase(item_iter);
|
||||
else
|
||||
++item_iter;
|
||||
}
|
||||
|
||||
if(order->mItems.size() < 1)
|
||||
{
|
||||
LLSD args;
|
||||
args["ERROR_MESSAGE"] = "No items passed the filter \\o/";
|
||||
LLNotifications::instance().add("ErrorMessage", args);
|
||||
return;
|
||||
}
|
||||
|
||||
// Get filename
|
||||
//LLFilePicker& file_picker = LLFilePicker::instance();
|
||||
//if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_ALL, "New Folder" ) )
|
||||
//{
|
||||
// // User canceled or we failed to acquire save file.
|
||||
// return;
|
||||
//}
|
||||
//std::string filename = file_picker.getFirstFile();
|
||||
|
||||
// Get dir name
|
||||
LLDirPicker& picker = LLDirPicker::instance();
|
||||
std::string filename = "New Folder";
|
||||
if (!picker.getDir(&filename))
|
||||
{
|
||||
floater->close();
|
||||
return;
|
||||
}
|
||||
filename = picker.getDirName();
|
||||
|
||||
// Make local directory tree
|
||||
LLFile::mkdir(filename);
|
||||
std::vector<LLInventoryCategory*>::iterator _cat_iter = order->mCats.begin();
|
||||
std::vector<LLInventoryCategory*>::iterator _cat_end = order->mCats.end();
|
||||
for( ; _cat_iter != _cat_end; ++_cat_iter)
|
||||
{
|
||||
std::string path = filename + "\\" + LLInventoryBackup::getPath(*_cat_iter, order->mCats);
|
||||
LLFile::mkdir(path);
|
||||
}
|
||||
|
||||
// Go go backup floater
|
||||
LLFloaterInventoryBackup* backup_floater = new LLFloaterInventoryBackup(filename, order->mCats, order->mItems);
|
||||
backup_floater->center();
|
||||
|
||||
// Close myself
|
||||
floater->close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// static
|
||||
bool LLInventoryBackup::itemIsFolder(LLInventoryItem* item)
|
||||
{
|
||||
return ((item->getInventoryType() == LLInventoryType::IT_CATEGORY)
|
||||
|| (item->getInventoryType() == LLInventoryType::IT_ROOT_CATEGORY));
|
||||
}
|
||||
|
||||
// static
|
||||
LLFilePicker::ESaveFilter LLInventoryBackup::getSaveFilter(LLInventoryItem* item)
|
||||
{
|
||||
LLAssetType::EType type = item->getType();
|
||||
EWearableType wear = (EWearableType)(item->getFlags() & 0xFF);
|
||||
switch(type)
|
||||
{
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
return LLFilePicker::FFSAVE_TGA;
|
||||
case LLAssetType::AT_SOUND:
|
||||
return LLFilePicker::FFSAVE_OGG;
|
||||
case LLAssetType::AT_SCRIPT:
|
||||
case LLAssetType::AT_LSL_TEXT:
|
||||
return LLFilePicker::FFSAVE_LSL;
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
return LLFilePicker::FFSAVE_ANIMATN;
|
||||
case LLAssetType::AT_GESTURE:
|
||||
return LLFilePicker::FFSAVE_GESTURE;
|
||||
case LLAssetType::AT_NOTECARD:
|
||||
return LLFilePicker::FFSAVE_NOTECARD;
|
||||
case LLAssetType::AT_LANDMARK:
|
||||
return LLFilePicker::FFSAVE_LANDMARK;
|
||||
case LLAssetType::AT_BODYPART:
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
switch(wear)
|
||||
{
|
||||
case WT_EYES:
|
||||
return LLFilePicker::FFSAVE_EYES;
|
||||
case WT_GLOVES:
|
||||
return LLFilePicker::FFSAVE_GLOVES;
|
||||
case WT_HAIR:
|
||||
return LLFilePicker::FFSAVE_HAIR;
|
||||
case WT_JACKET:
|
||||
return LLFilePicker::FFSAVE_JACKET;
|
||||
case WT_PANTS:
|
||||
return LLFilePicker::FFSAVE_PANTS;
|
||||
case WT_SHAPE:
|
||||
return LLFilePicker::FFSAVE_SHAPE;
|
||||
case WT_SHIRT:
|
||||
return LLFilePicker::FFSAVE_SHIRT;
|
||||
case WT_SHOES:
|
||||
return LLFilePicker::FFSAVE_SHOES;
|
||||
case WT_SKIN:
|
||||
return LLFilePicker::FFSAVE_SKIN;
|
||||
case WT_SKIRT:
|
||||
return LLFilePicker::FFSAVE_SKIRT;
|
||||
case WT_SOCKS:
|
||||
return LLFilePicker::FFSAVE_SOCKS;
|
||||
case WT_UNDERPANTS:
|
||||
return LLFilePicker::FFSAVE_UNDERPANTS;
|
||||
case WT_UNDERSHIRT:
|
||||
return LLFilePicker::FFSAVE_UNDERSHIRT;
|
||||
default:
|
||||
return LLFilePicker::FFSAVE_ALL;
|
||||
}
|
||||
default:
|
||||
return LLFilePicker::FFSAVE_ALL;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLInventoryBackup::getExtension(LLInventoryItem* item)
|
||||
{
|
||||
LLAssetType::EType type = item->getType();
|
||||
EWearableType wear = (EWearableType)(item->getFlags() & 0xFF);
|
||||
std::string scratch;
|
||||
switch(type)
|
||||
{
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
return ".tga";
|
||||
case LLAssetType::AT_SOUND:
|
||||
return ".ogg";
|
||||
case LLAssetType::AT_SCRIPT:
|
||||
case LLAssetType::AT_LSL_TEXT:
|
||||
return ".lsl";
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
return ".animatn";
|
||||
case LLAssetType::AT_GESTURE:
|
||||
return ".gesture";
|
||||
case LLAssetType::AT_NOTECARD:
|
||||
return ".notecard";
|
||||
case LLAssetType::AT_LANDMARK:
|
||||
return ".landmark";
|
||||
case LLAssetType::AT_BODYPART:
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
scratch = LLWearable::typeToTypeName(wear);
|
||||
if(scratch == "invalid")
|
||||
{
|
||||
if(type == LLAssetType::AT_BODYPART)
|
||||
scratch = "bodypart";
|
||||
else
|
||||
scratch = "clothing";
|
||||
}
|
||||
return "." + scratch;
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLInventoryBackup::getUniqueFilename(std::string filename, std::string extension)
|
||||
{
|
||||
if(LLFile::isfile( (filename + extension).c_str() ))
|
||||
{
|
||||
int i = 1;
|
||||
while(LLFile::isfile( (filename + llformat(" %d", i) + extension).c_str() ))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
return filename + llformat(" %d", i) + extension;
|
||||
}
|
||||
return filename + extension;
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLInventoryBackup::getUniqueDirname(std::string dirname)
|
||||
{
|
||||
if(LLFile::isdir(dirname.c_str()))
|
||||
{
|
||||
int i = 1;
|
||||
while(LLFile::isdir( (dirname + llformat(" %d", i)).c_str() ))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
return dirname + llformat(" %d", i);
|
||||
}
|
||||
return dirname;
|
||||
}
|
||||
|
||||
|
||||
// static
|
||||
void LLInventoryBackup::download(LLInventoryItem* item, LLFloater* floater, loaded_callback_func onImage, LLGetAssetCallback onAsset)
|
||||
{
|
||||
LLInventoryBackup::callbackdata* userdata = new LLInventoryBackup::callbackdata();
|
||||
userdata->floater = floater;
|
||||
userdata->item = item;
|
||||
|
||||
LLViewerImage* imagep;
|
||||
switch(item->getType())
|
||||
{
|
||||
case LLAssetType::AT_TEXTURE:
|
||||
imagep = gImageList.getImage(item->getAssetUUID(), MIPMAP_TRUE, TRUE);
|
||||
imagep->setLoadedCallbackNoAux( onImage, 0, TRUE, FALSE, userdata );
|
||||
break;
|
||||
case LLAssetType::AT_NOTECARD:
|
||||
case LLAssetType::AT_SCRIPT:
|
||||
case LLAssetType::AT_LSL_TEXT: // normal script download
|
||||
case LLAssetType::AT_LSL_BYTECODE:
|
||||
gAssetStorage->getInvItemAsset(LLHost::invalid,
|
||||
gAgent.getID(),
|
||||
gAgent.getSessionID(),
|
||||
item->getPermissions().getOwner(),
|
||||
LLUUID::null,
|
||||
item->getUUID(),
|
||||
item->getAssetUUID(),
|
||||
item->getType(),
|
||||
onAsset,
|
||||
userdata, // user_data
|
||||
TRUE);
|
||||
break;
|
||||
case LLAssetType::AT_SOUND:
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
case LLAssetType::AT_BODYPART:
|
||||
case LLAssetType::AT_ANIMATION:
|
||||
case LLAssetType::AT_GESTURE:
|
||||
default:
|
||||
gAssetStorage->getAssetData(item->getAssetUUID(), item->getType(), onAsset, userdata, TRUE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLInventoryBackup::imageCallback(BOOL success,
|
||||
LLViewerImage *src_vi,
|
||||
LLImageRaw* src,
|
||||
LLImageRaw* aux_src,
|
||||
S32 discard_level,
|
||||
BOOL final,
|
||||
void* userdata)
|
||||
{
|
||||
if(final)
|
||||
{
|
||||
LLInventoryBackup::callbackdata* data = static_cast<LLInventoryBackup::callbackdata*>(userdata);
|
||||
LLInventoryItem* item = data->item;
|
||||
|
||||
if(!success)
|
||||
{
|
||||
LLSD args;
|
||||
args["ERROR_MESSAGE"] = "Download didn't work on " + item->getName() + ".";
|
||||
LLNotifications::instance().add("ErrorMessage", args);
|
||||
return;
|
||||
}
|
||||
|
||||
LLFilePicker& file_picker = LLFilePicker::instance();
|
||||
if( !file_picker.getSaveFile( getSaveFilter(item), LLDir::getScrubbedFileName(item->getName())) )
|
||||
{
|
||||
// User canceled or we failed to acquire save file.
|
||||
return;
|
||||
}
|
||||
// remember the user-approved/edited file name.
|
||||
std::string filename = file_picker.getFirstFile();
|
||||
|
||||
LLPointer<LLImageTGA> image_tga = new LLImageTGA;
|
||||
if( !image_tga->encode( src ) )
|
||||
{
|
||||
LLSD args;
|
||||
args["ERROR_MESSAGE"] = "Couldn't encode file.";
|
||||
LLNotifications::instance().add("ErrorMessage", args);
|
||||
}
|
||||
else if( !image_tga->save( filename ) )
|
||||
{
|
||||
LLSD args;
|
||||
args["ERROR_MESSAGE"] = "Couldn't write file.";
|
||||
LLNotifications::instance().add("ErrorMessage", args);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
src_vi->setBoostLevel(LLViewerImageBoostLevel::BOOST_UI);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLInventoryBackup::assetCallback(LLVFS *vfs,
|
||||
const LLUUID& asset_uuid,
|
||||
LLAssetType::EType type,
|
||||
void* user_data, S32 status, LLExtStat ext_status)
|
||||
{
|
||||
LLInventoryBackup::callbackdata* data = static_cast<LLInventoryBackup::callbackdata*>(user_data);
|
||||
LLInventoryItem* item = data->item;
|
||||
|
||||
if(status != 0)
|
||||
{
|
||||
LLSD args;
|
||||
args["ERROR_MESSAGE"] = "Download didn't work on " + item->getName() + ".";
|
||||
LLNotifications::instance().add("ErrorMessage", args);
|
||||
return;
|
||||
}
|
||||
|
||||
// Todo: this doesn't work for static vfs shit
|
||||
LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
|
||||
S32 size = file.getSize();
|
||||
|
||||
char* buffer = new char[size];
|
||||
if (buffer == NULL)
|
||||
{
|
||||
llerrs << "Memory Allocation Failed" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
file.read((U8*)buffer, size);
|
||||
|
||||
// Write it back out...
|
||||
|
||||
LLFilePicker& file_picker = LLFilePicker::instance();
|
||||
if( !file_picker.getSaveFile( getSaveFilter(item), LLDir::getScrubbedFileName(item->getName())) )
|
||||
{
|
||||
// User canceled or we failed to acquire save file.
|
||||
return;
|
||||
}
|
||||
// remember the user-approved/edited file name.
|
||||
std::string filename = file_picker.getFirstFile();
|
||||
|
||||
std::ofstream export_file(filename.c_str(), std::ofstream::binary);
|
||||
export_file.write(buffer, size);
|
||||
export_file.close();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLInventoryBackup::climb(LLInventoryCategory* cat,
|
||||
std::vector<LLInventoryCategory*>& cats,
|
||||
std::vector<LLInventoryItem*>& items)
|
||||
{
|
||||
LLInventoryModel* model = &gInventory;
|
||||
|
||||
// Add this category
|
||||
cats.push_back(cat);
|
||||
|
||||
LLInventoryModel::cat_array_t *direct_cats;
|
||||
LLInventoryModel::item_array_t *direct_items;
|
||||
model->getDirectDescendentsOf(cat->getUUID(), direct_cats, direct_items);
|
||||
|
||||
// Add items
|
||||
LLInventoryModel::item_array_t::iterator item_iter = direct_items->begin();
|
||||
LLInventoryModel::item_array_t::iterator item_end = direct_items->end();
|
||||
for( ; item_iter != item_end; ++item_iter)
|
||||
{
|
||||
items.push_back(*item_iter);
|
||||
}
|
||||
|
||||
// Do subcategories
|
||||
LLInventoryModel::cat_array_t::iterator cat_iter = direct_cats->begin();
|
||||
LLInventoryModel::cat_array_t::iterator cat_end = direct_cats->end();
|
||||
for( ; cat_iter != cat_end; ++cat_iter)
|
||||
{
|
||||
climb(*cat_iter, cats, items);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
std::string LLInventoryBackup::getPath(LLInventoryCategory* cat, std::vector<LLInventoryCategory*> cats)
|
||||
{
|
||||
LLInventoryModel* model = &gInventory;
|
||||
std::string path = LLDir::getScrubbedFileName(cat->getName());
|
||||
LLInventoryCategory* parent = model->getCategory(cat->getParentUUID());
|
||||
while(parent && (std::find(cats.begin(), cats.end(), parent) != cats.end()))
|
||||
{
|
||||
path = LLDir::getScrubbedFileName(parent->getName()) + "\\" + path;
|
||||
parent = model->getCategory(parent->getParentUUID());
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
// static
|
||||
void LLInventoryBackup::save(LLFolderView* folder)
|
||||
{
|
||||
LLInventoryModel* model = &gInventory;
|
||||
|
||||
std::set<LLUUID> selected_items;
|
||||
folder->getSelectionList(selected_items);
|
||||
|
||||
if(selected_items.size() < 1)
|
||||
{
|
||||
// No items selected? Omg
|
||||
return;
|
||||
}
|
||||
else if(selected_items.size() == 1)
|
||||
{
|
||||
// One item. See if it's a folder
|
||||
LLUUID id = *(selected_items.begin());
|
||||
LLInventoryItem* item = model->getItem(id);
|
||||
if(item)
|
||||
{
|
||||
if(!itemIsFolder(item))
|
||||
{
|
||||
// Single item, save it now
|
||||
LLInventoryBackup::download((LLViewerInventoryItem*)item, NULL, imageCallback, assetCallback);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We got here? We need to save multiple items or at least make a folder
|
||||
|
||||
std::vector<LLInventoryCategory*> cats;
|
||||
std::vector<LLInventoryItem*> items;
|
||||
|
||||
// Make complete lists of child categories and items
|
||||
std::set<LLUUID>::iterator sel_iter = selected_items.begin();
|
||||
std::set<LLUUID>::iterator sel_end = selected_items.end();
|
||||
for( ; sel_iter != sel_end; ++sel_iter)
|
||||
{
|
||||
LLInventoryCategory* cat = model->getCategory(*sel_iter);
|
||||
if(cat)
|
||||
{
|
||||
climb(cat, cats, items);
|
||||
}
|
||||
}
|
||||
|
||||
// And what about items inside a folder that wasn't selected?
|
||||
// I guess I will just add selected items, so long as they aren't already added
|
||||
for(sel_iter = selected_items.begin(); sel_iter != sel_end; ++sel_iter)
|
||||
{
|
||||
LLInventoryItem* item = model->getItem(*sel_iter);
|
||||
if(item)
|
||||
{
|
||||
if(std::find(items.begin(), items.end(), item) == items.end())
|
||||
{
|
||||
items.push_back(item);
|
||||
LLInventoryCategory* parent = model->getCategory(item->getParentUUID());
|
||||
if(std::find(cats.begin(), cats.end(), parent) == cats.end())
|
||||
{
|
||||
cats.push_back(parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLInventoryBackupOrder* order = new LLInventoryBackupOrder();
|
||||
order->mCats = cats;
|
||||
order->mItems = items;
|
||||
LLFloaterInventoryBackupSettings* floater = new LLFloaterInventoryBackupSettings(order);
|
||||
floater->center();
|
||||
}
|
||||
|
||||
|
||||
|
||||
LLFloaterInventoryBackup::LLFloaterInventoryBackup(std::string path, std::vector<LLInventoryCategory*> cats, std::vector<LLInventoryItem*> items)
|
||||
: LLFloater(),
|
||||
mPath(path),
|
||||
mCats(cats),
|
||||
mItems(items),
|
||||
mBusy(0)
|
||||
{
|
||||
mItemsTotal = mItems.size();
|
||||
mItemsCompleted = 0;
|
||||
|
||||
LLFloaterInventoryBackup::sInstances.push_back(this);
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inventory_backup.xml");
|
||||
}
|
||||
|
||||
|
||||
LLFloaterInventoryBackup::~LLFloaterInventoryBackup()
|
||||
{
|
||||
LLFloaterInventoryBackup::sInstances.remove(this);
|
||||
}
|
||||
|
||||
BOOL LLFloaterInventoryBackup::postBuild(void)
|
||||
{
|
||||
// Make progress bar
|
||||
|
||||
/*
|
||||
LLLineEditor* line = new LLLineEditor(
|
||||
std::string("progress_line"),
|
||||
LLRect(4, 80, 396, 60),
|
||||
std::string("Progress"));
|
||||
line->setEnabled(FALSE);
|
||||
addChild(line);
|
||||
|
||||
LLViewBorder* border = new LLViewBorder(
|
||||
"progress_border",
|
||||
LLRect(4, 79, 395, 60));
|
||||
addChild(border);
|
||||
*/
|
||||
|
||||
// Add all items to the list
|
||||
|
||||
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("item_list");
|
||||
|
||||
std::vector<LLInventoryItem*>::iterator item_iter = mItems.begin();
|
||||
std::vector<LLInventoryItem*>::iterator item_end = mItems.end();
|
||||
for( ; item_iter != item_end; ++item_iter)
|
||||
{
|
||||
LLSD element;
|
||||
element["id"] = (*item_iter)->getUUID();
|
||||
|
||||
LLSD& type_column = element["columns"][LIST_TYPE];
|
||||
type_column["column"] = "type";
|
||||
type_column["type"] = "icon";
|
||||
type_column["value"] = "move_down_in.tga"; // FIXME
|
||||
|
||||
LLSD& name_column = element["columns"][LIST_NAME];
|
||||
name_column["column"] = "name";
|
||||
name_column["value"] = (*item_iter)->getName();
|
||||
|
||||
LLSD& status_column = element["columns"][LIST_STATUS];
|
||||
status_column["column"] = "status";
|
||||
status_column["value"] = "Pending";
|
||||
|
||||
list->addElement(element, ADD_BOTTOM);
|
||||
}
|
||||
|
||||
// Setup and go!
|
||||
mBusy = 1;
|
||||
mItemIter = mItems.begin();
|
||||
setStatus((*mItemIter)->getUUID(), "Downloading");
|
||||
LLInventoryBackup::download(*mItemIter, this, LLFloaterInventoryBackup::imageCallback, LLFloaterInventoryBackup::assetCallback);
|
||||
advance();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLFloaterInventoryBackup::advance()
|
||||
{
|
||||
while((mItemIter != mItems.end()) && (mBusy < 4))
|
||||
{
|
||||
mBusy++;
|
||||
mItemIter++;
|
||||
if(mItemIter >= mItems.end()) break;
|
||||
setStatus((*mItemIter)->getUUID(), "Downloading");
|
||||
LLInventoryBackup::download(*mItemIter, this, LLFloaterInventoryBackup::imageCallback, LLFloaterInventoryBackup::assetCallback);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterInventoryBackup::setStatus(LLUUID itemid, std::string status)
|
||||
{
|
||||
LLScrollListCtrl* list = getChild<LLScrollListCtrl>("item_list");
|
||||
std::vector<LLScrollListItem*> items = list->getAllData();
|
||||
std::vector<LLScrollListItem*>::iterator iter = items.begin();
|
||||
std::vector<LLScrollListItem*>::iterator end = items.end();
|
||||
for( ; iter != end; ++iter)
|
||||
{
|
||||
if((*iter)->getUUID() == itemid)
|
||||
{
|
||||
(*iter)->getColumn(LIST_STATUS)->setValue(status);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterInventoryBackup::finishItem(LLUUID itemid, std::string status)
|
||||
{
|
||||
// Update big happy progress bar
|
||||
mItemsCompleted++;
|
||||
LLView* progress_background = getChildView("progress_background", TRUE, TRUE);
|
||||
LLRect rect = progress_background->getRect();
|
||||
float item_count = (float)mItemsTotal;
|
||||
float item_pos = (float)mItemsCompleted;
|
||||
float rect_width = (float)rect.getWidth();
|
||||
float incr = rect_width / item_count;
|
||||
incr *= item_pos;
|
||||
rect.mRight = rect.mLeft + (S32)incr;
|
||||
LLView* progress_foreground = getChildView("progress_foreground", TRUE, TRUE);
|
||||
progress_foreground->setRect(rect);
|
||||
|
||||
if(mItemsCompleted >= mItemsTotal)
|
||||
{
|
||||
childSetText("progress_background", llformat("Completed %d items.", mItemsTotal));
|
||||
childSetVisible("progress_foreground", false);
|
||||
}
|
||||
|
||||
// Update item status
|
||||
setStatus(itemid, status);
|
||||
|
||||
// And advance
|
||||
mBusy--;
|
||||
advance();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterInventoryBackup::imageCallback(BOOL success,
|
||||
LLViewerImage *src_vi,
|
||||
LLImageRaw* src,
|
||||
LLImageRaw* aux_src,
|
||||
S32 discard_level,
|
||||
BOOL final,
|
||||
void* userdata)
|
||||
{
|
||||
if(final)
|
||||
{
|
||||
LLInventoryBackup::callbackdata* data = static_cast<LLInventoryBackup::callbackdata*>(userdata);
|
||||
LLFloaterInventoryBackup* floater = (LLFloaterInventoryBackup*)(data->floater);
|
||||
LLInventoryItem* item = data->item;
|
||||
|
||||
if(std::find(LLFloaterInventoryBackup::sInstances.begin(), LLFloaterInventoryBackup::sInstances.end(), floater) == LLFloaterInventoryBackup::sInstances.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(!success)
|
||||
{
|
||||
floater->finishItem(item->getUUID(), "Failed download");
|
||||
return;
|
||||
}
|
||||
|
||||
std::string filename = floater->mPath + "\\" + LLInventoryBackup::getPath(gInventory.getCategory(item->getParentUUID()), floater->mCats) + "\\" + LLDir::getScrubbedFileName(item->getName());
|
||||
filename = LLInventoryBackup::getUniqueFilename(filename, LLInventoryBackup::getExtension(item));
|
||||
|
||||
LLPointer<LLImageTGA> image_tga = new LLImageTGA;
|
||||
if( !image_tga->encode( src ) )
|
||||
{
|
||||
floater->finishItem(item->getUUID(), "Failed tga encode");
|
||||
}
|
||||
else if( !image_tga->save( filename ) )
|
||||
{
|
||||
floater->finishItem(item->getUUID(), "Failed save");
|
||||
}
|
||||
else
|
||||
{
|
||||
floater->finishItem(item->getUUID(), "Done");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
src_vi->setBoostLevel(LLViewerImageBoostLevel::BOOST_UI);
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterInventoryBackup::assetCallback(LLVFS *vfs,
|
||||
const LLUUID& asset_uuid,
|
||||
LLAssetType::EType type,
|
||||
void* user_data, S32 status, LLExtStat ext_status)
|
||||
{
|
||||
LLInventoryBackup::callbackdata* data = static_cast<LLInventoryBackup::callbackdata*>(user_data);
|
||||
LLFloaterInventoryBackup* floater = (LLFloaterInventoryBackup*)(data->floater);
|
||||
LLInventoryItem* item = data->item;
|
||||
|
||||
if(std::find(LLFloaterInventoryBackup::sInstances.begin(), LLFloaterInventoryBackup::sInstances.end(), floater) == LLFloaterInventoryBackup::sInstances.end())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(status != 0)
|
||||
{
|
||||
floater->finishItem(item->getUUID(), "Failed download");
|
||||
return;
|
||||
}
|
||||
|
||||
// Todo: this doesn't work for static vfs shit
|
||||
LLVFile file(vfs, asset_uuid, type, LLVFile::READ);
|
||||
S32 size = file.getSize();
|
||||
|
||||
char* buffer = new char[size];
|
||||
if (buffer == NULL)
|
||||
{
|
||||
//llerrs << "Memory Allocation Failed" << llendl;
|
||||
floater->finishItem(item->getUUID(), "Failed memory allocation");
|
||||
return;
|
||||
}
|
||||
|
||||
file.read((U8*)buffer, size);
|
||||
|
||||
// Write it back out...
|
||||
std::string filename = floater->mPath + "\\" + LLInventoryBackup::getPath(gInventory.getCategory(item->getParentUUID()), floater->mCats) + "\\" + LLDir::getScrubbedFileName(item->getName());
|
||||
filename = LLInventoryBackup::getUniqueFilename(filename, LLInventoryBackup::getExtension(item));
|
||||
|
||||
std::ofstream export_file(filename.c_str(), std::ofstream::binary);
|
||||
export_file.write(buffer, size);
|
||||
export_file.close();
|
||||
|
||||
floater->finishItem(item->getUUID(), "Done");
|
||||
}
|
||||
// </edit>
|
||||
128
indra/newview/llinventorybackup.h
Normal file
128
indra/newview/llinventorybackup.h
Normal file
@@ -0,0 +1,128 @@
|
||||
// <edit>
|
||||
#ifndef LL_LLINVENTORYBACKUP_H
|
||||
#define LL_LLINVENTORYBACKUP_H
|
||||
|
||||
#include "llviewerinventory.h"
|
||||
#include "llfolderview.h"
|
||||
#include "llfilepicker.h"
|
||||
#include "llviewerimage.h"
|
||||
#include "llfloater.h"
|
||||
|
||||
|
||||
class LLInventoryBackupOrder
|
||||
{
|
||||
public:
|
||||
LLInventoryBackupOrder();
|
||||
|
||||
std::string mPath;
|
||||
std::vector<LLInventoryCategory*> mCats;
|
||||
std::vector<LLInventoryItem*> mItems;
|
||||
|
||||
bool mDownloadTextures;
|
||||
bool mDownloadSounds;
|
||||
bool mDownloadCallingCards;
|
||||
bool mDownloadLandmarks;
|
||||
bool mDownloadScripts;
|
||||
bool mDownloadWearables;
|
||||
bool mDownloadObjects;
|
||||
bool mDownloadNotecards;
|
||||
bool mDownloadAnimations;
|
||||
bool mDownloadGestures;
|
||||
//bool mDownloadOthers;
|
||||
};
|
||||
|
||||
class LLFloaterInventoryBackupSettings
|
||||
: public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterInventoryBackupSettings(LLInventoryBackupOrder* order);
|
||||
BOOL postBuild(void);
|
||||
static void onClickNext(void* userdata);
|
||||
|
||||
LLInventoryBackupOrder* mOrder;
|
||||
virtual ~LLFloaterInventoryBackupSettings();
|
||||
};
|
||||
|
||||
class LLFloaterInventoryBackup
|
||||
: public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterInventoryBackup(std::string path, std::vector<LLInventoryCategory*> cats, std::vector<LLInventoryItem*> items);
|
||||
BOOL postBuild(void);
|
||||
|
||||
std::string mPath;
|
||||
std::vector<LLInventoryCategory*> mCats;
|
||||
std::vector<LLInventoryItem*> mItems;
|
||||
std::vector<LLInventoryItem*>::iterator mItemIter;
|
||||
int mBusy;
|
||||
|
||||
static std::list<LLFloaterInventoryBackup*> sInstances;
|
||||
|
||||
private:
|
||||
virtual ~LLFloaterInventoryBackup();
|
||||
void setStatus(LLUUID itemid, std::string status);
|
||||
void finishItem(LLUUID itemid, std::string status);
|
||||
void advance();
|
||||
static void imageCallback(BOOL success,
|
||||
LLViewerImage *src_vi,
|
||||
LLImageRaw* src,
|
||||
LLImageRaw* aux_src,
|
||||
S32 discard_level,
|
||||
BOOL final,
|
||||
void* userdata);
|
||||
static void assetCallback(LLVFS *vfs,
|
||||
const LLUUID& asset_uuid,
|
||||
LLAssetType::EType type,
|
||||
void* user_data, S32 status, LLExtStat ext_status);
|
||||
|
||||
int mItemsTotal;
|
||||
int mItemsCompleted;
|
||||
|
||||
enum LIST_COLUMN_ORDER
|
||||
{
|
||||
LIST_TYPE,
|
||||
LIST_NAME,
|
||||
LIST_STATUS
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
class LLInventoryBackup
|
||||
{
|
||||
public:
|
||||
static LLFilePicker::ESaveFilter getSaveFilter(LLInventoryItem* item);
|
||||
static std::string getExtension(LLInventoryItem* item);
|
||||
static std::string getUniqueFilename(std::string filename, std::string extension);
|
||||
static std::string getUniqueDirname(std::string dirname);
|
||||
static bool itemIsFolder(LLInventoryItem* item);
|
||||
static void save(LLFolderView* folder);
|
||||
static void download(LLInventoryItem* item, LLFloater* floater, loaded_callback_func onImage, LLGetAssetCallback onAsset);
|
||||
static std::string getPath(LLInventoryCategory* cat, std::vector<LLInventoryCategory*> cats);
|
||||
|
||||
struct callbackdata
|
||||
{
|
||||
LLFloater* floater;
|
||||
LLInventoryItem* item;
|
||||
};
|
||||
|
||||
private:
|
||||
static void imageCallback(BOOL success,
|
||||
LLViewerImage *src_vi,
|
||||
LLImageRaw* src,
|
||||
LLImageRaw* aux_src,
|
||||
S32 discard_level,
|
||||
BOOL final,
|
||||
void* userdata);
|
||||
static void assetCallback(LLVFS *vfs,
|
||||
const LLUUID& asset_uuid,
|
||||
LLAssetType::EType type,
|
||||
void* user_data, S32 status, LLExtStat ext_status);
|
||||
static void climb(LLInventoryCategory* cat,
|
||||
std::vector<LLInventoryCategory*>& cats,
|
||||
std::vector<LLInventoryItem*>& items);
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
// </edit>
|
||||
@@ -1250,6 +1250,7 @@ const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventoryS
|
||||
const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
|
||||
const std::string LLInventoryPanel::WORNITEMS_SORT_ORDER = std::string("WornItemsSortOrder");
|
||||
const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
|
||||
|
||||
// <edit>
|
||||
std::list<LLInventoryPanel*> LLInventoryPanel::sInstances;
|
||||
// </edit>
|
||||
@@ -1669,6 +1670,7 @@ void LLInventoryPanel::buildNewViews(const LLUUID& id)
|
||||
mInventory->unlockDirectDescendentArrays(id);
|
||||
}
|
||||
}
|
||||
|
||||
// <edit>
|
||||
void LLInventoryPanel::buildNewViews(const LLInventoryObject* objectp)
|
||||
{
|
||||
@@ -1766,6 +1768,7 @@ void LLInventoryPanel::buildNewViews(const LLInventoryObject* objectp)
|
||||
mInventory->unlockDirectDescendentArrays(objectp->getUUID());
|
||||
}
|
||||
}
|
||||
// </edit>
|
||||
|
||||
struct LLConfirmPurgeData
|
||||
{
|
||||
|
||||
@@ -751,7 +751,10 @@ BOOL LLTaskCategoryBridge::renameItem(const std::string& new_name)
|
||||
|
||||
BOOL LLTaskCategoryBridge::isItemRemovable()
|
||||
{
|
||||
return FALSE;
|
||||
// <edit>
|
||||
//return FALSE;
|
||||
return TRUE;
|
||||
// </edit>
|
||||
}
|
||||
|
||||
void LLTaskCategoryBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
|
||||
@@ -822,13 +825,19 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
|
||||
case DAD_BODYPART:
|
||||
case DAD_ANIMATION:
|
||||
case DAD_GESTURE:
|
||||
// <edit>
|
||||
case DAD_CALLINGCARD:
|
||||
// </edit>
|
||||
// *HACK: In order to resolve SL-22177, we need to block
|
||||
// drags from notecards and objects onto other
|
||||
// objects. uncomment the simpler version when we have
|
||||
// that right.
|
||||
//accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
|
||||
if(LLToolDragAndDrop::isInventoryDropAcceptable(
|
||||
object, (LLViewerInventoryItem*)cargo_data)
|
||||
accept = LLToolDragAndDrop::isInventoryDropAcceptable(object, (LLViewerInventoryItem*)cargo_data);
|
||||
// <edit> testzone
|
||||
//if(LLToolDragAndDrop::isInventoryDropAcceptable(
|
||||
// object, (LLViewerInventoryItem*)cargo_data)
|
||||
if(object->permModify()
|
||||
// </edit>
|
||||
&& (LLToolDragAndDrop::SOURCE_WORLD != LLToolDragAndDrop::getInstance()->getSource())
|
||||
&& (LLToolDragAndDrop::SOURCE_NOTECARD != LLToolDragAndDrop::getInstance()->getSource()))
|
||||
{
|
||||
@@ -866,7 +875,9 @@ BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop,
|
||||
LLToolDragAndDrop::getInstance()->getSourceID());
|
||||
}
|
||||
break;
|
||||
case DAD_CALLINGCARD:
|
||||
// <edit>
|
||||
//case DAD_CALLINGCARD:
|
||||
// </edit>
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
16
indra/newview/skins/default/xui/en-us/floater_clothing.xml
Normal file
16
indra/newview/skins/default/xui/en-us/floater_clothing.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater can_close="true" can_drag_on_left="false" can_minimize="true" can_resize="true"
|
||||
height="435" min_height="200" min_width="325" name="clothing"
|
||||
rect_control="FloaterClothingRect" title="Clothing" width="325">
|
||||
<scroll_list bottom="-395" draw_border="true" draw_heading="true"
|
||||
follows="top|left|bottom|right" height="370" left="15" multi_select="false"
|
||||
name="clothing_list" width="295">
|
||||
<column label="" name="icon" width="16" />
|
||||
<column label="Name" name="name" width="250" />
|
||||
<column name="sort" width="-1" />
|
||||
</scroll_list>
|
||||
<button bottom_delta="-30" follows="bottom|right" height="20" label="Take Off"
|
||||
left="-200" name="take_off_btn" width="80" />
|
||||
<button bottom_delta="0" follows="bottom|right" height="20" label="Wear" left="-100"
|
||||
name="wear_btn" width="80" />
|
||||
</floater>
|
||||
24
indra/newview/skins/default/xui/en-us/floater_import.xml
Normal file
24
indra/newview/skins/default/xui/en-us/floater_import.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater can_close="true" can_drag_on_left="false" can_minimize="false"
|
||||
can_resize="false" height="440" name="Import" title="" width="680">
|
||||
<text height="15" left="10" name="name_label" top="10">
|
||||
Name:
|
||||
</text>
|
||||
<line_editor height="19" max_length="254" name="name_form" width="280" />
|
||||
<text height="15" name="description_label">
|
||||
Description:
|
||||
</text>
|
||||
<line_editor height="19" max_length="254" name="description_form" width="280" />
|
||||
<text height="15" name="preview_label">
|
||||
Files to upload:
|
||||
</text>
|
||||
<scroll_list draw_border="true" height="280" left="10" multi_select="true"
|
||||
name="upload_list" top="-30" width="400" />
|
||||
<button bottom="10" height="20" label="Cancel" left="182" name="cancel_btn" width="64" />
|
||||
<button bottom="10" height="20" label="Upload (L$10)" left="31" name="ok_btn"
|
||||
width="110" />
|
||||
<text bottom="356" height="15" left="420" name="preview_label2">
|
||||
Image Preview:
|
||||
</text>
|
||||
<icon height="256" left="420" name="dummy_preview" width="256" />
|
||||
</floater>
|
||||
@@ -134,6 +134,10 @@
|
||||
<on_click filter="" function="Inventory.DoCreate" userdata="eyes" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
<menu_item_call bottom_delta="-18" height="18" label="New Pretend Item" left="0" mouse_opaque="true"
|
||||
name="New Pretend Item" width="118">
|
||||
<on_click filter="" function="Inventory.DoCreate" userdata="pretend" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
<menu bottom_delta="64" drop_shadow="true" height="49"
|
||||
label="Sort" left="0" mouse_opaque="false" name="Sort" opaque="true"
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater can_close="true" can_drag_on_left="false" can_minimize="true"
|
||||
can_resize="false" height="160" min_height="160" min_width="100"
|
||||
name="item properties"
|
||||
title="Inventory Item Properties" width="350">
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-35" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
|
||||
mouse_opaque="true" name="LabelItemNameTitle" v_pad="0" width="78">
|
||||
Name:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-41"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="63" mouse_opaque="true"
|
||||
name="name_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-55" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
|
||||
mouse_opaque="true" name="LabelItemDescTitle" v_pad="0" width="78">
|
||||
Description:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-61"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="desc_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
|
||||
mouse_opaque="true" name="LabelAssetTitle" v_pad="0" width="78">
|
||||
Asset:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="asset_id_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
|
||||
mouse_opaque="true" name="LabelCreatorTitle" v_pad="0" width="78">
|
||||
Creator:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="creator_id_line" width="252" />
|
||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="10"
|
||||
mouse_opaque="true" name="LabelOwnerTitle" v_pad="0" width="78">
|
||||
Owner:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom_delta="0"
|
||||
enabled="true" follows="left|top|right" font="SansSerifSmall" height="16"
|
||||
is_unicode="false" left="88" max_length="127" mouse_opaque="true"
|
||||
name="owner_id_line" width="252" />
|
||||
|
||||
<combo_box allow_text_entry="false" bottom_delta="-25" follows="left|top" height="18"
|
||||
left="10" max_chars="20" mouse_opaque="true" name="type_combo"
|
||||
width="100">
|
||||
<combo_item name="texture" value="texture">
|
||||
texture
|
||||
</combo_item>
|
||||
<combo_item name="sound" value="sound">
|
||||
sound
|
||||
</combo_item>
|
||||
<combo_item name="callcard" value="callcard">
|
||||
callcard
|
||||
</combo_item>
|
||||
<combo_item name="landmark" value="landmark">
|
||||
landmark
|
||||
</combo_item>
|
||||
<combo_item name="script" value="script">
|
||||
script
|
||||
</combo_item>
|
||||
<combo_item name="clothing" value="clothing">
|
||||
clothing
|
||||
</combo_item>
|
||||
<combo_item name="object" value="object">
|
||||
object
|
||||
</combo_item>
|
||||
<combo_item name="notecard" value="notecard">
|
||||
notecard
|
||||
</combo_item>
|
||||
<combo_item name="category" value="category">
|
||||
category
|
||||
</combo_item>
|
||||
<combo_item name="root" value="root">
|
||||
root
|
||||
</combo_item>
|
||||
<combo_item name="lsltext" value="lsltext">
|
||||
lsltext
|
||||
</combo_item>
|
||||
<combo_item name="lslbyte" value="lslbyte">
|
||||
lslbyte
|
||||
</combo_item>
|
||||
<combo_item name="txtr_tga" value="txtr_tga">
|
||||
txtr_tga
|
||||
</combo_item>
|
||||
<combo_item name="bodypart" value="bodypart">
|
||||
bodypart
|
||||
</combo_item>
|
||||
<combo_item name="trash" value="trash">
|
||||
trash
|
||||
</combo_item>
|
||||
<combo_item name="snapshot" value="snapshot">
|
||||
snapshot
|
||||
</combo_item>
|
||||
<combo_item name="lstndfnd" value="lstndfnd">
|
||||
lstndfnd
|
||||
</combo_item>
|
||||
<combo_item name="snd_wav" value="snd_wav">
|
||||
snd_wav
|
||||
</combo_item>
|
||||
<combo_item name="img_tga" value="img_tga">
|
||||
img_tga
|
||||
</combo_item>
|
||||
<combo_item name="jpeg" value="jpeg">
|
||||
jpeg
|
||||
</combo_item>
|
||||
<combo_item name="animatn" value="animatn">
|
||||
animatn
|
||||
</combo_item>
|
||||
<combo_item name="gesture" value="gesture">
|
||||
gesture
|
||||
</combo_item>
|
||||
<combo_item name="simstate" value="simstate">
|
||||
simstate
|
||||
</combo_item>
|
||||
</combo_box>
|
||||
<check_box bottom_delta="0" height="16" initial_value="true" label="Open immediately"
|
||||
left="115" mouse_opaque="true" name="chk_open" width="120" />
|
||||
<button bottom_delta="0" font="SansSerif"
|
||||
height="20" label="OK" left="240"
|
||||
mouse_opaque="true" name="ok_btn" width="100" />
|
||||
</floater>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater bottom="-338" can_close="true" can_drag_on_left="false" can_minimize="true"
|
||||
can_resize="true" enabled="true" height="331" left="201" min_height="120"
|
||||
min_width="300" mouse_opaque="true" name="preview_texture" width="300">
|
||||
<button bottom="-325" enabled="true" follows="right|bottom" font="SansSerif"
|
||||
halign="center" height="20" label="Copy To Inventory" left="105"
|
||||
mouse_opaque="true" name="Copy To Inventory" scale_image="true" width="170" />
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="30" drop_shadow_visible="true" enabled="true" follows="left|bottom"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
|
||||
mouse_opaque="true" name="dimensions" v_pad="0" width="163">
|
||||
Dimensions: [WIDTH] x [HEIGHT]
|
||||
</text>
|
||||
</floater>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater bottom="-331" can_close="true" can_drag_on_left="false" can_minimize="true"
|
||||
can_resize="true" enabled="true" height="331" left="176" min_height="120"
|
||||
min_width="300" mouse_opaque="true" name="preview_texture" width="300">
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="-38" drop_shadow_visible="true" enabled="true" follows="left|top"
|
||||
font="SansSerif" h_pad="0" halign="left" height="19" left="13"
|
||||
mouse_opaque="true" name="desc txt" v_pad="0" width="80">
|
||||
Description:
|
||||
</text>
|
||||
<line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-38"
|
||||
enabled="true" follows="left|top|right" font="SansSerif"
|
||||
handle_edit_keys_directly="false" height="19" left="93" max_length="127"
|
||||
mouse_opaque="true" name="desc" select_all_on_focus_received="false"
|
||||
select_on_focus="false" width="194" />
|
||||
<button bottom="-322" enabled="true" follows="left|bottom" font="SansSerif"
|
||||
halign="center" height="20" label="Keep" label_selected="Keep" left="9"
|
||||
mouse_opaque="true" name="Keep" scale_image="true" width="100" />
|
||||
<button bottom="-322" enabled="true" follows="left|bottom" font="SansSerif"
|
||||
halign="center" height="20" label="Discard" label_selected="Discard"
|
||||
left="114" mouse_opaque="true" name="Discard" scale_image="true"
|
||||
width="100" />
|
||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||
bottom="30" drop_shadow_visible="true" enabled="true" follows="left|bottom"
|
||||
font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
|
||||
mouse_opaque="true" name="dimensions" v_pad="0" width="163">
|
||||
Dimensions: [WIDTH] x [HEIGHT]
|
||||
</text>
|
||||
</floater>
|
||||
456
indra/newview/skins/default/xui/en-us/mime_types.xml
Normal file
456
indra/newview/skins/default/xui/en-us/mime_types.xml
Normal file
@@ -0,0 +1,456 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<mimetypes name="default">
|
||||
<defaultlabel>
|
||||
(Unknown)
|
||||
</defaultlabel>
|
||||
<defaultwidget>
|
||||
none
|
||||
</defaultwidget>
|
||||
<defaultimpl>
|
||||
LLMediaImplLLMozLib
|
||||
</defaultimpl>
|
||||
<widgetset name="web">
|
||||
<label name="web_label">
|
||||
Web Content
|
||||
</label>
|
||||
<icon>
|
||||
icn_media_web.tga
|
||||
</icon>
|
||||
<default_type>
|
||||
text/html
|
||||
</default_type>
|
||||
<tooltip name="web_tooltip">
|
||||
This location has Web content
|
||||
</tooltip>
|
||||
<playtip name="web_playtip">
|
||||
Show Web content
|
||||
</playtip>
|
||||
<allow_resize>
|
||||
true
|
||||
</allow_resize>
|
||||
<allow_looping>
|
||||
false
|
||||
</allow_looping>
|
||||
</widgetset>
|
||||
<widgetset name="movie">
|
||||
<label name="movie_label">
|
||||
Movie
|
||||
</label>
|
||||
<default_type>
|
||||
video/*
|
||||
</default_type>
|
||||
<icon>
|
||||
icn_media_movie.tga
|
||||
</icon>
|
||||
<tooltip name="movie_tooltip">
|
||||
There is a movie to play here
|
||||
</tooltip>
|
||||
<playtip name="movie_playtip">
|
||||
Play movie
|
||||
</playtip>
|
||||
<allow_resize>
|
||||
false
|
||||
</allow_resize>
|
||||
<allow_looping>
|
||||
true
|
||||
</allow_looping>
|
||||
</widgetset>
|
||||
<widgetset name="none">
|
||||
<label name="none_label">
|
||||
No Content
|
||||
</label>
|
||||
<default_type>
|
||||
none/none
|
||||
</default_type>
|
||||
<icon>
|
||||
icn_media_web.tga
|
||||
</icon>
|
||||
<tooltip name="none_tooltip">
|
||||
No media here
|
||||
</tooltip>
|
||||
<playtip name="none_playtip" />
|
||||
<allow_resize>
|
||||
false
|
||||
</allow_resize>
|
||||
<allow_looping>
|
||||
false
|
||||
</allow_looping>
|
||||
</widgetset>
|
||||
<widgetset name="image">
|
||||
<label name="image_label">
|
||||
Image
|
||||
</label>
|
||||
<icon>
|
||||
icn_media_web.tga
|
||||
</icon>
|
||||
<default_type>
|
||||
image/*
|
||||
</default_type>
|
||||
<tooltip name="image_tooltip">
|
||||
There is an image at this location
|
||||
</tooltip>
|
||||
<playtip name="image_playtip">
|
||||
View this location's image
|
||||
</playtip>
|
||||
<allow_resize>
|
||||
false
|
||||
</allow_resize>
|
||||
<allow_looping>
|
||||
false
|
||||
</allow_looping>
|
||||
</widgetset>
|
||||
<widgetset name="audio">
|
||||
<label name="audio_label">
|
||||
Audio
|
||||
</label>
|
||||
<icon>
|
||||
icn_media_web.tga
|
||||
</icon>
|
||||
<default_type>
|
||||
audio/*
|
||||
</default_type>
|
||||
<tooltip name="audio_tooltip">
|
||||
There is audio at this location
|
||||
</tooltip>
|
||||
<playtip name="audio_playtip">
|
||||
Play this location's audio
|
||||
</playtip>
|
||||
<allow_resize>
|
||||
false
|
||||
</allow_resize>
|
||||
<allow_looping>
|
||||
true
|
||||
</allow_looping>
|
||||
</widgetset>
|
||||
<scheme name="rtsp">
|
||||
<label name="rtsp_label">
|
||||
Real Time Streaming
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
</scheme>
|
||||
<mimetype name="blank">
|
||||
<label name="blank_label">
|
||||
- None -
|
||||
</label>
|
||||
<widgettype>
|
||||
none
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="none/none">
|
||||
<label name="none/none_label">
|
||||
- None -
|
||||
</label>
|
||||
<widgettype>
|
||||
none
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="audio/*">
|
||||
<label name="audio2_label">
|
||||
Audio
|
||||
</label>
|
||||
<widgettype>
|
||||
audio
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="video/*">
|
||||
<label name="video2_label">
|
||||
Video
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="image/*">
|
||||
<label name="image2_label">
|
||||
Image
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="video/vnd.secondlife.qt.legacy">
|
||||
<label name="vnd.secondlife.qt.legacy_label">
|
||||
Movie (QuickTime)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="application/javascript">
|
||||
<label name="application/javascript_label">
|
||||
Javascript
|
||||
</label>
|
||||
<widgettype>
|
||||
web
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/ogg">
|
||||
<label name="application/ogg_label">
|
||||
Ogg Audio/Video
|
||||
</label>
|
||||
<widgettype>
|
||||
audio
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/pdf">
|
||||
<label name="application/pdf_label">
|
||||
PDF Document
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/postscript">
|
||||
<label name="application/postscript_label">
|
||||
Postscript Document
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/rtf">
|
||||
<label name="application/rtf_label">
|
||||
Rich Text (RTF)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/smil">
|
||||
<label name="application/smil_label">
|
||||
Synchronized Multimedia Integration Language (SMIL)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/xhtml+xml">
|
||||
<label name="application/xhtml+xml_label">
|
||||
Web Page (XHTML)
|
||||
</label>
|
||||
<widgettype>
|
||||
web
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/x-director">
|
||||
<label name="application/x-director_label">
|
||||
Macromedia Director
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="application/x-shockwave-flash">
|
||||
<label name="application/x-shockwave-flash_label">
|
||||
Flash
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="audio/mid">
|
||||
<label name="audio/mid_label">
|
||||
Audio (MIDI)
|
||||
</label>
|
||||
<widgettype>
|
||||
audio
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="audio/mpeg">
|
||||
<label name="audio/mpeg_label">
|
||||
Audio (MP3)
|
||||
</label>
|
||||
<widgettype>
|
||||
audio
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="audio/x-aiff">
|
||||
<label name="audio/x-aiff_label">
|
||||
Audio (AIFF)
|
||||
</label>
|
||||
<widgettype>
|
||||
audio
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype name="audio/x-wav">
|
||||
<label name="audio/x-wav_label">
|
||||
Audio (WAV)
|
||||
</label>
|
||||
<widgettype>
|
||||
audio
|
||||
</widgettype>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="image/bmp">
|
||||
<label name="image/bmp_label">
|
||||
Image (BMP)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="image/gif">
|
||||
<label name="image/gif_label">
|
||||
Image (GIF)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="image/jpeg">
|
||||
<label name="image/jpeg_label">
|
||||
Image (JPEG)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="image/png">
|
||||
<label name="image/png_label">
|
||||
Image (PNG)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="image/svg+xml">
|
||||
<label name="image/svg+xml_label">
|
||||
Image (SVG)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="image/tiff">
|
||||
<label name="image/tiff_label">
|
||||
Image (TIFF)
|
||||
</label>
|
||||
<widgettype>
|
||||
image
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="text/html">
|
||||
<label name="text/html_label">
|
||||
Web Page
|
||||
</label>
|
||||
<widgettype>
|
||||
web
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="text/plain">
|
||||
<label name="text/plain_label">
|
||||
Text
|
||||
</label>
|
||||
<widgettype>
|
||||
text
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="text/xml">
|
||||
<label name="text/xml_label">
|
||||
XML
|
||||
</label>
|
||||
<widgettype>
|
||||
text
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplLLMozLib
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="video/mpeg">
|
||||
<label name="video/mpeg_label">
|
||||
Movie (MPEG)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="video/mp4">
|
||||
<label name="video/mp4_label">
|
||||
Movie (MP4)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="video/quicktime">
|
||||
<label name="video/quicktime_label">
|
||||
Movie (QuickTime)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="video/x-ms-asf">
|
||||
<label name="video/x-ms-asf_label">
|
||||
Movie (Windows Media ASF)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype name="video/x-ms-wmv">
|
||||
<label name="video/x-ms-wmv_label">
|
||||
Movie (Windows Media WMV)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
<mimetype menu="1" name="video/x-msvideo">
|
||||
<label name="video/x-msvideo_label">
|
||||
Movie (AVI)
|
||||
</label>
|
||||
<widgettype>
|
||||
movie
|
||||
</widgettype>
|
||||
<impl>
|
||||
LLMediaImplQuickTime
|
||||
</impl>
|
||||
</mimetype>
|
||||
</mimetypes>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel border="true" bottom="0" follows="top|left" height="220" left="0"
|
||||
name="Covenant" title="Covenant" width="480">
|
||||
<text bottom_delta="-5" follows="left|top"
|
||||
font="SansSerifSmall" height="20" left="180" name="covenant_timestamp_text"
|
||||
width="250" />
|
||||
<text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20"
|
||||
left="10" name="region_name_lbl" width="100">
|
||||
Region:
|
||||
</text>
|
||||
<text bottom_delta="0" follows="left|top"
|
||||
font="SansSerifSmall" height="20" left="120" name="region_name_text"
|
||||
width="150">
|
||||
(unknown)
|
||||
</text>
|
||||
<text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20"
|
||||
left="10" name="estate_name_lbl" width="100">
|
||||
Estate:
|
||||
</text>
|
||||
<text bottom_delta="0" follows="left|top"
|
||||
font="SansSerifSmall" height="20" left="120" name="estate_name_text"
|
||||
width="150">
|
||||
(unknown)
|
||||
</text>
|
||||
<text bottom_delta="-20" follows="left|top" font="SansSerifSmall" height="20"
|
||||
left="10" name="estate_owner_lbl" width="100">
|
||||
Estate Owner:
|
||||
</text>
|
||||
<text bottom_delta="0" follows="left|top"
|
||||
font="SansSerifSmall" height="20" left="120" name="estate_owner_text"
|
||||
width="150">
|
||||
(unknown)
|
||||
</text>
|
||||
<text bottom_delta="-20" follows="left|top"
|
||||
font="SansSerif" height="20" left="60" name="resellable_clause"
|
||||
width="300">
|
||||
Purchased land in this region may or may not be resold.
|
||||
</text>
|
||||
<text bottom_delta="-20" follows="left|top"
|
||||
font="SansSerif" height="20" left="60" name="changeable_clause"
|
||||
width="375">
|
||||
Purchased land in this region may or may not be joined or subdivided.
|
||||
</text>
|
||||
<text_editor bottom_delta="-200" enabled="false"
|
||||
follows="left|top" font="SansSerifSmall" height="200" left="15"
|
||||
max_length="65535" name="covenant_editor"
|
||||
width="425" word_wrap="true" />
|
||||
<string name="can_resell">
|
||||
Purchased land in this region may be resold.
|
||||
</string>
|
||||
<string name="can_not_resell">
|
||||
Purchased land in this region may not be resold.
|
||||
</string>
|
||||
<string name="can_change">
|
||||
Purchased land in this region may be joined or subdivided.
|
||||
</string>
|
||||
<string name="can_not_change">
|
||||
Purchased land in this region may not be joined or subdivided.
|
||||
</string>
|
||||
</panel>
|
||||
Reference in New Issue
Block a user