+++ /dev/null
-using System;\r
-using System.IO;\r
-using System.Collections;\r
-using System.Windows.Forms;\r
-\r
-using HtmlHelp.ChmDecoding;\r
-\r
-namespace HtmlHelp\r
-{\r
- /// <summary>\r
- /// The class <c>TOCItem</c> implements a toc-entry item\r
- /// </summary>\r
- public sealed class TOCItem\r
- {\r
- /// <summary>\r
- /// Constant for standard folder (closed) image index (HH2 image list)\r
- /// </summary>\r
- public const int STD_FOLDER_HH2 = 4;\r
- /// <summary>\r
- /// Constant for standard folder (opened) image index (HH2 image list)\r
- /// </summary>\r
- public const int STD_FOLDER_OPEN_HH2 = 6;\r
- /// <summary>\r
- /// Constant for standard file image index (HH2 image list)\r
- /// </summary>\r
- public const int STD_FILE_HH2 = 16;\r
-\r
- /// <summary>\r
- /// Constant for standard folder (closed) image index (HH1 image list)\r
- /// </summary>\r
- public const int STD_FOLDER_HH1 = 0;\r
- /// <summary>\r
- /// Constant for standard folder (opened) image index (HH1 image list)\r
- /// </summary>\r
- public const int STD_FOLDER_OPEN_HH1 = 1;\r
- /// <summary>\r
- /// Constant for standard file image index (HH1 image list)\r
- /// </summary>\r
- public const int STD_FILE_HH1 = 10;\r
-\r
- /// <summary>\r
- /// Internal flag specifying the data extraction mode used for this item\r
- /// </summary>\r
- private DataMode _tocMode = DataMode.TextBased;\r
- /// <summary>\r
- /// Internal member storing the offset (only used in binary tocs)\r
- /// </summary>\r
- private int _offset = 0;\r
- /// <summary>\r
- /// Internal member storing the offset of the next item(only used in binary tocs)\r
- /// </summary>\r
- private int _offsetNext = 0;\r
- /// <summary>\r
- /// Internal member storing a merge link. \r
- /// If the target file is in the merged files list of the CHM,\r
- /// this item will be replaced with the target TOC or Topic, if not it will \r
- /// be removed from TOC.\r
- /// </summary>\r
- private string _mergeLink = "";\r
- /// <summary>\r
- /// Internal member storing the toc name\r
- /// </summary>\r
- private string _name = "";\r
- /// <summary>\r
- /// Internal member storing the toc loca (content file)\r
- /// </summary>\r
- private string _local = "";\r
- /// <summary>\r
- /// Internal member storing all associated information type strings\r
- /// </summary>\r
- private ArrayList _infoTypeStrings = new ArrayList();\r
- /// <summary>\r
- /// Internal member storing the associated chm file\r
- /// </summary>\r
- private string _chmFile = "";\r
- /// <summary>\r
- /// Internal member storing the image index\r
- /// </summary>\r
- private int _imageIndex = -1;\r
- /// <summary>\r
- /// Internal member storing the offset of the associated topic entry (for binary tocs)\r
- /// </summary>\r
- private int _topicOffset = -1;\r
- /// <summary>\r
- /// Internal member storing the toc children\r
- /// </summary>\r
- private ArrayList _children = new ArrayList();\r
- /// <summary>\r
- /// Internal member storing the parameter collection\r
- /// </summary>\r
- private Hashtable _otherParams = new Hashtable();\r
- /// <summary>\r
- /// Internal member storing the associated chmfile object\r
- /// </summary>\r
- private CHMFile _associatedFile = null;\r
- /// <summary>\r
- /// Parent item\r
- /// </summary>\r
- private TOCItem _parent=null;\r
-\r
- /// <summary>\r
- /// Holds a pointer to the next item in the TOC\r
- /// </summary>\r
- public TOCItem Next=null;\r
-\r
- /// <summary>\r
- /// Holds a pointer to the previous item in the TOC\r
- /// </summary>\r
- public TOCItem Prev=null;\r
-\r
- /// <summary>\r
- /// Holds a pointer to the TreeNode where this TOC Item is used\r
- /// </summary>\r
- public System.Windows.Forms.TreeNode treeNode=null;\r
-\r
- /// <summary>\r
- /// Constructor of the class used during text-based data extraction\r
- /// </summary>\r
- /// <param name="name">name of the item</param>\r
- /// <param name="local">local content file</param>\r
- /// <param name="ImageIndex">image index</param>\r
- /// <param name="chmFile">associated chm file</param>\r
- public TOCItem(string name, string local, int ImageIndex, string chmFile)\r
- {\r
- _tocMode = DataMode.TextBased;\r
- _name = name;\r
- _local = local;\r
- _imageIndex = ImageIndex;\r
- _chmFile = chmFile;\r
- }\r
-\r
- /// <summary>\r
- /// Constructor of the class used during binary data extraction\r
- /// </summary>\r
- /// <param name="topicOffset">offset of the associated topic entry</param>\r
- /// <param name="ImageIndex">image index to use</param>\r
- /// <param name="associatedFile">associated chm file</param>\r
- public TOCItem(int topicOffset, int ImageIndex, CHMFile associatedFile)\r
- {\r
- _tocMode = DataMode.Binary;\r
- _associatedFile = associatedFile;\r
- _chmFile = associatedFile.ChmFilePath;\r
- _topicOffset = topicOffset;\r
- _imageIndex = ImageIndex;\r
- }\r
-\r
- /// <summary>\r
- /// Standard constructor\r
- /// </summary>\r
- public TOCItem()\r
- {\r
- }\r
-\r
- #region Data dumping\r
- /// <summary>\r
- /// Dump the class data to a binary writer\r
- /// </summary>\r
- /// <param name="writer">writer to write the data</param>\r
- /// <param name="writeFilename">true if the chmfile name should be written</param>\r
- internal void Dump(ref BinaryWriter writer, bool writeFilename)\r
- {\r
- writer.Write((int)_tocMode);\r
- writer.Write(_topicOffset);\r
- writer.Write(_name);\r
-\r
- if((_tocMode == DataMode.TextBased)||(_topicOffset<0))\r
- {\r
- writer.Write(_local);\r
- }\r
-\r
- writer.Write(_imageIndex);\r
-\r
- writer.Write(_mergeLink);\r
-\r
- if(writeFilename)\r
- writer.Write(_chmFile);\r
-\r
- writer.Write(_infoTypeStrings.Count);\r
-\r
- for(int i=0; i<_infoTypeStrings.Count; i++)\r
- writer.Write( (_infoTypeStrings[i]).ToString() );\r
-\r
- writer.Write(_children.Count);\r
-\r
- for(int i=0; i<_children.Count; i++)\r
- {\r
- TOCItem child = ((TOCItem)(_children[i]));\r
- child.Dump(ref writer, writeFilename);\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Dump the class data to a binary writer\r
- /// </summary>\r
- /// <param name="writer">writer to write the data</param>\r
- internal void Dump(ref BinaryWriter writer)\r
- {\r
- Dump(ref writer, false);\r
- }\r
-\r
- /// <summary>\r
- /// Reads the object data from a dump store\r
- /// </summary>\r
- /// <param name="reader">reader to read the data</param>\r
- /// <param name="readFilename">true if the chmfile name should be read</param>\r
- internal void ReadDump(ref BinaryReader reader, bool readFilename)\r
- {\r
- int i=0;\r
- _tocMode = (DataMode)reader.ReadInt32();\r
- _topicOffset = reader.ReadInt32();\r
- _name = reader.ReadString();\r
-\r
- if((_tocMode == DataMode.TextBased)||(_topicOffset<0))\r
- {\r
- _local = reader.ReadString();\r
- }\r
- \r
- _imageIndex = reader.ReadInt32();\r
-\r
- _mergeLink = reader.ReadString();\r
-\r
- if(readFilename)\r
- _chmFile = reader.ReadString();\r
-\r
- int nCnt = reader.ReadInt32();\r
-\r
- for(i=0; i<nCnt; i++)\r
- {\r
- string sIT = reader.ReadString();\r
- _infoTypeStrings.Add(sIT);\r
- }\r
-\r
- nCnt = reader.ReadInt32();\r
-\r
- if(_associatedFile != null)\r
- _chmFile = _associatedFile.ChmFilePath;\r
-\r
- for(i=0; i<nCnt; i++)\r
- {\r
- TOCItem child = new TOCItem();\r
- child.AssociatedFile = _associatedFile;\r
-\r
- child.ReadDump(ref reader, readFilename);\r
-\r
- if(_associatedFile != null)\r
- child.ChmFile = _associatedFile.ChmFilePath;\r
- else if(!readFilename)\r
- child.ChmFile = _chmFile;\r
- child.Parent = this;\r
-\r
- _children.Add(child);\r
-\r
- if(child.MergeLink.Length > 0)\r
- _associatedFile.MergLinks.Add(child);\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Reads the object data from a dump store\r
- /// </summary>\r
- /// <param name="reader">reader to read the data</param>\r
- internal void ReadDump(ref BinaryReader reader)\r
- {\r
- ReadDump(ref reader, false);\r
- }\r
- #endregion\r
-\r
- /// <summary>\r
- /// Gets/Sets the data extraction mode with which this item was created.\r
- /// </summary>\r
- internal DataMode TocMode\r
- {\r
- get { return _tocMode; }\r
- set { _tocMode = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the offset of the associated topic entry\r
- /// </summary>\r
- internal int TopicOffset\r
- {\r
- get { return _topicOffset; }\r
- set { _topicOffset = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the associated CHMFile instance\r
- /// </summary>\r
- internal CHMFile AssociatedFile\r
- {\r
- get { return _associatedFile; }\r
- set \r
- { \r
- _associatedFile = value; \r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the offset of the item.\r
- /// </summary>\r
- /// <remarks>Only used in binary tocs</remarks>\r
- internal int Offset\r
- {\r
- get { return _offset; }\r
- set { _offset = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the offset of the next item.\r
- /// </summary>\r
- /// <remarks>Only used in binary tocs</remarks>\r
- internal int OffsetNext\r
- {\r
- get { return _offsetNext; }\r
- set { _offsetNext = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets the ArrayList which holds all information types/categories this item is associated\r
- /// </summary>\r
- internal ArrayList InfoTypeStrings\r
- {\r
- get { return _infoTypeStrings; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the parent of this item\r
- /// </summary>\r
- public TOCItem Parent\r
- {\r
- get { return _parent; }\r
- set { _parent = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the mergelink for this item. \r
- /// <b>You should not set the mergedlink by your own !</b>\r
- /// This is only for loading merged CHMs.\r
- /// </summary>\r
- public string MergeLink\r
- {\r
- get { return _mergeLink; }\r
- set { _mergeLink = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the name of the item\r
- /// </summary>\r
- public string Name\r
- {\r
- get \r
- { \r
- if(_mergeLink.Length > 0)\r
- return "";\r
-\r
- if(_name.Length <= 0)\r
- {\r
- if((_tocMode == DataMode.Binary )&&(_associatedFile!=null))\r
- {\r
- if( _topicOffset >= 0)\r
- {\r
- TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]);\r
- if(te != null)\r
- {\r
- return te.Title;\r
- }\r
- }\r
- }\r
- }\r
-\r
- return _name; \r
- }\r
- set \r
- { \r
- _name = value; \r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the local of the item\r
- /// </summary>\r
- public string Local\r
- {\r
- get \r
- { \r
- if(_mergeLink.Length > 0)\r
- return "";\r
-\r
- if(_local.Length <= 0)\r
- {\r
- if((_tocMode == DataMode.Binary )&&(_associatedFile!=null))\r
- {\r
- if( _topicOffset >= 0)\r
- {\r
- TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]);\r
- if(te != null)\r
- {\r
- return te.Locale;\r
- }\r
- }\r
- }\r
- }\r
-\r
- return _local; \r
- }\r
- set { _local = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the chm file\r
- /// </summary>\r
- public string ChmFile\r
- {\r
- get \r
- { \r
- if(_associatedFile!=null)\r
- return _associatedFile.ChmFilePath;\r
-\r
- return _chmFile; \r
- }\r
- set { _chmFile = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets the url for the webbrowser for this file\r
- /// </summary>\r
- public string Url\r
- {\r
- get\r
- {\r
- string sL = Local;\r
-\r
- if( (sL.ToLower().IndexOf("http://") >= 0) ||\r
- (sL.ToLower().IndexOf("https://") >= 0) ||\r
- (sL.ToLower().IndexOf("mailto:") >= 0) ||\r
- (sL.ToLower().IndexOf("ftp://") >= 0) || \r
- (sL.ToLower().IndexOf("ms-its:") >= 0))\r
- return sL;\r
-\r
- return HtmlHelpSystem.UrlPrefix + ChmFile + "::/" + sL;\r
- }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the image index of the item\r
- /// </summary>\r
- /// <remarks>Set this to -1 for a default icon</remarks>\r
- public int ImageIndex\r
- {\r
- get \r
- { \r
- if( _imageIndex == -1)\r
- {\r
- int nFolderAdd = 0;\r
-\r
- if((_associatedFile != null) && (_associatedFile.ImageTypeFolder))\r
- {\r
- // get the value which should be added, to display folders instead of books\r
- if(HtmlHelpSystem.UseHH2TreePics) \r
- nFolderAdd = 8;\r
- else\r
- nFolderAdd = 4;\r
- }\r
- \r
-\r
- if( _children.Count > 0)\r
- return (HtmlHelpSystem.UseHH2TreePics ? (STD_FOLDER_HH2+nFolderAdd) : (STD_FOLDER_HH1+nFolderAdd));\r
-\r
- return (HtmlHelpSystem.UseHH2TreePics ? STD_FILE_HH2 : STD_FILE_HH1);\r
- }\r
- return _imageIndex; \r
- }\r
- set { _imageIndex = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets/Sets the children of this item.\r
- /// </summary>\r
- /// <remarks>Each entry in the ArrayList is of type TOCItem</remarks>\r
- public ArrayList Children\r
- {\r
- get { return _children; }\r
- set { _children = value; }\r
- }\r
-\r
- /// <summary>\r
- /// Gets the internal hashtable storing all params\r
- /// </summary>\r
- public Hashtable Params\r
- {\r
- get { return _otherParams; }\r
- }\r
- }\r
-}\r