/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1992 **/ /**********************************************************************/ /* * sharemgt.cxx * Contains the dialog for managing shares in the server manager * SHARE_MANAGEMENT_DIALOG * * FILE HISTORY: * Yi-HsinS 1/6/92 Created * Yi-HsinS 3/12/92 Fixed behaviour of default buttons * and added SEL_SRV_ONLY flag to * STANDALONE_SET_FOCUS_DIALOG. * Yi-HsinS 4/2/92 Added MayRun * Yi-HsinS 5/20/92 Added call to IsValid on when Add * Share button is pressed. * Yi-HsinS 8/6/92 Reorganize to match Winball * Yi-HsinS 11/20/92 Added support for sticky shares * */ #define INCL_WINDOWS_GDI #define INCL_WINDOWS #define INCL_DOSERRORS #define INCL_NETERRORS #define INCL_NETSERVER #define INCL_NETWKSTA #define INCL_NETSHARE #define INCL_NETCONS #define INCL_NETLIB #define INCL_ICANON #include extern "C" { #include #include #include } #define INCL_BLT_DIALOG #define INCL_BLT_CONTROL #define INCL_BLT_MSGPOPUP #define INCL_BLT_SPIN_GROUP #include #include #include #include #include #include #include #include #include // for string and character constants #include "sharemgt.hxx" /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::SHARE_MANAGEMENT_DIALOG SYNOPSIS: Constructor ENTRY: hwndParent - hwnd of the parent window pszComputer - name of the selected computer ulHelpContextBase - the base help context EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/6/92 Created ********************************************************************/ SHARE_MANAGEMENT_DIALOG::SHARE_MANAGEMENT_DIALOG( HWND hwndParent, const TCHAR *pszComputer, ULONG ulHelpContextBase ) : VIEW_SHARE_DIALOG_BASE( MAKEINTRESOURCE(IDD_SHAREMANAGEMENTDLG), hwndParent, ulHelpContextBase, STYPE_DISK_SHARE | STYPE_IPC_SHARE ), _buttonStopSharing( this, BUTTON_STOPSHARING ), _buttonShareInfo ( this, BUTTON_SHAREINFO ), _buttonClose ( this, IDOK ) { if ( QueryError() != NERR_Success ) return; UIASSERT( pszComputer != NULL ); APIERR err; if ((err = Init( pszComputer )) != NERR_Success ) { ReportError( err ); return; } } /******************************************************************* NAME: SHARING_MANAGEMENT_DIALOG::Init SYNOPSIS: Initialize all information displayed in the dialog ENTRY: pszComputer - the name of the computer we are focusing on EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 4/2/92 Created ********************************************************************/ APIERR SHARE_MANAGEMENT_DIALOG::Init( const TCHAR *pszComputer ) { AUTO_CURSOR autocur; // // Update the listbox and the title of the listbox // APIERR err = InitComputer( pszComputer ); ResetControls(); return err; } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::Refresh SYNOPSIS: Refresh the share listbox ENTRY: EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/7/92 Created ********************************************************************/ APIERR SHARE_MANAGEMENT_DIALOG::Refresh( VOID ) { APIERR err = VIEW_SHARE_DIALOG_BASE::Refresh(); ResetControls(); return err; } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::ResetControls SYNOPSIS: Enable/Disable/MakeDefault the push buttons according to whether there are items in the listbox ENTRY: EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/8/92 Created ********************************************************************/ VOID SHARE_MANAGEMENT_DIALOG::ResetControls( VOID ) { INT nCount = QueryLBShare()->QueryCount(); // // If there are items in the listbox, select the first one // and set focus to the listbox. // if ( nCount > 0 ) { QueryLBShare()->SelectItem( 0 ); QueryLBShare()->ClaimFocus(); // JonN 01/27/99: PREFIX bug 444908 _buttonShareInfo.Enable( NULL != QueryLBShare()->QueryItem() && !QueryLBShare()->QueryItem()->IsSticky()); } // // Else set focus to the Close button // else { _buttonClose.MakeDefault(); _buttonClose.ClaimFocus(); _buttonShareInfo.Enable( FALSE ); } // // Disable the stop sharing buttons if there are no // items in the listbox // _buttonStopSharing.Enable( nCount > 0 ); } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::OnCommand SYNOPSIS: Handle all push buttons commands ENTRY: event - the CONTROL_EVENT that occurred EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/8/92 Created ********************************************************************/ BOOL SHARE_MANAGEMENT_DIALOG::OnCommand( const CONTROL_EVENT &event ) { APIERR err = NERR_Success; switch ( event.QueryCid() ) { case LB_SHARE: if ( event.QueryCode() == LBN_SELCHANGE ) { if ( QueryLBShare()->QueryCount() > 0 ) _buttonShareInfo.Enable( !QueryLBShare()->QueryItem()->IsSticky()); } else { return VIEW_SHARE_DIALOG_BASE::OnCommand( event ); } break; case BUTTON_STOPSHARING: err = OnStopSharing(); break; case BUTTON_SHAREINFO: err = OnShareInfo(); break; case BUTTON_ADDSHARE: err = OnAddShare(); break; default: return VIEW_SHARE_DIALOG_BASE::OnCommand( event ); } if ( err != NERR_Success ) ::MsgPopup( this, err ); return TRUE; } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::OnStopSharing SYNOPSIS: Called when the "Stop Sharing" button is pressed. Delete the selected share and pop up any warning message if there are users connected to the share. ENTRY: EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/8/92 Created ********************************************************************/ APIERR SHARE_MANAGEMENT_DIALOG::OnStopSharing( VOID ) { AUTO_CURSOR autocur; SHARE_LISTBOX *plbShare = QueryLBShare(); SHARE_LBI *pshlbi = plbShare->QueryItem(); // // Stop sharing the selected item in the listbox // BOOL fCancel = FALSE; APIERR err; if ( pshlbi && pshlbi->IsSticky() ) // JonN 01/27/99 PREFIX bug 444912 { err = ::MNetShareDelSticky( QueryComputerName(), pshlbi->QueryShareName()->QueryPch(), 0 ); // Reserved } else { err = StopShare( *(pshlbi->QueryShareName()), &fCancel ); } if ( err != NERR_Success ) { ::MsgPopup( this, err ); } // // If the user successfully deleted the share or if the error // from deleting the share is NERR_NetNameNotFound, refresh the // listbox to reflect the latest information. // APIERR err1 = NERR_Success; if ( (!fCancel && (err == NERR_Success )) // successfully deleted a share || ( err == NERR_NetNameNotFound ) ) { err1 = Refresh(); } return err1; } /******************************************************************* NAME: SHARING_MANAGEMENT_DIALOG::OnAddShare SYNOPSIS: Called when the "New Share" button is pressed. ENTRY: EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 4/2/92 Created ********************************************************************/ APIERR SHARE_MANAGEMENT_DIALOG::OnAddShare( VOID ) { APIERR err = NERR_Success; // JonN 01/27/00 PREFIX bug 444911 SVRMGR_NEW_SHARE_DIALOG *pdlg = new SVRMGR_NEW_SHARE_DIALOG( QueryRobustHwnd(), QueryServer2(), QueryHelpContextBase() ); BOOL fSucceeded; if ( ( pdlg == NULL ) || ((err = pdlg->QueryError()) != NERR_Success ) || ((err = pdlg->Process( &fSucceeded )) != NERR_Success ) ) { err = err ? err : (APIERR) ERROR_NOT_ENOUGH_MEMORY; ::MsgPopup( this, err ); } delete pdlg; pdlg = NULL; // // If the user succeeded in creating a new share, // refresh the share listbox. // return ( fSucceeded? Refresh() : NERR_Success ); } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::OnShareInfo SYNOPSIS: Called when the "Properties" button is pressed. Will pop up a dialog showing the properties of the selected share. ENTRY: EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/8/92 Created ********************************************************************/ APIERR SHARE_MANAGEMENT_DIALOG::OnShareInfo( VOID ) { APIERR err = NERR_Success; SHARE_LISTBOX *plbShare = QueryLBShare(); SHARE_LBI *pshlbi = plbShare->QueryItem(); SVRMGR_SHARE_PROP_DIALOG *pdlg = new SVRMGR_SHARE_PROP_DIALOG( QueryRobustHwnd(), QueryServer2(), *(pshlbi->QueryShareName()), QueryHelpContextBase() ); BOOL fChanged; if ( ( pdlg == NULL ) || ((err = pdlg->QueryError()) != NERR_Success ) || ((err = pdlg->Process( &fChanged )) != NERR_Success ) ) { err = err ? err : (APIERR) ERROR_NOT_ENOUGH_MEMORY; } delete pdlg; pdlg = NULL; // // If the user successfully change the path of the share or if // the error from getting the share properties is NERR_NetNameNotFound, // refresh the listbox to reflect the latest information. // if ( (( err == NERR_Success) && fChanged ) || ( err == NERR_NetNameNotFound ) ) { APIERR err1 = Refresh(); err = err? err : err1; } plbShare->ClaimFocus(); return err; } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::OnShareLbDblClk SYNOPSIS: This is called when the user double clicks on a share in the listbox. Will pop up a dialog showing the properties of the selected share. ENTRY: EXIT: RETURNS: NOTES: HISTORY: Yi-HsinS 1/8/92 Created ********************************************************************/ BOOL SHARE_MANAGEMENT_DIALOG::OnShareLbDblClk( VOID ) { APIERR err = OnShareInfo(); if ( err != NERR_Success ) ::MsgPopup( this, err ); return TRUE; } /******************************************************************* NAME: SHARE_MANAGEMENT_DIALOG::QueryHelpContext SYNOPSIS: Query the help context of the dialog ENTRY: EXIT: RETURNS: Return the help context of the dialog NOTES: HISTORY: Yi-HsinS 1/6/92 Created ********************************************************************/ ULONG SHARE_MANAGEMENT_DIALOG::QueryHelpContext( VOID ) { return QueryHelpContextBase() + HC_SVRMGRSHAREMANAGEMENT; }