phoenix-firestorm/indra/newview/llpanelgroupcreate.cpp

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);
}