mirror of
https://github.com/FirestormViewer/phoenix-firestorm.git
synced 2026-08-14 00:48:30 +00:00
Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/llui/lltabcontainer.cpp # indra/newview/llpanelmaininventory.cpp # indra/newview/llpreviewnotecard.cpp
This commit is contained in:
@@ -167,6 +167,28 @@ constexpr U8 SIM_ACCESS_ADULT = 42; // Seriously Adult Only
|
||||
constexpr U8 SIM_ACCESS_DOWN = 254;
|
||||
constexpr U8 SIM_ACCESS_MAX = SIM_ACCESS_ADULT;
|
||||
|
||||
// map item types
|
||||
constexpr U32 MAP_ITEM_TELEHUB = 0x01;
|
||||
constexpr U32 MAP_ITEM_PG_EVENT = 0x02;
|
||||
constexpr U32 MAP_ITEM_MATURE_EVENT = 0x03;
|
||||
// constexpr U32 MAP_ITEM_POPULAR = 0x04; // No longer supported, 2009-03-02 KLW
|
||||
// constexpr U32 MAP_ITEM_AGENT_COUNT = 0x05;
|
||||
constexpr U32 MAP_ITEM_AGENT_LOCATIONS = 0x06;
|
||||
constexpr U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
|
||||
constexpr U32 MAP_ITEM_CLASSIFIED = 0x08;
|
||||
constexpr U32 MAP_ITEM_ADULT_EVENT = 0x09;
|
||||
constexpr U32 MAP_ITEM_LAND_FOR_SALE_ADULT = 0x0a;
|
||||
|
||||
// Region map layer numbers
|
||||
constexpr S32 MAP_SIM_OBJECTS = 0;
|
||||
constexpr S32 MAP_SIM_TERRAIN = 1;
|
||||
constexpr S32 MAP_SIM_LAND_FOR_SALE = 2; // Transparent alpha overlay of land for sale
|
||||
constexpr S32 MAP_SIM_IMAGE_TYPES = 3; // Number of map layers
|
||||
constexpr S32 MAP_SIM_INFO_MASK = 0x00FFFFFF; // Agent access may be stuffed into upper byte
|
||||
constexpr S32 MAP_SIM_LAYER_MASK = 0x0000FFFF; // Layer info is in lower 16 bits
|
||||
constexpr S32 MAP_SIM_RETURN_NULL_SIMS = 0x00010000;
|
||||
constexpr S32 MAP_SIM_PRELUDE = 0x00020000;
|
||||
|
||||
// attachment constants
|
||||
constexpr U8 ATTACHMENT_ADD = 0x80;
|
||||
|
||||
|
||||
@@ -2488,6 +2488,19 @@ void LLTabContainer::setTabVisibility( LLPanel const *aPanel, bool aVisible )
|
||||
updateMaxScrollPos();
|
||||
}
|
||||
|
||||
bool LLTabContainer::getTabVisibility(const LLPanel* panel) const
|
||||
{
|
||||
for (tuple_list_t::const_iterator itr = mTabList.begin(); itr != mTabList.end(); ++itr)
|
||||
{
|
||||
LLTabTuple const* pTT = *itr;
|
||||
if (pTT->mTabPanel == panel)
|
||||
{
|
||||
return pTT->mVisible;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// [SL:KB] - Patch: UI-TabRearrange | Checked: 2012-05-05 (Catznip-3.3)
|
||||
boost::signals2::connection LLTabContainer::setRearrangeCallback(const tab_rearrange_signal_t::slot_type& cb)
|
||||
{
|
||||
|
||||
@@ -248,6 +248,7 @@ public:
|
||||
S32 getMaxTabWidth() const { return mMaxTabWidth; }
|
||||
|
||||
void setTabVisibility( LLPanel const *aPanel, bool );
|
||||
bool getTabVisibility(const LLPanel* panel) const;
|
||||
|
||||
void startDragAndDropDelayTimer() { mDragAndDropDelayTimer.start(); }
|
||||
|
||||
|
||||
@@ -23595,6 +23595,39 @@ Change of this parameter will affect the layout of buttons in notification toast
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>InventoryShowRecentTab</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show/hide Recent tab in the Inventory floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>InventoryShowWornTab</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show/hide Worn tab in the Inventory floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>InventoryShowFavoritesTab</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show/hide Favorites tab in the Inventory floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>StatsReportMaxDuration</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -440,7 +440,25 @@ void LLGLTFLoader::processNodeHierarchy(S32 node_idx, std::map<std::string, S32>
|
||||
(LLModel::NO_ERRORS == pModel->getStatus()) &&
|
||||
validate_model(pModel))
|
||||
{
|
||||
mTransform.setIdentity();
|
||||
// Build the scene transform.
|
||||
// Non-skinned meshes: scene transform carries coord rotation + hierarchy,
|
||||
// preserving the object's rotation/position/scale for upload.
|
||||
// Skinned meshes: transform is already baked into vertices, so scene is identity.
|
||||
if (node.mSkin >= 0)
|
||||
{
|
||||
mTransform.setIdentity();
|
||||
}
|
||||
else
|
||||
{
|
||||
glm::mat4 hierarchy_transform;
|
||||
computeCombinedNodeTransform(mGLTFAsset, node_idx, hierarchy_transform);
|
||||
glm::mat4 combined = coord_system_rotation * hierarchy_transform;
|
||||
if (mApplyXYRotation)
|
||||
{
|
||||
combined = coord_system_rotationxy * combined;
|
||||
}
|
||||
mTransform = LLMatrix4(glm::value_ptr(combined));
|
||||
}
|
||||
transformation = mTransform;
|
||||
|
||||
// adjust the transformation to compensate for mesh normalization
|
||||
@@ -690,7 +708,12 @@ std::string LLGLTFLoader::processTexture(std::string& full_path_out, S32 texture
|
||||
// Process embedded textures
|
||||
if (image.mBufferView >= 0)
|
||||
{
|
||||
return extractTextureToTempFile(texture_index, texture_type);
|
||||
std::string temp_path = extractTextureToTempFile(texture_index, texture_type);
|
||||
if (!temp_path.empty())
|
||||
{
|
||||
full_path_out = temp_path;
|
||||
}
|
||||
return temp_path;
|
||||
}
|
||||
|
||||
return "";
|
||||
@@ -740,23 +763,47 @@ bool LLGLTFLoader::populateModelFromMesh(LLModel* pModel, const std::string& bas
|
||||
|
||||
S32 skinIdx = nodeno.mSkin;
|
||||
|
||||
// Compute final combined transform matrix (hierarchy + coordinate rotation)
|
||||
// Compute the vertex transform for this mesh.
|
||||
// Non-skinned meshes: vertices are left untransformed; the node's hierarchy transform
|
||||
// (rotation, translation, scale) is stored in the scene transform instead, matching
|
||||
// the DAE loader. This ensures the uploaded object's bounding box and transform
|
||||
// properties are correct. See: https://github.com/secondlife/viewer/issues/5431
|
||||
// Skinned meshes: coord rotation + hierarchy are baked into vertex positions because
|
||||
// inverse bind matrices and skin weights are already computed in that space.
|
||||
// TODO: consider aligning skinned meshes with the DAE loader (scene transform instead
|
||||
// of vertex baking), which would require adjusting inverse bind matrices, bind shape
|
||||
// matrix, and weight keying to match.
|
||||
S32 node_index = static_cast<S32>(&nodeno - &mGLTFAsset.mNodes[0]);
|
||||
glm::mat4 hierarchy_transform;
|
||||
computeCombinedNodeTransform(mGLTFAsset, node_index, hierarchy_transform);
|
||||
|
||||
// Combine transforms: coordinate rotation applied to hierarchy transform
|
||||
glm::mat4 final_transform = coord_system_rotation * hierarchy_transform;
|
||||
if (mApplyXYRotation)
|
||||
glm::mat4 vertex_transform;
|
||||
if (skinIdx >= 0)
|
||||
{
|
||||
final_transform = coord_system_rotationxy * final_transform;
|
||||
// Skinned mesh: bake coord rotation + hierarchy into vertices.
|
||||
// Inverse bind matrices and skin weights depend on this transform being applied.
|
||||
vertex_transform = coord_system_rotation * hierarchy_transform;
|
||||
if (mApplyXYRotation)
|
||||
{
|
||||
vertex_transform = coord_system_rotationxy * vertex_transform;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Non-skinned mesh: don't apply any transform to vertices.
|
||||
// The hierarchy transform will be stored in the scene transform matrix.
|
||||
vertex_transform = glm::mat4(1.0f); // identity
|
||||
}
|
||||
|
||||
// Check if we have a negative scale (flipped coordinate system)
|
||||
bool hasNegativeScale = glm::determinant(final_transform) < 0.0f;
|
||||
// coord_system_rotation and coord_system_rotationxy are pure rotations (det=1),
|
||||
// so negative scale depends only on the hierarchy transform.
|
||||
bool hasNegativeScale = glm::determinant(hierarchy_transform) < 0.0f;
|
||||
|
||||
bool hasVertexTransform = (vertex_transform != glm::mat4(1.0f));
|
||||
|
||||
// Pre-compute normal transform matrix (transpose of inverse of upper-left 3x3)
|
||||
const glm::mat3 normal_transform = glm::transpose(glm::inverse(glm::mat3(final_transform)));
|
||||
const glm::mat3 normal_transform = glm::transpose(glm::inverse(glm::mat3(vertex_transform)));
|
||||
|
||||
// Mark unsuported joints with '-1' so that they won't get added into weights
|
||||
// GLTF maps all joints onto all meshes. Gather use count per mesh to cut unused ones.
|
||||
@@ -809,27 +856,45 @@ bool LLGLTFLoader::populateModelFromMesh(LLModel* pModel, const std::string& bas
|
||||
return false; // Skip this primitive
|
||||
}
|
||||
|
||||
// Apply the global scale and center offset to all vertices
|
||||
// Apply vertex transform (if any) to all vertices.
|
||||
// Skinned meshes: this bakes coord rotation + hierarchy into vertices.
|
||||
// Non-skinned meshes: vertex_transform is identity (no baking).
|
||||
for (U32 i = 0; i < prim.getVertexCount(); i++)
|
||||
{
|
||||
// Use pre-computed final_transform
|
||||
glm::vec4 pos(prim.mPositions[i][0], prim.mPositions[i][1], prim.mPositions[i][2], 1.0f);
|
||||
glm::vec4 transformed_pos = final_transform * pos;
|
||||
|
||||
GLTFVertex vert;
|
||||
vert.position = glm::vec3(transformed_pos);
|
||||
|
||||
if (!prim.mNormals.empty())
|
||||
if (hasVertexTransform)
|
||||
{
|
||||
// Use pre-computed normal_transform
|
||||
glm::vec3 normal_vec(prim.mNormals[i][0], prim.mNormals[i][1], prim.mNormals[i][2]);
|
||||
vert.normal = glm::normalize(normal_transform * normal_vec);
|
||||
glm::vec4 pos(prim.mPositions[i][0], prim.mPositions[i][1], prim.mPositions[i][2], 1.0f);
|
||||
glm::vec4 transformed_pos = vertex_transform * pos;
|
||||
vert.position = glm::vec3(transformed_pos);
|
||||
|
||||
if (!prim.mNormals.empty())
|
||||
{
|
||||
glm::vec3 normal_vec(prim.mNormals[i][0], prim.mNormals[i][1], prim.mNormals[i][2]);
|
||||
vert.normal = glm::normalize(normal_transform * normal_vec);
|
||||
}
|
||||
else
|
||||
{
|
||||
vert.normal = glm::normalize(normal_transform * glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
LL_DEBUGS("GLTF_IMPORT") << "No normals found for primitive, using default normal." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Use default normal (pointing up in model space)
|
||||
vert.normal = glm::normalize(normal_transform * glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
LL_DEBUGS("GLTF_IMPORT") << "No normals found for primitive, using default normal." << LL_ENDL;
|
||||
// No transform: store raw GLTF positions and normals.
|
||||
// The scene transform will carry coord rotation + hierarchy.
|
||||
vert.position = glm::vec3(prim.mPositions[i][0], prim.mPositions[i][1], prim.mPositions[i][2]);
|
||||
|
||||
if (!prim.mNormals.empty())
|
||||
{
|
||||
vert.normal = glm::vec3(prim.mNormals[i][0], prim.mNormals[i][1], prim.mNormals[i][2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
vert.normal = glm::vec3(0.0f, 0.0f, 1.0f);
|
||||
LL_DEBUGS("GLTF_IMPORT") << "No normals found for primitive, using default normal." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
// Flip texture V coordinate
|
||||
|
||||
@@ -339,14 +339,14 @@ bool LLPanelMainInventory::postBuild()
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
LLInventoryPanel* favorites_panel = getChild<LLInventoryPanel>(FAVORITES);
|
||||
if (favorites_panel)
|
||||
mFavoritesPanel = getChild<LLInventoryPanel>(FAVORITES);
|
||||
if (mFavoritesPanel)
|
||||
{
|
||||
favorites_panel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER));
|
||||
LLInventoryFilter& favorites_filter = favorites_panel->getFilter();
|
||||
mFavoritesPanel->setSortOrder(gSavedSettings.getU32(LLInventoryPanel::DEFAULT_SORT_ORDER));
|
||||
LLInventoryFilter& favorites_filter = mFavoritesPanel->getFilter();
|
||||
favorites_filter.setEmptyLookupMessage("InventoryNoMatchingFavorites");
|
||||
favorites_filter.markDefault();
|
||||
favorites_panel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, favorites_panel, _1, _2));
|
||||
mFavoritesPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mFavoritesPanel, _1, _2));
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Only if we actually have it!
|
||||
@@ -463,6 +463,10 @@ bool LLPanelMainInventory::postBuild()
|
||||
menu->getChild<LLMenuItemGL>("Upload Animation")->setLabelArg("[COST]", animation_upload_cost_str);
|
||||
}
|
||||
|
||||
mFilterTabs->setTabVisibility(mRecentPanel, gSavedSettings.getBOOL("InventoryShowRecentTab"));
|
||||
mFilterTabs->setTabVisibility(mWornItemsPanel, gSavedSettings.getBOOL("InventoryShowWornTab"));
|
||||
mFilterTabs->setTabVisibility(mFavoritesPanel, gSavedSettings.getBOOL("InventoryShowFavoritesTab"));
|
||||
|
||||
// Trigger callback for focus received so we can deselect items in inbox/outbox
|
||||
LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMainInventory::onFocusReceived, this));
|
||||
|
||||
@@ -2176,8 +2180,10 @@ void LLPanelMainInventory::initSingleFolderRoot(const LLUUID& start_folder_id)
|
||||
void LLPanelMainInventory::initInventoryViews()
|
||||
{
|
||||
mAllItemsPanel->initializeViewBuilding();
|
||||
mRecentPanel->initializeViewBuilding();
|
||||
mWornItemsPanel->initializeViewBuilding();
|
||||
if (gSavedSettings.getBOOL("InventoryShowRecentTab"))
|
||||
mRecentPanel->initializeViewBuilding();
|
||||
if (gSavedSettings.getBOOL("InventoryShowWornTab"))
|
||||
mWornItemsPanel->initializeViewBuilding();
|
||||
}
|
||||
|
||||
void LLPanelMainInventory::toggleViewMode()
|
||||
@@ -2637,6 +2643,27 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata)
|
||||
{
|
||||
setViewMode(MODE_COMBINATION);
|
||||
}
|
||||
|
||||
if (command_name == "toggle_recent_tab")
|
||||
{
|
||||
bool visibility = !gSavedSettings.getBOOL("InventoryShowRecentTab");
|
||||
gSavedSettings.setBOOL("InventoryShowRecentTab", visibility);
|
||||
mFilterTabs->setTabVisibility(mRecentPanel, visibility);
|
||||
mRecentPanel->initializeViewBuilding();
|
||||
}
|
||||
if (command_name == "toggle_worn_tab")
|
||||
{
|
||||
bool visibility = !gSavedSettings.getBOOL("InventoryShowWornTab");
|
||||
gSavedSettings.setBOOL("InventoryShowWornTab", visibility);
|
||||
mFilterTabs->setTabVisibility(mWornItemsPanel, visibility);
|
||||
mWornItemsPanel->initializeViewBuilding();
|
||||
}
|
||||
if (command_name == "toggle_favorites_tab")
|
||||
{
|
||||
bool visibility = !gSavedSettings.getBOOL("InventoryShowFavoritesTab");
|
||||
gSavedSettings.setBOOL("InventoryShowFavoritesTab", visibility);
|
||||
mFilterTabs->setTabVisibility(mFavoritesPanel, visibility);
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelMainInventory::onVisibilityChange( bool new_visibility )
|
||||
@@ -2866,6 +2893,19 @@ bool LLPanelMainInventory::isActionChecked(const LLSD& userdata)
|
||||
return isCombinationViewMode();
|
||||
}
|
||||
|
||||
if (command_name == "recent_tab")
|
||||
{
|
||||
return mFilterTabs->getTabVisibility(mRecentPanel);
|
||||
}
|
||||
if (command_name == "worn_tab")
|
||||
{
|
||||
return mFilterTabs->getTabVisibility(mWornItemsPanel);
|
||||
}
|
||||
if (command_name == "favorites_tab")
|
||||
{
|
||||
return mFilterTabs->getTabVisibility(mFavoritesPanel);
|
||||
}
|
||||
|
||||
if (command_name == "add_objects_on_double_click")
|
||||
{
|
||||
return gSavedSettings.getBOOL("FSDoubleClickAddInventoryObjects");
|
||||
|
||||
@@ -231,6 +231,7 @@ private:
|
||||
LLInventoryPanel* mAllItemsPanel = nullptr;
|
||||
LLInventoryPanel* mRecentPanel = nullptr;
|
||||
LLInventoryPanel* mWornItemsPanel = nullptr;
|
||||
LLInventoryPanel* mFavoritesPanel = nullptr;
|
||||
bool mResortActivePanel;
|
||||
LLSaveFolderState* mSavedFolderState;
|
||||
std::string mFilterText;
|
||||
|
||||
@@ -92,6 +92,7 @@ LLPreviewNotecard::LLPreviewNotecard(const LLSD& key) //const LLUUID& item_id,
|
||||
LLPreviewNotecard::~LLPreviewNotecard()
|
||||
{
|
||||
delete mLiveFile;
|
||||
mEditor = nullptr;
|
||||
|
||||
// <FS:Ansariel> FIRE-29425: User-selectable font and size for notecards
|
||||
if (mFontNameChangedCallbackConnection.connected())
|
||||
@@ -216,7 +217,7 @@ bool LLPreviewNotecard::handleKeyHere(KEY key, MASK mask)
|
||||
// virtual
|
||||
bool LLPreviewNotecard::canClose()
|
||||
{
|
||||
if(mForceClose || mEditor->isPristine())
|
||||
if(mForceClose || !mEditor || mEditor->isPristine())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -37,18 +37,6 @@
|
||||
#include "llviewertexture.h"
|
||||
#include "llgltexture.h"
|
||||
|
||||
// map item types
|
||||
const U32 MAP_ITEM_TELEHUB = 0x01;
|
||||
const U32 MAP_ITEM_PG_EVENT = 0x02;
|
||||
const U32 MAP_ITEM_MATURE_EVENT = 0x03;
|
||||
//const U32 MAP_ITEM_POPULAR = 0x04; // No longer supported, 2009-03-02 KLW
|
||||
//const U32 MAP_ITEM_AGENT_COUNT = 0x05;
|
||||
const U32 MAP_ITEM_AGENT_LOCATIONS = 0x06;
|
||||
const U32 MAP_ITEM_LAND_FOR_SALE = 0x07;
|
||||
const U32 MAP_ITEM_CLASSIFIED = 0x08;
|
||||
const U32 MAP_ITEM_ADULT_EVENT = 0x09;
|
||||
const U32 MAP_ITEM_LAND_FOR_SALE_ADULT = 0x0a;
|
||||
|
||||
// Description of objects like hubs, events, land for sale, people and more (TBD).
|
||||
// Note: we don't store a "type" in there so we need to store instances of this class in
|
||||
// well known objects (i.e. list of objects which type is "well known").
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
<menu_item_call name="inventory_new_window" label="Neues Inventar-Fenster"/>
|
||||
<menu_item_check name="Protected Folders" label="Geschützte Ordner"/>
|
||||
<menu_item_check label="Inventar-Einstellungen..." name="inv_settings"/>
|
||||
<menu_item_check label="Aktuell anzeigen" name="show_recent_tab"/>
|
||||
<menu_item_check label="Angezogen anzeigen" name="show_worn_tab"/>
|
||||
<menu_item_check label="Favoriten anzeigen" name="show_favorites_tab"/>
|
||||
<menu_item_check label="Listen-Ansicht" name="list_view"/>
|
||||
<menu_item_check label="Galerie-Ansicht" name="gallery_view"/>
|
||||
<menu_item_check label="Kombinierte Ansicht" name="combination_view"/>
|
||||
|
||||
@@ -89,11 +89,47 @@
|
||||
function="Floater.Toggle"
|
||||
parameter="inventory_settings" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator>
|
||||
<menu_item_separator.on_visible
|
||||
<menu_item_separator/>
|
||||
<menu_item_check
|
||||
label="Show Recent tab"
|
||||
name="show_recent_tab">
|
||||
<menu_item_check.on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_recent_tab" />
|
||||
<menu_item_check.on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="recent_tab" />
|
||||
<menu_item_check.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_separator>
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Show Worn tab"
|
||||
name="show_worn_tab">
|
||||
<menu_item_check.on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_worn_tab" />
|
||||
<menu_item_check.on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="worn_tab" />
|
||||
<menu_item_check.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Show Favorites tab"
|
||||
name="show_favorites_tab">
|
||||
<menu_item_check.on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_favorites_tab" />
|
||||
<menu_item_check.on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="favorites_tab" />
|
||||
<menu_item_check.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator/>
|
||||
<menu_item_check
|
||||
label="List view"
|
||||
layout="topleft"
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
<menu_item_check label="Listen-Ansicht" name="list_view"/>
|
||||
<menu_item_check label="Galerie-Ansicht" name="gallery_view"/>
|
||||
<menu_item_check label="Kombinierte Ansicht" name="combination_view"/>
|
||||
<menu_item_check label="Nach Name sortieren" name="sort_by_name"/>
|
||||
<menu_item_check label="Aktuell anzeigen" name="recent_tab"/>
|
||||
<menu_item_check label="Angezogen anzeigen" name="worn_tab"/>
|
||||
<menu_item_check label="Favoriten anzeigen" name="favorites_tab"/>
|
||||
<menu_item_check label="Nach Name sortieren" name="favorites_tab"/>
|
||||
<menu_item_check label="Nach aktuellsten Objekten sortieren" name="sort_by_recent"/>
|
||||
<menu_item_check label="Ordner immer nach Namen sortieren" name="sort_folders_by_name"/>
|
||||
<menu_item_check label="Systemordner nach oben" name="sort_system_folders_to_top"/>
|
||||
|
||||
@@ -82,6 +82,50 @@
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_check
|
||||
label="Show Recent tab"
|
||||
layout="topleft"
|
||||
name="recent_tab">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_recent_tab" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="recent_tab" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Show Worn tab"
|
||||
layout="topleft"
|
||||
name="worn_tab">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_worn_tab" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="worn_tab" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Show Favorites tab"
|
||||
layout="topleft"
|
||||
name="favorites_tab">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_favorites_tab" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="favorites_tab" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_check
|
||||
|
||||
@@ -53,11 +53,7 @@
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator>
|
||||
<menu_item_separator.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_separator>
|
||||
<menu_item_separator/>
|
||||
<menu_item_check
|
||||
label="List view"
|
||||
layout="topleft"
|
||||
@@ -100,4 +96,46 @@
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Recent tab"
|
||||
layout="topleft"
|
||||
name="recent_tab">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_recent_tab" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="recent_tab" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Worn tab"
|
||||
layout="topleft"
|
||||
name="worn_tab">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_worn_tab" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="worn_tab" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Favorites tab"
|
||||
layout="topleft"
|
||||
name="favorites_tab">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_favorites_tab" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="favorites_tab" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
</toggleable_menu>
|
||||
|
||||
@@ -20,6 +20,13 @@
|
||||
<menu_item_call name="replace_links" label="Links ersetzen"/>
|
||||
<menu_item_call name="inventory_new_window" label="Zusätzliches Inventar-Fenster"/>
|
||||
<menu_item_check name="Protected Folders" label="Geschützte Ordner"/>
|
||||
<menu_item_check label="Inventar-Einstellungen..." name="inv_settings"/>
|
||||
<menu_item_check label="Aktuell anzeigen" name="show_recent_tab"/>
|
||||
<menu_item_check label="Angezogen anzeigen" name="show_worn_tab"/>
|
||||
<menu_item_check label="Favoriten anzeigen" name="show_favorites_tab"/>
|
||||
<menu_item_check label="Listen-Ansicht" name="list_view"/>
|
||||
<menu_item_check label="Galerie-Ansicht" name="gallery_view"/>
|
||||
<menu_item_check label="Kombinierte Ansicht" name="combination_view"/>
|
||||
<menu_item_check name="add_inv_toggle" label="Objekte hinzufügen per Doppelklick"/>
|
||||
<menu_item_check name="add_invclothing_toggle" label="Kleidung hinzufügen per Doppelklick"/>
|
||||
<menu_item_call name="inventory_show_filters" label="Filter anzeigen"/>
|
||||
|
||||
@@ -91,11 +91,47 @@
|
||||
function="Floater.Toggle"
|
||||
parameter="inventory_settings" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator>
|
||||
<menu_item_separator.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_separator>
|
||||
<menu_item_separator/>
|
||||
<menu_item_check
|
||||
label="Show Recent tab"
|
||||
name="show_recent_tab">
|
||||
<menu_item_check.on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_recent_tab" />
|
||||
<menu_item_check.on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="recent_tab" />
|
||||
<menu_item_check.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Show Worn tab"
|
||||
name="show_worn_tab">
|
||||
<menu_item_check.on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_worn_tab" />
|
||||
<menu_item_check.on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="worn_tab" />
|
||||
<menu_item_check.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Show Favorites tab"
|
||||
name="show_favorites_tab">
|
||||
<menu_item_check.on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="toggle_favorites_tab" />
|
||||
<menu_item_check.on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="favorites_tab" />
|
||||
<menu_item_check.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="multi_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator/>
|
||||
<menu_item_check
|
||||
label="List view"
|
||||
layout="topleft"
|
||||
|
||||
Reference in New Issue
Block a user