filespec.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:9k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: filespec.h,v 1.7.32.3 2004/07/09 01:44:45 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #ifndef FILESPEC_H
  50. #define FILESPEC_H
  51. // include the platform-specific private data types
  52. #if defined(_MAC_UNIX)
  53. #include "platform/mac/filespecmac_carbon.h"
  54. #elif defined(_MACINTOSH)
  55. #ifdef _CARBON
  56. #include "platform/mac/filespecmac_carbon.h"
  57. #else
  58. #include "platform/mac/filespecmac.h"
  59. #endif
  60. #elif defined(_WINDOWS) || defined(_SYMBIAN)
  61. #include "platform/win/filespecwin.h"
  62. #elif defined _UNIX
  63. #include "platform/unix/filespecunix.h"
  64. #elif defined(_OPENWAVE)
  65. #include "platform/openwave/filespecopwave.h"
  66. #else
  67. #error implement for this platform
  68. #endif
  69. #include "hxstring.h"
  70. class CHXDirSpecifier; // forward declaration
  71. class CHXFileSpecifier // file specifier
  72. {
  73. public:
  74. // constructors
  75. CHXFileSpecifier();
  76. CHXFileSpecifier(const char* psz); // path in C-string
  77. CHXFileSpecifier(const CHXString &str);     // to fix a compile-time ambiguity coercing CHXStrings
  78. CHXFileSpecifier(const CHXFileSpecifier &other);
  79. ~CHXFileSpecifier();
  80. CHXFileSpecifier &operator=(const CHXFileSpecifier &other);
  81. CHXFileSpecifier &operator=(const char *other);
  82. CHXFileSpecifier &operator=(const CHXString& str);
  83. BOOL operator==(const CHXFileSpecifier &other);
  84. BOOL operator!=(const CHXFileSpecifier &other);
  85. void Unset();
  86. // accessors
  87. BOOL IsSet() const; // object has been set to a file (which may or may not exist)
  88. // moving up or down the tree
  89. CHXDirSpecifier GetParentDirectory() const;
  90. CHXDirSpecifier GetVolume() const; // get a specifier for the disk
  91. // display & paths
  92. CHXString GetName() const;   // get the file's name and extension (not path) like 'Foo.txt'
  93. CHXString GetTitle() const;  // gets the file's name (w/o extension)
  94. CHXString GetPathName() const;
  95. CHXString GetURL() const;
  96. CHXString GetExtension() const; // returns whatever is after the last dot, not including the dot
  97. // persistent string can be saved to preferences or
  98. // handed to another library
  99. CHXString GetPersistentString() const;
  100. HX_RESULT SetFromPersistentString(const char *pBuffer);
  101. HX_RESULT SetFromURL(const char *pBuffer);
  102. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  103. CHXFileSpecifier(const FSSpec &file); // Mac-specific
  104. CHXFileSpecifier(AliasHandle alias);
  105. CHXString GetRelativePersistentString(const CHXFileSpecifier& fromFileSpec) const;
  106. operator FSSpec() const;
  107. operator FSSpec*() const;
  108. #if defined(_CARBON) || defined(_MAC_UNIX)
  109. CHXFileSpecifier(const FSRef &ref);
  110. operator FSRef() const;
  111. operator FSRef*() const;
  112. CHXString GetPOSIXPath() const;
  113. HX_RESULT SetFromPOSIXPath(const char *pPosixPath);
  114. CHXString GetHFSPath() const;
  115. HX_RESULT SetFromHFSPath(const char *pHFSPath);
  116. HFSUniStr255 GetNameHFSUniStr255() const;
  117. FSVolumeRefNum GetVRefNum() const;
  118. friend class CHXDirSpecifier;
  119. #endif
  120. #endif
  121. private:
  122. // private data is platform-specific
  123. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  124. #if defined(_CARBON) || defined(_MAC_UNIX)
  125. CHXMacInternalSpec m_MacInternalSpec;
  126. mutable FSSpec* m_pTempSpec; // for (FSSpec*) only
  127. mutable FSRef* m_pTempRef; // for (FSRef*) only
  128. #else
  129. CAliasHandler m_macentity;
  130. mutable FSSpec* m_pTempSpec; // for (FSSpec*) only
  131. mutable void* m_pTempRef; 
  132. #endif
  133. #elif defined( _WINDOWS ) || defined( _UNIX ) || defined(_SYMBIAN)
  134. CHXPathParser m_parser;
  135. #endif
  136. };
  137. class CHXDirSpecifier // directory specifier
  138. {
  139. public:
  140. // constructors
  141. CHXDirSpecifier();
  142. CHXDirSpecifier(const char* psz); // path in C-string
  143. CHXDirSpecifier(const CHXString& str);     // to fix a compile-time ambiguity coercing CHXStrings
  144. CHXDirSpecifier(const CHXDirSpecifier &other);
  145. ~CHXDirSpecifier();
  146. CHXDirSpecifier &operator=(const CHXDirSpecifier& other);
  147. CHXDirSpecifier &operator=(const char *other);
  148. CHXDirSpecifier &operator=(const CHXString& str);
  149. BOOL operator==(const CHXDirSpecifier &other);
  150. BOOL operator!=(const CHXDirSpecifier &other);
  151. void Unset();
  152. // accessors
  153. BOOL IsVolume() const; // specifies a disk (or root directory)
  154. BOOL  IsSet() const; // object has been set to a directory (which may or may not exist)
  155. CHXString GetName() const;   // get the directory name
  156. // moving up or down the tree
  157. CHXDirSpecifier GetParentDirectory() const;
  158. CHXDirSpecifier GetVolume() const; // get a specifier for the disk
  159. // get specifiers for file or directory inside this one
  160. CHXFileSpecifier SpecifyChildFile(const char *child) const;
  161. CHXDirSpecifier SpecifyChildDirectory(const char *child) const;
  162. // display & paths
  163. CHXString GetPathName() const;
  164. CHXString GetURL() const;
  165. HX_RESULT SetFromURL(const char *pBuffer);
  166. // persistent string can be saved to preferences or
  167. // handed to another library
  168. CHXString GetPersistentString() const;
  169. HX_RESULT SetFromPersistentString(const char *pBuffer);
  170. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  171. // Mac-specific
  172. CHXDirSpecifier(const FSSpec &folder); // Mac-specific
  173. CHXDirSpecifier(AliasHandle dirAlias); // Mac-specific
  174. CHXFileSpecifier SpecifyChildFileStr255(ConstStr255Param child) const;
  175. CHXDirSpecifier SpecifyChildDirectoryStr255(ConstStr255Param child) const;
  176. long GetDirID() const;
  177. operator FSSpec() const; // note the parID is the folder's
  178. operator FSSpec*() const; //   parent's dirID, not the folder's dirID
  179. #if defined(_CARBON) || defined(_MAC_UNIX)
  180. CHXFileSpecifier SpecifyChildFileHFSUniStr255(HFSUniStr255 hfsUni) const;
  181. CHXDirSpecifier SpecifyChildDirectoryHFSUniStr255(HFSUniStr255 hfsUni) const;
  182. HFSUniStr255 GetNameHFSUniStr255() const;
  183. FSVolumeRefNum GetVRefNum() const;
  184. CHXDirSpecifier(const FSRef &ref); // Mac-specific
  185. operator FSRef() const;
  186. operator FSRef*() const;
  187. CHXString GetPOSIXPath() const;
  188. HX_RESULT SetFromPOSIXPath(const char *pPosixPath);
  189. CHXString GetHFSPath() const;
  190. HX_RESULT SetFromHFSPath(const char *pHFSPath);
  191. #endif
  192. #endif
  193. private:
  194. // private data is platform-specific
  195. #if defined(_MACINTOSH) || defined(_MAC_UNIX)
  196. #if defined(_CARBON) || defined(_MAC_UNIX)
  197. CHXMacInternalSpec m_MacInternalSpec;
  198. mutable FSSpec* m_pTempSpec; // for (FSSpec*) only
  199. mutable FSRef* m_pTempRef; // for (FSRef*) only
  200. #else
  201. CAliasHandler m_macentity;
  202. mutable FSSpec* m_pTempSpec; // for (FSSpec*) only
  203. mutable void* m_pTempRef; 
  204. #endif
  205. #ifndef USE_FSREFS
  206.         static OSErr FSpGetDirectoryID(const FSSpec *spec, long *theDirID, Boolean *isDirectory);
  207. #endif
  208. #elif defined( _WINDOWS ) || defined( _UNIX ) || defined(_SYMBIAN)
  209. CHXPathParser m_parser;
  210. #endif
  211. };
  212. #endif // FILESPEC_H