pjs/cmd/winfe/rdfacc.h

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