master
Arrehn 2011-06-12 22:52:14 -04:00
commit e280801e32
14 changed files with 348 additions and 198 deletions

View File

@ -3710,6 +3710,17 @@
<key>Value</key>
<integer>1</integer>
</map>
<key>EnableGestureSounds</key>
<map>
<key>Comment</key>
<string>Play sounds from gestures</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>EnableMouselook</key>
<map>
<key>Comment</key>

View File

@ -49,6 +49,7 @@
#include "llassetuploadresponders.h"
#include "llnearbychatbar.h"
#include "llnotificationmanager.h"
#include "llselectmgr.h"
#define phoenix_bridge_name "#LSL<->Client Bridge v0.12"
#define phoenix_folder_name "#Phoenix"
@ -192,11 +193,12 @@ void FSLSLBridge :: initBridge()
void FSLSLBridge :: startCreation()
{
//are we already in conversation with a bridge?
if (mpBridge != NULL)
{
return;
}
////are we already in conversation with a bridge?
////must have already received a URL call from a bridge.
//if (mpBridge != NULL)
//{
// return;
//}
//if bridge object doesn't exist - create and attach it, update script.
LLUUID catID = findFSCategory();
@ -326,7 +328,7 @@ FSLSLBridgeRezCallback :: ~FSLSLBridgeRezCallback()
void FSLSLBridgeRezCallback :: fire(const LLUUID& inv_item)
{
if ((FSLSLBridge::instance().getBridge() != NULL) || inv_item.isNull() || !FSLSLBridge::instance().bridgeCreating())
if ((FSLSLBridge::instance().getBridge() != NULL) || inv_item.isNull() || !FSLSLBridge::instance().getBridgeCreating())
return;
//detach from default and put on the right point
@ -350,7 +352,7 @@ FSLSLBridgeScriptCallback :: ~FSLSLBridgeScriptCallback()
void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
{
if (inv_item.isNull() || !FSLSLBridge::instance().bridgeCreating())
if (inv_item.isNull() || !FSLSLBridge::instance().getBridgeCreating())
return;
LLViewerInventoryItem* item = gInventory.getItem(inv_item);
@ -366,28 +368,25 @@ void FSLSLBridgeScriptCallback::fire(const LLUUID& inv_item)
//caps import
std::string url = gAgent.getRegion()->getCapability("UpdateScriptAgent");
std::string isMono = "lsl2"; //could also be "mono"
if (!url.empty())
if (!url.empty() && obj != NULL)
{
const std::string fName = prepUploadFile();
LLLiveLSLEditor::uploadAssetViaCapsStatic(url, fName,
obj->getID(), inv_item, isMono, true);
llinfos << "updating script ID for bridge" << llendl;
FSLSLBridge::instance().mScriptItemID = inv_item;
}
else
{
//can't complete bridge creation - detach and remove object, remove script
//try to clean up and go away. Fail.
LLVOAvatarSelf::detachAttachmentIntoInventory(FSLSLBridge::instance().getBridge()->getUUID());
LLViewerInventoryItem* bridgeItem = FSLSLBridge::instance().getBridge();
gInventory.purgeObject(bridgeItem->getUUID());
bridgeItem->removeFromServer();
FSLSLBridge::instance().cleanUpBridge();
//also clean up script remains
gInventory.purgeObject(item->getUUID());
item->removeFromServer();
gInventory.notifyObservers();
return;
}
llinfos << "updating script ID for bridge" << llendl;
FSLSLBridge::instance().mScriptItemID = inv_item;
}
std::string FSLSLBridgeScriptCallback::prepUploadFile()
@ -419,19 +418,45 @@ void FSLSLBridge :: checkBridgeScriptName(std::string fileName)
{
//this is our script upload
LLViewerObject* obj = gAgentAvatarp->getWornAttachment(mpBridge->getUUID());
registerVOInventoryListener(obj, NULL);
if (obj == NULL)
{
//something happened to our object. Try to fail gracefully.
cleanUpBridge();
return;
}
//registerVOInventoryListener(obj, NULL);
obj->saveScript(gInventory.getItem(mScriptItemID), TRUE, false);
requestVOInventory();
FSLSLBridgeCleanupTimer *objTimer = new FSLSLBridgeCleanupTimer((F32)1.0);
objTimer->startTimer();
//obj->doInventoryCallback();
//requestVOInventory();
}
}
void FSLSLBridge :: inventoryChanged(LLViewerObject* object, LLInventoryObject::object_list_t* inventory_objects, S32 serial_num, void* queue)
BOOL FSLSLBridgeCleanupTimer::tick()
{
FSLSLBridge::instance().finishBridge();
stopTimer();
return TRUE;
}
void FSLSLBridge :: cleanUpBridge()
{
//something unexpected went wrong. Try to clean up and not crash.
reportToNearbyChat("Bridge object not found. Can't proceed with creation, exiting.");
gInventory.purgeObject(mpBridge->getUUID());
gInventory.notifyObservers();
mpBridge = NULL;
mBridgeCreating = false;
}
void FSLSLBridge :: finishBridge()
{
//announce yourself
reportToNearbyChat("Bridge created.");
mBridgeCreating = false;
removeVOInventoryListener();
//removeVOInventoryListener();
cleanUpBridgeFolder();
}
//

View File

@ -33,18 +33,20 @@
#include "fslslbridgerequest.h"
#include "llviewerinventory.h"
#include "llinventoryobserver.h"
#include "lleventtimer.h"
//
//-TT Client LSL Bridge File
//
class FSLSLBridge : public LLSingleton<FSLSLBridge>, public LLHTTPClient::Responder, public LLVOInventoryListener
class FSLSLBridge : public LLSingleton<FSLSLBridge>, public LLHTTPClient::Responder //, public LLVOInventoryListener
{
static const U8 BRIDGE_POINT = 127;
friend class FSLSLBridgeScriptCallback;
friend class FSLSLBridgeRezCallback;
friend class FSLSLBridgeInventoryObserver;
friend class FSLSLBridgeCleanupTimer;
public:
FSLSLBridge();
@ -56,12 +58,17 @@ public:
void initBridge();
void recreateBridge();
void processAttach(LLViewerObject *object, const LLViewerJointAttachment *attachment);
bool bridgeCreating() {return mBridgeCreating; };
void startCreation();
bool getBridgeCreating() {return mBridgeCreating; };
void setBridgeCreating(bool status) { mBridgeCreating = status; };
void setBridge(LLViewerInventoryItem* item) { mpBridge = item; };
LLViewerInventoryItem* getBridge() { return mpBridge; };
void checkBridgeScriptName(std::string fileName);
void startCreation();
std::string currentFullName() { return mCurrentFullName; }
void finishBridge();
protected:
@ -89,6 +96,7 @@ protected:
void cleanUpBridgeFolder();
void setupBridge(LLViewerObject *object);
void initCreationStep();
void cleanUpBridge();
};
@ -124,4 +132,14 @@ protected:
};
class FSLSLBridgeCleanupTimer : public LLEventTimer
{
public:
FSLSLBridgeCleanupTimer(F32 period) : LLEventTimer(period) {}
BOOL tick();
void startTimer() { mEventTimer.start(); }
void stopTimer() { mEventTimer.stop(); }
};
#endif // FS_LSLBRIDGE_H

View File

@ -322,6 +322,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.VoiceSetKey", boost::bind(&LLFloaterPreference::onClickSetKey, this));
mCommitCallbackRegistrar.add("Pref.EditMediaLists", boost::bind(&LLFloaterPreference::onClickSetKey, this));
mCommitCallbackRegistrar.add("Pref.VoiceSetMiddleMouse", boost::bind(&LLFloaterPreference::onClickSetMiddleMouse, this));
mCommitCallbackRegistrar.add("Pref.SetSounds", boost::bind(&LLFloaterPreference::onClickSetSounds, this));
// mCommitCallbackRegistrar.add("Pref.ClickSkipDialogs", boost::bind(&LLFloaterPreference::onClickSkipDialogs, this));
// mCommitCallbackRegistrar.add("Pref.ClickResetDialogs", boost::bind(&LLFloaterPreference::onClickResetDialogs, this));
mCommitCallbackRegistrar.add("Pref.ClickEnablePopup", boost::bind(&LLFloaterPreference::onClickEnablePopup, this));
@ -1364,6 +1365,14 @@ void LLFloaterPreference::onClickSetMiddleMouse()
p2t_line_editor->setValue(advanced_preferences->getString("middle_mouse"));
}
}
void LLFloaterPreference::onClickSetSounds()
{
// Disable Enable gesture sounds checkbox if the master sound is disabled
// or if sound effects are disabled.
getChild<LLCheckBoxCtrl>("gesture_audio_play_btn")->setEnabled(!gSavedSettings.getBOOL("MuteSounds"));
}
/*
void LLFloaterPreference::onClickSkipDialogs()
{

View File

@ -134,6 +134,7 @@ public:
void onClickSetKey();
void setKey(KEY key);
void onClickSetMiddleMouse();
void onClickSetSounds();
// void onClickSkipDialogs();
// void onClickResetDialogs();
void onClickEnablePopup();

View File

@ -28,6 +28,8 @@
#include "lltranslate.h"
#include <curl/curl.h>
#include "llbufferstream.h"
#include "llui.h"
#include "llversioninfo.h"
@ -76,7 +78,9 @@ void LLTranslate::translateMessage(LLHTTPClient::ResponderPtr &result, const std
//static
void LLTranslate::getTranslateUrl(std::string &translate_url, const std::string &from_lang, const std::string &to_lang, const std::string &mesg)
{
std::string escaped_mesg = curl_escape(mesg.c_str(), mesg.size());
char * curl_str = curl_escape(mesg.c_str(), mesg.size());
std::string const escaped_mesg(curl_str);
curl_free(curl_str);
translate_url = m_GoogleURL
+ escaped_mesg + m_GoogleLangSpec

View File

@ -4808,6 +4808,9 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
if (pPeoplePanel)
pPeoplePanel->requestRadarChannelAlertSync();
}
// Don't play sounds from gestures if they are not enabled.
if (!gSavedSettings.getBOOL("EnableGestureSounds")) return;
gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
}

View File

@ -14,21 +14,23 @@
<string
name="no_group_text"
value="Keine" />
<panel name="second_life_panel">
<text name="Name:" value="Name:" />
<text_editor name="complete_name" value="(laden)" />
<text name="Key:" value="UUID:"/>
<text_editor name="user_key" value="(laden)"/>
<button name="copy_uri" label="URI kopieren"/>
<text name="Name:" value="Name:"/>
<text_editor name="complete_name" value="(laden)"/>
<button name="copy_to_clipboard" tool_tip="In Zwischenablage kopieren"/>
<text name="status" value="Online"/>
<text name="Key:" value="UUID:" />
<text_editor name="user_key" value="(laden)" />
<text name="label" value="Geboren am:" />
<text name="label2" value="Konto:" />
<text name="partner_label" value="Partner:" />
<text name="About:" value="Info:" left="9" />
<view_border left_pad="3" name="info_border" />
<text name="Groups:" value="Gruppen:" left="9"/>
<group_list left_pad="3" name="group_list" />
<text name="label" value="Geboren am:"/>
<text name="label2" value="Konto:"/>
<text name="partner_label" value="Partner:"/>
<text left="9" name="Groups:" value="Gruppen:"/>
<group_list left_pad="3" name="group_list"/>
<text left="9" name="About:" value="Info:"/>
<view_border left_pad="3" name="info_border"/>
<layout_stack>
<layout_panel name="left_buttonstack">

View File

@ -111,8 +111,8 @@
function="Pref.setControlFalse"
parameter="MuteAmbient" />
</slider>
<button
control_name="MuteAmbient"
<button
control_name="MuteAmbient"
disabled_control="MuteAudio"
follows="top|left"
height="16"
@ -145,7 +145,7 @@
function="Pref.setControlFalse"
parameter="MuteSounds" />
</slider>
<button
<button
control_name="MuteSounds"
disabled_control="MuteAudio"
follows="top|left"
@ -157,7 +157,10 @@
left_pad="5"
name="mute_audio"
tab_stop="false"
width="16" />
width="16">
<button.commit_callback
function="Pref.SetSounds"/>
</button>
<slider
control_name="AudioLevelMusic"
disabled_control="MuteAudio"
@ -298,7 +301,18 @@
left_pad="5"
name="enable_voice_check"
width="110"/>
<!-- -->
<check_box
name="gesture_audio_play_btn"
control_name="EnableGestureSounds"
disabled_control="MuteAudio"
value="true"
follows="left|bottom|right"
height="15"
tool_tip="Check this to hear sounds from gestures"
label="Play sounds from gestures"
top_pad="1"
bottom_delta="10"
left="325"/>
<check_box
name="media_auto_play_btn"
control_name="ParcelMediaAutoPlayEnable"
@ -309,6 +323,7 @@
tool_tip="Check this to automatically start media when you log in or change regions."
label="Allow Media to auto-play when entering a region"
top_pad="1"
bottom_delta="30"
left="25"/>
<check_box
name="media_allowscript_btn"
@ -327,7 +342,7 @@
value="true"
follows="left|bottom|right"
height="15"
bottom_delta="-0"
bottom_delta="0"
left_delta="245"
tool_tip="Check this to enable the filter that allows you to choose whether to play media from a specific host"
label="Enable media filter (increased security)"
@ -366,7 +381,7 @@
left="25"
name="voice_chat_settings"
width="180"
top_pad="40">
top_pad="35">
Voice Chat Settings
</text>
<text

View File

@ -74,7 +74,7 @@ KC: I used view_border's around text_editor's due to text render issues with bor
<view_border
left_pad="4"
height="16"
width="310"
right="-86"
bevel_style="in"
follows="left|top|right"
name="info_border" />
@ -82,7 +82,7 @@ KC: I used view_border's around text_editor's due to text render issues with bor
left_delta="3"
bottom_delta="2"
height="16"
width="310"
right="-86"
h_pad="0"
v_pad="0"
allow_scroll="false"
@ -98,7 +98,7 @@ KC: I used view_border's around text_editor's due to text render issues with bor
layout="topleft"
follows="top|right"
image_overlay="Copy"
top_delta="-3"
top_delta="-5"
left_pad="4"
height="21"
width="21"
@ -107,15 +107,15 @@ KC: I used view_border's around text_editor's due to text render issues with bor
<text
follows="top|right"
halign="right"
halign="center"
height="13"
top_pad="-17"
top_pad="-15"
left_pad="2"
right="-6"
layout="topleft"
name="status"
text_color="LtGray_50"
value="Online"
width="70" />
value="Online" />
<text
top_pad="2"
@ -130,7 +130,7 @@ KC: I used view_border's around text_editor's due to text render issues with bor
<view_border
left_pad="4"
height="16"
right="-6"
right="-86"
bevel_style="in"
follows="left|top|right"
name="info_border" />
@ -138,7 +138,7 @@ KC: I used view_border's around text_editor's due to text render issues with bor
left_delta="3"
bottom_delta="2"
height="16"
right="-6"
right="-86"
h_pad="0"
v_pad="0"
allow_scroll="false"
@ -149,10 +149,19 @@ KC: I used view_border's around text_editor's due to text render issues with bor
name="user_key"
value="(loading...)" />
<button
name="copy_uri"
left_pad="4"
right="-6"
bottom_delta="2"
height="20"
label="Copy URI"
enabled="false"
follows="top|right" />
<texture_picker
left="6"
top_pad="5"
top_pad="3"
height="180"
width="220"
allow_no_texture="true"
@ -256,6 +265,29 @@ KC: I used view_border's around text_editor's due to text render issues with bor
<!--<button follows="left|top" left="15" top="75" height="20" halign="center"
label="&lt; &lt;" label_selected="&gt; &gt;" name="bigimg" tool_tip="Open Full Size." width="40" />-->
<text
left="6"
top_pad="8"
follows="left|top"
halign="right"
height="16"
name="Groups:"
width="45"
value="Groups:" />
<group_list
left_pad="8"
top_delta="0"
height="80"
right="-6"
border_visible="true"
for_agent="false"
follows="left|top|right"
name="group_list" />
<!--<button follows="left|top" left="15" top="240" height="20" halign="center"
label="+" label_selected="+" name="PhoenixGroupInvite_Button" tool_tip="Invite to Group." width="40" />-->
<text
left="6"
top_pad="8"
@ -288,30 +320,6 @@ KC: I used view_border's around text_editor's due to text render issues with bor
word_wrap="true"
parse_urls="true" />
<text
left="6"
top_pad="8"
follows="left|bottom"
halign="right"
height="16"
name="Groups:"
width="45"
value="Groups:" />
<group_list
left_pad="8"
top_delta="0"
height="80"
right="-6"
border_visible="true"
for_agent="false"
follows="left|bottom|right"
name="group_list" />
<!--<button follows="left|top" left="15" top="240" height="20" halign="center"
label="+" label_selected="+" name="PhoenixGroupInvite_Button" tool_tip="Invite to Group." width="40" />-->
<layout_stack
top_pad="8"
left="6"

View File

@ -14,23 +14,21 @@
<string
name="no_group_text"
value="Keine" />
<panel name="second_life_panel">
<text name="Key:" value="UUID:"/>
<text_editor name="user_key" value="(laden)"/>
<button name="copy_uri" label="URI kopieren"/>
<text name="Name:" value="Name:"/>
<text_editor name="complete_name" value="(laden)"/>
<panel name="second_life_panel">
<text name="Name:" value="Name:" />
<text_editor name="complete_name" value="(laden)" />
<button name="copy_to_clipboard" tool_tip="In Zwischenablage kopieren"/>
<text name="status" value="Online"/>
<text name="label" value="Geboren am:"/>
<text name="label2" value="Konto:"/>
<text name="partner_label" value="Partner:"/>
<text left="9" name="Groups:" value="Gruppen:"/>
<group_list left_pad="3" name="group_list"/>
<text left="9" name="About:" value="Info:"/>
<view_border left_pad="3" name="info_border"/>
<text name="Key:" value="UUID:" />
<text_editor name="user_key" value="(laden)" />
<text name="label" value="Geboren am:" />
<text name="label2" value="Konto:" />
<text name="partner_label" value="Partner:" />
<text name="About:" value="Info:" left="9" />
<view_border left_pad="3" name="info_border" />
<text name="Groups:" value="Gruppen:" left="9"/>
<group_list left_pad="3" name="group_list" />
<layout_stack>
<layout_panel name="left_buttonstack">

View File

@ -62,7 +62,7 @@ KC: I used view_border's around text_editor's due to text render issues with bor
-->
<text
top="8"
top_pad="8"
follows="left|top"
halign="right"
height="16"
@ -265,29 +265,6 @@ KC: I used view_border's around text_editor's due to text render issues with bor
<!--<button follows="left|top" left="15" top="75" height="20" halign="center"
label="&lt; &lt;" label_selected="&gt; &gt;" name="bigimg" tool_tip="Open Full Size." width="40" />-->
<text
left="6"
top_pad="8"
follows="left|top"
halign="right"
height="16"
name="Groups:"
width="45"
value="Groups:" />
<group_list
left_pad="8"
top_delta="0"
height="80"
right="-6"
border_visible="true"
for_agent="false"
follows="left|top|right"
name="group_list" />
<!--<button follows="left|top" left="15" top="240" height="20" halign="center"
label="+" label_selected="+" name="PhoenixGroupInvite_Button" tool_tip="Invite to Group." width="40" />-->
<text
left="6"
top_pad="8"
@ -320,6 +297,30 @@ KC: I used view_border's around text_editor's due to text render issues with bor
word_wrap="true"
parse_urls="true" />
<text
left="6"
top_pad="8"
follows="left|bottom"
halign="right"
height="16"
name="Groups:"
width="45"
value="Groups:" />
<group_list
left_pad="8"
top_delta="0"
height="80"
right="-6"
border_visible="true"
for_agent="false"
follows="left|bottom|right"
name="group_list" />
<!--<button follows="left|top" left="15" top="240" height="20" halign="center"
label="+" label_selected="+" name="PhoenixGroupInvite_Button" tool_tip="Invite to Group." width="40" />-->
<layout_stack
top_pad="8"
left="6"

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<panel name="panel_profile">
<string
name="payment_update_link_url">
http://www.secondlife.com/account/billing.php?lang=de
</string>
<string
name="partner_edit_link_url">
http://www.secondlife.com/account/partners.php?lang=de
</string>
<string
name="no_partner_text"
value="Kein Partner" />
<string
name="no_group_text"
value="Keine" />
<panel name="second_life_panel">
<text name="Name:" value="Name:" />
<text_editor name="complete_name" value="(laden)" />
<button name="copy_to_clipboard" tool_tip="In Zwischenablage kopieren"/>
<text name="status" value="Online"/>
<text name="Key:" value="UUID:" />
<text_editor name="user_key" value="(laden)" />
<text name="label" value="Geboren am:" />
<text name="label2" value="Konto:" />
<text name="partner_label" value="Partner:" />
<text name="About:" value="Info:" left="9" />
<view_border left_pad="3" name="info_border" />
<text name="Groups:" value="Gruppen:" left="9"/>
<group_list left_pad="3" name="group_list" />
<layout_stack>
<layout_panel name="left_buttonstack">
<button label="Zeige auf Karte" label_selected="Zeige auf Karte" name="show_on_map_btn" tool_tip="Zeige Position des Einwohners auf der Karte."/>
<button label="Zahlen" label_selected="Zahlen" name="pay" tool_tip="Zahle Geld an diesen Einwohner."/>
</layout_panel>
<layout_panel name="middle_buttonstack">
<button label="Teleport anbieten" label_selected="Teleport anbieten" name="teleport" tool_tip="Diesem Einwohner einen Teleport anbieten."/>
<button label="Instant Message" label_selected="Instant Message" name="im" tool_tip="Instant-Message-Session mit diesem Einwohner beginnen."/>
</layout_panel>
<layout_panel name="right_buttonstack">
<button label="Freund hinzufügen" label_selected="Freund hinzufügen" name="add_friend" tool_tip="Diesem Einwohner deine Freundschaft anbieten."/>
<button label="Blockieren" name="block" tool_tip="Diesen Einwohner blockieren."/>
<button label="Freigeben" name="unblock" tool_tip="Diesen Einwohner nicht mehr blockieren."/>
</layout_panel>
</layout_stack>
</panel>
</panel>

View File

@ -62,7 +62,63 @@ KC: I used view_border's around text_editor's due to text render issues with bor
-->
<text
top="8"
top_pad="8"
follows="left|top"
halign="right"
height="16"
left="6"
name="Name:"
width="40"
value="Name:" />
<view_border
left_pad="4"
height="16"
right="-86"
bevel_style="in"
follows="left|top|right"
name="info_border" />
<text_editor
left_delta="3"
bottom_delta="2"
height="16"
right="-86"
h_pad="0"
v_pad="0"
allow_scroll="false"
bg_visible="false"
enabled="false"
follows="left|top|right"
max_length="254"
name="complete_name"
value="(loading...)" />
<button
name="copy_to_clipboard"
layout="topleft"
follows="top|right"
image_overlay="Copy"
top_delta="-5"
left_pad="4"
height="21"
width="21"
tab_stop="false"
tool_tip="Copy to Clipboard"/>
<text
follows="top|right"
halign="center"
height="13"
top_pad="-15"
left_pad="2"
right="-6"
layout="topleft"
name="status"
text_color="LtGray_50"
value="Online" />
<text
top_pad="2"
follows="left|top"
halign="right"
height="16"
@ -97,70 +153,15 @@ KC: I used view_border's around text_editor's due to text render issues with bor
name="copy_uri"
left_pad="4"
right="-6"
bottom_delta="2"
height="20"
label="Copy URI"
enabled="false"
follows="top|right" />
<text
top_pad="2"
follows="left|top"
halign="right"
height="16"
left="6"
name="Name:"
width="40"
value="Name:" />
<view_border
left_pad="4"
height="16"
width="310"
bevel_style="in"
follows="left|top|right"
name="info_border" />
<text_editor
left_delta="3"
bottom_delta="2"
height="16"
width="310"
h_pad="0"
v_pad="0"
allow_scroll="false"
bg_visible="false"
enabled="false"
follows="left|top|right"
max_length="254"
name="complete_name"
value="(loading...)" />
<button
name="copy_to_clipboard"
layout="topleft"
follows="top|right"
image_overlay="Copy"
top_delta="-3"
left_pad="4"
height="21"
width="21"
tab_stop="false"
tool_tip="Copy to Clipboard"/>
<text
follows="top|right"
halign="right"
height="13"
top_pad="-17"
right="-6"
layout="topleft"
name="status"
text_color="LtGray_50"
value="Online"
width="70" />
<texture_picker
left="6"
top_pad="5"
top_pad="3"
height="180"
width="220"
allow_no_texture="true"
@ -264,29 +265,6 @@ KC: I used view_border's around text_editor's due to text render issues with bor
<!--<button follows="left|top" left="15" top="75" height="20" halign="center"
label="&lt; &lt;" label_selected="&gt; &gt;" name="bigimg" tool_tip="Open Full Size." width="40" />-->
<text
left="6"
top_pad="8"
follows="left|top"
halign="right"
height="16"
name="Groups:"
width="45"
value="Groups:" />
<group_list
left_pad="8"
top_delta="0"
height="80"
right="-6"
border_visible="true"
for_agent="false"
follows="left|top|right"
name="group_list" />
<!--<button follows="left|top" left="15" top="240" height="20" halign="center"
label="+" label_selected="+" name="PhoenixGroupInvite_Button" tool_tip="Invite to Group." width="40" />-->
<text
left="6"
top_pad="8"
@ -319,6 +297,30 @@ KC: I used view_border's around text_editor's due to text render issues with bor
word_wrap="true"
parse_urls="true" />
<text
left="6"
top_pad="8"
follows="left|bottom"
halign="right"
height="16"
name="Groups:"
width="45"
value="Groups:" />
<group_list
left_pad="8"
top_delta="0"
height="80"
right="-6"
border_visible="true"
for_agent="false"
follows="left|bottom|right"
name="group_list" />
<!--<button follows="left|top" left="15" top="240" height="20" halign="center"
label="+" label_selected="+" name="PhoenixGroupInvite_Button" tool_tip="Invite to Group." width="40" />-->
<layout_stack
top_pad="8"
left="6"