Added checkboxes to groups list for visibility, groupchat, and notices...
-Required addition of an extra texture overlay for list headers, as normal button overlay is used for sort arrows. -Added padding to italic text in scroll list, as the text clipped outside of the element. -Groups list is now sortable and has header visible. -'none' entry always be first in the list, regardless of sort order. -LLGroupMgrGroupData::mListInProfile removed. Was unreferenced and always false. LLGroupMgrGroupData doesn't handle show/chat/notify properties
This commit is contained in:
@@ -129,7 +129,9 @@ public:
|
|||||||
void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
|
void setHAlign( LLFontGL::HAlign align ) { mHAlign = align; }
|
||||||
LLFontGL::HAlign getHAlign() const { return mHAlign; }
|
LLFontGL::HAlign getHAlign() const { return mHAlign; }
|
||||||
void setLeftHPad( S32 pad ) { mLeftHPad = pad; }
|
void setLeftHPad( S32 pad ) { mLeftHPad = pad; }
|
||||||
|
S32 getLeftHPad() const { return mLeftHPad; }
|
||||||
void setRightHPad( S32 pad ) { mRightHPad = pad; }
|
void setRightHPad( S32 pad ) { mRightHPad = pad; }
|
||||||
|
S32 getRightHPad() const { return mRightHPad; }
|
||||||
|
|
||||||
const std::string getLabelUnselected() const { return wstring_to_utf8str(mUnselectedLabel); }
|
const std::string getLabelUnselected() const { return wstring_to_utf8str(mUnselectedLabel); }
|
||||||
const std::string getLabelSelected() const { return wstring_to_utf8str(mSelectedLabel); }
|
const std::string getLabelSelected() const { return wstring_to_utf8str(mSelectedLabel); }
|
||||||
|
|||||||
@@ -430,7 +430,7 @@ void LLScrollListText::draw(const LLColor4& color, const LLColor4& highlight_col
|
|||||||
switch(mFontAlignment)
|
switch(mFontAlignment)
|
||||||
{
|
{
|
||||||
case LLFontGL::LEFT:
|
case LLFontGL::LEFT:
|
||||||
start_x = 0.f;
|
start_x = (mFontStyle & LLFontGL::ITALIC) ? 2.f : 0.f; //Italic text seems need a little padding.
|
||||||
break;
|
break;
|
||||||
case LLFontGL::RIGHT:
|
case LLFontGL::RIGHT:
|
||||||
start_x = (F32)getWidth();
|
start_x = (F32)getWidth();
|
||||||
@@ -1301,6 +1301,7 @@ void LLScrollListCtrl::swapWithPrevious(S32 index)
|
|||||||
if (index <= 0)
|
if (index <= 0)
|
||||||
{
|
{
|
||||||
// At beginning of list, don't do anything
|
// At beginning of list, don't do anything
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLScrollListItem *cur_itemp = mItemList[index];
|
LLScrollListItem *cur_itemp = mItemList[index];
|
||||||
@@ -1308,6 +1309,18 @@ void LLScrollListCtrl::swapWithPrevious(S32 index)
|
|||||||
mItemList[index - 1] = cur_itemp;
|
mItemList[index - 1] = cur_itemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLScrollListCtrl::moveToFront(S32 index)
|
||||||
|
{
|
||||||
|
if(index == 0 || index >= (S32)mItemList.size())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LLScrollListCtrl::item_list::iterator it = mItemList.begin();
|
||||||
|
std::advance(it,index);
|
||||||
|
mItemList.push_front(*it);
|
||||||
|
mItemList.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
void LLScrollListCtrl::deleteSingleItem(S32 target_index)
|
void LLScrollListCtrl::deleteSingleItem(S32 target_index)
|
||||||
{
|
{
|
||||||
@@ -3002,6 +3015,9 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac
|
|||||||
std::string imagename;
|
std::string imagename;
|
||||||
child->getAttributeString("image", imagename);
|
child->getAttributeString("image", imagename);
|
||||||
|
|
||||||
|
std::string imageoverlay;
|
||||||
|
child->getAttributeString("image_overlay", imageoverlay);
|
||||||
|
|
||||||
BOOL columndynamicwidth = FALSE;
|
BOOL columndynamicwidth = FALSE;
|
||||||
child->getAttributeBOOL("dynamicwidth", columndynamicwidth);
|
child->getAttributeBOOL("dynamicwidth", columndynamicwidth);
|
||||||
|
|
||||||
@@ -3021,6 +3037,7 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac
|
|||||||
columns[index]["sort"] = sortname;
|
columns[index]["sort"] = sortname;
|
||||||
columns[index]["sort_ascending"] = sort_ascending;
|
columns[index]["sort_ascending"] = sort_ascending;
|
||||||
columns[index]["image"] = imagename;
|
columns[index]["image"] = imagename;
|
||||||
|
columns[index]["image_overlay"] = imageoverlay;
|
||||||
columns[index]["label"] = labelname;
|
columns[index]["label"] = labelname;
|
||||||
columns[index]["width"] = columnwidth;
|
columns[index]["width"] = columnwidth;
|
||||||
columns[index]["relwidth"] = columnrelwidth;
|
columns[index]["relwidth"] = columnrelwidth;
|
||||||
@@ -3229,6 +3246,10 @@ void LLScrollListCtrl::addColumn(const LLSD& column, EAddPosition pos)
|
|||||||
//new_column->mHeader->setScaleImage(false);
|
//new_column->mHeader->setScaleImage(false);
|
||||||
new_column->mHeader->setImage(column["image"].asString());
|
new_column->mHeader->setImage(column["image"].asString());
|
||||||
}
|
}
|
||||||
|
else if(column["image_overlay"].asString() != "")
|
||||||
|
{
|
||||||
|
new_column->mHeader->setImageOverlay(column["image_overlay"].asString());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_column->mHeader->setLabel(new_column->mLabel);
|
new_column->mHeader->setLabel(new_column->mLabel);
|
||||||
@@ -3683,6 +3704,9 @@ LLColumnHeader::LLColumnHeader(const std::string& label, const LLRect &rect, LLS
|
|||||||
addChild(mResizeBar);
|
addChild(mResizeBar);
|
||||||
|
|
||||||
mResizeBar->setEnabled(FALSE);
|
mResizeBar->setEnabled(FALSE);
|
||||||
|
|
||||||
|
mImageOverlayAlignment = LLFontGL::HCENTER;
|
||||||
|
mImageOverlayColor = LLColor4::white;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLColumnHeader::~LLColumnHeader()
|
LLColumnHeader::~LLColumnHeader()
|
||||||
@@ -3706,6 +3730,95 @@ void LLColumnHeader::draw()
|
|||||||
// Draw children
|
// Draw children
|
||||||
LLComboBox::draw();
|
LLComboBox::draw();
|
||||||
|
|
||||||
|
if (mImageOverlay.notNull()) //Ugly dupe code from llbutton...
|
||||||
|
{
|
||||||
|
BOOL pressed_by_keyboard = FALSE;
|
||||||
|
if (mButton->hasFocus())
|
||||||
|
{
|
||||||
|
pressed_by_keyboard = gKeyboard->getKeyDown(' ') || (mButton->getCommitOnReturn() && gKeyboard->getKeyDown(KEY_RETURN));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unselected image assignments
|
||||||
|
S32 local_mouse_x;
|
||||||
|
S32 local_mouse_y;
|
||||||
|
LLUI::getCursorPositionLocal(mButton, &local_mouse_x, &local_mouse_y);
|
||||||
|
|
||||||
|
BOOL pressed = pressed_by_keyboard
|
||||||
|
|| (mButton->hasMouseCapture() && mButton->pointInView(local_mouse_x, local_mouse_y))
|
||||||
|
|| mButton->getToggleState();
|
||||||
|
|
||||||
|
// Now draw special overlay..
|
||||||
|
// let overlay image and text play well together
|
||||||
|
S32 button_width = mButton->getRect().getWidth();
|
||||||
|
S32 button_height = mButton->getRect().getHeight();
|
||||||
|
S32 text_left = mButton->getLeftHPad();
|
||||||
|
S32 text_right = button_width - mButton->getRightHPad();
|
||||||
|
S32 text_width = text_right - text_left;
|
||||||
|
|
||||||
|
// draw overlay image
|
||||||
|
|
||||||
|
// get max width and height (discard level 0)
|
||||||
|
S32 overlay_width = mImageOverlay->getWidth();
|
||||||
|
S32 overlay_height = mImageOverlay->getHeight();
|
||||||
|
|
||||||
|
F32 scale_factor = llmin((F32)button_width / (F32)overlay_width, (F32)button_height / (F32)overlay_height, 1.f);
|
||||||
|
overlay_width = llround((F32)overlay_width * scale_factor);
|
||||||
|
overlay_height = llround((F32)overlay_height * scale_factor);
|
||||||
|
|
||||||
|
S32 center_x = mButton->getLocalRect().getCenterX();
|
||||||
|
S32 center_y = mButton->getLocalRect().getCenterY();
|
||||||
|
|
||||||
|
//FUGLY HACK FOR "DEPRESSED" BUTTONS
|
||||||
|
if (pressed)
|
||||||
|
{
|
||||||
|
center_y--;
|
||||||
|
center_x++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fade out overlay images on disabled buttons
|
||||||
|
LLColor4 overlay_color = mImageOverlayColor;
|
||||||
|
if (!mButton->getEnabled())
|
||||||
|
{
|
||||||
|
overlay_color.mV[VALPHA] = 0.5f;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(mImageOverlayAlignment)
|
||||||
|
{
|
||||||
|
case LLFontGL::LEFT:
|
||||||
|
text_left += overlay_width + 1;
|
||||||
|
text_width -= overlay_width + 1;
|
||||||
|
mImageOverlay->draw(
|
||||||
|
text_left,
|
||||||
|
center_y - (overlay_height / 2),
|
||||||
|
overlay_width,
|
||||||
|
overlay_height,
|
||||||
|
overlay_color);
|
||||||
|
break;
|
||||||
|
case LLFontGL::HCENTER:
|
||||||
|
mImageOverlay->draw(
|
||||||
|
center_x - (overlay_width / 2),
|
||||||
|
center_y - (overlay_height / 2),
|
||||||
|
overlay_width,
|
||||||
|
overlay_height,
|
||||||
|
overlay_color);
|
||||||
|
break;
|
||||||
|
case LLFontGL::RIGHT:
|
||||||
|
text_right -= overlay_width + 1;
|
||||||
|
text_width -= overlay_width + 1;
|
||||||
|
mImageOverlay->draw(
|
||||||
|
text_right - overlay_width,
|
||||||
|
center_y - (overlay_height / 2),
|
||||||
|
overlay_width,
|
||||||
|
overlay_height,
|
||||||
|
overlay_color);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// draw nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (mList->getVisible())
|
if (mList->getVisible())
|
||||||
{
|
{
|
||||||
// sync sort order with list selection every frame
|
// sync sort order with list selection every frame
|
||||||
@@ -3738,6 +3851,20 @@ void LLColumnHeader::setImage(const std::string &image_name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLColumnHeader::setImageOverlay(const std::string &image_name, LLFontGL::HAlign alignment, const LLColor4& color)
|
||||||
|
{
|
||||||
|
if (image_name.empty())
|
||||||
|
{
|
||||||
|
mImageOverlay = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mImageOverlay = LLUI::getUIImage(image_name);
|
||||||
|
mImageOverlayAlignment = alignment;
|
||||||
|
mImageOverlayColor = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//static
|
//static
|
||||||
void LLColumnHeader::onClick(void* user_data)
|
void LLColumnHeader::onClick(void* user_data)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -274,6 +274,7 @@ public:
|
|||||||
/*virtual*/ void userSetShape(const LLRect& new_rect);
|
/*virtual*/ void userSetShape(const LLRect& new_rect);
|
||||||
|
|
||||||
void setImage(const std::string &image_name);
|
void setImage(const std::string &image_name);
|
||||||
|
void setImageOverlay(const std::string &overlay_image, LLFontGL::HAlign alignment = LLFontGL::HCENTER, const LLColor4& color = LLColor4::white);
|
||||||
LLScrollListColumn* getColumn() { return mColumn; }
|
LLScrollListColumn* getColumn() { return mColumn; }
|
||||||
void setHasResizableElement(BOOL resizable);
|
void setHasResizableElement(BOOL resizable);
|
||||||
void updateResizeBars();
|
void updateResizeBars();
|
||||||
@@ -294,6 +295,10 @@ private:
|
|||||||
LLUIString mDescendingText;
|
LLUIString mDescendingText;
|
||||||
BOOL mShowSortOptions;
|
BOOL mShowSortOptions;
|
||||||
BOOL mHasResizableElement;
|
BOOL mHasResizableElement;
|
||||||
|
|
||||||
|
LLPointer<LLUIImage> mImageOverlay;
|
||||||
|
LLFontGL::HAlign mImageOverlayAlignment;
|
||||||
|
LLColor4 mImageOverlayColor;
|
||||||
};
|
};
|
||||||
|
|
||||||
class LLScrollListItem
|
class LLScrollListItem
|
||||||
@@ -467,6 +472,7 @@ public:
|
|||||||
|
|
||||||
void swapWithNext(S32 index);
|
void swapWithNext(S32 index);
|
||||||
void swapWithPrevious(S32 index);
|
void swapWithPrevious(S32 index);
|
||||||
|
void moveToFront(S32 index);
|
||||||
|
|
||||||
void setCanSelect(BOOL can_select) { mCanSelect = can_select; }
|
void setCanSelect(BOOL can_select) { mCanSelect = can_select; }
|
||||||
virtual BOOL getCanSelect() const { return mCanSelect; }
|
virtual BOOL getCanSelect() const { return mCanSelect; }
|
||||||
|
|||||||
@@ -2488,8 +2488,6 @@ BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_group_floaters(const LLUUID& group_id);
|
|
||||||
|
|
||||||
BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile)
|
BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile)
|
||||||
{
|
{
|
||||||
S32 count = mGroups.count();
|
S32 count = mGroups.count();
|
||||||
|
|||||||
@@ -873,4 +873,5 @@ extern std::string gAuthString;
|
|||||||
extern LLUUID gReSitTargetID;
|
extern LLUUID gReSitTargetID;
|
||||||
extern LLVector3 gReSitOffset;
|
extern LLVector3 gReSitOffset;
|
||||||
// </edit>
|
// </edit>
|
||||||
|
void update_group_floaters(const LLUUID& group_id);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ std::map<const LLUUID, LLFloaterGroupPicker*> LLFloaterGroupPicker::sInstances;
|
|||||||
// helper functions
|
// helper functions
|
||||||
void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const std::string& none_text, U64 powers_mask = GP_ALL_POWERS);
|
void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const std::string& none_text, U64 powers_mask = GP_ALL_POWERS);
|
||||||
|
|
||||||
|
//callbacks
|
||||||
|
void onGroupSortChanged(void* user_data);
|
||||||
|
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
/// Class LLFloaterGroupPicker
|
/// Class LLFloaterGroupPicker
|
||||||
///----------------------------------------------------------------------------
|
///----------------------------------------------------------------------------
|
||||||
@@ -214,7 +217,9 @@ BOOL LLPanelGroups::postBuild()
|
|||||||
childSetTextArg("groupcount", "[MAX]", llformat("%d", gHippoLimits->getMaxAgentGroups()));
|
childSetTextArg("groupcount", "[MAX]", llformat("%d", gHippoLimits->getMaxAgentGroups()));
|
||||||
|
|
||||||
const std::string none_text = getString("none");
|
const std::string none_text = getString("none");
|
||||||
init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text);
|
LLScrollListCtrl *group_list = getChild<LLScrollListCtrl>("group list");
|
||||||
|
init_group_list(group_list, gAgent.getGroupID(), none_text);
|
||||||
|
group_list->setSortChangedCallback(onGroupSortChanged); //Force 'none' to always be first entry.
|
||||||
|
|
||||||
childSetAction("Activate", onBtnActivate, this);
|
childSetAction("Activate", onBtnActivate, this);
|
||||||
|
|
||||||
@@ -472,8 +477,97 @@ bool LLPanelGroups::callbackLeaveGroup(const LLSD& notification, const LLSD& res
|
|||||||
|
|
||||||
void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata)
|
void LLPanelGroups::onGroupList(LLUICtrl* ctrl, void* userdata)
|
||||||
{
|
{
|
||||||
LLPanelGroups* self = (LLPanelGroups*)userdata;
|
LLPanelGroups *self = (LLPanelGroups*)userdata;
|
||||||
if(self) self->enableButtons();
|
if(!self)
|
||||||
|
return;
|
||||||
|
|
||||||
|
self->enableButtons();
|
||||||
|
|
||||||
|
LLScrollListCtrl *group_list = (LLScrollListCtrl*)self->getChild<LLScrollListCtrl>("group list");
|
||||||
|
if(!group_list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LLScrollListItem *item = group_list->getFirstSelected();
|
||||||
|
if(!item)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const LLUUID group_id = item->getValue().asUUID();
|
||||||
|
if(group_id.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
LLGroupData group_data;
|
||||||
|
if(!gAgent.getGroupData(group_id,group_data))
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool list_in_profile = item->getColumn(1)->getValue().asBoolean();
|
||||||
|
bool receive_chat = item->getColumn(2)->getValue().asBoolean();
|
||||||
|
bool recieve_notify = item->getColumn(3)->getValue().asBoolean();
|
||||||
|
bool update_floaters = false;
|
||||||
|
if(gIMMgr->getIgnoreGroup(group_id) == receive_chat)
|
||||||
|
{
|
||||||
|
gIMMgr->updateIgnoreGroup(group_id, !receive_chat);
|
||||||
|
update_floaters = true;
|
||||||
|
}
|
||||||
|
if( (bool)group_data.mListInProfile != list_in_profile ||
|
||||||
|
(bool)group_data.mAcceptNotices != recieve_notify )
|
||||||
|
{
|
||||||
|
gAgent.setUserGroupFlags(group_id, recieve_notify, list_in_profile);
|
||||||
|
}
|
||||||
|
else if(update_floaters) //gAgent.setUserGroupFlags already calls update_group_floaters
|
||||||
|
update_group_floaters(group_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
LLSD create_group_element(const LLGroupData *group_datap, const LLUUID &active_group, const std::string& none_text, const U64 &powers_mask)
|
||||||
|
{
|
||||||
|
if(group_datap && !((powers_mask == GP_ALL_POWERS) || ((group_datap->mPowers & powers_mask) != 0)))
|
||||||
|
return LLSD();
|
||||||
|
const LLUUID &id = group_datap ? group_datap->mID : LLUUID::null;
|
||||||
|
const bool enabled = !!group_datap;
|
||||||
|
|
||||||
|
std::string style = (group_datap && group_datap->mListInProfile) ? "BOLD" : "NORMAL";
|
||||||
|
if(active_group == id)
|
||||||
|
{
|
||||||
|
style.append("|ITALIC");
|
||||||
|
}
|
||||||
|
LLSD element;
|
||||||
|
element["id"] = id;
|
||||||
|
LLSD& name_column = element["columns"][0];
|
||||||
|
name_column["column"] = "name";
|
||||||
|
name_column["value"] = group_datap ? group_datap->mName : none_text;
|
||||||
|
name_column["font"] = "SANSSERIF";
|
||||||
|
name_column["font-style"] = style;
|
||||||
|
|
||||||
|
LLSD& show_column = element["columns"][1];
|
||||||
|
show_column["column"] = "is_listed_group";
|
||||||
|
show_column["type"] = "checkbox";
|
||||||
|
show_column["enabled"] = enabled;
|
||||||
|
show_column["value"] = enabled && group_datap->mListInProfile;
|
||||||
|
|
||||||
|
LLSD& chat_column = element["columns"][2];
|
||||||
|
chat_column["column"] = "is_chattable_group";
|
||||||
|
chat_column["type"] = "checkbox";
|
||||||
|
chat_column["enabled"] = enabled;
|
||||||
|
chat_column["value"] = enabled && !gIMMgr->getIgnoreGroup(id);
|
||||||
|
|
||||||
|
LLSD& notice_column = element["columns"][3];
|
||||||
|
notice_column["column"] = "is_notice_group";
|
||||||
|
notice_column["type"] = "checkbox";
|
||||||
|
notice_column["enabled"] = enabled;
|
||||||
|
notice_column["value"] = enabled && group_datap->mAcceptNotices;
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
void onGroupSortChanged(void* user_data)
|
||||||
|
{
|
||||||
|
LLPanelGroups *panel = (LLPanelGroups*)user_data;
|
||||||
|
if(!panel)
|
||||||
|
return;
|
||||||
|
LLScrollListCtrl *group_list = (LLScrollListCtrl*)panel->getChild<LLScrollListCtrl>("group list");
|
||||||
|
if(!group_list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
group_list->moveToFront(group_list->getItemIndex(LLUUID::null));
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const std::string& none_text, U64 powers_mask)
|
void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const std::string& none_text, U64 powers_mask)
|
||||||
@@ -491,43 +585,13 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, const s
|
|||||||
|
|
||||||
for(S32 i = 0; i < count; ++i)
|
for(S32 i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
id = gAgent.mGroups.get(i).mID;
|
LLSD element = create_group_element(&gAgent.mGroups.get(i), highlight_id, none_text, powers_mask);
|
||||||
LLGroupData* group_datap = &gAgent.mGroups.get(i);
|
if(element.size())
|
||||||
if ((powers_mask == GP_ALL_POWERS) || ((group_datap->mPowers & powers_mask) != 0))
|
|
||||||
{
|
|
||||||
std::string style = group_datap->mListInProfile ? "BOLD" : "NORMAL";
|
|
||||||
if(highlight_id == id)
|
|
||||||
{
|
|
||||||
style.append("|ITALIC");
|
|
||||||
}
|
|
||||||
|
|
||||||
LLSD element;
|
|
||||||
element["id"] = id;
|
|
||||||
element["columns"][0]["column"] = "name";
|
|
||||||
element["columns"][0]["value"] = group_datap->mName;
|
|
||||||
element["columns"][0]["font"] = "SANSSERIF";
|
|
||||||
element["columns"][0]["font-style"] = style;
|
|
||||||
|
|
||||||
group_list->addElement(element, ADD_SORTED);
|
group_list->addElement(element, ADD_SORTED);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add "none" to list at top
|
// add "none" to list at top
|
||||||
{
|
group_list->addElement(create_group_element(NULL, highlight_id, none_text, powers_mask), ADD_TOP);
|
||||||
std::string style = "NORMAL";
|
|
||||||
if (highlight_id.isNull())
|
|
||||||
{
|
|
||||||
style = "ITALIC";
|
|
||||||
}
|
|
||||||
LLSD element;
|
|
||||||
element["id"] = LLUUID::null;
|
|
||||||
element["columns"][0]["column"] = "name";
|
|
||||||
element["columns"][0]["value"] = none_text;
|
|
||||||
element["columns"][0]["font"] = "SANSSERIF";
|
|
||||||
element["columns"][0]["font-style"] = style;
|
|
||||||
|
|
||||||
group_list->addElement(element, ADD_TOP);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(selected_id.notNull())
|
if(selected_id.notNull())
|
||||||
group_list->selectByValue(selected_id);
|
group_list->selectByValue(selected_id);
|
||||||
|
|||||||
@@ -221,7 +221,6 @@ LLGroupMgrGroupData::LLGroupMgrGroupData(const LLUUID& id) :
|
|||||||
mOpenEnrollment(FALSE),
|
mOpenEnrollment(FALSE),
|
||||||
mMembershipFee(0),
|
mMembershipFee(0),
|
||||||
mAllowPublish(FALSE),
|
mAllowPublish(FALSE),
|
||||||
mListInProfile(FALSE),
|
|
||||||
mMaturePublish(FALSE),
|
mMaturePublish(FALSE),
|
||||||
mChanged(FALSE),
|
mChanged(FALSE),
|
||||||
mMemberCount(0),
|
mMemberCount(0),
|
||||||
|
|||||||
@@ -255,7 +255,6 @@ public:
|
|||||||
BOOL mOpenEnrollment;
|
BOOL mOpenEnrollment;
|
||||||
S32 mMembershipFee;
|
S32 mMembershipFee;
|
||||||
BOOL mAllowPublish;
|
BOOL mAllowPublish;
|
||||||
BOOL mListInProfile;
|
|
||||||
BOOL mMaturePublish;
|
BOOL mMaturePublish;
|
||||||
BOOL mChanged;
|
BOOL mChanged;
|
||||||
S32 mMemberCount;
|
S32 mMemberCount;
|
||||||
|
|||||||
@@ -780,61 +780,80 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
|
|||||||
mBtnInfo->setVisible(is_member && !mAllowEdit);
|
mBtnInfo->setVisible(is_member && !mAllowEdit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCtrlReceiveNotices)
|
if(gc == GC_ALL || gc == GC_PROPERTIES)
|
||||||
{
|
{
|
||||||
mCtrlReceiveNotices->setVisible(is_member);
|
if (mCtrlReceiveNotices)
|
||||||
if (is_member)
|
|
||||||
{
|
{
|
||||||
mCtrlReceiveNotices->setEnabled(mAllowEdit);
|
mCtrlReceiveNotices->setVisible(is_member);
|
||||||
|
if (is_member)
|
||||||
|
{
|
||||||
|
mCtrlReceiveNotices->setEnabled(mAllowEdit);
|
||||||
|
if(!mCtrlReceiveNotices->isDirty()) //If the user hasn't edited this then refresh it. Value may have changed in groups panel, etc.
|
||||||
|
{
|
||||||
|
mCtrlReceiveNotices->set(agent_gdatap.mAcceptNotices);
|
||||||
|
mCtrlReceiveNotices->resetDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//mCtrlReceiveNotices->resetDirty(); Don't resetDirty. This ctrl is decoupled from update.
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mCtrlListGroup)
|
if (mCtrlListGroup)
|
||||||
{
|
|
||||||
mCtrlListGroup->setVisible(is_member);
|
|
||||||
if (is_member)
|
|
||||||
mCtrlListGroup->setEnabled(mAllowEdit);
|
|
||||||
//mCtrlReceiveChat->resetDirty(); Don't resetDirty. This ctrl is decoupled from update.
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mCtrlReceiveChat)
|
|
||||||
{
|
|
||||||
mCtrlReceiveChat->setVisible(is_member);
|
|
||||||
mCtrlReceiveChat->setEnabled(TRUE);
|
|
||||||
//mCtrlReceiveChat->resetDirty(); Don't resetDirty. This ctrl is decoupled from update.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (mInsignia) mInsignia->setEnabled(mAllowEdit && can_change_ident);
|
|
||||||
if (mEditCharter) mEditCharter->setEnabled(mAllowEdit && can_change_ident);
|
|
||||||
|
|
||||||
if (mGroupName) mGroupName->setText(gdatap->mName);
|
|
||||||
if (mGroupNameEditor) mGroupNameEditor->setVisible(FALSE);
|
|
||||||
if (mFounderName) mFounderName->setNameID(gdatap->mFounderID,FALSE);
|
|
||||||
|
|
||||||
LLNameEditor* key_edit = getChild<LLNameEditor>("group_key");
|
|
||||||
if(key_edit)
|
|
||||||
{
|
|
||||||
key_edit->setText(gdatap->getID().asString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mInsignia)
|
|
||||||
{
|
|
||||||
if (gdatap->mInsigniaID.notNull())
|
|
||||||
{
|
{
|
||||||
mInsignia->setImageAssetID(gdatap->mInsigniaID);
|
mCtrlListGroup->setVisible(is_member);
|
||||||
|
if (is_member)
|
||||||
|
{
|
||||||
|
mCtrlListGroup->setEnabled(mAllowEdit);
|
||||||
|
if(!mCtrlListGroup->isDirty()) //If the user hasn't edited this then refresh it. Value may have changed in groups panel, etc.
|
||||||
|
{
|
||||||
|
mCtrlListGroup->set(agent_gdatap.mListInProfile);
|
||||||
|
mCtrlListGroup->resetDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
mInsignia->setImageAssetID(mDefaultIconID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mEditCharter)
|
if (mCtrlReceiveChat)
|
||||||
{
|
{
|
||||||
mEditCharter->setText(gdatap->mCharter);
|
mCtrlReceiveChat->setVisible(is_member);
|
||||||
mEditCharter->resetDirty();
|
if (is_member)
|
||||||
|
{
|
||||||
|
mCtrlReceiveChat->setEnabled(mAllowEdit);
|
||||||
|
if(!mCtrlReceiveChat->isDirty()) //If the user hasn't edited this then refresh it. Value may have changed in groups panel, etc.
|
||||||
|
{
|
||||||
|
mCtrlReceiveChat->set(!gIMMgr->getIgnoreGroup(mGroupID));
|
||||||
|
mCtrlReceiveChat->resetDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mInsignia) mInsignia->setEnabled(mAllowEdit && can_change_ident);
|
||||||
|
if (mEditCharter) mEditCharter->setEnabled(mAllowEdit && can_change_ident);
|
||||||
|
|
||||||
|
if (mGroupName) mGroupName->setText(gdatap->mName);
|
||||||
|
if (mGroupNameEditor) mGroupNameEditor->setVisible(FALSE);
|
||||||
|
if (mFounderName) mFounderName->setNameID(gdatap->mFounderID,FALSE);
|
||||||
|
|
||||||
|
LLNameEditor* key_edit = getChild<LLNameEditor>("group_key");
|
||||||
|
if(key_edit)
|
||||||
|
{
|
||||||
|
key_edit->setText(gdatap->getID().asString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mInsignia)
|
||||||
|
{
|
||||||
|
if (gdatap->mInsigniaID.notNull())
|
||||||
|
{
|
||||||
|
mInsignia->setImageAssetID(gdatap->mInsigniaID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mInsignia->setImageAssetID(mDefaultIconID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mEditCharter)
|
||||||
|
{
|
||||||
|
mEditCharter->setText(gdatap->mCharter);
|
||||||
|
mEditCharter->resetDirty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mListVisibleMembers)
|
if (mListVisibleMembers)
|
||||||
|
|||||||
@@ -1,18 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<panel border="true" bottom="-371" height="300" left="280" mouse_opaque="true"
|
<panel border="true" bottom="-371" height="300" left="280" mouse_opaque="true"
|
||||||
name="groups" width="350">
|
name="groups" width="350">
|
||||||
<scroll_list background_visible="true" bottom="45" column_padding="5" draw_border="true"
|
<scroll_list background_visible="true" bottom="45" column_padding="0" draw_border="true"
|
||||||
draw_heading="false" draw_stripes="true" enabled="true"
|
draw_heading="true" draw_stripes="true" enabled="true"
|
||||||
follows="left|top|right|bottom" left="10" mouse_opaque="true"
|
follows="left|top|right|bottom" left="10" mouse_opaque="true"
|
||||||
multi_select="false" name="group list" tab_stop="true" top="-10"
|
multi_select="false" name="group list" tab_stop="true" top="-10"
|
||||||
width="240">
|
width="240">
|
||||||
<column label="" name="name" width="248" />
|
<column dynamicwidth="true" label="Name" name="name" tool_tip="Name" />
|
||||||
|
<!--<column label="Active" name="is_active_group"
|
||||||
|
tool_tip="Group is set as active" width="40" />-->
|
||||||
|
<column image_overlay="ff_visible_online.tga" name="is_listed_group"
|
||||||
|
tool_tip="Group is visible in profile." width="20" />
|
||||||
|
<column image_overlay="icn_chat_overlay.tga" name="is_chattable_group"
|
||||||
|
tool_tip="Receive group chat" width="20" />
|
||||||
|
<column image_overlay="smicon_warn.tga" name="is_notice_group"
|
||||||
|
tool_tip="Receive group notices" width="20" />
|
||||||
</scroll_list>
|
</scroll_list>
|
||||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||||
bottom="22" drop_shadow_visible="true" enabled="true" follows="left|bottom"
|
bottom="22" drop_shadow_visible="true" enabled="true" follows="left|bottom"
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
|
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="12"
|
||||||
mouse_opaque="false" name="groupdesc" v_pad="0" width="248">
|
mouse_opaque="false" name="groupdesc" v_pad="0" width="248">
|
||||||
Your currently active group is displayed in bold.
|
Your currently active group is displayed in italics.
|
||||||
</text>
|
</text>
|
||||||
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
<text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
||||||
bottom="5" drop_shadow_visible="true" enabled="true" follows="left|bottom"
|
bottom="5" drop_shadow_visible="true" enabled="true" follows="left|bottom"
|
||||||
|
|||||||
Reference in New Issue
Block a user