SL-14797 Normalize right-click - favorites panel, part #4
parent
59092d052f
commit
53343bc708
|
|
@ -38,6 +38,7 @@
|
|||
#include "lltooltip.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentpicksinfo.h"
|
||||
#include "llavatarnamecache.h"
|
||||
#include "llclipboard.h"
|
||||
#include "llinventorybridge.h"
|
||||
|
|
@ -1194,6 +1195,10 @@ bool LLFavoritesBarCtrl::enableSelected(const LLSD& userdata)
|
|||
{
|
||||
return isClipboardPasteable();
|
||||
}
|
||||
else if (param == "create_pick")
|
||||
{
|
||||
return !LLAgentPicksInfo::getInstance()->isPickLimitReached();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1242,6 +1247,13 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
|
|||
LLFloaterReg::showInstance("world_map", "center");
|
||||
}
|
||||
}
|
||||
else if (action == "create_pick")
|
||||
{
|
||||
LLSD args;
|
||||
args["type"] = "create_pick";
|
||||
args["item_id"] = item->getUUID();
|
||||
LLFloaterSidePanelContainer::showPanel("places", args);
|
||||
}
|
||||
else if (action == "cut")
|
||||
{
|
||||
}
|
||||
|
|
@ -1257,6 +1269,16 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
|
|||
{
|
||||
gInventory.removeItem(mSelectedItemID);
|
||||
}
|
||||
else if (action == "rename")
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = item->getName();
|
||||
|
||||
LLSD payload;
|
||||
payload["id"] = mSelectedItemID;
|
||||
|
||||
LLNotificationsUtil::add("RenameLandmark", args, payload, boost::bind(onRenameCommit, _1, _2));
|
||||
}
|
||||
|
||||
// Pop-up the overflow menu again (it gets hidden whenever the user clicks a context menu item).
|
||||
// See EXT-4217 and STORM-207.
|
||||
|
|
@ -1269,6 +1291,28 @@ void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)
|
|||
}
|
||||
}
|
||||
|
||||
bool LLFavoritesBarCtrl::onRenameCommit(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
if (0 == option)
|
||||
{
|
||||
LLUUID id = notification["payload"]["id"].asUUID();
|
||||
LLInventoryItem *item = gInventory.getItem(id);
|
||||
std::string landmark_name = response["new_name"].asString();
|
||||
LLStringUtil::trim(landmark_name);
|
||||
|
||||
if (!landmark_name.empty() && item && item->getName() != landmark_name)
|
||||
{
|
||||
LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(item);
|
||||
new_item->rename(landmark_name);
|
||||
new_item->updateServer(FALSE);
|
||||
gInventory.updateItem(new_item);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
BOOL LLFavoritesBarCtrl::isClipboardPasteable() const
|
||||
{
|
||||
if (!LLClipboard::instance().hasContents())
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ protected:
|
|||
|
||||
bool enableSelected(const LLSD& userdata);
|
||||
void doToSelected(const LLSD& userdata);
|
||||
static bool onRenameCommit(const LLSD& notification, const LLSD& response);
|
||||
BOOL isClipboardPasteable() const;
|
||||
void pasteFromClipboard() const;
|
||||
|
||||
|
|
|
|||
|
|
@ -512,14 +512,20 @@ void LLLandmarksPanel::processParcelInfo(const LLParcelData& parcel_data)
|
|||
{
|
||||
//this function will be called after user will try to create a pick for selected landmark.
|
||||
// We have to make request to sever to get parcel_id and snaption_id.
|
||||
if(isLandmarkSelected())
|
||||
if(mCreatePickItemId.notNull())
|
||||
{
|
||||
LLFolderViewModelItemInventory* cur_item = getCurSelectedViewModelItem();
|
||||
if (!cur_item) return;
|
||||
LLUUID id = cur_item->getUUID();
|
||||
LLInventoryItem* inv_item = mCurrentSelectedList->getModel()->getItem(id);
|
||||
doActionOnCurSelectedLandmark(boost::bind(
|
||||
&LLLandmarksPanel::doProcessParcelInfo, this, _1, getCurSelectedItem(), inv_item, parcel_data));
|
||||
LLInventoryItem* inv_item = gInventory.getItem(mCreatePickItemId);
|
||||
|
||||
if (inv_item && inv_item->getInventoryType() == LLInventoryType::IT_LANDMARK)
|
||||
{
|
||||
// we are processing response for doCreatePick, landmark should be already loaded
|
||||
LLLandmark* landmark = LLLandmarkActions::getLandmark(inv_item->getUUID());
|
||||
if (landmark)
|
||||
{
|
||||
doProcessParcelInfo(landmark, inv_item, parcel_data);
|
||||
}
|
||||
}
|
||||
mCreatePickItemId.setNull();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1124,7 +1130,11 @@ void LLLandmarksPanel::onCustomAction(const LLSD& userdata)
|
|||
}
|
||||
else if ("create_pick" == command_name)
|
||||
{
|
||||
doActionOnCurSelectedLandmark(boost::bind(&LLLandmarksPanel::doCreatePick, this, _1));
|
||||
LLFolderViewModelItemInventory* cur_item = getCurSelectedViewModelItem();
|
||||
if (cur_item)
|
||||
{
|
||||
doActionOnCurSelectedLandmark(boost::bind(&LLLandmarksPanel::doCreatePick, this, _1, cur_item->getUUID()));
|
||||
}
|
||||
}
|
||||
else if ("share" == command_name && mCurrentSelectedList)
|
||||
{
|
||||
|
|
@ -1344,7 +1354,6 @@ void LLLandmarksPanel::doShowOnMap(LLLandmark* landmark)
|
|||
}
|
||||
|
||||
void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark,
|
||||
LLFolderViewItem* cur_item,
|
||||
LLInventoryItem* inv_item,
|
||||
const LLParcelData& parcel_data)
|
||||
{
|
||||
|
|
@ -1373,7 +1382,7 @@ void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark,
|
|||
|
||||
LLPickData data;
|
||||
data.pos_global = landmark_global_pos;
|
||||
data.name = cur_item->getName();
|
||||
data.name = inv_item->getName();
|
||||
data.desc = inv_item->getDescription();
|
||||
data.snapshot_id = parcel_data.snapshot_id;
|
||||
data.parcel_id = parcel_data.parcel_id;
|
||||
|
|
@ -1393,11 +1402,13 @@ void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark,
|
|||
panel_pick, panel_places,params));
|
||||
}
|
||||
|
||||
void LLLandmarksPanel::doCreatePick(LLLandmark* landmark)
|
||||
void LLLandmarksPanel::doCreatePick(LLLandmark* landmark, const LLUUID &item_id)
|
||||
{
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if (!region) return;
|
||||
|
||||
mCreatePickItemId = item_id;
|
||||
|
||||
LLGlobalVec pos_global;
|
||||
LLUUID region_id;
|
||||
landmark->getGlobalPos(pos_global);
|
||||
|
|
|
|||
|
|
@ -82,6 +82,8 @@ public:
|
|||
|
||||
void updateMenuVisibility(LLUICtrl* menu);
|
||||
|
||||
void doCreatePick(LLLandmark* landmark, const LLUUID &item_id );
|
||||
|
||||
protected:
|
||||
/**
|
||||
* @return true - if current selected panel is not null and selected item is a landmark
|
||||
|
|
@ -160,10 +162,8 @@ private:
|
|||
*/
|
||||
void doShowOnMap(LLLandmark* landmark);
|
||||
void doProcessParcelInfo(LLLandmark* landmark,
|
||||
LLFolderViewItem* cur_item,
|
||||
LLInventoryItem* inv_item,
|
||||
const LLParcelData& parcel_data);
|
||||
void doCreatePick(LLLandmark* landmark);
|
||||
|
||||
private:
|
||||
LLPlacesInventoryPanel* mFavoritesInventoryPanel;
|
||||
|
|
@ -183,6 +183,8 @@ private:
|
|||
accordion_tabs_t mAccordionTabs;
|
||||
|
||||
LLAccordionCtrlTab* mMyLandmarksAccordionTab;
|
||||
|
||||
LLUUID mCreatePickItemId; // item we requested a pick for
|
||||
};
|
||||
|
||||
#endif //LL_LLPANELLANDMARKS_H
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@
|
|||
static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0;
|
||||
static const std::string AGENT_INFO_TYPE = "agent";
|
||||
static const std::string CREATE_LANDMARK_INFO_TYPE = "create_landmark";
|
||||
static const std::string CREATE_PICK_TYPE = "create_pick";
|
||||
static const std::string LANDMARK_INFO_TYPE = "landmark";
|
||||
static const std::string REMOTE_PLACE_INFO_TYPE = "remote_place";
|
||||
static const std::string TELEPORT_HISTORY_INFO_TYPE = "teleport_history";
|
||||
|
|
@ -388,6 +389,21 @@ void LLPanelPlaces::onOpen(const LLSD& key)
|
|||
// Update the buttons at the bottom of the panel
|
||||
updateVerbs();
|
||||
}
|
||||
else if (key_type == CREATE_PICK_TYPE)
|
||||
{
|
||||
LLUUID item_id = key["item_id"];
|
||||
|
||||
LLLandmarksPanel* landmarks_panel =
|
||||
dynamic_cast<LLLandmarksPanel*>(mTabContainer->getPanelByName("Landmarks"));
|
||||
if (landmarks_panel && item_id.notNull())
|
||||
{
|
||||
LLLandmark* landmark = LLLandmarkActions::getLandmark(item_id, boost::bind(&LLLandmarksPanel::doCreatePick, landmarks_panel, _1, item_id));
|
||||
if (landmark)
|
||||
{
|
||||
landmarks_panel->doCreatePick(landmark, item_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // "create_landmark"
|
||||
{
|
||||
mFilterEditor->clear();
|
||||
|
|
|
|||
|
|
@ -36,6 +36,17 @@
|
|||
function="Favorites.DoToSelected"
|
||||
parameter="copy_slurl" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Create Pick"
|
||||
layout="topleft"
|
||||
name="create_pick">
|
||||
<menu_item_call.on_click
|
||||
function="Favorites.DoToSelected"
|
||||
parameter="create_pick" />
|
||||
<menu_item_call.on_enable
|
||||
function="Favorites.EnableSelected"
|
||||
parameter="create_pick" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
|
|
@ -59,10 +70,14 @@
|
|||
function="Favorites.EnableSelected"
|
||||
parameter="can_paste" />
|
||||
</menu_item_call>
|
||||
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
|
||||
<menu_item_call
|
||||
label="Rename"
|
||||
layout="topleft"
|
||||
name="rename">
|
||||
<menu_item_call.on_click
|
||||
function="Favorites.DoToSelected"
|
||||
parameter="rename" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Delete"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -3141,7 +3141,30 @@ See https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries
|
|||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
label="Rename Landmark"
|
||||
name="RenameLandmark"
|
||||
type="alertmodal">
|
||||
Choose a new name for [NAME]
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<input name="new_name" type="text" width="300">
|
||||
[NAME]
|
||||
</input>
|
||||
<button
|
||||
default="true"
|
||||
index="0"
|
||||
name="OK"
|
||||
text="OK"/>
|
||||
<button
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="RemoveFromFriends"
|
||||
|
|
|
|||
Loading…
Reference in New Issue