Newer
Older
Steven Bennetts
committed
/**
* @file llpanelprofile.cpp
* @brief Profile panel implementation
*
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
Steven Bennetts
committed
* Second Life Viewer Source Code
* Copyright (C) 2010, 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.
Steven Bennetts
committed
*
* 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.
Steven Bennetts
committed
*
* 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
Steven Bennetts
committed
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
Steven Bennetts
committed
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "llpanelprofile.h"
Steven Bennetts
committed
#include "llagent.h"
James Cook
committed
#include "llfloaterreg.h"
#include "llcommandhandler.h"
#include "llpanelpicks.h"
#include "lltabcontainer.h"
#include "llviewercontrol.h"
Steven Bennetts
committed
static const std::string PANEL_PICKS = "panel_picks";
static const std::string PANEL_PROFILE = "panel_profile";
std::string getProfileURL(const std::string& agent_name)
{
std::string url = gSavedSettings.getString("WebProfileURL");
LLSD subs;
subs["AGENT_NAME"] = agent_name;
url = LLWeb::expandURLSubstitutions(url,subs);
LLStringUtil::toLower(url);
return url;
}
class LLProfileHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
LLProfileHandler() : LLCommandHandler("profile", UNTRUSTED_THROTTLE) { }
bool handle(const LLSD& params, const LLSD& query_map,
LLMediaCtrl* web)
{
if (params.size() < 1) return false;
std::string agent_name = params[0];
llinfos << "Profile, agent_name " << agent_name << llendl;
std::string url = getProfileURL(agent_name);
return true;
}
};
LLProfileHandler gProfileHandler;
class LLAgentHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
LLAgentHandler() : LLCommandHandler("agent", UNTRUSTED_THROTTLE) { }
James Cook
committed
LLUUID avatar_id;
if (!avatar_id.set(params[0], FALSE))
const std::string verb = params[1].asString();
if (verb == "about")
James Cook
committed
LLAvatarActions::showProfile(avatar_id);
return true;
}
if (verb == "inspect")
James Cook
committed
{
LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", avatar_id));
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
if (verb == "im")
{
LLAvatarActions::startIM(avatar_id);
return true;
}
if (verb == "pay")
{
LLAvatarActions::pay(avatar_id);
return true;
}
if (verb == "offerteleport")
{
LLAvatarActions::offerTeleport(avatar_id);
return true;
}
if (verb == "requestfriend")
{
LLAvatarActions::requestFriendshipDialog(avatar_id);
return true;
}
if (verb == "mute")
{
if (! LLAvatarActions::isBlocked(avatar_id))
{
LLAvatarActions::toggleBlock(avatar_id);
}
return true;
}
if (verb == "unmute")
{
if (LLAvatarActions::isBlocked(avatar_id))
{
LLAvatarActions::toggleBlock(avatar_id);
}
return true;
}
return false;
}
};
LLAgentHandler gAgentHandler;
Steven Bennetts
committed
LLPanelProfile::LLPanelProfile()
: LLPanel()
, mTabCtrl(NULL)
, mAvatarId(LLUUID::null)
Steven Bennetts
committed
{
}
BOOL LLPanelProfile::postBuild()
{
mTabCtrl = getChild<LLTabContainer>("tabs");
getTabCtrl()->setCommitCallback(boost::bind(&LLPanelProfile::onTabSelected, this, _2));
Steven Bennetts
committed
LLPanelPicks* panel_picks = findChild<LLPanelPicks>(PANEL_PICKS);
Steven Bennetts
committed
panel_picks->setProfilePanel(this);
getTabContainer()[PANEL_PICKS] = panel_picks;
getTabContainer()[PANEL_PROFILE] = findChild<LLPanelAvatarProfile>(PANEL_PROFILE);
Steven Bennetts
committed
return TRUE;
}
void LLPanelProfile::onOpen(const LLSD& key)
{
// open the desired panel
if (key.has("open_tab_name"))
{
getTabContainer()[PANEL_PICKS]->onClosePanel();
// onOpen from selected panel will be called from onTabSelected callback
getTabCtrl()->selectTabByName(key["open_tab_name"]);
}
else
{
getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
}
// support commands to open further pieces of UI
if (key.has("show_tab_panel"))
{
std::string panel = key["show_tab_panel"].asString();
if (panel == "create_classified")
{
LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
if (picks)
{
picks->createNewClassified();
}
}
else if (panel == "classified_details")
{
LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
if (picks)
{
LLSD params = key;
params.erase("show_tab_panel");
params.erase("open_tab_name");
picks->openClassifiedInfo(params);
else if (panel == "edit_classified")
{
LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
if (picks)
{
LLSD params = key;
params.erase("show_tab_panel");
params.erase("open_tab_name");
picks->openClassifiedEdit(params);
}
}
}
Steven Bennetts
committed
//*TODO redo panel toggling
Vadim Savchuk
committed
void LLPanelProfile::togglePanel(LLPanel* panel, const LLSD& key)
Steven Bennetts
committed
{
// TRUE - we need to open/expand "panel"
bool expand = getChildList()->front() != panel; // mTabCtrl->getVisible();
Steven Bennetts
committed
if (expand)
{
Vadim Savchuk
committed
openPanel(panel, key);
Steven Bennetts
committed
}
else
{
closePanel(panel);
getTabCtrl()->getCurrentPanel()->onOpen(getAvatarId());
Steven Bennetts
committed
}
}
void LLPanelProfile::onTabSelected(const LLSD& param)
{
std::string tab_name = param.asString();
if (NULL != getTabContainer()[tab_name])
Steven Bennetts
committed
{
getTabContainer()[tab_name]->onOpen(getAvatarId());
Steven Bennetts
committed
}
}
void LLPanelProfile::setAllChildrenVisible(BOOL visible)
{
const child_list_t* child_list = getChildList();
child_list_const_iter_t child_it = child_list->begin();
for (; child_it != child_list->end(); ++child_it)
Steven Bennetts
committed
{
LLView* viewp = *child_it;
viewp->setVisible(visible);
}
}
Steven Bennetts
committed
void LLPanelProfile::openPanel(LLPanel* panel, const LLSD& params)
{
if (panel->getParent() != this)
{
addChild(panel);
}
else
{
sendChildToFront(panel);
}
panel->setVisible(TRUE);
panel->onOpen(params);
LLRect new_rect = getRect();
panel->reshape(new_rect.getWidth(), new_rect.getHeight());
new_rect.setLeftTopAndSize(0, new_rect.getHeight(), new_rect.getWidth(), new_rect.getHeight());
panel->setRect(new_rect);
}
void LLPanelProfile::closePanel(LLPanel* panel)
{
panel->setVisible(FALSE);
if (panel->getParent() == this)
{
removeChild(panel);
}
}
S32 LLPanelProfile::notifyParent(const LLSD& info)
std::string action = info["action"];
// lets update Picks list after Pick was saved
Dmitry Zaporozhan
committed