Bookmarks.h
上传用户:hmc_gdtv
上传日期:2013-08-04
资源大小:798k
文件大小:4k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice immediately at the beginning of the file, without modification,
  10.  *    this list of conditions, and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Absolutely no warranty of function or purpose is made by the author
  15.  *    Mike Matsnev.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  * 
  28.  * $Id: Bookmarks.h,v 1.23.2.2 2003/12/17 12:20:39 mike Exp $
  29.  * 
  30.  */
  31. #if !defined(AFX_BOOKMARKS_H__BEA3E1C9_F320_44CA_A735_A38A811FD7CB__INCLUDED_)
  32. #define AFX_BOOKMARKS_H__BEA3E1C9_F320_44CA_A735_A38A811FD7CB__INCLUDED_
  33. #if _MSC_VER > 1000
  34. #pragma once
  35. #endif // _MSC_VER > 1000
  36. #include "FilePos.h"
  37. class TextFile;
  38. class Bookmarks {
  39. public:
  40.   enum {
  41.     BMK=1,
  42.     BMNEW=2,
  43.     BMDEL=4,
  44.     BMCHG=8
  45.   };
  46.   enum {
  47.     SPREVCH=0,
  48.     SNEXTCH=1,
  49.     SPREVANY=2,
  50.     SNEXTANY=3,
  51.     SNEXTICH=4,
  52.     SPREVBMK=5,
  53.   };
  54. private:
  55.   struct BE {
  56.     CString   text;
  57.     FilePos   ref;
  58.     FilePos   text_ref;
  59.     DWORD     flags;
  60.     int       level;
  61.     CString   *tmp;
  62.   };
  63. public:
  64.   Bookmarks(const CString& filename);
  65.   ~Bookmarks();
  66.   // access
  67.   int GetSize() { return m_bmk.GetSize(); }
  68.   int Level(int idx) { return m_bmk[idx].level; }
  69.   int Flags(int idx) { return m_bmk[idx].flags; }
  70.   FilePos Ref(int idx) { return m_bmk[idx].ref; }
  71.   CString Text(int idx,TextFile *parser);
  72.   // modification
  73.   int Add(const CString& text,FilePos pos) { return AddImp(0,0,0,&text,pos,BMK,-1); }
  74.   int AddTocEnt(int para_start,int para_count,int docid,FilePos pos,int level) {
  75.     return AddImp(para_start,para_count,docid,NULL,pos,0,level);
  76.   }
  77.   void Remove(int index);
  78.   void Change(int index,const CString& text);
  79.   int Commit(int cidx);
  80.   void Rollback();
  81.   int UserBookmarks();
  82.   int Encoding() { return m_encoding; }
  83.   int Format() { return m_format; }
  84.   FilePos StartPos() { return m_startpos; }
  85.   void SetFormat(int fmt) { if (m_format!=fmt) m_changed=true; m_format=fmt; }
  86.   void SetEncoding(int enc) { if (m_encoding!=enc) m_changed=true; m_encoding=enc; }
  87.   void SetStartPos(FilePos p) { if (p!=m_startpos) m_changed=true; m_startpos=p; }
  88.   int BFind(FilePos p,int type);
  89.   bool BookmarksInRange(FilePos start,FilePos end);
  90.   bool BookmarkFind(FilePos& start,FilePos end);
  91.   void SaveToRegistry();
  92.   void LoadFromRegistry();
  93.   static void CleanupRegistry(int max_count);
  94.   bool SaveInfo();
  95.   static CString  find_last_file();
  96.   static void   get_recent_files(CStringArray& fl,int num,FILETIME& toptime);
  97.   void NormalizeLevels();
  98.   int NumTopMarks() { return m_topbmk; }
  99.   int NumBookmarks() { return m_ubmk; }
  100.   // export/import
  101.   static bool   ExportAllBookmarks(const CString& destfile);
  102. private:
  103.   CArray<BE,BE&>  m_bmk;
  104.   int   m_format;
  105.   int   m_encoding;
  106.   FilePos   m_startpos;
  107.   CString   m_filename;
  108.   CString   m_shortname;
  109.   bool   m_changed;
  110.   int   m_topbmk;
  111.   int   m_ubmk;
  112.   void   Check(int index) { ASSERT(index>=0 && index<m_bmk.GetSize()); }
  113.   int   AddImp( int para_start,int para_count,int docid,
  114.   const CString *text,
  115.   FilePos pos,DWORD flags,int level);
  116. };
  117. #endif // !defined(AFX_BOOKMARKS_H__BEA3E1C9_F320_44CA_A735_A38A811FD7CB__INCLUDED_)