зеркало из https://github.com/mozilla/pjs.git
187 строки
4.9 KiB
C++
187 строки
4.9 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.
|
|
*/
|
|
|
|
#ifndef RDFACC_H
|
|
#define RDFACC_H
|
|
|
|
#include "cxstubs.h"
|
|
|
|
class CCustomImageObject;
|
|
class NSNavCenterImage;
|
|
|
|
enum IconType { BUILTIN_BITMAP, LOCAL_FILE, ARBITRARY_URL }; // TODO: Use this icon type for the tree AND the toolbars
|
|
|
|
class CHTFEData
|
|
{
|
|
private:
|
|
CHTFEData(); // Disallow the instantiation of objects of this class.
|
|
|
|
public:
|
|
|
|
static void FlushIconInfo()
|
|
{
|
|
// Just remove the HICONs from the local file cache.
|
|
m_LocalFileCache.RemoveAll();
|
|
|
|
// Need to iterate over all the elements in the custom URL cache and destroy the images.
|
|
POSITION pos = m_CustomURLCache.GetStartPosition();
|
|
void* pData;
|
|
CString key;
|
|
while (pos != NULL)
|
|
{
|
|
m_CustomURLCache.GetNextAssoc(pos, key, pData);
|
|
NSNavCenterImage* pImage = (NSNavCenterImage*)pData;
|
|
delete pImage;
|
|
}
|
|
}
|
|
|
|
static CMapStringToPtr m_LocalFileCache;
|
|
// Hashed on file extension e.g., .html would hold the icon for HTML files.
|
|
// Special keys: "open folder" and "closed folder" are used to hold the folder icons.
|
|
// file URLs are used to represent drives, e.g., file:///a|/
|
|
// "no extension" is used to represent files with no extension
|
|
|
|
static CMapStringToPtr m_CustomURLCache;
|
|
// Hashed on the URL of the image. Holds pointers to NSNavCenterImages.
|
|
};
|
|
|
|
class CRDFColumn : public CObject
|
|
{
|
|
private:
|
|
char* name; // The column's name.
|
|
int width; // The column's width
|
|
void* token; // The column token
|
|
uint32 tokenType; // The column token type
|
|
CString buffer; // A temp. storage buffer for column data
|
|
|
|
public:
|
|
CRDFColumn(char* n, int w, void* t, uint32 tt)
|
|
:name(n), width(w), token(t), tokenType(tt) {}
|
|
|
|
uint32 GetDataType() const { return tokenType; }
|
|
char* GetName() { return name; }
|
|
void* GetToken() { return token; }
|
|
CString& GetStorageBuffer() { return buffer; }
|
|
};
|
|
|
|
class CRDFMenuCommand : public CObject
|
|
{
|
|
private:
|
|
HT_MenuCmd htCommandID;
|
|
char* name;
|
|
|
|
public:
|
|
CRDFMenuCommand(char* n, HT_MenuCmd ht)
|
|
:name(n), htCommandID(ht) {}
|
|
|
|
HT_MenuCmd GetHTCommand() { return htCommandID; }
|
|
};
|
|
|
|
class CRDFCommandMap
|
|
{
|
|
private:
|
|
CObArray commandMap; // Contains a mapping of idents to objects. This is used
|
|
// for columns and for menus.
|
|
public:
|
|
CRDFCommandMap()
|
|
{
|
|
}
|
|
|
|
private:
|
|
CRDFCommandMap(const CRDFCommandMap& la)
|
|
{} // Object cannot be copied
|
|
|
|
public:
|
|
~CRDFCommandMap()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
int AddCommand(CObject* theObject)
|
|
{
|
|
return commandMap.Add(theObject);
|
|
}
|
|
|
|
CObject* GetCommand(int i) { return commandMap[i]; }
|
|
|
|
void Clear()
|
|
{
|
|
int count = commandMap.GetSize();
|
|
for (int i = count-1; i >= 0; i--)
|
|
{
|
|
CObject* obj = commandMap[i];
|
|
commandMap.RemoveAt(i);
|
|
delete obj;
|
|
}
|
|
}
|
|
};
|
|
|
|
class CRDFOutliner;
|
|
|
|
class CRDFEditWnd : public CEdit
|
|
{
|
|
protected:
|
|
CRDFOutliner* m_pOwner;
|
|
public:
|
|
CRDFEditWnd(CRDFOutliner* owner) { m_pOwner = owner; }
|
|
~CRDFEditWnd() {};
|
|
|
|
virtual BOOL PreTranslateMessage ( MSG * msg );
|
|
|
|
protected:
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CRDFEditWnd)
|
|
afx_msg void OnDestroy();
|
|
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
|
afx_msg void OnKillFocus( CWnd* pNewWnd );
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
// The RDF Context
|
|
class CRDFCX : public CStubsCX
|
|
{
|
|
private:
|
|
CWnd* m_pCurrentRDFWindow;
|
|
|
|
public:
|
|
CRDFCX(ContextType ctMyType, MWContextType XPType)
|
|
:CStubsCX(ctMyType, XPType) { m_pCurrentRDFWindow = NULL; };
|
|
|
|
virtual CWnd *GetDialogOwner() const;
|
|
|
|
void TrackRDFWindow(CWnd* pWnd) { m_pCurrentRDFWindow = pWnd; };
|
|
|
|
};
|
|
|
|
BOOL IsLocalFile(const char* pURL);
|
|
BOOL IsExecutableURL(const char* pURL);
|
|
HICON DrawLocalFileIcon(HT_Resource r, int left, int top, HDC hdc);
|
|
NSNavCenterImage* DrawArbitraryURL(HT_Resource r, int left, int top, int imageWidth,
|
|
int imageHeight, HDC hDC, COLORREF bkColor,
|
|
CCustomImageObject* pObject, BOOL largeIcon);
|
|
|
|
HICON FetchLocalFileIcon(HT_Resource r);
|
|
NSNavCenterImage* FetchCustomIcon(HT_Resource r, CCustomImageObject* pObject, BOOL largeIcon);
|
|
IconType DetermineIconType(HT_Resource pNode, BOOL largeIcon);
|
|
|
|
void PaintBackground(HDC hdc, CRect rect, NSNavCenterImage* pImage, int ySrcOffset = -1);
|
|
// This function tiles and paints the background image in the tree.
|
|
void ResolveToPaletteColor(COLORREF& color, HPALETTE hPal);
|
|
#endif // RDFACC_H
|