diff options
author | Leyla Farazha <leyla@lindenlab.com> | 2010-06-28 10:23:03 -0700 |
---|---|---|
committer | Leyla Farazha <leyla@lindenlab.com> | 2010-06-28 10:23:03 -0700 |
commit | 49209dfd7123515d76f9598149c1c724d0c0825a (patch) | |
tree | 6637f56b9b25973739e597883ee3ebca3019088b | |
parent | adc29e9b9f4d88cd6adfd27b3b516c069f84693c (diff) | |
parent | 3fca4b0d61ad4534f26a8963ed6381a76e4f7c19 (diff) |
Merge
49 files changed, 496 insertions, 145 deletions
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt index c1536e85de..08d35f9ae7 100644 --- a/indra/llplugin/slplugin/CMakeLists.txt +++ b/indra/llplugin/slplugin/CMakeLists.txt @@ -16,6 +16,7 @@ include_directories( if (DARWIN) include(CMakeFindFrameworks) find_library(CARBON_LIBRARY Carbon) + find_library(COCOA_LIBRARY Cocoa) endif (DARWIN) @@ -25,6 +26,22 @@ set(SLPlugin_SOURCE_FILES slplugin.cpp ) +if (DARWIN) + list(APPEND SLPlugin_SOURCE_FILES + slplugin-objc.mm + ) + list(APPEND SLPlugin_HEADER_FILES + slplugin-objc.h + ) +endif (DARWIN) + +set_source_files_properties(${SLPlugin_HEADER_FILES} + PROPERTIES HEADER_FILE_ONLY TRUE) + +if (SLPlugin_HEADER_FILES) + list(APPEND SLPlugin_SOURCE_FILES ${SLPlugin_HEADER_FILES}) +endif (SLPlugin_HEADER_FILES) + add_executable(SLPlugin WIN32 MACOSX_BUNDLE @@ -51,7 +68,7 @@ add_dependencies(SLPlugin if (DARWIN) # Mac version needs to link against Carbon - target_link_libraries(SLPlugin ${CARBON_LIBRARY}) + target_link_libraries(SLPlugin ${CARBON_LIBRARY} ${COCOA_LIBRARY}) # Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later) add_custom_command( TARGET SLPlugin POST_BUILD diff --git a/indra/llplugin/slplugin/slplugin-objc.h b/indra/llplugin/slplugin/slplugin-objc.h new file mode 100644 index 0000000000..4e55cb14cf --- /dev/null +++ b/indra/llplugin/slplugin/slplugin-objc.h @@ -0,0 +1,40 @@ +/** + * @file slplugin-objc.h + * @brief Header file for slplugin-objc.mm. + * + * @cond + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + * + * @endcond + */ + + +/* Defined in slplugin-objc.mm: */ +void setupCocoa(); +void createAutoReleasePool(); +void deleteAutoReleasePool(); diff --git a/indra/llplugin/slplugin/slplugin-objc.mm b/indra/llplugin/slplugin/slplugin-objc.mm new file mode 100644 index 0000000000..823e1ebea6 --- /dev/null +++ b/indra/llplugin/slplugin/slplugin-objc.mm @@ -0,0 +1,87 @@ +/** + * @file slplugin-objc.mm + * @brief Objective-C++ file for use with the loader shell, so we can use a couple of Cocoa APIs. + * + * @cond + * + * $LicenseInfo:firstyear=2010&license=viewergpl$ + * + * Copyright (c) 2010, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + * + * @endcond + */ + + +#include <AppKit/AppKit.h> + +#include "slplugin-objc.h" + + +void setupCocoa() +{ + static bool inited = false; + + if(!inited) + { + createAutoReleasePool(); + + // The following prevents the Cocoa command line parser from trying to open 'unknown' arguements as documents. + // ie. running './secondlife -set Language fr' would cause a pop-up saying can't open document 'fr' + // when init'ing the Cocoa App window. + [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"]; + + // This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor": + // http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html + + // Needed for Carbon based applications which call into Cocoa + NSApplicationLoad(); + + // Must first call [[[NSWindow alloc] init] release] to get the NSWindow machinery set up so that NSCursor can use a window to cache the cursor image + [[[NSWindow alloc] init] release]; + + deleteAutoReleasePool(); + + inited = true; + } +} + +static NSAutoreleasePool *sPool = NULL; + +void createAutoReleasePool() +{ + if(!sPool) + { + sPool = [[NSAutoreleasePool alloc] init]; + } +} + +void deleteAutoReleasePool() +{ + if(sPool) + { + [sPool release]; + sPool = NULL; + } +} diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index 7d6dde1a58..4c955e875a 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -44,6 +44,7 @@ #if LL_DARWIN #include <Carbon/Carbon.h> + #include "slplugin-objc.h" #endif #if LL_DARWIN || LL_LINUX @@ -229,10 +230,19 @@ int main(int argc, char **argv) signal(SIGSYS, &crash_handler); // non-existent system call invoked #endif +#if LL_DARWIN + setupCocoa(); + createAutoReleasePool(); +#endif + LLPluginProcessChild *plugin = new LLPluginProcessChild(); plugin->init(port); +#if LL_DARWIN + deleteAutoReleasePool(); +#endif + LLTimer timer; timer.start(); @@ -260,6 +270,9 @@ int main(int argc, char **argv) #endif while(!plugin->isDone()) { +#if LL_DARWIN + createAutoReleasePool(); +#endif timer.reset(); plugin->idle(); #if LL_DARWIN @@ -377,6 +390,10 @@ int main(int argc, char **argv) // exception handler such as QuickTime. //checkExceptionHandler(); #endif + +#if LL_DARWIN + deleteAutoReleasePool(); +#endif } delete plugin; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 9ff6a4e1a0..aba6c310f1 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -310,7 +310,8 @@ public: void pushVisible(BOOL visible) { mLastVisible = mVisible; setVisible(visible); } void popVisible() { setVisible(mLastVisible); } - + BOOL getLastVisible() const { return mLastVisible; } + LLHandle<LLView> getHandle() { mHandle.bind(this); return mHandle; } U32 getFollows() const { return mReshapeFlags; } diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index 3a822a93a6..01e04dbb07 100644 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -64,6 +64,8 @@ void setupCocoa() [[[NSWindow alloc] init] release]; [pool release]; + + inited = true; } } diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp index 1fab5c7683..cbebc93306 100644 --- a/indra/newview/llcofwearables.cpp +++ b/indra/newview/llcofwearables.cpp @@ -165,6 +165,14 @@ public: } protected: + static void replaceWearable() + { + static LLButton* show_add_wearables_btn = + LLSideTray::getInstance()->getChild<LLButton>("show_add_wearables_btn"); + + show_add_wearables_btn->onCommit(); + } + /*virtual*/ LLContextMenu* createMenu() { LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; @@ -173,8 +181,7 @@ protected: functor_t take_off = boost::bind(&LLAppearanceMgr::removeItemFromAvatar, LLAppearanceMgr::getInstance(), _1); registrar.add("Clothing.TakeOff", boost::bind(handleMultiple, take_off, mUUIDs)); - registrar.add("Clothing.MoveUp", boost::bind(moveWearable, selected_id, false)); - registrar.add("Clothing.MoveDown", boost::bind(moveWearable, selected_id, true)); + registrar.add("Clothing.Replace", boost::bind(replaceWearable)); registrar.add("Clothing.Edit", boost::bind(LLAgentWearables::editWearable, selected_id)); registrar.add("Clothing.Create", boost::bind(&CofClothingContextMenu::createNew, this, selected_id)); @@ -194,15 +201,7 @@ protected: std::string param = data.asString(); LLUUID selected_id = mUUIDs.back(); - if ("move_up" == param) - { - return gAgentWearables.canMoveWearable(selected_id, false); - } - else if ("move_down" == param) - { - return gAgentWearables.canMoveWearable(selected_id, true); - } - else if ("take_off" == param) + if ("take_off" == param) { return get_is_item_worn(selected_id); } @@ -210,15 +209,12 @@ protected: { return mUUIDs.size() == 1 && gAgentWearables.isWearableModifiable(selected_id); } - return true; - } + else if ("replace" == param) + { + return get_is_item_worn(selected_id) && mUUIDs.size() == 1; + } - // We don't use LLAppearanceMgr::moveWearable() directly because - // the item may be invalidated between setting the callback and calling it. - static bool moveWearable(const LLUUID& item_id, bool closer_to_body) - { - LLViewerInventoryItem* item = gInventory.getItem(item_id); - return LLAppearanceMgr::instance().moveWearable(item, closer_to_body); + return true; } }; diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index 51364594e4..ba7526ccd5 100644 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -145,6 +145,9 @@ LLFloaterPay::~LLFloaterPay() { std::for_each(mCallbackData.begin(), mCallbackData.end(), DeletePointer()); // Name callbacks will be automatically disconnected since LLFloater is trackable + + // In case this floater is currently waiting for a reply. + gMessageSystem->setHandlerFuncFast(_PREHASH_PayPriceReply, 0, 0); } BOOL LLFloaterPay::postBuild() diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index f241d18a21..87c5a830e9 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -1868,7 +1868,8 @@ BOOL LLFolderView::handleRightMouseDown( S32 x, S32 y, MASK mask ) LLView::child_list_t::const_iterator menu_itor; for (menu_itor = list->begin(); menu_itor != list->end(); ++menu_itor) { - (*menu_itor)->setVisible(TRUE); + (*menu_itor)->setVisible(FALSE); + (*menu_itor)->pushVisible(TRUE); (*menu_itor)->setEnabled(TRUE); } diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index ddfcd68e38..6d3998bb96 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1898,8 +1898,6 @@ BOOL LLIncomingCallDialog::postBuild() // check to see if this is an Avaline call bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); - childSetVisible("Start IM", is_avatar); // no IM for avaline - if (caller_name == "anonymous") { caller_name = getString("anonymous"); @@ -1931,6 +1929,10 @@ BOOL LLIncomingCallDialog::postBuild() mLifetimeTimer.stop(); } + //it's not possible to connect to existing Ad-Hoc chat through incoming ad-hoc call + //and no IM for avaline + childSetVisible("Start IM", is_avatar && notify_box_type != "VoiceInviteAdHoc"); + setCanDrag(FALSE); return TRUE; diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp index 3ca8fa2f56..9a10a7ede8 100644 --- a/indra/newview/llinspecttoast.cpp +++ b/indra/newview/llinspecttoast.cpp @@ -55,7 +55,7 @@ public: private: void onToastDestroy(LLToast * toast); -private: + boost::signals2::scoped_connection mConnection; LLPanel* mPanel; LLScreenChannel* mScreenChannel; }; @@ -88,7 +88,7 @@ void LLInspectToast::onOpen(const LLSD& notification_id) llwarns << "Could not get requested toast from screen channel." << llendl; return; } - toast->setOnToastDestroyedCallback(boost::bind(&LLInspectToast::onToastDestroy, this, _1)); + mConnection = toast->setOnToastDestroyedCallback(boost::bind(&LLInspectToast::onToastDestroy, this, _1)); LLPanel * panel = toast->getPanel(); panel->setVisible(TRUE); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index bc28140b75..2cc61a69c1 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -452,13 +452,15 @@ void hide_context_entries(LLMenuGL& menu, // if the first element is a separator, it will not be shown. BOOL is_previous_entry_separator = TRUE; - LLView::child_list_t::const_iterator itor; - for (itor = list->begin(); itor != list->end(); ++itor) + for (LLView::child_list_t::const_iterator itor = list->begin(); + itor != list->end(); + ++itor) { - std::string name = (*itor)->getName(); + LLView *menu_item = (*itor); + std::string name = menu_item->getName(); // descend into split menus: - LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(*itor); + LLMenuItemBranchGL* branchp = dynamic_cast<LLMenuItemBranchGL*>(menu_item); if ((name == "More") && branchp) { hide_context_entries(*branchp->getBranch(), entries_to_show, disabled_entries); @@ -479,7 +481,7 @@ void hide_context_entries(LLMenuGL& menu, // between two separators). if (found) { - const BOOL is_entry_separator = (dynamic_cast<LLMenuItemSeparatorGL *>(*itor) != NULL); + const BOOL is_entry_separator = (dynamic_cast<LLMenuItemSeparatorGL *>(menu_item) != NULL); if (is_entry_separator && is_previous_entry_separator) found = false; is_previous_entry_separator = is_entry_separator; @@ -487,16 +489,23 @@ void hide_context_entries(LLMenuGL& menu, if (!found) { - (*itor)->setVisible(FALSE); + if (!menu_item->getLastVisible()) + { + menu_item->setVisible(FALSE); + } + menu_item->setEnabled(FALSE); } else { - (*itor)->setVisible(TRUE); + menu_item->setVisible(TRUE); + // A bit of a hack so we can remember that some UI element explicitly set this to be visible + // so that some other UI element from multi-select doesn't later set this invisible. + menu_item->pushVisible(TRUE); for (itor2 = disabled_entries.begin(); itor2 != disabled_entries.end(); ++itor2) { if (*itor2 == name) { - (*itor)->setEnabled(FALSE); + menu_item->setEnabled(FALSE); } } } @@ -3730,6 +3739,9 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) disabled_items.push_back(std::string("Share")); } + addOpenRightClickMenuOption(items); + items.push_back(std::string("Properties")); + getClipboardEntries(true, items, disabled_items, flags); items.push_back(std::string("Gesture Separator")); @@ -4379,7 +4391,6 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { can_open = FALSE; } - items.push_back(std::string("Share")); if (!canShare()) { @@ -4390,6 +4401,11 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { addOpenRightClickMenuOption(items); } + else + { + disabled_items.push_back(std::string("Open")); + disabled_items.push_back(std::string("Open Original")); + } items.push_back(std::string("Properties")); diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 37088064c6..7463658003 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -245,6 +245,47 @@ BOOL get_is_item_worn(const LLUUID& id) return FALSE; } +BOOL get_can_item_be_worn(const LLUUID& id) +{ + const LLViewerInventoryItem* item = gInventory.getItem(id); + if (!item) + return FALSE; + + switch(item->getType()) + { + case LLAssetType::AT_OBJECT: + { + if (isAgentAvatarValid() && gAgentAvatarp->isWearingAttachment(item->getLinkedUUID())) + { + // Already being worn + return FALSE; + } + else + { + // Not being worn yet. + return TRUE; + } + break; + } + case LLAssetType::AT_BODYPART: + case LLAssetType::AT_CLOTHING: + if(gAgentWearables.isWearingItem(item->getLinkedUUID())) + { + // Already being worn + return FALSE; + } + else + { + // Not being worn yet. + return TRUE; + } + break; + default: + break; + } + return FALSE; +} + BOOL get_is_item_removable(const LLInventoryModel* model, const LLUUID& id) { if (!model) @@ -282,7 +323,9 @@ BOOL get_is_item_removable(const LLInventoryModel* model, const LLUUID& id) BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id) { - // This function doesn't check the folder's children. + // NOTE: This function doesn't check the folder's children. + // See LLFolderBridge::isItemRemovable for a function that does + // consider the children. if (!model) { @@ -296,17 +339,29 @@ BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id) if (!isAgentAvatarValid()) return FALSE; - LLInventoryCategory* category = model->getCategory(id); + const LLInventoryCategory* category = model->getCategory(id); if (!category) { return FALSE; } - if (LLFolderType::lookupIsProtectedType(category->getPreferredType())) + const LLFolderType::EType folder_type = category->getPreferredType(); + + if (LLFolderType::lookupIsProtectedType(folder_type)) { return FALSE; } + // Can't delete the outfit that is currently being worn. + if (folder_type == LLFolderType::FT_OUTFIT) + { + const LLViewerInventoryItem *base_outfit_link = LLAppearanceMgr::instance().getBaseOutfitLink(); + if (base_outfit_link && (category == base_outfit_link->getLinkedCategory())) + { + return FALSE; + } + } + return TRUE; } diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 6619a50d28..1c3f82c531 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -46,6 +46,9 @@ // Is this item or its baseitem is worn, attached, etc... BOOL get_is_item_worn(const LLUUID& id); +// Could this item be worn (correct type + not already being worn) +BOOL get_can_item_be_worn(const LLUUID& id); + BOOL get_is_item_removable(const LLInventoryModel* model, const LLUUID& id); BOOL get_is_category_removable(const LLInventoryModel* model, const LLUUID& id); diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index afca9daa67..6ae4a5e5e4 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -144,18 +144,6 @@ BOOL LLFloaterMove::postBuild() return TRUE; } -// virtual -void LLFloaterMove::setEnabled(BOOL enabled) -{ - //we need to enable/disable only buttons, EXT-1061. - - // is called before postBuild() - use findChild here. - LLPanel *panel_actions = findChild<LLPanel>("panel_actions"); - if (panel_actions) panel_actions->setEnabled(enabled); - - showModeButtons(enabled); -} - // *NOTE: we assume that setVisible() is called on floater close. // virtual void LLFloaterMove::setVisible(BOOL visible) @@ -406,7 +394,7 @@ void LLFloaterMove::initMovementMode() if (isAgentAvatarValid()) { - setEnabled(!gAgentAvatarp->isSitting()); + showModeButtons(!gAgentAvatarp->isSitting()); } } @@ -476,8 +464,7 @@ void LLFloaterMove::sUpdateFlyingStatus() void LLFloaterMove::showModeButtons(BOOL bShow) { - // is called from setEnabled so can be called before postBuild(), check mModeActionsPanel agains to NULL - if (NULL == mModeActionsPanel || mModeActionsPanel->getVisible() == bShow) + if (mModeActionsPanel->getVisible() == bShow) return; mModeActionsPanel->setVisible(bShow); } @@ -488,12 +475,14 @@ void LLFloaterMove::enableInstance(BOOL bEnable) LLFloaterMove* instance = LLFloaterReg::findTypedInstance<LLFloaterMove>("moveview"); if (instance) { - instance->setEnabled(bEnable); - if (gAgent.getFlying()) { instance->showModeButtons(FALSE); } + else + { + instance->showModeButtons(bEnable); + } } } diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index fcf643f050..d463861188 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -55,7 +55,6 @@ private: public: /*virtual*/ BOOL postBuild(); - /*virtual*/ void setEnabled(BOOL enabled); /*virtual*/ void setVisible(BOOL visible); static F32 getYawRate(F32 time); static void setFlyingMode(BOOL fly); diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 6c2566813f..075cfa0543 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -88,6 +88,8 @@ public: registrar.add("Gear.Delete", boost::bind(&LLOutfitListGearMenu::onDelete, this)); registrar.add("Gear.Create", boost::bind(&LLOutfitListGearMenu::onCreate, this, _2)); + registrar.add("Gear.WearAdd", boost::bind(&LLOutfitListGearMenu::onAdd, this)); + enable_registrar.add("Gear.OnEnable", boost::bind(&LLOutfitsList::isActionEnabled, mOutfitList, _2)); enable_registrar.add("Gear.OnVisible", boost::bind(&LLOutfitListGearMenu::onVisible, this, _2)); @@ -146,6 +148,16 @@ private: } } + void onAdd() + { + const LLUUID& selected_id = getSelectedOutfitID(); + + if (selected_id.notNull()) + { + LLAppearanceMgr::getInstance()->addCategoryToCurrentOutfit(selected_id); + } + } + void onTakeOff() { // Take off selected items if there are any @@ -648,6 +660,17 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata) && LLAppearanceMgr::getInstance()->getBaseOutfitUUID() == mSelectedOutfitUUID ) || hasWornItemSelected(); } + + if (command_name == "wear_add") + { + if (gAgentWearables.isCOFChangeInProgress()) + { + return false; + } + + return LLAppearanceMgr::getCanAddToCOF(mSelectedOutfitUUID); + } + return false; } diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 1544717873..ffd879dfd7 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -661,10 +661,13 @@ void LLPanelOutfitEdit::onInventorySelectionChange() getSelectedItemsUUID(selected_items); if (selected_items.empty()) { + mPlusBtn->setEnabled(false); return; } - uuid_vec_t::iterator worn_item = std::find_if(selected_items.begin(), selected_items.end(), boost::bind(&get_is_item_worn, _1)); - bool can_add = ( worn_item == selected_items.end() ); + + // If any of the selected items are not wearable (due to already being worn OR being of the wrong type), disable the add button. + uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1)); + bool can_add = ( unwearable_item == selected_items.end() ); mPlusBtn->setEnabled(can_add); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index ea5796d766..951323551c 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -405,6 +405,8 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name) //static void LLSidepanelAppearance::editWearable(LLWearable *wearable, LLView *data) { + LLSideTray::getInstance()->showPanel("sidepanel_appearance"); + LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(data); if (panel) { diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml index 130d3062d7..d4358fa8e9 100644 --- a/indra/newview/skins/default/xui/de/floater_map.xml +++ b/indra/newview/skins/default/xui/de/floater_map.xml @@ -27,6 +27,9 @@ <floater.string name="ToolTipMsg"> [AGENT][REGION](Karte mit Doppelklick öffnen) </floater.string> + <floater.string name="mini_map_caption"> + MINI-KARTE + </floater.string> <text label="N" name="floater_map_north" text="N"> N </text> diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml index 48b1f1170c..3a036fc441 100644 --- a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml +++ b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml @@ -24,9 +24,6 @@ <floater.string name="Title"> Gesten: [NAME] </floater.string> - <text name="name_text"> - Name: - </text> <text name="desc_label"> Beschreibung: </text> @@ -36,7 +33,7 @@ <text name="replace_text" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt."> Ersetzen mit: </text> - <line_editor name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt." left_delta="94" width="160"/> + <line_editor left_delta="94" name="replace_editor" tool_tip="Ersetzt den Auslösertext mit diesem Text. Wenn Sie zum Beispiel den Auslöser „hallo“ durch „wie geht's“ ersetzen, erscheint im Chat anstelle von „Ich wollte nur hallo sagen“ der Text „Ich wollte nur wie geht's sagen“ und die zugehörige Geste wird abgespielt." width="160"/> <text name="key_label"> Tastenkürzel: </text> @@ -46,19 +43,22 @@ Bibliothek: </text> <scroll_list name="library_list" width="166"/> - <button label="Hinzufügen >>" name="add_btn" left_pad="6" width="94"/> + <button label="Hinzufügen >>" left_pad="6" name="add_btn" width="94"/> <text name="steps_label"> Schritte: </text> <button label="Nach oben" name="up_btn"/> <button label="Nach unten" name="down_btn"/> <button label="Entfernen" name="delete_btn"/> + <text name="options_text"> + (Optionen) + </text> <radio_group name="animation_trigger_type"> <radio_item label="Start" name="start"/> <radio_item label="Stopp" name="stop"/> </radio_group> <check_box label="bis alle Animationen beendet sind" name="wait_anim_check"/> - <check_box label="Zeit in Sekunden" name="wait_time_check"/> + <check_box label="Zeit in Sekunden:" name="wait_time_check"/> <text name="help_label"> Alle Schritte werden gleichzeitig ausgeführt, wenn keine Pausen hinzugefügt wurden. </text> diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml index a656ffb894..c014b8e040 100644 --- a/indra/newview/skins/default/xui/de/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml @@ -1,23 +1,75 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater name="Snapshot" title="Foto"> +<floater name="Snapshot" title="FOTO-ANZEIGE"> <floater.string name="unknown"> unbekannt </floater.string> + <radio_group label="Fototyp" name="snapshot_type_radio"> + <radio_item label="Email" name="postcard"/> + <radio_item label="Mein Inventar ([AMOUNT] L$)" name="texture"/> + <radio_item label="Auf meinem Computer speichern" name="local"/> + </radio_group> + <text name="file_size_label"> + [SIZE] KB + </text> <button label="Foto aktualisieren" name="new_snapshot_btn"/> - <line_editor label="Beschreibung" name="description"/> - <panel name="panel_snapshot_main"> - <button label="Foto freigeben" name="share"/> - <button label="Foto speichern" name="save"/> - <button label="Als Profilbild festlegen" name="set_profile_pic"/> - </panel> - <panel name="panel_snapshot_share"> - <button label="Ins Internet stellen" name="share_to_web"/> - <button label="Foto per E-Mail senden" name="share_to_email"/> - <button label="Zurück" name="cancel_share"/> - </panel> - <panel name="panel_snapshot_save"> - <button label="Objekt in meinem Inventar speichern" name="save_to_inventory"/> - <button label="Auf meinem Computer speichern" name="save_to_computer"/> - <button label="Zurück" name="cancel_save"/> - </panel> + <button label="Senden" name="send_btn"/> + <button label="Speichern ([AMOUNT] L$)" name="upload_btn"/> + <flyout_button label="Speichern" name="save_btn" tool_tip="Bild als Datei speichern"> + <flyout_button.item label="Speichern" name="save_item"/> + <flyout_button.item label="Speichern unter..." name="saveas_item"/> + </flyout_button> + <button label="Mehr" name="more_btn" tool_tip="Erweiterte Optionen"/> + <button label="Weniger" name="less_btn" tool_tip="Erweiterte Optionen"/> + <button label="Abbrechen" name="discard_btn"/> + <text name="type_label2"> + Größe + </text> + <text name="format_label"> + Format + </text> + <combo_box label="Auflösung" name="postcard_size_combo"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="Benutzerdefiniert" name="Custom"/> + </combo_box> + <combo_box label="Auflösung" name="texture_size_combo"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="Klein (128x128)" name="Small(128x128)"/> + <combo_box.item label="Mittel (256x256)" name="Medium(256x256)"/> + <combo_box.item label="Groß (512x512)" name="Large(512x512)"/> + <combo_box.item label="Benutzerdefiniert" name="Custom"/> + </combo_box> + <combo_box label="Auflösung" name="local_size_combo"> + <combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/> + <combo_box.item label="320x240" name="320x240"/> + <combo_box.item label="640x480" name="640x480"/> + <combo_box.item label="800x600" name="800x600"/> + <combo_box.item label="1024x768" name="1024x768"/> + <combo_box.item label="1280x1024" name="1280x1024"/> + <combo_box.item label="1600x1200" name="1600x1200"/> + <combo_box.item label="Benutzerdefiniert" name="Custom"/> + </combo_box> + <combo_box label="Format" name="local_format_combo"> + <combo_box.item label="PNG" name="PNG"/> + <combo_box.item label="JPEG" name="JPEG"/> + <combo_box.item label="BMP" name="BMP"/> + </combo_box> + <spinner label="Breite" name="snapshot_width"/> + <spinner label="Größe" name="snapshot_height"/> + <check_box label="Seitenverhältnis beibehalten" name="keep_aspect_check"/> + <slider label="Bildqualität" name="image_quality_slider"/> + <text name="layer_type_label"> + Aufnehmen: + </text> + <combo_box label="Bildlayer" name="layer_types"> + <combo_box.item label="Farben" name="Colors"/> + <combo_box.item label="Tiefe" name="Depth"/> + </combo_box> + <check_box label="Schnittstelle" name="ui_check"/> + <check_box label="HUDs" name="hud_check"/> + <check_box label="Nach dem Speichern offen lassen" name="keep_open_check"/> + <check_box label="Frame einfrieren (Vollbild)" name="freeze_frame_check"/> + <check_box label="Automatisch aktualisieren" name="auto_snapshot_check"/> </floater> diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml index 8de0133ead..21d49a32fe 100644 --- a/indra/newview/skins/default/xui/de/floater_voice_effect.xml +++ b/indra/newview/skins/default/xui/de/floater_voice_effect.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater label="Orte" name="voice_effects" title="VOICE-MORPHING AUSPROBIEREN"> +<floater label="Orte" name="voice_effects" title="VOICE MORPHING"> <string name="no_voice_effect"> (Kein Voice-Morphing) </string> @@ -12,18 +12,19 @@ <string name="new_voice_effect"> (Neu!) </string> + <text name="preview_text"> + Zur Vorschau + </text> <text name="status_text"> - Um die Voice-Morph-Effekte auszuprobieren, einfach auf die Schaltfläche „Aufnahme“ klicken und kurz ins Mikrofon sprechen. Klicken Sie dann auf einen beliebigen Effekt in der Liste, um zu hören, wie der Effekt Ihre Stimme verändert. - -Schließen Sie dieses Fenster, um wieder mit dem Voice-Chat in der Nähe verbunden zu werden. + Nehmen Sie Ihre Stimme auf, klicken Sie dann auf einen Effekt, um den Effekt auf Ihre Stimme anzuwenden. </text> - <button label="Aufnahme" name="record_btn" tool_tip="Nehmen Sie Ihre Stimme auf."/> + <button label="Aufnehmen" name="record_btn" tool_tip="Nehmen Sie Ihre Stimme auf."/> <button label="Stopp" name="record_stop_btn"/> <text name="voice_morphing_link"> - [[URL]Voice-Morphing abonnieren] + [[URL] Jetzt abonnieren] </text> <scroll_list name="voice_effect_list" tool_tip="Nehmen Sie Ihre Stimme auf und klicken Sie dann auf einen Effekt, um diesen auszuprobieren."> - <scroll_list.columns label="Voice-Morphing" name="name"/> + <scroll_list.columns label="Bezeichnung" name="name"/> <scroll_list.columns label="Gültig bis" name="expires"/> </scroll_list> </floater> diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml index 85fc9ab74f..a47c633d57 100644 --- a/indra/newview/skins/default/xui/de/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/de/menu_attachment_self.xml @@ -3,11 +3,13 @@ <menu_item_call label="Berühren" name="Attachment Object Touch"/> <menu_item_call label="Bearbeiten" name="Edit..."/> <menu_item_call label="Abnehmen" name="Detach"/> - <menu_item_call label="Fallen lassen" name="Drop"/> <menu_item_call label="Aufstehen" name="Stand Up"/> <menu_item_call label="Outfit ändern" name="Change Outfit"/> + <menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/> + <menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/> <menu_item_call label="Meine Freunde" name="Friends..."/> <menu_item_call label="Meine Gruppen" name="Groups..."/> <menu_item_call label="Mein Profil" name="Profile..."/> <menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/> + <menu_item_call label="Fallen lassen" name="Drop"/> </context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_outfit_tab.xml b/indra/newview/skins/default/xui/de/menu_outfit_tab.xml index 605dee9b33..32a65c96fc 100644 --- a/indra/newview/skins/default/xui/de/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/de/menu_outfit_tab.xml @@ -4,6 +4,6 @@ <menu_item_call label="Anziehen - Aktuelles Outfit hinzufügen" name="wear_add"/> <menu_item_call label="Ausziehen - Aus aktuellem Outfit entfernen" name="take_off"/> <menu_item_call label="Outfit bearbeiten" name="edit"/> - <menu_item_call label="Umbenennen" name="rename"/> + <menu_item_call label="Outfit neu benennen" name="rename"/> <menu_item_call label="Outfit löschen" name="delete"/> </context_menu> diff --git a/indra/newview/skins/default/xui/de/menu_topinfobar.xml b/indra/newview/skins/default/xui/de/menu_topinfobar.xml new file mode 100644 index 0000000000..5b0a724244 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_topinfobar.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="menu_topinfobar"> + <menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/> + <menu_item_check label="Parzellen-Eigenschaften anzeigen" name="Show Parcel Properties"/> + <menu_item_call label="Landmarke" name="Landmark"/> + <menu_item_call label="Kopieren" name="Copy"/> +</menu> diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index 0a2d5b472a..b9b6a8ed50 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -178,6 +178,7 @@ <menu_item_check label="Suchen" name="Search"/> <menu_item_call label="Tasten freigeben" name="Release Keys"/> <menu_item_call label="UI-Größe auf Standard setzen" name="Set UI Size to Default"/> + <menu_item_check label="Erweitert-Menü anzeigen - veraltetet" name="Show Advanced Menu - legacy shortcut"/> <menu_item_check label="Immer rennen" name="Always Run"/> <menu_item_check label="Fliegen" name="Fly"/> <menu_item_call label="Fenster schließen" name="Close Window"/> diff --git a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml index a4bf75a497..027a68e72e 100644 --- a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <context_menu name="Outfit Wearable Context Menu"> - <menu_item_call label="Anziehen" name="wear"/> + <menu_item_call label="Ersetzen" name="wear"/> <menu_item_call label="Hinzufügen" name="wear_add"/> <menu_item_call label="Ausziehen / Abnehmen" name="take_off_or_detach"/> <menu_item_call label="Abnehmen" name="detach"/> diff --git a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml new file mode 100644 index 0000000000..d994571f01 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<menu name="Gear Wearing"> + <menu_item_call label="Outfit bearbeiten" name="edit"/> +</menu> diff --git a/indra/newview/skins/default/xui/de/menu_wearing_tab.xml b/indra/newview/skins/default/xui/de/menu_wearing_tab.xml new file mode 100644 index 0000000000..d690572c8e --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_wearing_tab.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<context_menu name="Wearing"> + <menu_item_call label="Outfit bearbeiten" name="edit"/> +</context_menu> diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 8380992d79..fb75f62988 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -622,8 +622,7 @@ Erwartet wurde [VALIDS] Datei konnte nicht kodiert werden: [FILE] </notification> <notification name="CorruptedProtectedDataStore"> - Ihre geschützten Daten konnten nicht gelesen werden, aus diesem Grund werden diese zurückgesetzt. - Dies kann passieren, wenn Sie die Netzwerkeinstellungen ändern. + Wir können Ihren Benutzernamen und Ihr Kennwort nicht automatisch ausfüllen. Dies kann passieren, wenn Sie die Netzwerkeinstellungen ändern. <usetemplate name="okbutton" yestext="OK"/> </notification> <notification name="CorruptResourceFile"> diff --git a/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml index de764d8025..799586f021 100644 --- a/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml +++ b/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml @@ -1,4 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="wearable_item"> <text name="item_name" value="..."/> + <panel name="btn_lock" tool_tip="Ihnen fehlt die Berechtigung zum Bearbeiten."/> + <panel name="btn_edit_panel"> + <button name="btn_edit" tool_tip="Diese Form bearbeiten"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml index de764d8025..945acb02d7 100644 --- a/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml @@ -1,4 +1,9 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="wearable_item"> + <button name="btn_delete" tool_tip="Von Outfit entfernen"/> <text name="item_name" value="..."/> + <panel name="btn_lock" tool_tip="Ihnen fehlt die Berechtigung zum Bearbeiten."/> + <panel name="btn_edit_panel"> + <button name="btn_edit" tool_tip="Dieses tragbare Objekt bearbeiten"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml index 91d90a5660..a27252e23e 100644 --- a/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="deletable_wearable_item"> + <button name="btn_delete" tool_tip="Von Outfit entfernen"/> <text name="item_name" value="..."/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml index 6af84de0c7..b7ad1bdc1b 100644 --- a/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml +++ b/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml @@ -1,4 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="dummy_clothing_item"> <text name="item_name" value="..."/> + <panel name="btn_add_panel"> + <button name="btn_add" tool_tip="Weitere Artikel dieser Art hinzufügen"/> + </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml index f23244e14d..faeea3a5de 100644 --- a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml +++ b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml @@ -90,6 +90,7 @@ <string name="tattoo_desc_text"> Tätowierung: </string> + <labeled_back_button label="Speichern" name="back_btn" tool_tip="Zurück zu Outfit bearbeiten"/> <text name="edit_wearable_title" value="Form bearbeiten"/> <panel label="Hemd" name="wearable_type_panel"> <text name="description_text" value="Form:"/> @@ -102,6 +103,6 @@ </panel> <panel name="button_panel"> <button label="Speichern unter" name="save_as_button"/> - <button label="Zurücksetzen" name="revert_button"/> + <button label="Änderungen rückgängig machen" name="revert_button"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml index 60f8ad2331..00a79e6bb3 100644 --- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml @@ -13,7 +13,9 @@ <string name="Filter.All" value="Alle"/> <string name="Filter.Clothes/Body" value="Kleider/Körper"/> <string name="Filter.Objects" value="Objekte"/> - <string name="Filter.Custom" value="Benutzerspezifischer Filter"/> + <string name="Filter.Clothing" value="Kleidung"/> + <string name="Filter.Bodyparts" value="Körperteile"/> + <string name="replace_body_part" value="Klicken, um Ihre aktuelle Form zu ersetzen"/> <text name="title" value="Outfit bearbeiten"/> <panel label="bottom_panel" name="header_panel"> <panel label="bottom_panel" name="outfit_name_and_status"> @@ -25,7 +27,7 @@ <layout_panel label="IM Steuerkonsole" name="outfit_wearables_panel"> <layout_stack name="filter_panels"> <layout_panel name="add_button_and_combobox"> - <button label="Mehr hinzufügen" name="show_add_wearables_btn"/> + <button label="Mehr hinzufügen" name="show_add_wearables_btn" tool_tip="Öffnen/Schließen"/> </layout_panel> <layout_panel name="filter_panel"> <filter_editor label="Tragbare Inventarobjekte filtern" name="look_item_filter"/> @@ -36,6 +38,6 @@ </layout_stack> <panel name="save_revert_button_bar"> <button label="Speichern" name="save_btn"/> - <button label="Zurücksetzen" name="revert_btn"/> + <button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurücksetzen"/> </panel> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml index 8b04cecd68..852efe41d7 100644 --- a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml @@ -6,7 +6,7 @@ </tab_container> <panel name="bottom_panel"> <button name="options_gear_btn" tool_tip="Zusätzliche Optionen anzeigen"/> - <dnd_button name="trash_btn" tool_tip="Auswahl löschen"/> + <dnd_button name="trash_btn" tool_tip="Ausgewähltes Outfit löschen"/> <button label="Speichern unter" name="save_btn"/> <button label="Anziehen" name="wear_btn" tool_tip="Ausgewähltes Outfit tragen"/> </panel> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml index 879262df9b..7077534719 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml @@ -49,10 +49,7 @@ m </text> <slider label="Max. Partikelzahl:" name="MaxParticleCount"/> - <slider label="Max. Avatarsichtweite:" name="MaxAvatarDrawDistance"/> - <text name="DrawDistanceMeterText3"> - m - </text> + <slider label="Max. Anzahl an voll dargestellten Avataren:" name="MaxNumberAvatarDrawn"/> <slider label="Post-Processing-Qualität:" name="RenderPostProcess"/> <text name="MeshDetailText"> Gitterdetails: diff --git a/indra/newview/skins/default/xui/de/panel_voice_effect.xml b/indra/newview/skins/default/xui/de/panel_voice_effect.xml index 363ee013e3..533deb8597 100644 --- a/indra/newview/skins/default/xui/de/panel_voice_effect.xml +++ b/indra/newview/skins/default/xui/de/panel_voice_effect.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <panel name="panel_voice_effect"> <string name="no_voice_effect"> - Kein Voice-Morphing + Voice-Morphing Aus </string> <string name="preview_voice_effects"> Voice-Morphing ausprobieren ▶ @@ -10,6 +10,6 @@ Voice-Morphing abonnieren ▶ </string> <combo_box name="voice_effect" tool_tip="Wählen Sie einen Voice-Morph-Effekt aus, um Ihre Stimme zu verändern."> - <combo_box.item label="Kein Voice-Morphing" name="no_voice_effect"/> + <combo_box.item label="Voice-Morphing Aus" name="no_voice_effect"/> </combo_box> </panel> diff --git a/indra/newview/skins/default/xui/de/sidepanel_appearance.xml b/indra/newview/skins/default/xui/de/sidepanel_appearance.xml index f8e3db341a..b43067fb95 100644 --- a/indra/newview/skins/default/xui/de/sidepanel_appearance.xml +++ b/indra/newview/skins/default/xui/de/sidepanel_appearance.xml @@ -3,6 +3,7 @@ <string name="No Outfit" value="Kein Outfit"/> <string name="Unsaved Changes" value="Ungespeicherte Änderungen"/> <string name="Now Wearing" value="Aktuelles Outfit..."/> + <string name="Changing outfits" value="Outfits ändern"/> <panel name="panel_currentlook"> <button label="B" name="editappearance_btn"/> <button label="Ö" name="openoutfit_btn"/> @@ -12,6 +13,7 @@ <text name="currentlook_name"> MyOutfit With a really Long Name like MOOSE </text> + <button label="" name="edit_outfit_btn" tool_tip="Diese Outfit bearbeiten"/> </panel> <filter_editor label="Outfits filtern" name="Filter"/> </panel> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index f5882adb79..67b7d6c1d2 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -309,6 +309,9 @@ <string name="ReleaseNotes"> Versionshinweise </string> + <string name="RELEASE_NOTES_BASE_URL"> + http://wiki.secondlife.com/wiki/Release_Notes/ + </string> <string name="LoadingData"> Wird geladen... </string> @@ -864,6 +867,9 @@ <string name="invalid"> ungültig </string> + <string name="none"> + keine + </string> <string name="shirt_not_worn"> Hemd nicht getragen </string> diff --git a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml index 28616d503b..ec097a8e87 100644 --- a/indra/newview/skins/default/xui/en/floater_nearby_chat.xml +++ b/indra/newview/skins/default/xui/en/floater_nearby_chat.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <floater border_visible="false" - border_drop_shadow_visible="false" - drop_shadow_visible="false" border="false" bg_opaque_image="Window_Foreground" bg_alpha_image="Window_Background" @@ -26,20 +24,20 @@ save_visibility="true" single_instance="true" width="320"> - <chat_history - allow_html="true" - bg_readonly_color="ChatHistoryBgColor" - bg_writeable_color="ChatHistoryBgColor" - follows="all" - left="5" - top="20" - layout="topleft" - height="275" - name="chat_history" - parse_highlights="true" - text_color="ChatHistoryTextColor" - text_readonly_color="ChatHistoryTextColor" - right_widget_pad="5" - left_widget_pad="0" - width="315" /> + <chat_history + allow_html="true" + bg_readonly_color="ChatHistoryBgColor" + bg_writeable_color="ChatHistoryBgColor" + follows="all" + left="5" + top="20" + layout="topleft" + height="275" + name="chat_history" + parse_highlights="true" + text_color="ChatHistoryTextColor" + text_readonly_color="ChatHistoryTextColor" + right_widget_pad="5" + left_widget_pad="0" + width="315" /> </floater> diff --git a/indra/newview/skins/default/xui/en/menu_cof_clothing.xml b/indra/newview/skins/default/xui/en/menu_cof_clothing.xml index 12ee9b045b..206d49e8c7 100644 --- a/indra/newview/skins/default/xui/en/menu_cof_clothing.xml +++ b/indra/newview/skins/default/xui/en/menu_cof_clothing.xml @@ -13,34 +13,24 @@ parameter="take_off" /> </menu_item_call> <menu_item_call - label="Move Up a Layer" - layout="topleft" - name="move_up"> - <on_click - function="Clothing.MoveUp" /> - <on_enable - function="Clothing.OnEnable" - parameter="move_up" /> - </menu_item_call> - <menu_item_call - label="Move Down a Layer" + label="Edit" layout="topleft" - name="move_down"> + name="edit"> <on_click - function="Clothing.MoveDown" /> + function="Clothing.Edit" /> <on_enable function="Clothing.OnEnable" - parameter="move_down" /> + parameter="edit" /> </menu_item_call> <menu_item_call - label="Edit" + label="Replace" layout="topleft" - name="edit"> + name="replace"> <on_click - function="Clothing.Edit" /> + function="Clothing.Replace" /> <on_enable function="Clothing.OnEnable" - parameter="edit" /> + parameter="replace" /> </menu_item_call> <menu_item_call label="Create New" diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml index 8e7ef7f0b5..c4c7a5034a 100644 --- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml @@ -16,6 +16,16 @@ parameter="wear" /> </menu_item_call> <menu_item_call + label="Wear - Add to Current Outfit" + layout="topleft" + name="wear_add"> + <on_click + function="Gear.WearAdd" /> + <on_enable + function="Gear.OnEnable" + parameter="wear_add" /> + </menu_item_call> + <menu_item_call label="Take Off - Remove from Current Outfit" layout="topleft" name="take_off"> diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml index bdfa928b1d..06bd1e9ff4 100644 --- a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml +++ b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml @@ -3,7 +3,7 @@ <!-- All accordion tabs in the My Appearance/My Outfits panel will be created from this one at runtime--> <!-- Non of string values of controls below are visible to user. They are not need to be translated. --> <accordion_tab - display_children="false" + expanded="false" follows="all" height="45" layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index b365540d1f..60a0095d5f 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -37,6 +37,7 @@ width="312" /> <panel background_visible="true" + bg_alpha_color="DkGray" class="panel_wearing" follows="all" height="490" @@ -50,13 +51,13 @@ follows="all" height="490" keep_one_selected="true" - left="1" + left="3" multi_select="true" name="cof_items_list" standalone="false" top="0" translate="false" - width="310" + width="307" worn_indication_enabled="false" /> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml index d0c44c4328..aea4e939df 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml @@ -9,12 +9,13 @@ layout="topleft" left="0" top="0" - width="313"> + width="312"> <accordion background_visible="true" bg_alpha_color="DkGray2" bg_opaque_color="DkGray2" no_matched_tabs_text.value="Didn't find what you're looking for? Try [secondlife:///app/search/all/[SEARCH_TERM] Search]." + no_matched_tabs_text.v_pad="10" no_visible_tabs_text.value="There are no any outfits. Try [secondlife:///app/search/all/ Search]." follows="all" height="400" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index e30c081ba1..799d440292 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -136,7 +136,8 @@ <string name="RetrievingData">Retrieving...</string> <string name="ReleaseNotes">Release Notes</string> - <string name="RELEASE_NOTES_BASE_URL">http://wiki.secondlife.com/wiki/Release_Notes/</string> + <!-- Always mark translate="false" for strings that are nothing but URLs, as they don't need translation. --> + <string name="RELEASE_NOTES_BASE_URL" translate="false">http://wiki.secondlife.com/wiki/Release_Notes/</string> <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData --> <string name="LoadingData">Loading...</string> |