/* -*- 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 "wfedde.h" // This file used to define the ncapi_data structure // in the URL_Struct. // Initialize CNcapiUrlData::CNcapiUrlData(CAbstractCX *pCX, URL_Struct *pUrl) { ASSERT(pCX); ASSERT(pUrl); // Can delete the URL_Struct initially. m_bDelete = TRUE; // Assign in the URL, both ways. m_pUrl = pUrl; m_pUrl->ncapi_data = (void *)this; // Assign in the context, both ways. m_pCX = pCX; m_pCX->m_pNcapiUrlData = this; // Set up so that we haven't initialized any progress. m_bInitializedProgress = FALSE; m_dwTransactionID = 0; } // Destroy CNcapiUrlData::~CNcapiUrlData() { // Clear us out of the URL struct. m_pUrl->ncapi_data = NULL; // Clear us out of the context. m_pCX->m_pNcapiUrlData = NULL; } // Return whether or not it's ok to NET_FreeUrlStruct BOOL CNcapiUrlData::CanFreeUrl() const { return(m_bDelete); } // Set that we shouldn't delete the URL in the exit routine. void CNcapiUrlData::DontFreeUrl() { m_bDelete = FALSE; } // Change contexts. void CNcapiUrlData::ChangeContext(CAbstractCX *pNewCX) { ASSERT(pNewCX); // Clear out the old context. m_pCX->m_pNcapiUrlData = NULL; // Bring in the new. m_pCX = pNewCX; m_pCX->m_pNcapiUrlData = this; } // Set a DDE progress server for alert and progress messages. // An empty CString will clear the progress server if it needs to be that way. void CNcapiUrlData::SetProgressServer(CString& csProgressServer) { // Just copy it. m_csProgressServer = csProgressServer; } // Report whether or not we have a progress server to report to. BOOL CNcapiUrlData::HasProgressServer() const { return(m_csProgressServer.IsEmpty() == FALSE); } // Clear the progress server. void CNcapiUrlData::ClearProgressServer() { m_csProgressServer.Empty(); } // Initialize the progress of the progress app. void CNcapiUrlData::InitializeProgress() { // Only do this if we have a progress server. if(HasProgressServer() && m_bInitializedProgress == FALSE) { m_dwTransactionID = CDDEWrapper::BeginProgress(this, (const char *)m_csProgressServer, m_pCX->GetContextID(), szLoadString(IDS_LOADING)); // If it didn't work, it would have cleared the progress server. if(HasProgressServer()) { // Set the range. CDDEWrapper::SetProgressRange(this, (const char *)m_csProgressServer, m_dwTransactionID, 100); } } // Mark progress as being attempted to initialize. m_bInitializedProgress = TRUE; } // Tell the progress server about our progress. void CNcapiUrlData::MakingProgress(const char *pMessage, int iPercent) { // Only do this if need be. if(HasProgressServer() && m_bInitializedProgress == TRUE) { if(CDDEWrapper::MakingProgress(this, (const char *)m_csProgressServer, m_dwTransactionID, pMessage, (DWORD)iPercent)) { // They would like us to discontinue the load. m_pCX->Interrupt(); } } } // End the progress. void CNcapiUrlData::EndProgress() { // Only do if need be. if(HasProgressServer() && m_bInitializedProgress == TRUE) { CDDEWrapper::EndProgress(this, (const char *)m_csProgressServer, m_dwTransactionID); } } // Attempt to pass off any alerts to the external app. // Return non zero on their handling of the message. BOOL CNcapiUrlData::Alert(const char *pMessage) { // Only do this if need be. if(HasProgressServer()) { return((BOOL)CDDEWrapper::AlertProgress(this, (const char *)m_csProgressServer, pMessage)); } return(FALSE); } // Attempt to pass off any confirms to the external app. // Return a non BOOL value to indicate failure. BOOL CNcapiUrlData::Confirm(const char *pMessage) { // Only do this if need be. if(HasProgressServer()) { DWORD dwResult = CDDEWrapper::ConfirmProgress(this, (const char *)m_csProgressServer, pMessage); // Convert to a return value. if(dwResult == CDDEWrapper::m_PushedYes) { return(TRUE); } else if(dwResult == CDDEWrapper::m_PushedNo) { return(FALSE); } } return((BOOL)-1); } // Return our transaction ID. // Value of 0 is invalid. DWORD CNcapiUrlData::GetTransactionID() const { if(HasProgressServer() && m_bInitializedProgress) { return(m_dwTransactionID); } return(0); }