mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-12 14:37:50 +00:00
199 lines
4.8 KiB
C++
199 lines
4.8 KiB
C++
/* -*- 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);
|
|
}
|