gecko-dev/cmd/winfe/cxsave.h

217 строки
7.2 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.
*/
// 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.
}
// Helper function to figure out correct file extension
#ifdef MOZ_MAIL_NEWS
void AddFileExtension(char *& pFileName);
#endif
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
#ifdef MOZ_MAIL_NEWS
static BOOL SaveToFile(CFile *pFile, LPCSTR lpszUrl, LPCSTR lpszTitle);
#endif
// 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);
};