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.
 
 
 
 
 
 

355 lines
9.3 KiB

#include "precomp.h"
#pragma hdrstop
#include "private.h"
#include "mainform.h"
#include "resource.h"
IMPLEMENT_DYNCREATE( MainForm, CFrameWnd )
BEGIN_MESSAGE_MAP( MainForm, CFrameWnd )
ON_WM_CREATE()
ON_WM_CLOSE()
ON_WM_SIZING()
ON_COMMAND(ID_FILE_LOAD_HOSTLIST, OnFileLoadHostlist)
ON_COMMAND(ID_FILE_SAVE_HOSTLIST, OnFileSaveHostlist)
ON_COMMAND( ID_WORLD_CONNECT, OnWorldConnect )
ON_COMMAND( ID_WORLD_NEW, OnWorldNewCluster )
ON_COMMAND( ID_REFRESH, OnRefresh )
ON_COMMAND( ID_CLUSTER_PROPERTIES, OnClusterProperties )
ON_COMMAND( ID_CLUSTER_REMOVE, OnClusterRemove )
ON_COMMAND( ID_CLUSTER_UNMANAGE, OnClusterUnmanage )
ON_COMMAND( ID_CLUSTER_ADD_HOST, OnClusterAddHost )
ON_COMMAND( ID_OPTIONS_CREDENTIALS, OnOptionsCredentials )
ON_COMMAND( ID_OPTIONS_LOGSETTINGS, OnOptionsLogSettings )
ON_COMMAND_RANGE( ID_CLUSTER_EXE_QUERY, ID_CLUSTER_EXE_RESUME,
OnClusterControl )
ON_COMMAND_RANGE( ID_CLUSTER_EXE_PORT_CONTROL, ID_CLUSTER_EXE_PORT_CONTROL,
OnClusterPortControl )
ON_COMMAND( ID_HOST_PROPERTIES, OnHostProperties )
ON_COMMAND( ID_HOST_STATUS, OnHostStatus )
ON_COMMAND( ID_HOST_REMOVE, OnHostRemove )
ON_COMMAND_RANGE( ID_HOST_EXE_QUERY, ID_HOST_EXE_RESUME,
OnHostControl )
ON_COMMAND_RANGE( ID_HOST_EXE_PORT_CONTROL, ID_HOST_EXE_PORT_CONTROL,
OnHostPortControl )
END_MESSAGE_MAP()
MainForm::MainForm()
: m_pLeftView(NULL)
{
m_bAutoMenuEnable = FALSE;
}
//
// 2/14/01: JosephJ This is used by class Document -- couldn't figure
// out what MFC calls to make to get the main frame class.
// See notes.txt entry:
// 02/14/2002 JosephJ Processing UI updates in the foreground
//
CWnd *g_pMainFormWnd;
int
MainForm::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
static const unsigned int indicator = ID_SEPARATOR;
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
statusBar.Create( this );
statusBar.SetIndicators( &indicator, 1 );
g_pMainFormWnd = this;
return 0;
}
BOOL MainForm::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// The following will prevent the "-" getting added to the window title
cs.style &= ~FWS_ADDTOTITLE;
return TRUE;
}
LRESULT
MainForm::WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
//
// For design information, see notes.txt entry:
// 02/14/2002 JosephJ Processing UI updates in the foreground
//
{
if (message == MYWM_DEFER_UI_MSG)
{
CUIWorkItem *pWorkItem = NULL;
Document *pDocument = this->GetDocument();
pWorkItem = (CUIWorkItem *) lParam;
if (pWorkItem != NULL && pDocument != NULL)
{
pDocument->HandleDeferedUIWorkItem(pWorkItem);
}
delete pWorkItem;
return 0;
}
else
{
return CFrameWnd::WindowProc(message, wParam, lParam);
}
}
/*
* Method: OnSizing
* Description: This method is called when the main window is being re-sized.
* We use this callback to preserve the window size ratios by
* moving the splitter windows as the window is re-sized.
*/
void
MainForm::OnSizing(UINT fwSide, LPRECT pRect)
{
/* Call the base class OnSizing method. */
CFrameWnd::OnSizing(fwSide, pRect);
// go for 30-70 split column split
// and 60-40 row split.
CRect rect;
GetWindowRect( &rect );
splitterWindow2.SetColumnInfo( 0, rect.Width() * 0.3, 10 );
splitterWindow2.SetColumnInfo( 1, rect.Width() * 0.7, 10 );
splitterWindow2.RecalcLayout();
splitterWindow.SetRowInfo( 0, rect.Height() * 0.6, 10 );
splitterWindow.SetRowInfo( 1, rect.Height() * 0.4, 10 );
splitterWindow.RecalcLayout();
}
BOOL
MainForm::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
{
// create the splitter window.
// it is really a splitter within a splitter
// ---------------------------------
// | | List |
// | | |
// | Tree | |
// | | |
// |-------------------------------|
// | Edit |
// | |
// | |
// ---------------------------------
// left pane is a treeview control
// right pane is another splitter with listview control
// and bottom is editview control.
splitterWindow.CreateStatic( this, 2, 1 );
// create nested splitter.
splitterWindow2.CreateStatic( &splitterWindow, 1, 2,
WS_CHILD | WS_VISIBLE | WS_BORDER,
splitterWindow.IdFromRowCol( 0, 0 )
);
splitterWindow2.CreateView( 0,
0,
RUNTIME_CLASS( LeftView ),
CSize( 0, 0 ),
pContext );
splitterWindow2.CreateView( 0,
1,
RUNTIME_CLASS( DetailsView ),
CSize( 0, 0 ),
pContext );
//
// Save a way a pointer to the left view -- we use this to send
// it menu operations.
//
m_pLeftView = (LeftView*) splitterWindow2.GetPane(0,0);
//
// create log view
//
splitterWindow.CreateView( 1,
0,
RUNTIME_CLASS( LogView ),
CSize( 0, 0 ),
pContext );
// go for 30-70 split column split
// and 60-40 row split.
CRect rect;
GetWindowRect( &rect );
splitterWindow2.SetColumnInfo( 0, rect.Width() * 0.3, 10 );
splitterWindow2.SetColumnInfo( 1, rect.Width() * 0.7, 10 );
splitterWindow2.RecalcLayout();
splitterWindow.SetRowInfo( 0, rect.Height() * 0.6, 10 );
splitterWindow.SetRowInfo( 1, rect.Height() * 0.4, 10 );
splitterWindow.RecalcLayout();
return TRUE;
}
// world level.
void MainForm::OnFileLoadHostlist()
{
if (m_pLeftView != NULL) m_pLeftView->OnFileLoadHostlist();
}
void MainForm::OnFileSaveHostlist()
{
if (m_pLeftView != NULL) m_pLeftView->OnFileSaveHostlist();
}
void MainForm::OnWorldConnect()
{
if (m_pLeftView != NULL) m_pLeftView->OnWorldConnect();
}
void MainForm::OnWorldNewCluster()
{
if (m_pLeftView != NULL) m_pLeftView->OnWorldNewCluster();
}
// cluster level.
void MainForm::OnRefresh()
{
if (m_pLeftView != NULL) m_pLeftView->OnRefresh(FALSE);
}
void MainForm::OnClusterProperties()
{
if (m_pLeftView != NULL) m_pLeftView->OnClusterProperties();
}
void MainForm::OnClusterRemove()
{
if (m_pLeftView != NULL) m_pLeftView->OnClusterRemove();
}
void MainForm::OnClusterUnmanage()
{
if (m_pLeftView != NULL) m_pLeftView->OnClusterUnmanage();
}
void MainForm::OnClusterAddHost()
{
if (m_pLeftView != NULL) m_pLeftView->OnClusterAddHost();
}
void MainForm::OnOptionsCredentials()
{
if (m_pLeftView != NULL) m_pLeftView->OnOptionsCredentials();
}
void MainForm::OnOptionsLogSettings()
{
if (m_pLeftView != NULL) m_pLeftView->OnOptionsLogSettings();
}
void MainForm::OnClusterControl(UINT nID )
{
if (m_pLeftView != NULL) m_pLeftView->OnClusterControl(nID);
}
void MainForm::OnClusterPortControl(UINT nID )
{
if (m_pLeftView != NULL) m_pLeftView->OnClusterPortControl(nID);
}
// host level
void MainForm::OnHostProperties()
{
if (m_pLeftView != NULL) m_pLeftView->OnHostProperties();
}
void MainForm::OnHostStatus()
{
if (m_pLeftView != NULL) m_pLeftView->OnHostStatus();
}
void MainForm::OnHostRemove()
{
if (m_pLeftView != NULL) m_pLeftView->OnHostRemove();
}
void MainForm::OnHostControl(UINT nID )
{
if (m_pLeftView != NULL) m_pLeftView->OnHostControl(nID);
}
void MainForm::OnHostPortControl(UINT nID )
{
if (m_pLeftView != NULL) m_pLeftView->OnHostPortControl(nID);
}
void MainForm::OnClose( )
{
Document *pDocument = NULL;
BOOL fBlock = !theApplication.IsProcessMsgQueueExecuting();
//
// Display pending operations ...
//
//
CLocalLogger logOperations;
UINT uCount = 0;
logOperations.Log(IDS_LOG_PENDING_OPERATIONS_ON_EXIT_MSG);
uCount = gEngine.ListPendingOperations(logOperations);
if (uCount != 0)
{
int sel;
sel = ::MessageBox(
NULL,
logOperations.GetStringSafe(),
GETRESOURCEIDSTRING(IDS_LOG_PENDING_OPERATIONS_ON_EXIT_CAP),
MB_ICONINFORMATION | MB_OKCANCEL
);
if (sel != IDOK)
{
goto end;
}
}
pDocument = this->GetDocument();
if (pDocument != NULL)
{
pDocument->PrepareToClose(fBlock);
}
if (fBlock)
{
CFrameWnd::OnClose();
}
else
{
theApplication.SetQuit();
}
end:
return;
}