Leaked source code of windows server 2003
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.
 
 
 
 
 
 

163 lines
4.3 KiB

/*++
© 1998 Seagate Software, Inc. All rights reserved.
Module Name:
PrMedSet.cpp
Abstract:
Media Set Property Page.
Author:
Art Bragg [abragg] 08-Aug-1997
Revision History:
--*/
#include "stdafx.h"
#include "PrMedSet.h"
#include "WzMedSet.h"
static DWORD pHelpIds[] =
{
IDC_EDIT_MEDIA_COPIES, idh_media_number_of_copy_sets,
IDC_SPIN_MEDIA_COPIES, idh_media_number_of_copy_sets,
IDC_TEXT_MEDIA_COPIES, idh_media_number_of_copy_sets,
0, 0
};
/////////////////////////////////////////////////////////////////////////////
// CPrMedSet property page
CPrMedSet::CPrMedSet() : CSakPropertyPage(CPrMedSet::IDD)
{
//{{AFX_DATA_INIT(CPrMedSet)
m_numMediaCopies = 0;
//}}AFX_DATA_INIT
m_pHelpIds = pHelpIds;
}
CPrMedSet::~CPrMedSet()
{
}
void CPrMedSet::DoDataExchange(CDataExchange* pDX)
{
CSakPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPrMedSet)
DDX_Control(pDX, IDC_SPIN_MEDIA_COPIES, m_spinMediaCopies);
DDX_Text(pDX, IDC_EDIT_MEDIA_COPIES, m_numMediaCopies);
DDV_MinMaxUInt(pDX, m_numMediaCopies, 0, 3);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPrMedSet, CSakPropertyPage)
//{{AFX_MSG_MAP(CPrMedSet)
ON_WM_DESTROY()
ON_EN_CHANGE(IDC_EDIT_MEDIA_COPIES, OnChangeEditMediaCopies)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPrMedSet message handlers
BOOL CPrMedSet::OnInitDialog()
{
HRESULT hr = S_OK;
HRESULT hrSupported = S_OK;
CSakPropertyPage::OnInitDialog();
AFX_MANAGE_STATE(AfxGetStaticModuleState());
try {
//
// Set the limit on the spinner
//
m_spinMediaCopies.SetRange( 0, 3 );
//
// Get the single storage pool pointer
//
CComPtr<IHsmServer> pEngine;
WsbAffirmHr( m_pParent->GetHsmServer( &pEngine ) );
WsbAffirmHr( RsGetStoragePool( pEngine, &m_pStoragePool ) );
WsbAffirmHr( m_pParent->GetRmsServer( &m_pRmsServer ) );
GUID mediaSetId;
CWsbBstrPtr mediaName;
WsbAffirmHr( m_pStoragePool->GetMediaSet( &mediaSetId, &mediaName ) );
CComPtr<IRmsMediaSet> pMediaSet;
WsbAffirmHr( m_pRmsServer->CreateObject( mediaSetId, CLSID_CRmsMediaSet, IID_IRmsMediaSet, RmsOpenExisting, (void**)&pMediaSet ) );
//
// Set up control states
// If we support media copies, enable controls
// If we don't support media copies, disable and show reason text
// If error, disable and don't show reason text
//
hrSupported = pMediaSet->IsMediaCopySupported( );
GetDlgItem( IDC_TEXT_MEDIA_COPIES )->EnableWindow( S_OK == hrSupported );
GetDlgItem( IDC_EDIT_MEDIA_COPIES )->EnableWindow( S_OK == hrSupported );
GetDlgItem( IDC_SPIN_MEDIA_COPIES )->EnableWindow( S_OK == hrSupported );
//
// And initialize control
//
USHORT numMediaCopies;
WsbAffirmHr( m_pStoragePool->GetNumMediaCopies( &numMediaCopies ) );
m_numMediaCopies = numMediaCopies;
UpdateData( FALSE );
} WsbCatch( hr );
GetDlgItem( IDC_TEXT_DISABLED )->ShowWindow( S_FALSE == hrSupported ? SW_SHOW : SW_HIDE );
return TRUE;
}
void CPrMedSet::OnChangeEditMediaCopies()
{
SetModified( TRUE );
}
BOOL CPrMedSet::OnApply()
{
HRESULT hr = 0;
UpdateData( TRUE );
try {
WsbAffirmHr( m_pStoragePool->SetNumMediaCopies( (USHORT)m_numMediaCopies ) );
//
// Tell it to save
//
CComPtr<IHsmServer> pServer;
WsbAffirmHr( m_pParent->GetHsmServer( &pServer ) );
WsbAffirmHr( pServer->SavePersistData( ) );
//
// Find the media node - updating the root node is useless
// since we need to change the media node contents.
//
CComPtr<ISakSnapAsk> pAsk;
CComPtr<ISakNode> pNode;
WsbAffirmHr( m_pParent->GetSakSnapAsk( &pAsk ) );
WsbAffirmHr( pAsk->GetNodeOfType( cGuidMedSet, &pNode ) );
//
// Now notify the nodes
//
m_pParent->OnPropertyChange( m_hConsoleHandle, pNode );
} WsbCatch( hr );
return CSakPropertyPage::OnApply();
}