void CDirstatDoc::OnViewShowunknown() { CArray<CItem *, CItem *> drives; GetDriveItems(drives); if(m_showUnknown) { for(int i = 0; i < drives.GetSize(); i++) { CItem *unknown = drives[i]->FindUnknownItem(); ASSERT(unknown != NULL); // FIXME: Multi-select if(GetSelection(0) == unknown) { SetSelection(unknown->GetParent()); } if(GetZoomItem() == unknown) { m_zoomItem = unknown->GetParent(); } drives[i]->RemoveUnknownItem(); } m_showUnknown = false; } else { for(int i = 0; i < drives.GetSize(); i++) { drives[i]->CreateUnknownItem(); } m_showUnknown = true; } if(drives.GetSize() > 0) { SetWorkingItem(GetRootItem()); } UpdateAllViews(NULL); }
void CDirstatDoc::OnViewShowfreespace() { CArray<CItem *, CItem *> drives; GetDriveItems(drives); if(m_showFreeSpace) { for(int i = 0; i < drives.GetSize(); i++) { CItem *free = drives[i]->FindFreeSpaceItem(); ASSERT(free != NULL); // FIXME: Multi-select if(GetSelection(0) == free) { SetSelection(free->GetParent()); } if(GetZoomItem() == free) { m_zoomItem = free->GetParent(); } drives[i]->RemoveFreeSpaceItem(); } m_showFreeSpace = false; } else { for(int i = 0; i < drives.GetSize(); i++) { drives[i]->CreateFreeSpaceItem(); } m_showFreeSpace = true; } if(drives.GetSize() > 0) { SetWorkingItem(GetRootItem()); } UpdateAllViews(NULL); }
void CContainer::OnRemoveOb( CGObListRec* pObRec ) // Override this = called when removed from list. { ADDTOCALLSTACK("CContainer::OnRemoveOb"); // remove this object from the container list. // Overload the RemoveAt for general lists to come here. CItem * pItem = STATIC_CAST <CItem*>(pObRec); ASSERT(pItem); CGObList::OnRemoveOb( pItem ); ASSERT( pItem->GetParent() == NULL ); pItem->SetContainerFlags(UID_O_DISCONNECT); // It is no place for the moment. OnWeightChange( -pItem->GetWeight()); }
void CDirstatDoc::OnTreemapZoomin() { // FIXME: Multi-select CItem *p = GetSelection(0); CItem *z = NULL; while(p != GetZoomItem()) { z = p; p = p->GetParent(); } ASSERT(z != NULL); SetZoomItem(z); }
void CContainer::r_WriteContent( CScript & s ) const { ADDTOCALLSTACK("CContainer::r_WriteContent"); ASSERT(dynamic_cast<const CGObList *>(this) != NULL); // Write out all the items in me. CItem* pItemNext; for ( CItem* pItem = GetContentHead(); pItem != NULL; pItem = pItemNext) { pItemNext = pItem->GetNext(); ASSERT( pItem->GetParent() == this ); pItem->r_WriteSafe(s); } }
void CContainer::ContentNotifyDelete() { ADDTOCALLSTACK("CContainer::ContentNotifyDelete"); if ( IsTrigUsed(TRIGGER_DESTROY) ) // no point entering this loop if the trigger is disabled return; // trigger @Destroy on contained items CItem *pItemNext = NULL; for (CItem *pItem = GetContentHead(); pItem != NULL; pItem = pItemNext) { pItemNext = pItem->GetNext(); if ( pItem->NotifyDelete() == false ) { // item shouldn't be destroyed and so cannot remain in this container, // drop it to the ground if it hasn't been moved already if (pItem->GetParent() == this) pItem->MoveToCheck( pItem->GetTopLevelObj()->GetTopPoint() ); } } }
void CCPropsItemChar::SetPropertyNum(int iPropIndex, PropertyValNum_t iVal, CObjBase* pLinkedObj, RESDISPLAY_VERSION iLimitToExpansion, bool fDeleteZero) { ADDTOCALLSTACK("CCPropsItemChar::SetPropertyNum"); ASSERT(!IsPropertyStr(iPropIndex)); ASSERT((iLimitToExpansion >= RDS_PRET2A) && (iLimitToExpansion < RDS_QTY)); if ((fDeleteZero && (iVal == 0)) || (_iPropertyExpansion[iPropIndex] > iLimitToExpansion)) { if (0 == _mPropsNum.erase(iPropIndex)) return; // I didn't have this property, so avoid further processing. } else _mPropsNum[iPropIndex] = iVal; if (!pLinkedObj) return; // Do stuff to the pLinkedObj switch (iPropIndex) { case PROPITCH_WEIGHTREDUCTION: { CItem *pItemLink = static_cast<CItem*>(pLinkedObj); int oldweight = pItemLink->GetWeight(); CContainer * pCont = dynamic_cast <CContainer*> (pItemLink->GetParent()); if (pCont) { ASSERT(pItemLink->IsItemEquipped() || pItemLink->IsItemInContainer()); pCont->OnWeightChange(pItemLink->GetWeight() - oldweight); pLinkedObj->UpdatePropertyFlag(); } break; } //default: // pLinkedObj->UpdatePropertyFlag(); // break; } }
bool CClient::Cmd_SecureTrade( CChar *pChar, CItem *pItem ) { ADDTOCALLSTACK("CClient::Cmd_SecureTrade"); // Begin secure trading with a char. (Make the initial offer) if ( !pChar || pChar == m_pChar ) return false; // Make sure both clients can see each other, because trade window is an container // and containers can be opened only after the object is already loaded on screen if ( !m_pChar->CanSee(pChar) || !pChar->CanSee(m_pChar) ) return false; if ( pItem && (IsTrigUsed(TRIGGER_DROPON_CHAR) || IsTrigUsed(TRIGGER_ITEMDROPON_CHAR)) ) { CScriptTriggerArgs Args(pChar); if ( pItem->OnTrigger(ITRIG_DROPON_CHAR, m_pChar, &Args) == TRIGRET_RET_TRUE ) return false; } if ( pChar->m_pNPC ) // NPC's can't use trade windows return pItem ? pChar->NPC_OnItemGive(m_pChar, pItem) : false; if ( !pChar->m_pClient ) // and also offline players return false; if ( pChar->GetDefNum("REFUSETRADES") ) { SysMessagef(g_Cfg.GetDefaultMsg(DEFMSG_MSG_TRADE_REFUSE), pChar->GetName()); return false; } // Check if the trade window is already open for ( CItem *pItemCont = m_pChar->GetContentHead(); pItemCont != NULL; pItemCont = pItemCont->GetNext() ) { if ( !pItemCont->IsType(IT_EQ_TRADE_WINDOW) ) continue; CItem *pItemPartner = pItemCont->m_uidLink.ItemFind(); if ( !pItemPartner ) continue; CChar *pCharPartner = dynamic_cast<CChar *>(pItemPartner->GetParent()); if ( pCharPartner != pChar ) continue; if ( pItem ) { if ( IsTrigUsed(TRIGGER_DROPON_TRADE) ) { CScriptTriggerArgs Args1(pChar); if ( pItem->OnTrigger(ITRIG_DROPON_TRADE, this, &Args1) == TRIGRET_RET_TRUE ) return false; } CItemContainer *pCont = dynamic_cast<CItemContainer *>(pItemCont); if ( pCont ) pCont->ContentAdd(pItem); } return true; } // Open new trade window if ( IsTrigUsed(TRIGGER_TRADECREATE) ) { CScriptTriggerArgs Args(pItem); if ( (m_pChar->OnTrigger(CTRIG_TradeCreate, pChar, &Args) == TRIGRET_RET_TRUE) || (pChar->OnTrigger(CTRIG_TradeCreate, m_pChar, &Args) == TRIGRET_RET_TRUE) ) return false; } if ( IsTrigUsed(TRIGGER_DROPON_TRADE) && pItem ) { CScriptTriggerArgs Args1(pChar); if ( pItem->OnTrigger(ITRIG_DROPON_TRADE, this, &Args1) == TRIGRET_RET_TRUE ) return false; } CItem *pItem1 = CItem::CreateBase(ITEMID_Bulletin1); if ( !pItem1 ) return false; CItemContainer *pCont1 = static_cast<CItemContainer *>(pItem1); if ( !pCont1 ) { DEBUG_ERR(("Item 0%x must be a container type to enable player trading.\n", ITEMID_Bulletin1)); pItem1->Delete(); return false; } CItemContainer *pCont2 = static_cast<CItemContainer *>(CItem::CreateBase(ITEMID_Bulletin1)); ASSERT(pCont2); pCont1->SetName("Trade Window"); pCont1->SetType(IT_EQ_TRADE_WINDOW); pCont1->m_itEqTradeWindow.m_iWaitTime = 0; pCont1->m_itEqTradeWindow.m_bCheck = 0; pCont1->m_uidLink = pCont2->GetUID(); m_pChar->LayerAdd(pCont1, LAYER_SPECIAL); pCont2->SetName("Trade Window"); pCont2->SetType(IT_EQ_TRADE_WINDOW); pCont2->m_itEqTradeWindow.m_iWaitTime = 0; pCont2->m_itEqTradeWindow.m_bCheck = 0; pCont2->m_uidLink = pCont1->GetUID(); pChar->LayerAdd(pCont2, LAYER_SPECIAL); PacketTradeAction cmd(SECURE_TRADE_OPEN); cmd.prepareContainerOpen(pChar, pCont1, pCont2); cmd.send(this); cmd.prepareContainerOpen(m_pChar, pCont2, pCont1); cmd.send(pChar->m_pClient); if ( g_Cfg.m_iFeatureTOL & FEATURE_TOL_VIRTUALGOLD ) { PacketTradeAction cmd2(SECURE_TRADE_UPDATELEDGER); if ( m_NetState->isClientVersion(MINCLIVER_TOL) ) { cmd2.prepareUpdateLedger(pCont1, static_cast<DWORD>(m_pChar->m_virtualGold % 1000000000), static_cast<DWORD>(m_pChar->m_virtualGold / 1000000000)); cmd2.send(this); } if ( pChar->m_pClient->m_NetState->isClientVersion(MINCLIVER_TOL) ) { cmd2.prepareUpdateLedger(pCont2, static_cast<DWORD>(pChar->m_virtualGold % 1000000000), static_cast<DWORD>(pChar->m_virtualGold / 1000000000)); cmd2.send(pChar->m_pClient); } } LogOpenedContainer(pCont2); pChar->m_pClient->LogOpenedContainer(pCont1); if ( pItem ) { if ( IsTrigUsed(TRIGGER_DROPON_TRADE) ) { CScriptTriggerArgs Args1(pChar); if ( pItem->OnTrigger(ITRIG_DROPON_TRADE, this, &Args1) == TRIGRET_RET_TRUE ) { pCont1->Delete(); pCont2->Delete(); return false; } } pCont1->ContentAdd(pItem, pCont1->GetTopPoint()); } return true; }
CItem *CDirstatDoc::GetSelectionParent() { ASSERT(m_selectedItems.GetCount() > 0); CItem *item = m_selectedItems[0]; return item->GetParent(); }