fixed Bug EXT-1602 'Add new folder' and 'Add new landmark' has same icons that is deceitful

New menubutton has been implemented according to
Viewer 2.0 Design Specification:Places Task Panel.
It generates a menu for AddLandmark and AddFolder options

--HG--
branch : product-engine
meow-7.2.2
Denis Serdjuk 2009-10-27 13:49:06 +02:00
parent 4309277c1b
commit 3b40f9052b
4 changed files with 83 additions and 62 deletions

View File

@ -56,7 +56,7 @@
//static LLRegisterPanelClassWrapper<LLLandmarksPanel> t_landmarks("panel_landmarks");
static const std::string OPTIONS_BUTTON_NAME = "options_gear_btn";
static const std::string ADD_LANDMARK_BUTTON_NAME = "add_landmark_btn";
static const std::string ADD_BUTTON_NAME = "add_btn";
static const std::string ADD_FOLDER_BUTTON_NAME = "add_folder_btn";
static const std::string TRASH_BUTTON_NAME = "trash_btn";
@ -300,6 +300,8 @@ void LLLandmarksPanel::processParcelInfo(const LLParcelData& parcel_data)
panel_pick, panel_places,params));
panel_pick->setSaveCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
panel_pick, panel_places,params));
panel_pick->setCancelCallback(boost::bind(&LLLandmarksPanel::onPickPanelExit,this,
panel_pick, panel_places,params));
}
}
}
@ -433,11 +435,11 @@ void LLLandmarksPanel::initListCommandsHandlers()
mListCommands = getChild<LLPanel>("bottom_panel");
mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this));
mListCommands->childSetAction(ADD_LANDMARK_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddLandmarkButtonClick, this));
mListCommands->childSetAction(ADD_FOLDER_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddFolderButtonClick, this));
mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this));
mListCommands->getChild<LLButton>(ADD_BUTTON_NAME)->setHeldDownCallback(boost::bind(&LLLandmarksPanel::onAddButtonHeldDown, this));
static const LLSD add_landmark_command("add_landmark");
mListCommands->childSetAction(ADD_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onAddAction, this, add_landmark_command));
LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME);
trash_btn->setDragAndDropHandler(boost::bind(&LLLandmarksPanel::handleDragAndDropToTrash, this
, _4 // BOOL drop
@ -453,6 +455,7 @@ void LLLandmarksPanel::initListCommandsHandlers()
mEnableCallbackRegistrar.add("Places.LandmarksGear.Enable", boost::bind(&LLLandmarksPanel::isActionEnabled, this, _2));
mGearLandmarkMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_landmark.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mGearFolderMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_places_gear_folder.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_place_add_button.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
}
@ -488,52 +491,26 @@ void LLLandmarksPanel::onActionsButtonClick()
mGearFolderMenu->getChild<LLMenuItemCallGL>("collapse")->setVisible(cur_item->isOpen());
menu = mGearFolderMenu;
}
if(menu)
showActionMenu(menu,OPTIONS_BUTTON_NAME);
}
void LLLandmarksPanel::onAddButtonHeldDown()
{
showActionMenu(mMenuAdd,ADD_BUTTON_NAME);
}
void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name)
{
if (menu)
{
menu->buildDrawLabels();
menu->updateParent(LLMenuGL::sMenuContainer);
LLView* actions_btn = getChild<LLView>(OPTIONS_BUTTON_NAME);
LLView* spawning_view = getChild<LLView> (spawning_view_name);
S32 menu_x, menu_y;
actions_btn->localPointToOtherView(0,actions_btn->getRect().getHeight(),&menu_x,&menu_y, this);
//show menu in co-ordinates of panel
spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this);
menu_y += menu->getRect().getHeight();
LLMenuGL::showPopup(this, menu, menu_x,menu_y);
}
}
void LLLandmarksPanel::onAddLandmarkButtonClick() const
{
if(LLLandmarkActions::landmarkAlreadyExists())
{
std::string location;
LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
llwarns<<" Landmark already exists at location: "<< location<<llendl;
return;
}
LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
}
void LLLandmarksPanel::onAddFolderButtonClick() const
{
LLFolderViewItem* item = getCurSelectedItem();
if(item && mCurrentSelectedList == mLandmarksInventoryPanel)
{
LLFolderViewEventListener* folder_bridge = NULL;
if(item-> getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK)
{
// for a landmark get parent folder bridge
folder_bridge = item->getParentFolder()->getListener();
}
else if (item-> getListener()->getInventoryType() == LLInventoryType::IT_CATEGORY)
{
// for a folder get its own bridge
folder_bridge = item->getListener();
}
menu_create_inventory_item(mCurrentSelectedList->getRootFolder()
, dynamic_cast<LLFolderBridge*>(folder_bridge)
, LLSD("category")
, gInventory.findCategoryUUIDForType(LLAssetType::AT_LANDMARK)
);
LLMenuGL::showPopup(this, menu, menu_x, menu_y);
}
}
@ -547,11 +524,39 @@ void LLLandmarksPanel::onAddAction(const LLSD& userdata) const
std::string command_name = userdata.asString();
if("add_landmark" == command_name)
{
onAddLandmarkButtonClick();
if(LLLandmarkActions::landmarkAlreadyExists())
{
std::string location;
LLAgentUI::buildLocationString(location, LLAgentUI::LOCATION_FORMAT_FULL);
llwarns<<" Landmark already exists at location: "<< location<<llendl;
return;
}
LLSideTray::getInstance()->showPanel("panel_places", LLSD().insert("type", "create_landmark"));
}
else if ("category" == command_name)
{
onAddFolderButtonClick();
LLFolderViewItem* item = getCurSelectedItem();
if (item && mCurrentSelectedList == mLandmarksInventoryPanel)
{
LLFolderViewEventListener* folder_bridge = NULL;
if (item-> getListener()->getInventoryType()
== LLInventoryType::IT_LANDMARK)
{
// for a landmark get parent folder bridge
folder_bridge = item->getParentFolder()->getListener();
}
else if (item-> getListener()->getInventoryType()
== LLInventoryType::IT_CATEGORY)
{
// for a folder get its own bridge
folder_bridge = item->getListener();
}
menu_create_inventory_item(mCurrentSelectedList->getRootFolder(),
dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD(
"category"), gInventory.findCategoryUUIDForType(
LLAssetType::AT_LANDMARK));
}
}
}

View File

@ -90,8 +90,8 @@ private:
void initListCommandsHandlers();
void updateListCommands();
void onActionsButtonClick();
void onAddLandmarkButtonClick() const;
void onAddFolderButtonClick() const;
void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);
void onAddButtonHeldDown();
void onTrashButtonClick() const;
void onAddAction(const LLSD& command_name) const;
void onClipboardAction(const LLSD& command_name) const;
@ -121,6 +121,7 @@ private:
LLInventorySubTreePanel* mLibraryInventoryPanel;
LLMenuGL* mGearLandmarkMenu;
LLMenuGL* mGearFolderMenu;
LLMenuGL* mMenuAdd;
LLInventorySubTreePanel* mCurrentSelectedList;
LLPanel* mListCommands;

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<menu
layout="topleft"
left="0"
mouse_opaque="false"
name="menu_folder_gear"
visible="false">
<menu_item_call
label="Add Folder"
layout="topleft"
name="add_folder">
<on_click
function="Places.LandmarksGear.Add.Action"
parameter="category" />
<on_enable
function="Places.LandmarksGear.Enable"
parameter="category" />
</menu_item_call>
<menu_item_call
label="Add Landmark"
layout="topleft"
name="add_landmark">
<on_click
function="Places.LandmarksGear.Add.Action"
parameter="add_landmark" />
</menu_item_call>
</menu>

View File

@ -114,22 +114,10 @@
image_disabled="AddItem_Disabled"
layout="topleft"
left_pad="5"
name="add_landmark_btn"
name="add_btn"
picture_style="true"
tool_tip="Add new landmark"
width="18" />
<button
follows="bottom|left"
height="18"
image_selected="AddItem_Press"
image_unselected="AddItem_Off"
image_disabled="AddItem_Disabled"
layout="topleft"
left_pad="5"
name="add_folder_btn"
picture_style="true"
tool_tip="Add new folder"
width="18" />
<dnd_button
follows="bottom|right"
height="18"