home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- //
- // Miscellaneous RDF utility methods
- //
-
- #include "URDFUtilities.h"
-
- #include "xp_mem.h"
- #include "ufilemgr.h" // for CFileMgr::GetURLFromFileSpec
- #include "uprefd.h" // for CPrefs::GetFolderSpec & globHistoryName
- #include "PascalString.h" // for CStr255
-
-
- Boolean URDFUtilities::sIsInited = false;
-
-
- //
- // StartupRDF
- //
- // Initialize RDF if it has not already been initialized. This method can be
- // called over and over again without bad side effects because it protects the init
- // code with a static variable.
- //
- void URDFUtilities::StartupRDF()
- {
- if (!sIsInited)
- {
- // Point RDF to user's "Navigator ─" preference folder and turn the FSSpec into
- // a URL
- FSSpec prefFolder = CPrefs::GetFolderSpec(CPrefs::MainFolder);
- char* url = CFileMgr::GetURLFromFileSpec(prefFolder);
- CStr255 urlStr(url);
- XP_FREE(url);
-
- // fill in RDF params structure with appropriate file paths
- CStr255 str;
- RDF_InitParamsStruct initParams;
- initParams.profileURL = (char*)urlStr;
- ::GetIndString(str, 300, bookmarkFile);
- initParams.bookmarksURL = (char*)(urlStr + "/" + str);
- ::GetIndString(str, 300, globHistoryName);
- initParams.globalHistoryURL = (char*)(urlStr + "/" + str);
-
- // url = NET_UnEscape(url);
- RDF_Init(&initParams);
- sIsInited = true;
- }
- }
-
-
- //
- // ShutdownRDF
- //
- // Opposite of above routine. Again, can be called multiple times w/out bad side
- // effects.
- //
- void URDFUtilities::ShutdownRDF()
- {
- if (sIsInited)
- {
- RDF_Shutdown();
- sIsInited = false;
- }
- }
-
- Uint32 URDFUtilities::GetContainerSize(HT_Resource container)
- {
- Uint32 result = 0;
- // trust but verify...
- if (HT_IsContainer(container))
- {
- HT_Cursor cursor = HT_NewCursor(container);
- if (cursor)
- {
- HT_Resource node = HT_GetNextItem(cursor);
- while (node != NULL)
- {
- ++result;
- if (HT_IsContainer(node) && HT_IsContainerOpen(node))
- result += GetContainerSize(node);
-
- node = HT_GetNextItem(cursor);
- }
- }
- }
- return result;
- }
-
-
- //
- // StHTEventMasking
- //
- // Change HT's event masking in the given pane for the lifetime of this class. This is
- // meant to be used as a stack-based class. The new notification mask is set in the contsructor
- // and is reset to the original mask in the destructor.
- //
-
- URDFUtilities::StHTEventMasking :: StHTEventMasking ( HT_Pane inPane, HT_NotificationMask inNewMask )
- : mPane(inPane)
- {
- HT_GetNotificationMask ( mPane, &mOldMask );
- HT_SetNotificationMask ( mPane, inNewMask );
- }
-
-
- URDFUtilities::StHTEventMasking :: ~StHTEventMasking ( )
- {
- HT_SetNotificationMask ( mPane, mOldMask );
- }
-