windows-nt/Source/XPSP1/NT/net/sfm/afp/ui/afpmgr/srvprop.cxx
2020-09-26 16:20:57 +08:00

513 lines
14 KiB
C++
Raw Permalink Blame History

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
srvprop.cxx
Class definitions for the SERVER_PROPERTIES class.
This file contains the class declarations for the SERVER_PROPERTIES.
The SERVER_PROPERTIES class implements the Server Manager main property
sheet.
FILE HISTORY:
NarenG 1-Oct-1992 Stole from NETUI server manager.
Removed LM specific stuff and put AFP
specific stuff
*/
#define INCL_NET
#define INCL_WINDOWS
#define INCL_WINDOWS_GDI
#define INCL_NETERRORS
#define INCL_DOSERRORS
#define INCL_NETLIB
#include <lmui.hxx>
#define INCL_BLT_WINDOW
#define INCL_BLT_DIALOG
#define INCL_BLT_CONTROL
#define INCL_BLT_MISC
#define INCL_BLT_CLIENT
#define INCL_BLT_MSGPOPUP
#define INCL_BLT_SPIN_GROUP
#define INCL_BLT_GROUP
#include <blt.hxx>
#if defined(DEBUG)
static const CHAR szFileName[] = __FILE__;
#define _FILENAME_DEFINED_ONCE szFileName
#endif // DEBUG
#include <uiassert.hxx>
#include <dbgstr.hxx>
#include <lmsrvres.hxx>
extern "C"
{
#include <afpmgr.h>
#include <macfile.h>
} // extern "C"
#include <srvprop.hxx>
#include <volumes.hxx>
#include <sessions.hxx>
#include <openfile.hxx>
#include <util.hxx>
#include <server.hxx>
#define PATH_SEPARATOR TCH('\\')
//
// This macro is used in the SERVER_PROPERTIES::OnCommand() method to
// invoke the appropriate dialog when one of the graphical buttons is
// pressed. If DIALOG_WINDOW's destructor were virtual, we could do
// all of this in a common worker function, thus reducing code size.
//
// NOTE: This macro assumes that the dialog constructor takes an HWND
// and a AFP_SERVER_HANDLE. This macro further assumes that there
// is a variable named _hserver of type AFP_SERVER_HANDLE in some
// visible scope.
//
#define SUBPROPERTY( DlgClass ) \
if( TRUE ) \
{ \
DlgClass * pDlg = new DlgClass( QueryHwnd(), \
_hServer, \
_pszServerName ); \
\
DWORD err = ( pDlg == NULL ) ? ERROR_NOT_ENOUGH_MEMORY \
: pDlg->Process(); \
\
if( err != NERR_Success ) \
{ \
MsgPopup( this, err ); \
} \
\
delete pDlg; \
\
RepaintNow(); \
Refresh(); \
\
return TRUE; \
} \
else
//
// SERVER_PROPERTIES methods.
//
/*******************************************************************
NAME: SERVER_PROPERTIES :: SERVER_PROPERTIES
SYNOPSIS: SERVER_PROPERTIES class constructor.
ENTRY: hWndOwner - Handle to the "owning" window.
pszServerName - Name of the target server.
EXIT: The object is constructed.
RETURNS: No return value.
NOTES: All SERVER_PROPERTIES methods assume that the current
user has sufficient privilege to adminster the target
server.
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
SERVER_PROPERTIES :: SERVER_PROPERTIES( HWND hWndOwner,
AFP_SERVER_HANDLE hServer,
const TCHAR * pszServerName )
: DIALOG_WINDOW( IDD_SERVER_PROPERTIES, hWndOwner ),
_pszServerName( pszServerName ),
_sltCurrentActiveSessions( this, IDSP_DT_CURRENT_SESSIONS ),
_sltCurrentOpenFiles( this, IDSP_DT_CURRENT_OPENFILES ),
_sltCurrentFileLocks( this, IDSP_DT_CURRENT_FILELOCKS ),
_hServer( hServer ),
/* MSKK NaotoN Appended for Localizing into Japanese 8/24/93 */
#ifdef JAPAN
_fontHelv( (TCHAR *)"<EFBFBD>l<EFBFBD>r <20>S<EFBFBD>V<EFBFBD>b<EFBFBD>N", FIXED_PITCH | FF_MODERN, 8, FONT_ATT_DEFAULT ),
#else
_fontHelv( FONT_DEFAULT ),
#endif
/* end */
_gbUsers( this,
IDSP_GB_USERS,
MAKEINTRESOURCE( IDBM_USERS )),
_gbVolumes( this,
IDSP_GB_VOLUMES,
MAKEINTRESOURCE(IDBM_FILES) ),
_gbOpenFiles( this,
IDSP_GB_OPENFILES,
MAKEINTRESOURCE(IDBM_OPENRES) ),
_gbServerParms( this,
IDSP_GB_SERVERPARMS,
MAKEINTRESOURCE(IDBM_SERVERPARMS) )
{
AUTO_CURSOR Cursor;
//
// Let's make sure everything constructed OK.
//
if( QueryError() != NERR_Success )
{
return;
}
if( !_fontHelv )
{
ReportError( _fontHelv.QueryError() );
return;
}
//
// Display the dynamic server data.
//
DWORD err = Refresh();
if ( err != NO_ERROR )
{
ReportError( err );
return;
}
//
// Initialize our magic button bar.
//
err = SetupButtonBar();
if( err != NERR_Success )
{
ReportError( err );
return;
}
//
// Set the dialog caption.
//
err = ::SetCaption( this, IDS_CAPTION_PROPERTIES, _pszServerName );
if( err != NERR_Success )
{
ReportError( err );
return;
}
} // SERVER_PROPERTIES :: SERVER_PROPERTIES
/*******************************************************************
NAME: SERVER_PROPERTIES :: ~SERVER_PROPERTIES
SYNOPSIS: SERVER_PROPERTIES class destructor.
ENTRY: None.
EXIT: The object is destroyed.
RETURNS: No return value.
NOTES:
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
SERVER_PROPERTIES :: ~SERVER_PROPERTIES()
{
//
// This space intentionally left blank
//
} // SERVER_PROPERTIES :: ~SERVER_PROPERTIES
/*******************************************************************
NAME: SERVER_PROPERTIES :: OnCommand
SYNOPSIS: This method is called whenever a WM_COMMAND message
is sent to the dialog procedure. In this case, we're
only interested in commands sent as a result of the
user clicking one of the graphical buttons.
ENTRY: cid - The control ID from the
generating control.
lParam - Varies.
EXIT: The command has been handled.
RETURNS: BOOL - TRUE if we handled the command.
FALSE if we did not handle
the command.
NOTES:
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
BOOL SERVER_PROPERTIES :: OnCommand( const CONTROL_EVENT & event )
{
AUTO_CURSOR Cursor;
switch ( event.QueryCid() )
{
case IDSP_GB_USERS:
//
// The Users dialog.
//
SUBPROPERTY( SESSIONS_DIALOG );
break;
case IDSP_GB_VOLUMES:
//
// The Files dialog.
//
SUBPROPERTY( VOLUMES_DIALOG );
break;
case IDSP_GB_OPENFILES:
//
// The In Use dialog.
//
SUBPROPERTY( OPENS_DIALOG );
break;
case IDSP_GB_SERVERPARMS:
//
// The Server Parameters dialog
//
SUBPROPERTY( SERVER_PARAMETERS_DIALOG );
break;
default:
//
// If we made it this far, then we're not interested
// in the command.
//
return FALSE;
}
} // SERVER_PROPERTIES :: OnCommand
/*******************************************************************
NAME: SERVER_PROPERTIES :: QueryHelpContext
SYNOPSIS: This function returns the appropriate help context
value (HC_*) for this particular dialog.
ENTRY: None.
EXIT: None.
RETURNS: ULONG - The help context for this
dialog.
NOTES:
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
ULONG SERVER_PROPERTIES :: QueryHelpContext( void )
{
return HC_SERVER_PROPERTIES;
} // SERVER_PROPERITES :: QueryHelpContext
/*******************************************************************
NAME: SERVER_PROPERTIES :: Refresh
SYNOPSIS: This method will display any server data which may
need to be refreshed during the lifetime of the
properties dialog. This includes the number of
active sessions, open files, etc.
ENTRY: None.
EXIT: The dynamic server data has been displayed.
RETURNS: No return value.
NOTES:
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
DWORD SERVER_PROPERTIES :: Refresh( VOID )
{
//
// This may take a while...
//
AUTO_CURSOR Cursor;
//
// This string will contain our "??" string.
//
const TCHAR * pszNotAvail = SZ("??");
//
// Retrieve the statitistics server info.
//
PAFP_STATISTICS_INFO pAfpStats;
DWORD err = ::AfpAdminStatisticsGet( _hServer, (LPBYTE*)&pAfpStats );
if( err == NO_ERROR )
{
_sltCurrentActiveSessions.Enable( TRUE );
_sltCurrentActiveSessions.SetValue( pAfpStats->stat_CurrentSessions);
_sltCurrentOpenFiles.Enable( TRUE );
_sltCurrentOpenFiles.SetValue( pAfpStats->stat_CurrentFilesOpen );
_sltCurrentFileLocks.Enable( TRUE );
_sltCurrentFileLocks.SetValue( pAfpStats->stat_CurrentFileLocks );
::AfpAdminBufferFree( pAfpStats );
}
else
{
_sltCurrentActiveSessions.SetText( pszNotAvail );
_sltCurrentActiveSessions.Enable( FALSE );
_sltCurrentOpenFiles.SetText( pszNotAvail );
_sltCurrentOpenFiles.Enable( FALSE );
_sltCurrentFileLocks.SetText( pszNotAvail );
_sltCurrentFileLocks.Enable( FALSE );
}
return err;
} // SERVER_PROPERTIES :: Refresh
/*******************************************************************
NAME: SERVER_PROPERTIES :: SetupButtonBar
SYNOPSIS: The method initializes the magic scrolling button bar.
ENTRY: None.
EXIT: The button bar has been initialized.
RETURNS: APIERR - Any errors encountered.
NOTES:
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
APIERR SERVER_PROPERTIES :: SetupButtonBar( VOID )
{
//
// Setup the graphical buttons.
//
InitializeButton( &_gbUsers, IDS_BUTTON_USERS, NULL );
InitializeButton( &_gbVolumes, IDS_BUTTON_VOLUMES, NULL );
InitializeButton( &_gbOpenFiles, IDS_BUTTON_OPENFILES, NULL );
InitializeButton( &_gbServerParms,IDS_BUTTON_SERVERPARMS,NULL );
//
// Success!
//
return NO_ERROR;
} // SERVER_PROPERTIES :: SetupButtonBar
/*******************************************************************
NAME: SERVER_PROPERTIES :: InitializeButton
SYNOPSIS: Initialize a single graphical button for use in
the graphical button bar.
ENTRY: pgb - Pointer to a GRAPHICAL_BUTTON.
msg - The resource ID of the string
to be used as button text.
bmid - The bitmap ID for the button
status bitmap. This is the
tiny bitmap displayed in the
upper left corner of the button.
EXIT: The button has been initialized.
RETURNS: No return value.
NOTES:
HISTORY:
NarenG 1-Oct-1992 Replaced LM stuff with AFP stuff
********************************************************************/
VOID SERVER_PROPERTIES :: InitializeButton( GRAPHICAL_BUTTON * pgb,
MSGID msg,
BMID bmid )
{
//
// This NLS_STR is used to retrieve strings
// from the resource string table.
//
STACK_NLS_STR( nlsButtonText, MAX_RES_STR_LEN );
nlsButtonText.Load( msg );
UIASSERT( nlsButtonText.QueryError() == NERR_Success );
pgb->SetFont( _fontHelv );
pgb->SetStatus( bmid );
pgb->SetText( nlsButtonText.QueryPch() );
} // SERVER_PROPERTIES :: InitializeButton