gecko-dev/cmd/winfe/winclose.cpp

274 строки
8.2 KiB
C++
Executable File

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "stdafx.h"
#include "winclose.h"
#include "wfedde.h"
#include "mainfrm.h"
// Static property.
CPtrList CWindowChangeRegistry::m_Registry;
CWindowChangeItem::CWindowChangeItem(DWORD dwWindowID, int iType) : CWindowChangeRegistry() {
m_dwWindowID = dwWindowID;
m_iType = iType;
}
void CWindowChangeItem::Closing(DWORD dwWindowID) {
// Purpose: Go through all registered windows, and tell them if they are the one closing.
// Arguments: dwWindowID The window closing.
// Returns: void
// Comments:
// Revision History:
// 01-19-95 created GAB
//
// Go through the registry, call the member WindowClosing, vtables call the correct class.
POSITION rIndex = m_Registry.GetHeadPosition();
CWindowChangeItem *pClose;
while(rIndex != NULL) {
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
if(pClose->GetWindowID() == dwWindowID) {
pClose->WindowClosing(theApp.m_bExit);
// Remove it from the list, no longer needed, as window doesn't exist.
delete pClose;
}
}
}
void CWindowChangeItem::Sizing(DWORD dwWindowID, DWORD dwX, DWORD dwY, DWORD dwCX, DWORD dwCY) {
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
// Arguments: dwWindowID The window sizing.
// dw* The sizes.
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Go through the registry, call the member WindowSizing, vtables call the correct class.
POSITION rIndex = m_Registry.GetHeadPosition();
CWindowChangeItem *pClose;
while(rIndex != NULL) {
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
if(pClose->GetWindowID() == dwWindowID) {
pClose->WindowSizing(dwX, dwY, dwCX, dwCY);
}
}
}
void CWindowChangeItem::Maximizing(DWORD dwWindowID) {
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
// Arguments: dwWindowID The window maximizing.
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Go through the registry, call the member WindowMaximizing, vtables call the correct class.
POSITION rIndex = m_Registry.GetHeadPosition();
CWindowChangeItem *pClose;
while(rIndex != NULL) {
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
if(pClose->GetWindowID() == dwWindowID) {
pClose->WindowMaximizing();
}
}
}
void CWindowChangeItem::Minimizing(DWORD dwWindowID) {
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
// Arguments: dwWindowID The window minimizing.
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Go through the registry, call the member WindowMinimizing, vtables call the correct class.
POSITION rIndex = m_Registry.GetHeadPosition();
CWindowChangeItem *pClose;
while(rIndex != NULL) {
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
if(pClose->GetWindowID() == dwWindowID) {
pClose->WindowMinimizing();
}
}
}
void CWindowChangeItem::Normalizing(DWORD dwWindowID) {
// Purpose: Go through all registered windows, and tell them if they are the one is changing.
// Arguments: dwWindowID The window maximizing.
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Go through the registry, call the member WindowNormalizing, vtables call the correct class.
POSITION rIndex = m_Registry.GetHeadPosition();
CWindowChangeItem *pClose;
while(rIndex != NULL) {
pClose = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
if(pClose->GetWindowID() == dwWindowID) {
pClose->WindowNormalizing();
}
}
}
CDDEWindowChangeItem::CDDEWindowChangeItem(CString& csServiceName, DWORD dwWindowID) : CWindowChangeItem(dwWindowID, m_DDE) {
m_rIndex = m_Registry.AddTail(this);
m_csServiceName = csServiceName;
}
void CDDEWindowChangeItem::WindowClosing(BOOL bExiting) {
// Purpose: Tell the DDE implementation that the window is closing, and the exit status.
// Arguments: bExiting If the app is exiting, this is TRUE.
// Returns: void
// Comments:
// Revision History:
// 01-19-95 created GAB
//
// Just call the DDE implementation, it will handle the details.
CDDEWrapper::WindowChange(this, m_Close, (TwoByteBool)bExiting);
}
void CDDEWindowChangeItem::WindowSizing(DWORD dwX, DWORD dwY, DWORD dwCX, DWORD dwCY) {
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
// Arguments: dwX The x position.
// dwY The y position.
// dwCX The width.
// dwCY The height.
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Just call the DDE implementation, it will handle the details.
CDDEWrapper::WindowChange(this, m_Size, FALSE, dwX, dwY, dwCX, dwCY);
}
void CDDEWindowChangeItem::WindowMaximizing() {
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
// Arguments: void
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Just call the DDE implementation, it will handle the details.
CDDEWrapper::WindowChange(this, m_Maximize);
}
void CDDEWindowChangeItem::WindowMinimizing() {
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
// Arguments: void
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Just call the DDE implementation, it will handle the details.
CDDEWrapper::WindowChange(this, m_Minimize);
}
void CDDEWindowChangeItem::WindowNormalizing() {
// Purpose: Tell the DDE implementation that the window is resized, and the new coordinates.
// Arguments: void
// Returns: void
// Comments:
// Revision History:
// 02-01-95 created GAB
//
// Just call the DDE implementation, it will handle the details.
CDDEWrapper::WindowChange(this, m_Normalize);
}
BOOL CDDEWindowChangeItem::DDERegister(CString& csServiceName, DWORD dwWindowID) {
// Purpose: Register a server to monitor when a window closes.
// Arguments: csServiceName The server to callback.
// dwWindowID The window to monitor.
// Returns: BOOL Wether or not registration was successful.
// Comments: Constructor, basically.
// Revision History:
// 01-19-95 created GAB
//
// Don't allow the mimimized window to be monitored.
if(dwWindowID == 0) {
return(FALSE);
}
// Make sure such a window exists.
CAbstractCX *pCX = CAbstractCX::FindContextByID(dwWindowID);
if(NULL == pCX) {
return(FALSE);
}
if(pCX->GetContext()->type != MWContextBrowser) {
return(FALSE);
}
// Looks like it will work.
CDDEWindowChangeItem *pDontCare = new CDDEWindowChangeItem(csServiceName, dwWindowID);
return(TRUE);
}
BOOL CDDEWindowChangeItem::DDEUnRegister(CString& csServiceName, DWORD dwWindowID) {
// Purpose: UnRegister a server to monitor when a window closes.
// Arguments: csServiceName The server not wanting to monitor.
// dwWindowID The window to stop monitoring.
// Returns: BOOL False if never registered, otherwise TRUE.
// Comments: Destructor, basically.
// Revision History:
// 01-19-95 created GAB
//
// Allright, we need to go through ever entry in our registry.
POSITION rIndex = m_Registry.GetHeadPosition();
CWindowChangeItem *pCmp;
CDDEWindowChangeItem *pDelme = NULL;
while(rIndex != NULL) {
pCmp = (CWindowChangeItem *)m_Registry.GetNext(rIndex);
if(pCmp->GetType() != m_DDE) {
continue;
}
pDelme = (CDDEWindowChangeItem *)pCmp;
if(pDelme->GetServiceName() == csServiceName && pDelme->GetWindowID() == dwWindowID) {
break;
}
pDelme = NULL;
}
if(pDelme == NULL) {
return(FALSE);
}
else {
delete(pDelme);
return(TRUE);
}
}