936 lines
22 KiB
C++
936 lines
22 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
openfile.cxx
|
||
|
Class definitions for the OPENS_DIALOG, OPENS_LISTBOX, and
|
||
|
OPENS_LBI classes.
|
||
|
|
||
|
The OPENS_DIALOG is used to show the remotely open files on a
|
||
|
particular server. This listbox contains a [Close] button to
|
||
|
allow the admin to close selected files.
|
||
|
|
||
|
|
||
|
FILE HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
*/
|
||
|
|
||
|
#define INCL_NET
|
||
|
#define INCL_WINDOWS
|
||
|
#define INCL_WINDOWS_GDI
|
||
|
#define INCL_DOSERRORS
|
||
|
#define INCL_NETERRORS
|
||
|
#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
|
||
|
#include <blt.hxx>
|
||
|
|
||
|
#if defined(DEBUG)
|
||
|
static const CHAR szFileName[] = __FILE__;
|
||
|
#define _FILENAME_DEFINED_ONCE szFileName
|
||
|
#endif // DEBUG
|
||
|
|
||
|
#include <ellipsis.hxx>
|
||
|
#include <uiassert.hxx>
|
||
|
#include <ctime.hxx>
|
||
|
#include <intlprof.hxx>
|
||
|
|
||
|
extern "C"
|
||
|
{
|
||
|
#include <afpmgr.h>
|
||
|
#include <macfile.h>
|
||
|
}
|
||
|
|
||
|
#include <util.hxx>
|
||
|
#include <prefix.hxx>
|
||
|
#include <openfile.hxx>
|
||
|
|
||
|
//
|
||
|
// min/max macros
|
||
|
//
|
||
|
|
||
|
#define min(x,y) (((x) < (y)) ? (x) : (y))
|
||
|
#define max(x,y) (((x) > (y)) ? (x) : (y))
|
||
|
|
||
|
|
||
|
//
|
||
|
// OPENS_DIALOG methods.
|
||
|
//
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_DIALOG :: OPENS_DIALOG
|
||
|
|
||
|
SYNOPSIS: OPENS_DIALOG class constructor.
|
||
|
|
||
|
ENTRY: hwndOwner - The "owning" dialog.
|
||
|
|
||
|
pszServer - Name of the target server.
|
||
|
|
||
|
EXIT: The object is constructed.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
OPENS_DIALOG :: OPENS_DIALOG( HWND hwndOwner,
|
||
|
AFP_SERVER_HANDLE hServer,
|
||
|
const TCHAR * pszServerName )
|
||
|
: DIALOG_WINDOW( IDD_OPENFILES, hwndOwner ),
|
||
|
_hServer( hServer ),
|
||
|
_sltOpenCount( this, IDOF_DT_OPENCOUNT ),
|
||
|
_sltLockCount( this, IDOF_DT_LOCKCOUNT ),
|
||
|
_pbClose( this, IDOF_PB_CLOSEFILE ),
|
||
|
_pbCloseAll( this, IDOF_PB_CLOSEALLFILES ),
|
||
|
_pbOk( this, IDOK ),
|
||
|
_nlsServer( pszServerName ),
|
||
|
_lbFiles( this, IDOF_LB_OPENLIST, hServer ),
|
||
|
_pbRefresh( this, IDOF_PB_REFRESH )
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Let's make sure everything constructed OK.
|
||
|
//
|
||
|
|
||
|
if( QueryError() != NERR_Success )
|
||
|
return;
|
||
|
|
||
|
//
|
||
|
// make sure the strings constructed fine.
|
||
|
//
|
||
|
|
||
|
APIERR err = _nlsServer.QueryError();
|
||
|
|
||
|
if ( err != NERR_Success )
|
||
|
{
|
||
|
ReportError(err) ;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Set the caption.
|
||
|
//
|
||
|
|
||
|
err = ::SetCaption( this, IDS_CAPTION_OPENFILES, pszServerName ) ;
|
||
|
|
||
|
if( err != NERR_Success )
|
||
|
{
|
||
|
ReportError( err );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
err = BASE_ELLIPSIS::Init();
|
||
|
|
||
|
if( err != NO_ERROR )
|
||
|
{
|
||
|
ReportError( err );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Refresh the dialog.
|
||
|
//
|
||
|
|
||
|
DWORD error = Refresh();
|
||
|
|
||
|
if( error != NO_ERROR )
|
||
|
{
|
||
|
ReportError( AFPERR_TO_STRINGID( error ) );
|
||
|
}
|
||
|
|
||
|
} // OPENS_DIALOG :: OPENS_DIALOG
|
||
|
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_DIALOG :: ~OPENS_DIALOG
|
||
|
|
||
|
SYNOPSIS: OPENS_DIALOG class destructor.
|
||
|
|
||
|
EXIT: The object is destroyed.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
OPENS_DIALOG :: ~OPENS_DIALOG()
|
||
|
{
|
||
|
BASE_ELLIPSIS::Term();
|
||
|
|
||
|
} // OPENS_DIALOG :: ~OPENS_DIALOG
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_DIALOG :: OnCommand
|
||
|
|
||
|
SYNOPSIS: Handle user commands.
|
||
|
|
||
|
ENTRY: cid - Control ID.
|
||
|
|
||
|
lParam - lParam from the message.
|
||
|
|
||
|
RETURNS: BOOL - TRUE if we handled the msg.
|
||
|
FALSE if we didn't.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL OPENS_DIALOG :: OnCommand( const CONTROL_EVENT & event )
|
||
|
{
|
||
|
//
|
||
|
// Determine the control which is sending the command.
|
||
|
//
|
||
|
|
||
|
switch( event.QueryCid() )
|
||
|
{
|
||
|
case IDOF_PB_REFRESH:
|
||
|
{
|
||
|
|
||
|
Refresh();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
case IDOF_PB_CLOSEFILE:
|
||
|
|
||
|
{
|
||
|
OPENS_LBI * polbi = _lbFiles.QueryItem();
|
||
|
UIASSERT( polbi != NULL );
|
||
|
|
||
|
//
|
||
|
// See if the user really wants to close this file.
|
||
|
//
|
||
|
|
||
|
if ( ::MsgPopup( this,
|
||
|
(polbi->IsOpenForWrite()) ? IDS_CLOSE_FILE_WRITE
|
||
|
: IDS_CLOSE_FILE,
|
||
|
MPSEV_WARNING,
|
||
|
MP_YESNO,
|
||
|
polbi->QueryUserName(),
|
||
|
polbi->QueryPath(),
|
||
|
MP_NO ) == IDYES )
|
||
|
{
|
||
|
//
|
||
|
// Close the file And refresh dialog
|
||
|
//
|
||
|
DWORD err = ::AfpAdminFileClose( _hServer, polbi->QueryFileID() );
|
||
|
|
||
|
if( err != NO_ERROR )
|
||
|
{
|
||
|
//
|
||
|
// The file close failed. Tell the user the bad news.
|
||
|
//
|
||
|
|
||
|
if ( err == AFPERR_InvalidId )
|
||
|
{
|
||
|
::MsgPopup( this, IDS_FILE_CLOSED );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
::MsgPopup( this, AFPERR_TO_STRINGID(err) );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Refresh();
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
case IDOF_PB_CLOSEALLFILES:
|
||
|
|
||
|
{
|
||
|
//
|
||
|
// See if the user really wants to close *all* files.
|
||
|
//
|
||
|
|
||
|
if( WarnCloseMulti() )
|
||
|
{
|
||
|
//
|
||
|
// Close ALL of the open files.
|
||
|
//
|
||
|
|
||
|
DWORD err = ::AfpAdminFileClose( _hServer, 0 );
|
||
|
|
||
|
if( err != NO_ERROR )
|
||
|
{
|
||
|
//
|
||
|
// The close fileste failed. Tell the user the bad news.
|
||
|
//
|
||
|
::MsgPopup( this, AFPERR_TO_STRINGID(err) );
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Refresh the dialog.
|
||
|
//
|
||
|
Refresh();
|
||
|
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
case IDOF_LB_OPENLIST:
|
||
|
|
||
|
{
|
||
|
if ((event.QueryCode() == LBN_DBLCLK) && (_lbFiles.QuerySelCount()>0))
|
||
|
{
|
||
|
OPENS_LBI * plbi = _lbFiles.QueryItem();
|
||
|
|
||
|
::MsgPopup( this,
|
||
|
IDS_FILE_PATH,
|
||
|
MPSEV_INFO,
|
||
|
1,
|
||
|
plbi->QueryPath(),
|
||
|
MP_OK );
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
|
||
|
{
|
||
|
//
|
||
|
// we are not interested, let parent handle
|
||
|
//
|
||
|
|
||
|
return( FALSE );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
} // OPENS_DIALOG :: OnCommand
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_DIALOG :: QueryHelpContext
|
||
|
|
||
|
SYNOPSIS: This function returns the appropriate help context
|
||
|
value (HC_*) for this particular dialog.
|
||
|
|
||
|
RETURNS: ULONG - The help context for this
|
||
|
dialog.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
ULONG OPENS_DIALOG :: QueryHelpContext( void )
|
||
|
{
|
||
|
return HC_OPENS_DIALOG;
|
||
|
|
||
|
} // OPENS_DIALOG :: QueryHelpContext
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPEN_DIALOG :: Refresh
|
||
|
|
||
|
SYNOPSIS: Refreshes the Open Resources dialog.
|
||
|
|
||
|
EXIT: The dialog is feeling relaxed and refreshed.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
DWORD OPENS_DIALOG :: Refresh( VOID )
|
||
|
{
|
||
|
//
|
||
|
// Refresh the Open files listbox
|
||
|
//
|
||
|
|
||
|
DWORD err = _lbFiles.Refresh();
|
||
|
|
||
|
if ( err != NO_ERROR )
|
||
|
{
|
||
|
//
|
||
|
// Since we couldn't retreive the file information,
|
||
|
// we'll just display ??.
|
||
|
//
|
||
|
|
||
|
const TCHAR * pszNotAvailable = SZ("??");
|
||
|
|
||
|
_sltOpenCount.Enable( FALSE );
|
||
|
_sltLockCount.Enable( FALSE );
|
||
|
|
||
|
_sltOpenCount.SetText( pszNotAvailable );
|
||
|
_sltLockCount.SetText( pszNotAvailable );
|
||
|
|
||
|
_lbFiles.DeleteAllItems();
|
||
|
_pbClose.Enable( FALSE );
|
||
|
_pbCloseAll.Enable( FALSE );
|
||
|
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// Set open files and lock counts
|
||
|
//
|
||
|
|
||
|
_sltOpenCount.Enable( TRUE );
|
||
|
_sltLockCount.Enable( TRUE );
|
||
|
|
||
|
_sltOpenCount.SetValue( _lbFiles.QueryCount() );
|
||
|
_sltLockCount.SetValue( _lbFiles.QueryLockCount() );
|
||
|
|
||
|
//
|
||
|
// Enable buttons as appropriate
|
||
|
//
|
||
|
|
||
|
if ( _lbFiles.QuerySelCount() > 0 )
|
||
|
{
|
||
|
_pbClose.Enable( TRUE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( _pbClose.HasFocus() )
|
||
|
{
|
||
|
_pbOk.ClaimFocus();
|
||
|
}
|
||
|
|
||
|
_pbClose.Enable( FALSE );
|
||
|
}
|
||
|
|
||
|
if ( _lbFiles.QueryCount() > 0 )
|
||
|
{
|
||
|
_pbCloseAll.Enable( TRUE );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( _pbCloseAll.HasFocus() )
|
||
|
{
|
||
|
_pbOk.ClaimFocus();
|
||
|
}
|
||
|
|
||
|
_pbCloseAll.Enable( FALSE );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPEN_DIALOG :: WarnCloseMulti
|
||
|
|
||
|
SYNOPSIS: Warn the user before closing all open resources.
|
||
|
|
||
|
RETURNS: BOOL - TRUE if the wants to close the
|
||
|
resources,
|
||
|
FALSE otherwise.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL OPENS_DIALOG :: WarnCloseMulti( VOID )
|
||
|
{
|
||
|
//
|
||
|
// Get the number of items in the listbox.
|
||
|
//
|
||
|
|
||
|
INT cItems = _lbFiles.QueryCount();
|
||
|
UIASSERT( cItems > 0 );
|
||
|
|
||
|
MSGID idMsg = IDS_CLOSE_FILE_ALL;
|
||
|
|
||
|
//
|
||
|
// Scan for any file that is opened for write
|
||
|
//
|
||
|
|
||
|
for( INT i = 0 ; i < cItems ; i++ )
|
||
|
{
|
||
|
OPENS_LBI * plbi = _lbFiles.QueryItem( i );
|
||
|
|
||
|
UIASSERT( plbi != NULL );
|
||
|
|
||
|
if( plbi->IsOpenForWrite() )
|
||
|
{
|
||
|
idMsg = IDS_CLOSE_FILE_ALL_WRITE;
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return( ::MsgPopup( this,
|
||
|
idMsg,
|
||
|
MPSEV_WARNING,
|
||
|
MP_YESNO,
|
||
|
_nlsServer.QueryPch(),
|
||
|
MP_NO ) == IDYES );
|
||
|
|
||
|
} // OPEN_DIALOG :: WarnCloseMulti
|
||
|
|
||
|
//
|
||
|
// OPENS_LISTBOX methods.
|
||
|
//
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LISTBOX :: OPENS_LISTBOX
|
||
|
|
||
|
SYNOPSIS: OPENS_LISTBOX class constructor.
|
||
|
|
||
|
ENTRY: powOwner - The "owning" window.
|
||
|
|
||
|
cid - The listbox CID.
|
||
|
|
||
|
nlsServer - Name of target server
|
||
|
|
||
|
nlsBasePath - Base Path of File Enum
|
||
|
|
||
|
EXIT: The object is constructed.
|
||
|
|
||
|
RETURNS: No return value.
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
OPENS_LISTBOX :: OPENS_LISTBOX( OWNER_WINDOW * powOwner,
|
||
|
CID cid,
|
||
|
AFP_SERVER_HANDLE hServer )
|
||
|
: BLT_LISTBOX( powOwner, cid ),
|
||
|
_hServer( hServer ),
|
||
|
_dmdteDataFork( IDBM_LB_DATA_FORK ),
|
||
|
_dmdteResourceFork( IDBM_LB_RESOURCE_FORK ),
|
||
|
_dwNumLocks( 0 )
|
||
|
{
|
||
|
//
|
||
|
// Ensure we constructed properly.
|
||
|
//
|
||
|
if( QueryError() != NERR_Success )
|
||
|
return;
|
||
|
|
||
|
//
|
||
|
// Build the column width table to be used by
|
||
|
// OPENS_LBI :: Paint().
|
||
|
//
|
||
|
DISPLAY_TABLE::CalcColumnWidths(_adx,
|
||
|
COLS_OF_LB_FILES,
|
||
|
powOwner,
|
||
|
cid,
|
||
|
TRUE) ;
|
||
|
|
||
|
} // OPENS_LISTBOX :: OPENS_LISTBOX
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LISTBOX :: ~OPENS_LISTBOX
|
||
|
|
||
|
SYNOPSIS: OPENS_LISTBOX class destructor.
|
||
|
|
||
|
EXIT: The object is destroyed.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
OPENS_LISTBOX :: ~OPENS_LISTBOX()
|
||
|
{
|
||
|
//
|
||
|
// This space intentionally left blank.
|
||
|
//
|
||
|
|
||
|
} // OPENS_LISTBOX :: ~OPENS_LISTBOX
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LISTBOX :: Fill
|
||
|
|
||
|
SYNOPSIS: Fill the list of open files.
|
||
|
|
||
|
EXIT: The listbox is filled.
|
||
|
|
||
|
RETURNS: DWORD - Any errors encountered.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
DWORD OPENS_LISTBOX :: Fill( VOID )
|
||
|
{
|
||
|
AUTO_CURSOR Cursor;
|
||
|
|
||
|
//
|
||
|
// Enumerate all the open files.
|
||
|
//
|
||
|
|
||
|
PAFP_FILE_INFO pAfpFiles;
|
||
|
DWORD cEntriesRead;
|
||
|
DWORD cTotalAvail;
|
||
|
|
||
|
DWORD err = ::AfpAdminFileEnum( _hServer,
|
||
|
(LPBYTE *)&pAfpFiles,
|
||
|
(DWORD)-1, // Get all files
|
||
|
&cEntriesRead,
|
||
|
&cTotalAvail,
|
||
|
NULL );
|
||
|
|
||
|
if( err != NO_ERROR )
|
||
|
{
|
||
|
return err;
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Now that we know the file info is available,
|
||
|
// let's nuke everything in the listbox.
|
||
|
//
|
||
|
|
||
|
SetRedraw( FALSE );
|
||
|
DeleteAllItems();
|
||
|
|
||
|
//
|
||
|
// For iterating the available files.
|
||
|
//
|
||
|
PAFP_FILE_INFO pFileIter = pAfpFiles;
|
||
|
|
||
|
//
|
||
|
// Iterate the files adding them to the listbox.
|
||
|
//
|
||
|
|
||
|
_dwNumLocks = 0;
|
||
|
|
||
|
while( ( err == NO_ERROR ) && ( cEntriesRead-- ) )
|
||
|
{
|
||
|
OPENS_LBI * polbi = new OPENS_LBI( pFileIter->afpfile_id,
|
||
|
pFileIter->afpfile_username,
|
||
|
pFileIter->afpfile_open_mode,
|
||
|
pFileIter->afpfile_fork_type,
|
||
|
pFileIter->afpfile_num_locks,
|
||
|
pFileIter->afpfile_path );
|
||
|
if( AddItem( polbi ) < 0 )
|
||
|
{
|
||
|
err = ERROR_NOT_ENOUGH_MEMORY;
|
||
|
}
|
||
|
|
||
|
_dwNumLocks += pFileIter->afpfile_num_locks;
|
||
|
|
||
|
pFileIter++;
|
||
|
|
||
|
}
|
||
|
|
||
|
::AfpAdminBufferFree( pAfpFiles );
|
||
|
|
||
|
SetRedraw( TRUE );
|
||
|
Invalidate( TRUE );
|
||
|
|
||
|
return err;
|
||
|
|
||
|
} //OPENS_LISTBOX :: Fill( VOID )
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LISTBOX :: Refresh
|
||
|
|
||
|
SYNOPSIS: Refreshes the list of open resources.
|
||
|
|
||
|
EXIT: The listbox is refreshed & redrawn.
|
||
|
|
||
|
RETURNS: DWORD - Any errors encountered.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
DWORD OPENS_LISTBOX :: Refresh( VOID )
|
||
|
{
|
||
|
INT iCurrent = QueryCurrentItem();
|
||
|
INT iTop = QueryTopIndex();
|
||
|
|
||
|
DWORD err = Fill();
|
||
|
|
||
|
if( err != NO_ERROR )
|
||
|
{
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
INT cItems = QueryCount();
|
||
|
|
||
|
if( cItems > 0 )
|
||
|
{
|
||
|
iCurrent = min( max( iCurrent, 0 ), cItems - 1 );
|
||
|
iTop = min( max( iTop, 0 ), cItems - 1 );
|
||
|
|
||
|
SelectItem( iCurrent );
|
||
|
SetTopIndex( iTop );
|
||
|
}
|
||
|
|
||
|
|
||
|
return NO_ERROR;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
// OPENS_LBI methods.
|
||
|
//
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LBI :: OPENS_LBI
|
||
|
|
||
|
SYNOPSIS: OPENS_LBI class constructor.
|
||
|
|
||
|
ENTRY: pszUserName - The user for this entry.
|
||
|
|
||
|
usPermissions - Open permissions.
|
||
|
|
||
|
cLocks - Number of locks.
|
||
|
|
||
|
pszPath - The open pathname.
|
||
|
|
||
|
EXIT: The object is constructed.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
OPENS_LBI :: OPENS_LBI( DWORD dwFileID,
|
||
|
const TCHAR * pszUserName,
|
||
|
DWORD dwOpenMode,
|
||
|
DWORD dwForkType,
|
||
|
DWORD dwNumLocks,
|
||
|
const TCHAR * pszPath )
|
||
|
: _dwFileID( dwFileID ),
|
||
|
_nlsUserName(),
|
||
|
_dwOpenMode( dwOpenMode ),
|
||
|
_dwForkType( dwForkType ),
|
||
|
_nlsOpenMode(),
|
||
|
_nlsNumLocks( dwNumLocks ),
|
||
|
_nlsPath( pszPath )
|
||
|
{
|
||
|
|
||
|
if( QueryError() != NERR_Success )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
APIERR err;
|
||
|
if( ( ( err = _nlsUserName.QueryError() ) != NERR_Success ) ||
|
||
|
( ( err = _nlsOpenMode.QueryError() ) != NERR_Success ) ||
|
||
|
( ( err = _nlsNumLocks.QueryError() ) != NERR_Success ) ||
|
||
|
( ( err = _nlsPath.QueryError() ) != NERR_Success ) )
|
||
|
{
|
||
|
ReportError( err );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Initialize the more complex strings.
|
||
|
//
|
||
|
|
||
|
UINT idString =
|
||
|
((dwOpenMode & AFP_OPEN_MODE_READ)&&(dwOpenMode&AFP_OPEN_MODE_WRITE))
|
||
|
? IDS_OPEN_MODE_READ_WRITE
|
||
|
: (( dwOpenMode & AFP_OPEN_MODE_READ )
|
||
|
? IDS_OPEN_MODE_READ
|
||
|
: (( dwOpenMode & AFP_OPEN_MODE_WRITE)
|
||
|
? IDS_OPEN_MODE_WRITE
|
||
|
: IDS_OPEN_MODE_NONE));
|
||
|
|
||
|
err = _nlsOpenMode.Load( idString );
|
||
|
|
||
|
if( err != NERR_Success )
|
||
|
{
|
||
|
ReportError( err );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// If user name is NULL then a guest has loged on
|
||
|
//
|
||
|
|
||
|
if ( pszUserName == NULL )
|
||
|
{
|
||
|
err = _nlsUserName.Load( IDS_GUEST );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
err = _nlsUserName.CopyFrom( pszUserName );
|
||
|
}
|
||
|
|
||
|
if( err != NERR_Success )
|
||
|
{
|
||
|
ReportError( err );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
} //OPENS_LBI :: OPENS_LBI
|
||
|
|
||
|
/********************************************************************
|
||
|
|
||
|
NAME: OPENS_LBI :: ~OPENS_LBI
|
||
|
|
||
|
SYNOPSIS: OPENS_LBI class destructor.
|
||
|
|
||
|
EXIT: The object is destroyed.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
OPENS_LBI :: ~OPENS_LBI()
|
||
|
{
|
||
|
|
||
|
//
|
||
|
// This space intentionally left blank
|
||
|
//
|
||
|
}
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LBI :: Paint
|
||
|
|
||
|
SYNOPSIS: Draw an entry in OPENS_LISTBOX.
|
||
|
|
||
|
ENTRY: plb - Pointer to a BLT_LISTBOX.
|
||
|
|
||
|
hdc - The DC to draw upon.
|
||
|
|
||
|
prect - Clipping rectangle.
|
||
|
|
||
|
pGUILTT - GUILTT info.
|
||
|
|
||
|
EXIT: The item is drawn.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
VOID OPENS_LBI :: Paint( LISTBOX * plb,
|
||
|
HDC hdc,
|
||
|
const RECT * prect,
|
||
|
GUILTT_INFO * pGUILTT ) const
|
||
|
{
|
||
|
STR_DTE_ELLIPSIS dteUserName( _nlsUserName.QueryPch(),
|
||
|
plb, ELLIPSIS_RIGHT);
|
||
|
STR_DTE dteOpenMode( _nlsOpenMode.QueryPch() );
|
||
|
STR_DTE dteNumForks( _nlsNumLocks.QueryPch() );
|
||
|
STR_DTE_ELLIPSIS dtePath( _nlsPath.QueryPch(), plb, ELLIPSIS_PATH );
|
||
|
|
||
|
DISPLAY_TABLE dtab( COLS_OF_LB_FILES,
|
||
|
((OPENS_LISTBOX *)plb)->QueryColumnWidths() );
|
||
|
|
||
|
dtab[0] = ( _dwForkType == AFP_FORK_DATA )
|
||
|
? ((OPENS_LISTBOX *) plb)->QueryDataForkBitmap()
|
||
|
: ((OPENS_LISTBOX *) plb)->QueryResourceForkBitmap();
|
||
|
|
||
|
dtab[1] = &dteUserName;
|
||
|
dtab[2] = &dteOpenMode;
|
||
|
dtab[3] = &dteNumForks;
|
||
|
dtab[4] = &dtePath;
|
||
|
|
||
|
dtab.Paint( plb, hdc, prect, pGUILTT );
|
||
|
|
||
|
} // OPENS_LBI :: Paint
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LBI :: Compare
|
||
|
|
||
|
SYNOPSIS: Compare two OPENS_LBI items.
|
||
|
|
||
|
ENTRY: plbi - The "other" item.
|
||
|
|
||
|
RETURNS: INT - 0 if the items match.
|
||
|
-1 if we're < the other item.
|
||
|
+1 if we're > the other item.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
INT OPENS_LBI :: Compare( const LBI * plbi ) const
|
||
|
{
|
||
|
NLS_STR * pnls = &(((OPENS_LBI *)plbi)->_nlsUserName);
|
||
|
INT nResult = _nlsUserName._stricmp( *pnls );
|
||
|
|
||
|
if( nResult == 0 )
|
||
|
{
|
||
|
pnls = &(((OPENS_LBI *)plbi)->_nlsPath);
|
||
|
nResult = _nlsPath._stricmp( *pnls );
|
||
|
}
|
||
|
|
||
|
return nResult;
|
||
|
|
||
|
} // OPENS_LBI :: Compare
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LBI :: QueryLeadingChar
|
||
|
|
||
|
SYNOPSIS: Return the leading character of this item.
|
||
|
|
||
|
RETURNS: WCHAR - The leading character.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
WCHAR OPENS_LBI :: QueryLeadingChar( VOID ) const
|
||
|
{
|
||
|
ISTR istr( _nlsUserName );
|
||
|
|
||
|
return _nlsUserName.QueryChar( istr );
|
||
|
}
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: OPENS_LBI :: IsOpenForWrite
|
||
|
|
||
|
SYNOPSIS: Checks to see if the file is opened for write
|
||
|
|
||
|
RETURNS: TRUE if this file is opened for write, FALSE otherwise.
|
||
|
|
||
|
HISTORY:
|
||
|
NarenG 2-Oct-1992 Stole from server manager.
|
||
|
Merged OPEN_DIALOG_BASE with OPENS_DIALIG
|
||
|
|
||
|
********************************************************************/
|
||
|
BOOL OPENS_LBI :: IsOpenForWrite( VOID ) const
|
||
|
{
|
||
|
return ( _dwOpenMode & AFP_OPEN_MODE_WRITE );
|
||
|
}
|
||
|
|