Back to index

lightning-sunbird  0.9+nobinonly
nsImportService.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /* ***** BEGIN LICENSE BLOCK *****
00003  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00004  *
00005  * The contents of this file are subject to the Mozilla Public License Version
00006  * 1.1 (the "License"); you may not use this file except in compliance with
00007  * the License. You may obtain a copy of the License at
00008  * http://www.mozilla.org/MPL/
00009  *
00010  * Software distributed under the License is distributed on an "AS IS" basis,
00011  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00012  * for the specific language governing rights and limitations under the
00013  * License.
00014  *
00015  * The Original Code is mozilla.org code.
00016  *
00017  * The Initial Developer of the Original Code is
00018  * Netscape Communications Corporation.
00019  * Portions created by the Initial Developer are Copyright (C) 1998
00020  * the Initial Developer. All Rights Reserved.
00021  *
00022  * Contributor(s):
00023  *   Pierre Phaneuf <pp@ludusdesign.com>
00024  *
00025  * Alternatively, the contents of this file may be used under the terms of
00026  * either of the GNU General Public License Version 2 or later (the "GPL"),
00027  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00028  * in which case the provisions of the GPL or the LGPL are applicable instead
00029  * of those above. If you wish to allow use of your version of this file only
00030  * under the terms of either the GPL or the LGPL, and not to allow others to
00031  * use your version of this file under the terms of the MPL, indicate your
00032  * decision by deleting the provisions above and replace them with the notice
00033  * and other provisions required by the GPL or the LGPL. If you do not delete
00034  * the provisions above, a recipient may use your version of this file under
00035  * the terms of any one of the MPL, the GPL or the LGPL.
00036  *
00037  * ***** END LICENSE BLOCK ***** */
00038 
00039 #ifndef nsImportService_h__
00040 #define nsImportService_h__
00041 
00042 #include "nsICharsetConverterManager.h"
00043 
00044 #include "nsCRT.h"
00045 #include "nsString.h"
00046 #include "nsIComponentManager.h"
00047 #include "nsIServiceManager.h"
00048 #include "nsMemory.h"
00049 #include "nsIEnumerator.h"
00050 #include "nsIImportModule.h"
00051 #include "nsIImportService.h"
00052 #include "nsICategoryManager.h"
00053 
00054 class nsImportModuleList;
00055 
00056 class nsImportService : public nsIImportService
00057 {
00058 public:
00059 
00060        nsImportService();
00061        virtual ~nsImportService();
00062        
00063        NS_DECL_ISUPPORTS
00064 
00065        NS_DECL_NSIIMPORTSERVICE
00066 
00067 private:
00068        nsresult      LoadModuleInfo( const char *pClsId, const char *pSupports);
00069        nsresult      DoDiscover( void);
00070 
00071 private:
00072        nsImportModuleList * m_pModules;
00073        PRBool                             m_didDiscovery;      
00074        nsCString                          m_sysCharset;
00075        nsIUnicodeDecoder *         m_pDecoder;
00076        nsIUnicodeEncoder *         m_pEncoder;
00077 };
00078 
00079 class ImportModuleDesc {
00080 public:
00081        ImportModuleDesc() { m_pModule = nsnull;}
00082        ~ImportModuleDesc() { ReleaseModule();    }
00083        
00084        void   SetCID( const nsCID& cid) { m_cid = cid;}
00085        void   SetName( const PRUnichar *pName) { m_name = pName;}
00086        void   SetDescription( const PRUnichar *pDesc) { m_description = pDesc;}
00087        void   SetSupports( const char *pSupports) { m_supports = pSupports;}
00088        
00089        nsCID                GetCID( void) { return( m_cid);}
00090        const PRUnichar *GetName( void) { return( m_name.get());}
00091        const PRUnichar *GetDescription( void) { return( m_description.get());}
00092        const char *  GetSupports( void) { return( m_supports.get());}
00093        
00094        nsIImportModule *    GetModule( PRBool keepLoaded = PR_FALSE); // Adds ref
00095        void                        ReleaseModule( void);
00096        
00097        PRBool               SupportsThings( const char *pThings);
00098 
00099 private:
00100        nsCID                       m_cid;
00101        nsString                    m_name;
00102        nsString                    m_description;
00103        nsCString                   m_supports;
00104        nsIImportModule *    m_pModule;
00105 };
00106 
00107 class nsImportModuleList {
00108 public:
00109        nsImportModuleList() { m_pList = nsnull; m_alloc = 0; m_count = 0;}
00110        ~nsImportModuleList() { ClearList(); }
00111 
00112        void   AddModule( const nsCID& cid, const char *pSupports, const PRUnichar *pName, const PRUnichar *pDesc);
00113 
00114        void   ClearList( void);
00115        
00116        PRInt32       GetCount( void) { return( m_count);}
00117        
00118        ImportModuleDesc *   GetModuleDesc( PRInt32 idx) 
00119               { if ((idx < 0) || (idx >= m_count)) return( nsnull); else return( m_pList[idx]);}
00120        
00121 private:
00122        
00123 private:
00124        ImportModuleDesc **  m_pList;
00125        PRInt32                            m_alloc;
00126        PRInt32                            m_count;
00127 };
00128 
00129 #endif // nsImportService_h__