Skip to content
Snippets Groups Projects
Commit 24c55c9a authored by Aimee Linden's avatar Aimee Linden
Browse files

EXT-7337 WIP Implemented prototype voice font preview floater.

parent 75f6e32f
No related branches found
No related tags found
No related merge requests found
......@@ -214,6 +214,7 @@ set(viewer_SOURCE_FILES
llfloaterurldisplay.cpp
llfloaterurlentry.cpp
llfloatervoicedevicesettings.cpp
llfloatervoiceeffect.cpp
llfloaterwater.cpp
llfloaterwhitelistentry.cpp
llfloaterwindlight.cpp
......@@ -731,6 +732,7 @@ set(viewer_HEADER_FILES
llfloaterurldisplay.h
llfloaterurlentry.h
llfloatervoicedevicesettings.h
llfloatervoiceeffect.h
llfloaterwater.h
llfloaterwhitelistentry.h
llfloaterwindlight.h
......
/**
* @file llfloatervoiceeffect.cpp
* @brief Selection and preview of voice effect.
*
* $LicenseInfo:firstyear=2010&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llfloatervoiceeffect.h"
#include "llscrolllistctrl.h"
#include "lltrans.h"
LLFloaterVoiceEffect::LLFloaterVoiceEffect(const LLSD& key)
: LLFloater(key)
{
mCommitCallbackRegistrar.add("VoiceEffect.Record", boost::bind(&LLFloaterVoiceEffect::onClickRecord, this));
mCommitCallbackRegistrar.add("VoiceEffect.Play", boost::bind(&LLFloaterVoiceEffect::onClickPlay, this));
}
// virtual
LLFloaterVoiceEffect::~LLFloaterVoiceEffect()
{
if(LLVoiceClient::instanceExists())
{
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (effect_interface)
{
effect_interface->removeObserver(this);
}
}
}
// virtual
BOOL LLFloaterVoiceEffect::postBuild()
{
setDefaultBtn("record_btn");
mVoiceEffectList = getChild<LLScrollListCtrl>("voice_effect_list");
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (effect_interface)
{
effect_interface->addObserver(this);
}
update();
return TRUE;
}
// virtual
void LLFloaterVoiceEffect::onClose(bool app_quitting)
{
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (effect_interface)
{
effect_interface->clearPreviewBuffer();
}
}
void LLFloaterVoiceEffect::update()
{
if (!mVoiceEffectList)
{
return;
}
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (!effect_interface) // || !LLVoiceClient::instance().isVoiceWorking())
{
mVoiceEffectList->setEnabled(false);
return;
}
mVoiceEffectList->deleteAllItems();
LLSD element;
element["id"] = LLUUID::null;
element["columns"][1]["column"] = "name";
element["columns"][1]["value"] = getString("no_voice_effect");
mVoiceEffectList->addElement(element, ADD_BOTTOM);
const voice_effect_list_t& effect_list = effect_interface->getVoiceEffectList();
if (!effect_list.empty())
{
for (voice_effect_list_t::const_iterator it = effect_list.begin(); it != effect_list.end(); ++it)
{
LLSD element;
element["id"] = it->second;
element["columns"][1]["column"] = "name";
element["columns"][1]["value"] = it->first;
mVoiceEffectList->addElement(element, ADD_BOTTOM);
}
}
mVoiceEffectList->setValue(effect_interface->getVoiceEffect());
mVoiceEffectList->setEnabled(true);
bool recording = effect_interface->isPreviewRecording();
getChild<LLButton>("record_btn")->setVisible(!recording);
getChild<LLButton>("record_stop_btn")->setVisible(recording);
getChild<LLButton>("play_btn")->setEnabled(effect_interface->isPreviewReady());
bool playing = effect_interface->isPreviewPlaying();
getChild<LLButton>("play_btn")->setVisible(!playing);
getChild<LLButton>("play_stop_btn")->setVisible(playing);
}
// virtual
void LLFloaterVoiceEffect::onVoiceEffectChanged(bool new_effects)
{
update();
}
void LLFloaterVoiceEffect::onClickRecord()
{
LL_DEBUGS("Voice") << "Record clicked" << LL_ENDL;
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (effect_interface) // && LLVoiceClient::instance().isVoiceWorking())
{
bool record = !effect_interface->isPreviewRecording();
effect_interface->recordPreviewBuffer(record);
getChild<LLButton>("record_btn")->setVisible(!record);
getChild<LLButton>("record_stop_btn")->setVisible(record);
}
}
void LLFloaterVoiceEffect::onClickPlay()
{
LL_DEBUGS("Voice") << "Play clicked" << LL_ENDL;
if (!mVoiceEffectList)
{
return;
}
const LLUUID& effect_id = mVoiceEffectList->getCurrentID();
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (effect_interface) // && LLVoiceClient::instance().isVoiceWorking())
{
bool play = !effect_interface->isPreviewPlaying();
effect_interface->playPreviewBuffer(play, effect_id);
getChild<LLButton>("play_btn")->setVisible(!play);
getChild<LLButton>("play_stop_btn")->setVisible(play);
}
}
/**
* @file llfloatervoiceeffect.h
* @brief Selection and preview of voice effects.
*
* $LicenseInfo:firstyear=2010&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#ifndef LL_LLFLOATERVOICEEFFECT_H
#define LL_LLFLOATERVOICEEFFECT_H
#include "llfloater.h"
#include "llvoiceclient.h"
class LLButton;
class LLScrollListCtrl;
class LLFloaterVoiceEffect
: public LLFloater
, public LLVoiceEffectObserver
{
public:
LOG_CLASS(LLFloaterVoiceEffect);
LLFloaterVoiceEffect(const LLSD& key);
virtual ~LLFloaterVoiceEffect();
virtual BOOL postBuild();
virtual void onClose(bool app_quitting);
private:
void update();
/// Called by voice effect provider when voice effect list is changed.
virtual void onVoiceEffectChanged(bool new_effects);
void onClickRecord();
void onClickPlay();
// void onClickActivate();
LLUUID mSelectedID;
LLScrollListCtrl* mVoiceEffectList;
};
#endif
......@@ -36,8 +36,8 @@
#include "llpanelvoiceeffect.h"
#include "llcombobox.h"
#include "llfloaterreg.h"
#include "llpanel.h"
#include "llvoicechannel.h"
#include "llvoiceclient.h"
static LLRegisterPanelClassWrapper<LLPanelVoiceEffect> t_panel_voice_effect("panel_voice_effect");
......@@ -64,7 +64,6 @@ LLPanelVoiceEffect::~LLPanelVoiceEffect()
BOOL LLPanelVoiceEffect::postBuild()
{
mVoiceEffectCombo = getChild<LLComboBox>("voice_effect");
update();
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
if (effect_interface)
......@@ -72,6 +71,8 @@ BOOL LLPanelVoiceEffect::postBuild()
effect_interface->addObserver(this);
}
update();
return TRUE;
}
......@@ -91,12 +92,13 @@ void LLPanelVoiceEffect::onCommitVoiceEffect()
LLSD value = mVoiceEffectCombo->getValue();
if (value.asInteger() == GET_VOICE_EFFECTS)
{
LL_DEBUGS("Voice") << "GET VOICE FONTS!" << LL_ENDL;
// Open the voice morphing info web page
LLWeb::loadURL(getString("get_voice_effects_url"));
}
else if (value.asInteger() == PREVIEW_VOICE_EFFECTS)
{
LL_DEBUGS("Voice") << "PREVIEW VOICE FONTS!" << LL_ENDL;
// Open the voice effects management floater
LLFloaterReg::showInstance("voice_effect");
}
else
{
......
......@@ -102,6 +102,7 @@
#include "llfloateruipreview.h"
#include "llfloaterurldisplay.h"
#include "llfloatervoicedevicesettings.h"
#include "llfloatervoiceeffect.h"
#include "llfloaterwater.h"
#include "llfloaterwhitelistentry.h"
#include "llfloaterwindlight.h"
......@@ -253,7 +254,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceEffect>);
LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWhiteListEntry>);
LLFloaterWindowSizeUtil::registerFloater();
LLFloaterReg::add("world_map", "floater_world_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWorldMap>);
......
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater
legacy_header_height="18"
can_resize="true"
height="465"
name="voice_effects"
help_topic="voice_effects"
title="VOICE EFFECTS"
background_visible="true"
follows="all"
label="Places"
layout="topleft"
min_height="350"
min_width="240"
width="313">
<string name="no_voice_effect">
No Voice Effect
</string>
<scroll_list
bottom_delta="400"
draw_heading="true"
follows="all"
layout="topleft"
left="0"
multi_select="false"
top="20"
name="voice_effect_list">
<scroll_list.columns
label="New"
name="new"
width="48" />
<scroll_list.columns
label="Name"
name="name"
width="153" />
<scroll_list.columns
label="Expires"
name="expires"
width="100" />
<scroll_list.columns
label=""
name="key"
width="-1" />
</scroll_list>
<panel
background_visible="true"
bevel_style="none"
top_pad="0"
follows="left|right|bottom"
height="30"
label="bottom_panel"
layout="topleft"
left="0"
name="bottom_panel"
width="313">
<!--
<button
follows="bottom|left"
font="SansSerifBigBold"
height="10"
image_hover_selected="Activate_Checkmark"
image_selected="Activate_Checkmark"
image_unselected="Activate_Checkmark"
layout="topleft"
left="10"
name="activate_btn"
tool_tip="Activate/Deactivate selected voice effect"
top="10"
width="10"
<button.commit_callback
function="VoiceEffect.Activate" />
</button>
-->
</panel>
<button
follows="left|bottom"
height="23"
label="Record"
layout="topleft"
left="6"
name="record_btn"
top_pad="5"
width="83">
<button.commit_callback
function="VoiceEffect.Record" />
</button>
<button
follows="left|bottom"
height="23"
label="Stop"
layout="topleft"
left_delta="0"
name="record_stop_btn"
top_delta="0"
width="83">
<button.commit_callback
function="VoiceEffect.Record" />
</button>
<button
follows="left|bottom"
height="23"
label="Play"
layout="topleft"
left_pad="6"
name="play_btn"
top_delta="0"
width="83">
<button.commit_callback
function="VoiceEffect.Play" />
</button>
<button
follows="left|bottom"
height="23"
label="Stop"
layout="topleft"
left_delta="0"
name="play_stop_btn"
top_delta="0"
width="83">
<button.commit_callback
function="VoiceEffect.Play" />
</button>
</floater>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment