BOOL LLPlacesFolderView::handleRightMouseDown(S32 x, S32 y, MASK mask) { // let children to change selection first childrenHandleRightMouseDown(x, y, mask); mParentLandmarksPanel->setCurrentSelectedList((LLPlacesInventoryPanel*)getParentPanel()); // then determine its type and set necessary menu handle if (getCurSelectedItem()) { LLInventoryType::EType inventory_type = getCurSelectedItem()->getListener()->getInventoryType(); inventory_type_menu_handle_t::iterator it_handle = mMenuHandlesByInventoryType.find(inventory_type); if (it_handle != mMenuHandlesByInventoryType.end()) { mPopupMenuHandle = (*it_handle).second; } else { llwarns << "Requested menu handle for non-setup inventory type: " << inventory_type << llendl; } } return LLFolderView::handleRightMouseDown(x, y, mask); }
LLFolderViewModelItemInventory* LLLandmarksPanel::getCurSelectedViewModelItem() const { LLFolderViewItem* cur_item = getCurSelectedItem(); if (cur_item) { return static_cast<LLFolderViewModelItemInventory*>(cur_item->getViewModelItem()); } return NULL; }
//virtual void LLLandmarksPanel::onShowProfile() { LLFolderViewItem* cur_item = getCurSelectedItem(); if(!cur_item) return; cur_item->getListener()->performAction(mCurrentSelectedList->getModel(),"about"); }
bool LLLandmarksPanel::isLandmarkSelected() const { LLFolderViewItem* current_item = getCurSelectedItem(); if(current_item && current_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK) { return true; } return false; }
void LLLandmarksPanel::onAddAction(const LLSD& userdata) const { LLFolderViewModelItemInventory* view_model = getCurSelectedViewModelItem(); LLFolderViewItem* item = getCurSelectedItem(); std::string command_name = userdata.asString(); if("add_landmark" == command_name) { LLViewerInventoryItem* landmark = LLLandmarkActions::findLandmarkForAgentPos(); if(landmark) { LLNotificationsUtil::add("LandmarkAlreadyExists"); } else { LLFloaterSidePanelContainer::showPanel("places", LLSD().with("type", "create_landmark")); } } else if ("category" == command_name) { if (item && mCurrentSelectedList == mLandmarksInventoryPanel) { LLFolderViewModelItem* folder_bridge = NULL; if (view_model->getInventoryType() == LLInventoryType::IT_LANDMARK) { // for a landmark get parent folder bridge folder_bridge = item->getParentFolder()->getViewModelItem(); } else if (view_model->getInventoryType() == LLInventoryType::IT_CATEGORY) { // for a folder get its own bridge folder_bridge = view_model; } menu_create_inventory_item(mCurrentSelectedList, dynamic_cast<LLFolderBridge*> (folder_bridge), LLSD( "category"), gInventory.findCategoryUUIDForType( LLFolderType::FT_LANDMARK)); } else { //in case My Landmarks tab is completely empty (thus cannot be determined as being selected) menu_create_inventory_item(mLandmarksInventoryPanel, NULL, LLSD("category"), gInventory.findCategoryUUIDForType(LLFolderType::FT_LANDMARK)); if (mMyLandmarksAccordionTab) { mMyLandmarksAccordionTab->changeOpenClose(false); } } } }
void LLLandmarksPanel::doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb) { LLFolderViewItem* cur_item = getCurSelectedItem(); if(cur_item && cur_item->getListener()->getInventoryType() == LLInventoryType::IT_LANDMARK) { LLLandmark* landmark = LLLandmarkActions::getLandmark(cur_item->getListener()->getUUID(), cb); if (landmark) { cb(landmark); } } }
// virtual 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()) { 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)); } }
// virtual void LLLandmarksPanel::onTeleport() { LLFolderViewItem* current_item = getCurSelectedItem(); if (!current_item) { llwarns << "There are no selected list. No actions are performed." << llendl; return; } LLFolderViewEventListener* listenerp = current_item->getListener(); if (listenerp->getInventoryType() == LLInventoryType::IT_LANDMARK) { listenerp->openItem(); } }
void LLLandmarksPanel::onClipboardAction(const LLSD& userdata) const { if(!mCurrentSelectedList) return; std::string command_name = userdata.asString(); if("copy_slurl" == command_name) { LLFolderViewItem* cur_item = getCurSelectedItem(); if(cur_item) LLLandmarkActions::copySLURLtoClipboard(cur_item->getListener()->getUUID()); } else if ( "paste" == command_name) { mCurrentSelectedList->getRootFolder()->paste(); } else if ( "cut" == command_name) { mCurrentSelectedList->getRootFolder()->cut(); } else { mCurrentSelectedList->getRootFolder()->doToSelected(mCurrentSelectedList->getModel(),command_name); } }
bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const { std::string command_name = userdata.asString(); LLFolderView* root_folder_view = mCurrentSelectedList ? mCurrentSelectedList->getRootFolder() : NULL; if ("collapse_all" == command_name) { bool disable_collapse_all = !has_expanded_folders(mFavoritesInventoryPanel->getRootFolder()) && !has_expanded_folders(mLandmarksInventoryPanel->getRootFolder()) && !has_expanded_folders(mMyInventoryPanel->getRootFolder()) && !has_expanded_folders(mLibraryInventoryPanel->getRootFolder()); if (disable_collapse_all) { for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter) { if ((*iter)->isExpanded()) { disable_collapse_all = false; break; } } } return !disable_collapse_all; } else if ("expand_all" == command_name) { bool disable_expand_all = !has_collapsed_folders(mFavoritesInventoryPanel->getRootFolder()) && !has_collapsed_folders(mLandmarksInventoryPanel->getRootFolder()) && !has_collapsed_folders(mMyInventoryPanel->getRootFolder()) && !has_collapsed_folders(mLibraryInventoryPanel->getRootFolder()); if (disable_expand_all) { for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter) { if (!(*iter)->isExpanded()) { disable_expand_all = false; break; } } } return !disable_expand_all; } else if ("sort_by_date" == command_name) { // disable "sort_by_date" for Favorites accordion because // it has its own items order. EXT-1758 if (mCurrentSelectedList == mFavoritesInventoryPanel) { return false; } } else if ( "paste" == command_name || "cut" == command_name || "copy" == command_name || "delete" == command_name || "collapse" == command_name || "expand" == command_name ) { if (!root_folder_view) return false; std::set<LLFolderViewItem*> selected_uuids = root_folder_view->getSelectionList(); // Allow to execute the command only if it can be applied to all selected items. for (std::set<LLFolderViewItem*>::const_iterator iter = selected_uuids.begin(); iter != selected_uuids.end(); ++iter) { LLFolderViewItem* item = *iter; if (!item) return false; if (!canItemBeModified(command_name, item)) return false; } return true; } else if ( "teleport" == command_name || "more_info" == command_name || "show_on_map" == command_name || "copy_slurl" == command_name || "rename" == command_name ) { // disable some commands for multi-selection. EXT-1757 bool is_single_selection = root_folder_view && root_folder_view->getSelectedCount() == 1; if (!is_single_selection) { return false; } if ("show_on_map" == command_name) { LLFolderViewModelItemInventory* cur_item = getCurSelectedViewModelItem(); if (!cur_item) return false; LLViewerInventoryItem* inv_item = dynamic_cast<LLViewerInventoryItem*>(cur_item->getInventoryObject()); if (!inv_item) return false; LLUUID asset_uuid = inv_item->getAssetUUID(); if (asset_uuid.isNull()) return false; // Disable "Show on Map" if landmark loading is in progress. return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid); } else if ("rename" == command_name) { LLFolderViewItem* selected_item = getCurSelectedItem(); if (!selected_item) return false; return canItemBeModified(command_name, selected_item); } return true; } else if("category" == command_name) { // we can add folder only in Landmarks Accordion if (mCurrentSelectedList == mLandmarksInventoryPanel) { // ... but except Received folder return !isReceivedFolderSelected(); } //"Add a folder" is enabled by default (case when My Landmarks is empty) else return true; } else if("create_pick" == command_name) { if (mCurrentSelectedList) { std::set<LLFolderViewItem*> selection = mCurrentSelectedList->getRootFolder()->getSelectionList(); if (!selection.empty()) { return ( 1 == selection.size() && !LLAgentPicksInfo::getInstance()->isPickLimitReached() ); } } return false; } else { LL_WARNS() << "Unprocessed command has come: " << command_name << LL_ENDL; } return true; }