gecko-dev/cmd/macfe/central/uprefd.h

556 строки
20 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 <Printing.h>
#include <LFile.h>
#include <LListener.h>
#include "umimemap.h"
#include "prtypes.h"
// Constraints
#define SECONDS_PER_DAY 86400L
#define CONNECTIONS_MIN 1L
#define CONNECTIONS_MAX 4L
#define BUFFER_SCALE 1024
#define BUFFER_MIN 1L * BUFFER_SCALE
#define BUFFER_MAX 32L * BUFFER_SCALE
#define DISK_CACHE_MIN 0L
#define DISK_CACHE_SCALE 1024L
#define FONT_SIZE_MIN 6L
#define FONT_SIZE_MAX 128L
#define EXPIRE_MIN 1L
#define EXPIRE_MAX 365L
#define NEWS_ARTICLES_MIN 10L
#define NEWS_ARTICLES_MAX 3500L
#define NO_SIGNATURE_FILE 0L
/*****************************************************************************
* class CFolderSpec
* Contains specs for the folder and a prototype spec for the file to be
* created inside this folder
* All the setting of the specs should be done through access routines.\
* Has the smarts to default to the proper folder if setting fails.
*****************************************************************************/
struct CFolderSpec
{
public:
CFolderSpec();
// ¥ sets the specs for this folder
OSErr SetFolderSpec(FSSpec newSpec, int folderID);
// ¥ gets the specs of the folder
FSSpec GetFolderSpec() {return fFolder;}
// ¥ gets a prototype for the file inside this folder
FSSpec GetFilePrototype() {return fFilePrototype;}
Boolean Exists();
private:
FSSpec fFolder; // Specs of the folder (vol, parent, + folder name)
FSSpec fFilePrototype; // Prototype specs for the file to be created inside this folder
};
// ¥ CCharSet is a struct for saving the font and size information associated
// with a character set encoding
struct CCharSet
{
public:
CStr31 fEncodingName;
CStr31 fPropFont;
CStr31 fFixedFont;
unsigned short fPropFontSize;
unsigned short fFixedFontSize;
unsigned short fCSID;
unsigned short fFallbackFontScriptID;
unsigned short fTxtrButtonResID;
unsigned short fTxtrTextFieldResID;
unsigned short fPropFontNum;
unsigned short fFixedFontNum;
};
typedef struct CChrarSet CChrarSet;
struct CCharSetInRsrc
{
public:
CStr31 fEncodingName;
CStr31 fPropFont;
CStr31 fFixedFont;
unsigned short fPropFontSize;
unsigned short fFixedFontSize;
unsigned short fCSID;
unsigned short fFallbackFontScriptID;
unsigned short fTxtrButtonResID;
unsigned short fTxtrTextFieldResID;
};
typedef struct CChrarSetInRsrc CChrarSetInRsrc;
/*********************************************************************************
* DOGBERT XP PREFERENCES / MULTI-USER PROFILES
*
* New preference file format: XP text file parsed by JavaScript via libpref
* (includes all user strings, bools, ints, and colors).
* Some prefs (see below) are still written in old resource format.
* Both old and new prefs are read & written to the existing Netscape Prefs file.
*
* Primary changes to this file:
* - added GetUserProfile() and InitPrefsFolder() to prompt user for desired
* profile (if necessary) and use that to point to base Preferences folder.
* - changed order of PrefEnum entries and added XP prefName strings.
* - ReadPreference, if it detects new format, only needs to call
* PostProcessPrefChange for each pref to propagate the new value.
* Calls to back-end will GO AWAY as modules fetch their own pref values.
* - ReadPreference otherwise reads old-format file.
* - WritePreference always writes new format.
* - CPrefs Get/Setters use libpref calls.
* - removed CPrefs storage of strings, bools, ints, and colors.
* - file/folder aliases accessed as libpref binary types but still stored
* in CPrefs via sFileIDs.
*
* Some prefs are not yet supported in XP format.
* - mime types
* - font encodings
* - window/pane positions
* - protocol handlers, etc.
* I have the first 3 partly prototyped. We at least need to support the first
* two in XP format for use by Admin Kit.
*********************************************************************************/
/*********************************************************************************
* class CPrefs
* Static class that does all preferences related tasks
* - reading/writing from a file
* - initialization
* - prefs variable access
*********************************************************************************/
#define PREF_REVISION_NUMBER 11
class CPrefs {
public:
enum { msg_PrefsChanged = 'PrCh' };
enum PrefEnum {
/*****************************************************************************
* The law of enumeration
* - Each preference kind must be contiguous
* This is so that we can use offsets to return the right value in GetBoolean/GetString...
* - Every preference whose enum is defined must have its resource locations defined
* - NEW: The entries below MUST be in the same order as the PrefLoc struct -
*****************************************************************************/
// Folders/Files
DownloadFolder, // Where do we store downloads
NetscapeFolder, // Where the application is
MainFolder, // Current user's preferences folder (Netscape Ä or Users:)
UsersFolder, // Netscape Users folder (contains User Profiles)
DiskCacheFolder, // Disk cache files (inside Mozilla Ä)
SignatureFile, // users signature file
GIFBackdropFile, // file to use as the backdrop
MailFolder, // Mail folder
NewsFolder, // News folder
SecurityFolder, // Security folder
MailCCFile, // FCC for mail
NewsCCFile, // Fcc for news
HTMLEditor, // application to use to edit raw HTML (used in EDITOR)
ImageEditor, // application to use to edit images (used in EDITOR)
RequiredGutsFolder, // folder containing the required items for
SARCacheFolder, // Constellation Location-Independent Cache Directory TJ & ROB
NetHelpFolder, // Folder for NetHelp documents EA
// Strings
HomePage, // Home page. strlen of 0 means do not load anything
NewsHost, // News host
FTPProxy, // Proxies
GopherProxy,
HTTPProxy,
NewsProxy,
WAISProxy,
FTPProxyPort,
GopherProxyPort,
HTTPProxyPort,
NewsProxyPort,
WAISProxyPort,
NoProxies,
UserName,
UserEmail,
SMTPHost,
SOCKSHost,
SOCKSPort,
Organization,
SSLProxy,
SSLProxyPort,
PopHost,
AcceptLanguage, // string for HTTP AcceptLange header
DefaultMailCC,
DefaultNewsCC,
ReplyTo,
PopID,
AutoProxyURL, // URL for autoconfiguring proxy
MailPassword, // Mail password, encrypted
Ciphers, // ciphers that we know about
EditorAuthor, // Who should the author be for new editor documents (used in EDITOR)
EditorNewDocTemplateLocation, // When you create a new document from a template, where is the template (used in EDITOR)
EditorBackgroundImage, // what is the url for the background image for new editor documents (used in EDITOR)
PublishLocation, // location for one button publish (used in EDITOR)
PublishBrowseLocation, // location to test browse documents published with one button publish (used in EDITOR)
PublishHistory0,
PublishHistory1,
PublishHistory2,
PublishHistory3,
PublishHistory4,
PublishHistory5,
PublishHistory6,
PublishHistory7,
PublishHistory8,
PublishHistory9,
DefaultPersonalCertificate,
// Booleans
DelayImages, // Auto load of images
AnchorUnderline, // Underline of anchors
ShowAllNews, // Show all news articles. NETLIB
UseFancyFTP, // Fancy FTP. NETLIB
UseFancyNews, // Fancy NNTP. NETLIB
ShowToolbar, // Toolbar visible in main window?
ShowStatus, // Status visible in main window
ShowURL, // URL visible in main window
LoadHomePage, // Should we load home page for new
ExpireNever, // Do Links expire?
DisplayWhileLoading,
CustomLinkColors, // do we want custom colors for links
ShowDirectory,
AgreedToLicense, // has the user agreed to the license
EnteringSecure,
LeavingSecure,
ViewingMixed,
SubmittingInsecure,
ShowSecurity,
CustomVisitedColors, // custom unfollowed link colors?
CustomTextColors, // custom text colors?
UseDocumentColors, // use the document or user colors
AutoDetectEncoding, // auto detect the document encodings
UseSigFile, // should we use the signature file
StrictlyMIME, // should we always be MIME/quoted printable
UseUtilityBackground, // should we use utility background instead of stupid gray
MailUseFixedWidthFont, // Should mail messages be displayed with fixed width fonts?
UseMailFCC, // Should we Fcc for mail?
UseNewsFCC, // Should we Fcc for news?
LimitMessageSize, // Should we limit message size?
LeaveMailOnServer, // Leave mail on server?
MailCCSelf, // CC self on mail
NewsCCSelf, // CC self on news
BiffOn, // Check for mail
UseMozPassword, // Should we be using the password for Netscape
ThreadMail, // Thread mail?
ThreadNews, // Thread news?
UseInlineViewSource, // Should we use Lou's view source window?
AutoQuoteOnReply,
RememberMailPassword, // Remember mail password?
DefaultMailDelivery,
EnableJavascript, // Whether or not we allow JavaScript to execute
ShowToolTips,
UseInternetConfig,
EnableJava, // Whether or not we allow Java to execute
AcceptCookies,
UseEmailAsPassword,
SubmitFormsByEmail,
AllowSSLDiskCaching,
EnableSSLv2,
EnableSSLv3,
EnableActiveScrolling, // Dynamically update during thumb tracking
#ifdef FORTEZZA
FortezzaTimeoutOn, // Should fortezza time out
#endif
#ifdef EDITOR
EditorUseCustomColors, // Should new editor documents be set up to use custom colors (used in EDITOR)
EditorUseBackgroundImage, // Should new editor documents be set up to use a background image (used in EDITOR)
PublishMaintainLinks, // Maintain links when publishing a document (used in EDITOR)
PublishKeepImages, // Keep images with document when publishing it (used in EDITOR)
ShowCopyright, // Should we should the Copyright notice next time we "steal" something off the web (used in EDITOR)
ShowFileEditToolbar, // editor window toolbar
ShowCharacterToolbar, // editor window toolbar
ShowParagraphToolbar, // editor window toolbar
#endif // EDITOR
// Longs
DiskCacheSize, // Size of disk cache
FileSortMethod, // Method of sorting files. NETLIB
ToolbarStyle, // Toolbar display style
DaysTilExpire, // # days before links expire
Connections, // number of simultaneous connections to server
BufferSize, // size in K of network socket buffers
PrintFlags, // printing prefs
NewsArticlesMax, // maximum number of news articles to show
CheckDocuments, // when to check the network for document
DefaultCharSetID, // default character set ID
DefaultFontEncoding,
BackgroundColors, // background color mode
LicenseVersion, // License version #
MessageFontStyle, // Equivalent to enum MSG_FONT in msgcom.h
MessageFontSize, // Equivalent to enum MSG_CITATION_SIZE in msgcom.h
MaxMessageSize, // Maximum message size for fetching
TopLeftHeader, // Top Left header for printing
TopMidHeader, // Top Mid header for printing
TopRightHeader, // Top Right header for printing
BottomLeftFooter, // Bottom Left footer for printing
BottomMidFooter, // Bottom Mid footer for printing
BottomRightFooter, // Bottom Right footer for printing
PrintBackground,
ProxyConfig, // Status of proxy configuration enum NET_ProxyStyle
StartupAsWhat, // Mail/News/Browser/Visible
StartupBitfield, // What do we want to start up as if visible is set. Contains a bit set for every window we want. See BROWSER_WIN_ID in resgui.h
BiffTimeout, // Check mail how often
AskMozPassword, // Should we ask for the password (tri-value)
AskMozPassFrequency, // The frequency
SortMailBy, // How do we sort mail. See SORT_BY defines in resgui.h
SortNewsBy, // How do we sort news
NewsPaneConfig, // News window pane configuration
MailPaneConfig, // Mail window pane configuration
MailHeaderDisplay,
NewsHeaderDisplay,
AutoSaveTimeDelay,
#ifdef FORTEZZA
FortezzaTimeout, // When fortezza should time out
#endif
// Colors
Black,
White,
Blue,
Magenta,
WindowBkgnd,
Anchor,
Visited,
TextFore,
TextBkgnd,
EditorText, // used to create new documents(used in EDITOR)
EditorLink, // used to create new documents(used in EDITOR)
EditorActiveLink, // used to create new documents (used in EDITOR)
EditorFollowedLink, // used to create new documents (used in EDITOR)
EditorBackground, // used to create new documents (used in EDITOR)
Citation,
// Print record
PrintRecord,
// Termination
LastPref
};
#define FIRSTPREF DownloadFolder
#define FIRSTCOLOR Black
#define FIRSTFOLDER DownloadFolder
#define FIRSTLONG DiskCacheSize
#define FIRSTBOOLEAN DelayImages
#define FIRSTSTRING HomePage
#define FIRSTFILESPEC DownloadFolder
// ¥¥ Initialization, Reading Writing
static void Initialize();
enum PrefErr { eAbort = -1,
eNeedUpgrade,
eOK,
eRunAccountSetup // ¥Êthis is totally scwewy
};
static PrefErr DoRead(LFile * file, short fileType);
static void DoWrite();
static void SubscribeToPrefChanges( LListener *listener );
static void UnsubscribeToPrefChanges( LListener *listener);
private:
static void ReadAllPreferences();
static void ReadPreference(short index);
static void InitializeUnsavedPref(short index);
static void WriteAllPreferences();
static void WritePreference(short index);
static PrefErr InitPrefsFolder(short fileType);
static Boolean FindRequiredGutsFolder(Boolean inLaunchWithPrefs);
static void OpenAnimationFile(FSSpec&, FSSpec&);
static void RegisterPrefCallbacks();
static int FSSpecPrefCallback(const char *prefString, void *enumValue);
static int ColorPrefCallback(const char *prefString, void *);
// ¥¥ÊUtility routines
public:
// Put pref res file on top of resource chain. Does not open it
static Boolean UsePreferencesResFile();
// Put application res file on top
static Boolean UseApplicationResFile();
// ¥¥ Access
public:
static Boolean GetBoolean(PrefEnum id);
static Int32 GetLong(PrefEnum id);
static CStr255 GetString(PrefEnum id);
static char* GetCharPtr( PrefEnum id );
static const RGBColor& GetColor( PrefEnum id ); // --ML de-inlined
static THPrint GetPrintRecord();
static FSSpec GetFolderSpec( PrefEnum id );
static FSSpec GetFilePrototype(PrefEnum id);
static char * GetCachePath();
// Reading/writing of data associated with a window
static Handle ReadWindowData( short resID );
static void WriteWindowData( Handle data, short resID );
// ¥¥ Setting of preferences
static void SetModified();
static Boolean SetBoolean( Boolean value, PrefEnum id);
static Boolean SetLong( Int32 value, PrefEnum id);
static Boolean SetString( const char* newString, PrefEnum id);
static Boolean SetColor( const RGBColor& newColor, PrefEnum id);
static Boolean SetFolderSpec( const FSSpec& folderSpec, PrefEnum id);
static Boolean HasCoBrand();
static Boolean IsLocked( PrefEnum id );
static FSSpec GetTempFilePrototype(); // vRefNum and parID for a file in 'Temporary Items
static Boolean IsNewPrefFormat(short id);
static char* Concat(const char* base, const char* suffix);
private:
enum { kStaticStrCount = 8,
kStaticStrLen = 256
};
static char* GetStaticString();
static void PostInitializePref(PrefEnum id, Boolean changed);
private:
static RGBColor * sColors;
static CFolderSpec ** sFileIDs;
static THPrint sPrintRec;
static char * sCachePath;
static FSSpec sTemporaryFolder;
static Boolean sRealTemporaryFolder; // did FindFolder work ?
// ¥¥ MIME mappers
// ¥ create a default MIME mapper for a given MIME type. doInsert inserts it into master
// MIME type list
private:
static void ReadMimeTypes();
static void Read1MimeTypes();
public:
static CMimeMapper* CreateDefaultUnknownMapper( const CStr255& mimeType, Boolean doInsert );
// ¥ like CreateDefaultUnknownMapper, except that it uses the application SIG
static CMimeMapper* CreateDefaultAppMapper( FSSpec& fileSpec, // application file
const char* mimeType, // mime type
Boolean doInsert );
// MIME types - created dynamically
static CMimeList sMimeTypes; // List of CMimeMappers. CMimeList holds routines to manipulate them
static short sPrefFileVersion;
static Boolean sViewSourceInline;
// ¥¥ Font encoding stuff
static void ReadCharacterEncodings();
static void ReadXPFont(int16 csid, CCharSet* csFont);
static Boolean GetFont( UInt16 csid, CCharSet* font );
static Boolean GetFontAtIndex( unsigned long index, CCharSet* font );
static int16 CmdNumToWinCsid( int32 cmdNum);
static int16 CmdNumToDocCsid( int32 cmdNum);
static int32 WinCsidToCmdNum( int16 csid);
static Boolean SetFont(const CStr255& EncodingName,const CStr255& PropFont,const CStr255& FixedFont,
unsigned short PropFontSize, unsigned short FixedFontSize, unsigned short CSID, unsigned short FallbackFontScriptID,
unsigned short TxtrButtonResID, unsigned short TxtrTextFieldResID);
static Int16 GetButtonFontTextResIDs(unsigned short csid);
static Int16 GetTextFieldTextResIDs(unsigned short csid);
static LArray* GetCharSets() { return fCharSetFonts; }
static short GetProportionalFont(unsigned short csid);
static short GetFixFont(unsigned short csid);
static ScriptCode CsidToScript(int16 csid);
static LArray* fCustomLangList;
static LArray* fPreferLangList;
static LArray* fCharSetFonts;
static CCharSet fDefaultFont;
};
Boolean GetCharacterSet( LArray* fontSets, const CStr255& encodingName, CCharSet* font );
/*****************************************************************************
* GLOBALS
*****************************************************************************/
// ¥¥ File name constants. See custom.r for these strings, STR# 300
enum pref_Strings { prefFolderName = 1
, prefFileName = 2
, globHistoryName = 3
, cacheFolderName = 4
, cacheLog = 5
, newsrc = 6
, bookmarkFile = 7
, mimeTypes = 8
, magicCookie = 9
, socksConfig = 10
, allNewsgroups = 11
, newsFileMap = 12
, certDB = 13
, certDBNameIDX = 14
, mailFolderName = 15
, newsFolderName = 16
, securityFolderName = 17
, mailBoxExt = 18
, mailFilterFile = 19
, mailPopState = 20
, proxyConfig = 21
, keyDb = 22
, xoverCache = 23
, addressBookFile = 24
, mailCCfile = 25
, newsCCfile = 26
, extCacheFile = 27
, subdirExt = 28
, newsHostDatabase = 29
, configFile = 30
, userProfiles = 31
, mailFilterLog = 32
, theRegistry = 33
, prefRequiredGutsName = 34
, sarCacheFolderName = 35
, sarCacheIndex = 36
, ibm3270Folder = 37
, ibm3270File = 38
, htmlAddressBook = 39
, vCardExt = 40
, ldifExt1 = 41
, ldifExt2 = 42
, secModuleDb = 43
, usersFolderName = 44
, unknownAppName = 45
, aswName = 46
, nethelpFolderName = 47
, mailFolderCache = 48
, profileTemplateDir = 49
, cryptoPolicy = 50
, signedAppletDb = 51
, cookiePermissions = 52
, singleSignons = 53
, jsConfig = 54 //autoadmin
};