/* -*- 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.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ /* MailDownloadFrame.cpp -- class definition for the mail download window. Created: Chris Toshok , 22-Jan-97 */ #include "MailDownloadFrame.h" #include "MNView.h" #include "MozillaApp.h" #include "Dashboard.h" #include "Logo.h" #include #include #include #include "xpgetstr.h" extern int XFE_DOWNLOADING_NEW_MESSAGES; extern int XFE_PURGING_NEWS_MESSAGES; extern "C" { void fe_set_scrolled_default_size(MWContext *context); } #ifdef DEBUG_toshok #define D(x) x #else #define D(x) #endif const char *XFE_MailDownloadView::pastPasswordCheck = "XFE_MailDownloadView::pastPasswordCheck"; const char *XFE_MailDownloadView::progressDone = "XFE_MailDownloadView::progressDone"; XFE_MailDownloadView::XFE_MailDownloadView(XFE_Component *toplevel_component, Widget parent, XFE_View *parent_view, MWContext *context, MSG_Pane *parent_pane, MSG_Pane *p) : XFE_MNView(toplevel_component, parent_view, context, p) { Widget form; XmString xmstr = XmStringCreate(XP_GetString(XFE_DOWNLOADING_NEW_MESSAGES), XmFONTLIST_DEFAULT_TAG); XmFontList fontList; form = XtCreateWidget("topArea", xmFormWidgetClass, parent, NULL, 0); m_label = XtVaCreateManagedWidget("label", xmLabelWidgetClass, form, XmNlabelString, xmstr, NULL); m_logo = new XFE_Logo((XFE_Frame*)toplevel_component, form, "logo"); XtVaGetValues(m_label, XmNfontList, &fontList, NULL); // we need more space, or else the window is *tiny* XtVaSetValues(m_label, XmNwidth, XmStringWidth(fontList, xmstr) * 2, NULL); XmStringFree(xmstr); /* now do the attachments. */ XtVaSetValues(m_label, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_WIDGET, XmNrightWidget, m_logo->getBaseWidget(), XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET, XmNtopWidget, m_logo->getBaseWidget(), XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET, XmNbottomWidget, m_logo->getBaseWidget(), NULL); XtVaSetValues(m_logo->getBaseWidget(), XmNleftAttachment, XmATTACH_NONE, XmNrightAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNtopAttachment, XmATTACH_FORM, NULL); m_logo->show(); if (!p) setPane(MSG_CreateProgressPane(m_contextData, XFE_MNView::getMaster(), parent_pane)); setBaseWidget(form); } XFE_MailDownloadView::~XFE_MailDownloadView() { destroyPane(); XFE_MozillaApp::theApp()->notifyInterested(XFE_MNView::MNChromeNeedsUpdating); } void XFE_MailDownloadView::startDownload() { XmString xmstr = XmStringCreate(XP_GetString(XFE_DOWNLOADING_NEW_MESSAGES), XmFONTLIST_DEFAULT_TAG); XtVaSetValues(m_label, XmNlabelString, xmstr, 0); XmStringFree(xmstr); XFE_MozillaApp::theApp()->notifyInterested(XFE_MNView::MNChromeNeedsUpdating); MSG_Command (m_pane, MSG_GetNewMail, NULL, 0); } void XFE_MailDownloadView::startNewsDownload() { XmString xmstr = XmStringCreate(XP_GetString(XFE_DOWNLOADING_NEW_MESSAGES), XmFONTLIST_DEFAULT_TAG); XtVaSetValues(m_label, XmNlabelString, xmstr, 0); XmStringFree(xmstr); XFE_MozillaApp::theApp()->notifyInterested(XFE_MNView::MNChromeNeedsUpdating); MSG_Command (m_pane, MSG_GetNextChunkMessages, NULL, 0); } void XFE_MailDownloadView::cleanUpNews() { // Change the label string, since we're not actually downloading: XmString xmstr = XmStringCreate(XP_GetString(XFE_PURGING_NEWS_MESSAGES), XmFONTLIST_DEFAULT_TAG); XtVaSetValues(m_label, XmNlabelString, xmstr, 0); XmStringFree(xmstr); XFE_MozillaApp::theApp()->notifyInterested(XFE_MNView::MNChromeNeedsUpdating); MSG_CleanupFolders(m_pane); } void XFE_MailDownloadView::paneChanged(XP_Bool, MSG_PANE_CHANGED_NOTIFY_CODE notify_code, int32) { if (notify_code == MSG_PanePastPasswordCheck) { D( printf ("Showing maildownload frame.\n");) notifyInterested(pastPasswordCheck); } else if (notify_code == MSG_PaneProgressDone) { notifyInterested(progressDone); } } XFE_Logo * XFE_MailDownloadView::getLogo() { return m_logo; } XFE_MailDownloadFrame::XFE_MailDownloadFrame(Widget toplevel, XFE_Frame * parent_frame, MSG_Pane * parent_pane) : XFE_Frame("MessageDownload", // name toplevel, // top level parent_frame, // parent frame FRAME_MAILNEWS_DOWNLOAD, // frame type NULL, // chrome False, // have html display False, // have menu bar False, // have toolbar False, // have dashboard (we'll do it) True) // destroy on close { Widget form; XFE_MailDownloadView *v = new XFE_MailDownloadView(this, getChromeParent(), NULL, m_context, parent_pane); XFE_Component *belowView; m_being_deleted = False; form = XtVaCreateManagedWidget("stopButtonForm", xmFormWidgetClass, getChromeParent(), XmNfractionBase, 8, NULL); m_stopButton = XtVaCreateManagedWidget(xfeCmdStopLoading, xmPushButtonWidgetClass, form, XmNleftAttachment, XmATTACH_POSITION, XmNleftPosition, 3, XmNrightAttachment, XmATTACH_POSITION, XmNrightPosition, 5, XmNtopAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_FORM, NULL); XtAddCallback(m_stopButton, XmNactivateCallback, activate_cb, this); belowView = new XFE_Component(form); setView(v); setBelowViewArea(belowView); m_dashboard = new XFE_Dashboard(this, // top level getChromeParent(), // parent this, // parent frame False); // have task bar m_dashboard->setShowStatusBar(True); m_dashboard->setShowProgressBar(True); v->registerInterest(XFE_MailDownloadView::pastPasswordCheck, this, (XFE_FunctionNotification)pastPassword_cb); v->registerInterest(XFE_MailDownloadView::progressDone, this, (XFE_FunctionNotification)progressDone_cb); fe_set_scrolled_default_size(m_context); v->show(); belowView->show(); m_dashboard->show(); // Register the logo animation notifications with ourselves // We need to do this, cause the XFE_Frame class only does so // if the have_toolbars ctor parameter is true and in our case // it is not. #if defined(GLUE_COMPO_CONTEXT) registerInterest(XFE_Component::logoStartAnimation, this, &XFE_Frame::logoAnimationStartNotice_cb); registerInterest(XFE_Component::logoStopAnimation, this, &XFE_Frame::logoAnimationStopNotice_cb); #else registerInterest(XFE_Frame::logoStartAnimation, this, &XFE_Frame::logoAnimationStartNotice_cb); registerInterest(XFE_Frame::logoStopAnimation, this, &XFE_Frame::logoAnimationStopNotice_cb); #endif /* GLUE_COMPO_CONTEXT */ } XFE_MailDownloadFrame::~XFE_MailDownloadFrame() { // Unregister the logo animation notifications with ourselves // We need to do this, cause the XFE_Frame class only does so // if the have_toolbars ctor parameter is true and in our case // it is not. #if defined(GLUE_COMPO_CONTEXT) unregisterInterest(XFE_Component::logoStartAnimation, this, &XFE_Frame::logoAnimationStartNotice_cb); unregisterInterest(XFE_Component::logoStopAnimation, this, &XFE_Frame::logoAnimationStopNotice_cb); #else unregisterInterest(XFE_Frame::logoStartAnimation, this, &XFE_Frame::logoAnimationStartNotice_cb); unregisterInterest(XFE_Frame::logoStopAnimation, this, &XFE_Frame::logoAnimationStopNotice_cb); #endif /* GLUE_COMPO_CONTEXT */ } XFE_Logo * XFE_MailDownloadFrame::getLogo() { XFE_Logo * logo = NULL; XFE_MailDownloadView * view = (XFE_MailDownloadView *) getView(); if (view) { logo = view->getLogo(); } return logo; } ////////////////////////////////////////////////////////////////////////// void XFE_MailDownloadFrame::configureLogo() { } XP_Bool XFE_MailDownloadFrame::isCommandEnabled(CommandType cmd, void */*calldata*/, XFE_CommandInfo*) { if (cmd == xfeCmdStopLoading) return fe_IsContextStoppable(m_context); else return False; } void XFE_MailDownloadFrame::doCommand(CommandType cmd, void */*calldata*/, XFE_CommandInfo*) { if (cmd == xfeCmdStopLoading) { D( printf ("Canceling.\n"); ) XP_InterruptContext(m_context); // allConnectionsComplete will destroy this frame. } } XP_Bool XFE_MailDownloadFrame::handlesCommand(CommandType cmd, void */*calldata*/, XFE_CommandInfo*) { if (cmd == xfeCmdStopLoading) return True; else return False; } void XFE_MailDownloadFrame::app_delete_response() { D(printf ("In XFE_MailDownloadFrame::app_delete_response()\n");) if (!m_being_deleted) m_being_deleted = TRUE; XFE_Frame::app_delete_response(); } void XFE_MailDownloadFrame::allConnectionsComplete(MWContext */* context */) { D(printf ("All Connections Complete in mail download frame.\n");) if (!m_being_deleted) app_delete_response(); } void XFE_MailDownloadFrame::show() { XFE_Frame *active_frame = XFE_Frame::getActiveFrame(); if (active_frame) { Position x, y; Widget parent = active_frame->getBaseWidget(); Screen *screen = XtScreen(m_widget); Dimension screen_width = WidthOfScreen (screen); Dimension screen_height = HeightOfScreen (screen); Dimension parent_width = 0; Dimension parent_height = 0; Dimension child_width = 0; Dimension child_height = 0; /* we were already realized in the startDownload function below. Being realized is a requirement for some of the stuff we have to do here. */ XtVaGetValues(m_widget, XtNwidth, &child_width, XtNheight, &child_height, 0); XtVaGetValues (parent, XtNwidth, &parent_width, XtNheight, &parent_height, 0); x = (((Position)parent_width) - ((Position)child_width)) / 2; y = (((Position)parent_height) - ((Position)child_height)) / 2; XtTranslateCoords (parent, x, y, &x, &y); if ((Dimension) (x + child_width) > screen_width) x = screen_width - child_width; if (x < 0) x = 0; if ((Dimension) (y + child_height) > screen_height) y = screen_height - child_height; if (y < 0) y = 0; position(x, y); } XFE_Frame::show(); } void XFE_MailDownloadFrame::startDownload() { XFE_MailDownloadView *v = (XFE_MailDownloadView*)m_view; realize(); v->startDownload(); } void XFE_MailDownloadFrame::startNewsDownload() { XFE_MailDownloadView *v = (XFE_MailDownloadView*)m_view; realize(); v->startNewsDownload(); } void XFE_MailDownloadFrame::cleanUpNews() { XFE_MailDownloadView *v = (XFE_MailDownloadView*)m_view; realize(); show(); v->cleanUpNews(); } void XFE_MailDownloadFrame::activate_cb(Widget w, XtPointer clientData, XtPointer) { CommandType cmd = Command::intern(XtName(w)); XFE_MailDownloadFrame *obj = (XFE_MailDownloadFrame*)clientData; if (obj->handlesCommand(cmd) && obj->isCommandEnabled(cmd)) obj->doCommand(cmd); } XFE_CALLBACK_DEFN(XFE_MailDownloadFrame, pastPassword)(XFE_NotificationCenter*, void *, void *) { D(printf ("Showing MailDownloadFrame()\n");) show(); } XFE_CALLBACK_DEFN(XFE_MailDownloadFrame, progressDone)(XFE_NotificationCenter*, void *, void *) { D(printf ("Deleting MailDownloadFrame()\n");) if (!m_being_deleted) app_delete_response(); }