DEV-44351: Add a new secondlife:///app/classified/create SLapp.

Also cleaned up the code for the existing app/classified/{UUID}
support. Much nicer now.
meow-7.2.2
Lynx Linden 2009-12-16 12:26:52 +00:00
parent 88291b378e
commit 3eea3281af
3 changed files with 79 additions and 41 deletions

View File

@ -57,7 +57,6 @@
#include "llpanelprofile.h"
#include "llpanelpick.h"
#include "llpanelclassified.h"
#include "llpanelprofileview.h"
#include "llsidetray.h"
static const std::string XML_BTN_NEW = "new_btn";
@ -88,6 +87,14 @@ public:
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
{
// handle app/classified/create urls first
if (params.size() == 1 && params[0].asString() == "create")
{
createClassified();
return true;
}
// then handle the general app/classified/{UUID}/{CMD} urls
if (params.size() < 2)
{
return false;
@ -114,6 +121,31 @@ public:
return false;
}
void createClassified()
{
// open the new classified panel on the Me > Picks sidetray
LLSD params;
params["id"] = gAgent.getID();
params["open_tab_name"] = "panel_picks";
params["show_tab_panel"] = "create_classified";
LLSideTray::getInstance()->showPanel("panel_me", params);
}
void openClassified(LLAvatarClassifiedInfo* c_info)
{
// open the classified info panel on the Me > Picks sidetray
LLSD params;
params["id"] = c_info->creator_id;
params["open_tab_name"] = "panel_picks";
params["show_tab_panel"] = "classified_details";
params["classified_id"] = c_info->classified_id;
params["classified_avatar_id"] = c_info->creator_id;
params["classified_snapshot_id"] = c_info->snapshot_id;
params["classified_name"] = c_info->name;
params["classified_desc"] = c_info->description;
LLSideTray::getInstance()->showPanel("panel_profile_view", params);
}
/*virtual*/ void processProperties(void* data, EAvatarProcessorType type)
{
if (APT_CLASSIFIED_INFO != type)
@ -128,22 +160,8 @@ public:
return;
}
// open the people profile page for the classified's owner
LLSD params;
params["id"] = c_info->creator_id;
params["classified"] = c_info->classified_id;
params["open_tab_name"] = "panel_profile";
LLPanelProfileView *profile = dynamic_cast<LLPanelProfileView*>(LLSideTray::getInstance()->showPanel("panel_profile_view", params));
// then open the classified panel on this user's profile panel
if (profile)
{
LLPanelPicks* panel_picks = profile->getChild<LLPanelPicks>("panel_picks");
if (panel_picks)
{
panel_picks->openClassifiedInfo(c_info);
}
}
// open the detail side tray for this classified
openClassified(c_info);
// remove our observer now that we're done
mClassifiedIds.erase(c_info->classified_id);
@ -693,33 +711,24 @@ void LLPanelPicks::openClassifiedInfo()
LLClassifiedItem* c_item = getSelectedClassifiedItem();
createClassifiedInfoPanel();
LLSD params;
params["classified_id"] = c_item->getClassifiedId();
params["avatar_id"] = c_item->getAvatarId();
params["snapshot_id"] = c_item->getSnapshotId();
params["name"] = c_item->getClassifiedName();
params["desc"] = c_item->getDescription();
getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
openClassifiedInfo(c_item->getClassifiedId(), c_item->getAvatarId(),
c_item->getSnapshotId(), c_item->getClassifiedName(),
c_item->getDescription());
}
void LLPanelPicks::openClassifiedInfo(LLAvatarClassifiedInfo *c_info)
void LLPanelPicks::openClassifiedInfo(const LLUUID &classified_id,
const LLUUID &avatar_id,
const LLUUID &snapshot_id,
const std::string &name, const std::string &desc)
{
if (! c_info)
{
return;
}
createClassifiedInfoPanel();
LLSD params;
params["classified_id"] = c_info->classified_id;
params["avatar_id"] = c_info->creator_id;
params["snapshot_id"] = c_info->snapshot_id;
params["name"] = c_info->name;
params["desc"] = c_info->description;
params["classified_id"] = classified_id;
params["avatar_id"] = avatar_id;
params["snapshot_id"] = snapshot_id;
params["name"] = name;
params["desc"] = desc;
getProfilePanel()->openPanel(mPanelClassifiedInfo, params);
}

View File

@ -86,9 +86,6 @@ public:
// parent panels failed to work (picks related code was in my profile panel)
void setProfilePanel(LLPanelProfile* profile_panel);
// display the info panel for the given classified
void openClassifiedInfo(LLAvatarClassifiedInfo *c_info);
protected:
/*virtual*/void updateButtons();
@ -120,6 +117,10 @@ private:
void openPickInfo();
void openClassifiedInfo();
void openClassifiedInfo(const LLUUID &classified_id, const LLUUID &avatar_id,
const LLUUID &snapshot_id, const std::string &name,
const std::string &desc);
friend class LLPanelProfile;
void showAccordion(const std::string& name, bool show);

View File

@ -144,6 +144,7 @@ BOOL LLPanelProfile::postBuild()
void LLPanelProfile::onOpen(const LLSD& key)
{
// open the desired panel
if (key.has("open_tab_name"))
{
getTabContainer()[PANEL_PICKS]->onClosePanel();
@ -155,6 +156,33 @@ void LLPanelProfile::onOpen(const LLSD& key)
{
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")
{
LLUUID classified_id = key["classified_id"].asUUID();
LLUUID avatar_id = key["classified_avatar_id"].asUUID();
LLUUID snapshot_id = key["classified_snapshot_id"].asUUID();
std::string name = key["classified_name"].asString();
std::string desc = key["classified_desc"].asString();
LLPanelPicks* picks = dynamic_cast<LLPanelPicks *>(getTabContainer()[PANEL_PICKS]);
if (picks)
{
picks->openClassifiedInfo(classified_id, avatar_id, snapshot_id, name, desc);
}
}
}
}
//*TODO redo panel toggling