Merge with lgpl tip.
commit
3f352737df
|
|
@ -21,5 +21,4 @@ Configure/build is nearly the same as building a 32 bit version.
|
|||
autobuild -m64 configure -c ReleaseFS -- --package
|
||||
autobuild -m64 build -c ReleaseFS --no_configure
|
||||
|
||||
The resulting installer/exe gets created in build-vc100_x64/newview/Release
|
||||
|
||||
The resulting installer/exe gets created in build-vc100_x64/newview/Release.
|
||||
|
|
|
|||
492
autobuild.xml
492
autobuild.xml
|
|
@ -37,6 +37,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f787b5b8e4b7fcba36602565cc5d8fe0</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/glod-1.0pre4-linux-x64-20131227.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -117,6 +129,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4551308262b8d24f6d8dab7d8d690d5d</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/SDL-1.2.14-linux-x64-20131228.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>apr_suite</key>
|
||||
|
|
@ -153,6 +177,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>16d9fbbc89d821d19a2fb2ed96b61913</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/apr_suite-1.4.5-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -201,6 +237,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>691aa373708bdf72b1153893f7578dd8</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/ares-1.10.0-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -249,6 +297,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>01a37a2400190d73638ec404d3aef065</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/boost-1.52.0-linux-x64-20131214.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -297,6 +357,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>7553b62c7ca7df04fa25fb70430c79d6</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/colladadom-2.2-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -345,6 +417,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e381b2c553d338c97266b98362160051</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/curl-7.24.0-linux-x64-20131214.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -381,6 +465,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>5590bab38ac57703252e3d425739fc2f</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/db-5.1.25-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>dbusglib</key>
|
||||
|
|
@ -405,6 +501,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>02cf031da2eaa733d4458840e9513e88</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/dbus_glib-0.76-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>dictionaries</key>
|
||||
|
|
@ -441,6 +549,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>d1fcbdd80e8748455ba528cbf0514801</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/dictionaries-1-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -477,6 +597,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>3c0c51c249d0e0320c576ba19e4424bf</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/elfio-1.0.3-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>expat</key>
|
||||
|
|
@ -513,6 +645,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>419103d87bf383fc4e24f6d7a17dc957</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/expat-2.0.1-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -561,6 +705,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>5178792b004a3617598b0593cacb23b5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodex-4.44.32-linux-20140407.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -597,6 +753,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>cde73209ae2a74d1fa2dcc4b70db6e67</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/fontconfig-2.8.0-linux-x64-20131216.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>freeglut</key>
|
||||
|
|
@ -657,6 +825,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6f59fd0dc976a12f3053d0ea8371438e</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/freetype-2.4.11-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -693,6 +873,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ea2524f19d53c12645413543930731b0</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/glext-68-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -741,6 +933,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>31211ab614a1b8f634615194ab7f2360</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/glh_linear-0.0.0-linux-x64-20131213.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -825,6 +1029,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b497e91203227c236f291c8cc83a5076</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/google_breakpad-0.0.0-rev1099-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -873,6 +1089,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8aae0c236af596e794fe009f344b3d3b</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/gmock-1.6.0-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -909,6 +1137,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>cac55fe6c0069fd8209ab48a6c8372c2</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/gperftools-2.0-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -945,6 +1185,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9ffe8e4a52f425fc951200e8689b5cdf</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/gstreamer-0.10.28-linux-x64-20131223.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>gtk-atk-pango-glib</key>
|
||||
|
|
@ -969,6 +1221,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0c5990879c99cb5aad9c89862c8c2203</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/gtk-atk-pango-glib-linux-x64-20131223.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1065,6 +1329,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>cbf3fde6c5a9567813c591d399e69f11</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/jpeglib-8c-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1113,6 +1389,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4e56cf7e6dafcd124c09d70c7ab47cd2</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/jsoncpp-0.5.0-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1161,6 +1449,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>03350c4f0aa32e56bba4979b598a6fc2</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/kdu-7.3.2-linux-20131204.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1257,6 +1557,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0b4442ab57af206253c47876a0220c63</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/libhunspell-1.3.2-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1305,6 +1617,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>bac1f696d942610da5c8d371f1c51703</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/libpng-1.5.1-linux-x64-20131220.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1341,6 +1665,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4729178d1d0bdc9c7d1d1c66712e9646</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/uuid-1.6.2-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>libxml</key>
|
||||
|
|
@ -1365,6 +1701,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>819bf22602afa1fbbfef3bb067d21069</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/libxml2-2.7.8-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>llappearanceutility-source</key>
|
||||
|
|
@ -1531,6 +1879,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>fcd1bf2c028592c91a6f28e7238fd0c1</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/llqtwebkit-4.7.1-linux-x64-20131227.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1603,6 +1963,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>351ebe8e638cea6f6c3dd85dd0b5b00c</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/ndPhysicsStub-1.0-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1651,6 +2023,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>016f6f2fa3dcc616f67749f2bf0ef201</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/libndofdev-0.3-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1723,6 +2107,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>7af891ac1fb52d0c43b0a466d1d2b2d5</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/ogg_vorbis-1.2.2-1.3.2-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1771,6 +2167,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0b26c12dd20aa928453ee18f4793a2dd</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/openssl-1.0.1g-linux-x64-20140417.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1809,6 +2217,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>bcb331520266fbb2b581aaf7d0d8e9fa</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/openal-1.12.854-1.1.0-linux-x64-20131215.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1859,6 +2279,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6ac7d355ad071e9dca55b403397c3ff9</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/openjpeg-1.4-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -1907,6 +2339,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c31f766db43797f9e95995819ebc36e6</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/pcre-8.32-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>quicktime</key>
|
||||
|
|
@ -1987,6 +2431,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>957773fff7148ffaca42b1ea4a18d192</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/270512/arch/Linux/installer/slvoice-4.5.0009.17865-linux-20130216.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -2023,6 +2479,18 @@
|
|||
<key>name</key>
|
||||
<string>common</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>130be9c2677de96b1013cde9b0920b06</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/tut-2008-11-30-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
</map>
|
||||
</map>
|
||||
<key>wix</key>
|
||||
|
|
@ -2079,6 +2547,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>7c5937ee2795f27a27dba687cc9305ee</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/xmlrpc_epi-0.54.1-linux-x64-20131212.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
@ -2127,6 +2607,18 @@
|
|||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2907cfba7436c417aeeb89fe94acee02</string>
|
||||
<key>url</key>
|
||||
<string>http://downloads.firestormviewer.org/installables/zlib-1.2.6-linux-x64-20131216.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
VERSION_VIEWER=4.6.2
|
||||
VERSION_VIEWER=4.6.6
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ if (LINUX)
|
|||
# this stops us requiring a really recent glibc at runtime
|
||||
add_definitions(-fno-stack-protector)
|
||||
# linking can be very memory-hungry, especially the final viewer link
|
||||
set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id")
|
||||
set(CMAKE_CXX_LINK_FLAGS "-Wl,--no-keep-memory -Wl,--build-id -Wl,-rpath,'$ORIGIN:$ORIGIN/../lib'")
|
||||
endif (NOT STANDALONE)
|
||||
|
||||
# <FS:TS> Enable AVX optimizations if requested and at least GCC 4.6.
|
||||
|
|
|
|||
|
|
@ -30,14 +30,26 @@ macro (use_prebuilt_binary _binary)
|
|||
endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed")
|
||||
|
||||
if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
|
||||
if (ND_BUILD64BIT_ARCH)
|
||||
if (LINUX)
|
||||
set(autobuild_install_platform "--platform=linux64")
|
||||
endif (LINUX)
|
||||
if (DARWIN)
|
||||
set(autobuild_install_platform "")
|
||||
endif (DARWIN)
|
||||
if (WINDOWS)
|
||||
set(autobuild_install_platform "")
|
||||
endif (WINDOWS)
|
||||
endif (ND_BUILD64BIT_ARCH)
|
||||
if(DEBUG_PREBUILT)
|
||||
message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install
|
||||
message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install ${autobuild_install_platform}
|
||||
--install-dir=${AUTOBUILD_INSTALL_DIR}
|
||||
--skip-license-check
|
||||
${_binary} ")
|
||||
endif(DEBUG_PREBUILT)
|
||||
execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}"
|
||||
install
|
||||
${autobuild_install_platform}
|
||||
--install-dir=${AUTOBUILD_INSTALL_DIR}
|
||||
--skip-license-check
|
||||
${_binary}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@
|
|||
|
||||
|
||||
extern U32 gOctreeMaxCapacity;
|
||||
extern float gOctreeMinSize;
|
||||
|
||||
/*#define LL_OCTREE_PARANOIA_CHECK 0
|
||||
#if LL_DARWIN
|
||||
#define LL_OCTREE_MAX_CAPACITY 32
|
||||
|
|
@ -106,6 +108,7 @@ public:
|
|||
: mParent((oct_node*)parent),
|
||||
mOctant(octant)
|
||||
{
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds
|
||||
mData.push_back(NULL);
|
||||
mDataEnd = &mData[0];
|
||||
|
|
@ -213,7 +216,7 @@ public:
|
|||
F32 size = mSize[0];
|
||||
F32 p_size = size * 2.f;
|
||||
|
||||
return (radius <= 0.001f && size <= 0.001f) ||
|
||||
return (radius <= gOctreeMinSize && size <= gOctreeMinSize) ||
|
||||
(radius <= p_size && radius > size);
|
||||
}
|
||||
|
||||
|
|
@ -319,7 +322,7 @@ public:
|
|||
//is it here?
|
||||
if (isInside(data->getPositionGroup()))
|
||||
{
|
||||
if (((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius())) ||
|
||||
if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) ||
|
||||
(data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity)))
|
||||
{ //it belongs here
|
||||
mData.push_back(NULL);
|
||||
|
|
@ -356,8 +359,9 @@ public:
|
|||
LLVector4a val;
|
||||
val.setSub(center, getCenter());
|
||||
val.setAbs(val);
|
||||
|
||||
S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7;
|
||||
LLVector4a min_diff(gOctreeMinSize);
|
||||
|
||||
S32 lt = val.lessThan(min_diff).getGatheredBits() & 0x7;
|
||||
|
||||
if( lt == 0x7 )
|
||||
{
|
||||
|
|
@ -389,6 +393,7 @@ public:
|
|||
}
|
||||
#endif
|
||||
|
||||
llassert(size[0] >= gOctreeMinSize*0.5f);
|
||||
//make the new kid
|
||||
child = new LLOctreeNode<T>(center, size, this);
|
||||
addChild(child);
|
||||
|
|
@ -798,6 +803,8 @@ public:
|
|||
this->setSize(size2);
|
||||
this->updateMinMax();
|
||||
|
||||
llassert(size[0] >= gOctreeMinSize);
|
||||
|
||||
//copy our children to a new branch
|
||||
LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this);
|
||||
|
||||
|
|
|
|||
|
|
@ -170,6 +170,11 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
|
|||
return LLModel::BAD_ELEMENT;
|
||||
}
|
||||
|
||||
if (!pos_source)
|
||||
{
|
||||
llwarns << "Unable to process mesh without position data; invalid model; invalid model." << llendl;
|
||||
return LLModel::BAD_ELEMENT;
|
||||
}
|
||||
|
||||
domPRef p = tri->getP();
|
||||
domListOfUInts& idx = p->getValue();
|
||||
|
|
@ -179,19 +184,22 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
|
|||
domListOfFloats& tc = tc_source ? tc_source->getFloat_array()->getValue() : dummy ;
|
||||
domListOfFloats& n = norm_source ? norm_source->getFloat_array()->getValue() : dummy ;
|
||||
|
||||
if (pos_source)
|
||||
{
|
||||
face.mExtents[0].set(v[0], v[1], v[2]);
|
||||
face.mExtents[1].set(v[0], v[1], v[2]);
|
||||
}
|
||||
|
||||
LLVolumeFace::VertexMapData::PointMap point_map;
|
||||
|
||||
|
||||
U32 index_count = idx.getCount();
|
||||
U32 vertex_count = pos_source ? v.getCount() : 0;
|
||||
U32 tc_count = tc_source ? tc.getCount() : 0;
|
||||
U32 norm_count = norm_source ? n.getCount() : 0;
|
||||
|
||||
if (vertex_count == 0)
|
||||
{
|
||||
llwarns << "Unable to process mesh with empty position array; invalid model." << llendl;
|
||||
return LLModel::BAD_ELEMENT;
|
||||
}
|
||||
|
||||
face.mExtents[0].set(v[0], v[1], v[2]);
|
||||
face.mExtents[1].set(v[0], v[1], v[2]);
|
||||
|
||||
for (U32 i = 0; i < index_count; i += idx_stride)
|
||||
{
|
||||
LLVolumeFace::VertexData cv;
|
||||
|
|
|
|||
|
|
@ -1539,8 +1539,8 @@ LIST(APPEND viewer_SOURCE_FILES llleapmotioncontroller.cpp)
|
|||
LIST(APPEND viewer_HEADER_FILES llleapmotioncontroller.h)
|
||||
|
||||
if (LEAPMOTION)
|
||||
LIST(APPEND viewer_SOURCE_FILES fsleaptool.cpp fsleapexampletool.cpp )
|
||||
LIST(APPEND viewer_HEADER_FILES fsleaptool.h fsleapexampletool.h )
|
||||
LIST(APPEND viewer_SOURCE_FILES fsleaptool.cpp fsleapexampletool.cpp fsleapmaniptool.cpp )
|
||||
LIST(APPEND viewer_HEADER_FILES fsleaptool.h fsleapexampletool.h fsleapmaniptool.h )
|
||||
endif (LEAPMOTION)
|
||||
|
||||
if (DARWIN)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
4.6.2
|
||||
4.6.6
|
||||
|
|
|
|||
|
|
@ -10321,6 +10321,18 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<integer>0</integer>
|
||||
</map>
|
||||
|
||||
<key>OctreeMinimumNodeSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Minimum size of any octree node</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.01</real>
|
||||
</map>
|
||||
|
||||
<key>OctreeStaticObjectSizeFactor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -45,10 +45,14 @@ class FSViewerManifest:
|
|||
|
||||
def fs_sign_win_binaries( self ):
|
||||
try:
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com",self.args['configuration']+"\\firestorm-bin.exe"],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com",self.args['configuration']+"\\slplugin.exe"],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com",self.args['configuration']+"\\SLVoice.exe"],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com",self.args['configuration']+"\\"+self.final_exe()],stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\firestorm-bin.exe"],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\slplugin.exe"],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\SLVoice.exe"],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
subprocess.check_call(["signtool.exe","sign","/n","Phoenix","/d","Firestorm","/du","http://www.phoenixviewer.com","/t","http://timestamp.verisign.com/scripts/timstamp.dll",self.args['configuration']+"\\"+self.final_exe()],
|
||||
stderr=subprocess.PIPE,stdout=subprocess.PIPE)
|
||||
except Exception, e:
|
||||
print "Couldn't sign final binary. Tried to sign %s" % self.args['configuration']+"\\"+self.final_exe()
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ static const std::string LL_SCOUT = "Scout";
|
|||
static const std::string LL_TESTER = "Tester";
|
||||
|
||||
|
||||
extern S32 gMaxAgentGroups;
|
||||
|
||||
S32 FSCommon::sObjectAddMsg = 0;
|
||||
|
||||
void reportToNearbyChat(const std::string& message)
|
||||
|
|
@ -338,3 +340,13 @@ bool FSCommon::checkIsActionEnabled(const LLUUID& av_id, EFSRegistrarFunctionAct
|
|||
return false;
|
||||
}
|
||||
|
||||
LLSD FSCommon::populateGroupCount()
|
||||
{
|
||||
LLStringUtil::format_map_t args;
|
||||
S32 groupcount = gAgent.mGroups.count();
|
||||
args["[COUNT]"] = llformat("%d", groupcount);
|
||||
args["[REMAINING]"] = llformat("%d", gMaxAgentGroups - groupcount);
|
||||
LLUIString groupcountstring = LLTrans::getString((gMaxAgentGroups ? "groupcountstring" : "groupcountunlimitedstring"), args);
|
||||
return LLSD(groupcountstring);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ namespace FSCommon
|
|||
extern S32 sObjectAddMsg;
|
||||
|
||||
bool checkIsActionEnabled(const LLUUID& av_id, EFSRegistrarFunctionActionType);
|
||||
LLSD populateGroupCount();
|
||||
};
|
||||
|
||||
#endif // FS_COMMON_H
|
||||
|
|
|
|||
|
|
@ -759,7 +759,37 @@ LLSD FSData::allowedLogin()
|
|||
}
|
||||
else
|
||||
{
|
||||
return iter->second;
|
||||
LLSD block = iter->second;
|
||||
bool blocked = true; // default is to block all unless there is a gridtype or grids present.
|
||||
if(block.has("gridtype"))
|
||||
{
|
||||
blocked = false;
|
||||
#ifdef OPENSIM
|
||||
if ((block["gridtype"].asString() == "opensim") && LLGridManager::getInstance()->isInOpenSim())
|
||||
{
|
||||
return block;
|
||||
}
|
||||
#endif
|
||||
if ((block["gridtype"].asString() == "secondlife") && LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
return block;
|
||||
}
|
||||
}
|
||||
if(block.has("grids"))
|
||||
{
|
||||
blocked = false;
|
||||
LLSD grids = block["grids"];
|
||||
for (LLSD::array_iterator grid_iter = grids.beginArray();
|
||||
grid_iter != grids.endArray();
|
||||
++grid_iter)
|
||||
{
|
||||
if ((*grid_iter).asString() == LLGridManager::getInstance()->getGrid())
|
||||
{
|
||||
return block;
|
||||
}
|
||||
}
|
||||
}
|
||||
return blocked ? block : LLSD();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@
|
|||
#include "llstartup.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llvoiceclient.h"
|
||||
#include "fscommon.h"
|
||||
|
||||
//Maximum number of people you can select to do an operation on at once.
|
||||
const U32 MAX_FRIEND_SELECT = 20;
|
||||
|
|
@ -171,15 +172,13 @@ void FSFloaterContacts::updateGroupButtons()
|
|||
LLUUID groupId = getCurrentItemID();
|
||||
bool isGroup = groupId.notNull();
|
||||
|
||||
LLUICtrl* groupcount = mGroupsTab->getChild<LLUICtrl>("groupcount");
|
||||
groupcount->setTextArg("[COUNT]", llformat("%d", gAgent.mGroups.count()));
|
||||
groupcount->setTextArg("[MAX]", llformat("%d", gMaxAgentGroups));
|
||||
mGroupsTab->getChild<LLUICtrl>("groupcount")->setValue(FSCommon::populateGroupCount());
|
||||
|
||||
getChildView("chat_btn")->setEnabled(isGroup && gAgent.hasPowerInGroup(groupId, GP_SESSION_JOIN));
|
||||
getChildView("info_btn")->setEnabled(isGroup);
|
||||
getChildView("activate_btn")->setEnabled(groupId != gAgent.getGroupID());
|
||||
getChildView("leave_btn")->setEnabled(isGroup);
|
||||
getChildView("create_btn")->setEnabled(gAgent.mGroups.count() < gMaxAgentGroups);
|
||||
getChildView("create_btn")->setEnabled((!gMaxAgentGroups) || (gAgent.mGroups.count() < gMaxAgentGroups));
|
||||
getChildView("invite_btn")->setEnabled(isGroup && gAgent.hasPowerInGroup(groupId, GP_MEMBER_INVITE));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -592,12 +592,19 @@ void FSFloaterIM::updateButtons(bool is_call_started)
|
|||
void FSFloaterIM::changed(U32 mask)
|
||||
{
|
||||
LL_DEBUGS("FSFloaterIM") << "FSFloaterIM::changed(U32 mask)" << LL_ENDL;
|
||||
getChild<LLButton>("call_btn")->setEnabled(!LLAvatarActions::isFriend(mOtherParticipantUUID));
|
||||
|
||||
// Disable "Teleport" button if friend is offline
|
||||
if(LLAvatarActions::isFriend(mOtherParticipantUUID))
|
||||
{
|
||||
getChild<LLButton>("teleport_btn")->setEnabled(LLAvatarTracker::instance().isBuddyOnline(mOtherParticipantUUID));
|
||||
bool is_online = LLAvatarTracker::instance().isBuddyOnline(mOtherParticipantUUID);
|
||||
getChild<LLButton>("teleport_btn")->setEnabled(is_online);
|
||||
getChild<LLButton>("call_btn")->setEnabled(is_online);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If friendship dissolved, enable buttons by default because we don't
|
||||
// know about their online status anymore
|
||||
getChild<LLButton>("teleport_btn")->setEnabled(TRUE);
|
||||
getChild<LLButton>("call_btn")->setEnabled(TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "fsfloaterim.h"
|
||||
#include "llvoiceclient.h"
|
||||
#include "lltoolbarview.h"
|
||||
|
||||
static const F32 VOICE_STATUS_UPDATE_INTERVAL = 1.0f;
|
||||
|
||||
|
|
@ -288,6 +289,15 @@ void FSFloaterIMContainer::setMinimized(BOOL b)
|
|||
}
|
||||
}
|
||||
|
||||
void FSFloaterIMContainer::setVisible(BOOL b)
|
||||
{
|
||||
LLMultiFloater::setVisible(b);
|
||||
|
||||
if (b)
|
||||
{
|
||||
mFlashingSessions.clear();
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void FSFloaterIMContainer::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg)
|
||||
|
|
@ -309,6 +319,13 @@ void FSFloaterIMContainer::sessionRemoved(const LLUUID& session_id)
|
|||
{
|
||||
iMfloater->closeFloater();
|
||||
}
|
||||
|
||||
uuid_vec_t::iterator found = std::find(mFlashingSessions.begin(), mFlashingSessions.end(), session_id);
|
||||
if (found != mFlashingSessions.end())
|
||||
{
|
||||
mFlashingSessions.erase(found);
|
||||
checkFlashing();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
@ -438,4 +455,20 @@ LLFloater* FSFloaterIMContainer::getCurrentVoiceFloater()
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void FSFloaterIMContainer::addFlashingSession(const LLUUID& session_id)
|
||||
{
|
||||
uuid_vec_t::iterator found = std::find(mFlashingSessions.begin(), mFlashingSessions.end(), session_id);
|
||||
if (found == mFlashingSessions.end())
|
||||
{
|
||||
mFlashingSessions.push_back(session_id);
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterIMContainer::checkFlashing()
|
||||
{
|
||||
if (mFlashingSessions.empty())
|
||||
{
|
||||
gToolBarView->flashCommand(LLCommandId("chat"), false);
|
||||
}
|
||||
}
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ public:
|
|||
static FSFloaterIMContainer* getInstance();
|
||||
|
||||
virtual void setMinimized(BOOL b);
|
||||
virtual void setVisible(BOOL b);
|
||||
|
||||
void onNewMessageReceived(const LLSD& data); // public so nearbychat can call it directly. TODO: handle via callback. -AO
|
||||
|
||||
|
|
@ -76,6 +77,8 @@ public:
|
|||
static void reloadEmptyFloaters();
|
||||
void initTabs();
|
||||
|
||||
void addFlashingSession(const LLUUID& session_id);
|
||||
|
||||
private:
|
||||
enum eVoiceState
|
||||
{
|
||||
|
|
@ -97,6 +100,9 @@ private:
|
|||
typedef std::map<LLUUID,LLFloater*> avatarID_panel_map_t;
|
||||
avatarID_panel_map_t mSessions;
|
||||
boost::signals2::connection mNewMessageConnection;
|
||||
|
||||
void checkFlashing();
|
||||
uuid_vec_t mFlashingSessions;
|
||||
};
|
||||
|
||||
#endif // FS_FLOATERIMCONTAINER_H
|
||||
|
|
|
|||
|
|
@ -286,6 +286,12 @@ void FSFloaterSearch::onOpen(const LLSD& key)
|
|||
{
|
||||
mTabContainer->selectTabPanel(mPanelGroups);
|
||||
}
|
||||
|
||||
FSSearchPanelBase* current_panel = dynamic_cast<FSSearchPanelBase*>(mTabContainer->getCurrentPanel());
|
||||
if (current_panel)
|
||||
{
|
||||
current_panel->focusDefaultElement();
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
@ -713,7 +719,7 @@ void FSFloaterSearch::onBtnEventReminder()
|
|||
|
||||
static LLPanelInjector<FSPanelSearchPeople> t_panel_fs_search_people("panel_ls_people");
|
||||
|
||||
FSPanelSearchPeople::FSPanelSearchPeople() : LLPanel()
|
||||
FSPanelSearchPeople::FSPanelSearchPeople() : FSSearchPanelBase()
|
||||
, mQueryID(NULL)
|
||||
, mStartSearch(0)
|
||||
, mResultsReceived(0)
|
||||
|
|
@ -749,6 +755,11 @@ BOOL FSPanelSearchPeople::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void FSPanelSearchPeople::focusDefaultElement()
|
||||
{
|
||||
mSearchComboBox->focusTextEntry();
|
||||
}
|
||||
|
||||
void FSPanelSearchPeople::find()
|
||||
{
|
||||
std::string text = mSearchComboBox->getSimple();
|
||||
|
|
@ -976,7 +987,7 @@ void FSPanelSearchPeople::processSearchReply(LLMessageSystem* msg, void**)
|
|||
|
||||
static LLPanelInjector<FSPanelSearchGroups> t_panel_fs_search_groups("panel_ls_groups");
|
||||
|
||||
FSPanelSearchGroups::FSPanelSearchGroups() : LLPanel()
|
||||
FSPanelSearchGroups::FSPanelSearchGroups() : FSSearchPanelBase()
|
||||
, mQueryID(NULL)
|
||||
, mStartSearch(0)
|
||||
, mResultsReceived(0)
|
||||
|
|
@ -1012,6 +1023,11 @@ BOOL FSPanelSearchGroups::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void FSPanelSearchGroups::focusDefaultElement()
|
||||
{
|
||||
mSearchComboBox->focusTextEntry();
|
||||
}
|
||||
|
||||
void FSPanelSearchGroups::find()
|
||||
{
|
||||
std::string text = filterShortWords(mSearchComboBox->getSimple());
|
||||
|
|
@ -1261,7 +1277,7 @@ void FSPanelSearchGroups::processSearchReply(LLMessageSystem* msg, void**)
|
|||
|
||||
static LLPanelInjector<FSPanelSearchPlaces> t_panel_fs_search_places("panel_ls_places");
|
||||
|
||||
FSPanelSearchPlaces::FSPanelSearchPlaces() : LLPanel()
|
||||
FSPanelSearchPlaces::FSPanelSearchPlaces() : FSSearchPanelBase()
|
||||
, mQueryID(NULL)
|
||||
, mStartSearch(0)
|
||||
, mResultsReceived(0)
|
||||
|
|
@ -1308,6 +1324,11 @@ BOOL FSPanelSearchPlaces::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void FSPanelSearchPlaces::focusDefaultElement()
|
||||
{
|
||||
mSearchComboBox->focusTextEntry();
|
||||
}
|
||||
|
||||
void FSPanelSearchPlaces::find()
|
||||
{
|
||||
std::string text = filterShortWords(mSearchComboBox->getSimple());
|
||||
|
|
@ -1593,7 +1614,7 @@ void FSPanelSearchPlaces::processSearchReply(LLMessageSystem* msg, void**)
|
|||
|
||||
static LLPanelInjector<FSPanelSearchLand> t_panel_fs_search_land("panel_ls_land");
|
||||
|
||||
FSPanelSearchLand::FSPanelSearchLand() : LLPanel()
|
||||
FSPanelSearchLand::FSPanelSearchLand() : FSSearchPanelBase()
|
||||
, mQueryID(NULL)
|
||||
, mStartSearch(0)
|
||||
, mResultsReceived(0)
|
||||
|
|
@ -1944,7 +1965,7 @@ void FSPanelSearchLand::processSearchReply(LLMessageSystem* msg, void**)
|
|||
|
||||
static LLPanelInjector<FSPanelSearchClassifieds> t_panel_fs_search_classifieds("panel_ls_classifieds");
|
||||
|
||||
FSPanelSearchClassifieds::FSPanelSearchClassifieds() : LLPanel()
|
||||
FSPanelSearchClassifieds::FSPanelSearchClassifieds() : FSSearchPanelBase()
|
||||
, mQueryID(NULL)
|
||||
, mStartSearch(0)
|
||||
, mResultsReceived(0)
|
||||
|
|
@ -1995,6 +2016,11 @@ BOOL FSPanelSearchClassifieds::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void FSPanelSearchClassifieds::focusDefaultElement()
|
||||
{
|
||||
mSearchComboBox->focusTextEntry();
|
||||
}
|
||||
|
||||
void FSPanelSearchClassifieds::find()
|
||||
{
|
||||
std::string text = filterShortWords(mSearchComboBox->getSimple());
|
||||
|
|
@ -2246,7 +2272,7 @@ void FSPanelSearchClassifieds::processSearchReply(LLMessageSystem* msg, void**)
|
|||
|
||||
static LLPanelInjector<FSPanelSearchEvents> t_panel_fs_search_events("panel_ls_events");
|
||||
|
||||
FSPanelSearchEvents::FSPanelSearchEvents() : LLPanel()
|
||||
FSPanelSearchEvents::FSPanelSearchEvents() : FSSearchPanelBase()
|
||||
, mQueryID(NULL)
|
||||
, mResultsReceived(0)
|
||||
, mStartSearch(0)
|
||||
|
|
@ -2298,6 +2324,11 @@ BOOL FSPanelSearchEvents::postBuild()
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void FSPanelSearchEvents::focusDefaultElement()
|
||||
{
|
||||
mSearchComboBox->focusTextEntry();
|
||||
}
|
||||
|
||||
void FSPanelSearchEvents::find()
|
||||
{
|
||||
std::string text = filterShortWords(mSearchComboBox->getSimple());
|
||||
|
|
@ -2658,7 +2689,7 @@ void FSPanelSearchEvents::processSearchReply(LLMessageSystem* msg, void**)
|
|||
|
||||
static LLPanelInjector<FSPanelSearchWeb> t_panel_fs_search_web("panel_ls_web");
|
||||
|
||||
FSPanelSearchWeb::FSPanelSearchWeb() : LLPanel()
|
||||
FSPanelSearchWeb::FSPanelSearchWeb() : FSSearchPanelBase()
|
||||
, mWebBrowser(NULL)
|
||||
{
|
||||
// declare a map that transforms a category name into
|
||||
|
|
|
|||
|
|
@ -63,20 +63,30 @@ struct SearchQuery : public LLInitParam::Block<SearchQuery>
|
|||
// Search Panels //
|
||||
///////////////////////////////
|
||||
|
||||
class FSPanelSearchPeople : public LLPanel
|
||||
class FSSearchPanelBase : public LLPanel
|
||||
{
|
||||
public:
|
||||
FSSearchPanelBase() : LLPanel() { }
|
||||
virtual ~FSSearchPanelBase() { }
|
||||
virtual void focusDefaultElement() { }
|
||||
};
|
||||
|
||||
class FSPanelSearchPeople : public FSSearchPanelBase
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
FSPanelSearchPeople();
|
||||
static void processSearchReply(LLMessageSystem* msg, void**);
|
||||
|
||||
/*virtual*/ void focusDefaultElement();
|
||||
|
||||
protected:
|
||||
const S32& getNumResultsReturned() const { return mNumResultsReturned; };
|
||||
const S32& getNumResultsReceived() const { return mResultsReceived; };
|
||||
|
||||
private:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ ~FSPanelSearchPeople();
|
||||
virtual ~FSPanelSearchPeople();
|
||||
|
||||
void onBtnFind();
|
||||
void onSelectItem();
|
||||
|
|
@ -101,16 +111,18 @@ private:
|
|||
LLScrollListCtrl* mSearchResults;
|
||||
};
|
||||
|
||||
class FSPanelSearchGroups : public LLPanel
|
||||
class FSPanelSearchGroups : public FSSearchPanelBase
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
FSPanelSearchGroups();
|
||||
static void processSearchReply(LLMessageSystem* msg, void**);
|
||||
protected:
|
||||
|
||||
/*virtual*/ void focusDefaultElement();
|
||||
|
||||
private:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ ~FSPanelSearchGroups();
|
||||
virtual ~FSPanelSearchGroups();
|
||||
|
||||
void onBtnFind();
|
||||
void onSelectItem();
|
||||
|
|
@ -135,16 +147,18 @@ private:
|
|||
LLScrollListCtrl* mSearchResults;
|
||||
};
|
||||
|
||||
class FSPanelSearchPlaces : public LLPanel
|
||||
class FSPanelSearchPlaces : public FSSearchPanelBase
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
FSPanelSearchPlaces();
|
||||
static void processSearchReply(LLMessageSystem* msg, void**);
|
||||
protected:
|
||||
|
||||
/*virtual*/ void focusDefaultElement();
|
||||
|
||||
private:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ ~FSPanelSearchPlaces();
|
||||
virtual ~FSPanelSearchPlaces();
|
||||
|
||||
void onBtnFind();
|
||||
void onSelectItem();
|
||||
|
|
@ -170,7 +184,7 @@ private:
|
|||
LLComboBox* mPlacesCategory;
|
||||
};
|
||||
|
||||
class FSPanelSearchLand : public LLPanel
|
||||
class FSPanelSearchLand : public FSSearchPanelBase
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
|
|
@ -179,7 +193,7 @@ public:
|
|||
protected:
|
||||
private:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ ~FSPanelSearchLand();
|
||||
virtual ~FSPanelSearchLand();
|
||||
|
||||
void onBtnFind();
|
||||
void onSelectItem();
|
||||
|
|
@ -205,16 +219,18 @@ private:
|
|||
LLScrollListCtrl* mSearchResults;
|
||||
};
|
||||
|
||||
class FSPanelSearchClassifieds : public LLPanel
|
||||
class FSPanelSearchClassifieds : public FSSearchPanelBase
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
FSPanelSearchClassifieds();
|
||||
static void processSearchReply(LLMessageSystem* msg, void**);
|
||||
protected:
|
||||
|
||||
/*virtual*/ void focusDefaultElement();
|
||||
|
||||
private:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ ~FSPanelSearchClassifieds();
|
||||
virtual ~FSPanelSearchClassifieds();
|
||||
|
||||
void onBtnFind();
|
||||
void onSelectItem();
|
||||
|
|
@ -240,16 +256,18 @@ private:
|
|||
LLComboBox* mClassifiedsCategory;
|
||||
};
|
||||
|
||||
class FSPanelSearchEvents : public LLPanel
|
||||
class FSPanelSearchEvents : public FSSearchPanelBase
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
FSPanelSearchEvents();
|
||||
static void processSearchReply(LLMessageSystem* msg, void**);
|
||||
protected:
|
||||
|
||||
/*virtual*/ void focusDefaultElement();
|
||||
|
||||
private:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ ~FSPanelSearchEvents();
|
||||
virtual ~FSPanelSearchEvents();
|
||||
|
||||
void onBtnFind();
|
||||
void onSelectItem();
|
||||
|
|
@ -281,15 +299,16 @@ private:
|
|||
LLRadioGroup* mEventsMode;
|
||||
};
|
||||
|
||||
class FSPanelSearchWeb : public LLPanel, public LLViewerMediaObserver
|
||||
class FSPanelSearchWeb : public FSSearchPanelBase, public LLViewerMediaObserver
|
||||
{
|
||||
LOG_CLASS(FSFloaterSearch);
|
||||
public:
|
||||
FSPanelSearchWeb();
|
||||
/*virtual*/ BOOL postBuild();
|
||||
void loadURL(const SearchQuery &query);
|
||||
|
||||
private:
|
||||
~FSPanelSearchWeb() {};
|
||||
virtual ~FSPanelSearchWeb() {};
|
||||
|
||||
LLMediaCtrl* mWebBrowser;
|
||||
LLSD mCategoryPaths;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@
|
|||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "fskeywords.h"
|
||||
#include "llagent.h"
|
||||
#include "llinstantmessage.h"
|
||||
#include "llmutelist.h"
|
||||
#include "llui.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
|
|
@ -83,8 +86,16 @@ bool FSKeywords::chatContainsKeyword(const LLChat& chat, bool is_local)
|
|||
// <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground
|
||||
void FSKeywords::notify(const LLChat& chat)
|
||||
{
|
||||
static LLCachedControl<bool> PlayModeUISndFSKeywordSound(gSavedSettings, "PlayModeUISndFSKeywordSound");
|
||||
if(PlayModeUISndFSKeywordSound)
|
||||
LLUI::sAudioCallback(LLUUID(gSavedSettings.getString("UISndFSKeywordSound")));
|
||||
if (chat.mFromID != gAgent.getID() || chat.mFromName == SYSTEM_FROM)
|
||||
{
|
||||
if (!LLMuteList::getInstance()->isMuted(chat.mFromID))
|
||||
{
|
||||
static LLCachedControl<bool> PlayModeUISndFSKeywordSound(gSavedSettings, "PlayModeUISndFSKeywordSound");
|
||||
if (PlayModeUISndFSKeywordSound)
|
||||
{
|
||||
LLUI::sAudioCallback(LLUUID(gSavedSettings.getString("UISndFSKeywordSound")));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// </FS:PP>
|
||||
|
|
|
|||
|
|
@ -48,12 +48,16 @@ namespace nd
|
|||
return 111;
|
||||
}
|
||||
|
||||
void ExampleTool::onFrame( Leap::HandList const &aHands )
|
||||
void ExampleTool::onLeapFrame( Leap::Frame const &aFrame )
|
||||
{
|
||||
mHands = aHands.count();
|
||||
mHands = aFrame.hands().count();
|
||||
mFingers = 0;
|
||||
for( int i = 0; i < mHands; ++ i )
|
||||
mFingers += aHands[ i ].fingers().count();
|
||||
mFingers += aFrame.hands()[ i ].fingers().count();
|
||||
}
|
||||
|
||||
void ExampleTool::onRenderFrame( Leap::Frame const &aFrame )
|
||||
{
|
||||
}
|
||||
|
||||
void ExampleTool::render()
|
||||
|
|
|
|||
|
|
@ -42,7 +42,8 @@ namespace nd
|
|||
public:
|
||||
virtual ~ExampleTool(){}
|
||||
|
||||
virtual void onFrame(Leap::HandList const&);
|
||||
virtual void onLeapFrame( Leap::Frame const& );
|
||||
virtual void onRenderFrame( Leap::Frame const& );
|
||||
virtual void render();
|
||||
virtual std::string getDebugString();
|
||||
virtual std::string getName();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,572 @@
|
|||
/**
|
||||
* $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2014, Nicky Dasmijn
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
#include <leap-motion/Leap.h>
|
||||
|
||||
#include "fsleapmaniptool.h"
|
||||
|
||||
#include "llviewerwindow.h"
|
||||
#include "llviewerobject.h"
|
||||
#include "lldrawable.h"
|
||||
#include "pipeline.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llviewershadermgr.h"
|
||||
#include "llselectmgr.h"
|
||||
|
||||
namespace nd
|
||||
{
|
||||
namespace leap
|
||||
{
|
||||
struct Finger
|
||||
{
|
||||
Finger( )
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
memset( this, 0, sizeof( Finger ) );
|
||||
}
|
||||
|
||||
bool isValid( ) const
|
||||
{ return mTimestamp > 0; }
|
||||
|
||||
U64 mId;
|
||||
U64 mTimestamp;
|
||||
|
||||
float mTip[3];
|
||||
float mDir[3];
|
||||
float mFromLast[3];
|
||||
float mLenFromLast;
|
||||
float mWidth;
|
||||
float mLength;
|
||||
U16 mPartner;
|
||||
LLViewerObject *mSelected;
|
||||
};
|
||||
|
||||
struct Fingers
|
||||
{
|
||||
Fingers( )
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
mTimestamp = 0;
|
||||
for( int i = 0; i < eMaxFingers; ++i )
|
||||
mFingers[ i ].clear();
|
||||
mStoredFingers = 0;
|
||||
}
|
||||
|
||||
Finger* getFinger( U64 aId )
|
||||
{
|
||||
for( int i = 0; i < mStoredFingers; ++i )
|
||||
{
|
||||
if( aId == mFingers[ i ].mId )
|
||||
return mFingers + i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Finger* at( U16 aIndex )
|
||||
{
|
||||
return &mFingers[ aIndex ];
|
||||
}
|
||||
|
||||
enum MAXFIGERS { eMaxFingers = 10 };
|
||||
|
||||
U64 mTimestamp;
|
||||
U16 mStoredFingers;
|
||||
Finger mFingers[eMaxFingers];
|
||||
};
|
||||
|
||||
|
||||
/* Do the rotation:
|
||||
| 0 0 -1 | | x |
|
||||
| -1 0 0 | * | y |
|
||||
| 0 1 0 | | z |
|
||||
|
||||
in this case it's just value flipping.
|
||||
*/
|
||||
static LLVector3 toAgentCS( float aX, float aY, float aZ )
|
||||
{
|
||||
return LLVector3( -aZ, -aX, aY );
|
||||
}
|
||||
|
||||
static float scaleY( float aIn )
|
||||
{
|
||||
return aIn - 150.f;
|
||||
}
|
||||
|
||||
static LLVector3 scaleToSL( LLVector3 const &aIn )
|
||||
{
|
||||
return aIn * 1.f/25.f;
|
||||
}
|
||||
|
||||
static void copy( Leap::Vector const &aFrom, float *aTo )
|
||||
{
|
||||
aTo[0] = aFrom[0];
|
||||
aTo[1] = aFrom[1];
|
||||
aTo[2] = aFrom[2];
|
||||
}
|
||||
|
||||
static float length( float const *aVec )
|
||||
{
|
||||
return sqrt( aVec[0]*aVec[0] + aVec[1]*aVec[1] + aVec[2]*aVec[2] );
|
||||
}
|
||||
|
||||
static float normalize( float *aVec )
|
||||
{
|
||||
float len = length( aVec );
|
||||
if( fabs( len ) > 0.0001f )
|
||||
{
|
||||
aVec[0] /= len;
|
||||
aVec[1] /= len;
|
||||
aVec[2] /= len;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = aVec[0] = aVec[1] = aVec[2] = 0.f;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
static float dot( float const *aVec1, float const *aVec2, bool aUnitVectors = true )
|
||||
{
|
||||
float alpha = aVec1[0]*aVec2[0] + aVec1[1]*aVec2[1] + aVec1[2]*aVec2[2];
|
||||
|
||||
if( !aUnitVectors )
|
||||
alpha /= ( length( aVec1 )*length(aVec2) );
|
||||
|
||||
return acos( alpha );
|
||||
}
|
||||
|
||||
static void subtract( float const *aLeft, float const *aRight, float *aOut )
|
||||
{
|
||||
aOut[0] = aLeft[0] - aRight[0];
|
||||
aOut[1] = aLeft[1] - aRight[1];
|
||||
aOut[2] = aLeft[2] - aRight[2];
|
||||
}
|
||||
|
||||
static void move( float const *aStart, float const *aDirecton, float aScale, float *aOut )
|
||||
{
|
||||
aOut[0] = aStart[0] + aDirecton[0]*aScale;
|
||||
aOut[1] = aStart[1] + aDirecton[1]*aScale;
|
||||
aOut[2] = aStart[2] + aDirecton[2]*aScale;
|
||||
|
||||
}
|
||||
|
||||
ManipTool::ManipTool()
|
||||
{
|
||||
mLastExaminedFrame = 0;
|
||||
mLastStoredFrame = 0;
|
||||
mNextRenderedFrame = 0;
|
||||
mTotalStoredFrames = 0;
|
||||
mFingersPerFrame = new Fingers[ eMaxKeptFrames ];
|
||||
}
|
||||
|
||||
ManipTool::~ManipTool()
|
||||
{
|
||||
delete []mFingersPerFrame;
|
||||
}
|
||||
|
||||
std::string ManipTool::getName()
|
||||
{
|
||||
return "Manipulation tool";
|
||||
}
|
||||
|
||||
std::string ManipTool::getDebugString()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
S32 ManipTool::getId()
|
||||
{
|
||||
return 11;
|
||||
}
|
||||
|
||||
void ManipTool::clearSelection()
|
||||
{
|
||||
//for( std::vector< LLViewerObject* >::iterator itr = mHighlighted.begin(); itr != mHighlighted.end(); ++itr )
|
||||
//{
|
||||
// LLViewerObject *pO = *itr;
|
||||
// LLSelectMgr::getInstance()->unhighlightObjectOnly( pO );
|
||||
//}
|
||||
//mHighlighted.clear();
|
||||
|
||||
LLSelectMgr::getInstance()->unhighlightAll();
|
||||
|
||||
}
|
||||
|
||||
void ManipTool::onLeapFrame( Leap::Frame const &aFrame )
|
||||
{
|
||||
if( (aFrame.timestamp() - mLastExaminedFrame ) < 16*1000 )
|
||||
return;
|
||||
|
||||
if( aFrame.hands().count() > 2 )
|
||||
return;
|
||||
|
||||
mLastExaminedFrame = aFrame.timestamp();
|
||||
U16 curFrame = getNextFrameNo( mLastStoredFrame );
|
||||
Fingers &curFingers = mFingersPerFrame[ curFrame ];
|
||||
U16 curFinger = 0;
|
||||
curFingers.clear();
|
||||
curFingers.mTimestamp = mLastExaminedFrame;
|
||||
|
||||
Leap::HandList hands = aFrame.hands();
|
||||
for( int i = 0; i < hands.count(); ++i )
|
||||
{
|
||||
for( int j = 0; j < hands[i].fingers().count(); ++j )
|
||||
{
|
||||
Leap::Finger oFinger( hands[i].fingers()[j] );
|
||||
|
||||
Finger &oF = curFingers.mFingers[ curFinger++ ];
|
||||
|
||||
oF.mId = oFinger.id();
|
||||
oF.mTimestamp = mLastExaminedFrame;
|
||||
copy( oFinger.direction(), oF.mDir );
|
||||
copy( oFinger.tipPosition(), oF.mTip );
|
||||
oF.mWidth = oFinger.width();
|
||||
oF.mLength = oFinger.length();
|
||||
}
|
||||
}
|
||||
|
||||
curFingers.mStoredFingers = curFinger;
|
||||
|
||||
if( mTotalStoredFrames > 0 )
|
||||
{
|
||||
Fingers &prevFingers = mFingersPerFrame[ mLastStoredFrame ];
|
||||
|
||||
for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
|
||||
{
|
||||
Finger &curFinger = curFingers.mFingers[i];
|
||||
Finger const *prevFinger = prevFingers.getFinger( curFinger.mId );
|
||||
if( !prevFinger )
|
||||
continue;
|
||||
|
||||
subtract( curFinger.mTip, prevFinger->mTip, curFinger.mFromLast );
|
||||
curFinger.mLenFromLast = normalize( curFinger.mFromLast );
|
||||
}
|
||||
}
|
||||
|
||||
mLastStoredFrame = curFrame;
|
||||
++mTotalStoredFrames;
|
||||
}
|
||||
|
||||
void ManipTool::onRenderFrame( Leap::Frame const &aFrame )
|
||||
{
|
||||
clearSelection();
|
||||
doSelect( );
|
||||
}
|
||||
|
||||
void ManipTool::findPartner( U16 aIndex )
|
||||
{
|
||||
Fingers &curFingers = mFingersPerFrame[ mNextRenderedFrame ];
|
||||
Finger &curFinger = curFingers.mFingers[ aIndex ];
|
||||
|
||||
if( !curFinger.mSelected )
|
||||
return;
|
||||
|
||||
for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
|
||||
{
|
||||
if( curFingers.mFingers[i].mSelected == curFinger.mSelected )
|
||||
{
|
||||
if( !curFingers.mFingers[i].mPartner )
|
||||
{
|
||||
curFingers.mFingers[i].mPartner = aIndex;
|
||||
curFinger.mPartner = i;
|
||||
}
|
||||
else
|
||||
curFinger.mSelected = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ManipTool::selectWithFinger( U16 aIndex )
|
||||
{
|
||||
Finger &oFinger = mFingersPerFrame[ mNextRenderedFrame ].mFingers[ aIndex ];
|
||||
GLfloat x( oFinger.mTip[0] );
|
||||
GLfloat y( scaleY( oFinger.mTip[1] ) );
|
||||
GLfloat z( oFinger.mTip[2] );
|
||||
LLVector3 oV1( scaleToSL( toAgentCS( x, y, z) ) );
|
||||
|
||||
x += oFinger.mDir[0] * oFinger.mLength;
|
||||
y += oFinger.mDir[1] * oFinger.mLength;
|
||||
z += oFinger.mDir[2] * oFinger.mLength;
|
||||
|
||||
LLVector3 oV2( scaleToSL( toAgentCS( x, y, z ) ) );
|
||||
|
||||
oV1 *= gAgentAvatarp->getRotationRegion();
|
||||
oV2 *= gAgentAvatarp->getRotationRegion();
|
||||
|
||||
oV1 += gAgentAvatarp->getPositionAgent( );
|
||||
oV2 += gAgentAvatarp->getPositionAgent( );
|
||||
|
||||
LLVector4a oF1,oF2;
|
||||
oF1.load3( oV1.mV );
|
||||
oF2.load3( oV2.mV );
|
||||
|
||||
S32 nFace(0);
|
||||
LLViewerObject *pHit = gPipeline.lineSegmentIntersectInWorld( oF1,oF2, FALSE, TRUE, &nFace );
|
||||
|
||||
if( pHit )
|
||||
oFinger.mSelected = pHit;
|
||||
|
||||
findPartner( aIndex );
|
||||
}
|
||||
|
||||
void ManipTool::doSelect()
|
||||
{
|
||||
Fingers &curFingers = mFingersPerFrame[ mNextRenderedFrame ];
|
||||
for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
|
||||
selectWithFinger( i );
|
||||
|
||||
for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
|
||||
{
|
||||
Finger &curFinger = curFingers.mFingers[ i ];
|
||||
if( curFinger.mPartner < i )
|
||||
continue;
|
||||
|
||||
if( !curFinger.mSelected )
|
||||
continue;
|
||||
|
||||
LLColor4 oCol( 0.f, 0.f, 1.f );
|
||||
if( curFinger.mPartner )
|
||||
oCol.set( 0.f, 1.f, 0.f );
|
||||
|
||||
LLSelectMgr::getInstance()->highlightObjectOnly( curFinger.mSelected, oCol );
|
||||
}
|
||||
}
|
||||
|
||||
void ManipTool::renderCone( Finger const &aFinger )
|
||||
{
|
||||
GLfloat x( aFinger.mTip[0] );
|
||||
GLfloat y( scaleY( aFinger.mTip[1] ) );
|
||||
GLfloat z( aFinger.mTip[2] );
|
||||
|
||||
LLVector3 oTip( scaleToSL( toAgentCS( x, y, z ) ) );
|
||||
|
||||
float dist = aFinger.mWidth*2;
|
||||
x -= aFinger.mDir[0] *dist;
|
||||
y -= aFinger.mDir[1] *dist;
|
||||
z -= aFinger.mDir[2] *dist;
|
||||
|
||||
LLVector3 oM( scaleToSL( toAgentCS( x, y, z) ) );
|
||||
float r = 0.25;
|
||||
int slices = 16;
|
||||
float alpha = (F_PI*2)/slices;
|
||||
|
||||
for( int i = 0; i < slices; ++i )
|
||||
{
|
||||
GLfloat cx = cos( alpha*i )*r;
|
||||
GLfloat cy = sin( alpha*i )*r;
|
||||
|
||||
GLfloat cx2 = cos( alpha*(i+1) )*r;
|
||||
GLfloat cy2 = sin( alpha*(i+1) )*r;
|
||||
|
||||
LLVector3 oV1( oM );
|
||||
LLVector3 oV2( oM );
|
||||
|
||||
oV1 += LLVector3( 0, cy, -cx );
|
||||
oV2 += LLVector3( 0, cy2, -cx2 );
|
||||
|
||||
gGL.vertex3fv( oTip.mV );
|
||||
gGL.vertex3fv( oV1.mV );
|
||||
|
||||
gGL.vertex3fv( oV1.mV );
|
||||
gGL.vertex3fv( oV2.mV );
|
||||
|
||||
gGL.vertex3fv( oV2.mV );
|
||||
gGL.vertex3fv( oTip.mV );
|
||||
}
|
||||
}
|
||||
|
||||
void ManipTool::renderMovementDirection( Finger const &aFinger )
|
||||
{
|
||||
float lenDir = aFinger.mLenFromLast;
|
||||
U16 prevFrame = getPrevFrameNo( mNextRenderedFrame );
|
||||
Finger *prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
|
||||
|
||||
while( prevFinger && prevFinger->mTimestamp < aFinger.mTimestamp && (aFinger.mTimestamp - prevFinger->mTimestamp ) < getMaxBacktrackMicroseconds() )
|
||||
{
|
||||
float alpha = dot( aFinger.mFromLast, prevFinger->mFromLast );
|
||||
if( alpha > F_PI/18 )
|
||||
break;
|
||||
|
||||
lenDir += prevFinger->mLenFromLast;
|
||||
|
||||
prevFrame = getPrevFrameNo( prevFrame );
|
||||
prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
|
||||
}
|
||||
#if 0
|
||||
float vec[3];
|
||||
bool haveVec( false );
|
||||
while( aFinger.mTimestamp > mFingersPerFrame[ prevFrame ].mTimestamp &&
|
||||
(aFinger.mTimestamp > mFingersPerFrame[ prevFrame ].mTimestamp) < getMaxBacktrackMicroseconds() )
|
||||
{
|
||||
Finger *pFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
|
||||
|
||||
if( pFinger )
|
||||
{
|
||||
if( !haveVec )
|
||||
{
|
||||
subtract( aFinger.mTip, pFinger->mTip, vec );
|
||||
lenDir = normalize( vec );
|
||||
haveVec = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
float vec2[3];
|
||||
|
||||
subtract( aFinger.mTip, pFinger->mTip, vec2 );
|
||||
float lenDir2 = normalize( vec );
|
||||
|
||||
float alpha = dot( vec, vec2 );
|
||||
if( alpha > F_PI/18 )
|
||||
break;
|
||||
lenDir += lenDir2;
|
||||
}
|
||||
}
|
||||
prevFrame = getPrevFrameNo( prevFrame );
|
||||
}
|
||||
#endif
|
||||
|
||||
if( lenDir > 0 )
|
||||
{
|
||||
GLfloat x( aFinger.mTip[0] );
|
||||
GLfloat y( scaleY( aFinger.mTip[1] ) );
|
||||
GLfloat z( aFinger.mTip[2] );
|
||||
|
||||
LLVector3 oStart( scaleToSL( toAgentCS( x, y, z ) ) );
|
||||
|
||||
x -= aFinger.mFromLast[0] *lenDir;
|
||||
y -= aFinger.mFromLast[1] *lenDir;
|
||||
z -= aFinger.mFromLast[2] *lenDir;
|
||||
|
||||
LLVector3 oEnd( scaleToSL( toAgentCS( x, y, z) ) );
|
||||
gGL.vertex3fv( oStart.mV );
|
||||
gGL.vertex3fv( oEnd.mV );
|
||||
}
|
||||
}
|
||||
|
||||
void ManipTool::renderMovementAngle( Finger const &aFinger, U16 aIndex )
|
||||
{
|
||||
if( !aFinger.mPartner || aFinger.mPartner < aIndex )
|
||||
return;
|
||||
|
||||
U16 prevFrame = getPrevFrameNo( mNextRenderedFrame );
|
||||
Finger *prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
|
||||
U16 startFrame(mNextRenderedFrame);
|
||||
|
||||
while( prevFinger &&
|
||||
prevFinger->mTimestamp < aFinger.mTimestamp && (aFinger.mTimestamp - prevFinger->mTimestamp ) < getMaxBacktrackMicroseconds() &&
|
||||
prevFinger->mPartner )
|
||||
{
|
||||
startFrame = prevFrame;
|
||||
prevFrame = getPrevFrameNo( prevFrame );
|
||||
prevFinger = mFingersPerFrame[ prevFrame ].getFinger( aFinger.mId );
|
||||
}
|
||||
|
||||
if( mNextRenderedFrame == startFrame )
|
||||
return;
|
||||
|
||||
Finger const *startFinger( mFingersPerFrame[ startFrame ].getFinger( aFinger.mId ) );
|
||||
Finger const *startPartner( mFingersPerFrame[ startFrame ].at( startFinger->mPartner ) );
|
||||
|
||||
Finger const *endFinger( &aFinger );
|
||||
Finger const *endPartner( mFingersPerFrame[ startFrame ].at( endFinger->mPartner ) );
|
||||
|
||||
float vecStart[3], vecEnd[3];
|
||||
subtract( startFinger->mTip, startPartner->mTip, vecStart );
|
||||
subtract( endFinger->mTip, endPartner->mTip, vecEnd );
|
||||
|
||||
float lenStart = normalize( vecStart );
|
||||
float lenEnd = normalize( vecEnd );
|
||||
|
||||
float radius = lenStart>lenEnd?lenStart:lenEnd;
|
||||
|
||||
float alpha = dot( vecStart, vecEnd );
|
||||
|
||||
float ptStart[3], ptEnd[3];
|
||||
move( startFinger->mTip, vecStart, radius/2, ptStart );
|
||||
|
||||
ptEnd[0] = ptStart[0]*cos(alpha) - ptStart[1]*sin(alpha);
|
||||
ptEnd[1] = ptStart[1]*cos(alpha) + ptStart[0]*sin(alpha);
|
||||
ptEnd[2] = ptStart[2];
|
||||
|
||||
gGL.vertex3fv( ptStart );
|
||||
gGL.vertex3fv( ptEnd );
|
||||
}
|
||||
|
||||
void ManipTool::renderFinger( Finger const &aFinger, U16 aIndex )
|
||||
{
|
||||
if( aFinger.mPartner )
|
||||
gGL.diffuseColor4f( 0.f, 1.0f, 0.0f, 1.f);
|
||||
else if( aFinger.mSelected )
|
||||
gGL.diffuseColor4f( 0.f, 0.0f, 1.0f, 1.f);
|
||||
else
|
||||
gGL.diffuseColor4f( 1.f, 1.0f, 1.0f, 1.f);
|
||||
|
||||
renderCone( aFinger );
|
||||
renderMovementDirection( aFinger );
|
||||
renderMovementAngle( aFinger, aIndex );
|
||||
}
|
||||
|
||||
void ManipTool::render()
|
||||
{
|
||||
LLGLEnable blend(GL_BLEND);
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.pushMatrix();
|
||||
gGL.begin(LLRender::LINES);
|
||||
|
||||
LLQuaternion rot = gAgentAvatarp->getRotationRegion();
|
||||
LLVector3 pos = gAgentAvatarp->getPositionAgent();
|
||||
|
||||
gGL.translatef( pos.mV[0], pos.mV[1], pos.mV[2] );
|
||||
gGL.multMatrix( (GLfloat*) gAgentAvatarp->getRotationRegion().getMatrix4().mMatrix );
|
||||
|
||||
gGL.begin(LLRender::LINES);
|
||||
|
||||
Fingers &curFingers = mFingersPerFrame[ mNextRenderedFrame ];
|
||||
for( U16 i = 0; i < curFingers.mStoredFingers; ++i )
|
||||
{
|
||||
Finger &curFinger = curFingers.mFingers[ i ];
|
||||
renderFinger( curFinger, i );
|
||||
}
|
||||
|
||||
gGL.end();
|
||||
|
||||
gGL.popMatrix();
|
||||
mNextRenderedFrame = mLastStoredFrame;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
/**
|
||||
* $LicenseInfo:firstyear=2014&license=fsviewerlgpl$
|
||||
* Phoenix Firestorm Viewer Source Code
|
||||
* Copyright (C) 2014, Nicky Dasmijn
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
|
||||
* http://www.firestormviewer.org
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef NDLEAPMANIPTOOL_H
|
||||
#define NDLEAPMANIPTOOL_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fsleaptool.h"
|
||||
#include <string.h>
|
||||
|
||||
class LLViewerObject;
|
||||
|
||||
namespace nd
|
||||
{
|
||||
namespace leap
|
||||
{
|
||||
struct Finger;
|
||||
struct Fingers;
|
||||
class ManipTool: public Tool
|
||||
{
|
||||
enum EMAXKEPTFRAMES{ eMaxKeptFrames = 120 };
|
||||
|
||||
inline U16 getNextFrameNo( U16 aFrame ) const
|
||||
{ return aFrame==eMaxKeptFrames-1?0:aFrame+1; }
|
||||
inline U16 getPrevFrameNo( U16 aFrame ) const
|
||||
{ return aFrame==0?eMaxKeptFrames-1:aFrame-1; }
|
||||
|
||||
inline U32 getMaxBacktrackMicroseconds() const
|
||||
{ return 1500*1000; }
|
||||
|
||||
U64 mLastExaminedFrame;
|
||||
U16 mLastStoredFrame;
|
||||
U16 mNextRenderedFrame;
|
||||
U64 mTotalStoredFrames;
|
||||
|
||||
Fingers *mFingersPerFrame;
|
||||
|
||||
void clearSelection();
|
||||
void doSelect();
|
||||
|
||||
void selectWithFinger( U16 aIndex );
|
||||
void findPartner( U16 aIndex );
|
||||
|
||||
void renderCone( Finger const & );
|
||||
void renderMovementDirection( Finger const & );
|
||||
void renderMovementAngle( Finger const &, U16 aIndex );
|
||||
void renderFinger( Finger const&, U16 aIndex );
|
||||
|
||||
public:
|
||||
ManipTool();
|
||||
virtual ~ManipTool();
|
||||
|
||||
virtual void onLeapFrame( Leap::Frame const& );
|
||||
virtual void onRenderFrame( Leap::Frame const& );
|
||||
virtual void render();
|
||||
virtual std::string getDebugString();
|
||||
virtual std::string getName();
|
||||
virtual S32 getId();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -25,11 +25,14 @@
|
|||
|
||||
#include "fsleaptool.h"
|
||||
#include "fsleapexampletool.h"
|
||||
#include "fsleapmaniptool.h"
|
||||
|
||||
nd::leap::Tool* nd::leap::constructTool( S32 aTool )
|
||||
{
|
||||
if( 111 == aTool )
|
||||
return new nd::leap::ExampleTool();
|
||||
if( 11 == aTool )
|
||||
return new nd::leap::ManipTool();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -30,6 +30,7 @@
|
|||
namespace Leap
|
||||
{
|
||||
class HandList;
|
||||
class Frame;
|
||||
}
|
||||
|
||||
namespace nd
|
||||
|
|
@ -41,7 +42,8 @@ namespace nd
|
|||
public:
|
||||
virtual ~Tool(){}
|
||||
|
||||
virtual void onFrame( Leap::HandList const& ) = 0;
|
||||
virtual void onLeapFrame( Leap::Frame const& ) = 0;
|
||||
virtual void onRenderFrame( Leap::Frame const& ) = 0;
|
||||
virtual void render() = 0;
|
||||
virtual std::string getDebugString() = 0;
|
||||
virtual std::string getName() = 0;
|
||||
|
|
|
|||
|
|
@ -29,10 +29,7 @@
|
|||
|
||||
#include "fsnearbychathub.h"
|
||||
#include "fsnearbychatcontrol.h"
|
||||
// <FS:Ansariel> [FS communication UI]
|
||||
//#include "llfloaternearbychat.h"
|
||||
#include "fsfloaternearbychat.h"
|
||||
// </FS:Ansariel> [FS communication UI]
|
||||
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerwindow.h"
|
||||
|
|
@ -159,12 +156,12 @@ void send_chat_from_viewer(std::string utf8_out_text, EChatType type, S32 channe
|
|||
U32 total = utf8_out_text.length();
|
||||
|
||||
// Don't break null messages
|
||||
if(total == 0)
|
||||
if (total == 0)
|
||||
{
|
||||
really_send_chat_from_viewer(utf8_out_text, type, channel);
|
||||
}
|
||||
|
||||
while(pos < total)
|
||||
while (pos < total)
|
||||
{
|
||||
U32 next_split = split;
|
||||
|
||||
|
|
@ -222,11 +219,13 @@ void really_send_chat_from_viewer(std::string utf8_out_text, EChatType type, S32
|
|||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
||||
// <FS:ND> gMessageSystem can be 0, not sure how it is exactly to reproduce, maybe during viewer shutdown?
|
||||
if( !msg )
|
||||
if (!msg)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:ND>
|
||||
|
||||
if(channel >= 0)
|
||||
if (channel >= 0)
|
||||
{
|
||||
msg->newMessageFast(_PREHASH_ChatFromViewer);
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
|
|
@ -270,10 +269,7 @@ void FSNearbyChat::sendChatFromViewer(const LLWString& wtext, EChatType type, BO
|
|||
gSavedSettings.getBOOL("FSShowChatChannel") &&
|
||||
(channel == 0))
|
||||
{
|
||||
// <FS:Ansariel> [FS communication UI]
|
||||
//channel = (S32)(LLFloaterNearbyChat::getInstance()->getChild<LLSpinCtrl>("ChatChannel")->get());
|
||||
channel = (S32)(FSFloaterNearbyChat::getInstance()->getChild<LLSpinCtrl>("ChatChannel")->get());
|
||||
// </FS:Ansariel> [FS communication UI]
|
||||
}
|
||||
std::string utf8_out_text = wstring_to_utf8str(out_text);
|
||||
std::string utf8_text = wstring_to_utf8str(wtext);
|
||||
|
|
@ -304,22 +300,22 @@ void FSNearbyChat::sendChatFromViewer(const LLWString& wtext, EChatType type, BO
|
|||
{
|
||||
if (type == CHAT_TYPE_WHISPER)
|
||||
{
|
||||
lldebugs << "You whisper " << utf8_text << llendl;
|
||||
LL_DEBUGS("FSNearbyChatHub") << "You whisper " << utf8_text << LL_ENDL;
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_WHISPER, ANIM_REQUEST_START);
|
||||
}
|
||||
else if (type == CHAT_TYPE_NORMAL)
|
||||
{
|
||||
lldebugs << "You say " << utf8_text << llendl;
|
||||
LL_DEBUGS("FSNearbyChatHub") << "You say " << utf8_text << LL_ENDL;
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_TALK, ANIM_REQUEST_START);
|
||||
}
|
||||
else if (type == CHAT_TYPE_SHOUT)
|
||||
{
|
||||
lldebugs << "You shout " << utf8_text << llendl;
|
||||
LL_DEBUGS("FSNearbyChatHub") << "You shout " << utf8_text << LL_ENDL;
|
||||
gAgent.sendAnimationRequest(ANIM_AGENT_SHOUT, ANIM_REQUEST_START);
|
||||
}
|
||||
else
|
||||
{
|
||||
llinfos << "send_chat_from_viewer() - invalid volume" << llendl;
|
||||
LL_INFOS("FSNearbyChatHub") << "send_chat_from_viewer() - invalid volume" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -351,14 +347,20 @@ EChatType FSNearbyChat::processChatTypeTriggers(EChatType type, std::string &str
|
|||
|
||||
// It's to remove space after trigger name
|
||||
if (length > trigger_length && str[trigger_length] == ' ')
|
||||
{
|
||||
trigger_length++;
|
||||
}
|
||||
|
||||
str = str.substr(trigger_length, length);
|
||||
|
||||
if (CHAT_TYPE_NORMAL == type)
|
||||
{
|
||||
return sChatTypeTriggers[n].type;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -392,8 +394,10 @@ LLWString FSNearbyChat::stripChannelNumber(const LLWString &mesg, S32* channel)
|
|||
S32 pos = 0;
|
||||
//<FS:TS> FIRE-11412: Allow saying /-channel for negative numbers
|
||||
// (this code was here; documenting for the future)
|
||||
if(mesg[1] == '-')
|
||||
if (mesg[1] == '-')
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
//</FS:TS> FIRE-11412
|
||||
|
||||
// Copy the channel number into a string
|
||||
|
|
@ -401,16 +405,16 @@ LLWString FSNearbyChat::stripChannelNumber(const LLWString &mesg, S32* channel)
|
|||
llwchar c;
|
||||
do
|
||||
{
|
||||
c = mesg[pos+1];
|
||||
c = mesg[pos + 1];
|
||||
channel_string.push_back(c);
|
||||
pos++;
|
||||
}
|
||||
while(c && pos < 64 && LLStringOps::isDigit(c));
|
||||
while (c && pos < 64 && LLStringOps::isDigit(c));
|
||||
|
||||
// Move the pointer forward to the first non-whitespace char
|
||||
// Check isspace before looping, so we can handle "/33foo"
|
||||
// as well as "/33 foo"
|
||||
while(c && iswspace(c))
|
||||
while (c && iswspace(c))
|
||||
{
|
||||
c = mesg[pos+1];
|
||||
pos++;
|
||||
|
|
@ -419,8 +423,10 @@ LLWString FSNearbyChat::stripChannelNumber(const LLWString &mesg, S32* channel)
|
|||
sLastSpecialChatChannel = strtol(wstring_to_utf8str(channel_string).c_str(), NULL, 10);
|
||||
//<FS:TS> FIRE-11412: Allow saying /-channel for negative numbers
|
||||
// (this code was here; documenting for the future)
|
||||
if(mesg[1] == '-')
|
||||
if (mesg[1] == '-')
|
||||
{
|
||||
sLastSpecialChatChannel = -sLastSpecialChatChannel;
|
||||
}
|
||||
//</FS:TS> FIRE-11412
|
||||
*channel = sLastSpecialChatChannel;
|
||||
return mesg.substr(pos, mesg.length() - pos);
|
||||
|
|
@ -433,13 +439,13 @@ LLWString FSNearbyChat::stripChannelNumber(const LLWString &mesg, S32* channel)
|
|||
}
|
||||
}
|
||||
|
||||
void FSNearbyChat::sendChat(LLWString text,EChatType type)
|
||||
void FSNearbyChat::sendChat(LLWString text, EChatType type)
|
||||
{
|
||||
LLWStringUtil::trim(text);
|
||||
|
||||
if (!text.empty())
|
||||
{
|
||||
if(type == CHAT_TYPE_OOC)
|
||||
if (type == CHAT_TYPE_OOC)
|
||||
{
|
||||
std::string tempText = wstring_to_utf8str( text );
|
||||
tempText = gSavedSettings.getString("FSOOCPrefix") + " " + tempText + " " + gSavedSettings.getString("FSOOCPostfix");
|
||||
|
|
@ -455,10 +461,7 @@ void FSNearbyChat::sendChat(LLWString text,EChatType type)
|
|||
gSavedSettings.getBOOL("FSShowChatChannel") &&
|
||||
(channel == 0))
|
||||
{
|
||||
// <FS:Ansariel> [FS communication UI]
|
||||
//channel = (S32)(LLFloaterNearbyChat::getInstance()->getChild<LLSpinCtrl>("ChatChannel")->get());
|
||||
channel = (S32)(FSFloaterNearbyChat::getInstance()->getChild<LLSpinCtrl>("ChatChannel")->get());
|
||||
// </FS:Ansariel> [FS communication UI]
|
||||
}
|
||||
|
||||
std::string utf8text = wstring_to_utf8str(text);
|
||||
|
|
@ -481,10 +484,14 @@ void FSNearbyChat::sendChat(LLWString text,EChatType type)
|
|||
utf8_revised_text = utf8str_trim(utf8_revised_text);
|
||||
|
||||
EChatType nType;
|
||||
if(type == CHAT_TYPE_OOC)
|
||||
if (type == CHAT_TYPE_OOC)
|
||||
{
|
||||
nType = CHAT_TYPE_NORMAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
nType = type;
|
||||
}
|
||||
|
||||
type = processChatTypeTriggers(nType, utf8_revised_text);
|
||||
|
||||
|
|
@ -502,17 +509,19 @@ void FSNearbyChat::sendChat(LLWString text,EChatType type)
|
|||
void FSNearbyChat::registerChatBar(FSNearbyChatControl* chatBar)
|
||||
{
|
||||
// TODO: make this a Param option "is_default"
|
||||
if(!mDefaultChatBar || chatBar->getName()=="default_chat_bar")
|
||||
if (!mDefaultChatBar || chatBar->getName() == "default_chat_bar")
|
||||
{
|
||||
mDefaultChatBar=chatBar;
|
||||
}
|
||||
}
|
||||
|
||||
// unhide the default nearby chat bar on request (pressing Enter or a letter key)
|
||||
void FSNearbyChat::showDefaultChatBar(BOOL visible,const char* text) const
|
||||
void FSNearbyChat::showDefaultChatBar(BOOL visible, const char* text) const
|
||||
{
|
||||
if(!mDefaultChatBar)
|
||||
if (!mDefaultChatBar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// change settings control to signal button state
|
||||
gSavedSettings.setBOOL("MainChatbarVisible",visible);
|
||||
|
|
@ -522,7 +531,7 @@ void FSNearbyChat::showDefaultChatBar(BOOL visible,const char* text) const
|
|||
mDefaultChatBar->setFocus(visible);
|
||||
|
||||
// <FS:KC> Fix for bad edge snapping
|
||||
if(visible)
|
||||
if (visible)
|
||||
{
|
||||
gFloaterView->setSnapOffsetChatBar(mDefaultChatBar->getRect().getHeight() + MAGIC_CHAT_BAR_PAD);
|
||||
}
|
||||
|
|
@ -531,10 +540,12 @@ void FSNearbyChat::showDefaultChatBar(BOOL visible,const char* text) const
|
|||
gFloaterView->setSnapOffsetChatBar(0);
|
||||
}
|
||||
|
||||
if(!text)
|
||||
if (!text)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(mDefaultChatBar->getText().empty())
|
||||
if (mDefaultChatBar->getText().empty())
|
||||
{
|
||||
mDefaultChatBar->setText(LLStringExplicit(text));
|
||||
mDefaultChatBar->setCursorToEnd();
|
||||
|
|
@ -543,23 +554,29 @@ void FSNearbyChat::showDefaultChatBar(BOOL visible,const char* text) const
|
|||
}
|
||||
|
||||
// We want to know which nearby chat editor (if any) currently has focus
|
||||
void FSNearbyChat::setFocusedInputEditor(FSNearbyChatControl* inputEditor,BOOL focus)
|
||||
void FSNearbyChat::setFocusedInputEditor(FSNearbyChatControl* inputEditor, BOOL focus)
|
||||
{
|
||||
if(focus)
|
||||
mFocusedInputEditor=inputEditor;
|
||||
if (focus)
|
||||
{
|
||||
mFocusedInputEditor = inputEditor;
|
||||
}
|
||||
|
||||
// only remove focus if the request came from the previously active input editor
|
||||
// to avoid races
|
||||
else if(mFocusedInputEditor==inputEditor)
|
||||
mFocusedInputEditor=NULL;
|
||||
else if (mFocusedInputEditor == inputEditor)
|
||||
{
|
||||
mFocusedInputEditor = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// for the "arrow key moves avatar when chat is empty" hack in llviewerwindow.cpp
|
||||
// and the hide chat bar feature in mouselook in llagent.cpp
|
||||
BOOL FSNearbyChat::defaultChatBarIsIdle() const
|
||||
{
|
||||
if(mFocusedInputEditor && mFocusedInputEditor->getName()=="default_chat_bar")
|
||||
if (mFocusedInputEditor && mFocusedInputEditor->getName() == "default_chat_bar")
|
||||
{
|
||||
return mFocusedInputEditor->getText().empty();
|
||||
}
|
||||
|
||||
// if any other chat bar has focus, report "idle", because they're not the default
|
||||
return TRUE;
|
||||
|
|
@ -568,8 +585,10 @@ BOOL FSNearbyChat::defaultChatBarIsIdle() const
|
|||
// for the "arrow key moves avatar when chat is empty" hack in llviewerwindow.cpp
|
||||
BOOL FSNearbyChat::defaultChatBarHasFocus() const
|
||||
{
|
||||
if(mFocusedInputEditor && mFocusedInputEditor->getName()=="default_chat_bar")
|
||||
if (mFocusedInputEditor && mFocusedInputEditor->getName() == "default_chat_bar")
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -579,9 +598,9 @@ class LLChatCommandHandler : public LLCommandHandler
|
|||
{
|
||||
public:
|
||||
// not allowed from outside the app
|
||||
LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { }
|
||||
LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_THROTTLE) { }
|
||||
|
||||
// Your code here
|
||||
// Your code here
|
||||
bool handle(const LLSD& tokens, const LLSD& query_map,
|
||||
LLMediaCtrl* web)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -377,7 +377,7 @@ void FSPanelProfileSecondLife::onOpen(const LLSD& key)
|
|||
|
||||
if (!own_profile)
|
||||
{
|
||||
mVoiceStatus = LLAvatarActions::canCall();
|
||||
mVoiceStatus = LLAvatarActions::canCall() && (LLAvatarActions::isFriend(avatar_id) ? LLAvatarTracker::instance().isBuddyOnline(avatar_id) : TRUE);
|
||||
drop_target->setAgentID( avatar_id );
|
||||
updateOnlineStatus();
|
||||
}
|
||||
|
|
@ -711,7 +711,7 @@ void FSPanelProfileSecondLife::onChange(EStatusType status, const std::string &c
|
|||
return;
|
||||
}
|
||||
|
||||
mVoiceStatus = LLAvatarActions::canCall();
|
||||
mVoiceStatus = LLAvatarActions::canCall() && (LLAvatarActions::isFriend(getAvatarId()) ? LLAvatarTracker::instance().isBuddyOnline(getAvatarId()) : TRUE);
|
||||
}
|
||||
|
||||
void FSPanelProfileSecondLife::setAvatarId(const LLUUID& id)
|
||||
|
|
|
|||
|
|
@ -453,6 +453,7 @@ NVIDIA GT 820M .*NVIDIA .*GT *82[0-9]M.* 3 1 0 4.4
|
|||
NVIDIA GT 830M .*NVIDIA .*GT *83[0-9]M.* 3 1 0 4.4
|
||||
NVIDIA GT 840M .*NVIDIA .*GT *84[0-9]M.* 3 1 0 4.4
|
||||
NVIDIA GT 850M .*NVIDIA .*GT *85[0-9]M.* 3 1 0 4.4
|
||||
NVIDIA GTX 850M .*NVIDIA .*GTX *85[0-9]M.* 5 1 0 4.4
|
||||
NVIDIA GTX 860M .*NVIDIA .*GTX *86[0-9]M.* 5 1 0 4.4
|
||||
NVIDIA GTX 870M .*NVIDIA .*GTX *87[0-9]M.* 5 1 0 4.4
|
||||
NVIDIA GTX 880M .*NVIDIA .*GTX *88[0-9]M.* 5 1 0 4.4
|
||||
|
|
@ -543,11 +544,11 @@ NVIDIA GeForce 4 Go .*NVIDIA .*GeForce ?4.*Go.* 0 0 0 0
|
|||
NVIDIA GeForce 4 MX .*NVIDIA .*GeForce ?4 MX.* 0 0 0 0
|
||||
NVIDIA GeForce 4 PCX .*NVIDIA .*GeForce ?4 PCX.* 0 0 0 0
|
||||
NVIDIA GeForce 4 Ti .*NVIDIA .*GeForce ?4 Ti.* 0 0 0 0
|
||||
NVIDIA GeForce 6100 .*NVIDIA .*GeForce 61.* 0 0 1 2.1
|
||||
NVIDIA GeForce 6200 .*NVIDIA .*GeForce 62.* 0 0 1 2.1
|
||||
NVIDIA GeForce 6500 .*NVIDIA .*GeForce 65.* 0 0 1 2.1
|
||||
NVIDIA GeForce 6600 .*NVIDIA .*GeForce 66.* 2 1 1 2.1
|
||||
NVIDIA GeForce 6700 .*NVIDIA .*GeForce 67.* 2 1 1 2.1
|
||||
NVIDIA GeForce 6100 .*NVIDIA .*GeForce 61.* 0 1 1 2.1
|
||||
NVIDIA GeForce 6200 .*NVIDIA .*GeForce 62.* 0 1 1 2.1
|
||||
NVIDIA GeForce 6500 .*NVIDIA .*GeForce 65.* 0 1 1 2.1
|
||||
NVIDIA GeForce 6600 .*NVIDIA .*GeForce 66.* 1 1 1 2.1
|
||||
NVIDIA GeForce 6700 .*NVIDIA .*GeForce 67.* 1 1 1 2.1
|
||||
NVIDIA GeForce 6800 .*NVIDIA .*GeForce 68.* 1 1 1 2.1
|
||||
NVIDIA GeForce 7000 .*NVIDIA .*GeForce 70.* 1 1 1 2.1
|
||||
NVIDIA GeForce 7100 .*NVIDIA .*GeForce 71.* 1 1 1 2.1
|
||||
|
|
@ -665,4 +666,4 @@ Apple Software Renderer Apple.*Software Renderer.* 0 0 0 0
|
|||
Oracle VirtualBox.* 0 1 1 2.1
|
||||
Humper Humper.* 0 1 1 2.1
|
||||
PowerVR SGX545 .*PowerVR SGX.* 1 1 1 3
|
||||
ATI GeForce Lulz .*ATI.*GeForce.* 0 0 0 0
|
||||
ATI GeForce Lulz .*ATI .*GeForce.* 0 0 0 0
|
||||
|
|
|
|||
|
|
@ -46,13 +46,13 @@ candle -dPROGRAM_FILE=%PROGRAM_FILE% -dPROGRAM_VERSION=%PROGRAM_VERSION% -dCHANN
|
|||
|
||||
light -sval -ext WixUIExtension -cultures:en-us -out %VIEWER_BUILDDIR%\%OUTPUT_FILE%.msi firestorm.wixobj character.wixobj fonts.wixobj fs_resources.wixobj llplugin.wixobj registry.wixobj
|
||||
|
||||
signtool.exe sign /n Phoenix /d Firestorm /du http://www.phoenixviewer.com %VIEWER_BUILDDIR%\%OUTPUT_FILE%.msi
|
||||
signtool.exe sign /n Phoenix /d Firestorm /du http://www.phoenixviewer.com /t http://timestamp.verisign.com/scripts/timstamp.dll %VIEWER_BUILDDIR%\%OUTPUT_FILE%.msi
|
||||
|
||||
candle -dMAJOR=%MAJOR% -dMINOR=%MINOR% -dHGCHANGE=%HGCHANGE% -dWIX_SOURCEDIR=%~dp0 -dFS_MSI_FILE=%VIEWER_BUILDDIR%\%OUTPUT_FILE%.msi -ext WixBalExtension %~dp0\installer.wxs
|
||||
light -sval -ext WixBalExtension -out %VIEWER_BUILDDIR%\%OUTPUT_FILE%.exe installer.wixobj
|
||||
|
||||
insignia -ib %VIEWER_BUILDDIR%\%OUTPUT_FILE%.exe -o engine.exe
|
||||
signtool.exe sign /n Phoenix /d Firestorm /du http://www.phoenixviewer.com engine.exe
|
||||
signtool.exe sign /n Phoenix /d Firestorm /du http://www.phoenixviewer.com /t http://timestamp.verisign.com/scripts/timstamp.dll engine.exe
|
||||
insignia -ab engine.exe %VIEWER_BUILDDIR%\%OUTPUT_FILE%.exe -o %VIEWER_BUILDDIR%\%OUTPUT_FILE%.exe
|
||||
|
||||
signtool.exe sign /n Phoenix /d Firestorm /du http://www.phoenixviewer.com %VIEWER_BUILDDIR%\%OUTPUT_FILE%.exe
|
||||
signtool.exe sign /n Phoenix /d Firestorm /du http://www.phoenixviewer.com /t http://timestamp.verisign.com/scripts/timstamp.dll %VIEWER_BUILDDIR%\%OUTPUT_FILE%.exe
|
||||
|
|
|
|||
|
|
@ -3404,7 +3404,10 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO
|
|||
|
||||
BOOL LLAgent::canJoinGroups() const
|
||||
{
|
||||
return mGroups.count() < gMaxAgentGroups;
|
||||
// [CR] FIRE-12229
|
||||
//return mGroups.count() < gMaxAgentGroups;
|
||||
return ((!gMaxAgentGroups) || (mGroups.count() < gMaxAgentGroups));
|
||||
// [/CR]
|
||||
}
|
||||
|
||||
LLQuaternion LLAgent::getHeadRotation()
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@
|
|||
#include "lluictrlfactory.h"
|
||||
#include "lltrans.h"
|
||||
|
||||
#include "fscommon.h"
|
||||
|
||||
using namespace LLOldEvents;
|
||||
|
||||
// helper functions
|
||||
|
|
@ -171,8 +173,11 @@ void LLPanelGroups::reset()
|
|||
{
|
||||
group_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
|
||||
}
|
||||
getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
|
||||
getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",gMaxAgentGroups));
|
||||
// [CR] FIRE-12229
|
||||
//getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
|
||||
//getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",gMaxAgentGroups));
|
||||
getChild<LLUICtrl>("groupcount")->setValue(FSCommon::populateGroupCount());
|
||||
// [/CR]
|
||||
|
||||
init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID());
|
||||
enableButtons();
|
||||
|
|
@ -182,8 +187,11 @@ BOOL LLPanelGroups::postBuild()
|
|||
{
|
||||
childSetCommitCallback("group list", onGroupList, this);
|
||||
|
||||
getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
|
||||
getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",gMaxAgentGroups));
|
||||
// [CR] FIRE-12229
|
||||
//getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
|
||||
//getChild<LLUICtrl>("groupcount")->setTextArg("[MAX]", llformat("%d",gMaxAgentGroups));
|
||||
getChild<LLUICtrl>("groupcount")->setValue(FSCommon::populateGroupCount());
|
||||
// [/CR]
|
||||
|
||||
LLScrollListCtrl *list = getChild<LLScrollListCtrl>("group list");
|
||||
if (list)
|
||||
|
|
|
|||
|
|
@ -392,8 +392,9 @@ BOOL LLPanelLandGeneral::postBuild()
|
|||
mContentRating = getChild<LLTextBox>("ContentRatingText");
|
||||
mLandType = getChild<LLTextBox>("LandTypeText");
|
||||
|
||||
mBtnProfile = getChild<LLButton>("Profile...");
|
||||
mBtnProfile->setClickedCallback(boost::bind(&LLPanelLandGeneral::onClickProfile, this));
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//mBtnProfile = getChild<LLButton>("Profile...");
|
||||
//mBtnProfile->setClickedCallback(boost::bind(&LLPanelLandGeneral::onClickProfile, this));
|
||||
|
||||
|
||||
mTextGroupLabel = getChild<LLTextBox>("Group:");
|
||||
|
|
@ -540,8 +541,9 @@ void LLPanelLandGeneral::refresh()
|
|||
mTextOwner->setText(LLStringUtil::null);
|
||||
mContentRating->setText(LLStringUtil::null);
|
||||
mLandType->setText(LLStringUtil::null);
|
||||
mBtnProfile->setLabel(getString("profile_text"));
|
||||
mBtnProfile->setEnabled(FALSE);
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//mBtnProfile->setLabel(getString("profile_text"));
|
||||
//mBtnProfile->setEnabled(FALSE);
|
||||
|
||||
mTextClaimDate->setText(LLStringUtil::null);
|
||||
mTextGroup->setText(LLStringUtil::null);
|
||||
|
|
@ -603,7 +605,8 @@ void LLPanelLandGeneral::refresh()
|
|||
mTextSalePending->setEnabled(FALSE);
|
||||
mTextOwner->setText(getString("public_text"));
|
||||
mTextOwner->setEnabled(FALSE);
|
||||
mBtnProfile->setEnabled(FALSE);
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//mBtnProfile->setEnabled(FALSE);
|
||||
mTextClaimDate->setText(LLStringUtil::null);
|
||||
mTextClaimDate->setEnabled(FALSE);
|
||||
mTextGroup->setText(getString("none_text"));
|
||||
|
|
@ -633,12 +636,14 @@ void LLPanelLandGeneral::refresh()
|
|||
mTextOwner->setEnabled(TRUE);
|
||||
|
||||
// We support both group and personal profiles
|
||||
mBtnProfile->setEnabled(TRUE);
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//mBtnProfile->setEnabled(TRUE);
|
||||
|
||||
if (parcel->getGroupID().isNull())
|
||||
{
|
||||
// Not group owned, so "Profile"
|
||||
mBtnProfile->setLabel(getString("profile_text"));
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//mBtnProfile->setLabel(getString("profile_text"));
|
||||
|
||||
mTextGroup->setText(getString("none_text"));
|
||||
mTextGroup->setEnabled(FALSE);
|
||||
|
|
@ -646,7 +651,8 @@ void LLPanelLandGeneral::refresh()
|
|||
else
|
||||
{
|
||||
// Group owned, so "Info"
|
||||
mBtnProfile->setLabel(getString("info_text"));
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//mBtnProfile->setLabel(getString("info_text"));
|
||||
|
||||
//mTextGroup->setText("HIPPOS!");//parcel->getGroupName());
|
||||
mTextGroup->setEnabled(TRUE);
|
||||
|
|
@ -914,22 +920,24 @@ void LLPanelLandGeneral::onClickSetGroup()
|
|||
}
|
||||
}
|
||||
|
||||
void LLPanelLandGeneral::onClickProfile()
|
||||
{
|
||||
LLParcel* parcel = mParcel->getParcel();
|
||||
if (!parcel) return;
|
||||
|
||||
if (parcel->getIsGroupOwned())
|
||||
{
|
||||
const LLUUID& group_id = parcel->getGroupID();
|
||||
LLGroupActions::show(group_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
const LLUUID& avatar_id = parcel->getOwnerID();
|
||||
LLAvatarActions::showProfile(avatar_id);
|
||||
}
|
||||
}
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//void LLPanelLandGeneral::onClickProfile()
|
||||
//{
|
||||
// LLParcel* parcel = mParcel->getParcel();
|
||||
// if (!parcel) return;
|
||||
//
|
||||
// if (parcel->getIsGroupOwned())
|
||||
// {
|
||||
// const LLUUID& group_id = parcel->getGroupID();
|
||||
// LLGroupActions::show(group_id);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// const LLUUID& avatar_id = parcel->getOwnerID();
|
||||
// LLAvatarActions::showProfile(avatar_id);
|
||||
// }
|
||||
//}
|
||||
// </FS:Ansariel>
|
||||
|
||||
// public
|
||||
void LLPanelLandGeneral::setGroup(const LLUUID& group_id)
|
||||
|
|
|
|||
|
|
@ -140,7 +140,8 @@ public:
|
|||
virtual void draw();
|
||||
|
||||
void setGroup(const LLUUID& group_id);
|
||||
void onClickProfile();
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//void onClickProfile();
|
||||
void onClickSetGroup();
|
||||
static void onClickDeed(void*);
|
||||
static void onClickBuyLand(void* data);
|
||||
|
|
@ -188,7 +189,8 @@ protected:
|
|||
|
||||
LLTextBox* mTextOwnerLabel;
|
||||
LLTextBox* mTextOwner;
|
||||
LLButton* mBtnProfile;
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//LLButton* mBtnProfile;
|
||||
|
||||
LLTextBox* mContentRating;
|
||||
LLTextBox* mLandType;
|
||||
|
|
|
|||
|
|
@ -5662,6 +5662,12 @@ BOOL LLModelPreview::render()
|
|||
|
||||
position[j] = v;
|
||||
}
|
||||
|
||||
// <FS:ND> FIRE-13465 Make sure there's a material set before dereferencing it
|
||||
if( instance.mModel->mMaterialList.size() > i &&
|
||||
instance.mMaterial.end() != instance.mMaterial.find( instance.mModel->mMaterialList[ i ] ) )
|
||||
{
|
||||
// </FS:ND>
|
||||
|
||||
const std::string& binding = instance.mModel->mMaterialList[i];
|
||||
const LLImportMaterial& material = instance.mMaterial[binding];
|
||||
|
|
@ -5676,7 +5682,14 @@ BOOL LLModelPreview::render()
|
|||
gGL.getTexUnit(0)->bind(material.mDiffuseMap, true);
|
||||
mTextureSet.insert(material.mDiffuseMap.get());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else // <FS:ND> FIRE-13465 Make sure there's a material set before dereferencing it, if none, set buffer type and unbind texture.
|
||||
{
|
||||
buffer->setBuffer(type_mask & buffer->getTypeMask());
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
} // </FS:ND>
|
||||
|
||||
buffer->draw(LLRender::TRIANGLES, buffer->getNumIndices(), 0);
|
||||
gGL.diffuseColor3f(0.4f, 0.4f, 0.4f);
|
||||
|
|
|
|||
|
|
@ -430,6 +430,7 @@ void notify_of_message(const LLSD& msg, bool is_dnd_msg)
|
|||
if (!im_container->getVisible() && nearby_chat_instance && im_container->hasFloater(nearby_chat_instance)
|
||||
&& gSavedSettings.getBOOL("FSNotifyNearbyChatFlash"))
|
||||
{
|
||||
im_container->addFlashingSession(session_id);
|
||||
gToolBarView->flashCommand(LLCommandId("chat"), true, im_container->isMinimized());
|
||||
}
|
||||
return;
|
||||
|
|
@ -453,6 +454,7 @@ void notify_of_message(const LLSD& msg, bool is_dnd_msg)
|
|||
if (!im_container->getVisible() && im_instance && im_container->hasFloater(im_instance)
|
||||
&& gSavedSettings.getBOOL("FSNotifyIMFlash"))
|
||||
{
|
||||
im_container->addFlashingSession(session_id);
|
||||
gToolBarView->flashCommand(LLCommandId("chat"), true, im_container->isMinimized());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -175,6 +175,9 @@ void LLLMImpl::onFrame(const Leap::Controller& controller)
|
|||
mCurrentFrameID = frame_id;
|
||||
mFrameAvailable = true;
|
||||
}
|
||||
|
||||
if( mTool )
|
||||
mTool->onLeapFrame( frame);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -207,13 +210,14 @@ void LLLMImpl::stepFrame()
|
|||
|
||||
static LLCachedControl<S32> sControllerMode(gSavedSettings, "LeapMotionTestMode", 0);
|
||||
|
||||
if( mTool && mTool->getId() != sControllerMode )
|
||||
if( !mTool || mTool->getId() != sControllerMode )
|
||||
{
|
||||
delete mTool;
|
||||
|
||||
mTool = nd::leap::constructTool( sControllerMode );
|
||||
mTool = nd::leap::constructTool( sControllerMode );
|
||||
}
|
||||
|
||||
if( mTool )
|
||||
mTool->onFrame( hands );
|
||||
mTool->onRenderFrame( frame );
|
||||
else
|
||||
{
|
||||
switch (sControllerMode)
|
||||
|
|
|
|||
|
|
@ -200,5 +200,9 @@ LLPointer<LLCredential> LLLoginHandler::loadSavedUserLoginInfo()
|
|||
return gSecAPIHandler->createCredential(identifier["first_name"].asString() + " " + identifier["last_name"].asString() + "@" +LLGridManager::getInstance()->getGrid(),
|
||||
identifier, authenticator);
|
||||
}
|
||||
return NULL;
|
||||
// <FS:Zi> Fix --autologin by loading the currently selected credentials if the above fails.
|
||||
// UserLoginInfo contains "First Last @ Grid" and gets set in LLPanelLogin::onClickConnect()
|
||||
// return NULL;
|
||||
return gSecAPIHandler->loadCredential(gSavedSettings.getLLSD("UserLoginInfo"));
|
||||
// </FS:Zi>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2761,7 +2761,10 @@ void LLPanelGroupRoles::setGroupID(const LLUUID& id)
|
|||
// [/FS:CR]
|
||||
|
||||
if(mSubTabContainer)
|
||||
mSubTabContainer->selectTab(1);
|
||||
// <FS:Ansariel> FIRE-13501: Activate "Members" tab by default
|
||||
//mSubTabContainer->selectTab(1);
|
||||
mSubTabContainer->selectTab(0);
|
||||
// </FS:Ansariel>
|
||||
|
||||
activate();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -136,7 +136,8 @@ void LLPanelLandMedia::refresh()
|
|||
mMediaURLEdit->setText(parcel->getMediaURL());
|
||||
mMediaURLEdit->setEnabled( FALSE );
|
||||
|
||||
getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaCurrentURL());
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaCurrentURL());
|
||||
|
||||
mMediaDescEdit->setText(parcel->getMediaDesc());
|
||||
mMediaDescEdit->setEnabled( can_change_media );
|
||||
|
|
@ -241,7 +242,8 @@ void LLPanelLandMedia::setMediaURL(const std::string& media_url)
|
|||
|
||||
mMediaURLEdit->onCommit();
|
||||
// LLViewerParcelMedia::sendMediaNavigateMessage(media_url);
|
||||
getChild<LLUICtrl>("current_url")->setValue(media_url);
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//getChild<LLUICtrl>("current_url")->setValue(media_url);
|
||||
}
|
||||
std::string LLPanelLandMedia::getMediaURL()
|
||||
{
|
||||
|
|
@ -321,10 +323,12 @@ void LLPanelLandMedia::onSetBtn(void *userdata)
|
|||
void LLPanelLandMedia::onResetBtn(void *userdata)
|
||||
{
|
||||
LLPanelLandMedia *self = (LLPanelLandMedia *)userdata;
|
||||
LLParcel* parcel = self->mParcel->getParcel();
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//LLParcel* parcel = self->mParcel->getParcel();
|
||||
// LLViewerMedia::navigateHome();
|
||||
self->refresh();
|
||||
self->getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaURL());
|
||||
// <FS:Ansariel> Doesn't exists as of 2014-04-14
|
||||
//self->getChild<LLUICtrl>("current_url")->setValue(parcel->getMediaURL());
|
||||
// LLViewerParcelMedia::sendMediaNavigateMessage(parcel->getMediaURL());
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,6 +77,7 @@
|
|||
#include "llevents.h" // for LLEventPumps
|
||||
|
||||
// Firestorm includes
|
||||
#include "fscommon.h"
|
||||
#include "fspanelradar.h"
|
||||
#include "lggcontactsets.h"
|
||||
#include "llcombobox.h"
|
||||
|
|
@ -97,8 +98,8 @@ static const std::string BLOCKED_TAB_NAME = "blocked_panel"; // blocked avatars
|
|||
static const std::string CONTACT_SETS_TAB_NAME = "contact_sets_panel"; // [FS:CR] Contact sets
|
||||
static const std::string COLLAPSED_BY_USER = "collapsed_by_user";
|
||||
|
||||
|
||||
extern S32 gMaxAgentGroups;
|
||||
// [FS] FIRE-12229
|
||||
//extern S32 gMaxAgentGroups;
|
||||
|
||||
/** Comparator for comparing avatar items by last interaction date */
|
||||
class LLAvatarItemRecentComparator : public LLAvatarItemComparator
|
||||
|
|
@ -996,8 +997,11 @@ void LLPanelPeople::updateButtons()
|
|||
|
||||
LLPanel* groups_panel = mTabContainer->getCurrentPanel();
|
||||
groups_panel->getChildView("minus_btn")->setEnabled(item_selected && selected_id.notNull()); // a real group selected
|
||||
groups_panel->getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
|
||||
groups_panel->getChild<LLUICtrl>("groupcount")->setTextArg("[REMAINING]", llformat("%d",(gMaxAgentGroups-gAgent.mGroups.count())));
|
||||
// [CR] FIRE-12229
|
||||
//groups_panel->getChild<LLUICtrl>("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count()));
|
||||
//groups_panel->getChild<LLUICtrl>("groupcount")->setTextArg("[REMAINING]", llformat("%d",(gMaxAgentGroups-gAgent.mGroups.count())));
|
||||
getChild<LLUICtrl>("groupcount")->setValue(FSCommon::populateGroupCount());
|
||||
// [/CR]
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -61,6 +61,9 @@ public:
|
|||
|
||||
~LLSearchComboBox();
|
||||
|
||||
// <FS:Ansariel> Made publicly accessible
|
||||
void focusTextEntry();
|
||||
|
||||
protected:
|
||||
|
||||
LLSearchComboBox(const Params&p);
|
||||
|
|
@ -96,7 +99,8 @@ protected:
|
|||
/**
|
||||
* Sets focus to text box
|
||||
*/
|
||||
void focusTextEntry();
|
||||
// <FS:Ansariel> Made publicly accessible
|
||||
//void focusTextEntry();
|
||||
|
||||
LLButton* mSearchButton;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1000,7 +1000,10 @@ LLSelectNode *LLSelectMgr::getPrimaryHoverNode()
|
|||
return mHoverObjects->mSelectNodeMap[mHoverObjects->mPrimaryObject];
|
||||
}
|
||||
|
||||
void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp)
|
||||
// <FS:ND> Color per highlighted object
|
||||
//void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp)
|
||||
void LLSelectMgr::highlightObjectOnly(LLViewerObject *objectp, LLColor4 const &aColor )
|
||||
// </FS:ND>
|
||||
{
|
||||
if (!objectp)
|
||||
{
|
||||
|
|
@ -1027,6 +1030,8 @@ void LLSelectMgr::highlightObjectOnly(LLViewerObject* objectp)
|
|||
// </FS:Ansariel>
|
||||
|
||||
mRectSelectedObjects.insert(objectp);
|
||||
|
||||
mHighlightColor[ objectp ] = aColor; // <FS:ND/> Color per highlighted object
|
||||
}
|
||||
|
||||
void LLSelectMgr::highlightObjectAndFamily(LLViewerObject* objectp)
|
||||
|
|
@ -1088,6 +1093,7 @@ void LLSelectMgr::unhighlightObjectOnly(LLViewerObject* objectp)
|
|||
}
|
||||
|
||||
mRectSelectedObjects.erase(objectp);
|
||||
mHighlightColor.erase( objectp ); // <FS:ND/> Color per highlighted object
|
||||
}
|
||||
|
||||
void LLSelectMgr::unhighlightObjectAndFamily(LLViewerObject* objectp)
|
||||
|
|
@ -1115,6 +1121,8 @@ void LLSelectMgr::unhighlightAll()
|
|||
{
|
||||
mRectSelectedObjects.clear();
|
||||
mHighlightedObjects->deleteAllNodes();
|
||||
|
||||
mHighlightColor.clear(); // <FS:ND/> Color per highlighted object
|
||||
}
|
||||
|
||||
LLObjectSelectionHandle LLSelectMgr::selectHighlightedObjects()
|
||||
|
|
@ -5575,6 +5583,11 @@ void LLSelectMgr::updateSilhouettes()
|
|||
LLSelectNode* rect_select_root_node = new LLSelectNode(objectp, TRUE);
|
||||
rect_select_root_node->selectAllTEs(TRUE);
|
||||
|
||||
// <FS:ND> Color per highlighted object
|
||||
if( mHighlightColor.find( objectp ) != mHighlightColor.end() )
|
||||
rect_select_root_node->mHighlightColor = mHighlightColor[ objectp ];
|
||||
// </FS:ND>
|
||||
|
||||
if (!select_linked_set)
|
||||
{
|
||||
rect_select_root_node->mIndividualSelection = TRUE;
|
||||
|
|
@ -6206,7 +6219,7 @@ void pushWireframe(LLDrawable* drawable)
|
|||
|
||||
}
|
||||
|
||||
void LLSelectNode::renderOneWireframe(const LLColor4& color)
|
||||
void LLSelectNode::renderOneWireframe(const LLColor4& color)
|
||||
{
|
||||
LLViewerObject* objectp = getObject();
|
||||
if (!objectp)
|
||||
|
|
@ -6296,8 +6309,17 @@ void LLSelectNode::renderOneWireframe(const LLColor4& color)
|
|||
//-----------------------------------------------------------------------------
|
||||
// renderOneSilhouette()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
|
||||
// <FS:ND> Color per highlighted object
|
||||
//void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
|
||||
void LLSelectNode::renderOneSilhouette(const LLColor4 &aColor)
|
||||
// </FS:ND>
|
||||
{
|
||||
// <FS:ND> Color per highlighted object
|
||||
LLColor4 color( aColor );
|
||||
if( this->mHighlightColor.lengthSquared() > 0 )
|
||||
color = this->mHighlightColor;
|
||||
// </FS:ND>
|
||||
|
||||
LLViewerObject* objectp = getObject();
|
||||
if (!objectp)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -194,6 +194,8 @@ public:
|
|||
std::vector<LLVector3> mSilhouetteNormals; // array of normals to render silhouette of object
|
||||
BOOL mSilhouetteExists; // need to generate silhouette?
|
||||
|
||||
LLColor4 mHighlightColor; // <FS:ND/> Color per highlighted object
|
||||
|
||||
protected:
|
||||
LLPointer<LLViewerObject> mObject;
|
||||
S32 mTESelectMask;
|
||||
|
|
@ -440,7 +442,11 @@ public:
|
|||
LLSelectNode *getHoverNode();
|
||||
LLSelectNode *getPrimaryHoverNode();
|
||||
|
||||
void highlightObjectOnly(LLViewerObject *objectp);
|
||||
// <FS:ND> Color per highlighted object
|
||||
// void highlightObjectOnly(LLViewerObject *objectp);
|
||||
void highlightObjectOnly(LLViewerObject *objectp, LLColor4 const &aColor = LLColor4() );
|
||||
// </FS:ND>
|
||||
|
||||
void highlightObjectAndFamily(LLViewerObject *objectp);
|
||||
void highlightObjectAndFamily(const std::vector<LLViewerObject*>& list);
|
||||
|
||||
|
|
@ -782,6 +788,8 @@ private:
|
|||
LLObjectSelectionHandle mHighlightedObjects;
|
||||
std::set<LLPointer<LLViewerObject> > mRectSelectedObjects;
|
||||
|
||||
std::map< LLPointer< LLViewerObject >, LLColor4 > mHighlightColor; // <FS:ND/> Color per highlighted object
|
||||
|
||||
LLObjectSelection mGridObjects;
|
||||
LLQuaternion mGridRotation;
|
||||
LLVector3 mGridOrigin;
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ U32 LLSpatialGroup::sNodeCount = 0;
|
|||
std::set<GLuint> LLSpatialGroup::sPendingQueries;
|
||||
|
||||
U32 gOctreeMaxCapacity;
|
||||
F32 gOctreeMinSize;
|
||||
|
||||
BOOL LLSpatialGroup::sNoDelete = FALSE;
|
||||
|
||||
|
|
|
|||
|
|
@ -4093,9 +4093,16 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y
|
|||
}
|
||||
else
|
||||
{
|
||||
// [CR] FIRE-12229
|
||||
#ifdef OPENSIM
|
||||
gMaxAgentGroups = 0;
|
||||
LL_INFOS("LLStartup") << "did not receive max-agent-groups. unlimited groups activated" << LL_ENDL;
|
||||
#else
|
||||
gMaxAgentGroups = DEFAULT_MAX_AGENT_GROUPS;
|
||||
LL_INFOS("LLStartup") << "using gMaxAgentGroups default: "
|
||||
<< gMaxAgentGroups << LL_ENDL;
|
||||
#endif
|
||||
// [CR] FIRE-12229
|
||||
}
|
||||
|
||||
// <FS:AW opensim currency support>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
#include "llfloaterreg.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llfloaterworldmap.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llpanellogin.h"
|
||||
#include "llregionhandle.h"
|
||||
#include "llslurl.h"
|
||||
|
|
@ -311,16 +312,14 @@ void LLURLDispatcherImpl::regionHandleCallback(U64 region_handle, const LLSLURL&
|
|||
//---------------------------------------------------------------------------
|
||||
// Teleportation links are handled here because they are tightly coupled
|
||||
// to SLURL parsing and sim-fragment parsing
|
||||
|
||||
class LLTeleportHandler : public LLCommandHandler
|
||||
{
|
||||
public:
|
||||
// Teleport requests *must* come from a trusted browser
|
||||
// inside the app, otherwise a malicious web page could
|
||||
// cause a constant teleport loop. JC
|
||||
// <FS:Ansariel> FIRE-13303: Teleport SLURLs don't work anymore
|
||||
//LLTeleportHandler() : LLCommandHandler("teleport", UNTRUSTED_BLOCK) { }
|
||||
LLTeleportHandler() : LLCommandHandler("teleport", UNTRUSTED_THROTTLE) { }
|
||||
// </FS:Ansariel>
|
||||
|
||||
bool handle(const LLSD& tokens, const LLSD& query_map,
|
||||
LLMediaCtrl* web)
|
||||
|
|
@ -328,6 +327,7 @@ public:
|
|||
// construct a "normal" SLURL, resolve the region to
|
||||
// a global position, and teleport to it
|
||||
if (tokens.size() < 1) return false;
|
||||
|
||||
// <FS:AW optional opensim support>
|
||||
#ifdef OPENSIM
|
||||
LLSLURL slurl(tokens, true);
|
||||
|
|
@ -337,7 +337,7 @@ public:
|
|||
std::string region_name = slurl.getRegion();
|
||||
std::string dest;
|
||||
std::string current = LLGridManager::getInstance()->getGrid();
|
||||
if((grid != current) && (!LLGridManager::getInstance()->isInOpenSim() || (!slurl.getHypergrid() && gatekeeper.empty())))
|
||||
if ((grid != current) && (!LLGridManager::getInstance()->isInOpenSim() || (!slurl.getHypergrid() && gatekeeper.empty())))
|
||||
{
|
||||
dest = slurl.getSLURLString();
|
||||
if (!dest.empty())
|
||||
|
|
@ -350,22 +350,19 @@ public:
|
|||
return true;
|
||||
}
|
||||
}
|
||||
else if(!gatekeeper.empty() && gatekeeper != LLGridManager::getInstance()->getGatekeeper())
|
||||
else if (!gatekeeper.empty() && gatekeeper != LLGridManager::getInstance()->getGatekeeper())
|
||||
{
|
||||
region_name = gatekeeper + ":" + region_name;
|
||||
}
|
||||
|
||||
dest = "hop://" + current + "/" + region_name;
|
||||
|
||||
for(int i=2; tokens.size() > i; i++)
|
||||
for (S32 i = 2; tokens.size() > i; i++)
|
||||
{
|
||||
dest.append("/" + tokens[i].asString());
|
||||
}
|
||||
|
||||
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
|
||||
LLURLDispatcherImpl::regionHandleCallback,
|
||||
LLSLURL(dest).getSLURLString(),
|
||||
true); // teleport
|
||||
std::string callback_url = LLSLURL(dest).getSLURLString();
|
||||
#else // OPENSIM
|
||||
LLVector3 coords(128, 128, 0);
|
||||
if (tokens.size() <= 4)
|
||||
|
|
@ -379,14 +376,49 @@ public:
|
|||
|
||||
std::string region_name = LLURI::unescape(tokens[0]);
|
||||
|
||||
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name, LLURLDispatcherImpl::regionHandleCallback, LLSLURL(region_name, coords).getSLURLString(), true);// teleport
|
||||
std::string callback_url = LLSLURL(region_name, coords).getSLURLString();
|
||||
#endif // OPENSIM
|
||||
// </FS:AW optional opensim support>
|
||||
|
||||
LLSD args;
|
||||
args["LOCATION"] = region_name;
|
||||
|
||||
LLSD payload;
|
||||
payload["region_name"] = region_name;
|
||||
payload["callback_url"] = callback_url;
|
||||
|
||||
LLNotificationsUtil::add("TeleportViaSLAPP", args, payload);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void teleport_via_slapp(std::string region_name, std::string callback_url)
|
||||
{
|
||||
|
||||
LLWorldMapMessage::getInstance()->sendNamedRegionRequest(region_name,
|
||||
LLURLDispatcherImpl::regionHandleCallback,
|
||||
callback_url,
|
||||
true); // teleport
|
||||
}
|
||||
|
||||
static bool teleport_via_slapp_callback(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
std::string region_name = notification["payload"]["region_name"].asString();
|
||||
std::string callback_url = notification["payload"]["callback_url"].asString();
|
||||
|
||||
if (option == 0)
|
||||
{
|
||||
teleport_via_slapp(region_name, callback_url);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
LLTeleportHandler gTeleportHandler;
|
||||
static LLNotificationFunctorRegistration open_landmark_callback_reg("TeleportViaSLAPP", LLTeleportHandler::teleport_via_slapp_callback);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
|
|
|||
|
|
@ -410,6 +410,7 @@ static bool handleRepartition(const LLSD&)
|
|||
if (gPipeline.isInit())
|
||||
{
|
||||
gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
|
||||
gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
|
||||
gObjectList.repartitionObjects();
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -322,14 +322,14 @@ void LLViewerFloaterReg::registerFloaters()
|
|||
LLFloaterReg::add("perm_prefs", "floater_perm_prefs.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPerms>);
|
||||
LLFloaterReg::add("picks", "floater_picks.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
|
||||
LLFloaterReg::add("pref_joystick", "floater_joystick.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterJoystick>);
|
||||
LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>, "preview");
|
||||
LLFloaterReg::add("preview_anim", "floater_preview_animation.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewAnim>/*, "preview"*/);
|
||||
LLFloaterReg::add("preview_conversation", "floater_conversation_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterConversationPreview>);
|
||||
LLFloaterReg::add("preview_gesture", "floater_preview_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewGesture>, "preview");
|
||||
LLFloaterReg::add("preview_notecard", "floater_preview_notecard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewNotecard>, "preview");
|
||||
LLFloaterReg::add("preview_script", "floater_script_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewLSL>, "preview");
|
||||
LLFloaterReg::add("preview_scriptedit", "floater_live_lsleditor.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLLiveLSLEditor>, "preview");
|
||||
LLFloaterReg::add("preview_sound", "floater_preview_sound.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewSound>, "preview");
|
||||
LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>, "preview");
|
||||
LLFloaterReg::add("preview_gesture", "floater_preview_gesture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewGesture>/*, "preview"*/);
|
||||
LLFloaterReg::add("preview_notecard", "floater_preview_notecard.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewNotecard>/*, "preview"*/);
|
||||
LLFloaterReg::add("preview_script", "floater_script_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewLSL>, "preview_script" /*"preview"*/);
|
||||
LLFloaterReg::add("preview_scriptedit", "floater_live_lsleditor.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLLiveLSLEditor>, "preview_script" /*"preview"*/);
|
||||
LLFloaterReg::add("preview_sound", "floater_preview_sound.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewSound>/*, "preview"*/);
|
||||
LLFloaterReg::add("preview_texture", "floater_preview_texture.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPreviewTexture>/*, "preview"*/);
|
||||
LLFloaterReg::add("properties", "floater_inventory_item_properties.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterProperties>);
|
||||
LLFloaterReg::add("publish_classified", "floater_publish_classified.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLPublishClassifiedFloater>);
|
||||
|
||||
|
|
|
|||
|
|
@ -4011,6 +4011,61 @@ bool enable_freeze_eject(const LLSD& avatar_id)
|
|||
// return new_value;
|
||||
}
|
||||
|
||||
// <FS:Ansariel> FIRE-13515: Re-add give calling card
|
||||
class LLAvatarGiveCard : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LL_INFOS("LLAvatarGiveCard") << "handle_give_card()" << LL_ENDL;
|
||||
LLViewerObject* dest = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
|
||||
// [RLVa:KB] - Checked: 2010-06-04 (RLVa-1.2.0d) | Modified: RLVa-1.2.0d | OK
|
||||
//if(dest && dest->isAvatar())
|
||||
if ( (dest && dest->isAvatar()) && (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) )
|
||||
// [/RLVa:KB]
|
||||
{
|
||||
bool found_name = false;
|
||||
LLSD args;
|
||||
LLSD old_args;
|
||||
LLNameValue* nvfirst = dest->getNVPair("FirstName");
|
||||
LLNameValue* nvlast = dest->getNVPair("LastName");
|
||||
if(nvfirst && nvlast)
|
||||
{
|
||||
std::string full_name = gCacheName->buildFullName(nvfirst->getString(), nvlast->getString());
|
||||
args["NAME"] = full_name;
|
||||
old_args["NAME"] = full_name;
|
||||
found_name = true;
|
||||
}
|
||||
LLViewerRegion* region = dest->getRegion();
|
||||
LLHost dest_host;
|
||||
if(region)
|
||||
{
|
||||
dest_host = region->getHost();
|
||||
}
|
||||
if(found_name && dest_host.isOk())
|
||||
{
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessage("OfferCallingCard");
|
||||
msg->nextBlockFast(_PREHASH_AgentData);
|
||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||
msg->nextBlockFast(_PREHASH_AgentBlock);
|
||||
msg->addUUIDFast(_PREHASH_DestID, dest->getID());
|
||||
LLUUID transaction_id;
|
||||
transaction_id.generate();
|
||||
msg->addUUIDFast(_PREHASH_TransactionID, transaction_id);
|
||||
msg->sendReliable(dest_host);
|
||||
LLNotificationsUtil::add("OfferedCard", args);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("CantOfferCallingCard", old_args);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
// </FS:Ansariel> FIRE-13515: Re-add give calling card
|
||||
|
||||
bool callback_leave_group(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
|
@ -9078,10 +9133,13 @@ class FSAddToContactSet : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLVOAvatar* avatarp = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
|
||||
if (avatarp)
|
||||
if (!rlv_handler_t::isEnabled() || !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
||||
{
|
||||
LLFloaterReg::showInstance("fs_add_contact", LLSD(avatarp->getID()), TRUE);
|
||||
LLVOAvatar* avatarp = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject());
|
||||
if (avatarp)
|
||||
{
|
||||
LLFloaterReg::showInstance("fs_add_contact", LLSD(avatarp->getID()), TRUE);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -10767,6 +10825,9 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLAvatarDebug(), "Avatar.Debug");
|
||||
view_listener_t::addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug");
|
||||
view_listener_t::addMenu(new LLAvatarInviteToGroup(), "Avatar.InviteToGroup");
|
||||
// <FS:Ansariel> FIRE-13515: Re-add give calling card
|
||||
view_listener_t::addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard");
|
||||
// </FS:Ansariel> FIRE-13515: Re-add give calling card
|
||||
commit.add("Avatar.Eject", boost::bind(&handle_avatar_eject, LLSD()));
|
||||
commit.add("Avatar.ShowInspector", boost::bind(&handle_avatar_show_inspector));
|
||||
view_listener_t::addMenu(new LLAvatarSendIM(), "Avatar.SendIM");
|
||||
|
|
@ -10896,10 +10957,7 @@ void initialize_menus()
|
|||
// [RLVa:KB] - Checked: 2010-04-23 (RLVa-1.2.0g) | Added: RLVa-1.2.0
|
||||
commit.add("RLV.ToggleEnabled", boost::bind(&rlvMenuToggleEnabled));
|
||||
enable.add("RLV.CheckEnabled", boost::bind(&rlvMenuCheckEnabled));
|
||||
if (rlv_handler_t::isEnabled())
|
||||
{
|
||||
enable.add("RLV.EnableIfNot", boost::bind(&rlvMenuEnableIfNot, _2));
|
||||
}
|
||||
enable.add("RLV.EnableIfNot", boost::bind(&rlvMenuEnableIfNot, _2));
|
||||
// [/RLVa:KB]
|
||||
|
||||
// <FS:Ansariel> Toggle internal web browser
|
||||
|
|
|
|||
|
|
@ -716,7 +716,10 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
|
|||
S32 max_groups = gMaxAgentGroups;
|
||||
if(gAgent.isInGroup(group_id)) ++max_groups;
|
||||
|
||||
if(gAgent.mGroups.count() < max_groups)
|
||||
// [CR] FIRE-12229
|
||||
//if(gAgent.mGroups.count() < max_groups)
|
||||
if(!max_groups || gAgent.mGroups.count() < max_groups)
|
||||
// [/CR] FIRE-12229
|
||||
{
|
||||
accept_invite = true;
|
||||
}
|
||||
|
|
@ -2830,7 +2833,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
// <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
|
||||
chat.mText = buffer;
|
||||
if ((chat.mFromID != gAgent.getID() || chat.mFromName == SYSTEM_FROM) && FSKeywords::getInstance()->chatContainsKeyword(chat, false))
|
||||
if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
|
||||
{
|
||||
FSKeywords::notify(chat);
|
||||
}
|
||||
|
|
@ -2926,7 +2929,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
// <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
|
||||
chat.mText = message;
|
||||
if ((chat.mFromID != gAgent.getID() || chat.mFromName == SYSTEM_FROM) && FSKeywords::getInstance()->chatContainsKeyword(chat, false))
|
||||
if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
|
||||
{
|
||||
FSKeywords::notify(chat);
|
||||
}
|
||||
|
|
@ -3386,7 +3389,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
chat.mText = message;
|
||||
|
||||
// <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of Task IM)
|
||||
if ((chat.mFromID != gAgent.getID() || chat.mFromName == SYSTEM_FROM) && FSKeywords::getInstance()->chatContainsKeyword(chat, true))
|
||||
if (FSKeywords::getInstance()->chatContainsKeyword(chat, true))
|
||||
{
|
||||
FSKeywords::notify(chat);
|
||||
}
|
||||
|
|
@ -3488,7 +3491,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
|
|||
|
||||
// <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of IM)
|
||||
chat.mText = message;
|
||||
if ((chat.mFromID != gAgent.getID() || chat.mFromName == SYSTEM_FROM) && FSKeywords::getInstance()->chatContainsKeyword(chat, false))
|
||||
if (FSKeywords::getInstance()->chatContainsKeyword(chat, false))
|
||||
{
|
||||
FSKeywords::notify(chat);
|
||||
}
|
||||
|
|
@ -4607,7 +4610,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
|
|||
chat.mOwnerID = owner_id;
|
||||
|
||||
// <FS:PP> FIRE-10178: Keyword Alerts in group IM do not work unless the group is in the foreground (notification on receipt of local chat)
|
||||
if ((chat.mFromID != gAgent.getID() || chat.mFromName == SYSTEM_FROM) && FSKeywords::getInstance()->chatContainsKeyword(chat, true))
|
||||
if (FSKeywords::getInstance()->chatContainsKeyword(chat, true))
|
||||
{
|
||||
FSKeywords::notify(chat);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1683,40 +1683,69 @@ void LLViewerRegion::unpackRegionHandshake()
|
|||
{
|
||||
LLUUID tmp_id;
|
||||
|
||||
bool changed = false;
|
||||
|
||||
// Get the 4 textures for land
|
||||
msg->getUUID("RegionInfo", "TerrainDetail0", tmp_id);
|
||||
changed |= (tmp_id != compp->getDetailTextureID(0));
|
||||
compp->setDetailTextureID(0, tmp_id);
|
||||
|
||||
msg->getUUID("RegionInfo", "TerrainDetail1", tmp_id);
|
||||
changed |= (tmp_id != compp->getDetailTextureID(1));
|
||||
compp->setDetailTextureID(1, tmp_id);
|
||||
|
||||
msg->getUUID("RegionInfo", "TerrainDetail2", tmp_id);
|
||||
changed |= (tmp_id != compp->getDetailTextureID(2));
|
||||
compp->setDetailTextureID(2, tmp_id);
|
||||
|
||||
msg->getUUID("RegionInfo", "TerrainDetail3", tmp_id);
|
||||
changed |= (tmp_id != compp->getDetailTextureID(3));
|
||||
compp->setDetailTextureID(3, tmp_id);
|
||||
|
||||
// Get the start altitude and range values for land textures
|
||||
F32 tmp_f32;
|
||||
msg->getF32("RegionInfo", "TerrainStartHeight00", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getStartHeight(0));
|
||||
compp->setStartHeight(0, tmp_f32);
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainStartHeight01", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getStartHeight(1));
|
||||
compp->setStartHeight(1, tmp_f32);
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainStartHeight10", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getStartHeight(2));
|
||||
compp->setStartHeight(2, tmp_f32);
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainStartHeight11", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getStartHeight(3));
|
||||
compp->setStartHeight(3, tmp_f32);
|
||||
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainHeightRange00", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getHeightRange(0));
|
||||
compp->setHeightRange(0, tmp_f32);
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainHeightRange01", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getHeightRange(1));
|
||||
compp->setHeightRange(1, tmp_f32);
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainHeightRange10", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getHeightRange(2));
|
||||
compp->setHeightRange(2, tmp_f32);
|
||||
|
||||
msg->getF32("RegionInfo", "TerrainHeightRange11", tmp_f32);
|
||||
changed |= (tmp_f32 != compp->getHeightRange(3));
|
||||
compp->setHeightRange(3, tmp_f32);
|
||||
|
||||
// If this is an UPDATE (params already ready, we need to regenerate
|
||||
// all of our terrain stuff, by
|
||||
if (compp->getParamsReady())
|
||||
{
|
||||
//this line creates frame stalls on region crossing and removing it appears to have no effect
|
||||
//getLand().dirtyAllPatches();
|
||||
// Update if the land changed
|
||||
if (changed)
|
||||
{
|
||||
getLand().dirtyAllPatches();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -222,6 +222,13 @@ public:
|
|||
// [/SL:KB]
|
||||
mHasMouseHover(false)
|
||||
{
|
||||
// <FS:Zi> Handle NULL pointers in mImage gracefully
|
||||
if(!mImage)
|
||||
{
|
||||
LL_WARNS("UI") << "NULL Image pointer for text segment of embedded inventory." << LL_ENDL;
|
||||
mImage=LLUI::getUIImage("Unknown_Icon");
|
||||
}
|
||||
// </FS:Zi>
|
||||
|
||||
mStyle = new LLStyle(LLStyle::Params().font(LLFontGL::getFontSansSerif()));
|
||||
mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
|
||||
|
|
@ -631,7 +638,13 @@ LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const
|
|||
case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break;
|
||||
case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break;
|
||||
case LLAssetType::AT_MESH: img_name = "Inv_Mesh"; break;
|
||||
default: llassert(0);
|
||||
// <FS:Zi> Don't crash, try to recover gracefully
|
||||
// default: llassert(0);
|
||||
default:
|
||||
img_name = "Unknown_Icon";
|
||||
LL_WARNS("UI") << "Unknown asset type " << item->getType() << " for text segment of embedded inventory." << LL_ENDL;
|
||||
break;
|
||||
// </FS:Zi>
|
||||
}
|
||||
|
||||
return LLUI::getUIImage(img_name);
|
||||
|
|
|
|||
|
|
@ -3648,6 +3648,9 @@ void LLViewerWindow::updateUI()
|
|||
|
||||
updateLayout();
|
||||
|
||||
// <FS:Ansariel> Backout MAINT-3250
|
||||
mLastMousePoint = mCurrentMousePoint;
|
||||
|
||||
// cleanup unused selections when no modal dialogs are open
|
||||
if (LLModalDialog::activeCount() == 0)
|
||||
{
|
||||
|
|
@ -3888,7 +3891,8 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point)
|
|||
// Store last mouse location.
|
||||
// If mouse leaves window, pretend last point was on edge of window
|
||||
|
||||
mLastMousePoint = mCurrentMousePoint;
|
||||
// <FS:Ansariel> Backout MAINT-3250
|
||||
//mLastMousePoint = mCurrentMousePoint;
|
||||
|
||||
if (point.mX < 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1696,6 +1696,16 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
|
|||
}
|
||||
|
||||
|
||||
// <FS:Ansariel> Backout MAINT-3250
|
||||
BOOL outside_slop(S32 x, S32 y, S32 start_x, S32 start_y)
|
||||
{
|
||||
S32 dx = x - start_x;
|
||||
S32 dy = y - start_y;
|
||||
|
||||
return (dx <= -2 || 2 <= dx || dy <= -2 || 2 <= dy);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
BOOL LLWorldMapView::handleMouseDown( S32 x, S32 y, MASK mask )
|
||||
{
|
||||
gFocusMgr.setMouseCapture( this );
|
||||
|
|
@ -1778,7 +1788,10 @@ BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask )
|
|||
{
|
||||
if (hasMouseCapture())
|
||||
{
|
||||
if (mPanning || llabs(x - mMouseDownX) > 1 || llabs(y - mMouseDownY) > 1)
|
||||
// <FS:Ansariel> Backout MAINT-3250
|
||||
//if (mPanning || llabs(x - mMouseDownX) > 1 || llabs(y - mMouseDownY) > 1)
|
||||
if (mPanning || outside_slop(x, y, mMouseDownX, mMouseDownY))
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
// just started panning, so hide cursor
|
||||
if (!mPanning)
|
||||
|
|
@ -1795,6 +1808,9 @@ BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask )
|
|||
sPanY += delta_y;
|
||||
sTargetPanX = sPanX;
|
||||
sTargetPanY = sPanY;
|
||||
|
||||
// <FS:Ansariel> Backout MAINT-3250
|
||||
gViewerWindow->moveCursorToCenter();
|
||||
}
|
||||
|
||||
// doesn't matter, cursor should be hidden
|
||||
|
|
|
|||
|
|
@ -506,6 +506,7 @@ void LLPipeline::init()
|
|||
refreshCachedSettings();
|
||||
|
||||
gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity");
|
||||
gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");
|
||||
sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");
|
||||
sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
|
||||
sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<context_menu name="Avatar Pie">
|
||||
<menu_item_call label="Profil anzeigen" name="Profile..."/>
|
||||
<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
|
||||
<menu_item_call label="Visitenkarte hinzufügen" name="Add Calling Card"/>
|
||||
<menu_item_call label="Visitenkarte geben" name="Give Calling Card"/>
|
||||
<menu_item_call label="Zu Kontakt-Set hinzufügen" name="Add to Set"/>
|
||||
<menu_item_call label="IM" name="Send IM..."/>
|
||||
<menu_item_call label="Anrufen" name="Call"/>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<context_menu name="Avatar Pie">
|
||||
<menu_item_call label="Profil anzeigen" name="Profile..."/>
|
||||
<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
|
||||
<menu_item_call label="Visitenkarte hinzufügen" name="Add Calling Card"/>
|
||||
<menu_item_call label="Visitenkarte geben" name="Give Calling Card"/>
|
||||
<menu_item_call label="Zu Kontakt-Set hinzufügen" name="Add to Set"/>
|
||||
<menu_item_call label="IM" name="Send IM..."/>
|
||||
<menu_item_call label="Anrufen" name="Call"/>
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
<menu_item_call label="Modellassistent..." name="Upload Model Wizard"/>
|
||||
<menu_item_call label="Mehrfach-Upload ([COST] pro Datei)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
|
||||
<menu_item_call label="Linkset importieren..." name="import linkset"/>
|
||||
</menu>
|
||||
<menu_item_call label="Neuer Ordner" name="New Folder"/>
|
||||
<menu_item_call label="Neues Skript" name="New Script"/>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<pie_slice label="Zahlen..." name="Pay..."/>
|
||||
<pie_menu name="Avatar Pie More 1" label="Mehr >">
|
||||
<pie_slice label="Einfrieren" name="Freeze..."/>
|
||||
<pie_slice label="Karte geben" name="Add Calling Card"/>
|
||||
<pie_slice label="Karte geben" name="Give Calling Card"/>
|
||||
<pie_slice label="Gruppeneinl." name="Group Invite..."/>
|
||||
<pie_slice label="Hinauswerfen" name="Eject..."/>
|
||||
<pie_menu name="Avatar Pie More 2" label="Mehr >">
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
<pie_slice label="Zahlen..." name="Pay..."/>
|
||||
<pie_menu name="Avatar Pie More 1" label="Mehr >">
|
||||
<pie_slice label="Einfrieren" name="Freeze..."/>
|
||||
<pie_slice label="Karte geben" name="Add Calling Card"/>
|
||||
<pie_slice label="Karte geben" name="Give Calling Card"/>
|
||||
<pie_slice label="Gruppeneinl." name="Group Invite..."/>
|
||||
<pie_slice label="Hinauswerfen" name="Eject..."/>
|
||||
<pie_menu name="Avatar Pie More 2" label="Mehr >">
|
||||
|
|
|
|||
|
|
@ -1788,6 +1788,10 @@ womit Sie die Höchstgrenze von [LIMIT] überschreiten.
|
|||
Sind Sie sicher, dass Sie zu <nolink>[LOCATION]</nolink> teleportieren möchten?
|
||||
<usetemplate ignoretext="Bestätigen, dass ich zu einer Landmarke teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
|
||||
</notification>
|
||||
<notification name="TeleportViaSLAPP">
|
||||
Sind Sie sicher, dass Sie zu <nolink>[LOCATION]</nolink> teleportieren möchten?
|
||||
<usetemplate ignoretext="Bestätigen, dass ich via SLAPP teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
|
||||
</notification>
|
||||
<notification name="TeleportToPick">
|
||||
Nach [PICK] teleportieren?
|
||||
<usetemplate ignoretext="Bestätigen, dass ich zu einer Position in Auswahl teleportieren möchte" name="okcancelignore" notext="Abbrechen" yestext="Teleportieren"/>
|
||||
|
|
@ -2487,6 +2491,9 @@ Dies kann die Eingabe Ihres Passworts beeinflussen.
|
|||
<notification name="CannotRemoveProtectedCategories">
|
||||
Geschützte Kategorien können nicht entfernt werden.
|
||||
</notification>
|
||||
<notification name="OfferedCard">
|
||||
Sie haben [NAME] Ihre Vistenkarte angeboten.
|
||||
</notification>
|
||||
<notification name="UnableToBuyWhileDownloading">
|
||||
Kauf nicht möglich. Objektdaten werden noch geladen.
|
||||
Bitte versuchen Sie es erneut.
|
||||
|
|
|
|||
|
|
@ -30,4 +30,5 @@
|
|||
<slider name="volume_slider" tool_tip="Voice-Lautstärke"/>
|
||||
<button name="info_btn" tool_tip="Mehr Infos"/>
|
||||
<button name="profile_btn" tool_tip="Profil anzeigen"/>
|
||||
<output_monitor name="speaking_indicator" tool_tip="Zeigt an, dass sich der Avatar in Voice-Reichweite befindet, und wie kräftig er spricht"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -41,8 +41,4 @@
|
|||
label="Einladen..."
|
||||
name="invite_btn"
|
||||
width="85" />
|
||||
<text
|
||||
name="groupcount">
|
||||
Du bist Mitglied bei [COUNT] Gruppen von max [MAX].
|
||||
</text>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
|
|||
<dnd_button name="minus_btn" tool_tip="Ausgewählte Gruppe verlassen"/>
|
||||
</panel>
|
||||
<text name="groupcount">
|
||||
Sie gehören [COUNT] Gruppen an ([REMAINING] verbleibend).
|
||||
Sie gehören [COUNT] Gruppe(n) an ([REMAINING] verbleibend).
|
||||
</text>
|
||||
</panel>
|
||||
<panel label="Aktuell" name="recent_panel">
|
||||
|
|
|
|||
|
|
@ -62,13 +62,10 @@
|
|||
<panel label="Voice-Chat-Einstellungen" name="Media Voice tab">
|
||||
<check_box label="Voice-Chat aktivieren" name="enable_voice_check"/>
|
||||
<check_box label="Voice-Chat in mehreren Viewer-Instanzen gleichzeitig erlauben" name="VoiceMultiInstance"/>
|
||||
<text name="Listen from">
|
||||
Zuhören von:
|
||||
</text>
|
||||
<radio_group name="ear_location">
|
||||
<radio_item label="Kameraposition" name="0"/>
|
||||
<radio_item label="Avatarposition" name="1"/>
|
||||
<radio_item label="Sprecherposition" name="2"/>
|
||||
<radio_item label="Voice-Chat von Kameraposition aus hören" name="0"/>
|
||||
<radio_item label="Voice-Chat von Avatarposition aus hören" name="1"/>
|
||||
<radio_item label="Voice-Chat von allen gleichmäßig hören" name="2"/>
|
||||
</radio_group>
|
||||
<check_box label="Avatarlippen beim Sprechen bewegen" name="enable_lip_sync"/>
|
||||
<check_box label="Zeige Voice-Indikator über Avataren" name="FSShowVoiceVisualizer" tool_tip="Wenn diese Option aktiviert ist, wird der Voice-Indicator (weißer Punkt) über Avataren angezeigt."/>
|
||||
|
|
|
|||
|
|
@ -5915,4 +5915,11 @@ Setzen Sie den Editorpfad in Anführungszeichen
|
|||
<string name="Mouselook_Unknown_Avatar">
|
||||
Unbekannter Avatar
|
||||
</string>
|
||||
|
||||
<string name="groupcountstring">
|
||||
Sie gehören [COUNT] Gruppe(n) an ([REMAINING] verbleibend).
|
||||
</string>
|
||||
<string name="groupcountunlimitedstring">
|
||||
Sie gehören [COUNT] Gruppe(n) an.
|
||||
</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -155,11 +155,12 @@
|
|||
length="1"
|
||||
height="14"
|
||||
layout="topleft"
|
||||
left_pad="-5"
|
||||
left="95"
|
||||
top="50"
|
||||
halign="left"
|
||||
name="image_quality_level"
|
||||
top_delta="0"
|
||||
width="80">
|
||||
width="115">
|
||||
([QLVL])
|
||||
</text>
|
||||
</layout_panel>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@
|
|||
name="Add to Set">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.AddToContactSet" />
|
||||
<menu_item_call.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="IM"
|
||||
|
|
@ -38,12 +41,14 @@
|
|||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</menu_item_call>
|
||||
<!-- Starlight add calling card -->
|
||||
<menu_item_call
|
||||
label="Add Calling Card"
|
||||
name="Add Calling Card">
|
||||
label="Give Calling Card"
|
||||
name="Give Calling Card">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.AddContact" />
|
||||
function="Avatar.GiveCard" />
|
||||
<menu_item_call.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Call"
|
||||
|
|
|
|||
|
|
@ -23,10 +23,13 @@
|
|||
function="Avatar.EnableAddFriend" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Add Calling Card"
|
||||
name="Add Calling Card">
|
||||
label="Give Calling Card"
|
||||
name="Give Calling Card">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.AddContact" />
|
||||
function="Avatar.GiveCard" />
|
||||
<menu_item_call.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Add to Set"
|
||||
|
|
@ -34,6 +37,9 @@
|
|||
name="Add to Set">
|
||||
<menu_item_call.on_click
|
||||
function="Avatar.AddToContactSet" />
|
||||
<menu_item_call.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="IM"
|
||||
|
|
|
|||
|
|
@ -70,6 +70,14 @@
|
|||
function="Floater.Toggle"
|
||||
parameter="perm_prefs" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Import Linkset..."
|
||||
visibility_control="FSEnableObjectExports"
|
||||
name="import linkset">
|
||||
<menu_item_call.on_click
|
||||
function="File.ImportLinkset"
|
||||
parameter="" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
|
||||
<menu_item_call
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@
|
|||
name="Add to set">
|
||||
<pie_slice.on_click
|
||||
function="Avatar.AddToContactSet" />
|
||||
<pie_slice.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</pie_slice>
|
||||
</pie_menu>
|
||||
<pie_slice
|
||||
|
|
@ -95,9 +98,12 @@
|
|||
</pie_slice>
|
||||
<pie_slice
|
||||
label="Give Card"
|
||||
name="Add Calling Card">
|
||||
name="Give Calling Card">
|
||||
<pie_slice.on_click
|
||||
function="Avatar.AddContact" />
|
||||
function="Avatar.GiveCard" />
|
||||
<pie_slice.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</pie_slice>
|
||||
<pie_slice
|
||||
label="Invite to Group"
|
||||
|
|
|
|||
|
|
@ -69,6 +69,9 @@
|
|||
name="Add to set">
|
||||
<pie_slice.on_click
|
||||
function="Avatar.AddToContactSet" />
|
||||
<pie_slice.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</pie_slice>
|
||||
</pie_menu>
|
||||
<pie_slice
|
||||
|
|
@ -95,9 +98,12 @@
|
|||
</pie_slice>
|
||||
<pie_slice
|
||||
label="Give Card"
|
||||
name="Add Calling Card">
|
||||
name="Give Calling Card">
|
||||
<pie_slice.on_click
|
||||
function="Avatar.AddContact" />
|
||||
function="Avatar.GiveCard" />
|
||||
<pie_slice.on_enable
|
||||
function="RLV.EnableIfNot"
|
||||
parameter="shownames" />
|
||||
</pie_slice>
|
||||
<pie_slice
|
||||
label="Invite to Group"
|
||||
|
|
|
|||
|
|
@ -2431,7 +2431,8 @@
|
|||
<menu_item_check
|
||||
label="Highlight Transparent"
|
||||
name="Highlight Transparent"
|
||||
shortcut="control|alt|T">
|
||||
shortcut="control|alt|T"
|
||||
use_mac_ctrl="true">
|
||||
<menu_item_check.on_check
|
||||
function="View.CheckHighlightTransparent" />
|
||||
<menu_item_check.on_click
|
||||
|
|
|
|||
|
|
@ -4309,6 +4309,19 @@ Are you sure you want to teleport to <nolink>[LOCATION]</nolink>?
|
|||
notext="Cancel"
|
||||
yestext="Teleport"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="TeleportViaSLAPP"
|
||||
type="alertmodal">
|
||||
Are you sure you want to teleport to <nolink>[LOCATION]</nolink>?
|
||||
<tag>confirm</tag>
|
||||
<usetemplate
|
||||
ignoretext="Confirm that I want to teleport via SLAPP"
|
||||
name="okcancelignore"
|
||||
notext="Cancel"
|
||||
yestext="Teleport"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
|
|
@ -6388,6 +6401,13 @@ You cannot remove protected categories.
|
|||
<tag>fail</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="OfferedCard"
|
||||
type="notifytip">
|
||||
You have offered a calling card to [NAME].
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="UnableToBuyWhileDownloading"
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@
|
|||
right="-3"
|
||||
mouse_opaque="true"
|
||||
name="speaking_indicator"
|
||||
tool_tip="Displays that the avatar is in voice chat range and the power level if speaking"
|
||||
visible="true"
|
||||
width="20" />
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -23,17 +23,16 @@
|
|||
color="ScrollBgWriteableColor"
|
||||
top="-1"
|
||||
width="260" />
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
bottom="296"
|
||||
follows="left|bottom"
|
||||
height="14"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
name="groupcount">
|
||||
You belong to [COUNT] out of [MAX] groups.
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
bottom="296"
|
||||
follows="left|bottom"
|
||||
height="14"
|
||||
layout="topleft"
|
||||
right="-10"
|
||||
name="groupcount">
|
||||
</text>
|
||||
<button
|
||||
top="-1"
|
||||
follows="top|right"
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
<layout_stack
|
||||
animate="false"
|
||||
follows="all"
|
||||
height="275"
|
||||
height="375"
|
||||
layout="bottomleft"
|
||||
name="postcard_image_params_ls"
|
||||
left_delta="0"
|
||||
|
|
|
|||
|
|
@ -692,6 +692,7 @@
|
|||
name="VoiceMultiInstance"
|
||||
width="400"/>
|
||||
|
||||
<!--
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
|
|
@ -703,7 +704,6 @@
|
|||
width="112">
|
||||
Listen from:
|
||||
</text>
|
||||
<!--
|
||||
<icon
|
||||
follows="left|top"
|
||||
height="18"
|
||||
|
|
@ -732,14 +732,14 @@
|
|||
control_name="VoiceEarLocation"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
left="25"
|
||||
width="400"
|
||||
height="20"
|
||||
top_pad="-17"
|
||||
height="60"
|
||||
top_pad="0"
|
||||
name="ear_location">
|
||||
<radio_item
|
||||
height="19"
|
||||
label="Camera position"
|
||||
label="Hear Voice from Camera position"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
name="0"
|
||||
|
|
@ -747,20 +747,18 @@
|
|||
<radio_item
|
||||
height="19"
|
||||
follows="left|top"
|
||||
label="Avatar position"
|
||||
label="Hear Voice from Avatar position"
|
||||
layout="topleft"
|
||||
left_pad="-16"
|
||||
name="1"
|
||||
top_delta ="0"
|
||||
top_pad="-2"
|
||||
width="150" />
|
||||
<radio_item
|
||||
height="19"
|
||||
follows="left|top"
|
||||
label="Speaker position"
|
||||
label="Hear Voice equally from everyone"
|
||||
layout="topleft"
|
||||
left_pad="-16"
|
||||
name="2"
|
||||
top_delta ="0"
|
||||
top_pad="-2"
|
||||
width="150" />
|
||||
</radio_group>
|
||||
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@
|
|||
<layout_stack
|
||||
animate="false"
|
||||
follows="all"
|
||||
height="275"
|
||||
height="325"
|
||||
layout="bottomleft"
|
||||
name="local_image_params_ls"
|
||||
left_delta="0"
|
||||
|
|
|
|||
|
|
@ -2674,4 +2674,8 @@ Try enclosing path to the editor with double quotes.
|
|||
<string name="Inbox_Folderview_New">New</string>
|
||||
|
||||
<string name="Mouselook_Unknown_Avatar">Unknown agent</string>
|
||||
|
||||
<string name="groupcountstring">You belong to [COUNT] groups ([REMAINING] remaining).</string>
|
||||
<string name="groupcountunlimitedstring">You belong to [COUNT] groups.</string>
|
||||
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<menu_item_call label="Nowy znajomy" name="Add Friend"/>
|
||||
<menu_item_call label="Dodaj do Zestawu" name="Add to Set"/>
|
||||
<menu_item_call label="Wiadomość IM" name="Send IM..."/>
|
||||
<menu_item_call label="Dodaj wizytówkę" name="Add Calling Card"/>
|
||||
<menu_item_call label="Daj wizytówkę" name="Give Calling Card"/>
|
||||
<menu_item_call label="Zadzwoń" name="Call"/>
|
||||
<menu_item_call label="Zaproś do grupy" name="Invite..."/>
|
||||
<context_menu label="Irytacja?" name="Annoyance">
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<context_menu name="Avatar Pie">
|
||||
<menu_item_call label="Zobacz profil" name="Profile..."/>
|
||||
<menu_item_call label="Nowy znajomy" name="Add Friend"/>
|
||||
<menu_item_call label="Dodaj wizytówkę" name="Add Calling Card"/>
|
||||
<menu_item_call label="Daj wizytówkę" name="Give Calling Card"/>
|
||||
<menu_item_call label="Dodaj do Zestawu" name="Add to Set"/>
|
||||
<menu_item_call label="Wiadomość IM" name="Send IM..."/>
|
||||
<menu_item_call label="Zadzwoń" name="Call"/>
|
||||
|
|
|
|||
|
|
@ -1,22 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menu name="menu_inventory_add">
|
||||
<menu label="Załaduj" name="upload">
|
||||
<menu_item_call label="Obraz ([COST])..." name="Upload Image"/>
|
||||
<menu_item_call label="Teksturę ([COST])..." name="Upload Image"/>
|
||||
<menu_item_call label="Dźwięk ([COST])..." name="Upload Sound"/>
|
||||
<menu_item_call label="Animację ([COST])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Model meszowy..." name="Upload Model"/>
|
||||
<menu_item_call label="Zbiór plików ([COST] za jeden)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Zbiór wielu plików ([COST] za plik)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Ustaw domyślne uprawnienia ładowania" name="perm prefs"/>
|
||||
<menu_item_call label="Importuj zbiór części..." name="import linkset"/>
|
||||
</menu>
|
||||
<menu_item_call label="Nowy folder" name="New Folder"/>
|
||||
<menu_item_call label="Nowy skrypt" name="New Script"/>
|
||||
<menu_item_call label="Nowa nota" name="New Note"/>
|
||||
<menu_item_call label="Nowy gest" name="New Gesture"/>
|
||||
<menu label="Nowe Ubranie" name="New Clothes">
|
||||
<menu label="Nowe ubranie" name="New Clothes">
|
||||
<menu_item_call label="Nowa koszula" name="New Shirt"/>
|
||||
<menu_item_call label="Nowe spodnie" name="New Pants"/>
|
||||
<menu_item_call label="Nowe buty" name="New Shoes"/>
|
||||
<menu_item_call label="Nowe skarpetki" name="New Socks"/>
|
||||
<menu_item_call label="Nowe skarpety" name="New Socks"/>
|
||||
<menu_item_call label="Nowa kurtka" name="New Jacket"/>
|
||||
<menu_item_call label="Nowa spódnica" name="New Skirt"/>
|
||||
<menu_item_call label="Nowe rękawiczki" name="New Gloves"/>
|
||||
|
|
@ -26,7 +27,7 @@
|
|||
<menu_item_call label="Nowy tatuaż" name="New Tattoo"/>
|
||||
<menu_item_call label="Nowa fizyka" name="New Physics"/>
|
||||
</menu>
|
||||
<menu label="Nowa Część Ciała" name="New Body Parts">
|
||||
<menu label="Nowa część ciała" name="New Body Parts">
|
||||
<menu_item_call label="Nowy kształt" name="New Shape"/>
|
||||
<menu_item_call label="Nowa skórka" name="New Skin"/>
|
||||
<menu_item_call label="Nowe włosy" name="New Hair"/>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<pie_slice label="Zapłać..." name="Pay..."/>
|
||||
<pie_menu name="Avatar Pie More 1" label="Więcej >">
|
||||
<pie_slice label="Unieruchom" name="Freeze..."/>
|
||||
<pie_slice label="Daj wizytówkę" name="Add Calling Card"/>
|
||||
<pie_slice label="Daj wizytówkę" name="Give Calling Card"/>
|
||||
<pie_slice label="Zaproś do grupy" name="Group Invite..."/>
|
||||
<pie_slice label="Wyrzuć..." name="Eject..."/>
|
||||
<pie_menu name="Avatar Pie More 2" label="Więcej >">
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<pie_slice label="Zapłać..." name="Pay..."/>
|
||||
<pie_menu name="Avatar Pie More 1" label="Więcej >">
|
||||
<pie_slice label="Unieruchom" name="Freeze..."/>
|
||||
<pie_slice label="Daj wizytówkę" name="Add Calling Card"/>
|
||||
<pie_slice label="Daj wizytówkę" name="Give Calling Card"/>
|
||||
<pie_slice label="Zaproś do grupy" name="Group Invite..."/>
|
||||
<pie_slice label="Wyrzuć..." name="Eject..."/>
|
||||
<pie_menu name="Avatar Pie More 2" label="Więcej >">
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
<menu_item_call label="Animację ([COST])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Model meszowy..." name="Upload Model"/>
|
||||
<menu_item_call label="Zbiór wielu plików..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Ustaw domyślne uprawnienia dla ładowania" name="perm prefs"/>
|
||||
<menu_item_call label="Ustaw domyślne uprawnienia ładowania" name="perm prefs"/>
|
||||
<menu_item_call label="Importuj zbiór części..." name="import linkset"/>
|
||||
</menu>
|
||||
<menu_item_call label="Uzyskaj status administratora" name="Request Admin Options"/>
|
||||
|
|
@ -207,7 +207,7 @@
|
|||
<menu_item_call label="Animację ([COST])..." name="Upload Animation"/>
|
||||
<menu_item_call label="Model meszowy..." name="Upload Model"/>
|
||||
<menu_item_call label="Zbiór wielu plików ([COST] za plik)..." name="Bulk Upload"/>
|
||||
<menu_item_call label="Ustaw domyślne uprawnienia dla ładowania" name="perm prefs"/>
|
||||
<menu_item_call label="Ustaw domyślne uprawnienia ładowania" name="perm prefs"/>
|
||||
<menu_item_call label="Importuj zbiór części..." name="import linkset"/>
|
||||
</menu>
|
||||
<menu_item_call label="Cofnij" name="Undo"/>
|
||||
|
|
|
|||
|
|
@ -1751,6 +1751,10 @@ co przekracza limit [LIMIT].
|
|||
Na pewno chcesz się teleportować do <nolink>[LOCATION]</nolink>?
|
||||
<usetemplate ignoretext="Potwierdź próbę teleportacji do zapisanego miejsca" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
|
||||
</notification>
|
||||
<notification name="TeleportViaSLAPP">
|
||||
Na pewno chcesz się teleportować do <nolink>[LOCATION]</nolink>?
|
||||
<usetemplate ignoretext="Potwierdź próbę teleportacji przez SLAPP" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
|
||||
</notification>
|
||||
<notification name="TeleportToPick">
|
||||
Teleportować do [PICK]?
|
||||
<usetemplate ignoretext="Potwierdź, że chcesz teleportować się do miejsca w Ulubionych" name="okcancelignore" notext="Anuluj" yestext="Teleportuj"/>
|
||||
|
|
@ -2528,6 +2532,9 @@ Spróbuj jeszcze raz.
|
|||
<notification name="CannotRemoveProtectedCategories">
|
||||
Nie możesz usunąć chronionych kategorii.
|
||||
</notification>
|
||||
<notification name="OfferedCard">
|
||||
Zaoferowano wizytówkę osobie [NAME].
|
||||
</notification>
|
||||
<notification name="UnableToBuyWhileDownloading">
|
||||
Nie można kupować w trakcie ładowania danych obiektu.
|
||||
Spróbuj jeszcze raz.
|
||||
|
|
@ -3829,6 +3836,9 @@ Anulowano.
|
|||
Spróbuj podejść bliżej. Nie można usiąść na obiekcie,
|
||||
bo nie jest w tym samym regionie, co Ty.
|
||||
</notification>
|
||||
<notification name="ChatHistoryIsBusyAlert">
|
||||
Plik historii czatu jest w tej chwili przetwarzany przez poprzednią operację. Spróbuj ponownie za kilka minut lub wybierz czat innej osoby.
|
||||
</notification>
|
||||
<notification name="NoNewObjectRegionFull">
|
||||
Nie można utworzyć nowego obiektu. Region jest pełny.
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -30,4 +30,5 @@
|
|||
<slider name="volume_slider" tool_tip="Siła głosu"/>
|
||||
<button name="info_btn" tool_tip="Więcej informacji"/>
|
||||
<button name="profile_btn" tool_tip="Zobacz profil"/>
|
||||
<output_monitor name="speaking_indicator" tool_tip="Awatar jest w zasięgu czatu głosowego, siła głosu podczas mówienia"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="groups">
|
||||
<text name="groupcount">
|
||||
Należysz do [COUNT] z [MAX] grup.
|
||||
</text>
|
||||
<button label="IM/Dzwoń" name="chat_btn" tool_tip="Otwórz sesję IM"/>
|
||||
<button label="Informacje" name="info_btn"/>
|
||||
<button label="Tytuły grup" name="titles_btn"/>
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@
|
|||
<check_box label="Powiadom, jeśli wersja symulatora ulegnie zmianie podczas zmiany regionu" name="FSShowServerVersionChangeNotice" tool_tip="Wyświetla powiadomienie, jeśli wersja symulatora ulegnie zmianie podczas teleportowania się lub przekraczania granicy regionu."/>
|
||||
<check_box label="Pokazuj kanał symulatora w pasku statusu" name="FSStatusbarShowSimulatorVersion" tool_tip="Pokazuj obecny kanał symulatora na pasku statusu w stylu V1."/>
|
||||
<check_box label="Obróć awatara podczas cofania się" name="backwardsturnavatar" tool_tip="Obracaj awatara podczas cofania się w taki sposób, aby twarz była skierowana w stronę kamery."/>
|
||||
<check_box label="Obróć awatara w kierunku zaznaczonego obiektu" name="FSTurnAvatarToSelectedObject" tool_tip="Obracaj awatara w taki sposób, aby twarz była skierowana w stronę zaznaczonego w danej chwili obiektu."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -59,13 +59,10 @@
|
|||
<panel label="Rozmowy głosowe" name="Media Voice tab">
|
||||
<check_box label="Włącz rozmowy głosowe" name="enable_voice_check"/>
|
||||
<check_box label="Gdy działa kilka kopii przeglądarki na raz, to zezwól na rozmowy głosowe w każdej z nich" name="VoiceMultiInstance" />
|
||||
<text name="Listen from" width="75">
|
||||
Odtwarzaj z:
|
||||
</text>
|
||||
<radio_group name="ear_location">
|
||||
<radio_item width="125" label="pozycji kamery" name="0"/>
|
||||
<radio_item width="175" label="pozycji mojego awatara" name="1"/>
|
||||
<radio_item width="125" label="pozycji mówiącego" name="2"/>
|
||||
<radio_item label="Odtwarzaj głos z pozycji kamery" name="0"/>
|
||||
<radio_item label="Odtwarzaj głos z pozycji mojego awatara" name="1"/>
|
||||
<radio_item label="Odtwarzaj głos jednakowo od wszystkich" name="2"/>
|
||||
</radio_group>
|
||||
<check_box label="Poruszaj ustami awatara podczas mówienia" name="enable_lip_sync"/>
|
||||
<check_box label="Pokazuj wskaźniki dźwięku ponad awatarami" tool_tip="Pokazuj wskaźniki dźwięku (białe kropki) ponad awatarami" name="FSShowVoiceVisualizer"/>
|
||||
|
|
|
|||
|
|
@ -5411,4 +5411,13 @@ Spróbuj załączyć ścieżkę do edytora w cytowaniu.
|
|||
<string name="Inbox_Folderview_New">
|
||||
Nowe
|
||||
</string>
|
||||
<string name="Mouselook_Unknown_Avatar">
|
||||
Nieznana osoba
|
||||
</string>
|
||||
<string name="groupcountstring">
|
||||
Należysz do [COUNT] grup ([REMAINING] pozostało).
|
||||
</string>
|
||||
<string name="groupcountunlimitedstring">
|
||||
Należysz do [COUNT] grup.
|
||||
</string>
|
||||
</strings>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
height="150"
|
||||
width="290"
|
||||
layout="topleft"
|
||||
name="region_restarting"
|
||||
help_topic="floater_region_restarting"
|
||||
single_instance="true"
|
||||
reuse_instance="false"
|
||||
title="Region Restart">
|
||||
<string name="RegionName">
|
||||
The region you are in now ([NAME]) is about to restart.
|
||||
|
||||
If you stay in this region you will be logged out.
|
||||
</string>
|
||||
<string name="RestartSeconds">
|
||||
Seconds until restart
|
||||
[SECONDS]
|
||||
</string>
|
||||
<panel
|
||||
name="layout_panel_1"
|
||||
height="150"
|
||||
width="290"
|
||||
follows="right|top"
|
||||
top="0"
|
||||
left="0"
|
||||
background_visible="true"
|
||||
bg_opaque_color="Orange"
|
||||
bg_alpha_color="Orange">
|
||||
|
||||
<icon color="1.0 1.0 1.0 1.0"
|
||||
tab_stop="false"
|
||||
mouse_opaque="false"
|
||||
name="icon"
|
||||
width="32"
|
||||
height="32"
|
||||
image_name="notify_caution_icon.tga"
|
||||
follows="left|top">
|
||||
</icon>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="region_name"
|
||||
text_color="SL-Black"
|
||||
font="SansSerifBold"
|
||||
word_wrap="true"
|
||||
height="100"
|
||||
top="5"
|
||||
left="40"
|
||||
width="230">
|
||||
The region you are in now (-The longest region name-) is about to restart.
|
||||
|
||||
If you stay in this region you will be logged out.
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="restart_seconds"
|
||||
text_color="SL-Black"
|
||||
font="SansSerifLargeBold"
|
||||
height="40"
|
||||
top="110"
|
||||
left="0"
|
||||
halign="center"
|
||||
width="290">
|
||||
Seconds until restart
|
||||
32767
|
||||
</text>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
height="150"
|
||||
width="290"
|
||||
layout="topleft"
|
||||
name="region_restarting"
|
||||
help_topic="floater_region_restarting"
|
||||
single_instance="true"
|
||||
reuse_instance="false"
|
||||
title="Region Restart">
|
||||
<string name="RegionName">
|
||||
The region you are in now ([NAME]) is about to restart.
|
||||
|
||||
If you stay in this region you will be logged out.
|
||||
</string>
|
||||
<string name="RestartSeconds">
|
||||
Seconds until restart
|
||||
[SECONDS]
|
||||
</string>
|
||||
<panel
|
||||
name="layout_panel_1"
|
||||
height="150"
|
||||
width="290"
|
||||
follows="right|top"
|
||||
top="0"
|
||||
left="0"
|
||||
background_visible="true"
|
||||
bg_opaque_color="Orange"
|
||||
bg_alpha_color="Orange">
|
||||
|
||||
<icon color="1.0 1.0 1.0 1.0"
|
||||
tab_stop="false"
|
||||
mouse_opaque="false"
|
||||
name="icon"
|
||||
width="32"
|
||||
height="32"
|
||||
image_name="notify_caution_icon.tga"
|
||||
follows="left|top">
|
||||
</icon>
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="region_name"
|
||||
text_color="SL-Black"
|
||||
font="SansSerifBold"
|
||||
word_wrap="true"
|
||||
height="100"
|
||||
top="5"
|
||||
left="40"
|
||||
width="230">
|
||||
The region you are in now (-The longest region name-) is about to restart.
|
||||
|
||||
If you stay in this region you will be logged out.
|
||||
</text>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
name="restart_seconds"
|
||||
text_color="SL-Black"
|
||||
font="SansSerifLargeBold"
|
||||
height="40"
|
||||
top="110"
|
||||
left="0"
|
||||
halign="center"
|
||||
width="290">
|
||||
Seconds until restart
|
||||
32767
|
||||
</text>
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
@ -1271,6 +1271,7 @@ class LinuxManifest(ViewerManifest):
|
|||
self.path("libalut.so*")
|
||||
self.path("libpng15.so.15") #use provided libpng to workaround incompatible system versions on some distros
|
||||
self.path("libpng15.so.15.13.0") #use provided libpng to workaround incompatible system versions on some distros
|
||||
self.path("libopenal.so", "libopenal.so.1") # Install as versioned file in case it's missing from the 3p- and won't get copied below
|
||||
self.path("libopenal.so*")
|
||||
#self.path("libnotify.so.1.1.2", "libnotify.so.1") # LO - uncomment when testing libnotify(growl) on linux
|
||||
self.path("libpangox-1.0.so*")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
[firestorm]
|
||||
windows=build_directory|build-vc100_x64
|
||||
linux=build_directory|build-linux-x86_64
|
||||
|
||||
[expat]
|
||||
windows=http://downloads.phoenixviewer.com/expat-2.0.1-windows-x64-20130802.tar.bz2
|
||||
|
|
|
|||
Loading…
Reference in New Issue