Merge branch 'master' of https://github.com/Lirusaito/SingularityViewer.git
This commit is contained in:
210
autobuild.xml
210
autobuild.xml
@@ -120,18 +120,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>586739a99e1366cd9e270dc7c9a4e519</string>
|
||||
<string>1e7eb1da6e3e792db85f59012680a877</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/apr_suite-1.5.2-windows64-201603261452.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/apr_suite-1.6.3-1.6.1-1.2.2-windows64-201712260041.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.5.2</string>
|
||||
<string>1.6.3-1.6.1-1.2.2</string>
|
||||
</map>
|
||||
<key>ares</key>
|
||||
<map>
|
||||
@@ -292,18 +292,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f2ff62721cffd4556d18cbec67152de1</string>
|
||||
<string>6faba32dcfb80c26bafd4a3e06cff268</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/boost-1.60.0-windows64-201601160313.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/boost-1.66.0-windows64-201712260832.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.60.0</string>
|
||||
<string>1.66.0</string>
|
||||
</map>
|
||||
<key>colladadom</key>
|
||||
<map>
|
||||
@@ -376,11 +376,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>46e48bcb7643c4819bf6f35f518a0db7</string>
|
||||
<string>65628150b732274f0bdd0fa33d6ca650</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/colladadom-2.3-windows64-201601160353.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/colladadom-2.3-windows64-201712260938.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -392,7 +392,7 @@
|
||||
<key>curl</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 1996 - 2016, Daniel Stenberg, (daniel@haxx.se).</string>
|
||||
<string>Copyright (c) 1996 - 2017, Daniel Stenberg,(daniel@haxx.se), and many contributors.</string>
|
||||
<key>description</key>
|
||||
<string>Library for transferring data specified with URL syntax</string>
|
||||
<key>license</key>
|
||||
@@ -462,18 +462,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>86feef4905c2e46a9cbdc7a1df23d83f</string>
|
||||
<string>7b56b59c56389a8943a04b24bb22ada4</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/curl-7.48.0-windows64-201603231658.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/curl-7.57.0-windows64-201712260745.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>7.48.0</string>
|
||||
<string>7.57.0</string>
|
||||
</map>
|
||||
<key>dbus-glib</key>
|
||||
<map>
|
||||
@@ -510,7 +510,7 @@
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/linux64/lib/dbus_glib-0.76-linux64-201501030130.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/linux64/lib/dbus_glib-0.76-linux64-201501030130.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
@@ -542,7 +542,7 @@
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/common/lib/dictionaries-1-common-201412301501.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/common/lib/dictionaries-1-common-201412301501.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
@@ -554,7 +554,7 @@
|
||||
<key>expat</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper - Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.</string>
|
||||
<string>Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper - Copyright (c) 2001-2017 Expat maintainers</string>
|
||||
<key>description</key>
|
||||
<string>Expat is an XML parser library written in C</string>
|
||||
<key>license</key>
|
||||
@@ -624,18 +624,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0cf6f4529ade22b7ae78da5d6303ed87</string>
|
||||
<string>db56a24bbac59d9ad8b98d40b7140c29</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/expat-2.1.1-windows64-201603261406.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/expat-2.2.5-windows64-201712251923.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.1.1</string>
|
||||
<string>2.2.5</string>
|
||||
</map>
|
||||
<key>fmodstudio</key>
|
||||
<map>
|
||||
@@ -712,18 +712,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>13ac02d0444e46c17fa20c20a9828647</string>
|
||||
<string>c2c45c2ebd9fd930098aa2a3b85bbe5f</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib/fmodstudio-1.08.04-windows64-201605291157.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib/fmodstudio-1.10.02-windows64-201712251435.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.08.04</string>
|
||||
<string>1.10.02</string>
|
||||
</map>
|
||||
<key>fontconfig</key>
|
||||
<map>
|
||||
@@ -818,7 +818,7 @@
|
||||
<key>freetype</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright 2006-2016 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
|
||||
<string>Copyright 2006-2017 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
|
||||
<key>description</key>
|
||||
<string>Font rendering library</string>
|
||||
<key>license</key>
|
||||
@@ -888,18 +888,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e8c0acbe631d7a4cb1a2890b90e5bc8c</string>
|
||||
<string>7c028ec152b1dee1313c084d96a5d276</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/freetype-2.6.3-windows64-201603011807.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/freetype-2.8.1-windows64-201712260751.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>2.6.3</string>
|
||||
<string>2.8.1</string>
|
||||
</map>
|
||||
<key>glext</key>
|
||||
<map>
|
||||
@@ -1038,11 +1038,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>2da9e546e4f574ec79ea8962f2c962da</string>
|
||||
<string>c5c04c164ff057a43928de2f2b83470e</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/glod-1.0pre4-windows64-201512092328.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/glod-1.0pre4-windows64-201712251340.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -1124,11 +1124,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e74e54c2042b1539a81012501e4b67af</string>
|
||||
<string>71ffc5cae4da7e2e7aac856da44cb8c4</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/google_breakpad-9e60a27-windows64-201512101817.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc141/google_breakpad-7398ce15b79da-windows64-201703081616.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -1338,18 +1338,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>982395e50a36334899b900d563003b83</string>
|
||||
<string>d60f195778344b88cc47dc5e19af2cf8</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/jpeglib-1.4.2-windows64-201512092307.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/jpeglib-1.5.3-windows64-201712251431.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.4.2</string>
|
||||
<string>1.5.3</string>
|
||||
</map>
|
||||
<key>jsoncpp</key>
|
||||
<map>
|
||||
@@ -1424,18 +1424,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4cfc311430b84c8a9eba472fd4469f2e</string>
|
||||
<string>592a4145fcc71be4ddae58b265885382</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/jsoncpp-1.6.5-windows64-201512092309.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/jsoncpp-1.8.4-windows64-201712251058.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.6.5</string>
|
||||
<string>1.8.4</string>
|
||||
</map>
|
||||
<key>libhunspell</key>
|
||||
<map>
|
||||
@@ -1510,11 +1510,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>202ec606e90c6a705bc075c334d76f86</string>
|
||||
<string>46e0276052dc614fe890f2a5d6f814b9</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/libhunspell-1.3.3-windows64-201512100002.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/libhunspell-1.6.2-windows64-201712251236.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -1616,11 +1616,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>37da82fd6de8673a46c2c0860b54d6bf</string>
|
||||
<string>3ac8047b38b617ad686591e00100d6af</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/libndofdev-0.1-windows64-201512122040.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/libndofdev-0.1-windows64-201712251124.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -1664,7 +1664,7 @@
|
||||
<key>libpng</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2004, 2006-2016 Glenn Randers-Pehrson</string>
|
||||
<string>Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson</string>
|
||||
<key>description</key>
|
||||
<string>PNG Reference library</string>
|
||||
<key>license</key>
|
||||
@@ -1734,18 +1734,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b2f166e496fc19958777c92ffd032331</string>
|
||||
<string>528889464c0766d762bd528cf82558db</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/libpng-1.6.21-windows64-201603011809.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/libpng-1.6.34-windows64-201712260746.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.6.21</string>
|
||||
<string>1.6.34</string>
|
||||
</map>
|
||||
<key>libxml2</key>
|
||||
<map>
|
||||
@@ -1820,11 +1820,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4453be9f68208147e4a7d508db677583</string>
|
||||
<string>f69b1d4ec7ffdeec4429413ea640583d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/libxml2-2.9.3-windows64-201512122133.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/libxml2-2.9.7-windows64-201712260755.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -2044,18 +2044,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>3058f1de30b4738bb087a21561cdd9a8</string>
|
||||
<string>619598988143e12ad0d1a271f881b3bd</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///c:/devel/secondlife/packages/windows64/nvapi-R361v2-windows64-201604020338.tar.bz2</string>
|
||||
<string>file:///c:/devel/secondlife/packages/windows64/nvapi-R384-windows64-201712260642.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>R361v2</string>
|
||||
<string>R384</string>
|
||||
</map>
|
||||
<key>ogg_vorbis</key>
|
||||
<map>
|
||||
@@ -2130,11 +2130,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>c22591d8db9dc3353e4d3dc3d1a2b264</string>
|
||||
<string>01ae2d298489ea66597c5e302e8e4525</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/ogg_vorbis-1.3.2-1.3.5-windows64-201512122053.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/ogg_vorbis-1.3.2-1.3.5-windows64-201712251411.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -2222,14 +2222,14 @@
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib/openal-1.16.0-1.1.0-windows64-201504270534.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib/openal-1.16.0-1.1.0-windows64-201504270534.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.16.0-1.1.0</string>
|
||||
<string>1.17.2-1.1.0</string>
|
||||
</map>
|
||||
<key>openssl</key>
|
||||
<map>
|
||||
@@ -2304,18 +2304,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ec86d96ffcbdc10e715e27b4b0bbda43</string>
|
||||
<string>bd35903f309ccf026a2c448fd8613cc0</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/openssl-1.0.2g-windows64-201603011842.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/openssl-1.1.0g-windows64-201712260729.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.0.2g</string>
|
||||
<string>1.1.0g</string>
|
||||
</map>
|
||||
<key>quicktime</key>
|
||||
<map>
|
||||
@@ -2408,32 +2408,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>399afab7047e6fa62e7b2fb1768059ea</string>
|
||||
<string>47a3316dae47cc4e7c1ea7b74ba8dd1e</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/vivox_3p-slvoice/rev/302004/arch/CYGWIN/installer/slvoice-4.6.0017.22050.302004-windows-302004.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>dabbc146137c13ec2ea026aa69e1f045</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib/slvoice-4.6.0017.21209.298329-windows64-298329.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>4.6.0017.21209.298329</string>
|
||||
<string>4.6.0017.22050</string>
|
||||
</map>
|
||||
<key>tut</key>
|
||||
<map>
|
||||
@@ -2458,7 +2444,7 @@
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/common/lib/tut-2008.11.30-common-201504282317.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/common/lib/tut-2008.11.30-common-201504282317.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
@@ -2540,11 +2526,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>dae3118551880f593f8ee907c122f097</string>
|
||||
<string>ad1a435de73b7ee6d07f6c81a4cb1910</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/uriparser-0.8.4-windows64-201512081840.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/uriparser-0.8.4-windows64-201712251116.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -2572,11 +2558,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>a38ec464042e1d5e67231d9bcd181ae2</string>
|
||||
<string>f193ec9e594d857d22c067c6e52622a9</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows/lib-vc14/vcredist-14.0.23918.0-windows-201606250656.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows/lib-vc141/vcredist-14.10.25017.0-windows-201705270440.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
@@ -2586,18 +2572,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>0d688527ab7d08f6b7c7a5f73175e4f8</string>
|
||||
<string>e895f4b5d24b372a360c3a8fe3bc0398</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc14/vcredist-14.0.23918.0-windows64-201606250656.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/vcredist-14.12.25810.0-windows64-201712251445.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>14.0.23918.0</string>
|
||||
<string>14.12.25810.0</string>
|
||||
</map>
|
||||
<key>xmlrpc-epi</key>
|
||||
<map>
|
||||
@@ -2672,11 +2658,11 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>1afa5a6bdbc5689e14120628dc0fc124</string>
|
||||
<string>59f0be2732e93eceaa155d98c2fcee9c</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/xmlrpc_epi-0.54.2-windows64-201603261459.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/xmlrpc_epi-0.54.2-windows64-201712260035.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
@@ -2688,7 +2674,7 @@
|
||||
<key>zlib</key>
|
||||
<map>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string>
|
||||
<string>Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler</string>
|
||||
<key>description</key>
|
||||
<string>Zlib Data Compression Library</string>
|
||||
<key>license</key>
|
||||
@@ -2758,18 +2744,18 @@
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>5b3a58a6a939e83f94137171b7f814de</string>
|
||||
<string>ed6da4296e2fdfc132b4f12d35890ada</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>http://depot.alchemyviewer.org/pub/windows64/lib-vc14/zlib-1.2.8-windows64-201512071625.tar.bz2</string>
|
||||
<string>https://depot.alchemyviewer.org/pub/windows64/lib-vc142/zlib-1.2.11-windows64-201712260711.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.2.8</string>
|
||||
<string>1.2.11</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>package_description</key>
|
||||
@@ -3013,7 +2999,7 @@
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>build_directory</key>
|
||||
<string>build-vc140</string>
|
||||
<string>build-vc141</string>
|
||||
<key>configurations</key>
|
||||
<map>
|
||||
<key>RelWithDebInfo</key>
|
||||
@@ -3041,20 +3027,12 @@
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>Singularity.sln</string>
|
||||
<string>--config</string>
|
||||
<string>RelWithDebInfo</string>
|
||||
<string>--startup</string>
|
||||
<string>singularity-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>"Visual Studio 14"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.10586.0"</string>
|
||||
<string>"Visual Studio 15"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.16299.0"</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
</array>
|
||||
</map>
|
||||
@@ -3088,20 +3066,12 @@
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>Singularity.sln</string>
|
||||
<string>--config</string>
|
||||
<string>Release</string>
|
||||
<string>--startup</string>
|
||||
<string>singularity-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>"Visual Studio 14"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.10586.0"</string>
|
||||
<string>"Visual Studio 15"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.16299.0"</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
</array>
|
||||
</map>
|
||||
@@ -3115,7 +3085,7 @@
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>build_directory</key>
|
||||
<string>build-vc140-x86_64</string>
|
||||
<string>build-vc141-x86_64</string>
|
||||
<key>configurations</key>
|
||||
<map>
|
||||
<key>RelWithDebInfo</key>
|
||||
@@ -3143,20 +3113,12 @@
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>Singularity.sln</string>
|
||||
<string>--config</string>
|
||||
<string>RelWithDebInfo</string>
|
||||
<string>--startup</string>
|
||||
<string>singularity-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>"Visual Studio 14 Win64"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.10586.0"</string>
|
||||
<string>"Visual Studio 15 Win64"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.16299.0"</string>
|
||||
<string>-DWORD_SIZE:STRING=64</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
</array>
|
||||
@@ -3191,20 +3153,12 @@
|
||||
<key>arguments</key>
|
||||
<array>
|
||||
<string>..\indra</string>
|
||||
<string>&&</string>
|
||||
<string>..\indra\tools\vstool\VSTool.exe</string>
|
||||
<string>--solution</string>
|
||||
<string>Singularity.sln</string>
|
||||
<string>--config</string>
|
||||
<string>Release</string>
|
||||
<string>--startup</string>
|
||||
<string>singularity-bin</string>
|
||||
</array>
|
||||
<key>options</key>
|
||||
<array>
|
||||
<string>-G</string>
|
||||
<string>"Visual Studio 14 Win64"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.10586.0"</string>
|
||||
<string>"Visual Studio 15 Win64"</string>
|
||||
<string>-DCMAKE_SYSTEM_VERSION="10.0.16299.0"</string>
|
||||
<string>-DWORD_SIZE:STRING=64</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
</array>
|
||||
|
||||
@@ -10,8 +10,8 @@ else (STANDALONE)
|
||||
use_prebuilt_binary(curl)
|
||||
if (WINDOWS)
|
||||
set(CURL_LIBRARIES
|
||||
debug libcurld
|
||||
optimized libcurl)
|
||||
debug libcurl_a_debug
|
||||
optimized libcurl_a)
|
||||
else (WINDOWS)
|
||||
use_prebuilt_binary(libidn)
|
||||
set(CURL_LIBRARIES curl idn)
|
||||
|
||||
@@ -22,10 +22,8 @@ if(WINDOWS)
|
||||
SLVoice.exe
|
||||
ca-bundle.crt
|
||||
libsndfile-1.dll
|
||||
vivoxplatform.dll
|
||||
vivoxsdk.dll
|
||||
ortp.dll
|
||||
zlib1.dll
|
||||
vivoxoal.dll
|
||||
)
|
||||
|
||||
@@ -37,8 +35,6 @@ if(WINDOWS)
|
||||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
ssleay32.dll
|
||||
libeay32.dll
|
||||
glod.dll
|
||||
libhunspell.dll
|
||||
)
|
||||
@@ -48,12 +44,30 @@ if(WINDOWS)
|
||||
libapr-1.dll
|
||||
libaprutil-1.dll
|
||||
libapriconv-1.dll
|
||||
ssleay32.dll
|
||||
libeay32.dll
|
||||
glod.dll
|
||||
libhunspell.dll
|
||||
)
|
||||
|
||||
if(WORD_SIZE STREQUAL 64)
|
||||
list(APPEND debug_files
|
||||
libcrypto-1_1-x64.dll
|
||||
libssl-1_1-x64.dll
|
||||
)
|
||||
list(APPEND release_files
|
||||
libcrypto-1_1-x64.dll
|
||||
libssl-1_1-x64.dll
|
||||
)
|
||||
else(WORD_SIZE STREQUAL 64)
|
||||
list(APPEND debug_files
|
||||
libcrypto-1_1.dll
|
||||
libssl-1_1.dll
|
||||
)
|
||||
list(APPEND release_files
|
||||
libcrypto-1_1.dll
|
||||
libssl-1_1.dll
|
||||
)
|
||||
endif(WORD_SIZE STREQUAL 64)
|
||||
|
||||
if(NOT DISABLE_TCMALLOC)
|
||||
set(debug_files ${debug_files} libtcmalloc_minimal-debug.dll)
|
||||
set(release_files ${release_files} libtcmalloc_minimal.dll)
|
||||
|
||||
@@ -9,7 +9,7 @@ if (STANDALONE OR USE_SYSTEM_OPENSSL)
|
||||
else (STANDALONE OR USE_SYSTEM_OPENSSL)
|
||||
use_prebuilt_binary(openssl)
|
||||
if (WINDOWS)
|
||||
set(OPENSSL_LIBRARIES ssleay32 libeay32)
|
||||
set(OPENSSL_LIBRARIES libssl libcrypto)
|
||||
else (WINDOWS)
|
||||
set(OPENSSL_LIBRARIES ssl)
|
||||
endif (WINDOWS)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
// Windows uses structured exceptions, so it's handled a bit differently.
|
||||
//
|
||||
#if LL_WINDOWS
|
||||
#include "windows.h"
|
||||
#include <windows.h>
|
||||
|
||||
LONG WINAPI default_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop);
|
||||
BOOL ConsoleCtrlHandler(DWORD fdwCtrlType);
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
#include <sys/param.h> // Need PATH_MAX in APR headers...
|
||||
#endif
|
||||
|
||||
#include "llwin32headerslean.h"
|
||||
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
#include "apr_thread_proc.h"
|
||||
|
||||
@@ -33,9 +33,7 @@
|
||||
#ifndef LL_LLPROCESSLAUNCHER_H
|
||||
#define LL_LLPROCESSLAUNCHER_H
|
||||
|
||||
#if LL_WINDOWS
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include "llwin32headerslean.h"
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#endif
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <Ws2ipdef.h>
|
||||
#include <windows.h>
|
||||
// reset to default, which is lean
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#endif
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <Ws2ipdef.h>
|
||||
#include <windows.h>
|
||||
#undef NOMINMAX
|
||||
#endif
|
||||
|
||||
@@ -244,6 +244,9 @@ public:
|
||||
|
||||
// Src and dst are same size. Src has 4 components. Dst has 3 components.
|
||||
void compositeUnscaled4onto3( LLImageRaw* src );
|
||||
|
||||
std::string getComment() const { return mComment; }
|
||||
std::string mComment;
|
||||
|
||||
protected:
|
||||
// Create an image from a local file (generally used in tools)
|
||||
|
||||
@@ -1,31 +1,25 @@
|
||||
/**
|
||||
* @file llimagebmp.cpp
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
@@ -81,7 +75,7 @@ LLImageBMP::LLImageBMP()
|
||||
:
|
||||
LLImageFormatted(IMG_CODEC_BMP),
|
||||
mColorPaletteColors( 0 ),
|
||||
mColorPalette( NULL ),
|
||||
mColorPalette(nullptr ),
|
||||
mBitmapOffset( 0 ),
|
||||
mBitsPerPixel( 0 ),
|
||||
mOriginAtTop( FALSE )
|
||||
@@ -324,10 +318,13 @@ BOOL LLImageBMP::updateData()
|
||||
|
||||
if( 0 != mColorPaletteColors )
|
||||
{
|
||||
mColorPalette = new U8[color_palette_size];
|
||||
if (!mColorPalette)
|
||||
try
|
||||
{
|
||||
LL_ERRS() << "Out of memory in LLImageBMP::updateData()" << LL_ENDL;
|
||||
mColorPalette = new U8[color_palette_size];
|
||||
}
|
||||
catch (const std::bad_alloc& e)
|
||||
{
|
||||
LL_WARNS() << "Failed to allocate bmp color date with exception: " << e.what() << LL_ENDL;
|
||||
return FALSE;
|
||||
}
|
||||
memcpy( mColorPalette, mdata + FILE_HEADER_SIZE + BITMAP_HEADER_SIZE + extension_size, color_palette_size ); /* Flawfinder: ignore */
|
||||
|
||||
@@ -271,7 +271,7 @@ BOOL LLImageDXT::decode(LLImageRaw* raw_image, F32 time)
|
||||
|
||||
S32 width = getWidth(), height = getHeight();
|
||||
S32 ncomponents = getComponents();
|
||||
U8* data = NULL;
|
||||
U8* data = nullptr;
|
||||
if (mDiscardLevel >= 0)
|
||||
{
|
||||
data = getData() + getMipOffset(mDiscardLevel);
|
||||
@@ -332,7 +332,7 @@ BOOL LLImageDXT::encodeDXT(const LLImageRaw* raw_image, F32 time, bool explicit_
|
||||
break;
|
||||
default:
|
||||
LL_ERRS() << "LLImageDXT::encode: Unhandled channel number: " << ncomponents << LL_ENDL;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
S32 width = raw_image->getWidth();
|
||||
@@ -371,7 +371,7 @@ BOOL LLImageDXT::encodeDXT(const LLImageRaw* raw_image, F32 time, bool explicit_
|
||||
header->maxwidth = width;
|
||||
header->maxheight = height;
|
||||
|
||||
U8* prev_mipdata = 0;
|
||||
U8* prev_mipdata = nullptr;
|
||||
w = width, h = height;
|
||||
for (S32 mip=0; mip<nmips; mip++)
|
||||
{
|
||||
|
||||
@@ -33,12 +33,7 @@
|
||||
#include "lltimer.h"
|
||||
//#include "llmemory.h"
|
||||
|
||||
const char* fallbackEngineInfoLLImageJ2CImpl()
|
||||
{
|
||||
static std::string version_string = std::string("OpenJPEG: ") + opj_version();
|
||||
return version_string.c_str();
|
||||
}
|
||||
|
||||
// Factory function: see declaration in llimagej2c.cpp
|
||||
LLImageJ2CImpl* fallbackCreateLLImageJ2CImpl()
|
||||
{
|
||||
return new LLImageJ2COJ();
|
||||
@@ -50,6 +45,13 @@ void fallbackDestroyLLImageJ2CImpl(LLImageJ2CImpl* impl)
|
||||
impl = NULL;
|
||||
}
|
||||
|
||||
const char* fallbackEngineInfoLLImageJ2CImpl()
|
||||
{
|
||||
static std::string version_string = std::string("OpenJPEG: ")
|
||||
+ opj_version();
|
||||
return version_string.c_str();
|
||||
}
|
||||
|
||||
// Return string from message, eliminating final \n if present
|
||||
static std::string chomp(const char* msg)
|
||||
{
|
||||
@@ -108,22 +110,57 @@ LLImageJ2COJ::~LLImageJ2COJ()
|
||||
|
||||
BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count)
|
||||
{
|
||||
//
|
||||
// FIXME: Get the comment field out of the texture
|
||||
//
|
||||
|
||||
LLTimer decode_timer;
|
||||
|
||||
/* Extract metadata */
|
||||
/* ---------------- */
|
||||
U8* c_data = base.getData();
|
||||
size_t c_size = base.getDataSize();
|
||||
size_t position = 0;
|
||||
|
||||
while (position < 1024 && position < (c_size - 7)) // the comment field should be in the first 1024 bytes.
|
||||
{
|
||||
if (c_data[position] == 0xff && c_data[position + 1] == 0x64)
|
||||
{
|
||||
U8 high_byte = c_data[position + 2];
|
||||
U8 low_byte = c_data[position + 3];
|
||||
S32 c_length = (high_byte * 256) + low_byte; // This size also counts the markers, 00 01 and itself
|
||||
if (c_length > 200) // sanity check
|
||||
{
|
||||
// While comments can be very long, anything longer then 200 is suspect.
|
||||
break;
|
||||
}
|
||||
|
||||
if (position + 2 + c_length > c_size)
|
||||
{
|
||||
// comment extends past end of data, corruption, or all data not retrived yet.
|
||||
break;
|
||||
}
|
||||
|
||||
// if the comment block does not end at the end of data, check to see if the next
|
||||
// block starts with 0xFF
|
||||
if (position + 2 + c_length < c_size && c_data[position + 2 + c_length] != 0xff)
|
||||
{
|
||||
// invalied comment block
|
||||
break;
|
||||
}
|
||||
|
||||
// extract the comment minus the markers, 00 01
|
||||
raw_image.mComment.assign((char*)c_data + position + 6, c_length - 4);
|
||||
break;
|
||||
}
|
||||
++position;
|
||||
}
|
||||
|
||||
opj_dparameters_t parameters; /* decompression parameters */
|
||||
opj_event_mgr_t event_mgr; /* event manager */
|
||||
opj_image_t *image = NULL;
|
||||
opj_event_mgr_t event_mgr = { }; /* event manager */
|
||||
opj_image_t *image = nullptr;
|
||||
|
||||
opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
|
||||
opj_cio_t *cio = NULL;
|
||||
opj_dinfo_t* dinfo = nullptr; /* handle to a decompressor */
|
||||
opj_cio_t *cio = nullptr;
|
||||
|
||||
|
||||
/* configure the event callbacks (not required) */
|
||||
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
|
||||
event_mgr.error_handler = error_callback;
|
||||
event_mgr.warning_handler = warning_callback;
|
||||
event_mgr.info_handler = info_callback;
|
||||
@@ -168,19 +205,7 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
||||
opj_setup_decoder(dinfo, ¶meters);
|
||||
|
||||
/* open a byte stream */
|
||||
#if 0
|
||||
std::vector<U8> data(base.getData(), base.getData()+base.getDataSize());
|
||||
S32 size = data.size();
|
||||
if (data[size-1] == 0xFF) {
|
||||
data.push_back((U8)0xD9);
|
||||
} else if (data[size-2] != 0xFF || data[size-1] != 0xD9) {
|
||||
data.push_back((U8)0xFF);
|
||||
data.push_back((U8)0xD9);
|
||||
}
|
||||
cio = opj_cio_open((opj_common_ptr)dinfo, &data[0], data.size());
|
||||
#else
|
||||
cio = opj_cio_open((opj_common_ptr)dinfo, base.getData(), base.getDataSize());
|
||||
#endif
|
||||
|
||||
/* decode the stream and fill the image structure */
|
||||
image = opj_decode(dinfo, cio);
|
||||
@@ -199,20 +224,11 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
||||
// dereference the array.
|
||||
if(!image || !image->numcomps)
|
||||
{
|
||||
LL_WARNS("Texture") << "ERROR -> decodeImpl: failed to decode image!" << LL_ENDL;
|
||||
LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image!" << LL_ENDL;
|
||||
if (image)
|
||||
{
|
||||
opj_image_destroy(image);
|
||||
}
|
||||
#if 0
|
||||
std::stringstream filename;
|
||||
filename << "err" << (int)base.getRawDiscardLevel() << "_" << rand() << ".jp2";
|
||||
FILE* file = fopen(filename.str().c_str(), "wb");
|
||||
if (file) {
|
||||
fwrite(base.getData(), base.getDataSize(), 1, file);
|
||||
fclose(file);
|
||||
}
|
||||
#endif
|
||||
base.decodeFailed();
|
||||
return TRUE; // done
|
||||
}
|
||||
@@ -222,7 +238,6 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
||||
{
|
||||
if (image->comps[i].factor != base.getRawDiscardLevel())
|
||||
{
|
||||
LL_WARNS("Texture") << "Expected discard level not reached!" << LL_ENDL;
|
||||
// if we didn't get the discard level we're expecting, fail
|
||||
opj_image_destroy(image);
|
||||
base.decodeFailed();
|
||||
@@ -262,6 +277,13 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
||||
S32 height = ceildivpow2(image->y1 - image->y0, f);
|
||||
raw_image.resize(width, height, channels);
|
||||
U8 *rawp = raw_image.getData();
|
||||
if (!rawp)
|
||||
{
|
||||
opj_image_destroy(image);
|
||||
base.setLastError("Memory error");
|
||||
base.decodeFailed();
|
||||
return true; // done
|
||||
}
|
||||
|
||||
// first_channel is what channel to start copying from
|
||||
// dest is what channel to copy to. first_channel comes from the
|
||||
@@ -283,9 +305,11 @@ BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decod
|
||||
}
|
||||
else // Some rare OpenJPEG versions have this bug.
|
||||
{
|
||||
LL_WARNS("Texture") << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << LL_ENDL;
|
||||
opj_image_destroy(image);
|
||||
|
||||
LL_DEBUGS("Texture") << "ERROR -> decodeImpl: failed to decode image! (NULL comp data - OpenJPEG bug)" << LL_ENDL;
|
||||
if (image)
|
||||
{
|
||||
opj_image_destroy(image);
|
||||
}
|
||||
base.decodeFailed();
|
||||
return TRUE; // done
|
||||
}
|
||||
@@ -302,14 +326,13 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
|
||||
{
|
||||
const S32 MAX_COMPS = 5;
|
||||
opj_cparameters_t parameters; /* compression parameters */
|
||||
opj_event_mgr_t event_mgr; /* event manager */
|
||||
opj_event_mgr_t event_mgr = { }; /* event manager */
|
||||
|
||||
|
||||
/*
|
||||
configure the event callbacks (not required)
|
||||
setting of each callback is optional
|
||||
*/
|
||||
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
|
||||
event_mgr.error_handler = error_callback;
|
||||
event_mgr.warning_handler = warning_callback;
|
||||
event_mgr.info_handler = info_callback;
|
||||
@@ -354,7 +377,7 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
|
||||
//
|
||||
OPJ_COLOR_SPACE color_space = CLRSPC_SRGB;
|
||||
opj_image_cmptparm_t cmptparm[MAX_COMPS];
|
||||
opj_image_t * image = NULL;
|
||||
opj_image_t * image = nullptr;
|
||||
S32 numcomps = llmin((S32)raw_image.getComponents(), MAX_COMPS);
|
||||
S32 width = raw_image.getWidth();
|
||||
S32 height = raw_image.getHeight();
|
||||
@@ -398,7 +421,7 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
|
||||
/* ---------------------------- */
|
||||
|
||||
int codestream_length;
|
||||
opj_cio_t *cio = NULL;
|
||||
opj_cio_t *cio = nullptr;
|
||||
|
||||
/* get a J2K compressor handle */
|
||||
opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
|
||||
@@ -411,14 +434,14 @@ BOOL LLImageJ2COJ::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, con
|
||||
|
||||
/* open a byte stream for writing */
|
||||
/* allocate memory for all tiles */
|
||||
cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
|
||||
cio = opj_cio_open((opj_common_ptr)cinfo, nullptr, 0);
|
||||
|
||||
/* encode the image */
|
||||
bool bSuccess = opj_encode(cinfo, cio, image, NULL);
|
||||
bool bSuccess = opj_encode(cinfo, cio, image, nullptr);
|
||||
if (!bSuccess)
|
||||
{
|
||||
opj_cio_close(cio);
|
||||
LL_WARNS("Texture") << "Failed to encode image." << LL_ENDL;
|
||||
LL_DEBUGS("Texture") << "Failed to encode image." << LL_ENDL;
|
||||
return FALSE;
|
||||
}
|
||||
codestream_length = cio_tell(cio);
|
||||
@@ -520,15 +543,14 @@ BOOL LLImageJ2COJ::getMetadata(LLImageJ2C &base)
|
||||
// Do it the old and slow way, decode the image with openjpeg
|
||||
|
||||
opj_dparameters_t parameters; /* decompression parameters */
|
||||
opj_event_mgr_t event_mgr; /* event manager */
|
||||
opj_image_t *image = NULL;
|
||||
opj_event_mgr_t event_mgr = { }; /* event manager */
|
||||
opj_image_t *image = nullptr;
|
||||
|
||||
opj_dinfo_t* dinfo = NULL; /* handle to a decompressor */
|
||||
opj_cio_t *cio = NULL;
|
||||
opj_dinfo_t* dinfo = nullptr; /* handle to a decompressor */
|
||||
opj_cio_t *cio = nullptr;
|
||||
|
||||
|
||||
/* configure the event callbacks (not required) */
|
||||
memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
|
||||
event_mgr.error_handler = error_callback;
|
||||
event_mgr.warning_handler = warning_callback;
|
||||
event_mgr.info_handler = info_callback;
|
||||
|
||||
@@ -37,7 +37,6 @@ set(llmessage_SOURCE_FILES
|
||||
llassetstorage.cpp
|
||||
llavatarname.cpp
|
||||
llavatarnamecache.cpp
|
||||
llblowfishcipher.cpp
|
||||
llbuffer.cpp
|
||||
llbufferstream.cpp
|
||||
llcachename.cpp
|
||||
@@ -57,7 +56,6 @@ set(llmessage_SOURCE_FILES
|
||||
lliopipe.cpp
|
||||
lliosocket.cpp
|
||||
llioutil.cpp
|
||||
llmail.cpp
|
||||
llmessagebuilder.cpp
|
||||
llmessageconfig.cpp
|
||||
llmessagelog.cpp
|
||||
@@ -128,7 +126,6 @@ set(llmessage_HEADER_FILES
|
||||
llassetstorage.h
|
||||
llavatarname.h
|
||||
llavatarnamecache.h
|
||||
llblowfishcipher.h
|
||||
llbuffer.h
|
||||
llbufferstream.h
|
||||
llcachename.h
|
||||
@@ -156,7 +153,6 @@ set(llmessage_HEADER_FILES
|
||||
lliosocket.h
|
||||
llioutil.h
|
||||
llloginflags.h
|
||||
llmail.h
|
||||
llmessagebuilder.h
|
||||
llmessageconfig.h
|
||||
llmessagelog.h
|
||||
|
||||
@@ -543,10 +543,7 @@ extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
|
||||
//----------------------------------------------------------------------------
|
||||
// LL_WINDOWS
|
||||
|
||||
// windows gl headers depend on things like APIENTRY, so include windows.
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include "llwin32headerslean.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
#include <GL/gl.h>
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
static LLRegisterWidget<LLScrollListCtrl> r("scroll_list");
|
||||
|
||||
LLMenuGL* sScrollListMenus[1] = {}; // List menus that recur, such as general avatars or groups menus
|
||||
std::vector<LLMenuGL*> LLScrollListCtrl::sMenus = {}; // List menus that recur, such as general avatars or groups menus
|
||||
|
||||
// local structures & classes.
|
||||
struct SortScrollListItem
|
||||
@@ -2576,7 +2576,7 @@ void LLScrollListCtrl::setScrollListParameters(LLXMLNodePtr node)
|
||||
// 0 is menu_avs_list.xml, 1 will be for groups, 2 could be for lists of objects
|
||||
S32 menu_num;
|
||||
node->getAttributeS32("menu_num", menu_num);
|
||||
mPopupMenu = sScrollListMenus[menu_num];
|
||||
setContextMenu(menu_num);
|
||||
}
|
||||
else if (node->hasAttribute("menu_file"))
|
||||
{
|
||||
|
||||
@@ -250,6 +250,8 @@ public:
|
||||
|
||||
// support right-click context menus for avatar/group lists
|
||||
void setContextMenu(LLMenuGL* menu) { mPopupMenu = menu; }
|
||||
void setContextMenu(S32 index) { mPopupMenu = sMenus[index]; }
|
||||
static void addCommonMenu(LLMenuGL* menu) { sMenus.push_back(menu); }
|
||||
|
||||
// Overridden from LLView
|
||||
/*virtual*/ void draw();
|
||||
@@ -456,6 +458,8 @@ private:
|
||||
S32 mHighlightedItem;
|
||||
class LLViewBorder* mBorder;
|
||||
LLMenuGL *mPopupMenu;
|
||||
|
||||
static std::vector<LLMenuGL*> sMenus; // List menus that recur, such as general avatars or groups menus
|
||||
|
||||
LLView *mCommentTextView;
|
||||
|
||||
|
||||
@@ -28,9 +28,7 @@
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include "llwin32headerslean.h"
|
||||
|
||||
#include "llkeyboardwin32.h"
|
||||
|
||||
|
||||
@@ -422,6 +422,10 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,
|
||||
|
||||
LL_INFOS() << "Desired FSAA Samples = " << mFSAASamples << LL_ENDL;
|
||||
|
||||
memset(mCurrentGammaRamp, 0, sizeof(mCurrentGammaRamp));
|
||||
memset(mPrevGammaRamp, 0, sizeof(mPrevGammaRamp));
|
||||
mCustomGammaSet = FALSE;
|
||||
|
||||
// Initialize the keyboard
|
||||
gKeyboard = new LLKeyboardWin32();
|
||||
gKeyboard->setCallbacks(callbacks);
|
||||
@@ -3020,13 +3024,26 @@ F32 LLWindowWin32::getGamma()
|
||||
|
||||
BOOL LLWindowWin32::restoreGamma()
|
||||
{
|
||||
return SetDeviceGammaRamp(mhDC, mPrevGammaRamp);
|
||||
if (mCustomGammaSet != FALSE)
|
||||
{
|
||||
mCustomGammaSet = FALSE;
|
||||
return SetDeviceGammaRamp(mhDC, mPrevGammaRamp);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLWindowWin32::setGamma(const F32 gamma)
|
||||
{
|
||||
mCurrentGamma = gamma;
|
||||
|
||||
//Get the previous gamma ramp to restore later.
|
||||
if (mCustomGammaSet == FALSE)
|
||||
{
|
||||
if (GetDeviceGammaRamp(mhDC, mPrevGammaRamp) == FALSE)
|
||||
return FALSE;
|
||||
mCustomGammaSet = TRUE;
|
||||
}
|
||||
|
||||
LL_DEBUGS("Window") << "Setting gamma to " << gamma << LL_ENDL;
|
||||
|
||||
for ( int i = 0; i < 256; ++i )
|
||||
@@ -3038,9 +3055,9 @@ BOOL LLWindowWin32::setGamma(const F32 gamma)
|
||||
if ( value > 0xffff )
|
||||
value = 0xffff;
|
||||
|
||||
mCurrentGammaRamp [ 0 * 256 + i ] =
|
||||
mCurrentGammaRamp [ 1 * 256 + i ] =
|
||||
mCurrentGammaRamp [ 2 * 256 + i ] = ( WORD )value;
|
||||
mCurrentGammaRamp[0][i] =
|
||||
mCurrentGammaRamp[1][i] =
|
||||
mCurrentGammaRamp[2][i] = (WORD) value;
|
||||
};
|
||||
|
||||
return SetDeviceGammaRamp ( mhDC, mCurrentGammaRamp );
|
||||
|
||||
@@ -27,10 +27,7 @@
|
||||
#ifndef LL_LLWINDOWWIN32_H
|
||||
#define LL_LLWINDOWWIN32_H
|
||||
|
||||
// Limit Windows API to small and manageable set.
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include "llwin32headerslean.h"
|
||||
|
||||
#include "llwindow.h"
|
||||
#include "llwindowcallbacks.h"
|
||||
@@ -192,8 +189,9 @@ protected:
|
||||
F32 mCurrentGamma;
|
||||
U32 mFSAASamples;
|
||||
S32 mVsyncMode;
|
||||
WORD mPrevGammaRamp[256*3];
|
||||
WORD mCurrentGammaRamp[256*3];
|
||||
WORD mPrevGammaRamp[3][256];
|
||||
WORD mCurrentGammaRamp[3][256];
|
||||
BOOL mCustomGammaSet;
|
||||
|
||||
LPWSTR mIconResource;
|
||||
BOOL mMousePositionModified;
|
||||
|
||||
@@ -1571,20 +1571,6 @@ if (WINDOWS)
|
||||
|
||||
EMBED_MANIFEST(${VIEWER_BINARY_NAME} 1)
|
||||
|
||||
# sets the 'working directory' for debugging from visual studio.
|
||||
if (NOT UNATTENDED)
|
||||
add_custom_command(
|
||||
TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
|
||||
ARGS
|
||||
--solution
|
||||
${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.sln
|
||||
--workingdir
|
||||
${VIEWER_BINARY_NAME}
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
|
||||
)
|
||||
endif (NOT UNATTENDED)
|
||||
if (PACKAGE)
|
||||
|
||||
add_custom_command(
|
||||
|
||||
@@ -35,8 +35,8 @@ U32 NACLAntiSpamRegistry::globalAmount;
|
||||
U32 NACLAntiSpamRegistry::globalTime;
|
||||
bool NACLAntiSpamRegistry::bGlobalQueue;
|
||||
NACLAntiSpamQueue* NACLAntiSpamRegistry::queues[NACLAntiSpamRegistry::QUEUE_MAX] = {0};
|
||||
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*> NACLAntiSpamRegistry::globalEntries;
|
||||
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator NACLAntiSpamRegistry::it2;
|
||||
boost::unordered_map<std::string,NACLAntiSpamQueueEntry*> NACLAntiSpamRegistry::globalEntries;
|
||||
boost::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator NACLAntiSpamRegistry::it2;
|
||||
|
||||
// The following sounds will be ignored for purposes of spam protection. They have been gathered from wiki documentation of frequent official sounds.
|
||||
const std::string COLLISION_SOUNDS[] ={"dce5fdd4-afe4-4ea1-822f-dd52cac46b08","51011582-fbca-4580-ae9e-1a5593f094ec","68d62208-e257-4d0c-bbe2-20c9ea9760bb","75872e8c-bc39-451b-9b0b-042d7ba36cba","6a45ba0b-5775-4ea8-8513-26008a17f873","992a6d1b-8c77-40e0-9495-4098ce539694","2de4da5a-faf8-46be-bac6-c4d74f1e5767","6e3fb0f7-6d9c-42ca-b86b-1122ff562d7d","14209133-4961-4acc-9649-53fc38ee1667","bc4a4348-cfcc-4e5e-908e-8a52a8915fe6","9e5c1297-6eed-40c0-825a-d9bcd86e3193","e534761c-1894-4b61-b20c-658a6fb68157","8761f73f-6cf9-4186-8aaa-0948ed002db1","874a26fd-142f-4173-8c5b-890cd846c74d","0e24a717-b97e-4b77-9c94-b59a5a88b2da","75cf3ade-9a5b-4c4d-bb35-f9799bda7fb2","153c8bf7-fb89-4d89-b263-47e58b1b4774","55c3e0ce-275a-46fa-82ff-e0465f5e8703","24babf58-7156-4841-9a3f-761bdbb8e237","aca261d8-e145-4610-9e20-9eff990f2c12","0642fba6-5dcf-4d62-8e7b-94dbb529d117","25a863e8-dc42-4e8a-a357-e76422ace9b5","9538f37c-456e-4047-81be-6435045608d4","8c0f84c3-9afd-4396-b5f5-9bca2c911c20","be582e5d-b123-41a2-a150-454c39e961c8","c70141d4-ba06-41ea-bcbc-35ea81cb8335","7d1826f4-24c4-4aac-8c2e-eff45df37783","063c97d3-033a-4e9b-98d8-05c8074922cb","00000000-0000-0000-0000-000000000120"};
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
#ifndef NACLANTISPAM_H
|
||||
#define NACLANTISPAM_H
|
||||
#include <boost/tr1/unordered_map.hpp>
|
||||
#include <boost/unordered/unordered_map.hpp>
|
||||
#include "stdtypes.h"
|
||||
#include "lluuid.h"
|
||||
class NACLAntiSpamQueueEntry
|
||||
@@ -51,8 +51,8 @@ protected:
|
||||
void blockEntry(LLUUID& source);
|
||||
int checkEntry(LLUUID& source, U32 multiplier);
|
||||
private:
|
||||
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*> entries;
|
||||
std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator it;
|
||||
boost::unordered_map<std::string,NACLAntiSpamQueueEntry*> entries;
|
||||
boost::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator it;
|
||||
U32 queueAmount;
|
||||
U32 queueTime;
|
||||
};
|
||||
@@ -92,8 +92,8 @@ public:
|
||||
private:
|
||||
static const char* getQueueName(U32 queue_id);
|
||||
static NACLAntiSpamQueue* queues[QUEUE_MAX];
|
||||
static std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*> globalEntries;
|
||||
static std::tr1::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator it2;
|
||||
static boost::unordered_map<std::string,NACLAntiSpamQueueEntry*> globalEntries;
|
||||
static boost::unordered_map<std::string,NACLAntiSpamQueueEntry*>::iterator it2;
|
||||
static U32 globalTime;
|
||||
static U32 globalAmount;
|
||||
static bool bGlobalQueue;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1273,6 +1273,17 @@ Found in Advanced->Rendering->Info Displays</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ShowMutedText</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Whether or not to show chat from muted people in local chat.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>OtherChatsTornOff</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
@@ -9163,6 +9174,50 @@ This should be as low as possible, but too low may break functionality</string>
|
||||
<integer>128</integer>
|
||||
</array>
|
||||
</map>
|
||||
<key>ImporterDebug</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable debug output to more precisely identify sources of import errors. Warning: the output can slow down import on many machines.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ImporterLegacyMatching</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable index based model matching.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ImporterModelLimit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Limits amount of importer generated models for dae files</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>768</integer>
|
||||
</map>
|
||||
<key>ImporterPreprocessDAE</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enable preprocessing for DAE files to fix some ColladaDOM related problems (like support for space characters within names and ids).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>IMInChatConsole</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#ifdef near
|
||||
#undef near
|
||||
#endif
|
||||
#include <hunspell/hunspelldll.h>
|
||||
#include <hunspell/hunspell.hxx>
|
||||
#pragma pop_macro("near")
|
||||
#else
|
||||
#include <hunspell/hunspell.hxx>
|
||||
|
||||
@@ -315,7 +315,8 @@ namespace
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLFloaterAvatarList::instance().onClickFocus();
|
||||
const LLUUID get_focused_list_id_selected();
|
||||
LLFloaterAvatarList::instance().setFocusAvatar(get_focused_list_id_selected());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -688,7 +688,7 @@ bool LLInventoryCollectFunctor::itemTransferCommonlyAllowed(const LLInventoryIte
|
||||
case LLAssetType::AT_OBJECT:
|
||||
case LLAssetType::AT_BODYPART:
|
||||
case LLAssetType::AT_CLOTHING:
|
||||
if (!get_is_item_worn(item->getUUID()))
|
||||
//if (!get_is_item_worn(item->getUUID())) // </edit>
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -33,8 +33,10 @@
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "llscrolllistitem.h"
|
||||
#include "llspeakers.h"
|
||||
#include "lluictrlfactory.h" // Edit: For menu duality
|
||||
#include "llviewermenu.h" // Edit: For menu duality
|
||||
#include "llviewerwindow.h"
|
||||
#include "llvoiceclient.h"
|
||||
#include "llvoicechannel.h" // Edit: For menu duality
|
||||
#include "llworld.h" // Edit: For ghost detection
|
||||
// [RLVa:KB]
|
||||
#include "rlvhandler.h"
|
||||
@@ -70,6 +72,16 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source,
|
||||
//mSpeakerMgr->addListener(mSpeakerModeratorListener, "update_moderator");
|
||||
}
|
||||
|
||||
void LLParticipantList::setupContextMenu()
|
||||
{
|
||||
if (mSpeakerMgr->getVoiceChannel() == LLVoiceChannelProximal::getInstance())
|
||||
{
|
||||
static LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_local_avs.xml", gMenuHolder);
|
||||
mAvatarList->setContextMenu(menu);
|
||||
}
|
||||
else mAvatarList->setContextMenu(0);
|
||||
}
|
||||
|
||||
BOOL LLParticipantList::postBuild()
|
||||
{
|
||||
mAvatarList = getChild<LLScrollListCtrl>("speakers_list");
|
||||
@@ -97,6 +109,7 @@ BOOL LLParticipantList::postBuild()
|
||||
|
||||
// update speaker UI
|
||||
handleSpeakerSelect();
|
||||
setupContextMenu();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -387,6 +400,7 @@ bool LLParticipantList::onRemoveItemEvent(LLPointer<LLOldEvents::LLEvent> event,
|
||||
bool LLParticipantList::onClearListEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
mAvatarList->clearRows();
|
||||
setupContextMenu();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -203,6 +203,7 @@ protected:
|
||||
|
||||
private:
|
||||
void onAvatarListDoubleClicked();
|
||||
void setupContextMenu();
|
||||
|
||||
/**
|
||||
* Adjusts passed participant to work properly.
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcombobox.h"
|
||||
#include "statemachine/aifilepicker.h"
|
||||
@@ -229,25 +230,17 @@ void LLPreviewTexture::init()
|
||||
childSetText("desc", item->getDescription());
|
||||
getChild<LLLineEditor>("desc")->setPrevalidate(&LLLineEditor::prevalidatePrintableNotPipe);
|
||||
childSetText("uuid", getItemID().asString());
|
||||
childSetText("uploader", getItemCreatorName());
|
||||
childSetText("uploadtime", getItemCreationDate());
|
||||
childSetText("alphanote", LLTrans::getString("LoadingData"));
|
||||
}
|
||||
}
|
||||
|
||||
childSetText("uploader", getItemCreatorName());
|
||||
childSetText("uploadtime", getItemCreationDate());
|
||||
|
||||
childSetCommitCallback("combo_aspect_ratio", onAspectRatioCommit, this);
|
||||
LLComboBox* combo = getChild<LLComboBox>("combo_aspect_ratio");
|
||||
combo->setCurrentByIndex(0);
|
||||
}
|
||||
|
||||
void LLPreviewTexture::callbackLoadAvatarName(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data)
|
||||
{
|
||||
if (!sInstance) return;
|
||||
std::ostringstream fullname;
|
||||
fullname << first << " " << last;
|
||||
sInstance->childSetText("uploader", fullname.str());
|
||||
}
|
||||
|
||||
void LLPreviewTexture::draw()
|
||||
{
|
||||
if (mUpdateDimensions)
|
||||
@@ -486,17 +479,20 @@ std::string LLPreviewTexture::getItemCreationDate()
|
||||
timeToFormattedString(item->getCreationDate(), gSavedSettings.getString("TimestampFormat"), time);
|
||||
return time;
|
||||
}
|
||||
return getString("Unknown");
|
||||
const LLDate date = mImage->getUploadTime();
|
||||
return date.notNull() ? date.toHTTPDateString(gSavedSettings.getString("TimestampFormat"))
|
||||
: getString("Unknown");
|
||||
}
|
||||
|
||||
std::string LLPreviewTexture::getItemCreatorName()
|
||||
{
|
||||
const LLViewerInventoryItem* item = getItem();
|
||||
if(item)
|
||||
const LLUUID& id = item ? item->getCreatorUUID() : mImage->getUploader();
|
||||
if (id.notNull())
|
||||
{
|
||||
std::string name;
|
||||
gCacheName->getFullName(item->getCreatorUUID(), name);
|
||||
mCreatorKey = item->getCreatorUUID();
|
||||
LLAvatarNameCache::getNSName(id, name);
|
||||
mCreatorKey = id;
|
||||
return name;
|
||||
}
|
||||
return getString("Unknown");
|
||||
@@ -577,6 +573,14 @@ void LLPreviewTexture::updateDimensions()
|
||||
}
|
||||
|
||||
|
||||
// Update the width/height display every time
|
||||
if (mImage->getUploader().notNull())
|
||||
{
|
||||
// Singu Note: This is what Alchemy does, we may need it, but it might help if it didn't load in init.
|
||||
childSetText("uploader", getItemCreatorName());
|
||||
childSetText("uploadtime", getItemCreationDate());
|
||||
}
|
||||
|
||||
if (!mUserResized)
|
||||
{
|
||||
// clamp texture size to fit within actual size of floater after attempting resize
|
||||
|
||||
@@ -104,7 +104,6 @@ private:
|
||||
|
||||
static LLPreviewTexture* sInstance;
|
||||
static void onClickProfile(void* userdata);
|
||||
static void callbackLoadAvatarName(const LLUUID& id, const std::string& first, const std::string& last, BOOL is_group, void* data);
|
||||
|
||||
// This is stored off in a member variable, because the save-as
|
||||
// button and drag and drop functionality need to know.
|
||||
|
||||
@@ -1021,10 +1021,11 @@ LLActiveSpeakerMgr::LLActiveSpeakerMgr() : LLSpeakerMgr(NULL)
|
||||
void LLActiveSpeakerMgr::updateSpeakerList()
|
||||
{
|
||||
// point to whatever the current voice channel is
|
||||
const auto old_channel = mVoiceChannel;
|
||||
mVoiceChannel = LLVoiceChannel::getCurrentVoiceChannel();
|
||||
|
||||
// always populate from active voice channel
|
||||
if (LLVoiceChannel::getCurrentVoiceChannel() != mVoiceChannel) //MA: seems this is always false
|
||||
if (mVoiceChannel != old_channel) //Singu Note: Don't let this always be false.
|
||||
{
|
||||
LL_DEBUGS("Speakers") << "Removed all speakers" << LL_ENDL;
|
||||
fireEvent(new LLSpeakerListChangeEvent(this, LLUUID::null), "clear");
|
||||
|
||||
@@ -2450,11 +2450,13 @@ EAcceptance LLToolDragAndDrop::dad3dGiveInventoryObject(
|
||||
return ACCEPT_NO;
|
||||
}
|
||||
LLVOAvatarSelf* avatar = gAgentAvatarp;
|
||||
/* <edit>
|
||||
if(avatar && avatar->isWearingAttachment( item->getUUID() ) )
|
||||
{
|
||||
// You can't give objects that are attached to you
|
||||
return ACCEPT_NO;
|
||||
}
|
||||
</edit> */
|
||||
if( obj && avatar )
|
||||
{
|
||||
if(drop)
|
||||
|
||||
@@ -192,7 +192,6 @@ extern BOOL gDebugTextEditorTips;
|
||||
extern BOOL gShowOverlayTitle;
|
||||
extern BOOL gOcclusionCull;
|
||||
extern AIHTTPView* gHttpView;
|
||||
extern LLMenuGL* sScrollListMenus[1];
|
||||
//
|
||||
// Globals
|
||||
//
|
||||
@@ -730,8 +729,8 @@ void init_menus()
|
||||
gMenuHolder->addChild(gLoginMenuBarView);
|
||||
|
||||
// Singu Note: Initialize common ScrollListMenus here
|
||||
sScrollListMenus[0] = LLUICtrlFactory::getInstance()->buildMenu("menu_avs_list.xml", gMenuHolder);
|
||||
//sScrollListMenus[1] = LLUICtrlFactory::getInstance()->buildMenu("menu_groups_list.xml"); // Singu TODO
|
||||
LLScrollListCtrl::addCommonMenu(LLUICtrlFactory::getInstance()->buildMenu("menu_avs_list.xml", gMenuHolder)); // 0
|
||||
//LLScrollListCtrl::addCommonMenu(LLUICtrlFactory::getInstance()->buildMenu("menu_groups_list.xml")); // 1 // Singu TODO
|
||||
|
||||
LLView* ins = gMenuBarView->getChildView("insert_world", true, false);
|
||||
ins->setVisible(false);
|
||||
@@ -1689,6 +1688,8 @@ class LLAdvancedToggleWireframe : public view_listener_t
|
||||
// [/RLVa:KB]
|
||||
// gUseWireframe = !(gUseWireframe);
|
||||
// gWindowResized = TRUE; // Singu Note: We don't use this (yet?)
|
||||
|
||||
LLPipeline::updateRenderDeferred();
|
||||
gPipeline.resetVertexBuffers();
|
||||
// return true;
|
||||
}
|
||||
|
||||
@@ -41,16 +41,7 @@
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
// We may want to take the windows.h include out, but it used to be in
|
||||
// linden_common.h, and hence in all the libraries. This is better. JC
|
||||
#if LL_WINDOWS
|
||||
// Limit Windows API to small and manageable set.
|
||||
// If you get undefined symbols, find the appropriate
|
||||
// Windows header file and include that in your .cpp file.
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include "llwin32headerslean.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <deque>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -413,6 +413,10 @@ public:
|
||||
void forceRefetch();
|
||||
/*virtual*/bool isActiveFetching(); //is actively in fetching by the fetching pipeline.
|
||||
|
||||
LLUUID getUploader();
|
||||
LLDate getUploadTime();
|
||||
std::string getComment();
|
||||
|
||||
protected:
|
||||
/*virtual*/ void switchToCachedImage();
|
||||
S32 getCurrentDiscardLevelForFetching() ;
|
||||
@@ -510,6 +514,8 @@ protected:
|
||||
|
||||
BOOL mForSculpt ; //a flag if the texture is used as sculpt data.
|
||||
BOOL mIsFetched ; //is loaded from remote or from cache, not generated locally.
|
||||
|
||||
std::map<S8, std::string> mComment;
|
||||
|
||||
public:
|
||||
static LLPointer<LLViewerFetchedTexture> sMissingAssetImagep; // Texture to show for an image asset that is not in the database
|
||||
|
||||
@@ -35,21 +35,6 @@
|
||||
|
||||
extern AIHTTPTimeoutPolicy voiceCallCapResponder_timeout;
|
||||
|
||||
|
||||
LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap;
|
||||
LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap;
|
||||
LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = NULL;
|
||||
LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = NULL;
|
||||
LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChangedSignal;
|
||||
|
||||
BOOL LLVoiceChannel::sSuspended = FALSE;
|
||||
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
const U32 DEFAULT_RETRIES_COUNT = 3;
|
||||
|
||||
|
||||
class LLVoiceCallCapResponder : public LLHTTPClient::ResponderWithResult
|
||||
{
|
||||
public:
|
||||
@@ -66,59 +51,29 @@ private:
|
||||
};
|
||||
|
||||
|
||||
void LLVoiceCallCapResponder::httpFailure(void)
|
||||
{
|
||||
LL_WARNS("Voice") << "LLVoiceCallCapResponder error [status:"
|
||||
<< mStatus << "]: " << mReason << LL_ENDL;
|
||||
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(mSessionID);
|
||||
if ( channelp )
|
||||
{
|
||||
if ( 403 == mStatus )
|
||||
{
|
||||
//403 == no ability
|
||||
LLNotificationsUtil::add(
|
||||
"VoiceNotAllowed",
|
||||
channelp->getNotifyArgs());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add(
|
||||
"VoiceCallGenericError",
|
||||
channelp->getNotifyArgs());
|
||||
}
|
||||
channelp->deactivate();
|
||||
}
|
||||
}
|
||||
LLVoiceChannel::voice_channel_map_t LLVoiceChannel::sVoiceChannelMap;
|
||||
LLVoiceChannel::voice_channel_map_uri_t LLVoiceChannel::sVoiceChannelURIMap;
|
||||
LLVoiceChannel* LLVoiceChannel::sCurrentVoiceChannel = nullptr;
|
||||
LLVoiceChannel* LLVoiceChannel::sSuspendedVoiceChannel = nullptr;
|
||||
LLVoiceChannel::channel_changed_signal_t LLVoiceChannel::sCurrentVoiceChannelChangedSignal;
|
||||
|
||||
void LLVoiceCallCapResponder::httpSuccess(void)
|
||||
{
|
||||
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(mSessionID);
|
||||
if (channelp)
|
||||
{
|
||||
// *TODO: DEBUG SPAM
|
||||
LLSD::map_const_iterator iter;
|
||||
for(iter = mContent.beginMap(); iter != mContent.endMap(); ++iter)
|
||||
{
|
||||
LL_DEBUGS("Voice") << "LLVoiceCallCapResponder::result got "
|
||||
<< iter->first << LL_ENDL;
|
||||
}
|
||||
BOOL LLVoiceChannel::sSuspended = FALSE;
|
||||
|
||||
channelp->setChannelInfo(
|
||||
mContent["voice_credentials"]["channel_uri"].asString(),
|
||||
mContent["voice_credentials"]["channel_credentials"].asString());
|
||||
}
|
||||
}
|
||||
//
|
||||
// Constants
|
||||
//
|
||||
const U32 DEFAULT_RETRIES_COUNT = 3;
|
||||
|
||||
//
|
||||
// LLVoiceChannel
|
||||
//
|
||||
LLVoiceChannel::LLVoiceChannel(const LLUUID& session_id, const std::string& session_name) :
|
||||
mCallDirection(OUTGOING_CALL),
|
||||
mSessionID(session_id),
|
||||
mState(STATE_NO_CHANNEL_INFO),
|
||||
mSessionName(session_name),
|
||||
mCallDirection(OUTGOING_CALL),
|
||||
mIgnoreNextSessionLeave(FALSE),
|
||||
mCallEndedByAgent(false)
|
||||
mCallEndedByAgent(false),
|
||||
mIgnoreNextSessionLeave(FALSE)
|
||||
{
|
||||
mNotifyArgs["VOICE_CHANNEL_NAME"] = mSessionName;
|
||||
|
||||
@@ -203,19 +158,9 @@ void LLVoiceChannel::handleStatusChange(EStatusType type)
|
||||
switch(type)
|
||||
{
|
||||
case STATUS_LOGIN_RETRY:
|
||||
//mLoginNotificationHandle = LLNotifyBox::showXml("VoiceLoginRetry")->getHandle();
|
||||
LLNotificationsUtil::add("VoiceLoginRetry");
|
||||
// no user notice
|
||||
break;
|
||||
case STATUS_LOGGED_IN:
|
||||
//if (!mLoginNotificationHandle.isDead())
|
||||
//{
|
||||
// LLNotifyBox* notifyp = (LLNotifyBox*)mLoginNotificationHandle.get();
|
||||
// if (notifyp)
|
||||
// {
|
||||
// notifyp->close();
|
||||
// }
|
||||
// mLoginNotificationHandle.markDead();
|
||||
//}
|
||||
break;
|
||||
case STATUS_LEFT_CHANNEL:
|
||||
if (callStarted() && !mIgnoreNextSessionLeave && !sSuspended)
|
||||
@@ -276,11 +221,11 @@ void LLVoiceChannel::deactivate()
|
||||
|
||||
//Default mic is OFF when leaving voice calls
|
||||
if (gSavedSettings.getBOOL("AutoDisengageMic") &&
|
||||
sCurrentVoiceChannel == this &&
|
||||
LLVoiceClient::getInstance()->getUserPTTState())
|
||||
sCurrentVoiceChannel == this /*&&
|
||||
LLVoiceClient::getInstance()->getUserPTTState()*/) // Singu Note: This could be false, but we still need to do this.
|
||||
{
|
||||
gSavedSettings.setBOOL("PTTCurrentlyEnabled", true);
|
||||
LLVoiceClient::getInstance()->inputUserControlState(true);
|
||||
LLVoiceClient::getInstance()->setUserPTTState(false);
|
||||
}
|
||||
}
|
||||
LLVoiceClient::getInstance()->removeObserver(this);
|
||||
@@ -346,7 +291,7 @@ LLVoiceChannel* LLVoiceChannel::getChannelByID(const LLUUID& session_id)
|
||||
voice_channel_map_t::iterator found_it = sVoiceChannelMap.find(session_id);
|
||||
if (found_it == sVoiceChannelMap.end())
|
||||
{
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -360,7 +305,7 @@ LLVoiceChannel* LLVoiceChannel::getChannelByURI(std::string uri)
|
||||
voice_channel_map_uri_t::iterator found_it = sVoiceChannelURIMap.find(uri);
|
||||
if (found_it == sVoiceChannelURIMap.end())
|
||||
{
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -664,6 +609,50 @@ void LLVoiceChannelGroup::setState(EState state)
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceCallCapResponder::httpFailure(void)
|
||||
{
|
||||
LL_WARNS("Voice") << "LLVoiceCallCapResponder error [status:"
|
||||
<< mStatus << "]: " << mReason << LL_ENDL;
|
||||
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(mSessionID);
|
||||
if ( channelp )
|
||||
{
|
||||
if ( 403 == mStatus )
|
||||
{
|
||||
//403 == no ability
|
||||
LLNotificationsUtil::add(
|
||||
"VoiceNotAllowed",
|
||||
channelp->getNotifyArgs());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add(
|
||||
"VoiceCallGenericError",
|
||||
channelp->getNotifyArgs());
|
||||
}
|
||||
channelp->deactivate();
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceCallCapResponder::httpSuccess(void)
|
||||
{
|
||||
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(mSessionID);
|
||||
if (channelp)
|
||||
{
|
||||
// *TODO: DEBUG SPAM
|
||||
LLSD::map_const_iterator iter;
|
||||
for(iter = mContent.beginMap(); iter != mContent.endMap(); ++iter)
|
||||
{
|
||||
LL_DEBUGS("Voice") << "LLVoiceCallCapResponder::result got "
|
||||
<< iter->first << LL_ENDL;
|
||||
}
|
||||
|
||||
channelp->setChannelInfo(
|
||||
mContent["voice_credentials"]["channel_uri"].asString(),
|
||||
mContent["voice_credentials"]["channel_credentials"].asString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// LLVoiceChannelProximal
|
||||
//
|
||||
@@ -723,6 +712,7 @@ void LLVoiceChannelProximal::handleStatusChange(EStatusType status)
|
||||
// do not notify user when leaving proximal channel
|
||||
return;
|
||||
case STATUS_VOICE_DISABLED:
|
||||
LLVoiceClient::getInstance()->setUserPTTState(false);
|
||||
//skip showing "Voice not available at your current location" when agent voice is disabled (EXT-4749)
|
||||
if(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking())
|
||||
{
|
||||
@@ -940,7 +930,7 @@ void LLVoiceChannelP2P::setState(EState state)
|
||||
{
|
||||
// you only "answer" voice invites in p2p mode
|
||||
// so provide a special purpose message here
|
||||
if (mReceivedCall && state == STATE_RINGING)
|
||||
if (state == STATE_RINGING)
|
||||
{
|
||||
gIMMgr->addSystemMessage(mSessionID, "answering", mNotifyArgs);
|
||||
doSetState(state);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||
/**
|
||||
* @file llvoiceclient.cpp
|
||||
* @brief Voice client delegation class implementation.
|
||||
@@ -51,7 +53,7 @@ public:
|
||||
// requests will be throttled from a non-trusted browser
|
||||
LLVoiceHandler() : LLCommandHandler("voice", UNTRUSTED_THROTTLE) {}
|
||||
|
||||
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
|
||||
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) override
|
||||
{
|
||||
if (params[0].asString() == "effects")
|
||||
{
|
||||
@@ -111,8 +113,8 @@ std::string LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv
|
||||
|
||||
LLVoiceClient::LLVoiceClient()
|
||||
:
|
||||
mVoiceModule(NULL),
|
||||
m_servicePump(NULL),
|
||||
mVoiceModule(nullptr),
|
||||
m_servicePump(nullptr),
|
||||
mVoiceEffectEnabled(LLCachedControl<bool>(gSavedSettings, "VoiceMorphingEnabled", true)),
|
||||
mVoiceEffectDefault(LLCachedControl<std::string>(gSavedPerAccountSettings, "VoiceEffectDefault", "00000000-0000-0000-0000-000000000000")),
|
||||
mPTTDirty(true),
|
||||
@@ -153,18 +155,17 @@ void LLVoiceClient::userAuthorized(const std::string& user_id, const LLUUID &age
|
||||
}
|
||||
else
|
||||
{
|
||||
mVoiceModule = NULL;
|
||||
mVoiceModule = nullptr;
|
||||
return;
|
||||
}
|
||||
mVoiceModule->init(m_servicePump);
|
||||
mVoiceModule->userAuthorized(user_id, agentID);
|
||||
}
|
||||
|
||||
|
||||
void LLVoiceClient::terminate()
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->terminate();
|
||||
mVoiceModule = NULL;
|
||||
mVoiceModule = nullptr;
|
||||
}
|
||||
|
||||
const LLVoiceVersionInfo LLVoiceClient::getVersion()
|
||||
@@ -192,7 +193,10 @@ void LLVoiceClient::updateSettings()
|
||||
|
||||
updateMicMuteLogic();
|
||||
|
||||
if (mVoiceModule) mVoiceModule->updateSettings();
|
||||
if (mVoiceModule)
|
||||
{
|
||||
mVoiceModule->updateSettings();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
@@ -394,24 +398,36 @@ void LLVoiceClient::setNonSpatialChannel(
|
||||
const std::string &uri,
|
||||
const std::string &credentials)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->setNonSpatialChannel(uri, credentials);
|
||||
if (mVoiceModule)
|
||||
{
|
||||
mVoiceModule->setNonSpatialChannel(uri, credentials);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceClient::setSpatialChannel(
|
||||
const std::string &uri,
|
||||
const std::string &credentials)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->setSpatialChannel(uri, credentials);
|
||||
if (mVoiceModule)
|
||||
{
|
||||
mVoiceModule->setSpatialChannel(uri, credentials);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceClient::leaveNonSpatialChannel()
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->leaveNonSpatialChannel();
|
||||
if (mVoiceModule)
|
||||
{
|
||||
mVoiceModule->leaveNonSpatialChannel();
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceClient::leaveChannel(void)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->leaveChannel();
|
||||
if (mVoiceModule)
|
||||
{
|
||||
mVoiceModule->leaveChannel();
|
||||
}
|
||||
}
|
||||
|
||||
std::string LLVoiceClient::getCurrentChannel()
|
||||
@@ -497,7 +513,10 @@ bool LLVoiceClient::voiceEnabled()
|
||||
|
||||
void LLVoiceClient::setVoiceEnabled(bool enabled)
|
||||
{
|
||||
if (mVoiceModule) mVoiceModule->setVoiceEnabled(enabled);
|
||||
if (mVoiceModule)
|
||||
{
|
||||
mVoiceModule->setVoiceEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceClient::updateMicMuteLogic()
|
||||
@@ -637,31 +656,32 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
|
||||
return;
|
||||
}
|
||||
|
||||
if(!mPTTIsMiddleMouse)
|
||||
if(!mPTTIsMiddleMouse && mPTTKey != KEY_NONE)
|
||||
{
|
||||
bool down = (mPTTKey != KEY_NONE)
|
||||
&& gKeyboard->getKeyDown(mPTTKey);
|
||||
inputUserControlState(down);
|
||||
bool down = gKeyboard->getKeyDown(mPTTKey);
|
||||
if (down)
|
||||
{
|
||||
inputUserControlState(down);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
void LLVoiceClient::keyUp(KEY key, MASK mask)
|
||||
{
|
||||
if(!mPTTIsMiddleMouse)
|
||||
if(!mPTTIsMiddleMouse && mPTTKey != KEY_NONE)
|
||||
{
|
||||
bool down = (mPTTKey != KEY_NONE)
|
||||
&& gKeyboard->getKeyDown(mPTTKey);
|
||||
inputUserControlState(down);
|
||||
bool down = gKeyboard->getKeyDown(mPTTKey);
|
||||
if (!down)
|
||||
{
|
||||
inputUserControlState(down);
|
||||
}
|
||||
}
|
||||
}
|
||||
void LLVoiceClient::middleMouseState(bool down)
|
||||
{
|
||||
if(mPTTIsMiddleMouse)
|
||||
{
|
||||
if(mPTTIsMiddleMouse)
|
||||
{
|
||||
inputUserControlState(down);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -840,10 +860,11 @@ LLVoiceEffectInterface* LLVoiceClient::getVoiceEffectInterface() const
|
||||
class LLViewerRequiredVoiceVersion : public LLHTTPNode
|
||||
{
|
||||
static BOOL sAlertedUser;
|
||||
virtual void post(
|
||||
|
||||
void post(
|
||||
LLHTTPNode::ResponsePtr response,
|
||||
const LLSD& context,
|
||||
const LLSD& input) const
|
||||
const LLSD& input) const override
|
||||
{
|
||||
//You received this messsage (most likely on region cross or
|
||||
//teleport)
|
||||
@@ -870,10 +891,10 @@ class LLViewerRequiredVoiceVersion : public LLHTTPNode
|
||||
|
||||
class LLViewerParcelVoiceInfo : public LLHTTPNode
|
||||
{
|
||||
virtual void post(
|
||||
void post(
|
||||
LLHTTPNode::ResponsePtr response,
|
||||
const LLSD& context,
|
||||
const LLSD& input) const
|
||||
const LLSD& input) const override
|
||||
{
|
||||
//the parcel you are in has changed something about its
|
||||
//voice information
|
||||
|
||||
@@ -49,14 +49,7 @@ LLVoiceRemoteCtrl::LLVoiceRemoteCtrl (const std::string& name) : LLPanel(name)
|
||||
{
|
||||
setIsChrome(TRUE);
|
||||
|
||||
if (gSavedSettings.getBOOL("ShowVoiceChannelPopup"))
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_voice_remote_expanded.xml");
|
||||
}
|
||||
else
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_voice_remote.xml");
|
||||
}
|
||||
LLUICtrlFactory::getInstance()->buildPanel(this, gSavedSettings.getBOOL("ShowVoiceChannelPopup") ? "panel_voice_remote_expanded.xml" : "panel_voice_remote.xml");
|
||||
|
||||
setFocusRoot(TRUE);
|
||||
}
|
||||
@@ -73,7 +66,6 @@ BOOL LLVoiceRemoteCtrl::postBuild()
|
||||
mTalkBtn->setMouseUpCallback(boost::bind(&LLVoiceRemoteCtrl::onBtnTalkReleased));
|
||||
|
||||
mTalkLockBtn = getChild<LLButton>("ptt_lock");
|
||||
mTalkLockBtn->setClickedCallback(boost::bind(&LLVoiceRemoteCtrl::onBtnLock,this));
|
||||
|
||||
mSpeakersBtn = getChild<LLButton>("speakers_btn");
|
||||
mSpeakersBtn->setClickedCallback(boost::bind(&LLVoiceRemoteCtrl::onClickSpeakers));
|
||||
@@ -92,12 +84,12 @@ BOOL LLVoiceRemoteCtrl::postBuild()
|
||||
voice_channel_bg->setClickedCallback(boost::bind(&LLVoiceRemoteCtrl::onClickVoiceChannel));
|
||||
|
||||
mVoiceVolIcon.connect(this,"voice_volume");
|
||||
mShowChanBtn.connect(this,"show_channel");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLVoiceRemoteCtrl::draw()
|
||||
{
|
||||
// Singu TODO: I'm pretty sure voice channel changing can be done outside of draw call ~Liru
|
||||
BOOL voice_active = FALSE;
|
||||
LLVoiceChannel* channelp = LLVoiceChannel::getCurrentVoiceChannel();
|
||||
if (channelp)
|
||||
@@ -108,15 +100,13 @@ void LLVoiceRemoteCtrl::draw()
|
||||
mTalkBtn->setEnabled(voice_active);
|
||||
mTalkLockBtn->setEnabled(voice_active);
|
||||
|
||||
static LLCachedControl<bool> ptt_currently_enabled("PTTCurrentlyEnabled",false);
|
||||
// propagate ptt state to button display,
|
||||
if (!mTalkBtn->hasMouseCapture())
|
||||
{
|
||||
// not in push to talk mode, or push to talk is active means I'm talking
|
||||
mTalkBtn->setToggleState(!ptt_currently_enabled || LLVoiceClient::getInstance()->getUserPTTState());
|
||||
mTalkBtn->setToggleState(!mTalkLockBtn->getToggleState() || LLVoiceClient::getInstance()->getUserPTTState());
|
||||
}
|
||||
mSpeakersBtn->setToggleState(LLFloaterActiveSpeakers::instanceVisible(LLSD()));
|
||||
mTalkLockBtn->setToggleState(!ptt_currently_enabled);
|
||||
|
||||
std::string talk_blip_image;
|
||||
if (LLVoiceClient::getInstance()->getIsSpeaking(gAgent.getID()))
|
||||
@@ -207,19 +197,6 @@ void LLVoiceRemoteCtrl::draw()
|
||||
}
|
||||
}
|
||||
|
||||
LLButton* expand_button = mShowChanBtn;
|
||||
if (expand_button)
|
||||
{
|
||||
if (expand_button->getToggleState())
|
||||
{
|
||||
expand_button->setImageOverlay(std::string("arrow_down.tga"));
|
||||
}
|
||||
else
|
||||
{
|
||||
expand_button->setImageOverlay(std::string("arrow_up.tga"));
|
||||
}
|
||||
}
|
||||
|
||||
LLPanel::draw();
|
||||
}
|
||||
|
||||
@@ -250,27 +227,13 @@ void LLVoiceRemoteCtrl::onBtnTalkReleased()
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceRemoteCtrl::onBtnLock(void* user_data)
|
||||
{
|
||||
LLVoiceRemoteCtrl* remotep = (LLVoiceRemoteCtrl*)user_data;
|
||||
|
||||
gSavedSettings.setBOOL("PTTCurrentlyEnabled", !remotep->mTalkLockBtn->getToggleState());
|
||||
}
|
||||
|
||||
//static
|
||||
void LLVoiceRemoteCtrl::onClickPopupBtn(void* user_data)
|
||||
{
|
||||
LLVoiceRemoteCtrl* remotep = (LLVoiceRemoteCtrl*)user_data;
|
||||
|
||||
remotep->deleteAllChildren();
|
||||
if (gSavedSettings.getBOOL("ShowVoiceChannelPopup"))
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(remotep, "panel_voice_remote_expanded.xml");
|
||||
}
|
||||
else
|
||||
{
|
||||
LLUICtrlFactory::getInstance()->buildPanel(remotep, "panel_voice_remote.xml");
|
||||
}
|
||||
LLUICtrlFactory::getInstance()->buildPanel(remotep, gSavedSettings.getBOOL("ShowVoiceChannelPopup") ? "panel_voice_remote_expanded.xml" : "panel_voice_remote.xml");
|
||||
gOverlayBar->layoutButtons();
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,6 @@ public:
|
||||
/*virtual*/ BOOL postBuild();
|
||||
/*virtual*/ void draw();
|
||||
|
||||
static void onBtnLock(void* user_data);
|
||||
static void onBtnTalkHeld();
|
||||
static void onBtnTalkReleased();
|
||||
static void onBtnTalkClicked();
|
||||
@@ -62,7 +61,6 @@ protected:
|
||||
LLButton* mTalkLockBtn;
|
||||
LLButton* mSpeakersBtn;
|
||||
CachedUICtrl<LLIconCtrl> mVoiceVolIcon;
|
||||
CachedUICtrl<LLButton> mShowChanBtn;
|
||||
};
|
||||
|
||||
#endif // LL_LLVOICEREMOTECTRL_H
|
||||
|
||||
@@ -934,6 +934,23 @@ bool LLPipeline::isRenderDeferredDesired()
|
||||
gSavedSettings.getBOOL("WindLightUseAtmosShaders");
|
||||
}
|
||||
|
||||
//static
|
||||
void LLPipeline::updateRenderDeferred()
|
||||
{
|
||||
bool deferred = (bool(LLRenderTarget::sUseFBO &&
|
||||
LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
|
||||
LLPipeline::sRenderBump &&
|
||||
isRenderDeferredDesired())) &&
|
||||
!gUseWireframe;
|
||||
|
||||
sRenderDeferred = deferred;
|
||||
if (deferred)
|
||||
{ //must render glow when rendering deferred since post effect pass is needed to present any lighting at all
|
||||
sRenderGlow = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//static
|
||||
void LLPipeline::refreshCachedSettings()
|
||||
{
|
||||
|
||||
@@ -408,6 +408,7 @@ public:
|
||||
|
||||
static bool isRenderDeferredCapable();
|
||||
static bool isRenderDeferredDesired();
|
||||
static void updateRenderDeferred();
|
||||
static void refreshCachedSettings();
|
||||
|
||||
static void throttleNewMemoryAllocation(BOOL disable);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<combo_box follows="left|top" height="18" label="Gestures" left="6" name="Gesture" width="120">
|
||||
<combo_item name="Gestures">Gestures</combo_item>
|
||||
</combo_box>
|
||||
<check_box bottom_delta="-2" enabled="true" follows="left|top" font="SansSerifSmall" height="20" initial_value="false" label="Show Muted Text" left_delta="124" name="show mutes" width="116"/>
|
||||
<check_box bottom_delta="-2" enabled="true" follows="left|top" font="SansSerifSmall" height="20" label="Show Muted Text" left_delta="124" name="show mutes" width="116" control_name="ShowMutedText"/>
|
||||
<!--check_box bottom_delta="-15" enabled="true" follows="left|top" font="SansSerifSmall" height="20" initial_value="false" label="Translate Chat (powered by Google)" name="translate chat" width="100" control_name="TranslateChat"/-->
|
||||
<button bottom_delta="2" left_delta="120" follows="left|top" font="SansSerifSmall" height="20" width="100" label="Open History" name="chat_history_open" tool_tip="Click here to open chat history in external editor."/>
|
||||
<button bottom_delta="0" follows="right|top" height="20" label="< <" label_selected="> >" toggle="true" left="272" name="toggle_active_speakers_btn" right="305" tool_tip="Click here to show a list of active participants in this IM session." width="80"/>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</menu_bar>
|
||||
<text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true"
|
||||
follows="left|top|right|bottom" font="SansSerif" height="285"
|
||||
ignore_tab="false" left="4" max_length="65536" mouse_opaque="true"
|
||||
ignore_tab="false" left="4" max_length="2147483647" mouse_opaque="true"
|
||||
name="Notecard Editor" width="392" word_wrap="true" spell_check="true">
|
||||
Loading...
|
||||
</text_editor>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
</menu_bar>
|
||||
<text_editor type="string" length="1" bottom="-344" embedded_items="true" enabled="true"
|
||||
follows="left|top|right|bottom" font="SansSerif" height="285"
|
||||
ignore_tab="false" left="4" max_length="65536" mouse_opaque="true"
|
||||
ignore_tab="false" left="4" max_length="2147483647" mouse_opaque="true"
|
||||
name="Notecard Editor" width="392" word_wrap="true">
|
||||
Loading...
|
||||
</text_editor>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<text_editor type="string" length="1" bottom="-393"
|
||||
embedded_items="false" enabled="true" follows="left|top|right|bottom"
|
||||
font="Monospace" height="376" ignore_tab="false" left="4"
|
||||
max_length="65536" mouse_opaque="true" name="Script Editor" width="492" border_drop_shadow_visible="false" border_visible="false" bevel_style="none" border_style="line" border_thickness="0"
|
||||
max_length="2147483647" mouse_opaque="true" name="Script Editor" width="492" border_drop_shadow_visible="false" border_visible="false" bevel_style="none" border_style="line" border_thickness="0"
|
||||
word_wrap="true" show_line_numbers="true">
|
||||
Loading...
|
||||
</text_editor>
|
||||
|
||||
117
indra/newview/skins/default/xui/en-us/menu_local_avs.xml
Normal file
117
indra/newview/skins/default/xui/en-us/menu_local_avs.xml
Normal file
@@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<menu name="Local Avs Menu" create_jump_keys="true">
|
||||
<menu label="Avatar" name="Avatar" create_jump_keys="true">
|
||||
<menu_item_call label="Profile" name="Profile">
|
||||
<on_click function="List.ShowProfile"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Web Profile" name="Web Profile">
|
||||
<on_click function="List.ShowWebProfile"/>
|
||||
<on_visible function="List.VisibleWebProfile"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Pay" name="Pay">
|
||||
<on_click function="List.Pay"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Instant Message" name="Instant Message">
|
||||
<on_click function="List.StartIM"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Conference Chat" name="Conference Chat">
|
||||
<on_click function="List.StartConference"/>
|
||||
<on_visible function="List.EnableMultipleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Call" name="Call">
|
||||
<on_click function="List.StartCall"/>
|
||||
<on_enable function="List.EnableCall"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Conference Call" name="Conference Call">
|
||||
<on_click function="List.StartAdhocCall"/>
|
||||
<on_enable function="List.EnableCall"/>
|
||||
<on_visible function="List.EnableMultipleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Add Friend" name="Add Friend">
|
||||
<on_click function="List.RequestFriendship"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
<on_visible function="List.EnableIsNotFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Remove Friend" name="Remove Friend">
|
||||
<on_click function="List.RemoveFriend"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
<on_visible function="List.EnableIsFriend"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Invite To Group" name="Invite To Group">
|
||||
<on_click function="List.InviteToGroup"/>
|
||||
<on_visible function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Offer Teleport" name="Offer Teleport">
|
||||
<on_click function="List.OfferTeleport"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Teleport To" name="Teleport To" shortcut="control|Enter">
|
||||
<on_click function="Radar.TeleportTo"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Request Teleport" name="Request Teleport">
|
||||
<on_click function="List.RequestTeleport"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Share" name="Share">
|
||||
<on_click function="List.Share"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Chat History" name="Chat History">
|
||||
<on_click function="List.ShowLog"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Track/Untrack" name="Track/Untrack">
|
||||
<on_click function="Radar.Track"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Copy Key" name="Copy Key">
|
||||
<on_click function="List.CopyUUIDs"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Copy SLURL" name="Copy SLURL">
|
||||
<on_click function="List.CopySLURL"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
<menu_item_call label="Focus" name="Focus">
|
||||
<on_click function="Radar.Focus"/>
|
||||
<on_enable function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu label="Moderation" name="Moderation" create_jump_keys="true">
|
||||
<menu_item_call label="Mute/Unmute" name="Mute/Unmute">
|
||||
<on_click function="List.ToggleMute"/>
|
||||
<on_enable function="List.EnableMute"/>
|
||||
<on_visible function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Ban From Group" name="Ban From Group">
|
||||
<on_click function="List.BanFromGroup"/>
|
||||
<on_visible function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Report Abuse" name="Report Abuse">
|
||||
<on_click function="List.AbuseReport"/>
|
||||
<on_visible function="List.EnableSingleSelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator/>
|
||||
<menu_item_call label="Freeze" name="Freeze">
|
||||
<on_click function="List.Freeze"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Eject/Ban from Parcel" name="Eject/Ban from Parcel">
|
||||
<on_click function="List.ParcelEject"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Eject from estate" name="Eject from estate">
|
||||
<on_click function="List.EstateEject"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call label="Eject and ban from estate" name="Eject and ban from estate">
|
||||
<on_click function="List.EstateBan"/>
|
||||
<on_enable function="List.EnableAnySelected"/>
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
</menu>
|
||||
@@ -9,7 +9,7 @@
|
||||
</combo_box>
|
||||
</layout_panel>
|
||||
<layout_panel auto_resize="true" bottom="0" can_resize="false" height="120" min_height="100" name="moderate_chat_panel" top_delta="0" user_resize="false" visible="true" width="140">
|
||||
<scroll_list bottom="78" can_resize="false" column_padding="0" draw_heading="true" draw_stripes="false" follows="left|top|bottom|right" left="0" multi_select="true" name="speakers_list" right="140" search_column="1" sort_column="2" top="113" menu_num="0">
|
||||
<scroll_list bottom="78" can_resize="false" column_padding="0" draw_heading="true" draw_stripes="false" follows="left|top|bottom|right" left="0" multi_select="true" name="speakers_list" right="140" search_column="1" sort_column="2" top="113">
|
||||
<column name="icon_speaking_status" sort="speaking_status" width="20"/>
|
||||
<column dynamicwidth="true" label="Name" name="speaker_name"/>
|
||||
<column label="" name="speaking_status" width="0"/>
|
||||
|
||||
@@ -9,11 +9,12 @@
|
||||
tab_stop="false" tool_tip="Hold the button to talk" width="60" />
|
||||
<button bottom="-19" height="16" image_selected="ptt_lock_on.tga"
|
||||
image_unselected="ptt_lock_off.tga" label="" left_delta="4" name="ptt_lock"
|
||||
scale_image="false" toggle="true"
|
||||
scale_image="false" toggle="true" control_name="PTTCurrentlyEnabled"
|
||||
tool_tip="Click lock to switch to talk mode" width="16" />
|
||||
<icon bottom="-19" height="16" image_name="icn_voice_ptt-off.tga" left_delta="42"
|
||||
name="voice_volume" width="16" />
|
||||
<button bottom="-22" control_name="ShowVoiceChannelPopup" height="22" label=""
|
||||
left_delta="16" name="show_channel" scale_image="true" toggle="true"
|
||||
image_selected="arrow_down.tga" image_unselected="arrow_up.tga"
|
||||
tool_tip="Click to show current voice channel" width="22" />
|
||||
</panel>
|
||||
|
||||
@@ -334,15 +334,9 @@ class WindowsManifest(ViewerManifest):
|
||||
self.path("vivoxsdk.dll")
|
||||
self.path("ortp.dll")
|
||||
self.path("libsndfile-1.dll")
|
||||
self.path("zlib1.dll")
|
||||
self.path("vivoxplatform.dll")
|
||||
self.path("vivoxoal.dll")
|
||||
self.path("ca-bundle.crt")
|
||||
|
||||
# Security
|
||||
self.path("ssleay32.dll")
|
||||
self.path("libeay32.dll")
|
||||
|
||||
# Hunspell
|
||||
self.path("libhunspell.dll")
|
||||
|
||||
@@ -621,6 +615,10 @@ class Windows_i686_Manifest(WindowsManifest):
|
||||
if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
|
||||
dst=""):
|
||||
|
||||
# Security
|
||||
self.path("libcrypto-1_1.dll")
|
||||
self.path("libssl-1_1.dll")
|
||||
|
||||
# Get fmod studio dll, continue if missing
|
||||
try:
|
||||
if self.args['configuration'].lower() == 'debug':
|
||||
@@ -645,6 +643,10 @@ class Windows_x86_64_Manifest(WindowsManifest):
|
||||
if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
|
||||
dst=""):
|
||||
|
||||
# Security
|
||||
self.path("libcrypto-1_1-x64.dll")
|
||||
self.path("libssl-1_1-x64.dll")
|
||||
|
||||
# Get fmodstudio dll, continue if missing
|
||||
try:
|
||||
if self.args['configuration'].lower() == 'debug':
|
||||
|
||||
@@ -1,271 +0,0 @@
|
||||
#region Using Directives
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Reflection;
|
||||
using System.Security.Permissions;
|
||||
|
||||
#endregion
|
||||
|
||||
namespace TestDispatchUtility
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides helper methods for working with COM IDispatch objects that have a registered type library.
|
||||
/// </summary>
|
||||
public static class DispatchUtility
|
||||
{
|
||||
#region Private Constants
|
||||
|
||||
private const int S_OK = 0; //From WinError.h
|
||||
private const int LOCALE_SYSTEM_DEFAULT = 2 << 10; //From WinNT.h == 2048 == 0x800
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Gets whether the specified object implements IDispatch.
|
||||
/// </summary>
|
||||
/// <param name="obj">An object to check.</param>
|
||||
/// <returns>True if the object implements IDispatch. False otherwise.</returns>
|
||||
public static bool ImplementsIDispatch(object obj)
|
||||
{
|
||||
bool result = obj is IDispatchInfo;
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Type that can be used with reflection.
|
||||
/// </summary>
|
||||
/// <param name="obj">An object that implements IDispatch.</param>
|
||||
/// <param name="throwIfNotFound">Whether an exception should be thrown if a Type can't be obtained.</param>
|
||||
/// <returns>A .NET Type that can be used with reflection.</returns>
|
||||
/// <exception cref="InvalidCastException">If <paramref name="obj"/> doesn't implement IDispatch.</exception>
|
||||
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
|
||||
public static Type GetType(object obj, bool throwIfNotFound)
|
||||
{
|
||||
RequireReference(obj, "obj");
|
||||
Type result = GetType((IDispatchInfo)obj, throwIfNotFound);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to get the DISPID for the requested member name.
|
||||
/// </summary>
|
||||
/// <param name="obj">An object that implements IDispatch.</param>
|
||||
/// <param name="name">The name of a member to lookup.</param>
|
||||
/// <param name="dispId">If the method returns true, this holds the DISPID on output.
|
||||
/// If the method returns false, this value should be ignored.</param>
|
||||
/// <returns>True if the member was found and resolved to a DISPID. False otherwise.</returns>
|
||||
/// <exception cref="InvalidCastException">If <paramref name="obj"/> doesn't implement IDispatch.</exception>
|
||||
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
|
||||
public static bool TryGetDispId(object obj, string name, out int dispId)
|
||||
{
|
||||
RequireReference(obj, "obj");
|
||||
bool result = TryGetDispId((IDispatchInfo)obj, name, out dispId);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invokes a member by DISPID.
|
||||
/// </summary>
|
||||
/// <param name="obj">An object that implements IDispatch.</param>
|
||||
/// <param name="dispId">The DISPID of a member. This can be obtained using
|
||||
/// <see cref="TryGetDispId(object, string, out int)"/>.</param>
|
||||
/// <param name="args">The arguments to pass to the member.</param>
|
||||
/// <returns>The member's return value.</returns>
|
||||
/// <remarks>
|
||||
/// This can invoke a method or a property get accessor.
|
||||
/// </remarks>
|
||||
public static object Invoke(object obj, int dispId, object[] args)
|
||||
{
|
||||
string memberName = "[DispId=" + dispId + "]";
|
||||
object result = Invoke(obj, memberName, args);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invokes a member by name.
|
||||
/// </summary>
|
||||
/// <param name="obj">An object.</param>
|
||||
/// <param name="memberName">The name of the member to invoke.</param>
|
||||
/// <param name="args">The arguments to pass to the member.</param>
|
||||
/// <returns>The member's return value.</returns>
|
||||
/// <remarks>
|
||||
/// This can invoke a method or a property get accessor.
|
||||
/// </remarks>
|
||||
public static object Invoke(object obj, string memberName, object[] args)
|
||||
{
|
||||
RequireReference(obj, "obj");
|
||||
Type type = obj.GetType();
|
||||
object result = type.InvokeMember(memberName, BindingFlags.InvokeMethod | BindingFlags.GetProperty,
|
||||
null, obj, args, null);
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Requires that the value is non-null.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The type of the value.</typeparam>
|
||||
/// <param name="value">The value to check.</param>
|
||||
/// <param name="name">The name of the value.</param>
|
||||
private static void RequireReference<T>(T value, string name) where T : class
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException(name);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets a Type that can be used with reflection.
|
||||
/// </summary>
|
||||
/// <param name="dispatch">An object that implements IDispatch.</param>
|
||||
/// <param name="throwIfNotFound">Whether an exception should be thrown if a Type can't be obtained.</param>
|
||||
/// <returns>A .NET Type that can be used with reflection.</returns>
|
||||
private static Type GetType(IDispatchInfo dispatch, bool throwIfNotFound)
|
||||
{
|
||||
RequireReference(dispatch, "dispatch");
|
||||
|
||||
Type result = null;
|
||||
int typeInfoCount;
|
||||
int hr = dispatch.GetTypeInfoCount(out typeInfoCount);
|
||||
if (hr == S_OK && typeInfoCount > 0)
|
||||
{
|
||||
// Type info isn't usually culture-aware for IDispatch, so we might as well pass
|
||||
// the default locale instead of looking up the current thread's LCID each time
|
||||
// (via CultureInfo.CurrentCulture.LCID).
|
||||
dispatch.GetTypeInfo(0, LOCALE_SYSTEM_DEFAULT, out result);
|
||||
}
|
||||
|
||||
if (result == null && throwIfNotFound)
|
||||
{
|
||||
// If the GetTypeInfoCount called failed, throw an exception for that.
|
||||
Marshal.ThrowExceptionForHR(hr);
|
||||
|
||||
// Otherwise, throw the same exception that Type.GetType would throw.
|
||||
throw new TypeLoadException();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to get the DISPID for the requested member name.
|
||||
/// </summary>
|
||||
/// <param name="dispatch">An object that implements IDispatch.</param>
|
||||
/// <param name="name">The name of a member to lookup.</param>
|
||||
/// <param name="dispId">If the method returns true, this holds the DISPID on output.
|
||||
/// If the method returns false, this value should be ignored.</param>
|
||||
/// <returns>True if the member was found and resolved to a DISPID. False otherwise.</returns>
|
||||
private static bool TryGetDispId(IDispatchInfo dispatch, string name, out int dispId)
|
||||
{
|
||||
RequireReference(dispatch, "dispatch");
|
||||
RequireReference(name, "name");
|
||||
|
||||
bool result = false;
|
||||
|
||||
// Members names aren't usually culture-aware for IDispatch, so we might as well
|
||||
// pass the default locale instead of looking up the current thread's LCID each time
|
||||
// (via CultureInfo.CurrentCulture.LCID).
|
||||
Guid iidNull = Guid.Empty;
|
||||
int hr = dispatch.GetDispId(ref iidNull, ref name, 1, LOCALE_SYSTEM_DEFAULT, out dispId);
|
||||
|
||||
const int DISP_E_UNKNOWNNAME = unchecked((int)0x80020006); //From WinError.h
|
||||
const int DISPID_UNKNOWN = -1; //From OAIdl.idl
|
||||
if (hr == S_OK)
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
else if (hr == DISP_E_UNKNOWNNAME && dispId == DISPID_UNKNOWN)
|
||||
{
|
||||
// This is the only supported "error" case because it means IDispatch
|
||||
// is saying it doesn't know the member we asked about.
|
||||
result = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The other documented result codes are all errors.
|
||||
Marshal.ThrowExceptionForHR(hr);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Private Interfaces
|
||||
|
||||
/// <summary>
|
||||
/// A partial declaration of IDispatch used to lookup Type information and DISPIDs.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This interface only declares the first three methods of IDispatch. It omits the
|
||||
/// fourth method (Invoke) because there are already plenty of ways to do dynamic
|
||||
/// invocation in .NET. But the first three methods provide dynamic type metadata
|
||||
/// discovery, which .NET doesn't provide normally if you have a System.__ComObject
|
||||
/// RCW instead of a strongly-typed RCW.
|
||||
/// <para/>
|
||||
/// Note: The original declaration of IDispatch is in OAIdl.idl.
|
||||
/// </remarks>
|
||||
[ComImport]
|
||||
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
[Guid("00020400-0000-0000-C000-000000000046")]
|
||||
private interface IDispatchInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the number of Types that the object provides (0 or 1).
|
||||
/// </summary>
|
||||
/// <param name="typeInfoCount">Returns 0 or 1 for the number of Types provided by <see cref="GetTypeInfo"/>.</param>
|
||||
/// <remarks>
|
||||
/// http://msdn.microsoft.com/en-us/library/da876d53-cb8a-465c-a43e-c0eb272e2a12(VS.85)
|
||||
/// </remarks>
|
||||
[PreserveSig]
|
||||
int GetTypeInfoCount(out int typeInfoCount);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Type information for an object if <see cref="GetTypeInfoCount"/> returned 1.
|
||||
/// </summary>
|
||||
/// <param name="typeInfoIndex">Must be 0.</param>
|
||||
/// <param name="lcid">Typically, LOCALE_SYSTEM_DEFAULT (2048).</param>
|
||||
/// <param name="typeInfo">Returns the object's Type information.</param>
|
||||
/// <remarks>
|
||||
/// http://msdn.microsoft.com/en-us/library/cc1ec9aa-6c40-4e70-819c-a7c6dd6b8c99(VS.85)
|
||||
/// </remarks>
|
||||
void GetTypeInfo(int typeInfoIndex, int lcid, [MarshalAs(UnmanagedType.CustomMarshaler,
|
||||
MarshalTypeRef = typeof(System.Runtime.InteropServices.CustomMarshalers.TypeToTypeInfoMarshaler))] out Type typeInfo);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DISPID of the specified member name.
|
||||
/// </summary>
|
||||
/// <param name="riid">Must be IID_NULL. Pass a copy of Guid.Empty.</param>
|
||||
/// <param name="name">The name of the member to look up.</param>
|
||||
/// <param name="nameCount">Must be 1.</param>
|
||||
/// <param name="lcid">Typically, LOCALE_SYSTEM_DEFAULT (2048).</param>
|
||||
/// <param name="dispId">If a member with the requested <paramref name="name"/>
|
||||
/// is found, this returns its DISPID and the method's return value is 0.
|
||||
/// If the method returns a non-zero value, then this parameter's output value is
|
||||
/// undefined.</param>
|
||||
/// <returns>Zero for success. Non-zero for failure.</returns>
|
||||
/// <remarks>
|
||||
/// http://msdn.microsoft.com/en-us/library/6f6cf233-3481-436e-8d6a-51f93bf91619(VS.85)
|
||||
/// </remarks>
|
||||
[PreserveSig]
|
||||
int GetDispId(ref Guid riid, ref string name, int nameCount, int lcid, out int dispId);
|
||||
|
||||
// NOTE: The real IDispatch also has an Invoke method next, but we don't need it.
|
||||
// We can invoke methods using .NET's Type.InvokeMember method with the special
|
||||
// [DISPID=n] syntax for member "names", or we can get a .NET Type using GetTypeInfo
|
||||
// and invoke methods on that through reflection.
|
||||
// Type.InvokeMember: http://msdn.microsoft.com/en-us/library/de3dhzwy.aspx
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
VSTool is a command line utility to manipulate VisualStudio settings.
|
||||
|
||||
The windows cmake project configuration uses VSTool.exe
|
||||
|
||||
A handy upgrade:
|
||||
figure out how to make cmake build this csharp app
|
||||
- or write the app using script (jscript?!?) so it doesn't need to be built.
|
||||
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
|
||||
<PropertyGroup>
|
||||
<ProjectType>Local</ProjectType>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{96943E2D-1373-4617-A117-D0F997A94919}</ProjectGuid>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
<AssemblyKeyContainerName>
|
||||
</AssemblyKeyContainerName>
|
||||
<AssemblyName>VSTool</AssemblyName>
|
||||
<AssemblyOriginatorKeyFile>
|
||||
</AssemblyOriginatorKeyFile>
|
||||
<DefaultClientScript>JScript</DefaultClientScript>
|
||||
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
|
||||
<DefaultTargetSchema>IE50</DefaultTargetSchema>
|
||||
<DelaySign>false</DelaySign>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>VSTool</RootNamespace>
|
||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||
<StartupObject>VSTool.VSToolMain</StartupObject>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<OldToolsVersion>2.0</OldToolsVersion>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>.\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>false</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>.\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>true</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Data">
|
||||
<Name>System.Data</Name>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="main.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Binary file not shown.
@@ -1,19 +0,0 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,3 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v2.0.50727"/></startup></configuration>
|
||||
@@ -1,730 +0,0 @@
|
||||
// Code about getting running instances visual studio
|
||||
// was borrowed from
|
||||
// http://www.codeproject.com/KB/cs/automatingvisualstudio.aspx
|
||||
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.InteropServices.ComTypes;
|
||||
|
||||
namespace VSTool
|
||||
{
|
||||
// The MessageFilter class comes from:
|
||||
// http://msdn.microsoft.com/en-us/library/ms228772(VS.80).aspx
|
||||
// It allows vstool to get timing error messages from
|
||||
// visualstudio and handle them.
|
||||
public class MessageFilter : IOleMessageFilter
|
||||
{
|
||||
//
|
||||
// IOleMessageFilter functions.
|
||||
// Handle incoming thread requests.
|
||||
int IOleMessageFilter.HandleInComingCall(int dwCallType,
|
||||
IntPtr hTaskCaller, int dwTickCount, IntPtr
|
||||
lpInterfaceInfo)
|
||||
{
|
||||
//Return the flag SERVERCALL_ISHANDLED.
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Thread call was rejected, so try again.
|
||||
int IOleMessageFilter.RetryRejectedCall(IntPtr
|
||||
hTaskCallee, int dwTickCount, int dwRejectType)
|
||||
{
|
||||
if (dwRejectType == 1 || dwRejectType == 2)
|
||||
// flag = SERVERCALL_RETRYLATER or SERVERCALL_REJECTED.
|
||||
{
|
||||
// Retry the thread call immediately if return >=0 &
|
||||
// <100.
|
||||
return 99;
|
||||
}
|
||||
// Too busy; cancel call.
|
||||
return -1;
|
||||
}
|
||||
|
||||
int IOleMessageFilter.MessagePending(IntPtr hTaskCallee,
|
||||
int dwTickCount, int dwPendingType)
|
||||
{
|
||||
//Return the flag PENDINGMSG_WAITDEFPROCESS.
|
||||
return 2;
|
||||
}
|
||||
|
||||
//
|
||||
// Class containing the IOleMessageFilter
|
||||
// thread error-handling functions.
|
||||
|
||||
// Start the filter.
|
||||
public static void Register()
|
||||
{
|
||||
IOleMessageFilter newFilter = new MessageFilter();
|
||||
IOleMessageFilter oldFilter = null;
|
||||
CoRegisterMessageFilter(newFilter, out oldFilter);
|
||||
}
|
||||
|
||||
// Done with the filter, close it.
|
||||
public static void Revoke()
|
||||
{
|
||||
IOleMessageFilter oldFilter = null;
|
||||
CoRegisterMessageFilter(null, out oldFilter);
|
||||
}
|
||||
|
||||
// Implement the IOleMessageFilter interface.
|
||||
[DllImport("Ole32.dll")]
|
||||
private static extern int
|
||||
CoRegisterMessageFilter(IOleMessageFilter newFilter, out
|
||||
IOleMessageFilter oldFilter);
|
||||
}
|
||||
|
||||
[ComImport, Guid("00000016-0000-0000-C000-000000000046"),
|
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||
internal interface IOleMessageFilter
|
||||
{
|
||||
[PreserveSig]
|
||||
int HandleInComingCall(
|
||||
int dwCallType,
|
||||
IntPtr hTaskCaller,
|
||||
int dwTickCount,
|
||||
IntPtr lpInterfaceInfo);
|
||||
|
||||
[PreserveSig]
|
||||
int RetryRejectedCall(
|
||||
IntPtr hTaskCallee,
|
||||
int dwTickCount,
|
||||
int dwRejectType);
|
||||
|
||||
[PreserveSig]
|
||||
int MessagePending(
|
||||
IntPtr hTaskCallee,
|
||||
int dwTickCount,
|
||||
int dwPendingType);
|
||||
}
|
||||
|
||||
internal class ViaCOM
|
||||
{
|
||||
public static object GetProperty(object from_obj, string prop_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
var objType = from_obj.GetType();
|
||||
return objType.InvokeMember(
|
||||
prop_name,
|
||||
BindingFlags.GetProperty, null,
|
||||
from_obj,
|
||||
null);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Error getting property: \"{0}\"", prop_name);
|
||||
Console.WriteLine(e.Message);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public static object SetProperty(object from_obj, string prop_name, object new_value)
|
||||
{
|
||||
try
|
||||
{
|
||||
object[] args = {new_value};
|
||||
var objType = from_obj.GetType();
|
||||
return objType.InvokeMember(
|
||||
prop_name,
|
||||
BindingFlags.DeclaredOnly |
|
||||
BindingFlags.Public |
|
||||
BindingFlags.NonPublic |
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.SetProperty,
|
||||
null,
|
||||
from_obj,
|
||||
args);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Error setting property: \"{0}\"", prop_name);
|
||||
Console.WriteLine(e.Message);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public static object CallMethod(object from_obj, string method_name, params object[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var objType = from_obj.GetType();
|
||||
return objType.InvokeMember(
|
||||
method_name,
|
||||
BindingFlags.DeclaredOnly |
|
||||
BindingFlags.Public |
|
||||
BindingFlags.NonPublic |
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.InvokeMethod,
|
||||
null,
|
||||
from_obj,
|
||||
args);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Error calling method \"{0}\"", method_name);
|
||||
Console.WriteLine(e.Message);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point class for VSTool.
|
||||
/// </summary>
|
||||
internal class VSToolMain
|
||||
{
|
||||
private static readonly bool ignore_case = true;
|
||||
|
||||
private static string solution_name;
|
||||
private static bool use_new_vs;
|
||||
private static readonly Hashtable projectDict = new Hashtable();
|
||||
private static string startup_project;
|
||||
private static string config;
|
||||
|
||||
private static object dte;
|
||||
private static object solution;
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
private static int Main(string[] args)
|
||||
{
|
||||
var retVal = 0;
|
||||
var need_save = false;
|
||||
|
||||
try
|
||||
{
|
||||
parse_command_line(args);
|
||||
|
||||
Console.WriteLine("Editing solution: {0}", solution_name);
|
||||
|
||||
var found_open_solution = GetDTEAndSolution();
|
||||
|
||||
if (dte == null || solution == null)
|
||||
{
|
||||
retVal = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageFilter.Register();
|
||||
|
||||
// Walk through all of the projects in the solution
|
||||
// and list the type of each project.
|
||||
foreach (DictionaryEntry p in projectDict)
|
||||
{
|
||||
var project_name = (string) p.Key;
|
||||
var working_dir = (string) p.Value;
|
||||
if (SetProjectWorkingDir(solution, project_name, working_dir))
|
||||
{
|
||||
need_save = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (config != null)
|
||||
{
|
||||
need_save = SetActiveConfig(config);
|
||||
}
|
||||
|
||||
if (startup_project != null)
|
||||
{
|
||||
need_save = SetStartupProject(startup_project);
|
||||
}
|
||||
|
||||
if (need_save)
|
||||
{
|
||||
if (found_open_solution == false)
|
||||
{
|
||||
ViaCOM.CallMethod(solution, "Close", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
retVal = 1;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (solution != null)
|
||||
{
|
||||
Marshal.ReleaseComObject(solution);
|
||||
solution = null;
|
||||
}
|
||||
|
||||
if (dte != null)
|
||||
{
|
||||
Marshal.ReleaseComObject(dte);
|
||||
dte = null;
|
||||
}
|
||||
|
||||
MessageFilter.Revoke();
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
public static bool parse_command_line(string[] args)
|
||||
{
|
||||
var options_desc =
|
||||
"--solution <solution_name> : MSVC solution name. (required)\n" +
|
||||
"--use_new_vs : Ignore running versions of visual studio.\n" +
|
||||
"--workingdir <project> <dir> : Set working dir of a VC project.\n" +
|
||||
"--config <config> : Set the active config for the solution.\n" +
|
||||
"--startup <project> : Set the startup project for the solution.\n";
|
||||
|
||||
try
|
||||
{
|
||||
// Command line param parsing loop.
|
||||
var i = 0;
|
||||
for (; i < args.Length; ++i)
|
||||
{
|
||||
if ("--solution" == args[i])
|
||||
{
|
||||
if (solution_name != null)
|
||||
{
|
||||
throw new ApplicationException("Found second --solution option");
|
||||
}
|
||||
solution_name = args[++i];
|
||||
}
|
||||
else if ("--use_new_vs" == args[i])
|
||||
{
|
||||
use_new_vs = true;
|
||||
}
|
||||
|
||||
else if ("--workingdir" == args[i])
|
||||
{
|
||||
var project_name = args[++i];
|
||||
var working_dir = args[++i];
|
||||
projectDict.Add(project_name, working_dir);
|
||||
}
|
||||
else if ("--config" == args[i])
|
||||
{
|
||||
if (config != null)
|
||||
{
|
||||
throw new ApplicationException("Found second --config option");
|
||||
}
|
||||
config = args[++i];
|
||||
}
|
||||
else if ("--startup" == args[i])
|
||||
{
|
||||
if (startup_project != null)
|
||||
{
|
||||
throw new ApplicationException("Found second --startup option");
|
||||
}
|
||||
startup_project = args[++i];
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ApplicationException("Found unrecognized token on command line: " + args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (solution_name == null)
|
||||
{
|
||||
throw new ApplicationException("The --solution option is required.");
|
||||
}
|
||||
}
|
||||
catch (ApplicationException e)
|
||||
{
|
||||
Console.WriteLine("Oops! " + e.Message);
|
||||
Console.Write("Command line:");
|
||||
foreach (var arg in args)
|
||||
{
|
||||
Console.Write(" " + arg);
|
||||
}
|
||||
Console.Write("\n\n");
|
||||
Console.WriteLine("VSTool command line usage");
|
||||
Console.Write(options_desc);
|
||||
throw e;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool GetDTEAndSolution()
|
||||
{
|
||||
var found_open_solution = true;
|
||||
|
||||
Console.WriteLine("Looking for existing VisualStudio instance...");
|
||||
|
||||
// Get an instance of the currently running Visual Studio .NET IDE.
|
||||
// dte = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.7.1");
|
||||
var full_solution_name = Path.GetFullPath(solution_name);
|
||||
if (false == use_new_vs)
|
||||
{
|
||||
dte = GetIDEInstance(full_solution_name);
|
||||
}
|
||||
|
||||
if (dte == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
Console.WriteLine(" Didn't find open solution, starting new background VisualStudio instance...");
|
||||
Console.WriteLine(" Reading .sln file version...");
|
||||
var version = GetSolutionVersion(full_solution_name);
|
||||
|
||||
Console.WriteLine(" Using version: {0}...", version);
|
||||
var progid = GetVSProgID(version);
|
||||
|
||||
var objType = Type.GetTypeFromProgID(progid);
|
||||
dte = Activator.CreateInstance(objType);
|
||||
Console.WriteLine(" Reading solution: \"{0}\"", full_solution_name);
|
||||
|
||||
solution = ViaCOM.GetProperty(dte, "Solution");
|
||||
object[] openArgs = {full_solution_name};
|
||||
ViaCOM.CallMethod(solution, "Open", openArgs);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
Console.WriteLine("Quitting do to error opening: {0}", full_solution_name);
|
||||
solution = null;
|
||||
dte = null;
|
||||
return found_open_solution;
|
||||
}
|
||||
found_open_solution = false;
|
||||
}
|
||||
|
||||
if (solution == null)
|
||||
{
|
||||
solution = ViaCOM.GetProperty(dte, "Solution");
|
||||
}
|
||||
|
||||
return found_open_solution;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the DTE object for the instance of Visual Studio IDE that has
|
||||
/// the specified solution open.
|
||||
/// </summary>
|
||||
/// <param name="solutionFile">The absolute filename of the solution</param>
|
||||
/// <returns>Corresponding DTE object or null if no such IDE is running</returns>
|
||||
public static object GetIDEInstance(string solutionFile)
|
||||
{
|
||||
var runningInstances = GetIDEInstances(true);
|
||||
var enumerator = runningInstances.GetEnumerator();
|
||||
|
||||
while (enumerator.MoveNext())
|
||||
{
|
||||
try
|
||||
{
|
||||
var ide = enumerator.Value;
|
||||
if (ide != null)
|
||||
{
|
||||
var sol = ViaCOM.GetProperty(ide, "Solution");
|
||||
if (0 == string.Compare((string) ViaCOM.GetProperty(sol, "FullName"), solutionFile, ignore_case))
|
||||
{
|
||||
return ide;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a table of the currently running instances of the Visual Studio .NET IDE.
|
||||
/// </summary>
|
||||
/// <param name="openSolutionsOnly">Only return instances that have opened a solution</param>
|
||||
/// <returns>A hashtable mapping the name of the IDE in the running object table to the corresponding DTE object</returns>
|
||||
public static Hashtable GetIDEInstances(bool openSolutionsOnly)
|
||||
{
|
||||
var runningIDEInstances = new Hashtable();
|
||||
var runningObjects = GetRunningObjectTable();
|
||||
|
||||
var rotEnumerator = runningObjects.GetEnumerator();
|
||||
while (rotEnumerator.MoveNext())
|
||||
{
|
||||
var candidateName = (string) rotEnumerator.Key;
|
||||
if (!candidateName.StartsWith("!VisualStudio.DTE"))
|
||||
continue;
|
||||
|
||||
var ide = rotEnumerator.Value;
|
||||
if (ide == null)
|
||||
continue;
|
||||
|
||||
if (openSolutionsOnly)
|
||||
{
|
||||
try
|
||||
{
|
||||
var sol = ViaCOM.GetProperty(ide, "Solution");
|
||||
var solutionFile = (string) ViaCOM.GetProperty(sol, "FullName");
|
||||
if (solutionFile != string.Empty)
|
||||
{
|
||||
runningIDEInstances[candidateName] = ide;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
runningIDEInstances[candidateName] = ide;
|
||||
}
|
||||
}
|
||||
return runningIDEInstances;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a snapshot of the running object table (ROT).
|
||||
/// </summary>
|
||||
/// <returns>A hashtable mapping the name of the object in the ROT to the corresponding object</returns>
|
||||
[STAThread]
|
||||
public static Hashtable GetRunningObjectTable()
|
||||
{
|
||||
var result = new Hashtable();
|
||||
|
||||
var numFetched = 0;
|
||||
IRunningObjectTable runningObjectTable;
|
||||
IEnumMoniker monikerEnumerator;
|
||||
var monikers = new IMoniker[1];
|
||||
|
||||
GetRunningObjectTable(0, out runningObjectTable);
|
||||
runningObjectTable.EnumRunning(out monikerEnumerator);
|
||||
monikerEnumerator.Reset();
|
||||
|
||||
while (monikerEnumerator.Next(1, monikers, new IntPtr(numFetched)) == 0)
|
||||
{
|
||||
IBindCtx ctx;
|
||||
CreateBindCtx(0, out ctx);
|
||||
|
||||
string runningObjectName;
|
||||
monikers[0].GetDisplayName(ctx, null, out runningObjectName);
|
||||
|
||||
object runningObjectVal;
|
||||
runningObjectTable.GetObject(monikers[0], out runningObjectVal);
|
||||
|
||||
result[runningObjectName] = runningObjectVal;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static string GetSolutionVersion(string solutionFullFileName)
|
||||
{
|
||||
string version;
|
||||
StreamReader solutionStreamReader = null;
|
||||
|
||||
try
|
||||
{
|
||||
solutionStreamReader = new StreamReader(solutionFullFileName);
|
||||
string firstLine;
|
||||
do
|
||||
{
|
||||
firstLine = solutionStreamReader.ReadLine();
|
||||
} while (firstLine == "");
|
||||
|
||||
var format = firstLine.Substring(firstLine.LastIndexOf(" ")).Trim();
|
||||
|
||||
switch (format)
|
||||
{
|
||||
case "7.00":
|
||||
version = "VC70";
|
||||
break;
|
||||
|
||||
case "8.00":
|
||||
version = "VC71";
|
||||
break;
|
||||
|
||||
case "9.00":
|
||||
version = "VC80";
|
||||
break;
|
||||
|
||||
case "10.00":
|
||||
version = "VC90";
|
||||
break;
|
||||
|
||||
case "11.00":
|
||||
version = "VC100";
|
||||
break;
|
||||
|
||||
case "12.00":
|
||||
version = "VC140";
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ApplicationException("Unknown .sln version: " + format);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
solutionStreamReader?.Close();
|
||||
}
|
||||
|
||||
return version;
|
||||
}
|
||||
|
||||
public static string GetVSProgID(string version)
|
||||
{
|
||||
string progid = null;
|
||||
switch (version)
|
||||
{
|
||||
case "VC70":
|
||||
progid = "VisualStudio.DTE.7";
|
||||
break;
|
||||
|
||||
case "VC71":
|
||||
progid = "VisualStudio.DTE.7.1";
|
||||
break;
|
||||
|
||||
case "VC80":
|
||||
progid = "VisualStudio.DTE.8.0";
|
||||
break;
|
||||
|
||||
case "VC90":
|
||||
progid = "VisualStudio.DTE.9.0";
|
||||
break;
|
||||
|
||||
case "VC100":
|
||||
progid = "VisualStudio.DTE.10.0";
|
||||
break;
|
||||
|
||||
case "VC140":
|
||||
progid = "VisualStudio.DTE.14.0";
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ApplicationException("Can't handle VS version: " + version);
|
||||
}
|
||||
|
||||
return progid;
|
||||
}
|
||||
|
||||
public static bool SetProjectWorkingDir(object sol, string project_name, string working_dir)
|
||||
{
|
||||
var made_change = false;
|
||||
Console.WriteLine("Looking for project {0}...", project_name);
|
||||
try
|
||||
{
|
||||
var prjs = ViaCOM.GetProperty(sol, "Projects");
|
||||
var count = ViaCOM.GetProperty(prjs, "Count");
|
||||
for (var i = 1; i <= (int) count; ++i)
|
||||
{
|
||||
object[] prjItemArgs = {i};
|
||||
var prj = ViaCOM.CallMethod(prjs, "Item", prjItemArgs);
|
||||
var name = (string) ViaCOM.GetProperty(prj, "Name");
|
||||
if (0 == string.Compare(name, project_name, ignore_case))
|
||||
{
|
||||
Console.WriteLine("Found project: {0}", project_name);
|
||||
Console.WriteLine("Setting working directory");
|
||||
|
||||
var full_project_name = (string) ViaCOM.GetProperty(prj, "FullName");
|
||||
Console.WriteLine(full_project_name);
|
||||
|
||||
// *NOTE:Mani Thanks to incompatibilities between different versions of the
|
||||
// VCProjectEngine.dll assembly, we can't cast the objects recevied from the DTE to
|
||||
// the VCProjectEngine types from a different version than the one built
|
||||
// with. ie, VisualStudio.DTE.7.1 objects can't be converted in a project built
|
||||
// in VS 8.0. To avoid this problem, we can use the com object interfaces directly,
|
||||
// without the type casting. Its tedious code, but it seems to work.
|
||||
|
||||
// oCfgs should be assigned to a 'Project.Configurations' collection.
|
||||
var oCfgs = ViaCOM.GetProperty(ViaCOM.GetProperty(prj, "Object"), "Configurations");
|
||||
|
||||
// oCount will be assigned to the number of configs present in oCfgs.
|
||||
var oCount = ViaCOM.GetProperty(oCfgs, "Count");
|
||||
|
||||
for (var cfgIndex = 1; cfgIndex <= (int) oCount; ++cfgIndex)
|
||||
{
|
||||
object[] itemArgs = {cfgIndex};
|
||||
var oCfg = ViaCOM.CallMethod(oCfgs, "Item", itemArgs);
|
||||
var oDebugSettings = ViaCOM.GetProperty(oCfg, "DebugSettings");
|
||||
ViaCOM.SetProperty(oDebugSettings, "WorkingDirectory", working_dir);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
made_change = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.Message);
|
||||
Console.WriteLine("Failed to set working dir for project, {0}.", project_name);
|
||||
}
|
||||
|
||||
return made_change;
|
||||
}
|
||||
|
||||
public static bool SetStartupProject(string startup_project)
|
||||
{
|
||||
var result = false;
|
||||
try
|
||||
{
|
||||
// You need the 'unique name of the project to set StartupProjects.
|
||||
// find the project by generic name.
|
||||
Console.WriteLine("Trying to set \"{0}\" to the startup project", startup_project);
|
||||
var prjs = ViaCOM.GetProperty(solution, "Projects");
|
||||
var count = ViaCOM.GetProperty(prjs, "Count");
|
||||
for (var i = 1; i <= (int) count; ++i)
|
||||
{
|
||||
object[] itemArgs = {i};
|
||||
var prj = ViaCOM.CallMethod(prjs, "Item", itemArgs);
|
||||
var prjName = ViaCOM.GetProperty(prj, "Name");
|
||||
if (0 == string.Compare((string) prjName, startup_project, ignore_case))
|
||||
{
|
||||
var solBuild = ViaCOM.GetProperty(solution, "SolutionBuild");
|
||||
ViaCOM.SetProperty(solBuild, "StartupProjects", ViaCOM.GetProperty(prj, "UniqueName"));
|
||||
Console.WriteLine(" Success!");
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (result == false)
|
||||
{
|
||||
Console.WriteLine(" Could not find project \"{0}\" in the solution.", startup_project);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(" Failed to set the startup project!");
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool SetActiveConfig(string config)
|
||||
{
|
||||
var result = false;
|
||||
try
|
||||
{
|
||||
Console.WriteLine("Trying to set active config to \"{0}\"", config);
|
||||
var solBuild = ViaCOM.GetProperty(solution, "SolutionBuild");
|
||||
var solCfgs = ViaCOM.GetProperty(solBuild, "SolutionConfigurations");
|
||||
object[] itemArgs = {config};
|
||||
var solCfg = ViaCOM.CallMethod(solCfgs, "Item", itemArgs);
|
||||
ViaCOM.CallMethod(solCfg, "Activate", null);
|
||||
Console.WriteLine(" Success!");
|
||||
result = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(" Failed to set \"{0}\" as the active config.", config);
|
||||
Console.WriteLine(e.Message);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#region Interop imports
|
||||
|
||||
[DllImport("ole32.dll")]
|
||||
public static extern int GetRunningObjectTable(int reserved, out IRunningObjectTable prot);
|
||||
|
||||
[DllImport("ole32.dll")]
|
||||
public static extern int CreateBindCtx(int reserved, out IBindCtx ppbc);
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user