/** * @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->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); }