Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

199 lines
6.2 KiB

//=============================================================================
// File: category.cpp
// Author: a-jammar
// Covers: CDataCategory
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// For usage, see the header file.
//
// Most of these member functions just call the associated function in
// CDataGatherer using the m_pGatherer and m_dwID members.
//
// Note: most of these methods contain ASSERTs that the gatherer pointer is
// not null and that this is a valid category. Checking that this is a valid
// category is a costly check to do for a retail version, so it is only done
// in debug builds.
//=============================================================================
#include "stdafx.h"
#include "gather.h"
#include "gathint.h"
//-----------------------------------------------------------------------------
// The constructor and destructor are typical. Actual values are put into
// the member variables by CDataGatherer, which creates these objects.
//-----------------------------------------------------------------------------
CDataCategory::CDataCategory()
{
m_pGatherer = NULL;
m_dwID = 0;
}
CDataCategory::~CDataCategory()
{
}
//-----------------------------------------------------------------------------
// Return the pointer we keep to the CDataGatherer object.
//-----------------------------------------------------------------------------
CDataGatherer * CDataCategory::GetGatherer()
{
ASSERT(m_pGatherer && m_pGatherer->IsValidDataCategory(m_dwID));
if (m_pGatherer)
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer;
}
//-----------------------------------------------------------------------------
// Return the name of this category (the text used for the tree node label).
//-----------------------------------------------------------------------------
BOOL CDataCategory::GetName(CString &strName)
{
ASSERT(m_pGatherer && m_pGatherer->IsValidDataCategory(m_dwID));
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->GetName(m_dwID, strName);
}
return FALSE;
}
//-----------------------------------------------------------------------------
// Find out if this category is still valid by calling the method in our
// CDataGatherer object.
//-----------------------------------------------------------------------------
BOOL CDataCategory::IsValid()
{
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->IsValidDataCategory(m_dwID);
}
return FALSE;
}
//-----------------------------------------------------------------------------
// All of the following methods for navigating through the category tree simply
// call the appropriate method in the CDataGatherer object. Note that we don't
// need to check if we are a valid category, since the methods we call will.
//-----------------------------------------------------------------------------
CDataCategory * CDataCategory::GetParent()
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->GetRelative(m_dwID, CDataGatherer::PARENT);
}
return NULL;
}
CDataCategory * CDataCategory::GetChild()
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->GetRelative(m_dwID, CDataGatherer::CHILD);
}
return NULL;
}
CDataCategory * CDataCategory::GetNextSibling()
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->GetRelative(m_dwID, CDataGatherer::NEXT_SIBLING);
}
return NULL;
}
CDataCategory * CDataCategory::GetPrevSibling()
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->GetRelative(m_dwID, CDataGatherer::PREV_SIBLING);
}
return NULL;
}
//-----------------------------------------------------------------------------
// A refresh operation is performed by calling a method in the gatherer
// object. Note that this category might be invalid after this call.
//-----------------------------------------------------------------------------
BOOL CDataCategory::Refresh(BOOL fRecursive, volatile BOOL *pfCancel, BOOL fSoftRefresh)
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
// Note - this is done when the user clicks on a category, so call
// RefreshCategory with the fSoftRefresh flag as TRUE.
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->RefreshCategory(m_dwID, fRecursive, pfCancel, fSoftRefresh);
}
return FALSE;
}
//-----------------------------------------------------------------------------
// Return whether or not this category has ever been completely refreshed
// (useful to determine if we need to refresh in a soft refresh situation).
//-----------------------------------------------------------------------------
BOOL CDataCategory::HasBeenRefreshed()
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
INTERNAL_CATEGORY * pInternal = m_pGatherer->GetInternalRep(m_dwID);
if (pInternal)
return pInternal->m_fRefreshed;
}
return FALSE;
}
//-----------------------------------------------------------------------------
// Returns whether or not this category is dynamic (that is, whether or not
// this category might be invalid after a refresh).
//-----------------------------------------------------------------------------
BOOL CDataCategory::IsDynamic()
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->IsCategoryDynamic(m_dwID);
}
return FALSE;
}
//-----------------------------------------------------------------------------
// This method returns whether or not this category has dynamic children.
// If fRecursive is TRUE, all descendents of this category are checked,
// otherwise only the first generation of children are checked. If
// HasDynamicChildren(TRUE) returns FALSE, then this category and its children
// do not need to be checked for validity after a refresh.
//-----------------------------------------------------------------------------
BOOL CDataCategory::HasDynamicChildren(BOOL fRecursive)
{
ASSERT(m_pGatherer);
if (m_pGatherer)
{
m_pGatherer->SetLastError(GATH_ERR_NOERROR);
return m_pGatherer->HasDynamicChildren(m_dwID, fRecursive);
}
return FALSE;
}