home *** CD-ROM | disk | FTP | other *** search
- /* -*- 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.
- */
-
-
- /* pwcommon.cpp
- * cross-platform progress routines
- */
- #include "pw_public.h"
- #include "ntypes.h"
- #include "structs.h"
- #include "proto.h"
- #include "xp_mem.h"
- #include "fe_proto.h"
- #include "ctxtfunc.h"
- #include "xp_thrmo.h"
-
- void pw_Progress(MWContext * cx, const char *msg);
- void pw_Alert(MWContext * cx, const char *msg);
- void pw_GraphProgressInit(MWContext *context, URL_Struct *URL_s, int32 content_length);
- void pw_GraphProgressDestroy(MWContext *context, URL_Struct *URL_s, int32 content_length, int32 total_bytes_read);
- void pw_GraphProgress(MWContext *context, URL_Struct *URL_s, int32 bytes_received, int32 bytes_since_last_time, int32 content_length);
- XP_Bool pw_Confirm(MWContext * context, const char * Msg);
- char* pw_Prompt(MWContext * context, const char * Msg, const char * dflt);
- char* pw_PromptWithCaption(MWContext * context, const char *caption, const char * Msg, const char * dflt);
- XP_Bool pw_PromptUsernameAndPassword(MWContext *,const char *,char **, char **);
- char * pw_PromptPassword(MWContext * context, const char * Msg);
- void pw_EnableClicking(MWContext * context);
- void pw_AllConnectionsComplete(MWContext * context);
- void pw_SetProgressBarPercent(MWContext *context, int32 percent);
- void pw_SetCallNetlibAllTheTime(MWContext *context);
- void pw_ClearCallNetlibAllTheTime(MWContext *context);
-
- /* This struct encapsulates the data we need to store in our progress context */
-
- struct pw_environment_ {
- pw_ptr progressWindow;
- /* data for progress total calculations */
- int outstandingURLs; /* How many outstanding URLs do we have */
- XP_Bool hasUnknownSizeURLs; /* How many outstanding URLs have unknown size */
- unsigned long total_bytes;
- unsigned long bytes_received;
- unsigned long start_time_secs;
- } ;
-
- typedef struct pw_environment_ pw_environment;
-
- #ifdef XP_MAC
- #pragma export on
- #endif
-
- MWContext * PW_CreateProgressContext()
- {
- /* After the merge, it'll be XP_NewCntxt */
-
- pw_environment * p_context;
- MWContext * newMWContext;
-
- p_context = (pw_environment *)XP_CALLOC(sizeof(pw_environment), 1);
- if (p_context == NULL)
- return NULL;
-
- /* initialize the new MWContext */
-
- newMWContext = (MWContext *) XP_CALLOC(sizeof( MWContext ), 1);
- if (newMWContext == NULL)
- return NULL;
-
- // XP_AddContextToList(newMWContext);
- newMWContext->type = MWContextProgressModule;
- XP_InitializeContext(newMWContext);
- // Assign all the functions
- newMWContext->funcs = (ContextFuncs*) XP_ALLOC(sizeof(ContextFuncs));
- if (newMWContext->funcs == NULL )
- return NULL;
-
- newMWContext->funcs->Progress = pw_Progress;
- newMWContext->funcs->Alert = pw_Alert;
- newMWContext->funcs->GraphProgressInit = pw_GraphProgressInit;
- newMWContext->funcs->GraphProgressDestroy = pw_GraphProgressDestroy;
- newMWContext->funcs->GraphProgress = pw_GraphProgress;
- newMWContext->funcs->Confirm = pw_Confirm;
- newMWContext->funcs->Prompt = pw_Prompt;
- newMWContext->funcs->PromptWithCaption = pw_PromptWithCaption;
- newMWContext->funcs->PromptUsernameAndPassword = pw_PromptUsernameAndPassword;
- newMWContext->funcs->PromptPassword = pw_PromptPassword;
- newMWContext->funcs->PromptPassword = pw_PromptPassword;
- newMWContext->funcs->EnableClicking = pw_EnableClicking;
- newMWContext->funcs->AllConnectionsComplete = pw_AllConnectionsComplete;
- newMWContext->funcs->SetProgressBarPercent = pw_SetProgressBarPercent;
- newMWContext->funcs->SetCallNetlibAllTheTime = pw_SetCallNetlibAllTheTime;
- newMWContext->funcs->ClearCallNetlibAllTheTime = pw_ClearCallNetlibAllTheTime;
-
-
- newMWContext->mime_data = (struct MimeDisplayData *)p_context; /* Hackily overloading a part of MWContext */
- return newMWContext;
- }
-
- void PW_DestroyProgressContext(MWContext * context)
- {
- if (context)
- {
- // XP_RemoveContextFromList(context);
- pw_ptr pw = ((pw_environment *)(context->mime_data))->progressWindow;
- XP_FREEIF( context->funcs);
- XP_FREEIF(context);
- }
- }
-
- void PW_AssociateWindowWithContext(MWContext * context, pw_ptr pw)
- {
- pw_environment * e = (pw_environment *)(context->mime_data);
- XP_Bool doReset;
-
- if (context->type != MWContextProgressModule)
- {
- XP_ASSERT(FALSE);
- return;
- }
- doReset = (e->progressWindow != pw);
- e->progressWindow = pw;
- if (doReset &&
- (pw != NULL))
- {
- PW_SetProgressText( pw, NULL);
- }
- }
-
- #ifdef XP_MAC
- #pragma export off
- #endif
-
-
- void pw_Progress(MWContext * cx, const char *msg)
- {
- pw_ptr pw = ((pw_environment *)(cx->mime_data))->progressWindow;
- if (pw)
- PW_SetLine2(pw, msg);
- }
-
- void pw_Alert(MWContext * /*cx*/, const char *msg)
- {
- FE_Alert(NULL, msg);
- }
-
- void pw_GraphProgressInit(MWContext *context, URL_Struct* /*URL_s*/, int32 content_length)
- {
- pw_environment * pe = (pw_environment *)context->mime_data;
-
- pe->outstandingURLs += 1;
-
- if ( content_length > 0 )
- pe->total_bytes += content_length;
- else
- pe->hasUnknownSizeURLs = TRUE;
-
- if (pe->outstandingURLs == 1) /* First URL got started, set the start time */
- pe->start_time_secs = XP_TIME();
- }
-
- void pw_GraphProgressDestroy(MWContext *context, URL_Struct* /*URL_s*/, int32 /*content_length*/, int32 /*total_bytes_read*/)
- {
- pw_environment * pe = (pw_environment *)context->mime_data;
- pe->outstandingURLs -= 1;
-
- if ( pe->outstandingURLs == 0)
- {
- if ( pe->progressWindow )
- {
- PW_SetProgressText( pe->progressWindow, NULL);
- PW_SetProgressRange( pe->progressWindow, 0, 0);
- PW_SetProgressValue( pe->progressWindow, 0 );
- }
- pe->bytes_received = 0;
- pe->total_bytes = 0;
- pe->start_time_secs = 0;
- pe->hasUnknownSizeURLs = FALSE;
- }
- }
-
- void pw_GraphProgress(MWContext *context, URL_Struct* /*URL_s*/, int32 /*bytes_received*/, int32 bytes_since_last_time, int32 /*content_length*/)
- {
- pw_environment * pe = (pw_environment *)context->mime_data;
- const char * progressText;
-
- pe->bytes_received += bytes_since_last_time;
- if (pe->progressWindow)
- {
- progressText = XP_ProgressText( pe->hasUnknownSizeURLs ? 0 : pe->total_bytes,
- pe->bytes_received,
- pe->start_time_secs,
- XP_TIME());
- PW_SetProgressText( pe->progressWindow, progressText);
- }
- }
-
- void pw_SetProgressBarPercent(MWContext *context, int32 percent)
- {
- pw_environment * pe = (pw_environment *)context->mime_data;
- if (pe->progressWindow)
- {
- PW_SetProgressValue( pe->progressWindow, percent);
- }
- }
-
- XP_Bool pw_Confirm(MWContext* /*context*/, const char* /*Msg*/)
- {
- XP_ASSERT(FALSE);
- return FALSE;
- // return FE_Confirm(NULL, Msg);
- }
-
- char* pw_Prompt(MWContext * /*context*/, const char * /*Msg*/, const char * /*dflt*/)
- {
- XP_ASSERT(FALSE);
- return NULL;
- // return FE_Prompt(NULL, Msg, dflt);
- }
-
- char* pw_PromptWithCaption(MWContext * /*context */, const char * /* caption */, const char * /*Msg*/, const char * /*dflt*/)
- {
- return NULL; // FE_PromptWithCaption(NULL, caption, Msg, dflt);
- }
-
- XP_Bool pw_PromptUsernameAndPassword(MWContext *,const char * /* prompt */,char ** /* username */ , char ** /* password */)
- {
- //return FE_PromptUsernameAndPassword(NULL, prompt, username, password);
- return FALSE;
- }
-
- char * pw_PromptPassword(MWContext * /*context*/, const char * /*Msg*/)
- {
- // return FE_PromptPassword(NULL, Msg);
- return NULL;
- }
-
- void pw_EnableClicking(MWContext * /*context*/)
- {
- }
-
- void pw_AllConnectionsComplete(MWContext * /*context*/)
- {
- }
-
- void pw_SetCallNetlibAllTheTime(MWContext * /*context*/)
- {
- XP_ASSERT(FALSE);
- }
-
- void pw_ClearCallNetlibAllTheTime(MWContext * /*context*/)
- {
- XP_ASSERT(FALSE);
- }
-
-