535 lines
21 KiB
C
535 lines
21 KiB
C
|
// Copyright (C) 1996-1997 Microsoft Corporation. All rights reserved.
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifndef __SITEMAP_H__
|
||
|
#define __SITEMAP_H__
|
||
|
|
||
|
class CHtmlHelpControl; // forward reference
|
||
|
#include "cinput.h"
|
||
|
#include "strtable.h"
|
||
|
|
||
|
typedef PCSTR URL;
|
||
|
typedef UINT INFOTYPE;
|
||
|
|
||
|
const INFOTYPE ITYPE_ALWAYS_SHOW = 0; // when this info type is defined, the entry is always shown to the user (unless a Hidden info type overrides)
|
||
|
|
||
|
const int MAX_RELATED_ENTRIES = 256; // maximum number of sitemap entries for Related Topics
|
||
|
const int MAX_KEYSEARCH_ENTRIES = 256; // maximum number of sitemap entries for Keyword Search
|
||
|
|
||
|
enum {
|
||
|
IMAGE_CLOSED_BOOK = 1,
|
||
|
IMAGE_OPEN_BOOK,
|
||
|
IMAGE_CLOSED_BOOK_NEW,
|
||
|
IMAGE_OPEN_BOOK_NEW,
|
||
|
IMAGE_CLOSED_FOLDER,
|
||
|
IMAGE_OPEN_FOLDER,
|
||
|
IMAGE_CLOSED_FOLDER_NEW,
|
||
|
IMAGE_OPEN_FOLDER_NEW,
|
||
|
IMAGE_HELP_TOPIC,
|
||
|
IMAGE_HELP_TOPIC_NEW,
|
||
|
IMAGE_TOPIC,
|
||
|
IMAGE_TOPIC_NEW,
|
||
|
IMAGE_TOPIC_REMOTE,
|
||
|
IMAGE_TOPIC_NEW_REMOTE,
|
||
|
};
|
||
|
|
||
|
#define IMAGE_INFOTYPE 37
|
||
|
|
||
|
#define ESCAPE_ENTITY 0x01
|
||
|
#define ESCAPE_URL 0x02
|
||
|
#define ESCAPE_C 0x04
|
||
|
#define ESCAPE_ALL 0x07
|
||
|
|
||
|
/*
|
||
|
Each URL can be associated with any number of information types.
|
||
|
Information types are stored as bit flags. By default, each
|
||
|
SITE_ENTRY_URL entry contains enough storage for 32 information types.
|
||
|
If more are needed, then additional memory must be allocated. Note that
|
||
|
we must allocate 4 bytes for each additional information type in order to
|
||
|
avoid alignment problems.
|
||
|
|
||
|
The CSiteMap class must keep track of the total number of bytes to
|
||
|
allocate for each SITE_ENTRY_URL structure. This can NOT change once
|
||
|
a SITEMAP_ENTRY has been allocated (unless all SITEMAP_ENTRY structures
|
||
|
get updated). Within the SITEMAP_ENTRY structure, cUrls tells us how
|
||
|
many SITE_ENTRY_URL structures to allocate.
|
||
|
*/
|
||
|
|
||
|
typedef struct {
|
||
|
PCSTR pszTitle;
|
||
|
URL urlPrimary;
|
||
|
URL urlSecondary;
|
||
|
//INFOTYPE ainfoTypes[1]; // which information types
|
||
|
INFOTYPE *ainfoTypes;
|
||
|
} SITE_ENTRY_URL;
|
||
|
|
||
|
|
||
|
const int MAX_CATEGORIES = 10;
|
||
|
typedef struct {
|
||
|
int c_Types; // the number of ITs in a category
|
||
|
INFOTYPE *pInfoType; // a pointer to a set of infotype bits. The bits represent info types
|
||
|
// bit zero is reserved.
|
||
|
} CATEGORY_TYPE;
|
||
|
|
||
|
typedef struct {
|
||
|
CTable* m_ptblInfoTypes;
|
||
|
CTable* m_ptblInfoTypeDescriptions;
|
||
|
CTable* m_ptblCategories;
|
||
|
CTable* m_ptblCatDescription;
|
||
|
int m_cTypes; // total number of types
|
||
|
int m_cITSize; // The number of DWORDs allocated for categories, m_pExclusive, and m_pHidden
|
||
|
INFOTYPE* m_pExclusive; // index to first exclusive information type
|
||
|
INFOTYPE* m_pHidden; // index to first hidden information type
|
||
|
int m_max_categories; // The number of categories currently allocated.
|
||
|
CATEGORY_TYPE *m_aCategories;
|
||
|
} INFOTYPE_TABLES;
|
||
|
|
||
|
// Overhead is 20 bytes per entry + 12 for each URL (assuming up to 32 InfoTypes)
|
||
|
|
||
|
// forward reference
|
||
|
class CSiteMap;
|
||
|
|
||
|
typedef struct _tagSiteMapEntry {
|
||
|
|
||
|
#ifndef HHA
|
||
|
CSiteMap* pSiteMap;
|
||
|
#endif
|
||
|
|
||
|
PCSTR pszText; // title/keyword for this entry
|
||
|
|
||
|
#ifndef HHCTRL
|
||
|
PCSTR pszComment;
|
||
|
PCSTR pszSort; // used when sorting index
|
||
|
#endif
|
||
|
|
||
|
short iWindowName;
|
||
|
short iFrameName;
|
||
|
short iFontName;
|
||
|
short cUrls; // number or URLS
|
||
|
|
||
|
BYTE iImage;
|
||
|
BYTE level;
|
||
|
BYTE fInclude; // Used by HHW to track included sitemap file
|
||
|
|
||
|
BYTE fTopic:1;
|
||
|
BYTE fNew:1;
|
||
|
BYTE fNoDisplay:1;
|
||
|
BYTE fSeeAlso:1;
|
||
|
BYTE fShowToEveryOne:1; // TRUE if no Information Type was specified
|
||
|
BYTE fSendEvent:1; // TRUE if URL is an event string
|
||
|
BYTE fSendMessage:1; // TRUE if URL is a message string
|
||
|
BYTE fShortCut:1; // TRUE if URL is a shortcut string
|
||
|
|
||
|
// WARNING! pUrls must be the last member of this structure
|
||
|
|
||
|
SITE_ENTRY_URL* pUrls;
|
||
|
|
||
|
int GetLevel(void) const { return level; }
|
||
|
void SetLevel(int val) { level = (BYTE)val; }
|
||
|
|
||
|
PCSTR GetKeyword() const { return pszText; }
|
||
|
|
||
|
#ifdef HHCTRL
|
||
|
#ifndef HHA
|
||
|
HRESULT GetKeyword( WCHAR* pwszKeyword, int cch );
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
PCSTR GetTitle( SITE_ENTRY_URL* pUrl ) { return pUrl->pszTitle ? pUrl->pszTitle : GetStringResource(IDS_UNTITLED); }
|
||
|
|
||
|
#ifdef HHCTRL
|
||
|
#ifndef HHA
|
||
|
HRESULT GetTitle( SITE_ENTRY_URL* pUrl, WCHAR* pwszTitle, int cch );
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
BOOL IsTopic(void) const { return fTopic; }
|
||
|
void SetTopic(BOOL fSetting) { fTopic = fSetting; }
|
||
|
|
||
|
BOOL IsNew(void) const { return fNew; }
|
||
|
void SetNew(BOOL fSetting) { fNew = fSetting; }
|
||
|
|
||
|
BOOL GetSeeAlso(void) const { return fSeeAlso; }
|
||
|
void SetSeeAlso(BOOL fSetting) { fSeeAlso = fSetting; }
|
||
|
|
||
|
int GetImageIndex(void) const { return iImage; }
|
||
|
void SetImageIndex(int IndexImage) { iImage = (BYTE) IndexImage; }
|
||
|
|
||
|
int GetWindowIndex(void) const { return (int) iWindowName; }
|
||
|
void SetWindowIndex(int index) { iWindowName = (short)index; }
|
||
|
|
||
|
int GetFrameIndex(void) const { return (int) iFrameName; }
|
||
|
void SetFrameIndex(int index) { iFrameName = (short)index; }
|
||
|
|
||
|
int GetFontIndex(void) const { return (int) iFontName; }
|
||
|
void SetFontIndex(int index) { iFontName = (short)index; }
|
||
|
|
||
|
void Clear(void) { ClearMemory(this, sizeof(_tagSiteMapEntry)); }
|
||
|
|
||
|
} SITEMAP_ENTRY;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
class CSiteMapEntry : public SITEMAP_ENTRY
|
||
|
{
|
||
|
public:
|
||
|
CSiteMapEntry() { ClearMemory(this, sizeof(CSiteMapEntry)); }
|
||
|
#ifndef HHCTRL
|
||
|
void CopyFrom(const SITEMAP_ENTRY* pSiteMapEntry, CSiteMap* pSiteMapSrc, CSiteMap* pSiteMapDst);
|
||
|
void CopyTo(SITEMAP_ENTRY* pSiteMapEntry, CSiteMap* pSiteMapSrc, CSiteMap* pSiteMapDst);
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
class CSiteEntryUrl
|
||
|
{
|
||
|
public:
|
||
|
CSiteEntryUrl(int ITSize) {
|
||
|
m_pUrl = (SITE_ENTRY_URL*) lcCalloc(sizeof(SITE_ENTRY_URL) );
|
||
|
m_pUrl->ainfoTypes = (INFOTYPE*)lcCalloc( ITSize==0?sizeof(INFOTYPE):ITSize );
|
||
|
m_fUrlSpecified = FALSE;
|
||
|
}
|
||
|
~CSiteEntryUrl() { lcFree(m_pUrl->ainfoTypes); lcFree(m_pUrl); }
|
||
|
void SaveUrlEntry(CSiteMap* pSiteMap, SITEMAP_ENTRY* pSiteMapEntry);
|
||
|
|
||
|
SITE_ENTRY_URL* m_pUrl;
|
||
|
int m_cMaxTypes;
|
||
|
BOOL m_fUrlSpecified;
|
||
|
};
|
||
|
|
||
|
class CParseSitemap; // forward reference
|
||
|
|
||
|
// Forward declarations declared in genit.cpp
|
||
|
//
|
||
|
int GetITBitfromIT(INFOTYPE const *IT, int* offset, int* bit, int cTypes);
|
||
|
void AddIT(int const type, INFOTYPE *pIT );
|
||
|
void DeleteIT(int const type, INFOTYPE *pIT );
|
||
|
int GetITfromCat(int* offset, INFOTYPE* bit, INFOTYPE* pInfoType, int cTypes);
|
||
|
int GetITBitfromIT(INFOTYPE const *IT, int* offset, INFOTYPE* bit, int cTypes);
|
||
|
void CopyITBits(INFOTYPE** ITDst, INFOTYPE* ITSrc, int size);
|
||
|
|
||
|
// WARNING!!! All member classes should be included as pointers or initialization
|
||
|
// will trash the class.
|
||
|
|
||
|
// forward reference
|
||
|
SITEMAP_ENTRY;
|
||
|
|
||
|
class CSiteMap : public CTable
|
||
|
{
|
||
|
private:
|
||
|
void SizeIT(int oldSize);
|
||
|
|
||
|
public:
|
||
|
CSiteMap(int cMaxEntries = 0);
|
||
|
virtual ~CSiteMap();
|
||
|
|
||
|
#ifdef HHA
|
||
|
SITEMAP_ENTRY* AddEntry( SITEMAP_ENTRY* pSiteMapEntry = NULL )
|
||
|
{
|
||
|
int iData = AddData(sizeof(SITEMAP_ENTRY), pSiteMapEntry);
|
||
|
if (iData)
|
||
|
{
|
||
|
return GetSiteMapEntry(iData);
|
||
|
}
|
||
|
else
|
||
|
return NULL;
|
||
|
}
|
||
|
#else
|
||
|
SITEMAP_ENTRY* AddEntry( SITEMAP_ENTRY* pSiteMapEntry = NULL )
|
||
|
{
|
||
|
int iData = AddData(sizeof(SITEMAP_ENTRY), pSiteMapEntry);
|
||
|
if (iData)
|
||
|
{
|
||
|
SITEMAP_ENTRY* pReturn = GetSiteMapEntry(iData);
|
||
|
pReturn->pSiteMap = this;
|
||
|
return pReturn;
|
||
|
}
|
||
|
else
|
||
|
return NULL;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
void AddFavoriteNodes(PCSTR pszRoot, PCSTR pszNewFolder, int level);
|
||
|
void AddInfoTypeToUrl(SITEMAP_ENTRY* pSiteMapEntry, INFOTYPE iType);
|
||
|
int AddTypeName(PCSTR pszName);
|
||
|
int Count(void) const { return endpos - 1; };
|
||
|
void CreateFavorites(int level = 1);
|
||
|
int GetImageNumber(SITEMAP_ENTRY* pSiteMapEntry) const;
|
||
|
SITEMAP_ENTRY* GetSiteMapEntry(int pos) const { return (SITEMAP_ENTRY*) GetPointer(pos); }
|
||
|
#ifdef HHCTRL
|
||
|
#ifdef HHA
|
||
|
BOOL ReadFromFile(PCSTR pszFileName, BOOL fIndex, CHtmlHelpControl* phhctrl );
|
||
|
#else
|
||
|
BOOL ReadFromFile(PCSTR pszFileName, BOOL fIndex, CHtmlHelpControl* phhctrl, UINT CodePage );
|
||
|
#endif
|
||
|
#else
|
||
|
BOOL ReadFromFile(PCSTR pszFileName, BOOL fIndex, PCSTR pszBaseFile = NULL);
|
||
|
#endif
|
||
|
|
||
|
BOOL AreAnyInfoTypesDefined(SITEMAP_ENTRY* pSiteMapEntry);
|
||
|
SITE_ENTRY_URL* AreTheseInfoTypesDefined(SITEMAP_ENTRY* pSiteMapEntry, INFOTYPE types, int offset) const;
|
||
|
|
||
|
SITE_ENTRY_URL* NextUrlEntry(SITE_ENTRY_URL* pUrl) const { return (SITE_ENTRY_URL*) ((PBYTE) pUrl + sizeof(SITE_ENTRY_URL) ); }
|
||
|
SITE_ENTRY_URL* GetUrlEntry(SITEMAP_ENTRY* pSiteMapEntry, int pos /* zero-based */) { return (SITE_ENTRY_URL*) ((PBYTE) pSiteMapEntry->pUrls + (GetUrlEntrySize() * pos)); }
|
||
|
SITE_ENTRY_URL* GetUrlEntry(SITE_ENTRY_URL* pUrl, int pos /* zero-based */) { return (SITE_ENTRY_URL*) ((PBYTE) pUrl + (GetUrlEntrySize() * pos)); }
|
||
|
PCSTR GetUrlTitle(SITEMAP_ENTRY* pSiteMapEntry, int pos /* zero-based */) { return pSiteMapEntry->GetTitle((SITE_ENTRY_URL*) (SITE_ENTRY_URL*) ((PBYTE) pSiteMapEntry->pUrls + (GetUrlEntrySize() * pos))); }
|
||
|
int GetUrlEntrySize(void) const { return sizeof(SITE_ENTRY_URL); }
|
||
|
BOOL ParseSiteMapParam(CParseSitemap* pcparse, PCSTR pszParamType, CTable *ptblSubSets);
|
||
|
|
||
|
void ReSizeIT(int Size=0);
|
||
|
void ReSizeURLIT(int Size=0);
|
||
|
|
||
|
BOOL IsEntryInCurTypeList(SITEMAP_ENTRY* pSiteMapEntry) const;
|
||
|
int GetInfoType(PCSTR pszTypeName);
|
||
|
PCSTR GetInfoTypeName(int pos) const { return m_itTables.m_ptblInfoTypes->GetPointer(pos); }
|
||
|
int GetITIndex(PCSTR pszString) const { return m_itTables.m_ptblInfoTypes->IsStringInTable( pszString ); }
|
||
|
PCSTR GetInfoTypeDescription(int pos) const { return m_itTables.m_ptblInfoTypeDescriptions->GetPointer(pos); }
|
||
|
int GetInfoTypeSize(void) const { return InfoTypeSize(); }
|
||
|
int HowManyInfoTypes(void) const { return m_itTables.m_ptblInfoTypes ? m_itTables.m_ptblInfoTypes->CountStrings() : 0; }
|
||
|
BOOL IsInACategory( int type ) const;
|
||
|
|
||
|
int InfoTypeSize(void) const { return m_itTables.m_cITSize * sizeof(INFOTYPE); }
|
||
|
BOOL IsDeleted( const int pos ) const { return ( *(GetInfoTypeName(pos))==' ' )?TRUE:FALSE; }
|
||
|
|
||
|
int GetFirstExclusive(int=-1, INFOTYPE=1) const;
|
||
|
int GetNextExclusive(void) const;
|
||
|
int GetLastExclusive(void) const;
|
||
|
void AddExclusiveIT(int const type) { AddIT( type, m_itTables.m_pExclusive ); }
|
||
|
void DeleteExclusiveIT(int const type ) { DeleteIT( type, m_itTables.m_pExclusive); }
|
||
|
BOOL IsExclusive(int const type) const { return m_itTables.m_pExclusive?*(m_itTables.m_pExclusive+(type/32)) & (1<<(type%32)):0; }
|
||
|
|
||
|
int GetFirstHidden(int=-1, INFOTYPE=1) const;
|
||
|
int GetNextHidden(void) const;
|
||
|
int GetLastHidden(void) const;
|
||
|
void AddHiddenIT(int const type ) { AddIT(type, m_itTables.m_pHidden); }
|
||
|
void DeleteHiddenIT(int const type) { DeleteIT( type, m_itTables.m_pHidden ); }
|
||
|
BOOL IsHidden(int const type) const { return m_itTables.m_pHidden?*(m_itTables.m_pHidden+(type/32)) & (1<<(type%32)):0; }
|
||
|
|
||
|
int GetFirstCategoryType(int pos) const ;
|
||
|
int GetNextITinCategory( void ) const ;
|
||
|
int GetLastCategoryType(int pos) const ;
|
||
|
void AddITtoCategory(int pos, int type);
|
||
|
void AddToCategory( int iLastType );
|
||
|
void DeleteITfromCat(int pos, int type);
|
||
|
BOOL IsITinCategory( int pos, int type) const { return m_itTables.m_aCategories[pos].pInfoType?*(m_itTables.m_aCategories[pos].pInfoType+(type/32)) & (1<<(type%32)):0; }
|
||
|
BOOL IsCatDeleted( const int pos ) const { return ( *(GetCategoryString(pos))==' ' )?TRUE:FALSE; }
|
||
|
|
||
|
void CopyCat(INFOTYPE_TABLES*, const INFOTYPE_TABLES*);
|
||
|
PCSTR GetCategoryString(int pos) const { return m_itTables.m_ptblCategories->GetPointer(pos); }
|
||
|
int GetCatPosition(PCSTR psz) const { return m_itTables.m_ptblCategories->IsStringInTable(psz); }
|
||
|
int HowManyCategories(void) const { return m_itTables.m_ptblCategories ? m_itTables.m_ptblCategories->CountStrings() : 0; }
|
||
|
PCSTR GetCategoryDescription(int pos) const { return m_itTables.m_ptblCatDescription?m_itTables.m_ptblCatDescription->GetPointer(pos):0; }
|
||
|
|
||
|
int GetLevel(int pos) const { return GetSiteMapEntry(pos)->GetLevel(); }
|
||
|
void SetLevel(int val, int pos) { GetSiteMapEntry(pos)->SetLevel(val); }
|
||
|
|
||
|
PCSTR GetPathName(void) { return m_pszSitemapFile; }
|
||
|
PCSTR GetSiteMapFile(void) { return m_pszSitemapFile; }
|
||
|
void SetSiteMapFile(PCSTR pszFile)
|
||
|
{
|
||
|
if (!m_pszSitemapFile && pszFile)
|
||
|
m_pszSitemapFile = StrDup(pszFile);
|
||
|
}
|
||
|
|
||
|
PCSTR GetFrameName(void) { return m_pszFrameName ? m_pszFrameName : ""; }
|
||
|
void SetFrameName(PCSTR psz) { m_pszFrameName = IsEmptyString(psz) ? NULL : StrDup(psz); }
|
||
|
BOOL IsFrameDefined(void) { return m_pszFrameName != NULL; }
|
||
|
void SetEntryFrame(SITEMAP_ENTRY* pSiteMapEntry, PCSTR psz) { pSiteMapEntry->SetFrameIndex(AddName(psz)); }
|
||
|
PCSTR GetEntryFrame(SITEMAP_ENTRY* pSiteMapEntry) { return GetName(pSiteMapEntry->GetFrameIndex()); }
|
||
|
|
||
|
PCSTR GetWindowName(void) { return m_pszWindowName ? m_pszWindowName : ""; }
|
||
|
void SetWindowName(PCSTR psz) { m_pszWindowName = IsEmptyString(psz) ? NULL : StrDup(psz); }
|
||
|
BOOL IsWindowDefined(void) { return m_pszWindowName != NULL; }
|
||
|
void SetEntryWindow(SITEMAP_ENTRY* pSiteMapEntry, PCSTR psz) { pSiteMapEntry->SetWindowIndex(AddName(psz)); }
|
||
|
PCSTR GetEntryWindow(SITEMAP_ENTRY* pSiteMapEntry) { return GetName(pSiteMapEntry->GetWindowIndex()); }
|
||
|
|
||
|
URL AddUrl(PCSTR pszUrl);
|
||
|
PCSTR GetUrlString(URL url) const { return (PCSTR) url; }
|
||
|
|
||
|
int AddName(PCSTR psz);
|
||
|
PCSTR GetName(int pos)
|
||
|
{
|
||
|
#ifdef _DEBUG
|
||
|
if (m_ptblStrings)
|
||
|
ASSERT(pos <= m_ptblStrings->CountStrings());
|
||
|
#endif
|
||
|
return (m_ptblStrings && pos > 0) ? m_ptblStrings->GetHashStringPointer(pos) : "";
|
||
|
}
|
||
|
BOOL IsIndex(void) { return m_fIndex; }
|
||
|
|
||
|
#ifndef HHA
|
||
|
UINT GetCodePage() { if( m_CodePage != (UINT)-1 ) return m_CodePage; else return CP_ACP; }
|
||
|
#endif
|
||
|
|
||
|
//////// member variables //////////
|
||
|
|
||
|
/*
|
||
|
!!! WARNING: if you add or remove members, you must change the version
|
||
|
!!! number in hhamsgs.h or face a GPF when the author does a View Entry.
|
||
|
*/
|
||
|
BOOL m_fTypeCopy; // TRUE if following tables are pointers that must not be freed
|
||
|
INFOTYPE_TABLES m_itTables;
|
||
|
// CSubSets *m_pSubSets;
|
||
|
PCSTR m_pszSitemapFile;
|
||
|
INFOTYPE* m_pInfoTypes; // user-specified Information Types
|
||
|
INFOTYPE* m_pTypicalInfoTypes; // "typical" information types
|
||
|
BOOL m_fIndex; // TRUE if using this as an index
|
||
|
PSTR m_pszBase; // used when reading sitemap file
|
||
|
|
||
|
PCSTR m_pszImageList;
|
||
|
int m_cImageWidth; // width of each icon in image
|
||
|
int m_cImages;
|
||
|
COLORREF m_clrMask;
|
||
|
|
||
|
COLORREF m_clrBackground;
|
||
|
COLORREF m_clrForeground;
|
||
|
PCSTR m_pszFont; // name, pointsize, ext. usefull to CTocClass.
|
||
|
|
||
|
BOOL m_fFolderImages; // use folders instead of books as the image
|
||
|
BOOL m_fPromotForInfoTypes;
|
||
|
|
||
|
DWORD m_tvStyles; // regular window styles
|
||
|
DWORD m_exStyles; // extended window styles
|
||
|
|
||
|
PCSTR m_pszBackBitmap; // used for TOC and Index
|
||
|
|
||
|
int m_cITSize; // The number of DWORDS currently allocated for IT bits for the URL
|
||
|
// int m_cUrlEntry; // sizeof(SITE_ENTRY_URL) + sizeof(URL) for each additional 32 Information Types
|
||
|
// int m_cInfoTypeOffsets; // number of additional offsets to check
|
||
|
|
||
|
BOOL m_fAutoGenerated; // means the file is not writeable
|
||
|
|
||
|
#ifndef HHCTRL
|
||
|
SITEMAP_ENTRY* Add(const SITEMAP_ENTRY* pSiteMapEntry = NULL);
|
||
|
SITEMAP_ENTRY* Insert(int pos, const SITEMAP_ENTRY* pSiteMapEntry = NULL);
|
||
|
void Remove(int pos, BOOL fCompact = TRUE);
|
||
|
void FillUrlComboBox(SITEMAP_ENTRY* pSiteMapEntry, HWND hwndCombo);
|
||
|
void MoveEntry(int posSrc, int posDst);
|
||
|
BOOL SaveSiteMap(PCSTR pszPathName, BOOL fIndex);
|
||
|
void OutputDefaultSiteMapEntry(COutput* pout, SITEMAP_ENTRY* pSiteMapEntry, int curLevel, BOOL fIndex);
|
||
|
void CopyProperties(CSiteMap* pSiteMap, BOOL fIncludeTables = FALSE);
|
||
|
#endif
|
||
|
|
||
|
CTable* m_ptblStrings;
|
||
|
|
||
|
PCSTR m_pszFrameName; // default frame to use
|
||
|
PCSTR m_pszWindowName; // default window to use
|
||
|
PCSTR m_pszHHIFile;
|
||
|
BOOL m_fSaveIT; // Save the declared IT in an instance of CSitemap, if there is an hhi hhc IT declarations are not saved.
|
||
|
|
||
|
#ifndef HHA
|
||
|
private:
|
||
|
UINT m_CodePage;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
|
||
|
// note the inlined SITEMAP_ENTRY functions below must be declared after
|
||
|
// the declaration of CSiteMap otherwise the compiler will choke on them
|
||
|
// since they access CSiteMap members/methods
|
||
|
|
||
|
#ifdef HHCTRL
|
||
|
#ifndef HHA
|
||
|
inline HRESULT SITEMAP_ENTRY::GetKeyword( WCHAR* pwszKeyword, int cch )
|
||
|
{
|
||
|
ASSERT( pSiteMap );
|
||
|
//ASSERT( pSiteMap->GetCodePage() );
|
||
|
UINT CodePage = pSiteMap->GetCodePage();
|
||
|
if( MultiByteToWideChar( CodePage, 0, pszText, -1, pwszKeyword, cch ) == 0 )
|
||
|
return E_FAIL;
|
||
|
return S_OK;
|
||
|
}
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifdef HHCTRL
|
||
|
#ifndef HHA
|
||
|
inline HRESULT SITEMAP_ENTRY::GetTitle( SITE_ENTRY_URL* pUrl, WCHAR* pwszTitle, int cch )
|
||
|
{
|
||
|
ASSERT( pSiteMap );
|
||
|
//ASSERT( pSiteMap->GetCodePage() );
|
||
|
if( !pUrl->pszTitle ) {
|
||
|
wcsncpy( pwszTitle, GetStringResourceW(IDS_UNTITLED), cch);
|
||
|
pwszTitle[cch] = 0;
|
||
|
return S_OK;
|
||
|
}
|
||
|
UINT CodePage = pSiteMap->GetCodePage();
|
||
|
if( MultiByteToWideChar( CodePage, 0, pszText, -1, pwszTitle, cch) == 0 )
|
||
|
return E_FAIL;
|
||
|
return S_OK;
|
||
|
}
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
extern const char txtBeginList[]; // "<UL>"
|
||
|
extern const char txtEndList[] ; // "</UL>"
|
||
|
extern const char txtBeginListItem[]; // "<LI"
|
||
|
extern const char txtSitemap[]; // "<!Sitemap";
|
||
|
extern const char txtSitemap1[]; // "<!--Sitemap";
|
||
|
extern const char txtSitemap2[]; // "<!Sitemap";
|
||
|
extern const char txtParam[]; // "<param name";
|
||
|
extern const char txtValue[]; // "value";
|
||
|
extern const char txtBeginHref[]; // "<A HREF";
|
||
|
extern const char txtEndHref[]; // "</A>";
|
||
|
extern const char txtBeginObject[]; // "<OBJECT"
|
||
|
extern const char txtEndObject[]; // "</OBJECT>"
|
||
|
extern const char txtSiteMapObject[]; // "text/sitemap";
|
||
|
extern const char txtSitemapProperties[]; // "text/site properties";
|
||
|
extern const char txtBackGround[]; // "Background";
|
||
|
extern const char txtForeGround[]; // "Foreground";
|
||
|
extern const char txtFont[]; // "Font";
|
||
|
extern const char txtImageList[]; // "ImageList";
|
||
|
extern const char txtImageWidth[]; // "Image Width";
|
||
|
extern const char txtColorMask[]; // "Color Mask";
|
||
|
extern const char txtNumberImages[]; // "NumberImages";
|
||
|
extern const char txtExWindowStyles[]; // "ExWindow Styles";
|
||
|
extern const char txtWindowStyles[]; // "Window Styles";
|
||
|
extern const char txtType[]; // "type";
|
||
|
extern const char txtNo[]; // "No";
|
||
|
extern const char txtFolderType[]; // "Folder";
|
||
|
extern const char txtEndTag[]; // "</";
|
||
|
extern const char txtInfoTypeDeclaration[]; // "InformationTypeDecl";
|
||
|
|
||
|
|
||
|
// Param labels
|
||
|
|
||
|
extern const char txtParamType[]; // "Type";
|
||
|
extern const char txtParamTypeExclusive[];// "TypeExclusive";
|
||
|
extern const char txtParamTypeHidden[]; // "TypeHidden";
|
||
|
extern const char txtParamTypeDesc[]; // "TypeDesc";
|
||
|
extern const char txtParamCategory[]; // "Category";
|
||
|
extern const char txtParamCategoryDesc[]; // "CategoryDesc";
|
||
|
extern const char txtParamName[]; // "Name";
|
||
|
extern const char txtParamUrl[]; // "URL";
|
||
|
extern const char txtParamIcon[]; // "Icon";
|
||
|
extern const char txtParamLocal[]; // "Local";
|
||
|
extern const char txtParamFrame[]; // "Frame";
|
||
|
extern const char txtParamWindow[]; // "Window";
|
||
|
extern const char txtParamNew[]; // "New";
|
||
|
extern const char txtParamComment[]; // "Comment";
|
||
|
extern const char txtParamImageNumber[]; // "ImageNumber";
|
||
|
extern const char txtParamDisplay[]; // "Display";
|
||
|
extern const char txtParamKeyword[]; // "Keyword";
|
||
|
extern const char txtParamInstruction[]; // "Instruction";
|
||
|
extern const char txtParamSectionTitle[]; // "Section Title";
|
||
|
extern const char txtSeeAlso[]; // "See Also";
|
||
|
extern const char txtImageType[]; // "ImageType";
|
||
|
extern const char txtFavorites[]; // "Favorites";
|
||
|
extern const char txtAutoGenerated[]; // "Auto Generated";
|
||
|
extern const char txtSSInclusive[]; // "Inclusive";
|
||
|
extern const char txtSSExclusive[]; // "Exclusive";
|
||
|
|
||
|
//////////////////////////////////// Functions ///////////////////////////////
|
||
|
|
||
|
int CompareSz(PCSTR psz, PCSTR pszSub);
|
||
|
HASH HashFromSz(PCSTR pszKey);
|
||
|
BOOL ReplaceEscapes(PCSTR pszSrc, PSTR pszDst, int); // pszSrc can be same as pszDst
|
||
|
|
||
|
#endif // __SITEMAP_H__
|