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.
- */
- // cxsave.h : header file
- //
-
- #include "cxstubs.h"
- #include "widgetry.h"
-
- /////////////////////////////////////////////////////////////////////////////
- // CSaveCX dialog
-
- class CSaveCX : public CDialog, public CStubsCX
- {
- // Construction
- private:
- char* GetMailNewsTempFileName(char* pTempPath, char *pFileName = NULL);
- BOOL CanCreate(URL_Struct * pUrl = NULL); // Can we proceed with creation? Used by SaveObject.
- BOOL Creator();
- public:
- CSaveCX(const char *pAnchor, const char *pViewer = NULL, CWnd *pParent = NULL); // For external viewing or saving
- ~CSaveCX();
-
- // Indirect Construction
- private:
- void DoCreate() {
- // Set dimensions of progress
- m_crBounds = CRect(5, 50, 5 + 175, 50 + 15);
- MapDialogRect(m_crBounds);
- m_crBounds.InflateRect(-1, -1); // Shrink for border.
- }
- public:
- static BOOL SaveAnchorObject(const char *pAnchor, History_entry *pHist, int16 iCSID = 0, CWnd *pParent = NULL, char * pFileName = NULL);
- static BOOL SaveAnchorAsText(const char *pAnchor, History_entry *pHist, CWnd *pParent, char *pFileName);
- static NET_StreamClass *SaveUrlObject(URL_Struct *pUrl, CWnd *pParent = NULL, char * pFileName = NULL);
- static NET_StreamClass *ViewUrlObject(URL_Struct *pUrl, const char *pViewer, CWnd *pParent = NULL);
- static NET_StreamClass *OleStreamObject(NET_StreamClass *pOleStream, URL_Struct *pUrl, const char *pViewer, CWnd *pParent = NULL);
- static BOOL SaveToGlobal(HGLOBAL *phGlobal, LPCSTR lpszUrl, LPCSTR lpszTitle); // Returns context id
-
- // What we're saving
- private:
- CProgressMeter m_ProgressMeter;
- History_entry * m_pHist;
-
- CString m_csAnchor; // The anchor to load
- CString m_csViewer; // The viewer to spawn, if specified, file will be removed on exit and
- // the user is not prompted for a file name in which to save.
-
- int m_iFileType; // The format of the file (needed for text front end when saving basically....)
- CString m_csFileName; // The file to save it in
-
- CWnd *m_pParent; // Our parent (need for possible file dialogs).
- NET_StreamClass *m_pSecondaryStream; // A secondary stream, sometimes we chain together streams.
- long tFirstTime;
- long tLastTime;
- long tLastBarTime;
- int iLastPercent;
-
- // Wether or not we were interrupted (cleanup even more).
- public:
- URL_Struct *m_pUrl; // The URL_Struct as known by the netlib
- BOOL m_bInterrupted;
- BOOL m_bAborted;
- BOOL m_bSavingToGlobal;
- int16 m_iCSID; //WinCX pass default character set information here
-
- // A way to manually set the URL we're handling without having
- // the dialog create one.
- // Also a way to manually set the secondary stream for the URL that
- // we're handling.
- public:
- void SetUrl(URL_Struct *pUrl) {
- ASSERT(m_pUrl == NULL);
- m_pUrl = pUrl;
- }
- void SetSecondaryStream(NET_StreamClass *pSecondaryStream) {
- ASSERT(m_pSecondaryStream == NULL);
- ASSERT(m_pSink == NULL); // Secondary streams require no sink.
- ASSERT(!m_csViewer.IsEmpty() || m_bSavingToGlobal);
- pSecondaryStream->window_id = GetContext();
- m_pSecondaryStream = pSecondaryStream;
- }
- NET_StreamClass *GetSecondaryStream() const {
- return(m_pSecondaryStream);
- }
- void ClearSecondary() {
- m_pSecondaryStream = NULL;
- }
-
- // Informational
- public:
- BOOL IsSaving() const {
- return(m_csViewer.IsEmpty());
- }
- BOOL IsViewing() const {
- return(IsSaving() == FALSE ? TRUE : FALSE);
- }
- BOOL IsShellExecute() const {
- return(m_csViewer == "ShellExecute");
- }
- BOOL IsSavingToGlobal() const {
- return m_bSavingToGlobal;
- }
- CString GetFileName() const {
- return(m_csFileName);
- }
- CString GetAnchor() const {
- return(m_csAnchor);
- }
- CString GetViewer() const;
-
- // For dialogs
- public:
- virtual CWnd *GetDialogOwner() const;
-
- // Serialization information
- private:
- CStdioFile *m_pSink;
- public:
- void SetSink(CStdioFile *pSink) {
- ASSERT(m_pSecondaryStream == NULL); // Sinks require no secondary stream.
- m_pSink = pSink;
- }
- CStdioFile *GetSink() const {
- return(m_pSink);
- }
- void ClearSink() {
- m_pSink = NULL;
- }
-
- // Progress Information, manipulated by GraphProgress
- private:
- void Progress(int32 lPercent); // Draw progress bar
- int32 m_lOldPercent; // Old percentage to optimize drawing in OnPaint.
- CRect m_crBounds; // Bounds of dialog progress bar.
-
- // Context Overrides
- public:
- // The URL exit routine.
- virtual void GetUrlExitRoutine(URL_Struct *pUrl, int iStatus, MWContext *pContext);
- // The text translation exit routine.
- virtual void TextTranslationExitRoutine(PrintSetup *pTextFE);
- // All Connections are done.
- virtual void AllConnectionsComplete(MWContext *pContext);
- // Textual progress information.
- virtual void Progress(MWContext *pContext, const char *pMessage);
- // Progress bar function.
- virtual void SetProgressBarPercent(MWContext *pContext, int32 lPercent);
- // Graph progression.
- virtual void GraphProgress(MWContext *pContext, URL_Struct *pURL, int32 lBytesReceived, int32 lBytesSinceLastTime, int32 lContentLength);
-
- // Dialog Data
- //{{AFX_DATA(CSaveCX)
- enum { IDD = IDD_CONTEXT_SAVE };
- CString m_csAction;
- CString m_csDestination;
- CString m_csLocation;
- CString m_csProgress;
- CString m_csTimeLeft;
- CString m_csPercentComplete;
- //}}AFX_DATA
-
-
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CSaveCX)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
- // Implementation
- protected:
-
- // Generated message map functions
- //{{AFX_MSG(CSaveCX)
- virtual void OnCancel();
- afx_msg void OnPaint();
- afx_msg HCURSOR OnQueryDragIcon();
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- virtual BOOL OnInitDialog();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
-
- extern "C" {
- // Netlib API to the stream that will save the file to disk.
- NET_StreamClass *ContextSaveStream(int iFormatOut, void *pDataObj, URL_Struct *pUrl, MWContext *pContext);
-
- unsigned int ContextSaveReady(NET_StreamClass *stream);
- int ContextSaveWrite(NET_StreamClass *stream, const char *pWriteData, int32 iDataLength);
- void ContextSaveComplete(NET_StreamClass *stream);
- void ContextSaveAbort(NET_StreamClass *stream, int iStatus);
- };
-