merge from PE's viewer-trunk

meow-7.2.2
Tofu Linden 2010-05-19 09:56:48 +01:00
commit b550bb0f09
24 changed files with 257 additions and 46 deletions

View File

@ -91,6 +91,7 @@ set(llui_SOURCE_FILES
lltextbox.cpp
lltexteditor.cpp
lltextparser.cpp
lltextutil.cpp
lltextvalidate.cpp
lltransutil.cpp
lltoggleablemenu.cpp
@ -101,7 +102,6 @@ set(llui_SOURCE_FILES
lluictrlfactory.cpp
lluiimage.cpp
lluistring.cpp
lluitextutil.cpp
llundo.cpp
llurlaction.cpp
llurlentry.cpp
@ -186,6 +186,7 @@ set(llui_HEADER_FILES
lltextbox.h
lltexteditor.h
lltextparser.h
lltextutil.h
lltextvalidate.h
lltoggleablemenu.h
lltooltip.h
@ -198,7 +199,6 @@ set(llui_HEADER_FILES
llui.h
lluiimage.h
lluistring.h
lluitextutil.h
llundo.h
llurlaction.h
llurlentry.h

View File

@ -37,8 +37,8 @@
#include "lllocalcliprect.h"
#include "llscrollbar.h"
#include "lltextbox.h"
#include "lltextutil.h"
#include "lluictrl.h"
#include "lluitextutil.h"
static const std::string DD_BUTTON_NAME = "dd_button";
static const std::string DD_TEXTBOX_NAME = "dd_textbox";

79
indra/llui/lltextutil.cpp Normal file
View File

@ -0,0 +1,79 @@
/**
* @file lltextutil.cpp
* @brief Misc text-related auxiliary methods
*
* $LicenseInfo:firstyear=2009&license=viewergpl$
*
* Copyright (c) 2009, 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://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#include "lltextutil.h"
#include "lluicolor.h"
#include "lltextbox.h"
void LLTextUtil::textboxSetHighlightedVal(LLTextBox *txtbox, const LLStyle::Params& normal_style, const std::string& text, const std::string& hl)
{
static LLUIColor sFilterTextColor = LLUIColorTable::instance().getColor("FilterTextColor", LLColor4::green);
std::string text_uc = text;
LLStringUtil::toUpper(text_uc);
size_t hl_begin = 0, hl_len = hl.size();
if (hl_len == 0 || (hl_begin = text_uc.find(hl)) == std::string::npos)
{
txtbox->setText(text, normal_style);
return;
}
LLStyle::Params hl_style = normal_style;
hl_style.color = sFilterTextColor;
txtbox->setText(LLStringUtil::null); // clear text
txtbox->appendText(text.substr(0, hl_begin), false, normal_style);
txtbox->appendText(text.substr(hl_begin, hl_len), false, hl_style);
txtbox->appendText(text.substr(hl_begin + hl_len), false, normal_style);
}
const std::string& LLTextUtil::formatPhoneNumber(const std::string& phone_str)
{
static const std::string PHONE_SEPARATOR = LLUI::sSettingGroups["config"]->getString("AvalinePhoneSeparator");
static const S32 PHONE_PART_LEN = 2;
static std::string formatted_phone_str;
formatted_phone_str = phone_str;
S32 separator_pos = (S32)(formatted_phone_str.size()) - PHONE_PART_LEN;
for (; separator_pos >= PHONE_PART_LEN; separator_pos -= PHONE_PART_LEN)
{
formatted_phone_str.insert(separator_pos, PHONE_SEPARATOR);
}
return formatted_phone_str;
}
// EOF

72
indra/llui/lltextutil.h Normal file
View File

@ -0,0 +1,72 @@
/**
* @file lltextutil.h
* @brief Misc text-related auxiliary methods
*
* $LicenseInfo:firstyear=2009&license=viewergpl$
*
* Copyright (c) 2009, 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://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef LL_LLTEXTUTIL_H
#define LL_LLTEXTUTIL_H
#include "llstyle.h"
class LLTextBox;
namespace LLTextUtil
{
/**
* Set value for text box, highlighting substring hl_uc.
*
* Used to highlight filter matches.
*
* @param txtbox Text box to set value for
* @param normal_style Style to use for non-highlighted text
* @param text Text to set
* @param hl Upper-cased string to highlight
*/
void textboxSetHighlightedVal(
LLTextBox *txtbox,
const LLStyle::Params& normal_style,
const std::string& text,
const std::string& hl);
/**
* Formats passed phone number to be more human readable.
*
* It just divides the number on parts by two digits from right to left. The first left part
* can have 2 or 3 digits, i.e. +44-33-33-44-55-66 or 12-34-56-78-90. Separator is set in
* application settings (AvalinePhoneSeparator)
*
* @param[in] phone_str string with original phone number
* @return reference to string with formatted phone number
*/
const std::string& formatPhoneNumber(const std::string& phone_str);
}
#endif // LL_LLTEXTUTIL_H

View File

@ -421,7 +421,6 @@ set(viewer_SOURCE_FILES
lltexturestats.cpp
lltexturestatsuploader.cpp
lltextureview.cpp
lltextutil.cpp
lltoast.cpp
lltoastalertpanel.cpp
lltoastgroupnotifypanel.cpp
@ -935,7 +934,6 @@ set(viewer_HEADER_FILES
lltexturestats.h
lltexturestatsuploader.h
lltextureview.h
lltextutil.h
lltoast.h
lltoastalertpanel.h
lltoastgroupnotifypanel.h

View File

@ -32,19 +32,21 @@
#include "llviewerprecompiledheaders.h"
#include "llavatarlist.h"
// common
#include "lltrans.h"
#include "llcommonutils.h"
#include "llavatarlist.h"
#include "llagentdata.h" // for comparator
// llui
#include "lltextutil.h"
// newview
#include "llagentdata.h" // for comparator
#include "llavatariconctrl.h"
#include "llcallingcard.h" // for LLAvatarTracker
#include "llcachename.h"
#include "llrecentpeople.h"
#include "lltextutil.h"
#include "lluuid.h"
#include "llvoiceclient.h"
#include "llviewercontrol.h" // for gSavedSettings

View File

@ -38,7 +38,7 @@
#include "llbutton.h"
#include "llfloaterreg.h"
#include "lluitextutil.h"
#include "lltextutil.h"
#include "llagent.h"
#include "llavatariconctrl.h"

View File

@ -232,6 +232,17 @@ void LLFloaterMap::onFocusLost()
void LLFloaterMap::reshape(S32 width, S32 height, BOOL called_from_parent)
{
LLFloater::reshape(width, height, called_from_parent);
//fix for ext-7112
//by default ctrl can't overlap caption area
if(mMap)
{
LLRect map_rect;
map_rect.setLeftTopAndSize( 0, getRect().getHeight(), width, height);
mMap->reshape( width, height, 1);
mMap->setRect(map_rect);
}
updateMinorDirections();
}

View File

@ -39,8 +39,8 @@
#include "lliconctrl.h"
#include "llmenugl.h"
#include "lltextbox.h"
#include "lltextutil.h"
#include "lltrans.h"
#include "lluitextutil.h"
// newview
#include "llagent.h"

View File

@ -43,6 +43,7 @@
#include "llhttpclient.h"
#include "llsdutil_math.h"
#include "llstring.h"
#include "lltextutil.h"
#include "lltrans.h"
#include "lluictrlfactory.h"
@ -65,7 +66,6 @@
#include "llnearbychat.h"
#include "llspeakers.h" //for LLIMSpeakerMgr
#include "lltextbox.h"
#include "lltextutil.h"
#include "llviewercontrol.h"
#include "llviewerparcelmgr.h"

View File

@ -42,7 +42,7 @@
// llui
#include "lliconctrl.h"
#include "lluitextutil.h"
#include "lltextutil.h"
#include "llcallbacklist.h"
#include "llinventoryfunctions.h"

View File

@ -36,9 +36,6 @@
// llcommon
#include "llcommonutils.h"
// llcommon
#include "llcommonutils.h"
#include "llaccordionctrl.h"
#include "llaccordionctrltab.h"
#include "llappearancemgr.h"

View File

@ -50,6 +50,7 @@
#include "llaccordionctrltab.h"
#include "llagentwearables.h"
#include "llscrollingpanelparam.h"
#include "llradiogroup.h"
#include "llcolorswatch.h"
#include "lltexturectrl.h"
@ -615,6 +616,8 @@ BOOL LLPanelEditWearable::postBuild()
mPanelTitle = getChild<LLTextBox>("edit_wearable_title");
mDescTitle = getChild<LLTextBox>("description_text");
getChild<LLRadioGroup>("sex_radio")->setCommitCallback(boost::bind(&LLPanelEditWearable::onCommitSexChange, this));
// The following panels will be shown/hidden based on what wearable we're editing
// body parts
mPanelShape = getChild<LLPanel>("edit_shape_panel");
@ -687,6 +690,40 @@ void LLPanelEditWearable::onRevertButtonClicked(void* userdata)
panel->revertChanges();
}
void LLPanelEditWearable::onCommitSexChange()
{
if (!isAgentAvatarValid()) return;
LLWearableType::EType type = mWearablePtr->getType();
U32 index = gAgentWearables.getWearableIndex(mWearablePtr);
if( !gAgentWearables.isWearableModifiable(type, index))
{
return;
}
LLViewerVisualParam* param = static_cast<LLViewerVisualParam*>(gAgentAvatarp->getVisualParam( "male" ));
if( !param )
{
return;
}
bool is_new_sex_male = (gSavedSettings.getU32("AvatarSex") ? SEX_MALE : SEX_FEMALE) == SEX_MALE;
LLWearable* wearable = gAgentWearables.getWearable(type, index);
if (wearable)
{
wearable->setVisualParamWeight(param->getID(), is_new_sex_male, FALSE);
}
param->setWeight( is_new_sex_male, FALSE );
gAgentAvatarp->updateSexDependentLayerSets( FALSE );
gAgentAvatarp->updateVisualParams();
updateScrollingPanelUI();
}
void LLPanelEditWearable::onTexturePickerCommit(const LLUICtrl* ctrl)
{
const LLTextureCtrl* texture_ctrl = dynamic_cast<const LLTextureCtrl*>(ctrl);
@ -1118,6 +1155,14 @@ void LLPanelEditWearable::updateVerbs()
mBtnRevert->setEnabled(is_dirty);
childSetEnabled("save_as_button", is_dirty && can_copy);
if(isAgentAvatarValid())
{
// Update viewer's radio buttons (of RadioGroup with control_name="AvatarSex") of Avatar's gender
// with value from "AvatarSex" setting
gSavedSettings.setU32("AvatarSex", (gAgentAvatarp->getSex() == SEX_MALE) );
}
}
// EOF

View File

@ -64,6 +64,7 @@ public:
void revertChanges();
static void onRevertButtonClicked(void* userdata);
void onCommitSexChange();
private:
typedef std::map<F32, LLViewerVisualParam*> value_map_t;

View File

@ -199,16 +199,13 @@ bool LLPanelGroupRoles::handleSubTabSwitch(const LLSD& data)
{
std::string panel_name = data.asString();
LLPanelGroupTab* activating_tab = static_cast<LLPanelGroupTab*>(mSubTabContainer->getPanelByName(panel_name));
if(activating_tab == mCurrentTab
|| activating_tab == mRequestedTab)
if(mRequestedTab != NULL)//we already have tab change request
{
return true;
return false;
}
mRequestedTab = activating_tab;
mRequestedTab = static_cast<LLPanelGroupTab*>(mSubTabContainer->getPanelByName(panel_name));
std::string mesg;
if (mCurrentTab && mCurrentTab->needsApply(mesg))
{
@ -229,15 +226,9 @@ bool LLPanelGroupRoles::handleSubTabSwitch(const LLSD& data)
// we get a response back from the user.
return false;
}
else
{
// The current panel didn't have anything it needed to apply.
if (mRequestedTab)
{
transitionToTab();
}
return true;
}
transitionToTab();
return true;
}
void LLPanelGroupRoles::transitionToTab()

View File

@ -900,14 +900,12 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)
void LLPanelMainInventory::initListCommandsHandlers()
{
mListCommands = getChild<LLPanel>("bottom_panel");
childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
mListCommands->childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));
mListCommands->childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));
mListCommands->childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this));
LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn");
trash_btn->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
mTrashButton = getChild<LLDragAndDropButton>("trash_btn");
mTrashButton->setDragAndDropHandler(boost::bind(&LLPanelMainInventory::handleDragAndDropToTrash, this
, _4 // BOOL drop
, _5 // EDragAndDropType cargo_type
, _7 // EAcceptance* accept
@ -923,7 +921,7 @@ void LLPanelMainInventory::updateListCommands()
{
bool trash_enabled = isActionEnabled("delete");
mListCommands->childSetEnabled("trash_btn", trash_enabled);
mTrashButton->setEnabled(trash_enabled);
}
void LLPanelMainInventory::onGearButtonClick()

View File

@ -36,6 +36,7 @@
#include "llpanel.h"
#include "llinventoryobserver.h"
#include "lldndbutton.h"
#include "llfolderview.h"
@ -145,7 +146,7 @@ protected:
*/
void setUploadCostIfNeeded();
private:
LLPanel* mListCommands;
LLDragAndDropButton* mTrashButton;
LLMenuGL* mMenuGearDefault;
LLMenuGL* mMenuAdd;

View File

@ -38,7 +38,7 @@
#include "llsidetray.h"
#include "llworldmap.h"
#include "llteleporthistorystorage.h"
#include "lluitextutil.h"
#include "lltextutil.h"
#include "llaccordionctrl.h"
#include "llaccordionctrltab.h"

View File

@ -50,6 +50,7 @@
#include "llnotifications.h"
#include "llfunctorregistry.h"
#include "llrootview.h"
#include "lltransientfloatermgr.h"
#include "llviewercontrol.h" // for gSavedSettings
const S32 MAX_ALLOWED_MSG_WIDTH = 400;
@ -324,6 +325,9 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
mDefaultBtnTimer.start();
mDefaultBtnTimer.setTimerExpirySec(DEFAULT_BUTTON_DELAY);
}
LLTransientFloaterMgr::instance().addControlView(
LLTransientFloaterMgr::GLOBAL, this);
}
bool LLToastAlertPanel::setCheckBox( const std::string& check_title, const std::string& check_control )
@ -377,6 +381,8 @@ void LLToastAlertPanel::setVisible( BOOL visible )
LLToastAlertPanel::~LLToastAlertPanel()
{
LLTransientFloaterMgr::instance().removeControlView(
LLTransientFloaterMgr::GLOBAL, this);
}
BOOL LLToastAlertPanel::hasTitleBar() const

View File

@ -530,7 +530,7 @@
reference="Unused?" />
<color
name="NetMapBackgroundColor"
value="0 0 0 0" />
value="0 0 0 1" />
<color
name="NetMapGroupOwnAboveWater"
reference="Purple" />

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
bg_alpha_image_overlay="DkGray_66"
legacy_header_height="18"
legacy_header_height="0"
can_minimize="true"
can_resize="true"
follows="top|right"
@ -10,7 +10,7 @@
min_height="174"
min_width="174"
name="Map"
title="Mini Map"
title=""
help_topic="map"
save_rect="true"
save_visibility="true"
@ -62,8 +62,8 @@
mouse_opaque="false"
name="Net Map"
width="200"
height="200"
top="18"/>
height="218"
top="0"/>
<text
type="string"
length="1"

View File

@ -537,6 +537,7 @@
<button
follows="right|bottom"
height="23"
image_unselected="PushButton_On"
label="Teleport"
layout="topleft"
left="25"

View File

@ -6118,6 +6118,12 @@ The button will be shown when there is enough space for it.
type="notifytip">
Drag items from inventory onto a person in the resident picker
</notification>
<notification
icon="notifytip.tga"
name="DeedToGroupFail"
type="notifytip">
Deed to group failed.
</notification>
<notification
icon="notifytip.tga"

View File

@ -175,6 +175,7 @@ left="0"
value="Shape:"
width="150" />
<radio_group
control_name="AvatarSex"
follows="left|top|right"
left="210"
height="20"
@ -190,6 +191,7 @@ left="0"
left="0"
name="sex_male"
tool_tip="Male"
value="1"
width="40" />
<radio_item
follows="all"
@ -199,6 +201,7 @@ left="0"
left_pad="10"
name="sex_female"
tool_tip="Female"
value="0"
width="40" />
</radio_group>
<!-- graphical labels for the radio buttons above -->