зеркало из https://github.com/mozilla/pjs.git
318 строки
10 KiB
C++
318 строки
10 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.
|
|
*/
|
|
|
|
// netsvw.h : interface of the CNetscapeView class
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef MOVIEW_H
|
|
#define MOVIEW_H
|
|
|
|
// if user moves mouse more than this distance between button down and
|
|
// button up do not follow a link if it's over one
|
|
#define CLICK_THRESHOLD 2
|
|
|
|
#define NETSCAPE_IMAGE_FORMAT "Netscape Image Format"
|
|
#define NETSCAPE_EDIT_FORMAT "NETSCAPE_EDITOR"
|
|
|
|
// Number of formats registered for m_pClipboardFormats array
|
|
|
|
#ifdef _IMAGE_CONVERT
|
|
#define MAX_CLIPBOARD_FORMATS 12
|
|
#else
|
|
#define MAX_CLIPBOARD_FORMATS 11
|
|
#endif //_IMAGE_CONVERT
|
|
|
|
// Types of items being dragged over us
|
|
enum FEDragType {
|
|
FE_DRAG_UNKNOWN,
|
|
FE_DRAG_TEXT,
|
|
FE_DRAG_HTML,
|
|
FE_DRAG_TABLE,
|
|
FE_DRAG_LINK,
|
|
FE_DRAG_IMAGE,
|
|
FE_DRAG_VCARD,
|
|
FE_DRAG_FORM_ELEMENT
|
|
// Add more as we dream them up!
|
|
};
|
|
|
|
#ifdef MOZ_NGLAYOUT
|
|
#include "nsIWebWidget.h"
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Mostly default behavior, but override the type of cursor used
|
|
// during drag and drop
|
|
//
|
|
class CViewDropSource : public COleDropSource
|
|
{
|
|
public:
|
|
//Construction
|
|
CViewDropSource(UINT nDragType = 0);
|
|
UINT m_nDragType;
|
|
SCODE GiveFeedback(DROPEFFECT dropEffect);
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
class CViewDropTarget : public COleDropTarget
|
|
{
|
|
public:
|
|
//Construction
|
|
CViewDropTarget();
|
|
BOOL OnDrop(CWnd *, COleDataObject *, DROPEFFECT, CPoint);
|
|
DROPEFFECT OnDragEnter(CWnd *, COleDataObject *, DWORD, CPoint);
|
|
DROPEFFECT OnDragOver(CWnd *, COleDataObject *, DWORD, CPoint);
|
|
void OnDragLeave(CWnd *);
|
|
private:
|
|
int m_nIsOKDrop;
|
|
};
|
|
|
|
#ifdef EDITOR
|
|
// Implemented in edview.cpp
|
|
// Call when we MUST save a new document,
|
|
// such as before Printing or calling an external Editor
|
|
// Return TRUE if:
|
|
// 1. User saved the document
|
|
// 2. User didn't want to save, and doc already exists (not new)
|
|
// 3. Doc exists but is not dirty
|
|
// 4. We are not a Page Composer (allows calling without testing for EDT_IS_EDITOR() first )
|
|
// 5. We are a message Message Compose window
|
|
// Note: We must always save a new/untitled document, even if not dirty
|
|
BOOL FE_SaveDocument(MWContext * pMWContext);
|
|
|
|
// Call this instead of forcing file saving by making
|
|
// a temporary file from current page. This filename
|
|
// replaces the pUrl->address in struct passed in.
|
|
// If return is FALSE, then there was an error - don't continue
|
|
BOOL FE_PrepareTempFileUrl(MWContext * pMWContext, URL_Struct *pUrl);
|
|
#endif // EDITOR
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Main Document view
|
|
// All stuff specific to the main document viewing area (i.e. NOT ledge stuff)
|
|
//
|
|
class CPrintCX;
|
|
|
|
class CNetscapeView : public CGenericView
|
|
{
|
|
// Properties
|
|
public:
|
|
CWnd * m_pChild;
|
|
int m_nBDownX, m_nBDownY; // pixel coords of button down event, LFB
|
|
|
|
// Right mouse stuff
|
|
POINT m_ptRBDown; // coords of right button down, not to confuse with LFB
|
|
LO_Element* m_pRBElement; // The layout element we're over on a RBD.
|
|
CString m_csRBLink; // The link that we're over on a RBD.
|
|
CString m_csRBImage; // The image that we're over on a RBD.
|
|
CString m_csRBEmbed; // The embed that we're over on a RBD.
|
|
#ifdef LAYERS
|
|
CL_Layer *m_pLayer; // The layer that we're over
|
|
#endif
|
|
|
|
CViewDropTarget * m_pDropTarget;
|
|
int m_SubView; // Are we the top ledge, main view or bottom ledge
|
|
|
|
#ifdef EDITOR
|
|
// Array of clipboard formats accepted for pasting into document
|
|
// We put here instead of Editor's view because we need to drag
|
|
// FROM a Browser window
|
|
UINT * m_pClipboardFormats;
|
|
|
|
CLIPFORMAT m_cfEditorFormat;
|
|
CLIPFORMAT m_cfBookmarkFormat;
|
|
CLIPFORMAT m_cfImageFormat;
|
|
#endif
|
|
// Progress dialog used for Editor Publishing and
|
|
// FTP/HTTP upload
|
|
CSaveFileDlg* m_pSaveFileDlg;
|
|
|
|
public:
|
|
static void CopyLinkToClipboard(HWND hWnd, CString url);
|
|
|
|
|
|
protected: // create from serialization only
|
|
DECLARE_DYNCREATE(CNetscapeView)
|
|
CNetscapeView();
|
|
~CNetscapeView();
|
|
|
|
// Our context, a Grid.
|
|
// Some grid friends (creation/destruction).
|
|
// It isn't setup until the call to SetContext.
|
|
protected:
|
|
friend MWContext *FE_MakeGridWindow(MWContext *pOldContext, int32 lX, int32 lY, int32 lWidth, int32 lHeight, char *pUrlStr, char *pWindowName);
|
|
friend void FE_FreeGridWindow(MWContext *pContext);
|
|
|
|
public:
|
|
HDC GetContextDC() {
|
|
if(GetContext()) {
|
|
return(GetContext()->GetContextDC());
|
|
}
|
|
return(NULL);
|
|
}
|
|
|
|
// Operations
|
|
protected:
|
|
virtual void OnInitialUpdate(); // Called first time after construct
|
|
|
|
virtual void OnActivateFrame(UINT nState, CFrameWnd* /*pFrameWnd*/);
|
|
// Focus management (for internationalization)
|
|
virtual void OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView);
|
|
|
|
// Implementation
|
|
public:
|
|
|
|
// Print preview.
|
|
CPrintCX *m_pPreviewContext;
|
|
void OnFilePrintPreview();
|
|
void OnEndPrintPreview(CDC *pDC, CPrintInfo *pInfo, POINT pXY,
|
|
CPreviewView *pView);
|
|
BOOL DoPrintPreview(UINT nIDResource, CView *pPrintView,
|
|
CRuntimeClass *pPreviewViewClass, CPrintPreviewState *pState);
|
|
void OnPrint(CDC *pDC, CPrintInfo *pInfo);
|
|
BOOL OnPreparePrinting(CPrintInfo *pInfo);
|
|
|
|
virtual BOOL PreCreateWindow(CREATESTRUCT & cs);
|
|
|
|
#ifdef _DEBUG
|
|
virtual void AssertValid() const;
|
|
virtual void Dump(CDumpContext& dc) const;
|
|
#endif
|
|
|
|
void SetChild ( CWnd * pChild ) { m_pChild = pChild; }
|
|
|
|
#ifdef EDITOR
|
|
BOOL m_bIsEditor;
|
|
inline BOOL IsEditor() { return m_bIsEditor; }
|
|
|
|
// Get editor from preferences app via pPrefName
|
|
// If no default, get from Open File Dialog (use nIDCaption for dialog caption)
|
|
void CNetscapeView::SpawnExternalEditor(MWContext *pMWContext, const char *pPrefName, char *pURL, UINT nIDCaption);
|
|
|
|
// Load an image in a user-designated editor (saved in preferences)
|
|
void EditImage(char *pImage);
|
|
#endif
|
|
|
|
#ifdef LAYERS
|
|
void GetLogicalPoint(CPoint cpPoint, long *pLX, long *pLY);
|
|
LO_Element *GetLayoutElement(CPoint cpPoint, CL_Layer *layer);
|
|
virtual BOOL OnRButtonDownForLayer(UINT nFlags, CPoint& point,
|
|
long lX, long lY, CL_Layer *layer);
|
|
#else
|
|
LO_Element *GetLayoutElement(CPoint cpPoint);
|
|
#endif /* LAYERS */
|
|
|
|
CString GetAnchorHref(LO_Element *pElement);
|
|
CString GetImageHref(LO_Element *pElement);
|
|
CString GetEmbedHref(LO_Element *pElement);
|
|
|
|
void SetSubView(int subView) {
|
|
m_SubView = subView;
|
|
}
|
|
|
|
CGenericDoc *GetDocument();
|
|
|
|
#ifdef EDITOR
|
|
virtual void OnLocalPopup();
|
|
#endif /* EDITOR */
|
|
|
|
protected:
|
|
// populate the given menu with items appropritate for being
|
|
// over the given LO_Element
|
|
void CreateWebPopup(CMenu * pMenu, LO_Element * pElement, CL_Layer *layer);
|
|
void CreateMessagePopup(CMenu * pMenu, LO_Element * pElement, CL_Layer *layer,
|
|
MWContext *pContext);
|
|
BOOL AddLinkToPopup(CMenu * pMenu, LO_Element * pElement, BOOL bBrowser);
|
|
BOOL AddEmbedToPopup(CMenu * pMenu, LO_Element * pElement, CL_Layer *layer, BOOL bAddSeparator);
|
|
BOOL AddClipboardToPopup(CMenu * pMenu, LO_Element * pElement, BOOL bAddSeparator);
|
|
BOOL AddSaveItemsToPopup(CMenu * pMenu, LO_Element * pElement, CL_Layer *layer, BOOL bAddSeparator);
|
|
void AddBrowserItemsToPopup(CMenu * pMenu, LO_Element * pElement, CL_Layer *layer);
|
|
void AddNavigateItemsToPopup(CMenu *pMenu, LO_Element * pElement, CL_Layer *layer);
|
|
void AddViewItemsToPopup(CMenu * pMenu, MWContext *pContex, LO_Element * pElement);
|
|
// Used by OnPopupAddLinkToBookmarks and OnPopupInternetShortcut
|
|
|
|
void CreateTextAndAnchor(CString &, CString &);
|
|
|
|
// Generated message map functions
|
|
protected:
|
|
//{{AFX_MSG(CNetscapeView)
|
|
afx_msg void OnSize ( UINT nType, int cx, int cy );
|
|
#ifndef MOZ_NGLAYOUT
|
|
afx_msg void OnSetFocus(CWnd *);
|
|
afx_msg void OnPrepareDC(CDC *pDC, CPrintInfo * pInfo /* = NULL */);
|
|
afx_msg void OnDeactivateEmbed();
|
|
afx_msg void OnWindowPosChanged(WINDOWPOS * wndpos);
|
|
afx_msg void OnUpdateNavigateRepaint(CCmdUI* pCmdUI);
|
|
afx_msg void OnMove(int x, int y);
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
|
afx_msg void OnCopyImageToClipboard();
|
|
afx_msg void OnPopupLoadLink();
|
|
afx_msg void OnPopupAddLinkToBookmarks();
|
|
afx_msg void OnPopupLoadLinkNewWindow();
|
|
afx_msg void OnPopupLoadFrameNewWindow();
|
|
afx_msg void OnPopupSaveLinkContentsAs();
|
|
afx_msg void OnPopupCopyLinkToClipboard();
|
|
afx_msg void OnPopupLoadImage();
|
|
afx_msg void OnPopupSaveImageAs();
|
|
afx_msg void OnPopupCopyImageLocationToClipboard();
|
|
afx_msg void OnPopupLoadImageInline();
|
|
afx_msg void OnPopupActivateEmbed();
|
|
afx_msg void OnPopupSaveEmbedAs();
|
|
afx_msg void OnCopyCurrentURL();
|
|
afx_msg void OnPopupCopyEmbedLocationToClipboard();
|
|
afx_msg void OnPopupCopyEmbedToClipboard();
|
|
afx_msg void OnPopupSetAsWallpaper();
|
|
afx_msg void OnNavigateRepaint();
|
|
afx_msg BOOL OnQueryNewPalette();
|
|
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnPopupInternetShortcut();
|
|
afx_msg void OnPopupMailTo();
|
|
|
|
// afx_msg void OnDropFiles( HDROP hDropInfo );
|
|
#endif /* MOZ_NGLAYOUT */
|
|
//}}AFX_MSG
|
|
#ifdef EDITOR
|
|
afx_msg void OnCanInteract(CCmdUI* pCmdUI);
|
|
afx_msg void OnEditSource();
|
|
afx_msg void OnPopupEditImage();
|
|
afx_msg void OnPopupLoadLinkInEditor();
|
|
#endif
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
#ifdef MOZ_NGLAYOUT
|
|
private:
|
|
void checkCreateWebWidget();
|
|
BOOL m_bNoWebWidgetHack;
|
|
|
|
public:
|
|
void NoWebWidgetHack() {m_bNoWebWidgetHack = TRUE;}
|
|
// Hack to disable it for the RDF window.
|
|
#endif /* MOZ_NGLAYOUT */
|
|
};
|
|
|
|
#ifdef _DEBUG_HUH_JEM // debug version in netsvw.cpp
|
|
inline CNetscapeDoc* CNetscapeView::GetDocument()
|
|
{ return (CNetscapeDoc*) m_pDocument; }
|
|
#endif
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif //MOVIEW_H
|