diff --git a/ryzom/client/src/interface_v3/action_handler_item.cpp b/ryzom/client/src/interface_v3/action_handler_item.cpp index 02f8d1633..2e55531fe 100644 --- a/ryzom/client/src/interface_v3/action_handler_item.cpp +++ b/ryzom/client/src/interface_v3/action_handler_item.cpp @@ -1079,41 +1079,6 @@ class CCanDropToExchange : public IActionHandler }; REGISTER_ACTION_HANDLER (CCanDropToExchange, "can_drop_to_exchange"); -// ********************************************************************************************************** -class CCanDropToHotbar : public IActionHandler -{ - virtual void execute (CCtrlBase *pCaller, const string &Params) - { - CInterfaceManager *pIM = CInterfaceManager::getInstance(); - nlinfo("hey"); - string src = getParam(Params, "src"); - CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src); - CDBCtrlSheet *pCSSrc = dynamic_cast(pElt); - CDBCtrlSheet *pCSDst = dynamic_cast(pCaller); - if (!pCSSrc || !pCSDst) return; - - // Exchange can only be done from bag to exchange inventories - uint32 srcInventory = pCSSrc->getSecondIndexInDB(); - if ( - (srcInventory == INVENTORIES::bag || - srcInventory == INVENTORIES::pet_animal1 || - srcInventory == INVENTORIES::pet_animal2 || - srcInventory == INVENTORIES::pet_animal3 || - srcInventory == INVENTORIES::pet_animal4 || - srcInventory == INVENTORIES::pet_animal5 || - srcInventory == INVENTORIES::pet_animal6 || - srcInventory == INVENTORIES::pet_animal7 || - srcInventory == INVENTORIES::player_room) - && getInventory().isInventoryAvailable((INVENTORIES::TInventory) pCSSrc->getSecondIndexInDB()) - && getInventory().isUsableItem(pCSSrc->getSheetId()) - ) - { - pCSDst->setCanDrop ( true ); - } - } -}; -REGISTER_ACTION_HANDLER (CCanDropToHotbar, "can_drop_to_hotbar"); - // ********************************************************************************************************** /** Clear the selected sheet diff --git a/ryzom/client/src/interface_v3/dbctrl_sheet.cpp b/ryzom/client/src/interface_v3/dbctrl_sheet.cpp index 41ba3cd4c..dd70c7ece 100644 --- a/ryzom/client/src/interface_v3/dbctrl_sheet.cpp +++ b/ryzom/client/src/interface_v3/dbctrl_sheet.cpp @@ -3793,12 +3793,6 @@ bool CDBCtrlSheet::canDropItem(CDBCtrlSheet *src) const bf|= 1<getSheetId()) ) - { - return true; - } - // Look if one slot solution match. if( pIS->SlotBF & bf ) { diff --git a/ryzom/client/src/interface_v3/inventory_manager.cpp b/ryzom/client/src/interface_v3/inventory_manager.cpp index feebeb062..56dbb176a 100644 --- a/ryzom/client/src/interface_v3/inventory_manager.cpp +++ b/ryzom/client/src/interface_v3/inventory_manager.cpp @@ -1375,14 +1375,11 @@ void CInventoryManager::CDBEquipObs::update(ICDBNode* node) // Remove Last reference and update database sint16 oldVal = pNL->getOldValue16(); sint16 newVal = pNL->getValue16(); - if (sIE != CTRL_HOTBAR_1 && sIE != CTRL_HOTBAR_2 && sIE != CTRL_HOTBAR_3 && sIE != CTRL_HOTBAR_4 && sIE != CTRL_HOTBAR_5) - { - if (oldVal != 0) - getInventory().unwearBagItem (oldVal-1); + if (oldVal != 0) + getInventory().unwearBagItem (oldVal-1); - if (newVal != 0) - getInventory().wearBagItem (newVal-1); - } + if (newVal != 0) + getInventory().wearBagItem (newVal-1); // Update Display if (newVal == 0) @@ -3123,7 +3120,7 @@ class CHandlerInvDropTo : public IActionHandler { CInterfaceGroup *pIG = CWidgetManager::getInstance()->getModalWindow(); if (pIG == NULL) return; - if (pIG->getId() != "ui:interface:bag_choose" || pIG->getId() != "ui:interface:hotbar_choose") return; + if (pIG->getId() != "ui:interface:bag_choose" && pIG->getId() != "ui:interface:hotbar_choose") return; getInventory().beginDrag(NULL, CInventoryManager::TextList); // Special case for choose in bag dialog @@ -3286,172 +3283,39 @@ class CHandlerInvCannotDrop : public IActionHandler { CDBCtrlSheet *pCSDst = dynamic_cast(pCaller); string invPath = getInventory().getDBIndexPath(pCSDst); - if (strnicmp(invPath.c_str(),"LOCAL:INVENTORY:HOTBAR",22) != 0) { - getInventory().unequip(invPath); - } + getInventory().unequip(invPath); } getInventory().endDrag(); } }; REGISTER_ACTION_HANDLER( CHandlerInvCannotDrop, "inv_cannot_drop" ); - -// *************************************************************************** -class CHandlerHotbarDropTo : public IActionHandler +// ********************************************************************************************************** +class CCanDropToHotbar : public IActionHandler { virtual void execute (CCtrlBase *pCaller, const string &Params) { CInterfaceManager *pIM = CInterfaceManager::getInstance(); - - // Check that we have drag'n'drop from inventory (list or slot) - // Or if we have launched the choose_bag modal - // To prevent other things to happens + nlinfo("hey"); string src = getParam(Params, "src"); CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src); CDBCtrlSheet *pCSSrc = dynamic_cast(pElt); - CDBCtrlSheet *pCSDst = dynamic_cast(pCaller); - CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId())); - getInventory().endDrag(); - // if (!getInventory().isDragging()) - // { - // CInterfaceGroup *pIG = CWidgetManager::getInstance()->getModalWindow(); - // if (pIG == NULL) return; - // if (pIG->getId() != "ui:interface:bag_choose") return; - // getInventory().beginDrag(NULL, CInventoryManager::TextList); - - // // Special case for choose in bag dialog - // string src = getParam(Params, "src"); - // CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src); - // CDBCtrlSheet *pCSSrc = dynamic_cast(pElt); - // CDBCtrlSheet *pCSDst = dynamic_cast(pCaller); - - // string invPath = getInventory().getDBIndexPath(pCSSrc); - // string bagPath = pCSDst->getSheet(); - - // if (bagPath == "UI:EMPTY") - // CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId())); - // else - // getInventory().equip (bagPath, invPath); - - // getInventory().endDrag(); - // return; - // } - - // string src = getParam(Params, "src"); - // CInterfaceElement *pElt = CWidgetManager::getInstance()->getElementFromId(src); - // CDBCtrlSheet *pCSSrc = dynamic_cast(pElt); - // CDBCtrlSheet *pCSDst = dynamic_cast(pCaller); - // if (pCSSrc == NULL) return; - - // // Is the dragged sheet comes from an inventory list - // if (getInventory().isDraggingFromTextList() || getInventory().isDraggingFromIconList()) - // { - // // If the destination is an equipment slot ? - // if (pCSDst != NULL) - // { - // string invPath = getInventory().getDBIndexPath(pCSDst); // Get the index in the equipment - // if (!invPath.empty()) - // { - // // Drop to the slot ie write the database with the index of the slot - // string bagPath = pCSSrc->getSheet(); // Get the database branch of the dragged sheet - - // if (pCSSrc && pCSSrc->getType() == CCtrlSheetInfo::SheetType_Item) - // if (pCSDst && pCSDst->getType() == CCtrlSheetInfo::SheetType_Item) - // { - // // If the destination slot match with the type of incoming item - // if (pCSDst->canDropItem(pCSSrc)) - // { - // // So directly equip - // getInventory().equip(bagPath, invPath); - // } - // else - // { - // // Else try to auto equip the player with the incoming item - // const string sTmp = bagPath.substr(bagPath.rfind(':')+1,bagPath.size()); - // sint index; - // fromString(sTmp, index); - // if (!getInventory().autoEquip(index, false)) - // getInventory().autoEquip(index, true); - // } - // } - // getInventory().endDrag(); - // return; - // } - // } - - // // If the destination is a list sheet - // IListSheetBase *pListDst = dynamic_cast(pCaller); - // if ((pListDst == NULL) && (pCSDst != NULL)) - // pListDst = IListSheetBase::getListContaining(pCSDst); - // IListSheetBase *pListSrc = IListSheetBase::getListContaining(pCSSrc); - // if ((pListDst != NULL) && (pListSrc != NULL)) - // { - // // If the source list and destination list are the same - // if (pListDst == pListSrc) - // { - // // no op - // getInventory().endDrag(); - // return; - // } - // else // Source list and destination list are not the same - // { - // // Move the item to the destination list using the procedure move_to_xxx - // CDBGroupListSheetBag *pListDstText = dynamic_cast(pListDst); - // CDBGroupIconListBag *pListDstIcon = dynamic_cast(pListDst); - - // if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvBag)) || - // ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvBag))) - // { - // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_bag"); - // } - // else if (((pListDstText != NULL) && ((pListDstText->getInvType() == CInventoryManager::InvPA0) || - // (pListDstText->getInvType() == CInventoryManager::InvPA1) || - // (pListDstText->getInvType() == CInventoryManager::InvPA2) || - // (pListDstText->getInvType() == CInventoryManager::InvPA3) || - // (pListDstText->getInvType() == CInventoryManager::InvPA4) || - // (pListDstText->getInvType() == CInventoryManager::InvPA5) || - // (pListDstText->getInvType() == CInventoryManager::InvPA6) - // )) || - // ((pListDstIcon != NULL) && ((pListDstIcon->getInvType() == CInventoryManager::InvPA0) || - // (pListDstIcon->getInvType() == CInventoryManager::InvPA1) || - // (pListDstIcon->getInvType() == CInventoryManager::InvPA2) || - // (pListDstIcon->getInvType() == CInventoryManager::InvPA3) || - // (pListDstIcon->getInvType() == CInventoryManager::InvPA4) || - // (pListDstIcon->getInvType() == CInventoryManager::InvPA5) || - // (pListDstIcon->getInvType() == CInventoryManager::InvPA6) - // ))) - // { - // string sTmp; - // if (pListDstText != NULL) sTmp = toString("%d",pListDstText->getInvType()-CInventoryManager::InvPA0); - // if (pListDstIcon != NULL) sTmp = toString("%d",pListDstIcon->getInvType()-CInventoryManager::InvPA0); - // nlinfo("ici :%s", sTmp.c_str()); - // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_pa|"+sTmp); - // } - // else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvGuild)) || - // ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvGuild))) - // { - // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_guild"); - // } - // else if (((pListDstText != NULL) && (pListDstText->getInvType() == CInventoryManager::InvRoom)) || - // ((pListDstIcon != NULL) && (pListDstIcon->getInvType() == CInventoryManager::InvRoom))) - // { - // CAHManager::getInstance()->runActionHandler("proc", pCSSrc, "move_to_room"); - // } - // } - // } - // } - - // // Is the dragged sheet comes from another slot - // if (pCSDst != NULL) - // if (getInventory().isDraggingFromSlot()) - // { - // CAHManager::getInstance()->runActionHandler("swap_item", pCSDst, "src="+toString(pCSSrc->getId())); - // } - - // CAHManager::getInstance()->runActionHandler("inv_cannot_drop", pCSSrc); + CDBCtrlSheet *pCSDst = dynamic_cast(pCaller); + if (!pCSSrc || !pCSDst) return; + + // Exchange can only be done from bag to exchange inventories + uint32 srcInventory = pCSSrc->getSecondIndexInDB(); + if ( + srcInventory == INVENTORIES::bag + && getInventory().isInventoryAvailable((INVENTORIES::TInventory) pCSSrc->getSecondIndexInDB()) + && getInventory().isUsableItem(pCSSrc->getSheetId()) + ) + { + pCSDst->setCanDrop ( true ); + } } }; -REGISTER_ACTION_HANDLER( CHandlerHotbarDropTo, "hotbar_drop" ); +REGISTER_ACTION_HANDLER (CCanDropToHotbar, "can_drop_to_hotbar"); // ********************************************************************************************************** class CHotbarLeftClickOnSlotHandler : public IActionHandler