viewer#2065 Region restart schedule floater
parent
6e7c6a3842
commit
4d7f622a3c
|
|
@ -278,6 +278,7 @@ set(viewer_SOURCE_FILES
|
|||
llfloaterregioninfo.cpp
|
||||
llfloaterreporter.cpp
|
||||
llfloaterregionrestarting.cpp
|
||||
llfloaterregionrestartschedule.cpp
|
||||
llfloatersavecamerapreset.cpp
|
||||
llfloatersaveprefpreset.cpp
|
||||
llfloatersceneloadstats.cpp
|
||||
|
|
@ -945,6 +946,7 @@ set(viewer_HEADER_FILES
|
|||
llfloaterregioninfo.h
|
||||
llfloaterreporter.h
|
||||
llfloaterregionrestarting.h
|
||||
llfloaterregionrestartschedule.h
|
||||
llfloatersavecamerapreset.h
|
||||
llfloatersaveprefpreset.h
|
||||
llfloatersceneloadstats.h
|
||||
|
|
|
|||
|
|
@ -12682,6 +12682,17 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>Use24HourClock</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>12 vs 24. At the moment only for region restart schedule floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>EnvironmentPersistAcrossLogin</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@
|
|||
#include "llfloatergroups.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterregiondebugconsole.h"
|
||||
#include "llfloaterregionrestartschedule.h"
|
||||
#include "llfloatertelehub.h"
|
||||
#include "llgltfmateriallist.h"
|
||||
#include "llinventorymodel.h"
|
||||
|
|
@ -259,6 +260,7 @@ bool LLFloaterRegionInfo::postBuild()
|
|||
panel = new LLPanelRegionGeneralInfo;
|
||||
mInfoPanels.push_back(panel);
|
||||
panel->getCommitCallbackRegistrar().add("RegionInfo.ManageTelehub", boost::bind(&LLPanelRegionInfo::onClickManageTelehub, panel));
|
||||
panel->getCommitCallbackRegistrar().add("RegionInfo.ManageRestart", boost::bind(&LLPanelRegionInfo::onClickManageRestartSchedule, panel));
|
||||
panel->buildFromFile("panel_region_general.xml");
|
||||
mTab->addTabPanel(panel);
|
||||
|
||||
|
|
@ -862,6 +864,25 @@ void LLPanelRegionInfo::onClickManageTelehub()
|
|||
LLFloaterReg::showInstance("telehubs");
|
||||
}
|
||||
|
||||
void LLPanelRegionInfo::onClickManageRestartSchedule()
|
||||
{
|
||||
LLFloater* floaterp = mFloaterRestartScheduleHandle.get();
|
||||
// Show the dialog
|
||||
if (!floaterp)
|
||||
{
|
||||
floaterp = new LLFloaterRegionRestartSchedule(this);
|
||||
}
|
||||
|
||||
if (floaterp->getVisible())
|
||||
{
|
||||
floaterp->closeFloater();
|
||||
}
|
||||
else
|
||||
{
|
||||
floaterp->openFloater();
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// LLPanelRegionGeneralInfo
|
||||
//
|
||||
|
|
@ -877,6 +898,8 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region)
|
|||
getChildView("kick_all_btn")->setEnabled(allow_modify);
|
||||
getChildView("im_btn")->setEnabled(allow_modify);
|
||||
getChildView("manage_telehub_btn")->setEnabled(allow_modify);
|
||||
getChildView("manage_restart_btn")->setEnabled(allow_modify);
|
||||
getChildView("manage_restart_btn")->setVisible(LLFloaterRegionRestartSchedule::canUse());
|
||||
|
||||
// Data gets filled in by processRegionInfo
|
||||
|
||||
|
|
|
|||
|
|
@ -154,6 +154,7 @@ public:
|
|||
void disableButton(const std::string& btn_name);
|
||||
|
||||
void onClickManageTelehub();
|
||||
void onClickManageRestartSchedule();
|
||||
|
||||
protected:
|
||||
void initCtrl(const std::string& name);
|
||||
|
|
@ -174,6 +175,7 @@ protected:
|
|||
|
||||
// member data
|
||||
LLHost mHost;
|
||||
LLHandle<LLFloater> mFloaterRestartScheduleHandle;
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -0,0 +1,386 @@
|
|||
/**
|
||||
* @file llfloaterregionrestartschedule.cpp
|
||||
* @author Andrii Kleshchev
|
||||
* @brief LLFloaterRegionRestartSchedule class
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2024, 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 "llfloaterregionrestartschedule.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "lllineeditor.h"
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
|
||||
// match with values used by capability
|
||||
constexpr char CHECKBOX_PREFIXES[] =
|
||||
{
|
||||
's',
|
||||
'm',
|
||||
't',
|
||||
'w',
|
||||
'r',
|
||||
'f',
|
||||
'a',
|
||||
};
|
||||
|
||||
const std::string CHECKBOX_NAME = "_chk";
|
||||
|
||||
LLFloaterRegionRestartSchedule::LLFloaterRegionRestartSchedule(
|
||||
LLView* owner)
|
||||
: LLFloater(LLSD())
|
||||
, mOwnerHandle(owner->getHandle())
|
||||
{
|
||||
buildFromFile("floater_region_restart_schedule.xml");
|
||||
}
|
||||
|
||||
LLFloaterRegionRestartSchedule::~LLFloaterRegionRestartSchedule()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool LLFloaterRegionRestartSchedule::postBuild()
|
||||
{
|
||||
mPMAMButton = getChild<LLButton>("am_pm_btn");
|
||||
mPMAMButton->setClickedCallback([this](LLUICtrl*, const LLSD&) { onPMAMButtonClicked(); });
|
||||
|
||||
// By default mPMAMButton is supposed to be visible.
|
||||
// If localized xml set mPMAMButton to be invisible, assume
|
||||
// 24h format and prealligned "UTC" label
|
||||
if (mPMAMButton->getVisible())
|
||||
{
|
||||
bool use_24h_format = gSavedSettings.getBOOL("Use24HourClock");
|
||||
if (use_24h_format)
|
||||
{
|
||||
mPMAMButton->setVisible(false);
|
||||
LLUICtrl* lbl = getChild<LLUICtrl>("utc_label");
|
||||
lbl->translate(-mPMAMButton->getRect().getWidth(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
mSaveButton = getChild<LLButton>("save_btn");
|
||||
mSaveButton->setClickedCallback([this](LLUICtrl*, const LLSD&) { onSaveButtonClicked(); });
|
||||
|
||||
mCancelButton = getChild<LLButton>("cancel_btn");
|
||||
mCancelButton->setClickedCallback([this](LLUICtrl*, const LLSD&) { closeFloater(false); });
|
||||
|
||||
|
||||
mHoursLineEditor = getChild<LLLineEditor>("hours_edt");
|
||||
mHoursLineEditor->setPrevalidate(LLTextValidate::validateNonNegativeS32);
|
||||
mHoursLineEditor->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& value) { onCommitHours(value); });
|
||||
|
||||
mMinutesLineEditor = getChild<LLLineEditor>("minutes_edt");
|
||||
mMinutesLineEditor->setPrevalidate(LLTextValidate::validateNonNegativeS32);
|
||||
mMinutesLineEditor->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& value) { onCommitMinutes(value); });
|
||||
|
||||
for (char c : CHECKBOX_PREFIXES)
|
||||
{
|
||||
std::string name = c + CHECKBOX_NAME;
|
||||
LLCheckBoxCtrl* chk = getChild<LLCheckBoxCtrl>(name);
|
||||
chk->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& value) { mSaveButton->setEnabled(true); });
|
||||
}
|
||||
|
||||
resetUI(false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::onOpen(const LLSD& key)
|
||||
{
|
||||
std::string url = gAgent.getRegionCapability("RegionSchedule");
|
||||
if (!url.empty())
|
||||
{
|
||||
LLCoros::instance().launch("LLFloaterRegionRestartSchedule::requestRegionShcheduleCoro",
|
||||
boost::bind(&LLFloaterRegionRestartSchedule::requestRegionShcheduleCoro, url, getHandle()));
|
||||
|
||||
mSaveButton->setEnabled(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Region") << "Started region schedule floater, but RegionSchedule capability is not available" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::draw()
|
||||
{
|
||||
LLView* owner = mOwnerHandle.get();
|
||||
if (owner)
|
||||
{
|
||||
static LLCachedControl<F32> max_opacity(gSavedSettings, "PickerContextOpacity", 0.4f);
|
||||
drawConeToOwner(mContextConeOpacity, max_opacity, owner);
|
||||
}
|
||||
|
||||
LLFloater::draw();
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::onPMAMButtonClicked()
|
||||
{
|
||||
mSaveButton->setEnabled(true);
|
||||
mTimeAM = !mTimeAM;
|
||||
updateAMPM();
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::onSaveButtonClicked()
|
||||
{
|
||||
std::string url = gAgent.getRegionCapability("RegionSchedule");
|
||||
if (!url.empty())
|
||||
{
|
||||
std::string days;
|
||||
for (char c : CHECKBOX_PREFIXES)
|
||||
{
|
||||
std::string name = c + CHECKBOX_NAME;
|
||||
LLCheckBoxCtrl* chk = getChild<LLCheckBoxCtrl>(name);
|
||||
if (chk->getValue())
|
||||
{
|
||||
days += c;
|
||||
}
|
||||
}
|
||||
LLSD restart;
|
||||
if (days.size() < 7)
|
||||
{
|
||||
LLStringUtil::toUpper(days);
|
||||
restart["type"] = "W";
|
||||
// if days are empty, will reset schedule
|
||||
restart["days"] = days;
|
||||
}
|
||||
else
|
||||
{
|
||||
restart["type"] = "D";
|
||||
}
|
||||
S32 hours = mHoursLineEditor->getValue().asInteger();
|
||||
if (mPMAMButton->getVisible())
|
||||
{
|
||||
if (hours == 12)
|
||||
{
|
||||
hours = 0; // 12:00 AM equals 0:00, while 12:00 PM equals 12:00
|
||||
}
|
||||
if (!mTimeAM)
|
||||
{
|
||||
hours += 12;
|
||||
}
|
||||
}
|
||||
restart["time"] = hours * 3600 + mMinutesLineEditor->getValue().asInteger() * 60;
|
||||
|
||||
LLSD body;
|
||||
body["restart"] = restart; // event name, at the moment only "restart" is supported
|
||||
LLCoros::instance().launch("LLFloaterRegionRestartSchedule::setRegionShcheduleCoro",
|
||||
boost::bind(&LLFloaterRegionRestartSchedule::setRegionShcheduleCoro, url, body, getHandle()));
|
||||
|
||||
mSaveButton->setEnabled(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Region") << "Saving region schedule, but RegionSchedule capability is not available" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::onCommitHours(const LLSD& value)
|
||||
{
|
||||
S32 hours = value.asInteger();
|
||||
if (mPMAMButton->getVisible())
|
||||
{
|
||||
// 0:00 equals 12:00 AM 1:00 equals 1:00 AM, 12am < 1am < 2am < 3am...
|
||||
if (hours == 0) hours = 12;
|
||||
llclamp(hours, 1, 12);
|
||||
}
|
||||
else
|
||||
{
|
||||
llclamp(hours, 0, 23);
|
||||
}
|
||||
mHoursLineEditor->setText(llformat("%02d", hours));
|
||||
mSaveButton->setEnabled(true);
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::onCommitMinutes(const LLSD& value)
|
||||
{
|
||||
S32 minutes = value.asInteger();
|
||||
llclamp(minutes, 0, 59);
|
||||
mMinutesLineEditor->setText(llformat("%02d", minutes));
|
||||
mSaveButton->setEnabled(true);
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::resetUI(bool enable_ui)
|
||||
{
|
||||
for (char c : CHECKBOX_PREFIXES)
|
||||
{
|
||||
std::string name = c + CHECKBOX_NAME;
|
||||
LLCheckBoxCtrl* chk = getChild<LLCheckBoxCtrl>(name);
|
||||
chk->setValue(false);
|
||||
chk->setEnabled(enable_ui);
|
||||
}
|
||||
if (mPMAMButton->getVisible())
|
||||
{
|
||||
mHoursLineEditor->setValue("12");
|
||||
mPMAMButton->setEnabled(enable_ui);
|
||||
}
|
||||
else
|
||||
{
|
||||
mHoursLineEditor->setValue("00");
|
||||
}
|
||||
mMinutesLineEditor->setValue("00");
|
||||
mMinutesLineEditor->setEnabled(enable_ui);
|
||||
mHoursLineEditor->setEnabled(enable_ui);
|
||||
mTimeAM = true;
|
||||
updateAMPM();
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::updateAMPM()
|
||||
{
|
||||
std::string value;
|
||||
if (mTimeAM)
|
||||
{
|
||||
value = getString("am_string");
|
||||
}
|
||||
else
|
||||
{
|
||||
value = getString("pm_string");
|
||||
}
|
||||
mPMAMButton->setLabel(value);
|
||||
}
|
||||
|
||||
bool LLFloaterRegionRestartSchedule::canUse()
|
||||
{
|
||||
std::string url = gAgent.getRegionCapability("RegionSchedule");
|
||||
return !url.empty();
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::requestRegionShcheduleCoro(std::string url, LLHandle<LLFloater> handle)
|
||||
{
|
||||
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
|
||||
httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("RegionShcheduleRequest", httpPolicy));
|
||||
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
|
||||
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
|
||||
|
||||
httpOpts->setWantHeaders(true);
|
||||
|
||||
LLSD result = httpAdapter->getAndSuspend(httpRequest, url, httpOpts);
|
||||
|
||||
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
|
||||
LLFloaterRegionRestartSchedule* floater = dynamic_cast<LLFloaterRegionRestartSchedule*>(handle.get());
|
||||
if (!floater)
|
||||
{
|
||||
LL_DEBUGS("Region") << "Region Restart Schedule floater is already dead" << LL_ENDL;
|
||||
}
|
||||
else if (!status)
|
||||
{
|
||||
LL_WARNS("Region") << "Failed to get region schedule: " << status.toString() << LL_ENDL;
|
||||
floater->resetUI(false);
|
||||
}
|
||||
else if (!result.has("restart"))
|
||||
{
|
||||
floater->resetUI(true); // no restart schedule yet
|
||||
}
|
||||
else
|
||||
{
|
||||
// example: 'restart':{'days':'TR','time':i7200,'type':'W'}
|
||||
LLSD &restart = result["restart"];
|
||||
std::string type = restart["type"];
|
||||
std::string days = restart["days"];
|
||||
if (type == "W") // weekly || restart.has("days")
|
||||
{
|
||||
LLStringUtil::toLower(days);
|
||||
for (char c : CHECKBOX_PREFIXES)
|
||||
{
|
||||
bool enabled = days.find(c) != std::string::npos;
|
||||
std::string name = c + CHECKBOX_NAME;
|
||||
LLCheckBoxCtrl *chk = floater->getChild<LLCheckBoxCtrl>(name);
|
||||
chk->setValue(enabled);
|
||||
chk->setEnabled(true);
|
||||
}
|
||||
}
|
||||
else // dayly
|
||||
{
|
||||
for (char c : CHECKBOX_PREFIXES)
|
||||
{
|
||||
std::string name = c + CHECKBOX_NAME;
|
||||
LLCheckBoxCtrl* chk = floater->getChild<LLCheckBoxCtrl>(name);
|
||||
chk->setValue(true);
|
||||
chk->setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
S32 seconds_after_midnight = restart["time"].asInteger();
|
||||
S32 hours = seconds_after_midnight / 3600;
|
||||
S32 minutes = (seconds_after_midnight % 3600) / 60;
|
||||
|
||||
if (floater->mPMAMButton->getVisible())
|
||||
{
|
||||
if (hours >= 12)
|
||||
{
|
||||
hours -= 12;
|
||||
floater->mTimeAM = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
floater->mTimeAM = true;
|
||||
}
|
||||
if (hours == 0)
|
||||
{
|
||||
hours = 12; // 0:00 equals 12:00 AM , 1:00 equals 1:00 AM
|
||||
}
|
||||
floater->mPMAMButton->setEnabled(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
floater->mTimeAM = true;
|
||||
}
|
||||
floater->updateAMPM();
|
||||
floater->mHoursLineEditor->setText(llformat("%02d", hours));
|
||||
floater->mHoursLineEditor->setEnabled(true);
|
||||
floater->mMinutesLineEditor->setText(llformat("%02d", minutes));
|
||||
floater->mMinutesLineEditor->setEnabled(true);
|
||||
|
||||
LL_DEBUGS("Region") << "Region restart schedule type: " << type
|
||||
<< " Days: " << days
|
||||
<< " Time:" << hours << ":" << minutes << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterRegionRestartSchedule::setRegionShcheduleCoro(std::string url, LLSD body, LLHandle<LLFloater> handle)
|
||||
{
|
||||
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
|
||||
httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("RegionShcheduleSetter", httpPolicy));
|
||||
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
|
||||
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
|
||||
|
||||
httpOpts->setWantHeaders(true);
|
||||
|
||||
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, body, httpOpts);
|
||||
|
||||
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
|
||||
LLFloaterRegionRestartSchedule* floater = dynamic_cast<LLFloaterRegionRestartSchedule*>(handle.get());
|
||||
if (floater)
|
||||
{
|
||||
floater->closeFloater();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
/**
|
||||
* @file llfloaterregionrestartschedule.h
|
||||
* @author Andrii Kleshchev
|
||||
* @brief LLFloaterRegionRestartSchedule class header file
|
||||
*
|
||||
* $LicenseInfo:firstyear=2024&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2024, 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$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATERREGIONRESTARTSCHEDULE_H
|
||||
#define LL_LLFLOATERREGIONRESTARTSCHEDULE_H
|
||||
|
||||
#include "llfloater.h"
|
||||
|
||||
class LLLineEditor;
|
||||
class LLButton;
|
||||
|
||||
class LLFloaterRegionRestartSchedule : public LLFloater
|
||||
{
|
||||
public:
|
||||
LLFloaterRegionRestartSchedule(LLView* owner);
|
||||
|
||||
virtual ~LLFloaterRegionRestartSchedule();
|
||||
|
||||
bool postBuild() override;
|
||||
void onOpen(const LLSD& key) override;
|
||||
void draw() override;
|
||||
|
||||
void onPMAMButtonClicked();
|
||||
void onSaveButtonClicked();
|
||||
|
||||
void onCommitHours(const LLSD& value);
|
||||
void onCommitMinutes(const LLSD& value);
|
||||
|
||||
void resetUI(bool enable_ui);
|
||||
void updateAMPM();
|
||||
|
||||
static bool canUse();
|
||||
|
||||
protected:
|
||||
static void requestRegionShcheduleCoro(std::string url, LLHandle<LLFloater> handle);
|
||||
static void setRegionShcheduleCoro(std::string url, LLSD body, LLHandle<LLFloater> handle);
|
||||
|
||||
LLHandle<LLView> mOwnerHandle;
|
||||
F32 mContextConeOpacity{ 0.f };
|
||||
|
||||
LLLineEditor* mHoursLineEditor{nullptr};
|
||||
LLLineEditor* mMinutesLineEditor{ nullptr };
|
||||
LLButton* mPMAMButton{ nullptr };
|
||||
LLButton* mSaveButton{ nullptr };
|
||||
LLButton* mCancelButton{ nullptr };
|
||||
|
||||
bool mTimeAM{ true };
|
||||
};
|
||||
|
||||
#endif // LL_LLFLOATERREGIONRESTARTSCHEDULE_H
|
||||
|
|
@ -3276,6 +3276,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
|
|||
capabilityNames.append("VoiceSignalingRequest");
|
||||
capabilityNames.append("ReadOfflineMsgs"); // Requires to respond reliably: AcceptFriendship, AcceptGroupInvite, DeclineFriendship, DeclineGroupInvite
|
||||
capabilityNames.append("RegionObjects");
|
||||
capabilityNames.append("RegionSchedule");
|
||||
capabilityNames.append("RemoteParcelRequest");
|
||||
capabilityNames.append("RenderMaterials");
|
||||
capabilityNames.append("RequestTextureDownload");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,278 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
height="180"
|
||||
layout="topleft"
|
||||
name="floater_region_restart_schedule"
|
||||
help_topic="Preferences_Graphics_Advanced"
|
||||
single_instance="true"
|
||||
save_rect="true"
|
||||
title="REGION RESTART SCHEDULE"
|
||||
width="300">
|
||||
|
||||
<!-- This block shows Advanced Settings -->
|
||||
<floater.string name="am_string">am</floater.string>
|
||||
<floater.string name="pm_string">pm</floater.string>
|
||||
|
||||
<text
|
||||
name="days_general"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
top="15"
|
||||
left="20"
|
||||
width="328">
|
||||
Restart the region on following days:
|
||||
</text>
|
||||
|
||||
<check_box
|
||||
name="s_chk"
|
||||
label=""
|
||||
tool_tip="Sunday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left="60"
|
||||
top_pad="5" />
|
||||
|
||||
<check_box
|
||||
name="m_chk"
|
||||
label=""
|
||||
tool_tip="Monday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left_pad="5"
|
||||
top_delta="0" />
|
||||
|
||||
<check_box
|
||||
name="t_chk"
|
||||
label=""
|
||||
tool_tip="Tuesday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left_pad="5"
|
||||
top_delta="0" />
|
||||
|
||||
<check_box
|
||||
name="w_chk"
|
||||
label=""
|
||||
tool_tip="Wednesday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left_pad="5"
|
||||
top_delta="0" />
|
||||
|
||||
<check_box
|
||||
name="r_chk"
|
||||
label=""
|
||||
tool_tip="Thursday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left_pad="5"
|
||||
top_delta="0" />
|
||||
|
||||
<check_box
|
||||
name="f_chk"
|
||||
label=""
|
||||
tool_tip="Friday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left_pad="5"
|
||||
top_delta="0" />
|
||||
|
||||
<check_box
|
||||
name="a_chk"
|
||||
label=""
|
||||
tool_tip="Saturday"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="20"
|
||||
width="20"
|
||||
left_pad="5"
|
||||
top_delta="0" />
|
||||
|
||||
<text
|
||||
name="su_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_pad="5"
|
||||
left="57"
|
||||
width="25">
|
||||
Su
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="mo_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="0"
|
||||
left_pad="0"
|
||||
width="25">
|
||||
Mo
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="tu_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="0"
|
||||
left_pad="0"
|
||||
width="25">
|
||||
Tu
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="we_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="0"
|
||||
left_pad="1"
|
||||
width="25">
|
||||
We
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="th_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="0"
|
||||
left_pad="0"
|
||||
width="25">
|
||||
Th
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="fr_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="0"
|
||||
left_pad="0"
|
||||
width="25">
|
||||
Fr
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="sa_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="0"
|
||||
left_pad="0"
|
||||
width="25">
|
||||
Sa
|
||||
</text>
|
||||
|
||||
<text
|
||||
name="at_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="right"
|
||||
height="16"
|
||||
top_pad="15"
|
||||
left="30"
|
||||
width="40">
|
||||
at
|
||||
</text>
|
||||
<line_editor
|
||||
name="hours_edt"
|
||||
max_length_bytes="2"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
commit_on_focus_lost="true"
|
||||
height="23"
|
||||
width="40"
|
||||
left_pad="4"
|
||||
top_delta="-5"/>
|
||||
<text
|
||||
name="separator_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
halign="center"
|
||||
height="16"
|
||||
top_delta="5"
|
||||
left_pad="0"
|
||||
width="12">
|
||||
:
|
||||
</text>
|
||||
<line_editor
|
||||
name="minutes_edt"
|
||||
max_length_bytes="2"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
commit_on_focus_lost="true"
|
||||
height="23"
|
||||
width="40"
|
||||
left_pad="0"
|
||||
top_delta="-5"/>
|
||||
<button
|
||||
name="am_pm_btn"
|
||||
label="am"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="23"
|
||||
width="40"
|
||||
left_pad="1"
|
||||
top_delta="0"/>
|
||||
<text
|
||||
name="utc_label"
|
||||
type="string"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
height="16"
|
||||
top_delta="5"
|
||||
left_pad="5"
|
||||
width="22">
|
||||
UTC
|
||||
</text>
|
||||
<button
|
||||
name="save_btn"
|
||||
label="Save"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
top="145"
|
||||
left="25"
|
||||
height="25"
|
||||
width="110"/>
|
||||
<button
|
||||
name="cancel_btn"
|
||||
label="Cancel"
|
||||
follows="bottom|right"
|
||||
layout="topleft"
|
||||
left_pad="20"
|
||||
top_delta="0"
|
||||
height="25"
|
||||
width="110"/>
|
||||
</floater>
|
||||
|
|
@ -270,8 +270,20 @@
|
|||
left="250"
|
||||
name="manage_telehub_btn"
|
||||
top="70"
|
||||
width="150">
|
||||
width="160">
|
||||
<button.commit_callback
|
||||
function="RegionInfo.ManageTelehub" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="20"
|
||||
label="Manage Restart Schedule..."
|
||||
layout="topleft"
|
||||
name="manage_restart_btn"
|
||||
top_pad="5"
|
||||
left_delta="0"
|
||||
width="160">
|
||||
<button.commit_callback
|
||||
function="RegionInfo.ManageRestart" />
|
||||
</button>
|
||||
</panel>
|
||||
|
|
|
|||
Loading…
Reference in New Issue