pjs/cmd/winfe/rdfliner.h

510 строки
19 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
* Commuyright (C) 1998 Netscape Communications Corporation. All Rights
* Resnications Corporation. Portions created by Netscape are
* Coperved.
*/
// RDF Tree View for Aurora. Created by Dave Hyatt.
#ifndef __RDFLINER_H
#define __RDFLINER_H
#include "outliner.h"
#include "property.h"
#include "cxstubs.h"
#include "statbar.h"
#include "navfram.h"
#include "htrdf.h"
#include "rdfglobal.h"
#include "rdfacc.h"
// array of indexes for IDB_BOOKMARKS
#define IDX_BOOKMARKOPEN 0
#define IDX_BOOKMARKCLOSED 1
#define IDX_BOOKMARKMENUOPEN 2
#define IDX_BOOKMARKMENUCLOSED 3
#define IDX_BOOKMARKFOLDEROPEN 4
#define IDX_BOOKMARKFOLDERCLOSED 5
#define IDX_BOOKMARKTOOLBARCLOSED 6
#define IDX_BOOKMARKTOOLBAROPEN 7
#define IDX_BOOKMARKFOLDERMENUOPEN 8
#define IDX_BOOKMARKFOLDERMENUCLOSED 9
#define IDX_BOOKMARKMENUTOOLBARCLOSED 10
#define IDX_BOOKMARKMENUTOOLBAROPEN 11
#define IDX_BOOKMARKFOLDERTOOLBARCLOSED 12
#define IDX_BOOKMARKFOLDERTOOLBAROPEN 13
#define IDX_BOOKMARKALLCLOSED 14
#define IDX_BOOKMARKALLOPEN 15
#define IDX_BOOKMARKCHANGED 16
#define IDX_BOOKMARK 17
#define IDX_BOOKMARKUNKNOWN 18
class CRDFOutlinerParent;
class CRDFOutliner : public COutliner, public CCustomImageObject
{
friend class CRDFOutlinerParent;
private:
HT_Pane m_Pane; // The pane that owns this view
HT_View m_View; // The view as registered in the hypertree
HT_Resource m_Node; // The currently acquired node
int m_nSortType; // The type of sort (none, ascending, descending)
int m_nSortColumn; // The current column used for sort (none, or the UINT of the column)
UINT m_hEditTimer; // The Edit Timer (for editing in place)
UINT m_hSpringloadTimer; // The Springload timer (for popping open springloaded folders on drag)
UINT m_hDragRectTimer; // Timer for scrolling on a multiple select drag rectangle
BOOL m_bNeedToClear; // Used to determine if selection needs to be wiped on a mouse up
BOOL m_bNeedToEdit; // Used to determine if an edit field needs to be displayed on a node
BOOL m_bDoubleClick; // Used to prevent an edit field from popping up on a double click
BOOL m_bDataSourceInWindow; // TRUE when something is being dragged around inside the window.
// Use this to keep springloaded folders behaving properly
CPtrList m_SpringloadStack; // A list of current OPEN springloaded folders (so that we can close
// them back up again)
DROPEFFECT m_iCurrentDropAction; // Cache the current drop action
BOOL m_bCheckForDragRect; // Used to distinguish the dragging of an item from the drawing of a drag
// rect for multiple selection
CRect m_LastDragRect; // Position of the last drag rect
CPoint m_MovePoint; // Last position of mouse on a move (Used for drag rect stuff)
int m_nRectYDisplacement; // Used for scrolling the drag rect
OutlinerAncestorInfo* m_pAncestor; // Used for drawing the pipes in the tree.
BOOL m_bPaintingFirstObject; // Used to perform an optimization on the line-drawing part of the tree.
int m_nSizeOfAncestorArray; // Also used for the optimization.
CRDFOutlinerParent* m_Parent; // A pointer to the parent container.
int m_nSelectedColumn; // The currently selected column
CRDFEditWnd* m_EditField; // The current edit window (if one exists).
int m_iSpringloadSelection; // Cached last drag-selection to determine springload on drag
// CLIPFORMATS for drag & drop.
CLIPFORMAT m_clipFormatArray[5]; // The list of acceptable formats
CLIPFORMAT m_cfHTNode; // Format for HT nodes.
CLIPFORMAT m_cfBookmark; // Bookmark format (title/URL)
CRDFCommandMap m_MenuCommandMap; // The command mapping for menus
CNavTitleBar* m_NavTitleBar; // A pointer to the title strip.
// Tree colors, fonts, and backgrounds
COLORREF m_ForegroundColor; // The foreground color. Used for text, separators, etc.
COLORREF m_BackgroundColor; // The background color. For trees with no bg image. Also
// displayed until the image loads.
COLORREF m_SortBackgroundColor; // The color used to display a highlighted column (that has a sort
// imposed upon it.
COLORREF m_SortForegroundColor; // The color used to display te highlighted text/separators, etc.
COLORREF m_SelectionForegroundColor; // Foreground color of the selection
COLORREF m_SelectionBackgroundColor; // Background color of the selection
COLORREF m_ShadowColor; // Shadow color of the tree (used for drawing separators).
COLORREF m_HighlightColor; // Highlight color of the tree (used for drawing separators).
COLORREF m_SortShadowColor; // Shadow color of the sorted tree (used for drawing separators).
COLORREF m_SortHighlightColor; // Highlight color of the sorted tree (used for drawing separators).
COLORREF m_RolloverColor; // Rollover color of the tree.
COLORREF m_DividerColor; // Color of the dividers drawn between lines
BOOL m_bDrawDividers; // Whether or not dividers should be drawn
CString m_BackgroundImageURL; // The URL of the background image.
CRDFImage* m_pBackgroundImage; // The image for the background.
COLORREF m_BarColor; // The color of the tree connections.
CString m_WindowTarget; // The target window for this tree view. If "", then the
// last active window is assumed.
BOOL m_bUseSingleClick; // Are we single click?
BOOL m_bUseInlineEditing; // Do we allow inline editing?
BOOL m_bUseSelection; // Do we allow selection?
BOOL m_bIsPopup; // Whether or not we're a popup tree.
public:
CRDFOutliner (CRDFOutlinerParent* theParent, HT_Pane thePane = NULL, HT_View theView = NULL);
~CRDFOutliner ( );
// Inspectors
COLORREF GetForegroundColor() { return m_ForegroundColor; }
COLORREF GetBackgroundColor() { return m_BackgroundColor; }
CString GetBackgroundImageURL() { return m_BackgroundImageURL; }
HT_View GetHTView() { return m_View; } // Return a handle to the hypertree view
HT_Resource GetAcquiredNode() { return m_Node; } // Return handle to the acquired HT node
CRDFOutlinerParent* GetRDFParent() { return m_Parent; } // RDFOutlinerParent handle
UINT GetSelectedColumn() { return m_nSelectedColumn; } // Returns selected column
int GetSortColumn() { return m_nSortColumn; }
int GetSortType() { return m_nSortType; }
BOOL IsPopup() { return m_bIsPopup; }
// Setters
void ToggleModes();
void SetIsPopup(BOOL isPopup) { m_bIsPopup = isPopup; }
void SetHTView(HT_View v);
void SetWindowTarget(char* target) { m_WindowTarget = target; }
void SetSortType(int sortType) { m_nSortType = sortType; }
void SetSortColumn(int sortColumn) { m_nSortColumn = sortColumn; }
void SetSelectedColumn(int nColumn) { m_nSelectedColumn = nColumn; }
void SetTitleBar(CNavTitleBar* bar) { m_NavTitleBar = bar; }
// I am explicitly labeling as virtual any functions that have been
// overridden. That is, unless I state otherwise, all virtual functions
// are overridden versions of COutliner functions.
virtual void DestroyColumns();
// Overridden to destroy the outliner's columns and clear our RDF column command map.
virtual void InitializeItemHeight(int iDesiredSize) { m_itemHeight = 19; }
// Overridden to place a pixel of padding on either side of the line and to add a pixel for the
// divider that is drawn between lines.
virtual void AdjustTipSize(int& left, int& top, int& hor, int& ver)
{ top += 1; ver -= 3; }; // Account for the dividers between lines and for the padding.
virtual int GetIndentationWidth() { return m_pIUserImage->GetImageWidth(); };
// Gets the width to indent at each level.
void FocusCheck(CWnd* pWnd, BOOL gotFocus);
// Called to potentially update the embedded menu bar in the docked view.
BOOL IsSelectedColumn(int i) { return m_nSelectedColumn == i; }
virtual LPCTSTR GetColumnText ( UINT iColumn, void * pLineData );
// Grab the text for a particular column.
virtual void * AcquireLineData ( int iLine );
// Acquire (nice spelling, heh) the node for a given line.
virtual void ReleaseLineData ( void * pLineData );
// Release the line data for a given line.
virtual void GetTreeInfo( int iLine, uint32 * pFlags, int * iDepth,
OutlinerAncestorInfo ** pAncestor );
// Get information about the node at iLine.
virtual HFONT GetLineFont ( void * pLineData );
// Get the font (e.g., regular, italic, bold) for the given line.
virtual int TranslateIcon ( void * pData );
// Figures out which icon should be used.
virtual int TranslateIconFolder( void *pData );
// Don't have a damn clue what this does.
virtual int ToggleExpansion(int iLine);
// Called to expand a node.
void FinishExpansion(int parentIndex);
// Called by the notifyProc to complete the expansion
virtual void SelectItem(int iSel, int mode, UINT flags);
// Called to select an item... handles single/double click...everything...
void OnSelDblClk(int iLine);
// Different from base class. Line info is passed as arg.
virtual void PropertyMenu(int iLine, UINT flags);
// Displays the context-sensitive menu (when the user right-clicks on a node)
virtual BOOL IsSelected(int iLine);
// Used by base class to determine if a line is selected. Function
// queries RDF backend instead of relying on the m_Selection member
// variable in COutliner.
void EditTextChanged(char* text);
// Function is called when a column's data has been edited in place. This
// function talks to the back end and makes sure the node gets changed.
char* GetTextEditText();
// Copies the edit field's text to a char*. The text must be deleted by the
// caller of this function.
void AddTextEdit();
// Creates a text edit on the selected item and column.
void RemoveTextEdit();
// Kills the text edit control.
void MoveToNextColumn();
// Called when the user tabs in the edit field to move to the next column.
CRect GetColumnRect(int lineNo, int columnNo);
// Gets the rect associated with a specific column and line
virtual void ColumnsSwapped();
// Called when the columns' positions have changed (e.g., the user dragged one column to the
// left of another column). Added this function so that RDFOutliner (unlike Outliner) will
// force the tree images to remain on the left.
int DetermineClickLocation(CPoint point);
// The master click function. Determines whether the user clicked on a trigger, on the item itelf,
// or on the background.
virtual BOOL TestRowCol(POINT point, int &, int &);
// Overridden because Outliner doesn't set the column hit if the row doesn't contain data.
void copyAncestorValues(HT_Resource r, int numItems, OutlinerAncestorInfo* oldInfo, OutlinerAncestorInfo* newInfo);
// Used for drawing the lines in the tree.
void HandleEvent(HT_Notification ns, HT_Resource n, HT_Event whatHappened);
// The function which handles all the events which occur in the view.
void DisplayURL();
// Called to display a URL for a non-container node.
BOOL IsDocked();
// True if the RDF view is docked.
virtual void LoadComplete(HT_Resource pResource);
// Overridden from CCustomObject. Called when a custom URL image has finished loading.
virtual BOOL DeleteItem(int iSel);
// Called when the user decides to delete an item. The selection argument is completely
// ignored. (We rely on HT's selection when performing the deletion.)
virtual int DrawPipes ( int iLineNo, int iColNo, int offset, HDC hdc, void * pLineData );
// Overridden to handle the drawing of custom icons.
void PaintLine ( int iLineNo, HDC hdc, LPRECT lpPaintRect, HBRUSH hHighlightBrush,
HPEN hHighlightPen );
// This PaintLine is used instead of the one in the outliner base class. Overridden so
// that individual columns can be selected (instead of an entire line).
void PaintColumn(int iLineNo, int iColumn, LPRECT lpColumnRect,
HDC hdc, void * pLineData, HBRUSH hHighlightBrush,
HPEN hHighlightPen);
// Used instead of the outliner PaintColumn. Same reason as above.
void DrawColumn(HDC hdc, LPRECT lpColumnRect, LPCTSTR lpszString,
CropType_t cropping, AlignType_t alignment, HBRUSH theBrush = NULL,
BOOL hasFocus = FALSE);
// Used instead of the outliner DrawColumnText. Same reason.
void InvalidateIconForResource(HT_Resource r);
// Invalidates only the icon for a given node. The rest of the line is left alone.
void InvalidateDragLine(int iLineNo, BOOL useThirds, int dragFraction);
// Invalidates only the drag areas for a given node. The rest of the line is left alone.
CRect ConstructDragRect(const CPoint& pt1, const CPoint& pt2);
// Constructs a new rectangle with the two points specified as opposing corners.
void EraseDragRect(CDC* pDC, CRect rect);
// Helper to blow away the drag rect
void DragRectScroll(BOOL bBackwards);
// Function to scroll the drag rect
virtual void InitializeClipFormats();
// Registers the formats we accept (drag/drop) when the window is created.
virtual CLIPFORMAT * GetClipFormatList();
// Returns an array of CLIPFORMATS that we are willing to handle. Used
// for drag over feedback.
virtual DROPEFFECT DropSelect (int iLineNo, COleDataObject *object );
// Used to determine type of drop.
virtual int GetDragHeartbeat();
// Speed at which the tree scrolls on a drag. Overridden to be faster than COutliner.
virtual void AcceptDrop( int iLineNo, COleDataObject *pDataObject, DROPEFFECT dropEffect );
// Called when a drop occurs on a given line in the view. This function actually
// handles the drop.
virtual BOOL HighlightIfDragging(void);
// Called to determine whether or not a node should be highlighted when an item is dragged
// OVER it. We only highlight containers (folders).
virtual void PaintDragLine(HDC hdc, CRect &rectColumn);
// Called to draw the drag line that indicates the drop will occur AFTER this item in the tree.
virtual COleDataSource * GetDataSource();
// Called when a drag is initiated in this view to copy the node.
COleDropTarget* GetDropTarget() { return (COleDropTarget*)m_pDropTarget; }
// Returns the drop target associated with the COutliner base class
virtual COutlinerDropTarget* CreateDropTarget();
// Called to create the RDF drop target.
afx_msg int OnCreate ( LPCREATESTRUCT );
// Overridden to allow for special create stuff.
afx_msg void OnPaint();
// Overridden to perform a drawing optimization (not performed by Outliner)
afx_msg void OnSize( UINT nType, int cx, int cy );
// Overridden to ensure column repainting and resizing.
afx_msg void OnLButtonDown ( UINT nFlags, CPoint point );
afx_msg void OnLButtonUp (UINT nFlags, CPoint point );
afx_msg void OnMouseMove( UINT nFlags, CPoint point );
afx_msg void OnRButtonDown ( UINT nFlags, CPoint point );
afx_msg void OnRButtonUp ( UINT nFlags, CPoint point );
// All overridden to allow the drawing of a drag rectangle for multiple selection
// and to implement improved hit testing.
afx_msg void OnTimer(UINT id);
// Used for editing columns and what-not.
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
// Overridden to update the nav title caption colors (in a docked Aurora view).
afx_msg BOOL OnCommand(UINT wParam, LONG lParam);
// Menu commands are handled by the rdfliner.
DECLARE_MESSAGE_MAP();
friend class CRDFDropTarget;
friend class CRDFOutlinerParent;
};
class CRDFDropTarget: public COutlinerDropTarget
{
public:
DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
void OnDragLeave(CWnd* pWnd);
CRDFDropTarget(COutliner* pOutliner) :COutlinerDropTarget(pOutliner) {};
};
class CRDFOutlinerParent : public COutlinerParent, CCustomImageObject
{
private:
CRDFCommandMap columnMap;
COLORREF m_ForegroundColor;
COLORREF m_BackgroundColor;
CRDFImage* m_pBackgroundImage;
CString m_BackgroundImageURL;
public:
CRDFOutlinerParent(HT_Pane thePane = NULL, HT_View theView = NULL);
BOOL PreCreateWindow(CREATESTRUCT& cs);
COutliner* GetOutliner();
void CreateColumns();
void DestroyColumns() { columnMap.Clear(); }
BOOL RenderData( int iColumn, CRect & rect, CDC &dc, LPCTSTR text );
BOOL ColumnCommand( int iColumn );
void Initialize();
CRDFCommandMap& GetColumnCommandMap() { return columnMap; }
void LoadComplete(HT_Resource r) { Invalidate(); }
void SetHTView(HT_View newView) { ((CRDFOutliner*)GetOutliner())->SetHTView(newView); Invalidate(); GetOutliner()->Invalidate(); }
protected:
afx_msg void OnDestroy();
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
class CRDFContentView : public CView
{
public:
CRDFOutlinerParent * m_pOutlinerParent;
CPaneCX* m_pHTMLView;
CNavTitleBar* m_pNavBar;
// Construction
public:
CRDFContentView();
~CRDFContentView();
void OnDraw(CDC* pDC) {};
COutlinerParent* GetOutlinerParent() { return m_pOutlinerParent; }
// This functionality has been folded in from COutlinerView.
void CreateColumns ( )
{
m_pOutlinerParent->CreateColumns ( );
}
void SwitchHTViews(HT_View htView);
CNavTitleBar* GetTitleBar() { return m_pNavBar; }
static CRDFContentView* DisplayRDFTreeFromSHACK(MWContext *pContext, CWnd* pParent, int xPos, int yPos, int width,
int height, char* url, int32 param_count, char** param_names, char** param_values);
// This function can be called to create an embedded RDF tree view using an
// external URL and specified targeting.
static CRDFContentView* DisplayRDFTreeFromResource(CWnd* pParent, int xPos, int yPos, int width,
int height, HT_Resource node, CCreateContext* pContext = NULL);
// This function creates an embedded RDF tree view from an existing resource.
static CRDFContentView* DisplayRDFTreeFromPane(CWnd* pParent, int xPos, int yPos, int width,
int height, HT_Pane pane, CCreateContext* pContext = NULL);
// This function creates an embedded RDF tree view once the pane has been constructed.
protected:
DECLARE_DYNCREATE(CRDFContentView)
//{{AFX_MSG(CRDFContentView)
afx_msg LRESULT OnNavCenterQueryPosition(WPARAM wParam, LPARAM lParam);
afx_msg int OnCreate ( LPCREATESTRUCT );
afx_msg void OnSize ( UINT, int, int );
afx_msg void OnSetFocus ( CWnd * pOldWnd );
afx_msg void OnKillFocus (CWnd* pNewWnd);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
class FAR CExportRDF : public CDialog
{
protected:
CString m_csCaption;
// Construction
public:
CExportRDF(CWnd* pParent = NULL); // standard constructor
void SetSecureTitle( CString &csTitle ) { m_csTitle = csTitle; }
// Dialog Data
//{{AFX_DATA(CExportRDF)
enum { IDD = IDD_EXPORTRDF };
CString m_csAsk;
CString m_csAns;
//}}AFX_DATA
CString m_csTitle;
// Implementation
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
};
#endif