241 lines
7.4 KiB
C++
241 lines
7.4 KiB
C++
/**
|
|
* @file llpanelgroupcreate.cpp
|
|
*
|
|
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
|
* Second Life Viewer Source Code
|
|
* Copyright (C) 2019, 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
|
|
*
|
|
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
|
* $/LicenseInfo$
|
|
*/
|
|
|
|
#include "llviewerprecompiledheaders.h"
|
|
|
|
#include "llpanelgroupcreate.h"
|
|
|
|
// UI includes
|
|
#include "llbutton.h"
|
|
#include "llcheckboxctrl.h"
|
|
#include "llcombobox.h"
|
|
#include "llfloatersidepanelcontainer.h"
|
|
#include "llsidetraypanelcontainer.h"
|
|
#include "llscrolllistctrl.h"
|
|
#include "llspinctrl.h"
|
|
#include "lltextbox.h"
|
|
#include "lltexteditor.h"
|
|
#include "lltexturectrl.h"
|
|
#include "lluictrlfactory.h"
|
|
|
|
// Viewer includes
|
|
#include "llagentbenefits.h"
|
|
#include "llfloaterreg.h"
|
|
#include "llfloater.h"
|
|
#include "llgroupmgr.h"
|
|
#include "llstatusbar.h" // to re-request balance
|
|
#include "lltrans.h"
|
|
#include "llnotificationsutil.h"
|
|
#include "lluicolortable.h"
|
|
|
|
|
|
const S32 MATURE_CONTENT = 1;
|
|
const S32 NON_MATURE_CONTENT = 2;
|
|
const S32 DECLINE_TO_STATE = 0;
|
|
|
|
static LLPanelInjector<LLPanelGroupCreate> t_panel_group_creation("panel_group_creation_sidetray");
|
|
|
|
LLPanelGroupCreate::LLPanelGroupCreate()
|
|
: LLPanel()
|
|
{
|
|
}
|
|
|
|
LLPanelGroupCreate::~LLPanelGroupCreate()
|
|
{
|
|
}
|
|
|
|
bool LLPanelGroupCreate::postBuild()
|
|
{
|
|
childSetCommitCallback("back", boost::bind(&LLPanelGroupCreate::onBackBtnClick, this), NULL);
|
|
|
|
mComboMature = getChild<LLComboBox>("group_mature_check", true);
|
|
mCtrlOpenEnrollment = getChild<LLCheckBoxCtrl>("open_enrollement", true);
|
|
mCtrlEnrollmentFee = getChild<LLCheckBoxCtrl>("check_enrollment_fee", true);
|
|
mEditCharter = getChild<LLTextEditor>("charter", true);
|
|
mSpinEnrollmentFee = getChild<LLSpinCtrl>("spin_enrollment_fee", true);
|
|
mMembershipList = getChild<LLScrollListCtrl>("membership_list", true);
|
|
|
|
mCreateButton = getChild<LLButton>("btn_create", true);
|
|
mCreateButton->setCommitCallback(boost::bind(&LLPanelGroupCreate::onBtnCreate, this));
|
|
|
|
mGroupNameEditor = getChild<LLLineEditor>("group_name_editor", true);
|
|
mGroupNameEditor->setPrevalidate(LLTextValidate::validateASCIINoLeadingSpace);
|
|
|
|
mInsignia = getChild<LLTextureCtrl>("insignia", true);
|
|
mInsignia->setAllowLocalTexture(false);
|
|
mInsignia->setBakeTextureEnabled(false);
|
|
mInsignia->setCanApplyImmediately(false);
|
|
|
|
return true;
|
|
}
|
|
|
|
void LLPanelGroupCreate::onOpen(const LLSD& key)
|
|
{
|
|
mInsignia->setImageAssetID(LLUUID::null);
|
|
mInsignia->setImageAssetName(mInsignia->getDefaultImageName());
|
|
mGroupNameEditor->clear();
|
|
mEditCharter->clear();
|
|
mSpinEnrollmentFee->set(0.f);
|
|
mCtrlEnrollmentFee->set(false);
|
|
mCtrlOpenEnrollment->set(false);
|
|
mMembershipList->clearRows();
|
|
|
|
// populate list
|
|
addMembershipRow("Base");
|
|
addMembershipRow("Premium");
|
|
addMembershipRow("Premium_Plus");
|
|
addMembershipRow("Internal");// Present only if you are already in one, needed for testing
|
|
|
|
S32 cost = LLAgentBenefitsMgr::current().getCreateGroupCost();
|
|
mCreateButton->setLabelArg("[COST]", llformat("%d", cost));
|
|
}
|
|
|
|
//static
|
|
void LLPanelGroupCreate::refreshCreatedGroup(const LLUUID& group_id)
|
|
{
|
|
LLSD params;
|
|
params["group_id"] = group_id;
|
|
params["open_tab_name"] = "panel_group_info_sidetray";
|
|
LLFloaterSidePanelContainer::showPanel("people", "panel_group_info_sidetray", params);
|
|
LLStatusBar::sendMoneyBalanceRequest();
|
|
}
|
|
|
|
void LLPanelGroupCreate::addMembershipRow(const std::string &name)
|
|
{
|
|
if (LLAgentBenefitsMgr::has(name))
|
|
{
|
|
bool is_current = LLAgentBenefitsMgr::isCurrent(name);
|
|
|
|
LLScrollListItem::Params item_params;
|
|
LLScrollListCell::Params cell_params;
|
|
cell_params.font = LLFontGL::getFontSansSerif();
|
|
// Start out right justifying numeric displays
|
|
cell_params.font_halign = LLFontGL::LEFT;
|
|
if (is_current)
|
|
{
|
|
cell_params.color = LLUIColorTable::instance().getColor("DrYellow");
|
|
}
|
|
|
|
cell_params.column = "clmn_name";
|
|
std::string mem_str = name + "Membership";
|
|
if (is_current)
|
|
{
|
|
cell_params.value = LLTrans::getString(mem_str) + " " + getString("current_membership");
|
|
}
|
|
else
|
|
{
|
|
cell_params.value = LLTrans::getString(mem_str);
|
|
}
|
|
item_params.columns.add(cell_params);
|
|
cell_params.column = "clmn_price";
|
|
cell_params.value = llformat("L$ %d",LLAgentBenefitsMgr::get(name).getCreateGroupCost());
|
|
item_params.columns.add(cell_params);
|
|
mMembershipList->addRow(item_params);
|
|
}
|
|
}
|
|
|
|
void LLPanelGroupCreate::onBackBtnClick()
|
|
{
|
|
LLSideTrayPanelContainer* parent = dynamic_cast<LLSideTrayPanelContainer*>(getParent());
|
|
if(parent)
|
|
{
|
|
parent->openPreviousPanel();
|
|
}
|
|
}
|
|
|
|
bool LLPanelGroupCreate::confirmMatureApply(const LLSD& notification, const LLSD& response)
|
|
{
|
|
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
|
// 0 == Yes
|
|
// 1 == No
|
|
// 2 == Cancel
|
|
switch (option)
|
|
{
|
|
case 0:
|
|
mComboMature->setCurrentByIndex(MATURE_CONTENT);
|
|
createGroup();
|
|
break;
|
|
case 1:
|
|
mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
|
|
createGroup();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
void LLPanelGroupCreate::onBtnCreate()
|
|
{
|
|
LL_INFOS() << "Validating group creation" << LL_ENDL;
|
|
|
|
// Validate the group name length.
|
|
std::string gr_name = mGroupNameEditor->getText();
|
|
LLStringUtil::trim(gr_name);
|
|
S32 group_name_len = static_cast<S32>(gr_name.size());
|
|
if (group_name_len < DB_GROUP_NAME_MIN_LEN
|
|
|| group_name_len > DB_GROUP_NAME_STR_LEN)
|
|
{
|
|
LLSD args;
|
|
args["MIN_LEN"] = DB_GROUP_NAME_MIN_LEN;
|
|
args["MAX_LEN"] = DB_GROUP_NAME_STR_LEN;
|
|
LLNotificationsUtil::add("GroupNameLengthWarning", args);
|
|
}
|
|
else
|
|
// Check to make sure mature has been set
|
|
if (mComboMature &&
|
|
mComboMature->getCurrentIndex() == DECLINE_TO_STATE)
|
|
{
|
|
LLNotificationsUtil::add("SetGroupMature", LLSD(), LLSD(),
|
|
boost::bind(&LLPanelGroupCreate::confirmMatureApply, this, _1, _2));
|
|
}
|
|
else
|
|
{
|
|
createGroup();
|
|
}
|
|
}
|
|
|
|
void LLPanelGroupCreate::createGroup()
|
|
{
|
|
LL_INFOS() << "Creating group" << LL_ENDL;
|
|
|
|
U32 enrollment_fee = (mCtrlEnrollmentFee->get() ?
|
|
(U32)mSpinEnrollmentFee->get() : 0);
|
|
LLUUID insignia_id = mInsignia->getImageItemID().isNull() ? LLUUID::null : mInsignia->getImageAssetID();
|
|
|
|
std::string gr_name = mGroupNameEditor->getText();
|
|
LLStringUtil::trim(gr_name);
|
|
LLGroupMgr::getInstance()->sendCreateGroupRequest(gr_name,
|
|
mEditCharter->getText(),
|
|
true,
|
|
insignia_id,
|
|
enrollment_fee,
|
|
mCtrlOpenEnrollment->get(),
|
|
false,
|
|
mComboMature->getCurrentIndex() == MATURE_CONTENT);
|
|
}
|
|
|