aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra
diff options
context:
space:
mode:
authorArmin Weatherwax2011-04-09 16:34:41 +0200
committerMcCabe Maxsted2011-04-19 17:50:31 -0700
commit435b1ab185f88ec9716e8abfca61e80b2b44fabd (patch)
treee70d0533a8efeb73fd71b02c2da648b6cedd5b38 /linden/indra
parentAdded missing NULL check for gAudiostream in chatbar_as_cmdline (diff)
downloadmeta-impy-435b1ab185f88ec9716e8abfca61e80b2b44fabd.zip
meta-impy-435b1ab185f88ec9716e8abfca61e80b2b44fabd.tar.gz
meta-impy-435b1ab185f88ec9716e8abfca61e80b2b44fabd.tar.bz2
meta-impy-435b1ab185f88ec9716e8abfca61e80b2b44fabd.tar.xz
add some basic cloud preferences in prefs > advanced >eye candy - please review perms
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/app_settings/cloud.xml5
-rw-r--r--linden/indra/newview/llappviewer.cpp5
-rw-r--r--linden/indra/newview/llprefsadvanced.cpp97
-rw-r--r--linden/indra/newview/llprefsadvanced.h12
-rw-r--r--linden/indra/newview/llvoavatar.cpp40
-rw-r--r--linden/indra/newview/llvoavatar.h7
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_particle_settings.xml46
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml9
8 files changed, 212 insertions, 9 deletions
diff --git a/linden/indra/newview/app_settings/cloud.xml b/linden/indra/newview/app_settings/cloud.xml
index e62bcf1..fdc420a 100644
--- a/linden/indra/newview/app_settings/cloud.xml
+++ b/linden/indra/newview/app_settings/cloud.xml
@@ -49,8 +49,9 @@
49 <key>ParticleMaxAge</key><!-- how long a single particle can live with 0 forever --> 49 <key>ParticleMaxAge</key><!-- how long a single particle can live with 0 forever -->
50 <real>4</real> 50 <real>4</real>
51 51
52 <key>PartImageID</key> <!--This setting is ignored for the cloud, used instead for now is the hardcoded --> 52 <key>PartImageID</key>
53 <string>0000000000000-0000-0000-000000000000</string><!-- skins/default/textures/cloud-particle.j2c --> 53 <!--if this is a NULL UUID the hardcoded skins/default/textures/cloud-particle.j2c is used-->
54 <string>0000000000000-0000-0000-000000000000</string>
54 55
55 <key>StartColor</key><!-- RGBA --> 56 <key>StartColor</key><!-- RGBA -->
56 <array> 57 <array>
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 0bb5759..1d62a1a 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -4203,6 +4203,11 @@ void LLAppViewer::disconnectViewer()
4203 4203
4204 saveNameCache(); 4204 saveNameCache();
4205 4205
4206 {
4207 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "cloud.xml");
4208 LLVOAvatar::saveCloud(filename, LLVOAvatar::sCloud);
4209 }
4210
4206 // close inventory interface, close all windows 4211 // close inventory interface, close all windows
4207 LLInventoryView::cleanup(); 4212 LLInventoryView::cleanup();
4208 // Don't cleanup menus on disconnect in order to avoid crashes -- MC 4213 // Don't cleanup menus on disconnect in order to avoid crashes -- MC
diff --git a/linden/indra/newview/llprefsadvanced.cpp b/linden/indra/newview/llprefsadvanced.cpp
index c3a9c0b..ad60694 100644
--- a/linden/indra/newview/llprefsadvanced.cpp
+++ b/linden/indra/newview/llprefsadvanced.cpp
@@ -42,8 +42,9 @@
42#include "lggautocorrectfloater.h" 42#include "lggautocorrectfloater.h"
43#include "llcombobox.h" 43#include "llcombobox.h"
44#include "llcolorswatch.h" 44#include "llcolorswatch.h"
45 45#include "llstartup.h"
46#include "lluictrlfactory.h" 46#include "lluictrlfactory.h"
47#include "lltexturectrl.h"
47 48
48#include "boost/algorithm/string.hpp" 49#include "boost/algorithm/string.hpp"
49 50
@@ -116,9 +117,12 @@ BOOL LLPrefsAdvanced::postBuild()
116 getChild<LLButton>("EmSpell_Remove")->setClickedCallback(onSpellRemove, this); 117 getChild<LLButton>("EmSpell_Remove")->setClickedCallback(onSpellRemove, this);
117 118
118 getChild<LLButton>("ac_button")->setClickedCallback(onAutoCorrectButton,this); 119 getChild<LLButton>("ac_button")->setClickedCallback(onAutoCorrectButton,this);
119
120 initHelpBtn("EmeraldHelp_SpellCheck", "EmeraldHelp_SpellCheck"); 120 initHelpBtn("EmeraldHelp_SpellCheck", "EmeraldHelp_SpellCheck");
121 121
122
123 getChild<LLButton>("save_cloud_this_account")->setClickedCallback(onSaveThisCloudButton,this);
124 getChild<LLButton>("save_cloud_any_account")->setClickedCallback(onSaveAnyoneCloudButton,this);
125
122 refresh(); 126 refresh();
123 127
124 return TRUE; 128 return TRUE;
@@ -144,6 +148,8 @@ void LLPrefsAdvanced::apply()
144 gSavedSettings.setU32("LightShareAllowed", 148 gSavedSettings.setU32("LightShareAllowed",
145 (U32)childGetValue("lightshare_combo").asInteger()); 149 (U32)childGetValue("lightshare_combo").asInteger());
146 150
151
152
147 // Need to force a rebake when ClothingLayerProtection toggled for it take effect -- MC 153 // Need to force a rebake when ClothingLayerProtection toggled for it take effect -- MC
148 if (gSavedSettings.getBOOL("ShowMyClientTagToOthers") != (BOOL)childGetValue("client_name_tag_broadcast_check")) 154 if (gSavedSettings.getBOOL("ShowMyClientTagToOthers") != (BOOL)childGetValue("client_name_tag_broadcast_check"))
149 { 155 {
@@ -208,11 +214,17 @@ void LLPrefsAdvanced::apply()
208 214
209 LLComboBox* crash_behavior_combobox = getChild<LLComboBox>("crash_behavior_combobox"); 215 LLComboBox* crash_behavior_combobox = getChild<LLComboBox>("crash_behavior_combobox");
210 gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior_combobox->getCurrentIndex()); 216 gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, crash_behavior_combobox->getCurrentIndex());
217
218 onSaveThisCloudButton(NULL);
211} 219}
212 220
213void LLPrefsAdvanced::cancel() 221void LLPrefsAdvanced::cancel()
214{ 222{
215 gSavedSettings.setColor4("ImprudenceTagColor", mClientTagColor); 223 gSavedSettings.setColor4("ImprudenceTagColor", mClientTagColor);
224// llwarns << "cancel" << llendl;
225// cool - "ok" is also cancel
226// LLVOAvatar::sCloud.mPartData.mStartColor = mCloudStartColor;
227// LLVOAvatar::sCloud.mPartData.mEndColor = mCloudEndColor;
216} 228}
217 229
218void LLPrefsAdvanced::refresh() 230void LLPrefsAdvanced::refresh()
@@ -272,6 +284,74 @@ void LLPrefsAdvanced::refresh()
272 } 284 }
273 comboBox->selectByValue(selected); 285 comboBox->selectByValue(selected);
274 } 286 }
287
288
289 bool is_logged_in = LLStartUp::isLoggedIn();
290 setParticleControls(is_logged_in);
291
292}
293
294void LLPrefsAdvanced::draw()
295{
296
297 bool is_logged_in = LLStartUp::isLoggedIn();
298 if(LLVOAvatar::sHasCloud && mWasLoggedIn != is_logged_in)
299 {
300
301
302 setParticleControls(is_logged_in);
303
304 mCloudStartColor = LLVOAvatar::sCloud.mPartData.mStartColor;
305 mCloudEndColor = LLVOAvatar::sCloud.mPartData.mEndColor;
306
307
308 getChild<LLColorSwatchCtrl>("part_start_color_swatch")->set(mCloudStartColor);
309 getChild<LLColorSwatchCtrl>("part_end_color_swatch")->set(mCloudEndColor);
310
311
312 mCloudTextureID = LLVOAvatar::sCloud.mPartImageID;
313 LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("part_texture_picker");
314 if (texture_ctrl)
315 {
316 texture_ctrl->setImageAssetID(mCloudTextureID);
317 texture_ctrl->setAllowNoTexture( true );
318
319 // Don't allow (no copy) or (no transfer) textures to be selected.
320 // With that we are less permissive than the original LL code of
321 // LLWaterParamManager, which allows picking (and saving) plain texture uuids
322 // without any permission check.
323 // If real absurdity is necessary we let the user save a windlight water setting
324 // for the texture uuid.
325
326 texture_ctrl->setImmediateFilterPermMask(PERM_NONE);//PERM_COPY | PERM_TRANSFER);
327 texture_ctrl->setNonImmediateFilterPermMask(PERM_NONE);
328 }
329
330
331 mWasLoggedIn = is_logged_in;
332 }
333
334 if(LLVOAvatar::sHasCloud && is_logged_in)
335 {
336
337 LLVOAvatar::sCloud.mPartData.mStartColor = childGetValue("part_start_color_swatch");
338 LLVOAvatar::sCloud.mPartData.mEndColor = childGetValue("part_end_color_swatch");
339 LLVOAvatar::sCloud.mPartImageID = childGetValue("part_texture_picker");
340 }
341
342 LLPanel::draw();
343}
344
345void LLPrefsAdvanced::setParticleControls(bool is_logged_in)
346{
347
348 childSetEnabled("save_cloud_this_account", is_logged_in);
349 childSetEnabled("save_cloud_any_account", is_logged_in);
350 childSetEnabled("part_start_color_swatch", is_logged_in);
351 childSetEnabled("part_end_color_swatch", is_logged_in);
352 childSetEnabled("part_texture_picker", is_logged_in );
353
354 childSetVisible("must_be_logged_in_textbox", !is_logged_in);
275} 355}
276 356
277//static 357//static
@@ -338,3 +418,16 @@ void LLPrefsAdvanced::onClickCommandLine(void* data)
338 FloaterCommandLine::getInstance()->open(); 418 FloaterCommandLine::getInstance()->open();
339 FloaterCommandLine::getInstance()->center(); 419 FloaterCommandLine::getInstance()->center();
340} 420}
421
422void LLPrefsAdvanced::onSaveThisCloudButton(void * data)
423{
424 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "cloud.xml");
425 LLVOAvatar::saveCloud(filename, LLVOAvatar::sCloud);
426}
427
428void LLPrefsAdvanced::onSaveAnyoneCloudButton(void * data)
429{
430 std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "cloud.xml");
431 LLVOAvatar::saveCloud(filename, LLVOAvatar::sCloud);
432}
433
diff --git a/linden/indra/newview/llprefsadvanced.h b/linden/indra/newview/llprefsadvanced.h
index 22236ce..87ddc59 100644
--- a/linden/indra/newview/llprefsadvanced.h
+++ b/linden/indra/newview/llprefsadvanced.h
@@ -33,6 +33,7 @@
33 33
34#include "llpanel.h" 34#include "llpanel.h"
35#include "llviewerinventory.h" 35#include "llviewerinventory.h"
36class LLColor4;
36 37
37class LLPrefsAdvanced : public LLPanel 38class LLPrefsAdvanced : public LLPanel
38{ 39{
@@ -45,7 +46,7 @@ public:
45 void apply(); 46 void apply();
46 void cancel(); 47 void cancel();
47 void refresh(); 48 void refresh();
48 49 void draw();
49private: 50private:
50 static LLPrefsAdvanced* sInstance; 51 static LLPrefsAdvanced* sInstance;
51 52
@@ -58,12 +59,21 @@ private:
58 static void onSpellEditCustom(void* data); 59 static void onSpellEditCustom(void* data);
59 static void onSpellBaseComboBoxCommit(LLUICtrl* ctrl, void* userdata); 60 static void onSpellBaseComboBoxCommit(LLUICtrl* ctrl, void* userdata);
60 static void onAutoCorrectButton(void * data); 61 static void onAutoCorrectButton(void * data);
62 static void onSaveThisCloudButton(void * data);
63 static void onSaveAnyoneCloudButton(void * data);
61 64
62 LLColor4 mClientTagColor; 65 LLColor4 mClientTagColor;
63 66
64protected: 67protected:
68 void setParticleControls(bool is_logged_in);
65 void initHelpBtn(const std::string& name, const std::string& xml_alert); 69 void initHelpBtn(const std::string& name, const std::string& xml_alert);
66 static void onClickHelp(void* data); 70 static void onClickHelp(void* data);
71
72private:
73 bool mWasLoggedIn;
74 LLColor4 mCloudStartColor;
75 LLColor4 mCloudEndColor;
76 LLUUID mCloudTextureID;
67}; 77};
68 78
69#endif // LLPREFSADVANCED_H 79#endif // LLPREFSADVANCED_H
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 41d1c88..d8b0994 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -1038,6 +1038,7 @@ LLVOAvatar::~LLVOAvatar()
1038 LL_DEBUGS("VOAvatar") << "Destructing Zombie from previous session." << LL_ENDL; 1038 LL_DEBUGS("VOAvatar") << "Destructing Zombie from previous session." << LL_ENDL;
1039 } 1039 }
1040 1040
1041
1041 mRoot.removeAllChildren(); 1042 mRoot.removeAllChildren();
1042 1043
1043 delete [] mSkeleton; 1044 delete [] mSkeleton;
@@ -1493,6 +1494,8 @@ void LLVOAvatar::cleanupClass()
1493} 1494}
1494 1495
1495LLPartSysData LLVOAvatar::sCloud; 1496LLPartSysData LLVOAvatar::sCloud;
1497bool LLVOAvatar::sHasCloud = false;
1498
1496void LLVOAvatar::initCloud() 1499void LLVOAvatar::initCloud()
1497{ 1500{
1498 // fancy particle cloud designed by Brent 1501 // fancy particle cloud designed by Brent
@@ -1506,12 +1509,43 @@ void LLVOAvatar::initCloud()
1506 filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "cloud.xml"); 1509 filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "cloud.xml");
1507 } 1510 }
1508 1511
1512 loadCloud(filename, sCloud);
1513 sHasCloud = true;
1514}
1515
1516
1517void LLVOAvatar::loadCloud(const std::string& filename, LLPartSysData& particles)
1518{
1509 LLSD cloud; 1519 LLSD cloud;
1510 llifstream in_file(filename); 1520 llifstream in_file(filename);
1511 LLSDSerialize::fromXMLDocument(cloud, in_file); 1521 LLSDSerialize::fromXMLDocument(cloud, in_file);
1512 sCloud.fromLLSD(cloud); 1522
1513 LLViewerImage* cloud_image = gImageList.getImageFromFile("cloud-particle.j2c"); 1523 particles.fromLLSD(cloud);
1514 sCloud.mPartImageID = cloud_image->getID(); 1524 if(particles.mPartImageID.isNull())
1525 {
1526 LLViewerImage* cloud_image = gImageList.getImageFromFile("cloud-particle.j2c");
1527 particles.mPartImageID = cloud_image->getID();
1528 }
1529}
1530
1531
1532void LLVOAvatar::saveCloud(const std::string& filename, LLPartSysData& particles)
1533{
1534 llofstream out(filename);
1535 if (!out.good())
1536 {
1537 llwarns << "Unable to open " << filename << " for output." << llendl;
1538 return;
1539 }
1540 LLSDSerialize::toXML(particles.asLLSD(), out);
1541 out.close();
1542
1543 // Imprudence: actually we could export any particle system with this,
1544 // though we don't have a clue about its creator (could be from a no mod script) :(
1545 // This is probably also not ok to export on open sim grids,
1546 // unless theiy either add a creator property to particle systems
1547 // or their terms of service make sure this sort of content is free and open.
1548 // Saving only the cloud for now, which only exists client side.
1515 1549
1516} 1550}
1517 1551
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index e585a6a..4d08bf0 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -97,7 +97,11 @@ public:
97 static void initClass(); // Initialize data that's only init'd once per class. 97 static void initClass(); // Initialize data that's only init'd once per class.
98 static void cleanupClass(); // Cleanup data that's only init'd once per class. 98 static void cleanupClass(); // Cleanup data that's only init'd once per class.
99 static BOOL parseSkeletonFile(const std::string& filename); 99 static BOOL parseSkeletonFile(const std::string& filename);
100
100 static void initCloud(); 101 static void initCloud();
102 static void loadCloud(const std::string& filename, LLPartSysData& particles);
103 static void saveCloud(const std::string& filename, LLPartSysData& particles);
104
101 virtual U32 processUpdateMessage(LLMessageSystem *mesgsys, 105 virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
102 void **user_data, 106 void **user_data,
103 U32 block_num, 107 U32 block_num,
@@ -587,7 +591,8 @@ public:
587 static F32 sLODFactor; // user-settable LOD factor 591 static F32 sLODFactor; // user-settable LOD factor
588 static BOOL sJointDebug; // output total number of joints being touched for each avatar 592 static BOOL sJointDebug; // output total number of joints being touched for each avatar
589 static BOOL sDebugAvatarRotation; 593 static BOOL sDebugAvatarRotation;
590 static LLPartSysData sCloud; 594 static LLPartSysData sCloud;
595 static bool sHasCloud;
591 596
592 static S32 sNumVisibleAvatars; // Number of instances of this class 597 static S32 sNumVisibleAvatars; // Number of instances of this class
593 598
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_particle_settings.xml b/linden/indra/newview/skins/default/xui/en-us/panel_particle_settings.xml
new file mode 100644
index 0000000..e5064dd
--- /dev/null
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_particle_settings.xml
@@ -0,0 +1,46 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="Particle Settings"
3left="1" mouse_opaque="true" name="ParticleSettings" width="418">
4
5 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
6 bottom_delta="-36" drop_shadow_visible="true" enabled="true" follows="left|top"
7 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
8 mouse_opaque="true" name="part_start_color_textbox" v_pad="0" width="394">
9 Start Color:
10 </text>
11 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom_delta="-44"
12 can_apply_immediately="false" color="1 1 1 1"
13 enabled="true" follows="left|top" height="55" label="" left_delta="53"
14 mouse_opaque="true" name="part_start_color_swatch"
15 tool_tip="Click to open Color Picker" width="45" />
16 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
17 bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
18 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
19 mouse_opaque="true" name="part_end_color_textbox" v_pad="0" width="394">
20 End Color:
21 </text>
22 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom_delta="-44"
23 can_apply_immediately="false" color="1 1 1 1"
24 enabled="true" follows="left|top" height="55" label="" left_delta="53"
25 mouse_opaque="true" name="part_end_color_swatch"
26 tool_tip="Click to open Color Picker" width="45" />
27 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
28 bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
29 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
30 mouse_opaque="true" name="part_texture_textbox" v_pad="0" width="394">
31 Texture:
32 </text>
33
34 <texture_picker border_color="0.45098 0.517647 0.607843 1" bottom_delta="-44"
35 can_apply_immediately="false" color="1 1 1 1"
36 enabled="true" follows="left|top" height="55" label="" left_delta="53"
37 mouse_opaque="true" name="part_texture_picker"
38 tool_tip="Click to open Texture Chooser" width="45" />
39 <button name="save_cloud_this_account" label="save for this account" halign="center"
40 tool_tip="save the Avatar particle cloud for this account" left="12"
41 bottom_delta="-50" width="180" height="20" font="SansSerifSmall" follows="left|top"/>
42 <button name="save_cloud_any_account" label="save for any account" halign="center"
43 tool_tip="save the Avatar particle cloud for any account" left="12"
44 bottom_delta="-24" width="180" height="20" font="SansSerifSmall" follows="left|top"/>
45</panel>
46
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
index e6d4059..2d2b810 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
@@ -186,6 +186,15 @@ To use spellcheck, right-click a misspelled word
186 tool_tip="Modify the AutoCorrect word list and settings" left="12" 186 tool_tip="Modify the AutoCorrect word list and settings" left="12"
187 bottom_delta="-50" width="180" height="20" font="SansSerifSmall" follows="left|top"/> 187 bottom_delta="-50" width="180" height="20" font="SansSerifSmall" follows="left|top"/>
188 </panel> 188 </panel>
189 <panel border="true" bottom="-580" follows="left|top|right|bottom" height="525" label="Eye Candy"
190 left="1" mouse_opaque="true" filename="panel_particle_settings.xml" name="AvatarCloud" width="418">
191 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
192 bottom_delta="-20" drop_shadow_visible="true" enabled="true" follows="left|top"
193 font="SansSerifSmall" h_pad="0" halign="left" height="10" left="10"
194 mouse_opaque="true" name="must_be_logged_in_textbox" v_pad="0" width="394">
195 You must be logged in to change this
196 </text>
197 </panel>
189 198
190 </tab_container> 199 </tab_container>
191</panel> 200</panel>