371 lines
6.5 KiB
C++
371 lines
6.5 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
// ProgressFrame.cpp
|
|
// By Daniel Malmer
|
|
//
|
|
// Implementation of the XP progress dialog.
|
|
// Basically a wrapper around a DownloadFrame.
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "ProgressFrame.h"
|
|
#include "pw_public.h"
|
|
#include "Xfe/ProgressBar.h"
|
|
#include "Dashboard.h"
|
|
#include "xpassert.h"
|
|
|
|
#if 0
|
|
#include "ViewGlue.h"
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// C++ implementation of C API
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
/*
|
|
* XFE_ProgressFrame
|
|
*/
|
|
XFE_ProgressFrame::XFE_ProgressFrame(Widget parent) : XFE_DownloadFrame(parent, NULL)
|
|
{
|
|
Widget label;
|
|
|
|
label = XtNameToWidget(getBaseWidget(), "*downloadURLLabel");
|
|
if ( label ) fe_SetString(label, XmNlabelString, "");
|
|
|
|
label = XtNameToWidget(getBaseWidget(), "*downloadFileLabel");
|
|
if ( label ) fe_SetString(label, XmNlabelString, "");
|
|
#if 1
|
|
/* 116773: Reopen ThreadFrame after "OK" IMAP Upgrade dialog
|
|
* leads to core dump
|
|
*/
|
|
notifyInterested(XFE_Component::logoStartAnimation, NULL);
|
|
#endif
|
|
}
|
|
|
|
|
|
/*
|
|
* ~XFE_ProgressFrame
|
|
*/
|
|
XFE_ProgressFrame::~XFE_ProgressFrame()
|
|
{
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::Create
|
|
*/
|
|
pw_ptr
|
|
XFE_ProgressFrame::Create(MWContext* /*parent*/, PW_WindowType /*type*/)
|
|
{
|
|
return (pw_ptr) this;
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::Destroy
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::Destroy(void)
|
|
{
|
|
#if 1
|
|
/* 116773: Reopen ThreadFrame after "OK" IMAP Upgrade dialog
|
|
* leads to core dump
|
|
*/
|
|
delete_response();
|
|
#endif
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetCancelCallback
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetCancelCallback(PW_CancelCallback cancelcb, void* cancelClosure)
|
|
{
|
|
m_cancel_cb = cancelcb;
|
|
m_cancel_closure = cancelClosure;
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::isCommandEnabled
|
|
*/
|
|
XP_Bool
|
|
XFE_ProgressFrame::isCommandEnabled(CommandType cmd,
|
|
void */*calldata*/, XFE_CommandInfo*)
|
|
{
|
|
return ( cmd == xfeCmdStopLoading );
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::handlesCommand
|
|
*/
|
|
XP_Bool
|
|
XFE_ProgressFrame::handlesCommand(CommandType cmd,
|
|
void */*calldata*/, XFE_CommandInfo*)
|
|
{
|
|
return ( cmd == xfeCmdStopLoading );
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::doCommand
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::doCommand(CommandType cmd,
|
|
void */*calldata*/, XFE_CommandInfo*)
|
|
{
|
|
if ( cmd == xfeCmdStopLoading && m_cancel_cb ) {
|
|
m_cancel_cb(m_cancel_closure);
|
|
}
|
|
|
|
delete_response();
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetWindowTitle
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetWindowTitle(const char *title)
|
|
{
|
|
XP_ASSERT(title);
|
|
|
|
XFE_SetDocTitle(fe_WidgetToMWContext(getBaseWidget()), (char*) title);
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetLine1
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetLine1(const char* text)
|
|
{
|
|
setAddress((char*) text);
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetLine2
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetLine2(const char* text)
|
|
{
|
|
setDestination((char*) text);
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetProgressText
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetProgressText(const char* text)
|
|
{
|
|
m_dashboard->setStatusText(text);
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetProgressRange
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetProgressRange(int32 minimum, int32 maximum)
|
|
{
|
|
m_progress_bar_min = minimum;
|
|
m_progress_bar_max = maximum;
|
|
}
|
|
|
|
|
|
/*
|
|
* XFE_ProgressFrame::SetProgressValue
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::SetProgressValue(int32 value)
|
|
{
|
|
int32 pct;
|
|
|
|
XP_ASSERT(value >= m_progress_bar_min);
|
|
XP_ASSERT(value <= m_progress_bar_max);
|
|
|
|
pct = (int32) (100 *
|
|
(double) value / (double) ( m_progress_bar_max - m_progress_bar_min ));
|
|
|
|
XFE_SetProgressBarPercent(getContext(), pct);
|
|
}
|
|
|
|
/*
|
|
* this is a slight hack so that the CONTEXT_DATA macro
|
|
* still works even with this type of context
|
|
*/
|
|
void
|
|
XFE_ProgressFrame::AssociateWindowWithContext(MWContext *context)
|
|
{
|
|
XP_ASSERT(context);
|
|
if (!context) return;
|
|
|
|
XP_ASSERT(context->type==MWContextProgressModule);
|
|
if (context->type!=MWContextProgressModule) return;
|
|
|
|
|
|
#if 1
|
|
/* 116773: Reopen ThreadFrame after "OK" IMAP Upgrade dialog
|
|
* leads to core dump
|
|
*/
|
|
fe_ContextData *fec = XP_NEW_ZAP (fe_ContextData);
|
|
XP_ASSERT(fec);
|
|
CONTEXT_DATA(context) = fec;
|
|
CONTEXT_WIDGET(context) = getBaseWidget();
|
|
// ViewGlue_addMapping(this, (void *)context);
|
|
#else
|
|
fe_ContextData *fec;
|
|
fec = (fe_ContextData *)XP_CALLOC(sizeof(fe_ContextData), 1);
|
|
|
|
CONTEXT_DATA(context) = fec;
|
|
CONTEXT_WIDGET(context) = getBaseWidget();
|
|
#endif
|
|
}
|
|
|
|
/**********************************************************************
|
|
these are the C-visible functions from progress.h
|
|
**********************************************************************/
|
|
|
|
/*
|
|
* pw_Create
|
|
*/
|
|
pw_ptr
|
|
pw_Create(MWContext* context, PW_WindowType type)
|
|
{
|
|
XFE_ProgressFrame* pw;
|
|
|
|
if ( context == NULL ) return NULL;
|
|
|
|
pw = new XFE_ProgressFrame(CONTEXT_WIDGET(context));
|
|
|
|
return pw->Create(context, type);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetCancelCallback
|
|
*/
|
|
void
|
|
pw_SetCancelCallback(pw_ptr pw, PW_CancelCallback cancelcb, void* cancelClosure)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetCancelCallback(cancelcb, cancelClosure);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_Show
|
|
*/
|
|
void
|
|
pw_Show(pw_ptr pw)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->show();
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_Hide
|
|
*/
|
|
void
|
|
pw_Hide(pw_ptr pw)
|
|
{
|
|
if (pw) {
|
|
((XFE_ProgressFrame *)pw)->hide();
|
|
#if 1
|
|
/* 116773: Reopen ThreadFrame after "OK" IMAP Upgrade dialog
|
|
* leads to core dump
|
|
*/
|
|
((XFE_ProgressFrame *)pw)->notifyInterested(XFE_Component::logoStopAnimation, NULL);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_Destroy
|
|
*/
|
|
void
|
|
pw_Destroy(pw_ptr pw)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->Destroy();
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetWindowTitle
|
|
*/
|
|
void
|
|
pw_SetWindowTitle(pw_ptr pw, const char *title)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetWindowTitle(title);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetLine1
|
|
*/
|
|
void
|
|
pw_SetLine1(pw_ptr pw, const char *text)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetLine1(text);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetLine2
|
|
*/
|
|
void
|
|
pw_SetLine2(pw_ptr pw, const char *text)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetLine2(text);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetProgressText
|
|
*/
|
|
void
|
|
pw_SetProgressText(pw_ptr pw, const char * text)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetProgressText(text);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetProgressRange
|
|
*/
|
|
void
|
|
pw_SetProgressRange(pw_ptr pw, int32 minimum, int32 maximum)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetProgressRange(minimum, maximum);
|
|
}
|
|
|
|
|
|
/*
|
|
* pw_SetProgressValue
|
|
*/
|
|
void
|
|
pw_SetProgressValue(pw_ptr pw, int32 value)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->SetProgressValue(value);
|
|
}
|
|
|
|
void
|
|
fe_pw_AssociateWindowWithContext(MWContext *context,
|
|
pw_ptr pw)
|
|
{
|
|
if (pw)
|
|
((XFE_ProgressFrame *)pw)->AssociateWindowWithContext(context);
|
|
}
|
|
|