mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-14 15:37:55 +00:00
230 lines
7.2 KiB
C
230 lines
7.2 KiB
C
|
/* -*- 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.
|
|||
|
*/
|
|||
|
|
|||
|
#pragma once
|
|||
|
|
|||
|
#include <Files.h>
|
|||
|
#include "PascalString.h"
|
|||
|
#include "StBlockingDialogHandler.h"
|
|||
|
|
|||
|
const MessageT cmd_SelectProfile = 4000;
|
|||
|
const MessageT cmd_NewProfile = 4001;
|
|||
|
const MessageT cmd_DeleteProfile = 4002;
|
|||
|
const MessageT cmd_RenameProfile = 4003;
|
|||
|
const MessageT cmd_QuitProfile = 4004;
|
|||
|
const MessageT cmd_EditDialSettings = 4010;
|
|||
|
const MessageT cmd_LocationPopup = 4011;
|
|||
|
|
|||
|
enum ProfileErr {
|
|||
|
eUserCancelled = -2,
|
|||
|
eUnknownError = -1,
|
|||
|
eNeedUpgrade = 0,
|
|||
|
eOK = 1,
|
|||
|
eRunAccountSetup = 2,
|
|||
|
eRunMUC = 3,
|
|||
|
eSkipMUC = 4
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* class CUserProfileDB
|
|||
|
*
|
|||
|
* Wrapper for multi-user profile database file.
|
|||
|
*
|
|||
|
*****************************************************************************/
|
|||
|
class CUserProfileDB
|
|||
|
{
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
CUserProfileDB(FSSpec& spec, Boolean createIt = false);
|
|||
|
|
|||
|
short CountProfiles();
|
|||
|
short GetNextProfileID();
|
|||
|
|
|||
|
short GetProfileIDByUsername(const CString& userName);
|
|||
|
short GetProfileIDByEmail(const CString& emailAddr);
|
|||
|
|
|||
|
short GetLastProfileID();
|
|||
|
void SetLastProfileID(short newUserID);
|
|||
|
|
|||
|
void AddNewProfile(short id, const CStr31& profileName,
|
|||
|
const FSSpec& profileFolder);
|
|||
|
|
|||
|
Boolean GetProfileName(short id, CStr31& name);
|
|||
|
void SetProfileName(short id, const CStr31& name);
|
|||
|
|
|||
|
void SetProfileData(short id);
|
|||
|
|
|||
|
Boolean GetProfileAlias(short id, FSSpec& profileFolder, Boolean allowUserInteraction = true);
|
|||
|
void DeleteProfile(short selectedID);
|
|||
|
|
|||
|
LFile * GetFile() {return &fFile;}
|
|||
|
|
|||
|
|
|||
|
private:
|
|||
|
LFile fFile;
|
|||
|
Handle GetDBResource(ResType theType, short theID);
|
|||
|
|
|||
|
enum { kFirstProfileID = 128 };
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* class CDialogWizardHandler
|
|||
|
*
|
|||
|
* A generic dialog wizard handler.
|
|||
|
*
|
|||
|
*****************************************************************************/
|
|||
|
class CDialogWizardHandler
|
|||
|
{
|
|||
|
public:
|
|||
|
CDialogWizardHandler( ResIDT dlogID, LArray& paneList );
|
|||
|
void AddListener(LListener* st);
|
|||
|
|
|||
|
Boolean DoWizard();
|
|||
|
LWindow* GetDialog();
|
|||
|
|
|||
|
void GetEditText( PaneIDT paneID, CString& text );
|
|||
|
void SetEditText( PaneIDT paneID, const CString& text );
|
|||
|
|
|||
|
void SetCheckboxValue(PaneIDT paneID, const Boolean value);
|
|||
|
Boolean GetCheckboxValue(PaneIDT paneID);
|
|||
|
|
|||
|
PaneIDT CurrentPane();
|
|||
|
ArrayIndexT CurrentPaneNumber();
|
|||
|
ArrayIndexT TotalPanes();
|
|||
|
void EnableNextButton();
|
|||
|
void DisableNextButton();
|
|||
|
|
|||
|
protected:
|
|||
|
Boolean ShowPane( ArrayIndexT paneNum, LWindow* window );
|
|||
|
|
|||
|
StBlockingDialogHandler fDialog;
|
|||
|
LArray fPaneList;
|
|||
|
ArrayIndexT fCurrentPane;
|
|||
|
LListener* fListener;
|
|||
|
};
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* class CUserProfile
|
|||
|
*
|
|||
|
* Launches wizards and file operations for multi-user profile support.
|
|||
|
*
|
|||
|
*****************************************************************************/
|
|||
|
class CUserProfile
|
|||
|
{
|
|||
|
|
|||
|
public:
|
|||
|
static void InitUserProfiles();
|
|||
|
|
|||
|
// Opens the User Profiles registry and puts up a profile-selection
|
|||
|
// dialog if there is more than one profile (or showDialog is true).
|
|||
|
// Returns kNeedUpgrade if User Profiles does not exist (i.e. we need
|
|||
|
// to call HandleUpgrade); else returns path of selected profile.
|
|||
|
|
|||
|
static ProfileErr GetUserProfile( const FSSpec& usersFolder,
|
|||
|
FSSpec& profileFolder, Boolean showDialog, short fileType );
|
|||
|
|
|||
|
// Creates a new network profile in the user's folder
|
|||
|
static ProfileErr CreateNetProfile( FSSpec usersFolder, FSSpec& profileFolder );
|
|||
|
|
|||
|
private:
|
|||
|
static ProfileErr DoNetProfileDialog();
|
|||
|
static void DoNetExtendedProfileDialog(LCommander * super);
|
|||
|
|
|||
|
public:
|
|||
|
// Launches upgrade wizard for users who have not run 4.0 before.
|
|||
|
// Creates an initial profile folder and User Profiles file.
|
|||
|
// If oldNetscapeF is non-null, it points to the user's 3.0
|
|||
|
// Netscape <20> folder and the profile "folder" is an alias to it.
|
|||
|
// Returns error code if user cancelled; else returns profile path.
|
|||
|
|
|||
|
static ProfileErr HandleUpgrade( FSSpec& profileFolder,
|
|||
|
const FSSpec* oldNetscapeF = nil );
|
|||
|
|
|||
|
// Creates a unique profile folder name if necessary
|
|||
|
static void GetUniqueFolderName(FSSpec& folder);
|
|||
|
|
|||
|
static short sCurrentProfileID;
|
|||
|
|
|||
|
enum { kRenamePrompt = 1,
|
|||
|
kDeletePrompt,
|
|||
|
kReadError,
|
|||
|
kCreateError,
|
|||
|
kDefaultName,
|
|||
|
kBadAliasError,
|
|||
|
kQuitLabel,
|
|||
|
kDoneLabel,
|
|||
|
kNextLabel,
|
|||
|
kConfigFileError,
|
|||
|
kInvalidConfigFile,
|
|||
|
kRunASLabel,
|
|||
|
kCreateProfileLabel,
|
|||
|
kConfigurationFileName };
|
|||
|
enum { kProfileStrings = 900 };
|
|||
|
|
|||
|
private:
|
|||
|
static ProfileErr HandleProfileDialog( FSSpec& profileSpec, CUserProfileDB& profileDB,
|
|||
|
FSSpec& profileFolder, short& newUserID, short lastUserID,
|
|||
|
Boolean wantsProfileManager );
|
|||
|
static void PopulateListBox( ListHandle& listHand, CUserProfileDB& profileDB,
|
|||
|
short defaultID );
|
|||
|
|
|||
|
enum UpgradeEnum { eNoUpgrade, // an additional profile is being created
|
|||
|
eExistingPrefs, // first profile, existing Netscape Prefs file
|
|||
|
eNewInstall }; // first profile, fresh install
|
|||
|
|
|||
|
static ProfileErr NewUserProfile( const FSSpec& profileSpec, FSSpec& profileFolder,
|
|||
|
CStr31& profileName, UpgradeEnum upgrading = eNoUpgrade,
|
|||
|
const FSSpec* oldNetscapeF = nil );
|
|||
|
static ProfileErr NewProfileWizard( UpgradeEnum upgrading, CStr31& profileName,
|
|||
|
const FSSpec& profileFolder, FSSpec& newProfileFolder,
|
|||
|
Boolean& userChoseFolder );
|
|||
|
|
|||
|
static void RenameProfile( short selectedID, CUserProfileDB& profileDB,
|
|||
|
Cell& cell, ListHandle& listHand );
|
|||
|
static void DeleteProfile( short selectedID, CUserProfileDB& profileDB,
|
|||
|
ListHandle& listHand );
|
|||
|
|
|||
|
static void ReflectToPreferences(const CStr31& profileName,
|
|||
|
const FSSpec& profileFolder, short numProfiles = 1);
|
|||
|
static void CreateDefaultProfileFolder(const FSSpec& profileFolder);
|
|||
|
|
|||
|
static OSErr MakeDesktopIcons(const CStr31& profileName,
|
|||
|
const Boolean wantsNavigator, const Boolean wantsInbox);
|
|||
|
|
|||
|
enum { kInvalidProfileID = -1 };
|
|||
|
|
|||
|
protected:
|
|||
|
// <20><>inPrefsFolder is the FSSpec of the users Preferences
|
|||
|
// folder<65> we read a file directly below that
|
|||
|
static long SendMessageToPlugin( long inMessage, void* pb = NULL );
|
|||
|
|
|||
|
static void* LoadConfigPlugin(); // really returns PE_PluginFuncType
|
|||
|
static OSErr CloseConfigPlugin();
|
|||
|
|
|||
|
static Boolean DeleteMagicProfile( FSSpec& inSpec );
|
|||
|
|
|||
|
static CFragConnectionID mConfigPluginID;
|
|||
|
static Boolean mHasConfigPlugin;
|
|||
|
static Boolean mPluginLoaded;
|
|||
|
};
|
|||
|
|