diff options
Diffstat (limited to 'linden/indra')
20 files changed, 917 insertions, 254 deletions
diff --git a/linden/indra/llcommon/llversionviewer.h b/linden/indra/llcommon/llversionviewer.h index 4032c5b..4b99b71 100644 --- a/linden/indra/llcommon/llversionviewer.h +++ b/linden/indra/llcommon/llversionviewer.h | |||
@@ -45,6 +45,6 @@ const char * const IMP_VIEWER_NAME = "Imprudence"; | |||
45 | const S32 IMP_VERSION_MAJOR = 1; | 45 | const S32 IMP_VERSION_MAJOR = 1; |
46 | const S32 IMP_VERSION_MINOR = 1; | 46 | const S32 IMP_VERSION_MINOR = 1; |
47 | const S32 IMP_VERSION_PATCH = 0; | 47 | const S32 IMP_VERSION_PATCH = 0; |
48 | const char * const IMP_VERSION_TEST = "alpha"; | 48 | const char * const IMP_VERSION_TEST = "RC1"; |
49 | 49 | ||
50 | #endif | 50 | #endif |
diff --git a/linden/indra/llmath/CMakeLists.txt b/linden/indra/llmath/CMakeLists.txt index 6a329fa..e5ec3e1 100644 --- a/linden/indra/llmath/CMakeLists.txt +++ b/linden/indra/llmath/CMakeLists.txt | |||
@@ -11,6 +11,8 @@ include_directories( | |||
11 | 11 | ||
12 | set(llmath_SOURCE_FILES | 12 | set(llmath_SOURCE_FILES |
13 | llbboxlocal.cpp | 13 | llbboxlocal.cpp |
14 | llcalc.cpp | ||
15 | llcalcparser.cpp | ||
14 | llcamera.cpp | 16 | llcamera.cpp |
15 | llcoordframe.cpp | 17 | llcoordframe.cpp |
16 | llline.cpp | 18 | llline.cpp |
@@ -40,6 +42,8 @@ set(llmath_HEADER_FILES | |||
40 | camera.h | 42 | camera.h |
41 | coordframe.h | 43 | coordframe.h |
42 | llbboxlocal.h | 44 | llbboxlocal.h |
45 | llcalc.h | ||
46 | llcalcparser.h | ||
43 | llcamera.h | 47 | llcamera.h |
44 | llcoord.h | 48 | llcoord.h |
45 | llcoordframe.h | 49 | llcoordframe.h |
diff --git a/linden/indra/llmath/llcalc.cpp b/linden/indra/llmath/llcalc.cpp new file mode 100644 index 0000000..ff3f91f --- /dev/null +++ b/linden/indra/llmath/llcalc.cpp | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | * LLCalc.cpp | ||
3 | * SecondLife | ||
4 | * | ||
5 | * Created by Aimee Walton on 28/09/2008. | ||
6 | * Copyright 2008 Aimee Walton. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #include "linden_common.h" | ||
11 | |||
12 | #include "llcalc.h" | ||
13 | |||
14 | #include <boost/spirit/core.hpp> | ||
15 | #include <boost/spirit/error_handling.hpp> | ||
16 | |||
17 | #include "llcalcparser.h" | ||
18 | #include "llmath.h" | ||
19 | |||
20 | |||
21 | // Variable names for use in the build floater | ||
22 | const char* LLCalc::X_POS = "XP"; | ||
23 | const char* LLCalc::Y_POS = "YP"; | ||
24 | const char* LLCalc::Z_POS = "ZP"; | ||
25 | const char* LLCalc::X_SCALE = "XS"; | ||
26 | const char* LLCalc::Y_SCALE = "YS"; | ||
27 | const char* LLCalc::Z_SCALE = "ZS"; | ||
28 | const char* LLCalc::X_ROT = "XR"; | ||
29 | const char* LLCalc::Y_ROT = "YR"; | ||
30 | const char* LLCalc::Z_ROT = "ZR"; | ||
31 | const char* LLCalc::HOLLOW = "HLW"; | ||
32 | const char* LLCalc::CUT_BEGIN = "CB"; | ||
33 | const char* LLCalc::CUT_END = "CE"; | ||
34 | const char* LLCalc::PATH_BEGIN = "PB"; | ||
35 | const char* LLCalc::PATH_END = "PE"; | ||
36 | const char* LLCalc::TWIST_BEGIN = "TB"; | ||
37 | const char* LLCalc::TWIST_END = "TE"; | ||
38 | const char* LLCalc::X_SHEAR = "XSH"; | ||
39 | const char* LLCalc::Y_SHEAR = "YSH"; | ||
40 | const char* LLCalc::X_TAPER = "XTP"; | ||
41 | const char* LLCalc::Y_TAPER = "YTP"; | ||
42 | const char* LLCalc::RADIUS_OFFSET = "ROF"; | ||
43 | const char* LLCalc::REVOLUTIONS = "REV"; | ||
44 | const char* LLCalc::SKEW = "SKW"; | ||
45 | const char* LLCalc::X_HOLE = "XHL"; | ||
46 | const char* LLCalc::Y_HOLE = "YHL"; | ||
47 | const char* LLCalc::TEX_U_SCALE = "TSU"; | ||
48 | const char* LLCalc::TEX_V_SCALE = "TSV"; | ||
49 | const char* LLCalc::TEX_U_OFFSET = "TOU"; | ||
50 | const char* LLCalc::TEX_V_OFFSET = "TOV"; | ||
51 | const char* LLCalc::TEX_ROTATION = "TROT"; | ||
52 | const char* LLCalc::TEX_TRANSPARENCY = "TRNS"; | ||
53 | const char* LLCalc::TEX_GLOW = "GLOW"; | ||
54 | |||
55 | |||
56 | LLCalc* LLCalc::sInstance = NULL; | ||
57 | |||
58 | LLCalc::LLCalc() : mLastErrorPos(0) | ||
59 | { | ||
60 | // mUserVariables = new calc_map_t; | ||
61 | mVariables = new calc_map_t; | ||
62 | mConstants = new calc_map_t; | ||
63 | |||
64 | // Init table of constants | ||
65 | (*mConstants)["PI"] = F_PI; | ||
66 | (*mConstants)["TWO_PI"] = F_TWO_PI; | ||
67 | (*mConstants)["PI_BY_TWO"] = F_PI_BY_TWO; | ||
68 | (*mConstants)["SQRT2"] = F_SQRT2; | ||
69 | (*mConstants)["DEG_TO_RAD"] = DEG_TO_RAD; | ||
70 | (*mConstants)["RAD_TO_DEG"] = RAD_TO_DEG; | ||
71 | (*mConstants)["GRAVITY"] = GRAVITY; | ||
72 | } | ||
73 | |||
74 | LLCalc::~LLCalc() | ||
75 | { | ||
76 | delete mConstants; | ||
77 | delete mVariables; | ||
78 | // delete mUserVariables; | ||
79 | } | ||
80 | |||
81 | //static | ||
82 | void LLCalc::cleanUp() | ||
83 | { | ||
84 | delete sInstance; | ||
85 | sInstance = NULL; | ||
86 | } | ||
87 | |||
88 | //static | ||
89 | LLCalc* LLCalc::getInstance() | ||
90 | { | ||
91 | if (!sInstance) sInstance = new LLCalc(); | ||
92 | return sInstance; | ||
93 | } | ||
94 | |||
95 | void LLCalc::setVar(const std::string& name, const F32& value) | ||
96 | { | ||
97 | (*mVariables)[name] = value; | ||
98 | } | ||
99 | |||
100 | void LLCalc::clearVar(const std::string& name) | ||
101 | { | ||
102 | mVariables->erase(name); | ||
103 | } | ||
104 | |||
105 | void LLCalc::clearAllVariables() | ||
106 | { | ||
107 | mVariables->clear(); | ||
108 | } | ||
109 | |||
110 | /* | ||
111 | void LLCalc::updateVariables(LLSD& vars) | ||
112 | { | ||
113 | LLSD::map_iterator cIt = vars.beginMap(); | ||
114 | for(; cIt != vars.endMap(); cIt++) | ||
115 | { | ||
116 | setVar(cIt->first, (F32)(LLSD::Real)cIt->second); | ||
117 | } | ||
118 | } | ||
119 | */ | ||
120 | |||
121 | bool LLCalc::evalString(const std::string& expression, F32& result) | ||
122 | { | ||
123 | using namespace boost::spirit; | ||
124 | |||
125 | std::string expr_upper = expression; | ||
126 | LLStringUtil::toUpper(expr_upper); | ||
127 | |||
128 | LLCalcParser calc(result, mConstants, mVariables); | ||
129 | |||
130 | mLastErrorPos = 0; | ||
131 | std::string::iterator start = expr_upper.begin(); | ||
132 | parse_info<std::string::iterator> info; | ||
133 | |||
134 | try | ||
135 | { | ||
136 | info = parse(start, expr_upper.end(), calc, space_p); | ||
137 | lldebugs << "Math expression: " << expression << " = " << result << llendl; | ||
138 | } | ||
139 | catch(parser_error<std::string, std::string::iterator> &e) | ||
140 | { | ||
141 | mLastErrorPos = e.where - expr_upper.begin(); | ||
142 | |||
143 | llinfos << "Calc parser exception: " << e.descriptor << " at " << mLastErrorPos << " in expression: " << expression << llendl; | ||
144 | return false; | ||
145 | } | ||
146 | |||
147 | if (!info.full) | ||
148 | { | ||
149 | mLastErrorPos = info.stop - expr_upper.begin(); | ||
150 | llinfos << "Unhandled syntax error at " << mLastErrorPos << " in expression: " << expression << llendl; | ||
151 | return false; | ||
152 | } | ||
153 | |||
154 | return true; | ||
155 | } | ||
diff --git a/linden/indra/llmath/llcalc.h b/linden/indra/llmath/llcalc.h new file mode 100644 index 0000000..a376895 --- /dev/null +++ b/linden/indra/llmath/llcalc.h | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * LLCalc.h | ||
3 | * SecondLife | ||
4 | * | ||
5 | * Created by Aimee Walton on 28/09/2008. | ||
6 | * Copyright 2008 Aimee Walton. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef LL_CALC_H | ||
11 | #define LL_CALC_H | ||
12 | |||
13 | #include <map> | ||
14 | #include <string> | ||
15 | |||
16 | //#include "llsd.h" | ||
17 | |||
18 | class LLCalc | ||
19 | { | ||
20 | public: | ||
21 | LLCalc(); | ||
22 | ~LLCalc(); | ||
23 | |||
24 | // Variable name constants | ||
25 | static const char* X_POS; | ||
26 | static const char* Y_POS; | ||
27 | static const char* Z_POS; | ||
28 | static const char* X_SCALE; | ||
29 | static const char* Y_SCALE; | ||
30 | static const char* Z_SCALE; | ||
31 | static const char* X_ROT; | ||
32 | static const char* Y_ROT; | ||
33 | static const char* Z_ROT; | ||
34 | static const char* HOLLOW; | ||
35 | static const char* CUT_BEGIN; | ||
36 | static const char* CUT_END; | ||
37 | static const char* PATH_BEGIN; | ||
38 | static const char* PATH_END; | ||
39 | static const char* TWIST_BEGIN; | ||
40 | static const char* TWIST_END; | ||
41 | static const char* X_SHEAR; | ||
42 | static const char* Y_SHEAR; | ||
43 | static const char* X_TAPER; | ||
44 | static const char* Y_TAPER; | ||
45 | static const char* RADIUS_OFFSET; | ||
46 | static const char* REVOLUTIONS; | ||
47 | static const char* SKEW; | ||
48 | static const char* X_HOLE; | ||
49 | static const char* Y_HOLE; | ||
50 | static const char* TEX_U_SCALE; | ||
51 | static const char* TEX_V_SCALE; | ||
52 | static const char* TEX_U_OFFSET; | ||
53 | static const char* TEX_V_OFFSET; | ||
54 | static const char* TEX_ROTATION; | ||
55 | static const char* TEX_TRANSPARENCY; | ||
56 | static const char* TEX_GLOW; | ||
57 | |||
58 | void setVar(const std::string& name, const F32& value); | ||
59 | void clearVar(const std::string& name); | ||
60 | void clearAllVariables(); | ||
61 | // void updateVariables(LLSD& vars); | ||
62 | |||
63 | bool evalString(const std::string& expression, F32& result); | ||
64 | std::string::size_type getLastErrorPos() { return mLastErrorPos; } | ||
65 | |||
66 | static LLCalc* getInstance(); | ||
67 | static void cleanUp(); | ||
68 | |||
69 | typedef std::map<std::string, F32> calc_map_t; | ||
70 | |||
71 | private: | ||
72 | std::string::size_type mLastErrorPos; | ||
73 | |||
74 | calc_map_t* mConstants; | ||
75 | calc_map_t* mVariables; | ||
76 | |||
77 | // *TODO: Add support for storing user defined variables, and stored functions. | ||
78 | // Will need UI work, and a means to save them between sessions. | ||
79 | // calc_map_t* mUserVariables; | ||
80 | |||
81 | // "There shall be only one" | ||
82 | static LLCalc* sInstance; | ||
83 | }; | ||
84 | |||
85 | #endif // LL_CALC_H | ||
diff --git a/linden/indra/llmath/llcalcparser.cpp b/linden/indra/llmath/llcalcparser.cpp new file mode 100644 index 0000000..1546c09 --- /dev/null +++ b/linden/indra/llmath/llcalcparser.cpp | |||
@@ -0,0 +1,45 @@ | |||
1 | /* | ||
2 | * LLCalcParser.cpp | ||
3 | * SecondLife | ||
4 | * | ||
5 | * Created by Aimee Walton on 28/09/2008. | ||
6 | * Copyright 2008 Aimee Walton. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #include "linden_common.h" | ||
11 | |||
12 | #include "llcalcparser.h" | ||
13 | |||
14 | F32 LLCalcParser::lookup(const std::string::iterator& start, const std::string::iterator& end) const | ||
15 | { | ||
16 | LLCalc::calc_map_t::iterator iter; | ||
17 | |||
18 | std::string name(start, end); | ||
19 | |||
20 | if (mConstants) | ||
21 | { | ||
22 | iter = mConstants->find(name); | ||
23 | if (iter != mConstants->end()) | ||
24 | { | ||
25 | return (*iter).second; | ||
26 | } | ||
27 | } | ||
28 | else | ||
29 | { | ||
30 | // This should never happen! | ||
31 | boost::spirit::throw_(end, std::string("Missing constants table")); | ||
32 | } | ||
33 | |||
34 | if (mVariables) | ||
35 | { | ||
36 | iter = mVariables->find(name); | ||
37 | if (iter != mVariables->end()) | ||
38 | { | ||
39 | return (*iter).second; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | boost::spirit::throw_(end, std::string("Unknown symbol " + name)); | ||
44 | return 0.f; | ||
45 | } | ||
diff --git a/linden/indra/llmath/llcalcparser.h b/linden/indra/llmath/llcalcparser.h new file mode 100644 index 0000000..c405b62 --- /dev/null +++ b/linden/indra/llmath/llcalcparser.h | |||
@@ -0,0 +1,155 @@ | |||
1 | /* | ||
2 | * LLCalcParser.h | ||
3 | * SecondLife | ||
4 | * | ||
5 | * Created by Aimee Walton on 28/09/2008. | ||
6 | * Copyright 2008 Aimee Walton. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef LL_CALCPARSER_H | ||
11 | #define LL_CALCPARSER_H | ||
12 | |||
13 | #include <boost/spirit/attribute.hpp> | ||
14 | #include <boost/spirit/core.hpp> | ||
15 | #include <boost/spirit/error_handling.hpp> | ||
16 | #include <boost/spirit/iterator/position_iterator.hpp> | ||
17 | #include <boost/spirit/phoenix/binders.hpp> | ||
18 | //#include <boost/spirit/symbols/symbols.hpp> | ||
19 | #include <map> | ||
20 | #include <string> | ||
21 | |||
22 | #include "llcalc.h" | ||
23 | #include "llmath.h" | ||
24 | |||
25 | struct LLCalcParser : boost::spirit::grammar<LLCalcParser> | ||
26 | { | ||
27 | LLCalcParser(F32& result, LLCalc::calc_map_t* constants, LLCalc::calc_map_t* vars) : | ||
28 | mResult(result), mConstants(constants), mVariables(vars) {}; | ||
29 | |||
30 | struct value_closure : boost::spirit::closure<value_closure, F32> | ||
31 | { | ||
32 | member1 value; | ||
33 | }; | ||
34 | |||
35 | template <typename ScannerT> | ||
36 | struct definition | ||
37 | { | ||
38 | // Rule declarations | ||
39 | boost::spirit::rule<ScannerT> statement, identifier; | ||
40 | boost::spirit::rule<ScannerT, value_closure::context_t> expression, term, | ||
41 | power, | ||
42 | unary_expr, | ||
43 | factor, | ||
44 | /*unary_func, | ||
45 | /binary_func,*/ | ||
46 | group; | ||
47 | |||
48 | // start() should return the starting symbol | ||
49 | boost::spirit::rule<ScannerT> const& start() const { return statement; } | ||
50 | |||
51 | definition(LLCalcParser const& self) | ||
52 | { | ||
53 | using namespace boost::spirit; | ||
54 | using namespace phoenix; | ||
55 | |||
56 | assertion<std::string> assert_domain("Domain error"); | ||
57 | // assertion<std::string> assert_symbol("Unknown symbol"); | ||
58 | assertion<std::string> assert_syntax("Syntax error"); | ||
59 | |||
60 | identifier = | ||
61 | lexeme_d[(alpha_p | '_') >> *(alnum_p | '_')] | ||
62 | ; | ||
63 | |||
64 | group = | ||
65 | '(' >> expression[group.value = arg1] >> assert_syntax(ch_p(')')) | ||
66 | ; | ||
67 | |||
68 | /*unary_func = | ||
69 | ((str_p("SIN") >> '(' >> expression[unary_func.value = bind(&sin)(DEG_TO_RAD * arg1)]) | | ||
70 | (str_p("COS") >> '(' >> expression[unary_func.value = bind(&cos)(DEG_TO_RAD * arg1)]) | | ||
71 | (str_p("TAN") >> '(' >> expression[unary_func.value = bind(&tan)(DEG_TO_RAD * arg1)]) | | ||
72 | (str_p("ASIN") >> '(' >> expression[unary_func.value = (bind(&asin)(arg1)) * RAD_TO_DEG]) | | ||
73 | (str_p("ACOS") >> '(' >> expression[unary_func.value = bind(&acos)(arg1) * RAD_TO_DEG]) | | ||
74 | (str_p("ATAN") >> '(' >> expression[unary_func.value = bind(&atan)(arg1) * RAD_TO_DEG]) | | ||
75 | (str_p("SQRT") >> '(' >> expression[unary_func.value = bind(&sqrt)(arg1)]) | | ||
76 | (str_p("LOG") >> '(' >> expression[unary_func.value = bind(&log)(arg1)]) | | ||
77 | (str_p("EXP") >> '(' >> expression[unary_func.value = bind(&exp)(arg1)]) | | ||
78 | (str_p("ABS") >> '(' >> expression[unary_func.value = bind(&fabs)(arg1)]) | ||
79 | ) >> assert_syntax(ch_p(')')) | ||
80 | ; | ||
81 | |||
82 | binary_func = | ||
83 | ((str_p("ATAN2") >> '(' >> expression[binary_func.value = arg1] >> ',' >> | ||
84 | expression[binary_func.value = bind(&atan2)(binary_func.value, arg1) * RAD_TO_DEG]) | | ||
85 | (str_p("MIN") >> '(' >> expression[binary_func.value = arg1] >> ',' >> | ||
86 | expression[binary_func.value = bind(&LLCalcParser::min)(self, binary_func.value, arg1)]) | | ||
87 | (str_p("MAX") >> '(' >> expression[binary_func.value = arg1] >> ',' >> | ||
88 | expression[binary_func.value = bind(&LLCalcParser::max)(self, binary_func.value, arg1)]) | ||
89 | ) >> assert_syntax(ch_p(')')) | ||
90 | ;*/ | ||
91 | |||
92 | // *TODO: Localisation of the decimal point? | ||
93 | // Problem, LLLineEditor::postvalidateFloat accepts a comma when appropriate | ||
94 | // for the current locale. However to do that here could clash with using | ||
95 | // the comma as a separator when passing arguments to functions. | ||
96 | factor = | ||
97 | (ureal_p[factor.value = arg1] | | ||
98 | group[factor.value = arg1] | | ||
99 | /*unary_func[factor.value = arg1] | | ||
100 | binary_func[factor.value = arg1] |*/ | ||
101 | // Lookup throws an Unknown Symbol error if it is unknown, while this works fine, | ||
102 | // would be "neater" to handle symbol lookup from here with an assertive parser. | ||
103 | // constants_p[factor.value = arg1]| | ||
104 | identifier[factor.value = bind(&LLCalcParser::lookup)(self, arg1, arg2)] | ||
105 | ) >> | ||
106 | // Detect and throw math errors. | ||
107 | assert_domain(eps_p(bind(&LLCalcParser::checkNaN)(self, factor.value))) | ||
108 | ; | ||
109 | |||
110 | unary_expr = | ||
111 | !ch_p('+') >> factor[unary_expr.value = arg1] | | ||
112 | '-' >> factor[unary_expr.value = -arg1] | ||
113 | ; | ||
114 | |||
115 | power = | ||
116 | unary_expr[power.value = arg1] >> | ||
117 | *('^' >> assert_syntax(unary_expr[power.value = bind(&powf)(power.value, arg1)])) | ||
118 | ; | ||
119 | |||
120 | term = | ||
121 | power[term.value = arg1] >> | ||
122 | *(('*' >> assert_syntax(power[term.value *= arg1])) | | ||
123 | ('/' >> assert_syntax(power[term.value /= arg1])) | ||
124 | ) | ||
125 | ; | ||
126 | |||
127 | expression = | ||
128 | assert_syntax(term[expression.value = arg1]) >> | ||
129 | *(('+' >> assert_syntax(term[expression.value += arg1])) | | ||
130 | ('-' >> assert_syntax(term[expression.value -= arg1])) | ||
131 | ) | ||
132 | ; | ||
133 | |||
134 | statement = | ||
135 | !ch_p('=') >> ( expression )[var(self.mResult) = arg1] >> (end_p) | ||
136 | ; | ||
137 | } | ||
138 | }; | ||
139 | |||
140 | private: | ||
141 | // Member functions for semantic actions | ||
142 | F32 lookup(const std::string::iterator&, const std::string::iterator&) const; | ||
143 | F32 min(const F32& a, const F32& b) const { return llmin(a, b); } | ||
144 | F32 max(const F32& a, const F32& b) const { return llmax(a, b); } | ||
145 | |||
146 | bool checkNaN(const F32& a) const { return !llisnan(a); } | ||
147 | |||
148 | LLCalc::calc_map_t* mConstants; | ||
149 | LLCalc::calc_map_t* mVariables; | ||
150 | // LLCalc::calc_map_t* mUserVariables; | ||
151 | |||
152 | F32& mResult; | ||
153 | }; | ||
154 | |||
155 | #endif // LL_CALCPARSER_H | ||
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp index 12d1929..9c8ee94 100644 --- a/linden/indra/llui/lllineeditor.cpp +++ b/linden/indra/llui/lllineeditor.cpp | |||
@@ -41,6 +41,7 @@ | |||
41 | #include "llgl.h" | 41 | #include "llgl.h" |
42 | #include "lltimer.h" | 42 | #include "lltimer.h" |
43 | 43 | ||
44 | #include "llcalc.h" | ||
44 | //#include "llclipboard.h" | 45 | //#include "llclipboard.h" |
45 | #include "llcontrol.h" | 46 | #include "llcontrol.h" |
46 | #include "llbutton.h" | 47 | #include "llbutton.h" |
@@ -129,6 +130,7 @@ LLLineEditor::LLLineEditor(const std::string& name, const LLRect& rect, | |||
129 | mDrawAsterixes( FALSE ), | 130 | mDrawAsterixes( FALSE ), |
130 | mHandleEditKeysDirectly( FALSE ), | 131 | mHandleEditKeysDirectly( FALSE ), |
131 | mSelectAllonFocusReceived( FALSE ), | 132 | mSelectAllonFocusReceived( FALSE ), |
133 | mSelectAllonCommit( TRUE ), | ||
132 | mPassDelete(FALSE), | 134 | mPassDelete(FALSE), |
133 | mReadOnly(FALSE), | 135 | mReadOnly(FALSE), |
134 | mImage( sImage ), | 136 | mImage( sImage ), |
@@ -226,7 +228,10 @@ void LLLineEditor::onCommit() | |||
226 | updateHistory(); | 228 | updateHistory(); |
227 | 229 | ||
228 | LLUICtrl::onCommit(); | 230 | LLUICtrl::onCommit(); |
229 | selectAll(); | 231 | |
232 | // Selection on commit needs to be turned off when evaluating maths | ||
233 | // expressions, to allow indication of the error position | ||
234 | if (mSelectAllonCommit) selectAll(); | ||
230 | } | 235 | } |
231 | 236 | ||
232 | 237 | ||
@@ -2082,6 +2087,32 @@ BOOL LLLineEditor::prevalidateASCII(const LLWString &str) | |||
2082 | return rv; | 2087 | return rv; |
2083 | } | 2088 | } |
2084 | 2089 | ||
2090 | BOOL LLLineEditor::evaluateFloat() | ||
2091 | { | ||
2092 | bool success; | ||
2093 | F32 result = 0.f; | ||
2094 | std::string expr = getText(); | ||
2095 | |||
2096 | success = LLCalc::getInstance()->evalString(expr, result); | ||
2097 | |||
2098 | if (!success) | ||
2099 | { | ||
2100 | // Move the cursor to near the error on failure | ||
2101 | setCursor(LLCalc::getInstance()->getLastErrorPos()); | ||
2102 | // *TODO: Translated error message indicating the type of error? Select error text? | ||
2103 | } | ||
2104 | else | ||
2105 | { | ||
2106 | // Replace the expression with the result | ||
2107 | std::ostringstream result_str; | ||
2108 | result_str << result; | ||
2109 | setText(result_str.str()); | ||
2110 | selectAll(); | ||
2111 | } | ||
2112 | |||
2113 | return success; | ||
2114 | } | ||
2115 | |||
2085 | void LLLineEditor::onMouseCaptureLost() | 2116 | void LLLineEditor::onMouseCaptureLost() |
2086 | { | 2117 | { |
2087 | endSelection(); | 2118 | endSelection(); |
diff --git a/linden/indra/llui/lllineeditor.h b/linden/indra/llui/lllineeditor.h index 09a240b..6738151 100644 --- a/linden/indra/llui/lllineeditor.h +++ b/linden/indra/llui/lllineeditor.h | |||
@@ -188,6 +188,7 @@ public: | |||
188 | 188 | ||
189 | void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; } | 189 | void setHandleEditKeysDirectly( BOOL b ) { mHandleEditKeysDirectly = b; } |
190 | void setSelectAllonFocusReceived(BOOL b); | 190 | void setSelectAllonFocusReceived(BOOL b); |
191 | void setSelectAllonCommit(BOOL b) { mSelectAllonCommit = b; } | ||
191 | 192 | ||
192 | void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data)); | 193 | void setKeystrokeCallback(void (*keystroke_callback)(LLLineEditor* caller, void* user_data)); |
193 | 194 | ||
@@ -208,6 +209,8 @@ public: | |||
208 | static BOOL prevalidateASCII(const LLWString &str); | 209 | static BOOL prevalidateASCII(const LLWString &str); |
209 | 210 | ||
210 | static BOOL postvalidateFloat(const std::string &str); | 211 | static BOOL postvalidateFloat(const std::string &str); |
212 | |||
213 | BOOL evaluateFloat(); | ||
211 | 214 | ||
212 | // line history support: | 215 | // line history support: |
213 | void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off | 216 | void setEnableLineHistory( BOOL enabled ) { mHaveHistory = enabled; } // switches line history on or off |
@@ -297,6 +300,7 @@ protected: | |||
297 | 300 | ||
298 | BOOL mHandleEditKeysDirectly; // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system | 301 | BOOL mHandleEditKeysDirectly; // If true, the standard edit keys (Ctrl-X, Delete, etc,) are handled here instead of routed by the menu system |
299 | BOOL mSelectAllonFocusReceived; | 302 | BOOL mSelectAllonFocusReceived; |
303 | BOOL mSelectAllonCommit; | ||
300 | BOOL mPassDelete; | 304 | BOOL mPassDelete; |
301 | 305 | ||
302 | BOOL mReadOnly; | 306 | BOOL mReadOnly; |
diff --git a/linden/indra/llui/llspinctrl.cpp b/linden/indra/llui/llspinctrl.cpp index a106af4..b12d095 100644 --- a/linden/indra/llui/llspinctrl.cpp +++ b/linden/indra/llui/llspinctrl.cpp | |||
@@ -49,7 +49,7 @@ | |||
49 | #include "llfocusmgr.h" | 49 | #include "llfocusmgr.h" |
50 | #include "llresmgr.h" | 50 | #include "llresmgr.h" |
51 | 51 | ||
52 | const U32 MAX_STRING_LENGTH = 32; | 52 | const U32 MAX_STRING_LENGTH = 255; |
53 | 53 | ||
54 | static LLRegisterWidget<LLSpinCtrl> r2("spinner"); | 54 | static LLRegisterWidget<LLSpinCtrl> r2("spinner"); |
55 | 55 | ||
@@ -123,7 +123,7 @@ LLSpinCtrl::LLSpinCtrl( const std::string& name, const LLRect& rect, const std:: | |||
123 | mEditor = new LLLineEditor( std::string("SpinCtrl Editor"), editor_rect, LLStringUtil::null, font, | 123 | mEditor = new LLLineEditor( std::string("SpinCtrl Editor"), editor_rect, LLStringUtil::null, font, |
124 | MAX_STRING_LENGTH, | 124 | MAX_STRING_LENGTH, |
125 | &LLSpinCtrl::onEditorCommit, NULL, NULL, this, | 125 | &LLSpinCtrl::onEditorCommit, NULL, NULL, this, |
126 | &LLLineEditor::prevalidateFloat ); | 126 | &LLLineEditor::prevalidateASCII ); |
127 | mEditor->setFollowsLeft(); | 127 | mEditor->setFollowsLeft(); |
128 | mEditor->setFollowsBottom(); | 128 | mEditor->setFollowsBottom(); |
129 | mEditor->setFocusReceivedCallback( &LLSpinCtrl::onEditorGainFocus, this ); | 129 | mEditor->setFocusReceivedCallback( &LLSpinCtrl::onEditorGainFocus, this ); |
@@ -132,6 +132,7 @@ LLSpinCtrl::LLSpinCtrl( const std::string& name, const LLRect& rect, const std:: | |||
132 | // it's easier to understand | 132 | // it's easier to understand |
133 | //mEditor->setSelectAllonFocusReceived(TRUE); | 133 | //mEditor->setSelectAllonFocusReceived(TRUE); |
134 | mEditor->setIgnoreTab(TRUE); | 134 | mEditor->setIgnoreTab(TRUE); |
135 | mEditor->setSelectAllonCommit(FALSE); | ||
135 | addChild(mEditor); | 136 | addChild(mEditor); |
136 | 137 | ||
137 | updateEditor(); | 138 | updateEditor(); |
@@ -292,9 +293,10 @@ void LLSpinCtrl::onEditorCommit( LLUICtrl* caller, void *userdata ) | |||
292 | LLSpinCtrl* self = (LLSpinCtrl*) userdata; | 293 | LLSpinCtrl* self = (LLSpinCtrl*) userdata; |
293 | llassert( caller == self->mEditor ); | 294 | llassert( caller == self->mEditor ); |
294 | 295 | ||
295 | std::string text = self->mEditor->getText(); | 296 | if( self->mEditor->evaluateFloat() ) |
296 | if( LLLineEditor::postvalidateFloat( text ) ) | ||
297 | { | 297 | { |
298 | std::string text = self->mEditor->getText(); | ||
299 | |||
298 | LLLocale locale(LLLocale::USER_LOCALE); | 300 | LLLocale locale(LLLocale::USER_LOCALE); |
299 | F32 val = (F32) atof(text.c_str()); | 301 | F32 val = (F32) atof(text.c_str()); |
300 | 302 | ||
@@ -322,9 +324,12 @@ void LLSpinCtrl::onEditorCommit( LLUICtrl* caller, void *userdata ) | |||
322 | success = TRUE; | 324 | success = TRUE; |
323 | } | 325 | } |
324 | } | 326 | } |
325 | self->updateEditor(); | ||
326 | 327 | ||
327 | if( !success ) | 328 | if( success ) |
329 | { | ||
330 | self->updateEditor(); | ||
331 | } | ||
332 | else | ||
328 | { | 333 | { |
329 | self->reportInvalidData(); | 334 | self->reportInvalidData(); |
330 | } | 335 | } |
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index ca3dd81..7e591bf 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml | |||
@@ -4820,7 +4820,7 @@ | |||
4820 | <key>MuteAmbient</key> | 4820 | <key>MuteAmbient</key> |
4821 | <map> | 4821 | <map> |
4822 | <key>Comment</key> | 4822 | <key>Comment</key> |
4823 | <string>Ambient sound effects, such as wind noise, play at 0 volume</string> | 4823 | <string>Ambient sound effects, play at 0 volume</string> |
4824 | <key>Persist</key> | 4824 | <key>Persist</key> |
4825 | <integer>1</integer> | 4825 | <integer>1</integer> |
4826 | <key>Type</key> | 4826 | <key>Type</key> |
@@ -4905,6 +4905,17 @@ | |||
4905 | <key>Value</key> | 4905 | <key>Value</key> |
4906 | <integer>1</integer> | 4906 | <integer>1</integer> |
4907 | </map> | 4907 | </map> |
4908 | <key>MuteWind</key> | ||
4909 | <map> | ||
4910 | <key>Comment</key> | ||
4911 | <string>Mute inworld wind generation</string> | ||
4912 | <key>Persist</key> | ||
4913 | <integer>1</integer> | ||
4914 | <key>Type</key> | ||
4915 | <string>Boolean</string> | ||
4916 | <key>Value</key> | ||
4917 | <integer>1</integer> | ||
4918 | </map> | ||
4908 | <key>NewCacheLocation</key> | 4919 | <key>NewCacheLocation</key> |
4909 | <map> | 4920 | <map> |
4910 | <key>Comment</key> | 4921 | <key>Comment</key> |
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index 2cf418e..64402e3 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp | |||
@@ -109,6 +109,7 @@ | |||
109 | #include "llpostprocess.h" | 109 | #include "llpostprocess.h" |
110 | #include "llwlparammanager.h" | 110 | #include "llwlparammanager.h" |
111 | #include "llwaterparammanager.h" | 111 | #include "llwaterparammanager.h" |
112 | #include "llcalc.h" | ||
112 | 113 | ||
113 | #include "lldebugview.h" | 114 | #include "lldebugview.h" |
114 | #include "llconsole.h" | 115 | #include "llconsole.h" |
@@ -1176,6 +1177,8 @@ bool LLAppViewer::cleanup() | |||
1176 | LLNotifyBox::cleanup(); | 1177 | LLNotifyBox::cleanup(); |
1177 | 1178 | ||
1178 | LLWorldMap::getInstance()->reset(); // release any images | 1179 | LLWorldMap::getInstance()->reset(); // release any images |
1180 | |||
1181 | LLCalc::cleanUp(); | ||
1179 | 1182 | ||
1180 | llinfos << "Global stuff deleted" << llendflush; | 1183 | llinfos << "Global stuff deleted" << llendflush; |
1181 | 1184 | ||
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp index 4742627..d1c34f1 100644 --- a/linden/indra/newview/llpanelface.cpp +++ b/linden/indra/newview/llpanelface.cpp | |||
@@ -35,6 +35,7 @@ | |||
35 | #include "llpanelface.h" | 35 | #include "llpanelface.h" |
36 | 36 | ||
37 | // library includes | 37 | // library includes |
38 | #include "llcalc.h" | ||
38 | #include "llerror.h" | 39 | #include "llerror.h" |
39 | #include "llfocusmgr.h" | 40 | #include "llfocusmgr.h" |
40 | #include "llrect.h" | 41 | #include "llrect.h" |
@@ -60,6 +61,7 @@ | |||
60 | #include "llviewermedia.h" | 61 | #include "llviewermedia.h" |
61 | #include "llviewerobject.h" | 62 | #include "llviewerobject.h" |
62 | #include "llviewerstats.h" | 63 | #include "llviewerstats.h" |
64 | #include "llviewerwindow.h" | ||
63 | #include "lluictrlfactory.h" | 65 | #include "lluictrlfactory.h" |
64 | 66 | ||
65 | // | 67 | // |
@@ -179,6 +181,7 @@ BOOL LLPanelFace::postBuild() | |||
179 | childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this); | 181 | childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this); |
180 | childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this); | 182 | childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this); |
181 | childSetAction("button align",onClickAutoFix,this); | 183 | childSetAction("button align",onClickAutoFix,this); |
184 | childSetAction("texture_math_constants",onClickTextureConstants,this); | ||
182 | 185 | ||
183 | clearCtrls(); | 186 | clearCtrls(); |
184 | 187 | ||
@@ -381,6 +384,7 @@ void LLPanelFace::sendTextureInfo() | |||
381 | void LLPanelFace::getState() | 384 | void LLPanelFace::getState() |
382 | { | 385 | { |
383 | LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); | 386 | LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject(); |
387 | LLCalc* calcp = LLCalc::getInstance(); | ||
384 | 388 | ||
385 | if( objectp | 389 | if( objectp |
386 | && objectp->getPCode() == LL_PCODE_VOLUME | 390 | && objectp->getPCode() == LL_PCODE_VOLUME |
@@ -754,6 +758,16 @@ void LLPanelFace::getState() | |||
754 | childSetEnabled("button apply",enabled); | 758 | childSetEnabled("button apply",enabled); |
755 | } | 759 | } |
756 | } | 760 | } |
761 | childSetEnabled("texture_math_constants",true); | ||
762 | |||
763 | // Set variable values for numeric expressions | ||
764 | calcp->setVar(LLCalc::TEX_U_SCALE, childGetValue("TexScaleU").asReal()); | ||
765 | calcp->setVar(LLCalc::TEX_V_SCALE, childGetValue("TexScaleV").asReal()); | ||
766 | calcp->setVar(LLCalc::TEX_U_OFFSET, childGetValue("TexOffsetU").asReal()); | ||
767 | calcp->setVar(LLCalc::TEX_V_OFFSET, childGetValue("TexOffsetV").asReal()); | ||
768 | calcp->setVar(LLCalc::TEX_ROTATION, childGetValue("TexRot").asReal()); | ||
769 | calcp->setVar(LLCalc::TEX_TRANSPARENCY, childGetValue("ColorTrans").asReal()); | ||
770 | calcp->setVar(LLCalc::TEX_GLOW, childGetValue("glow").asReal()); | ||
757 | } | 771 | } |
758 | else | 772 | else |
759 | { | 773 | { |
@@ -787,6 +801,17 @@ void LLPanelFace::getState() | |||
787 | 801 | ||
788 | childSetEnabled("button align",FALSE); | 802 | childSetEnabled("button align",FALSE); |
789 | childSetEnabled("button apply",FALSE); | 803 | childSetEnabled("button apply",FALSE); |
804 | |||
805 | childSetEnabled("texture_math_constants",false); | ||
806 | |||
807 | // Set variable values for numeric expressions | ||
808 | calcp->clearVar(LLCalc::TEX_U_SCALE); | ||
809 | calcp->clearVar(LLCalc::TEX_V_SCALE); | ||
810 | calcp->clearVar(LLCalc::TEX_U_OFFSET); | ||
811 | calcp->clearVar(LLCalc::TEX_V_OFFSET); | ||
812 | calcp->clearVar(LLCalc::TEX_ROTATION); | ||
813 | calcp->clearVar(LLCalc::TEX_TRANSPARENCY); | ||
814 | calcp->clearVar(LLCalc::TEX_GLOW); | ||
790 | } | 815 | } |
791 | } | 816 | } |
792 | 817 | ||
@@ -969,3 +994,9 @@ void LLPanelFace::onClickAutoFix(void* userdata) | |||
969 | LLPanelFaceSendFunctor sendfunc; | 994 | LLPanelFaceSendFunctor sendfunc; |
970 | LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc); | 995 | LLSelectMgr::getInstance()->getSelection()->applyToObjects(&sendfunc); |
971 | } | 996 | } |
997 | |||
998 | // static | ||
999 | void LLPanelFace::onClickTextureConstants(void *) | ||
1000 | { | ||
1001 | gViewerWindow->alertXml("ClickTextureConstants"); | ||
1002 | } \ No newline at end of file | ||
diff --git a/linden/indra/newview/llpanelface.h b/linden/indra/newview/llpanelface.h index 230772b..b977583 100644 --- a/linden/indra/newview/llpanelface.h +++ b/linden/indra/newview/llpanelface.h | |||
@@ -88,6 +88,7 @@ protected: | |||
88 | 88 | ||
89 | static void onClickApply(void*); | 89 | static void onClickApply(void*); |
90 | static void onClickAutoFix(void*); | 90 | static void onClickAutoFix(void*); |
91 | static void onClickTextureConstants(void *); | ||
91 | static F32 valueGlow(LLViewerObject* object, S32 face); | 92 | static F32 valueGlow(LLViewerObject* object, S32 face); |
92 | }; | 93 | }; |
93 | 94 | ||
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp index cc9d969..5cd8690 100644 --- a/linden/indra/newview/llpanelobject.cpp +++ b/linden/indra/newview/llpanelobject.cpp | |||
@@ -46,6 +46,7 @@ | |||
46 | // project includes | 46 | // project includes |
47 | #include "llagent.h" | 47 | #include "llagent.h" |
48 | #include "llbutton.h" | 48 | #include "llbutton.h" |
49 | #include "llcalc.h" | ||
49 | #include "llcheckboxctrl.h" | 50 | #include "llcheckboxctrl.h" |
50 | #include "llcolorswatch.h" | 51 | #include "llcolorswatch.h" |
51 | #include "llcombobox.h" | 52 | #include "llcombobox.h" |
@@ -109,6 +110,9 @@ BOOL LLPanelObject::postBuild() | |||
109 | // Top | 110 | // Top |
110 | //-------------------------------------------------------- | 111 | //-------------------------------------------------------- |
111 | 112 | ||
113 | // Build constant tipsheet | ||
114 | childSetAction("build_math_constants",onClickBuildConstants,this); | ||
115 | |||
112 | // Lock checkbox | 116 | // Lock checkbox |
113 | mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); | 117 | mCheckLock = getChild<LLCheckBoxCtrl>("checkbox locked"); |
114 | childSetCommitCallback("checkbox locked",onCommitLock,this); | 118 | childSetCommitCallback("checkbox locked",onCommitLock,this); |
@@ -341,6 +345,8 @@ void LLPanelObject::getState( ) | |||
341 | } | 345 | } |
342 | } | 346 | } |
343 | 347 | ||
348 | LLCalc* calcp = LLCalc::getInstance(); | ||
349 | |||
344 | LLVOVolume *volobjp = NULL; | 350 | LLVOVolume *volobjp = NULL; |
345 | if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) | 351 | if ( objectp && (objectp->getPCode() == LL_PCODE_VOLUME)) |
346 | { | 352 | { |
@@ -357,6 +363,7 @@ void LLPanelObject::getState( ) | |||
357 | 363 | ||
358 | // Disable all text input fields | 364 | // Disable all text input fields |
359 | clearCtrls(); | 365 | clearCtrls(); |
366 | calcp->clearAllVariables(); | ||
360 | return; | 367 | return; |
361 | } | 368 | } |
362 | 369 | ||
@@ -365,6 +372,7 @@ void LLPanelObject::getState( ) | |||
365 | BOOL enable_scale = objectp->permMove() && objectp->permModify(); | 372 | BOOL enable_scale = objectp->permMove() && objectp->permModify(); |
366 | BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); | 373 | BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts")); |
367 | 374 | ||
375 | childSetEnabled("build_math_constants",true); | ||
368 | LLVector3 vec; | 376 | LLVector3 vec; |
369 | if (enable_move) | 377 | if (enable_move) |
370 | { | 378 | { |
@@ -372,12 +380,18 @@ void LLPanelObject::getState( ) | |||
372 | mCtrlPosX->set( vec.mV[VX] ); | 380 | mCtrlPosX->set( vec.mV[VX] ); |
373 | mCtrlPosY->set( vec.mV[VY] ); | 381 | mCtrlPosY->set( vec.mV[VY] ); |
374 | mCtrlPosZ->set( vec.mV[VZ] ); | 382 | mCtrlPosZ->set( vec.mV[VZ] ); |
383 | calcp->setVar(LLCalc::X_POS, vec.mV[VX]); | ||
384 | calcp->setVar(LLCalc::Y_POS, vec.mV[VY]); | ||
385 | calcp->setVar(LLCalc::Z_POS, vec.mV[VZ]); | ||
375 | } | 386 | } |
376 | else | 387 | else |
377 | { | 388 | { |
378 | mCtrlPosX->clear(); | 389 | mCtrlPosX->clear(); |
379 | mCtrlPosY->clear(); | 390 | mCtrlPosY->clear(); |
380 | mCtrlPosZ->clear(); | 391 | mCtrlPosZ->clear(); |
392 | calcp->clearVar(LLCalc::X_POS); | ||
393 | calcp->clearVar(LLCalc::Y_POS); | ||
394 | calcp->clearVar(LLCalc::Z_POS); | ||
381 | } | 395 | } |
382 | 396 | ||
383 | 397 | ||
@@ -392,12 +406,18 @@ void LLPanelObject::getState( ) | |||
392 | mCtrlScaleX->set( vec.mV[VX] ); | 406 | mCtrlScaleX->set( vec.mV[VX] ); |
393 | mCtrlScaleY->set( vec.mV[VY] ); | 407 | mCtrlScaleY->set( vec.mV[VY] ); |
394 | mCtrlScaleZ->set( vec.mV[VZ] ); | 408 | mCtrlScaleZ->set( vec.mV[VZ] ); |
409 | calcp->setVar(LLCalc::X_SCALE, vec.mV[VX]); | ||
410 | calcp->setVar(LLCalc::Y_SCALE, vec.mV[VY]); | ||
411 | calcp->setVar(LLCalc::Z_SCALE, vec.mV[VZ]); | ||
395 | } | 412 | } |
396 | else | 413 | else |
397 | { | 414 | { |
398 | mCtrlScaleX->clear(); | 415 | mCtrlScaleX->clear(); |
399 | mCtrlScaleY->clear(); | 416 | mCtrlScaleY->clear(); |
400 | mCtrlScaleZ->clear(); | 417 | mCtrlScaleZ->clear(); |
418 | calcp->setVar(LLCalc::X_SCALE, 0.f); | ||
419 | calcp->setVar(LLCalc::Y_SCALE, 0.f); | ||
420 | calcp->setVar(LLCalc::Z_SCALE, 0.f); | ||
401 | } | 421 | } |
402 | 422 | ||
403 | mLabelSize->setEnabled( enable_scale ); | 423 | mLabelSize->setEnabled( enable_scale ); |
@@ -417,12 +437,18 @@ void LLPanelObject::getState( ) | |||
417 | mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); | 437 | mCtrlRotX->set( mCurEulerDegrees.mV[VX] ); |
418 | mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); | 438 | mCtrlRotY->set( mCurEulerDegrees.mV[VY] ); |
419 | mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); | 439 | mCtrlRotZ->set( mCurEulerDegrees.mV[VZ] ); |
440 | calcp->setVar(LLCalc::X_ROT, mCurEulerDegrees.mV[VX]); | ||
441 | calcp->setVar(LLCalc::Y_ROT, mCurEulerDegrees.mV[VY]); | ||
442 | calcp->setVar(LLCalc::Z_ROT, mCurEulerDegrees.mV[VZ]); | ||
420 | } | 443 | } |
421 | else | 444 | else |
422 | { | 445 | { |
423 | mCtrlRotX->clear(); | 446 | mCtrlRotX->clear(); |
424 | mCtrlRotY->clear(); | 447 | mCtrlRotY->clear(); |
425 | mCtrlRotZ->clear(); | 448 | mCtrlRotZ->clear(); |
449 | calcp->clearVar(LLCalc::X_ROT); | ||
450 | calcp->clearVar(LLCalc::Y_ROT); | ||
451 | calcp->clearVar(LLCalc::Z_ROT); | ||
426 | } | 452 | } |
427 | 453 | ||
428 | mLabelRotation->setEnabled( enable_rotate ); | 454 | mLabelRotation->setEnabled( enable_rotate ); |
@@ -678,8 +704,9 @@ void LLPanelObject::getState( ) | |||
678 | F32 end_t = volume_params.getEndT(); | 704 | F32 end_t = volume_params.getEndT(); |
679 | 705 | ||
680 | // Hollowness | 706 | // Hollowness |
681 | F32 hollow = volume_params.getHollow(); | 707 | F32 hollow = 100.f * volume_params.getHollow(); |
682 | mSpinHollow->set( 100.f * hollow ); | 708 | mSpinHollow->set( hollow ); |
709 | calcp->setVar(LLCalc::HOLLOW, hollow); | ||
683 | 710 | ||
684 | // All hollow objects allow a shape to be selected. | 711 | // All hollow objects allow a shape to be selected. |
685 | if (hollow > 0.f) | 712 | if (hollow > 0.f) |
@@ -732,6 +759,10 @@ void LLPanelObject::getState( ) | |||
732 | mSpinCutEnd ->set( cut_end ); | 759 | mSpinCutEnd ->set( cut_end ); |
733 | mCtrlPathBegin ->set( adv_cut_begin ); | 760 | mCtrlPathBegin ->set( adv_cut_begin ); |
734 | mCtrlPathEnd ->set( adv_cut_end ); | 761 | mCtrlPathEnd ->set( adv_cut_end ); |
762 | calcp->setVar(LLCalc::CUT_BEGIN, cut_begin); | ||
763 | calcp->setVar(LLCalc::CUT_END, cut_end); | ||
764 | calcp->setVar(LLCalc::PATH_BEGIN, adv_cut_begin); | ||
765 | calcp->setVar(LLCalc::PATH_END, adv_cut_end); | ||
735 | 766 | ||
736 | // Twist | 767 | // Twist |
737 | F32 twist = volume_params.getTwist(); | 768 | F32 twist = volume_params.getTwist(); |
@@ -750,18 +781,24 @@ void LLPanelObject::getState( ) | |||
750 | 781 | ||
751 | mSpinTwist ->set( twist ); | 782 | mSpinTwist ->set( twist ); |
752 | mSpinTwistBegin ->set( twist_begin ); | 783 | mSpinTwistBegin ->set( twist_begin ); |
784 | calcp->setVar(LLCalc::TWIST_END, twist); | ||
785 | calcp->setVar(LLCalc::TWIST_BEGIN, twist_begin); | ||
753 | 786 | ||
754 | // Shear | 787 | // Shear |
755 | F32 shear_x = volume_params.getShearX(); | 788 | F32 shear_x = volume_params.getShearX(); |
756 | F32 shear_y = volume_params.getShearY(); | 789 | F32 shear_y = volume_params.getShearY(); |
757 | mSpinShearX->set( shear_x ); | 790 | mSpinShearX->set( shear_x ); |
758 | mSpinShearY->set( shear_y ); | 791 | mSpinShearY->set( shear_y ); |
792 | calcp->setVar(LLCalc::X_SHEAR, shear_x); | ||
793 | calcp->setVar(LLCalc::Y_SHEAR, shear_y); | ||
759 | 794 | ||
760 | // Taper | 795 | // Taper |
761 | F32 taper_x = volume_params.getTaperX(); | 796 | F32 taper_x = volume_params.getTaperX(); |
762 | F32 taper_y = volume_params.getTaperY(); | 797 | F32 taper_y = volume_params.getTaperY(); |
763 | mSpinTaperX->set( taper_x ); | 798 | mSpinTaperX->set( taper_x ); |
764 | mSpinTaperY->set( taper_y ); | 799 | mSpinTaperY->set( taper_y ); |
800 | calcp->setVar(LLCalc::X_TAPER, taper_x); | ||
801 | calcp->setVar(LLCalc::Y_TAPER, taper_y); | ||
765 | 802 | ||
766 | // Radius offset. | 803 | // Radius offset. |
767 | F32 radius_offset = volume_params.getRadiusOffset(); | 804 | F32 radius_offset = volume_params.getRadiusOffset(); |
@@ -791,10 +828,12 @@ void LLPanelObject::getState( ) | |||
791 | } | 828 | } |
792 | } | 829 | } |
793 | mSpinRadiusOffset->set( radius_offset); | 830 | mSpinRadiusOffset->set( radius_offset); |
831 | calcp->setVar(LLCalc::RADIUS_OFFSET, radius_offset); | ||
794 | 832 | ||
795 | // Revolutions | 833 | // Revolutions |
796 | F32 revolutions = volume_params.getRevolutions(); | 834 | F32 revolutions = volume_params.getRevolutions(); |
797 | mSpinRevolutions->set( revolutions ); | 835 | mSpinRevolutions->set( revolutions ); |
836 | calcp->setVar(LLCalc::REVOLUTIONS, revolutions); | ||
798 | 837 | ||
799 | // Skew | 838 | // Skew |
800 | F32 skew = volume_params.getSkew(); | 839 | F32 skew = volume_params.getSkew(); |
@@ -819,6 +858,7 @@ void LLPanelObject::getState( ) | |||
819 | } | 858 | } |
820 | } | 859 | } |
821 | mSpinSkew->set( skew ); | 860 | mSpinSkew->set( skew ); |
861 | calcp->setVar(LLCalc::SKEW, skew); | ||
822 | } | 862 | } |
823 | 863 | ||
824 | // Compute control visibility, label names, and twist range. | 864 | // Compute control visibility, label names, and twist range. |
@@ -924,6 +964,8 @@ void LLPanelObject::getState( ) | |||
924 | case MI_RING: | 964 | case MI_RING: |
925 | mSpinScaleX->set( scale_x ); | 965 | mSpinScaleX->set( scale_x ); |
926 | mSpinScaleY->set( scale_y ); | 966 | mSpinScaleY->set( scale_y ); |
967 | calcp->setVar(LLCalc::X_HOLE, scale_x); | ||
968 | calcp->setVar(LLCalc::Y_HOLE, scale_y); | ||
927 | mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); | 969 | mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); |
928 | mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); | 970 | mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); |
929 | mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); | 971 | mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); |
@@ -934,6 +976,8 @@ void LLPanelObject::getState( ) | |||
934 | { | 976 | { |
935 | mSpinScaleX->set( 1.f - scale_x ); | 977 | mSpinScaleX->set( 1.f - scale_x ); |
936 | mSpinScaleY->set( 1.f - scale_y ); | 978 | mSpinScaleY->set( 1.f - scale_y ); |
979 | calcp->setVar(LLCalc::X_HOLE, 1.f - scale_x); | ||
980 | calcp->setVar(LLCalc::Y_HOLE, 1.f - scale_y); | ||
937 | mSpinScaleX->setMinValue(-1.f); | 981 | mSpinScaleX->setMinValue(-1.f); |
938 | mSpinScaleX->setMaxValue(1.f); | 982 | mSpinScaleX->setMaxValue(1.f); |
939 | mSpinScaleY->setMinValue(-1.f); | 983 | mSpinScaleY->setMinValue(-1.f); |
@@ -1148,7 +1192,7 @@ void LLPanelObject::getState( ) | |||
1148 | mSculptTextureRevert = LLUUID::null; | 1192 | mSculptTextureRevert = LLUUID::null; |
1149 | } | 1193 | } |
1150 | 1194 | ||
1151 | 1195 | ||
1152 | //---------------------------------------------------------------------------- | 1196 | //---------------------------------------------------------------------------- |
1153 | 1197 | ||
1154 | mObject = objectp; | 1198 | mObject = objectp; |
@@ -1913,6 +1957,8 @@ void LLPanelObject::clearCtrls() | |||
1913 | childSetEnabled( "advanced_cut", FALSE ); | 1957 | childSetEnabled( "advanced_cut", FALSE ); |
1914 | childSetEnabled( "advanced_dimple", FALSE ); | 1958 | childSetEnabled( "advanced_dimple", FALSE ); |
1915 | childSetVisible("advanced_slice", FALSE); | 1959 | childSetVisible("advanced_slice", FALSE); |
1960 | |||
1961 | childSetEnabled("build_math_constants",false); | ||
1916 | } | 1962 | } |
1917 | 1963 | ||
1918 | // | 1964 | // |
@@ -1954,6 +2000,9 @@ void LLPanelObject::onCommitRotation( LLUICtrl* ctrl, void* userdata ) | |||
1954 | LLPanelObject* self = (LLPanelObject*) userdata; | 2000 | LLPanelObject* self = (LLPanelObject*) userdata; |
1955 | BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; | 2001 | BOOL btn_down = ((LLSpinCtrl*)ctrl)->isMouseHeldDown() ; |
1956 | self->sendRotation(btn_down); | 2002 | self->sendRotation(btn_down); |
2003 | |||
2004 | // Needed to ensure all rotations are shown consistently in range | ||
2005 | self->refresh(); | ||
1957 | } | 2006 | } |
1958 | 2007 | ||
1959 | // static | 2008 | // static |
@@ -2048,3 +2097,9 @@ void LLPanelObject::onCommitSculptType(LLUICtrl *ctrl, void* userdata) | |||
2048 | 2097 | ||
2049 | self->sendSculpt(); | 2098 | self->sendSculpt(); |
2050 | } | 2099 | } |
2100 | |||
2101 | // static | ||
2102 | void LLPanelObject::onClickBuildConstants(void *) | ||
2103 | { | ||
2104 | gViewerWindow->alertXml("ClickBuildConstants"); | ||
2105 | } | ||
diff --git a/linden/indra/newview/llpanelobject.h b/linden/indra/newview/llpanelobject.h index afdfd30..b72289c 100644 --- a/linden/indra/newview/llpanelobject.h +++ b/linden/indra/newview/llpanelobject.h | |||
@@ -83,6 +83,7 @@ public: | |||
83 | static BOOL onDropSculpt( LLUICtrl* ctrl, LLInventoryItem* item, void* ud); | 83 | static BOOL onDropSculpt( LLUICtrl* ctrl, LLInventoryItem* item, void* ud); |
84 | static void onCommitSculptType( LLUICtrl *ctrl, void* userdata); | 84 | static void onCommitSculptType( LLUICtrl *ctrl, void* userdata); |
85 | 85 | ||
86 | static void onClickBuildConstants(void *); | ||
86 | 87 | ||
87 | protected: | 88 | protected: |
88 | void getState(); | 89 | void getState(); |
diff --git a/linden/indra/newview/llvieweraudio.cpp b/linden/indra/newview/llvieweraudio.cpp index 122a0bc..bc25649 100644 --- a/linden/indra/newview/llvieweraudio.cpp +++ b/linden/indra/newview/llvieweraudio.cpp | |||
@@ -62,7 +62,7 @@ void init_audio() | |||
62 | 62 | ||
63 | // load up our initial set of sounds we'll want so they're in memory and ready to be played | 63 | // load up our initial set of sounds we'll want so they're in memory and ready to be played |
64 | 64 | ||
65 | BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); | 65 | bool mute_audio = gSavedSettings.getBOOL("MuteAudio"); |
66 | 66 | ||
67 | if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload")) | 67 | if (!mute_audio && FALSE == gSavedSettings.getBOOL("NoPreload")) |
68 | { | 68 | { |
@@ -114,7 +114,9 @@ void init_audio() | |||
114 | void audio_update_volume(bool force_update) | 114 | void audio_update_volume(bool force_update) |
115 | { | 115 | { |
116 | F32 master_volume = gSavedSettings.getF32("AudioLevelMaster"); | 116 | F32 master_volume = gSavedSettings.getF32("AudioLevelMaster"); |
117 | BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); | 117 | bool wind_muted = gSavedSettings.getBOOL("MuteWind"); |
118 | bool mute_audio = gSavedSettings.getBOOL("MuteAudio"); | ||
119 | |||
118 | if (!gViewerWindow->getActive() && (gSavedSettings.getBOOL("MuteWhenMinimized"))) | 120 | if (!gViewerWindow->getActive() && (gSavedSettings.getBOOL("MuteWhenMinimized"))) |
119 | { | 121 | { |
120 | mute_audio = TRUE; | 122 | mute_audio = TRUE; |
@@ -129,9 +131,9 @@ void audio_update_volume(bool force_update) | |||
129 | gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler")); | 131 | gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler")); |
130 | gAudiop->setDistanceFactor(gSavedSettings.getF32("AudioLevelDistance")); | 132 | gAudiop->setDistanceFactor(gSavedSettings.getF32("AudioLevelDistance")); |
131 | gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); | 133 | gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); |
132 | #ifdef kAUDIO_ENABLE_WIND | 134 | |
135 | if(wind_muted == false) | ||
133 | gAudiop->enableWind(!mute_audio); | 136 | gAudiop->enableWind(!mute_audio); |
134 | #endif | ||
135 | 137 | ||
136 | gAudiop->setMuted(mute_audio); | 138 | gAudiop->setMuted(mute_audio); |
137 | 139 | ||
@@ -197,46 +199,50 @@ void audio_update_listener() | |||
197 | 199 | ||
198 | void audio_update_wind(bool force_update) | 200 | void audio_update_wind(bool force_update) |
199 | { | 201 | { |
200 | #ifdef kAUDIO_ENABLE_WIND | 202 | bool wind_muted = gSavedSettings.getBOOL("MuteWind"); |
201 | // | 203 | bool mute_audio = gSavedSettings.getBOOL("MuteAudio"); |
202 | // Extract height above water to modulate filter by whether above/below water | 204 | |
203 | // | 205 | if(!mute_audio && !wind_muted) |
204 | LLViewerRegion* region = gAgent.getRegion(); | ||
205 | if (region) | ||
206 | { | 206 | { |
207 | static F32 last_camera_water_height = -1000.f; | ||
208 | LLVector3 camera_pos = gAgent.getCameraPositionAgent(); | ||
209 | F32 camera_water_height = camera_pos.mV[VZ] - region->getWaterHeight(); | ||
210 | |||
211 | // | 207 | // |
212 | // Don't update rolloff factor unless water surface has been crossed | 208 | // Extract height above water to modulate filter by whether above/below water |
213 | // | 209 | // |
214 | if (force_update || (last_camera_water_height * camera_water_height) < 0.f) | 210 | LLViewerRegion* region = gAgent.getRegion(); |
211 | if (region) | ||
215 | { | 212 | { |
216 | if (camera_water_height < 0.f) | 213 | static F32 last_camera_water_height = -1000.f; |
217 | { | 214 | LLVector3 camera_pos = gAgent.getCameraPositionAgent(); |
218 | gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff") * LL_ROLLOFF_MULTIPLIER_UNDER_WATER); | 215 | F32 camera_water_height = camera_pos.mV[VZ] - region->getWaterHeight(); |
219 | } | 216 | |
220 | else | 217 | // |
218 | // Don't update rolloff factor unless water surface has been crossed | ||
219 | // | ||
220 | if (force_update || (last_camera_water_height * camera_water_height) < 0.f) | ||
221 | { | 221 | { |
222 | gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); | 222 | if (camera_water_height < 0.f) |
223 | { | ||
224 | gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff") * LL_ROLLOFF_MULTIPLIER_UNDER_WATER); | ||
225 | } | ||
226 | else | ||
227 | { | ||
228 | gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff")); | ||
229 | } | ||
223 | } | 230 | } |
231 | // this line rotates the wind vector to be listener (agent) relative | ||
232 | // unfortunately we have to pre-translate to undo the translation that | ||
233 | // occurs in the transform call | ||
234 | gRelativeWindVec = gAgent.getFrameAgent().rotateToLocal(gWindVec - gAgent.getVelocity()); | ||
235 | |||
236 | // don't use the setter setMaxWindGain() because we don't | ||
237 | // want to screw up the fade-in on startup by setting actual source gain | ||
238 | // outside the fade-in. | ||
239 | F32 ambient_volume = gSavedSettings.getF32("AudioLevelAmbient"); | ||
240 | gAudiop->mMaxWindGain = gSavedSettings.getBOOL("MuteAmbient") | ||
241 | ? 0.f | ||
242 | : ambient_volume * ambient_volume; | ||
243 | |||
244 | last_camera_water_height = camera_water_height; | ||
245 | gAudiop->updateWind(gRelativeWindVec, camera_water_height); | ||
224 | } | 246 | } |
225 | // this line rotates the wind vector to be listener (agent) relative | ||
226 | // unfortunately we have to pre-translate to undo the translation that | ||
227 | // occurs in the transform call | ||
228 | gRelativeWindVec = gAgent.getFrameAgent().rotateToLocal(gWindVec - gAgent.getVelocity()); | ||
229 | |||
230 | // don't use the setter setMaxWindGain() because we don't | ||
231 | // want to screw up the fade-in on startup by setting actual source gain | ||
232 | // outside the fade-in. | ||
233 | F32 ambient_volume = gSavedSettings.getF32("AudioLevelAmbient"); | ||
234 | gAudiop->mMaxWindGain = gSavedSettings.getBOOL("MuteAmbient") | ||
235 | ? 0.f | ||
236 | : ambient_volume * ambient_volume; | ||
237 | |||
238 | last_camera_water_height = camera_water_height; | ||
239 | gAudiop->updateWind(gRelativeWindVec, camera_water_height); | ||
240 | } | 247 | } |
241 | #endif | ||
242 | } | 248 | } |
diff --git a/linden/indra/newview/llvieweraudio.h b/linden/indra/newview/llvieweraudio.h index 6ab7c7f..b4a299c 100644 --- a/linden/indra/newview/llvieweraudio.h +++ b/linden/indra/newview/llvieweraudio.h | |||
@@ -32,8 +32,6 @@ | |||
32 | #ifndef LL_VIEWERAUDIO_H | 32 | #ifndef LL_VIEWERAUDIO_H |
33 | #define LL_VIEWERAUDIO_H | 33 | #define LL_VIEWERAUDIO_H |
34 | 34 | ||
35 | // comment out to turn off wind | ||
36 | #define kAUDIO_ENABLE_WIND | ||
37 | //#define kAUDIO_ENABLE_WATER 1 // comment out to turn off water | 35 | //#define kAUDIO_ENABLE_WATER 1 // comment out to turn off water |
38 | #define kAUDIO_NUM_BUFFERS 30 | 36 | #define kAUDIO_NUM_BUFFERS 30 |
39 | #define kAUDIO_NUM_SOURCES 30 | 37 | #define kAUDIO_NUM_SOURCES 30 |
diff --git a/linden/indra/newview/skins/default/xui/en-us/alerts.xml b/linden/indra/newview/skins/default/xui/en-us/alerts.xml index c2d4301..dc9b5ea 100644 --- a/linden/indra/newview/skins/default/xui/en-us/alerts.xml +++ b/linden/indra/newview/skins/default/xui/en-us/alerts.xml | |||
@@ -385,6 +385,73 @@ Go to the Second Life web site for more information on partnering? | |||
385 | Cancel | 385 | Cancel |
386 | </option> | 386 | </option> |
387 | </alert> | 387 | </alert> |
388 | <alert modal="true" name="ClickBuildConstants"> | ||
389 | <message name="message"> | ||
390 | The following constants are accepted in this tab: | ||
391 | |||
392 | XP -- X-axis position | ||
393 | YP -- Y-axis position | ||
394 | ZP -- Z-axis position | ||
395 | XS -- X-axis size | ||
396 | YS -- Y-axis size | ||
397 | ZS -- Z-axis size | ||
398 | XR -- X-axis rotation | ||
399 | YR -- Y-axis rotation | ||
400 | ZR -- Z-axis rotation | ||
401 | CB -- Path cut begin | ||
402 | CE -- Path cut end | ||
403 | HLW -- Hollow size | ||
404 | SKW -- Skew | ||
405 | PB -- Slice/Dimple/Profile cut begin | ||
406 | PE -- Slice/Dimple/Profile cut end | ||
407 | XSH -- X-axis top shear | ||
408 | YSH -- Y-axis top shear | ||
409 | XHL -- X-axis hole size | ||
410 | YHL -- Y-axis hole size | ||
411 | XTP -- X-axis taper | ||
412 | YTP -- Y-axis taper | ||
413 | ROF -- Radius offset | ||
414 | REV -- Revolutions | ||
415 | |||
416 | * -- Multiplication | ||
417 | \ -- Division | ||
418 | + -- Addition | ||
419 | - -- Subtraction | ||
420 | |||
421 | Examples: | ||
422 | |||
423 | * Enter 'ZP + 20' in the Z-axis position field | ||
424 | to move an object up 20 meters. | ||
425 | * Enter 'XS - YS' in the X-axis size field | ||
426 | to subtract the Y size from the X size. | ||
427 | </message> | ||
428 | </alert> | ||
429 | <alert modal="true" name="ClickTextureConstants"> | ||
430 | <message name="message"> | ||
431 | The following constants are accepted in this tab: | ||
432 | |||
433 | TSU -- Repeats per face (horizontal) | ||
434 | TSV -- Repeats per face (vertical) | ||
435 | TOU -- Offsets per face (horizontal) | ||
436 | TOV -- Offsets per face (vertical) | ||
437 | TRNS -- Transparency | ||
438 | TROT -- Texture rotation | ||
439 | GLOW -- Glow | ||
440 | |||
441 | * -- Multiplication | ||
442 | \ -- Division | ||
443 | + -- Addition | ||
444 | - -- Subtraction | ||
445 | |||
446 | Examples: | ||
447 | |||
448 | * Enter 'TSU * 4' in horizantal repeats field | ||
449 | to increase the amount of repeats by 4x. | ||
450 | * Enter 'TSV' in the horizontal repeats field | ||
451 | to make the horizontal and vertical | ||
452 | repeats match. | ||
453 | </message> | ||
454 | </alert> | ||
388 | <alert modal="true" name="ClickWebProfileHelpAvatar"> | 455 | <alert modal="true" name="ClickWebProfileHelpAvatar"> |
389 | <message name="message"> | 456 | <message name="message"> |
390 | If this Resident has set a web profile URL then you can: | 457 | If this Resident has set a web profile URL then you can: |
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml index 742da45..eb9b1c6 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_tools.xml | |||
@@ -587,7 +587,10 @@ | |||
587 | mouse_opaque="true" name="edit_object" v_pad="0" width="252"> | 587 | mouse_opaque="true" name="edit_object" v_pad="0" width="252"> |
588 | Edit object parameters: | 588 | Edit object parameters: |
589 | </text> | 589 | </text> |
590 | <check_box bottom_delta="-26" follows="left|top" font="SansSerifSmall" height="16" | 590 | <button bottom_delta="-10" follows="left|top" font="SansSerif" halign="center" |
591 | height="22" label="?" label_selected="?" right="-8" tool_tip="Object math constants" | ||
592 | mouse_opaque="true" name="build_math_constants" scale_image="true" width="22" /> | ||
593 | <check_box bottom_delta="-16" follows="left|top" font="SansSerifSmall" height="16" | ||
591 | initial_value="false" label="Locked" left="8" mouse_opaque="true" | 594 | initial_value="false" label="Locked" left="8" mouse_opaque="true" |
592 | name="checkbox locked" | 595 | name="checkbox locked" |
593 | tool_tip="Prevents object from being moved or deleted. Frequently useful during building to avoid unintended edits." | 596 | tool_tip="Prevents object from being moved or deleted. Frequently useful during building to avoid unintended edits." |
@@ -614,15 +617,15 @@ | |||
614 | <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" | 617 | <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" |
615 | increment="0.01" initial_val="0" label="X" label_width="10" left="10" | 618 | increment="0.01" initial_val="0" label="X" label_width="10" left="10" |
616 | max_val="512" min_val="-256" mouse_opaque="true" name="Pos X" | 619 | max_val="512" min_val="-256" mouse_opaque="true" name="Pos X" |
617 | text_enabled_color="110, 15, 15, 255" width="87" /> | 620 | text_enabled_color="110, 15, 15, 255" width="96" /> |
618 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 621 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
619 | increment="0.01" initial_val="0" label="Y" label_width="10" left="10" | 622 | increment="0.01" initial_val="0" label="Y" label_width="10" left="10" |
620 | max_val="512" min_val="-256" mouse_opaque="true" name="Pos Y" | 623 | max_val="512" min_val="-256" mouse_opaque="true" name="Pos Y" |
621 | text_enabled_color="0, 100, 40, 255" width="87" /> | 624 | text_enabled_color="0, 100, 40, 255" width="96" /> |
622 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 625 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
623 | increment="0.01" initial_val="0" label="Z" label_width="10" left="10" | 626 | increment="0.01" initial_val="0" label="Z" label_width="10" left="10" |
624 | max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z" | 627 | max_val="4096" min_val="0" mouse_opaque="true" name="Pos Z" |
625 | text_enabled_color="0, 67, 132, 255" width="87" /> | 628 | text_enabled_color="0, 67, 132, 255" width="96" /> |
626 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 629 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
627 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | 630 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" |
628 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" | 631 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" |
@@ -632,15 +635,15 @@ | |||
632 | <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" | 635 | <spinner bottom_delta="-20" decimal_digits="3" follows="left|top" height="16" |
633 | increment="0.01" initial_val="0" label="X" label_width="10" left="10" | 636 | increment="0.01" initial_val="0" label="X" label_width="10" left="10" |
634 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale X" | 637 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale X" |
635 | text_enabled_color="1, 1, 1, 1" width="87" /> | 638 | text_enabled_color="1, 1, 1, 1" width="96" /> |
636 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 639 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
637 | increment="0.01" initial_val="0" label="Y" label_width="10" left="10" | 640 | increment="0.01" initial_val="0" label="Y" label_width="10" left="10" |
638 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Y" | 641 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Y" |
639 | text_enabled_color="1, 1, 1, 1" width="87" /> | 642 | text_enabled_color="1, 1, 1, 1" width="96" /> |
640 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" | 643 | <spinner bottom_delta="-18" decimal_digits="3" follows="left|top" height="16" |
641 | increment="0.01" initial_val="0" label="Z" label_width="10" left="10" | 644 | increment="0.01" initial_val="0" label="Z" label_width="10" left="10" |
642 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Z" | 645 | max_val="10" min_val="0.01" mouse_opaque="true" name="Scale Z" |
643 | text_enabled_color="1, 1, 1, 1" width="87" /> | 646 | text_enabled_color="1, 1, 1, 1" width="96" /> |
644 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 647 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
645 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | 648 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" |
646 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" | 649 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" |
@@ -650,15 +653,15 @@ | |||
650 | <spinner bottom_delta="-22" decimal_digits="2" follows="left|top" height="16" | 653 | <spinner bottom_delta="-22" decimal_digits="2" follows="left|top" height="16" |
651 | increment="1" initial_val="0" label="X" label_width="10" left="10" | 654 | increment="1" initial_val="0" label="X" label_width="10" left="10" |
652 | max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot X" | 655 | max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot X" |
653 | text_enabled_color="1, 1, 1, 1" width="87" /> | 656 | text_enabled_color="1, 1, 1, 1" width="96" /> |
654 | <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16" | 657 | <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16" |
655 | increment="1" initial_val="0" label="Y" label_width="10" left="10" | 658 | increment="1" initial_val="0" label="Y" label_width="10" left="10" |
656 | max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Y" | 659 | max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Y" |
657 | text_enabled_color="1, 1, 1, 1" width="87" /> | 660 | text_enabled_color="1, 1, 1, 1" width="96" /> |
658 | <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16" | 661 | <spinner bottom_delta="-18" decimal_digits="2" follows="left|top" height="16" |
659 | increment="1" initial_val="0" label="Z" label_width="10" left="10" | 662 | increment="1" initial_val="0" label="Z" label_width="10" left="10" |
660 | max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Z" | 663 | max_val="9999" min_val="-9999" mouse_opaque="true" name="Rot Z" |
661 | text_enabled_color="1, 1, 1, 1" width="87" /> | 664 | text_enabled_color="1, 1, 1, 1" width="96" /> |
662 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 665 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
663 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" | 666 | bottom_delta="-16" drop_shadow_visible="true" follows="left|top" |
664 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" | 667 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10" |
@@ -748,12 +751,12 @@ | |||
748 | Skew | 751 | Skew |
749 | </text> | 752 | </text> |
750 | <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16" | 753 | <spinner bottom_delta="-20" decimal_digits="1" follows="left|top" height="16" |
751 | increment="5" initial_val="0" left="121" max_val="95" min_val="0" | 754 | increment="5" initial_val="0" left="121" max_val="95" min_val="0" |
752 | mouse_opaque="true" name="Scale 1" width="68" /> | 755 | mouse_opaque="true" name="Scale 1" width="68" label=" " label_width="10"/> |
753 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" | 756 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" |
754 | increment="0.05" initial_val="0" left_delta="73" max_val="0.95" | 757 | increment="0.05" initial_val="0" left_delta="73" max_val="0.95" label_width="10" |
755 | min_val="-0.95" mouse_opaque="true" name="Skew" width="68" /> | 758 | min_val="-0.95" mouse_opaque="true" name="Skew" width="68" label=" " /> |
756 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 759 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
757 | bottom_delta="-15" drop_shadow_visible="true" follows="left|top" | 760 | bottom_delta="-15" drop_shadow_visible="true" follows="left|top" |
758 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121" | 761 | font="SansSerifSmall" h_pad="0" halign="left" height="10" left="121" |
759 | mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141"> | 762 | mouse_opaque="true" name="Hollow Shape" v_pad="0" width="141"> |
@@ -872,10 +875,10 @@ | |||
872 | </text> | 875 | </text> |
873 | <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16" | 876 | <spinner bottom_delta="-19" decimal_digits="3" follows="left|top" height="16" |
874 | increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1" | 877 | increment="0.05" initial_val="0" left="121" max_val="1" min_val="-1" |
875 | mouse_opaque="true" name="Radius Offset" width="68" /> | 878 | mouse_opaque="true" name="Radius Offset" width="68" label=" " label_width="10" /> |
876 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" | 879 | <spinner bottom_delta="0" decimal_digits="2" follows="left|top" height="16" |
877 | increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1" | 880 | increment="0.1" initial_val="1" left_delta="73" max_val="4" min_val="1" |
878 | mouse_opaque="true" name="Revolutions" width="68" /> | 881 | mouse_opaque="true" name="Revolutions" width="68" label=" " label_width="10" /> |
879 | <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true" | 882 | <texture_picker allow_no_texture="false" bottom="-211" can_apply_immediately="true" |
880 | default_image_name="Default" follows="left|top" height="141" | 883 | default_image_name="Default" follows="left|top" height="141" |
881 | label="Sculpt Texture" left="121" mouse_opaque="true" | 884 | label="Sculpt Texture" left="121" mouse_opaque="true" |
@@ -1018,7 +1021,7 @@ | |||
1018 | </text> | 1021 | </text> |
1019 | <spinner bottom_delta="-20" decimal_digits="0" follows="left|top" height="16" | 1022 | <spinner bottom_delta="-20" decimal_digits="0" follows="left|top" height="16" |
1020 | increment="2" initial_val="0" left="180" max_val="100" min_val="0" | 1023 | increment="2" initial_val="0" left="180" max_val="100" min_val="0" |
1021 | mouse_opaque="true" name="ColorTrans" width="80" /> | 1024 | mouse_opaque="true" name="ColorTrans" width="58" /> |
1022 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" | 1025 | <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" |
1023 | bottom_delta="-12" drop_shadow_visible="true" follows="left|top" | 1026 | bottom_delta="-12" drop_shadow_visible="true" follows="left|top" |
1024 | font="SansSerifSmall" h_pad="0" halign="left" height="10" | 1027 | font="SansSerifSmall" h_pad="0" halign="left" height="10" |
@@ -1027,7 +1030,7 @@ | |||
1027 | </text> | 1030 | </text> |
1028 | <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" | 1031 | <spinner bottom_delta="-20" decimal_digits="2" follows="left|top" height="16" |
1029 | increment="0.1" initial_val="0" left="180" max_val="1" | 1032 | increment="0.1" initial_val="0" left="180" max_val="1" |
1030 | min_val="0" mouse_opaque="true" name="glow" width="80" /> | 1033 | min_val="0" mouse_opaque="true" name="glow" width="58" /> |
1031 | <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16" | 1034 | <check_box bottom_delta="-23" follows="left|top" font="SansSerifSmall" height="16" |
1032 | initial_value="false" label="Full Bright" left="180" mouse_opaque="true" | 1035 | initial_value="false" label="Full Bright" left="180" mouse_opaque="true" |
1033 | name="checkbox fullbright" width="81" /> | 1036 | name="checkbox fullbright" width="81" /> |
@@ -1201,6 +1204,9 @@ | |||
1201 | <button bottom="-360" follows="left|top" font="SansSerifSmall" halign="center" | 1204 | <button bottom="-360" follows="left|top" font="SansSerifSmall" halign="center" |
1202 | height="16" label="Align" label_selected="Align" left="112" | 1205 | height="16" label="Align" label_selected="Align" left="112" |
1203 | mouse_opaque="true" name="button align" scale_image="TRUE" width="68" /> | 1206 | mouse_opaque="true" name="button align" scale_image="TRUE" width="68" /> |
1207 | <button bottom="-162" follows="left|top" font="SansSerif" halign="center" | ||
1208 | height="22" label="?" label_selected="?" right="-8" tool_tip="Texture math constants" | ||
1209 | mouse_opaque="true" name="texture_math_constants" scale_image="true" width="24" /> | ||
1204 | </panel> | 1210 | </panel> |
1205 | <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" | 1211 | <panel border="true" bottom="-383" follows="left|top|right|bottom" height="367" |
1206 | label="Content" left="1" mouse_opaque="false" name="Contents" width="270"> | 1212 | label="Content" left="1" mouse_opaque="false" name="Contents" width="270"> |
diff --git a/linden/indra/newview/skins/default/xui/en-us/strings.xml b/linden/indra/newview/skins/default/xui/en-us/strings.xml index e8c341e..dd73f20 100644 --- a/linden/indra/newview/skins/default/xui/en-us/strings.xml +++ b/linden/indra/newview/skins/default/xui/en-us/strings.xml | |||
@@ -1,180 +1,180 @@ | |||
1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> | 1 | <?xml version="1.0" encoding="utf-8" standalone="yes" ?> |
2 | <!-- This file contains strings that used to be hardcoded in the source. | 2 | <!-- This file contains strings that used to be hardcoded in the source. |
3 | It is only for those strings which don't belong in a floater. | 3 | It is only for those strings which don't belong in a floater. |
4 | For example, the strings used in avatar chat bubbles, and strings | 4 | For example, the strings used in avatar chat bubbles, and strings |
5 | that are returned from one component and may appear in many places--> | 5 | that are returned from one component and may appear in many places--> |
6 | <strings> | 6 | <strings> |
7 | 7 | ||
8 | <!-- Login --> | 8 | <!-- Login --> |
9 | <string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string> | 9 | <string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string> |
10 | <string name="LoginAuthenticating">Authenticating</string> | 10 | <string name="LoginAuthenticating">Authenticating</string> |
11 | <string name="LoginMaintenance">Performing account maintenance...</string> | 11 | <string name="LoginMaintenance">Performing account maintenance...</string> |
12 | <string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string> | 12 | <string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string> |
13 | <string name="LoginPrecaching">Loading world...</string> | 13 | <string name="LoginPrecaching">Loading world...</string> |
14 | <string name="LoginInitializingBrowser">Initializing embedded web browser...</string> | 14 | <string name="LoginInitializingBrowser">Initializing embedded web browser...</string> |
15 | <string name="LoginInitializingMultimedia">Initializing multimedia...</string> | 15 | <string name="LoginInitializingMultimedia">Initializing multimedia...</string> |
16 | <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string> | 16 | <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string> |
17 | <string name="LoginProcessingResponse">Processing Response...</string> | 17 | <string name="LoginProcessingResponse">Processing Response...</string> |
18 | <string name="LoginInitializingWorld">Initializing World...</string> | 18 | <string name="LoginInitializingWorld">Initializing World...</string> |
19 | <string name="LoginDecodingImages">Decoding images...</string> | 19 | <string name="LoginDecodingImages">Decoding images...</string> |
20 | <string name="LoginInitializingQuicktime">Initializing QuickTime...</string> | 20 | <string name="LoginInitializingQuicktime">Initializing QuickTime...</string> |
21 | <string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string> | 21 | <string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string> |
22 | <string name="LoginQuicktimeOK">QuickTime initialized successfully.</string> | 22 | <string name="LoginQuicktimeOK">QuickTime initialized successfully.</string> |
23 | <string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string> | 23 | <string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string> |
24 | <string name="LoginConnectingToRegion">Connecting to region...</string> | 24 | <string name="LoginConnectingToRegion">Connecting to region...</string> |
25 | <string name="LoginDownloadingClothing">Downloading clothing...</string> | 25 | <string name="LoginDownloadingClothing">Downloading clothing...</string> |
26 | <string name="LoginFailedNoNetwork">Network Error: Could not establish connection, please check your network connection.</string> | 26 | <string name="LoginFailedNoNetwork">Network Error: Could not establish connection, please check your network connection.</string> |
27 | 27 | ||
28 | 28 | ||
29 | <!-- Disconnection --> | 29 | <!-- Disconnection --> |
30 | <string name="AgentLostConnection">This region may be experiencing trouble. Please check your connection to the Internet.</string> | 30 | <string name="AgentLostConnection">This region may be experiencing trouble. Please check your connection to the Internet.</string> |
31 | 31 | ||
32 | 32 | ||
33 | <!-- Tooltip, llhoverview.cpp --> | 33 | <!-- Tooltip, llhoverview.cpp --> |
34 | <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar --> | 34 | <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar --> |
35 | <string name="TooltipNoName">(no name)</string> <!-- No name on an object --> | 35 | <string name="TooltipNoName">(no name)</string> <!-- No name on an object --> |
36 | <string name="TooltipOwner">Owner:</string> <!-- Owner name follows --> | 36 | <string name="TooltipOwner">Owner:</string> <!-- Owner name follows --> |
37 | <string name="TooltipPublic">Public</string> <!-- Public permissions on an object --> | 37 | <string name="TooltipPublic">Public</string> <!-- Public permissions on an object --> |
38 | <string name="TooltipIsGroup">(Group)</string> <!-- The name before this text is that of a group --> | 38 | <string name="TooltipIsGroup">(Group)</string> <!-- The name before this text is that of a group --> |
39 | <string name="TooltipFlagScript">Script</string> | 39 | <string name="TooltipFlagScript">Script</string> |
40 | <string name="TooltipFlagPhysics">Physics</string> | 40 | <string name="TooltipFlagPhysics">Physics</string> |
41 | <string name="TooltipFlagTouch">Touch</string> | 41 | <string name="TooltipFlagTouch">Touch</string> |
42 | <string name="TooltipFlagL$">L$</string> | 42 | <string name="TooltipFlagL$">L$</string> |
43 | <string name="TooltipFlagDropInventory">Drop Inventory</string> | 43 | <string name="TooltipFlagDropInventory">Drop Inventory</string> |
44 | <string name="TooltipFlagPhantom">Phantom</string> | 44 | <string name="TooltipFlagPhantom">Phantom</string> |
45 | <string name="TooltipFlagTemporary">Temporary</string> | 45 | <string name="TooltipFlagTemporary">Temporary</string> |
46 | <string name="TooltipFlagRightClickMenu">(Right-click for menu)</string> | 46 | <string name="TooltipFlagRightClickMenu">(Right-click for menu)</string> |
47 | <string name="TooltipFreeToCopy">Free to copy</string> | 47 | <string name="TooltipFreeToCopy">Free to copy</string> |
48 | <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version --> | 48 | <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version --> |
49 | <string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) --> | 49 | <string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) --> |
50 | <string name="TooltipFlagGroupBuild">Group Build</string> | 50 | <string name="TooltipFlagGroupBuild">Group Build</string> |
51 | <string name="TooltipFlagNoBuild">No Build</string> | 51 | <string name="TooltipFlagNoBuild">No Build</string> |
52 | <string name="TooltipFlagNoEdit">Group Build</string> | 52 | <string name="TooltipFlagNoEdit">Group Build</string> |
53 | <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area --> | 53 | <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area --> |
54 | <string name="TooltipFlagNoFly">No Fly</string> | 54 | <string name="TooltipFlagNoFly">No Fly</string> |
55 | <string name="TooltipFlagGroupScripts">Group Scripts</string> | 55 | <string name="TooltipFlagGroupScripts">Group Scripts</string> |
56 | <string name="TooltipFlagNoScripts">No Scripts</string> | 56 | <string name="TooltipFlagNoScripts">No Scripts</string> |
57 | <string name="TooltipLand">Land:</string> | 57 | <string name="TooltipLand">Land:</string> |
58 | <string name="TooltipMustSingleDrop">Only a single item can be dragged here</string> | 58 | <string name="TooltipMustSingleDrop">Only a single item can be dragged here</string> |
59 | 59 | ||
60 | 60 | ||
61 | <!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. --> | 61 | <!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. --> |
62 | <string name="RetrievingData">Retrieving...</string> | 62 | <string name="RetrievingData">Retrieving...</string> |
63 | 63 | ||
64 | <string name="ReleaseNotes">Release Notes</string> | 64 | <string name="ReleaseNotes">Release Notes</string> |
65 | 65 | ||
66 | <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData --> | 66 | <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData --> |
67 | <string name="LoadingData">Loading...</string> | 67 | <string name="LoadingData">Loading...</string> |
68 | 68 | ||
69 | 69 | ||
70 | <!-- namecache --> | 70 | <!-- namecache --> |
71 | <!-- Avatar name: text shown for LLUUID::null --> | 71 | <!-- Avatar name: text shown for LLUUID::null --> |
72 | <string name="AvatarNameNobody">(nobody)</string> | 72 | <string name="AvatarNameNobody">(nobody)</string> |
73 | 73 | ||
74 | <!-- Avatar name: text shown while fetching name --> | 74 | <!-- Avatar name: text shown while fetching name --> |
75 | <string name="AvatarNameWaiting">(waiting)</string> | 75 | <string name="AvatarNameWaiting">(waiting)</string> |
76 | 76 | ||
77 | <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. --> | 77 | <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. --> |
78 | <string name="AvatarNameHippos">(hippos)</string> | 78 | <string name="AvatarNameHippos">(hippos)</string> |
79 | 79 | ||
80 | <!-- Group name: text shown for LLUUID::null --> | 80 | <!-- Group name: text shown for LLUUID::null --> |
81 | <string name="GroupNameNone">(none)</string> | 81 | <string name="GroupNameNone">(none)</string> |
82 | 82 | ||
83 | <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. --> | 83 | <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. --> |
84 | <string name="AssetErrorNone">No error</string> | 84 | <string name="AssetErrorNone">No error</string> |
85 | <string name="AssetErrorRequestFailed">Asset request: failed</string> | 85 | <string name="AssetErrorRequestFailed">Asset request: failed</string> |
86 | <string name="AssetErrorNonexistentFile">Asset request: non-existent file</string> | 86 | <string name="AssetErrorNonexistentFile">Asset request: non-existent file</string> |
87 | <string name="AssetErrorNotInDatabase">Asset request: asset not found in database</string> | 87 | <string name="AssetErrorNotInDatabase">Asset request: asset not found in database</string> |
88 | <string name="AssetErrorEOF">End of file</string> | 88 | <string name="AssetErrorEOF">End of file</string> |
89 | <string name="AssetErrorCannotOpenFile">Cannot open file</string> | 89 | <string name="AssetErrorCannotOpenFile">Cannot open file</string> |
90 | <string name="AssetErrorFileNotFound">File not found</string> | 90 | <string name="AssetErrorFileNotFound">File not found</string> |
91 | <string name="AssetErrorTCPTimeout">File transfer timeout</string> | 91 | <string name="AssetErrorTCPTimeout">File transfer timeout</string> |
92 | <string name="AssetErrorCircuitGone">Circuit gone</string> | 92 | <string name="AssetErrorCircuitGone">Circuit gone</string> |
93 | <string name="AssetErrorUnknownStatus">Unknown status</string> | 93 | <string name="AssetErrorUnknownStatus">Unknown status</string> |
94 | 94 | ||
95 | <!-- llvoavatar. Displayed in the avatar's chat bubble --> | 95 | <!-- llvoavatar. Displayed in the avatar's chat bubble --> |
96 | <string name="AvatarEditingApparance">(Editing Appearance)</string> | 96 | <string name="AvatarEditingApparance">(Editing Appearance)</string> |
97 | <string name="AvatarAway">Away</string> | 97 | <string name="AvatarAway">Away</string> |
98 | <string name="AvatarBusy">Busy</string> | 98 | <string name="AvatarBusy">Busy</string> |
99 | <string name="AvatarMuted">Muted</string> | 99 | <string name="AvatarMuted">Muted</string> |
100 | 100 | ||
101 | <!-- animations --> | 101 | <!-- animations --> |
102 | <string name="anim_express_afraid">Afraid</string> | 102 | <string name="anim_express_afraid">Afraid</string> |
103 | <string name="anim_express_anger">Angry</string> | 103 | <string name="anim_express_anger">Angry</string> |
104 | <string name="anim_away">Away</string> | 104 | <string name="anim_away">Away</string> |
105 | <string name="anim_backflip">Backflip</string> | 105 | <string name="anim_backflip">Backflip</string> |
106 | <string name="anim_express_laugh">Belly Laugh</string> | 106 | <string name="anim_express_laugh">Belly Laugh</string> |
107 | <string name="anim_express_toothsmile">BigSmile</string> | 107 | <string name="anim_express_toothsmile">BigSmile</string> |
108 | <string name="anim_blowkiss">Blow Kiss</string> | 108 | <string name="anim_blowkiss">Blow Kiss</string> |
109 | <string name="anim_express_bored">Bored</string> | 109 | <string name="anim_express_bored">Bored</string> |
110 | <string name="anim_bow">Bow</string> | 110 | <string name="anim_bow">Bow</string> |
111 | <string name="anim_clap">Clap</string> | 111 | <string name="anim_clap">Clap</string> |
112 | <string name="anim_courtbow">Court Bow</string> | 112 | <string name="anim_courtbow">Court Bow</string> |
113 | <string name="anim_express_cry">Cry</string> | 113 | <string name="anim_express_cry">Cry</string> |
114 | <string name="anim_dance1">Dance 1</string> | 114 | <string name="anim_dance1">Dance 1</string> |
115 | <string name="anim_dance2">Dance 2</string> | 115 | <string name="anim_dance2">Dance 2</string> |
116 | <string name="anim_dance3">Dance 3</string> | 116 | <string name="anim_dance3">Dance 3</string> |
117 | <string name="anim_dance4">Dance 4</string> | 117 | <string name="anim_dance4">Dance 4</string> |
118 | <string name="anim_dance5">Dance 5</string> | 118 | <string name="anim_dance5">Dance 5</string> |
119 | <string name="anim_dance6">Dance 6</string> | 119 | <string name="anim_dance6">Dance 6</string> |
120 | <string name="anim_dance7">Dance 7</string> | 120 | <string name="anim_dance7">Dance 7</string> |
121 | <string name="anim_dance8">Dance 8</string> | 121 | <string name="anim_dance8">Dance 8</string> |
122 | <string name="anim_express_disdain">Disdain</string> | 122 | <string name="anim_express_disdain">Disdain</string> |
123 | <string name="anim_drink">Drink</string> | 123 | <string name="anim_drink">Drink</string> |
124 | <string name="anim_express_embarrased">Embarrassed</string> | 124 | <string name="anim_express_embarrased">Embarrassed</string> |
125 | <string name="anim_angry_fingerwag">Finger Wag</string> | 125 | <string name="anim_angry_fingerwag">Finger Wag</string> |
126 | <string name="anim_fist_pump">Fist Pump</string> | 126 | <string name="anim_fist_pump">Fist Pump</string> |
127 | <string name="anim_yoga_float">Floating Yoga</string> | 127 | <string name="anim_yoga_float">Floating Yoga</string> |
128 | <string name="anim_express_frown">Frown</string> | 128 | <string name="anim_express_frown">Frown</string> |
129 | <string name="anim_impatient">Impatient</string> | 129 | <string name="anim_impatient">Impatient</string> |
130 | <string name="anim_jumpforjoy">Jump For Joy</string> | 130 | <string name="anim_jumpforjoy">Jump For Joy</string> |
131 | <string name="anim_kissmybutt">Kiss My Butt</string> | 131 | <string name="anim_kissmybutt">Kiss My Butt</string> |
132 | <string name="anim_express_kiss">Kiss</string> | 132 | <string name="anim_express_kiss">Kiss</string> |
133 | <string name="anim_laugh_short">Laugh</string> | 133 | <string name="anim_laugh_short">Laugh</string> |
134 | <string name="anim_musclebeach">Muscle Beach</string> | 134 | <string name="anim_musclebeach">Muscle Beach</string> |
135 | <string name="anim_no_unhappy">No (Unhappy)</string> | 135 | <string name="anim_no_unhappy">No (Unhappy)</string> |
136 | <string name="anim_no_head">No</string> | 136 | <string name="anim_no_head">No</string> |
137 | <string name="anim_nyanya">Nya-nya-nya</string> | 137 | <string name="anim_nyanya">Nya-nya-nya</string> |
138 | <string name="anim_punch_onetwo">One-Two Punch</string> | 138 | <string name="anim_punch_onetwo">One-Two Punch</string> |
139 | <string name="anim_express_open_mouth">Open Mouth</string> | 139 | <string name="anim_express_open_mouth">Open Mouth</string> |
140 | <string name="anim_peace">Peace</string> | 140 | <string name="anim_peace">Peace</string> |
141 | <string name="anim_point_you">Point at Other</string> | 141 | <string name="anim_point_you">Point at Other</string> |
142 | <string name="anim_point_me">Point at Self</string> | 142 | <string name="anim_point_me">Point at Self</string> |
143 | <string name="anim_punch_l">Punch Left</string> | 143 | <string name="anim_punch_l">Punch Left</string> |
144 | <string name="anim_punch_r">Punch Right</string> | 144 | <string name="anim_punch_r">Punch Right</string> |
145 | <string name="anim_rps_countdown">RPS count</string> | 145 | <string name="anim_rps_countdown">RPS count</string> |
146 | <string name="anim_rps_paper">RPS paper</string> | 146 | <string name="anim_rps_paper">RPS paper</string> |
147 | <string name="anim_rps_rock">RPS rock</string> | 147 | <string name="anim_rps_rock">RPS rock</string> |
148 | <string name="anim_rps_scissors">RPS scissors</string> | 148 | <string name="anim_rps_scissors">RPS scissors</string> |
149 | <string name="anim_express_repulsed">Repulsed</string> | 149 | <string name="anim_express_repulsed">Repulsed</string> |
150 | <string name="anim_kick_roundhouse_r">Roundhouse Kick</string> | 150 | <string name="anim_kick_roundhouse_r">Roundhouse Kick</string> |
151 | <string name="anim_express_sad">Sad</string> | 151 | <string name="anim_express_sad">Sad</string> |
152 | <string name="anim_salute">Salute</string> | 152 | <string name="anim_salute">Salute</string> |
153 | <string name="anim_shout">Shout</string> | 153 | <string name="anim_shout">Shout</string> |
154 | <string name="anim_express_shrug">Shrug</string> | 154 | <string name="anim_express_shrug">Shrug</string> |
155 | <string name="anim_express_smile">Smile</string> | 155 | <string name="anim_express_smile">Smile</string> |
156 | <string name="anim_smoke_idle">Smoke Idle</string> | 156 | <string name="anim_smoke_idle">Smoke Idle</string> |
157 | <string name="anim_smoke_inhale">Smoke Inhale</string> | 157 | <string name="anim_smoke_inhale">Smoke Inhale</string> |
158 | <string name="anim_smoke_throw_down">Smoke Throw Down</string> | 158 | <string name="anim_smoke_throw_down">Smoke Throw Down</string> |
159 | <string name="anim_express_surprise">Surprise</string> | 159 | <string name="anim_express_surprise">Surprise</string> |
160 | <string name="anim_sword_strike_r">Sword Strike</string> | 160 | <string name="anim_sword_strike_r">Sword Strike</string> |
161 | <string name="anim_angry_tantrum">Tantrum</string> | 161 | <string name="anim_angry_tantrum">Tantrum</string> |
162 | <string name="anim_express_tongue_out">TongueOut</string> | 162 | <string name="anim_express_tongue_out">TongueOut</string> |
163 | <string name="anim_hello">Wave</string> | 163 | <string name="anim_hello">Wave</string> |
164 | <string name="anim_whisper">Whisper</string> | 164 | <string name="anim_whisper">Whisper</string> |
165 | <string name="anim_whistle">Whistle</string> | 165 | <string name="anim_whistle">Whistle</string> |
166 | <string name="anim_express_wink">Wink</string> | 166 | <string name="anim_express_wink">Wink</string> |
167 | <string name="anim_wink_hollywood">Wink (Hollywood)</string> | 167 | <string name="anim_wink_hollywood">Wink (Hollywood)</string> |
168 | <string name="anim_express_worry">Worry</string> | 168 | <string name="anim_express_worry">Worry</string> |
169 | <string name="anim_yes_happy">Yes (Happy)</string> | 169 | <string name="anim_yes_happy">Yes (Happy)</string> |
170 | <string name="anim_yes_head">Yes</string> | 170 | <string name="anim_yes_head">Yes</string> |
171 | 171 | ||
172 | <string name="texture_loading">Loading...</string> | 172 | <string name="texture_loading">Loading...</string> |
173 | <string name="worldmap_offline">Offline</string> | 173 | <string name="worldmap_offline">Offline</string> |
174 | 174 | ||
175 | <!-- Chat --> | 175 | <!-- Chat --> |
176 | <string name="whisper">whispers:</string> | 176 | <string name="whisper">whispers:</string> |
177 | <string name="shout">shouts:</string> | 177 | <string name="shout">shouts:</string> |
178 | 178 | ||
179 | </strings> | 179 | </strings> |
180 | 180 | ||