/* * CiderPress * Copyright (C) 2007, 2008 by faddenSoft, LLC. All Rights Reserved. * See the file LICENSE for distribution terms. */ /* * Keep track of user preferences. * * How to add a new preference item: * - Add an entry to the PrefNum enum, below. * - Add a corresponding entry to Preferences::fPrefMaps, adding a new * section to the registry if appropriate. * - Add a default value to Preferences::Preferences. If not specified, * strings will be nil and numeric values will be zero. */ #ifndef APP_PREFERENCES_H #define APP_PREFERENCES_H #include "MyApp.h" class ContentList; /* * Number of visible columns. (We no longer have "invisible" columns, so the * name is somewhat misleading.) * * This is used widely. Update with care. */ const int kNumVisibleColumns = 9; /* * Used to save & restore column layout and sorting preferences for * the ContentList class. */ class ColumnLayout { public: ColumnLayout(void) { for (int i = 0; i < kNumVisibleColumns; i++) fColumnWidth[i] = kWidthDefaulted; fSortColumn = kNumVisibleColumns; // means "use original order" fAscending = true; } ~ColumnLayout(void) {} void LoadFromRegistry(const WCHAR* section); void SaveToRegistry(const WCHAR* section); int GetColumnWidth(int col) const { ASSERT(col >= 0 && col < kNumVisibleColumns); return fColumnWidth[col]; } void SetColumnWidth(int col, int width) { ASSERT(col >= 0 && col < kNumVisibleColumns); ASSERT(width >= 0 || width == kWidthDefaulted); fColumnWidth[col] = width; } int GetSortColumn(void) const { return fSortColumn; } void SetSortColumn(int col) { ASSERT(col >= 0 && col <= kNumVisibleColumns); fSortColumn = col; } bool GetAscending(void) const { return fAscending; } void SetAscending(bool val) { fAscending = val; } /* column width value used to flag "defaulted" status */ enum { kWidthDefaulted = -1 }; /* minimium width of column 0 (pathname) */ enum { kMinCol0Width = 50 }; private: // Create a dummy list control to get default column widths. void DetermineDefaultWidths(ContentList* pList); int fColumnWidth[kNumVisibleColumns]; int fSortColumn; bool fAscending; }; /* * Preferences type enumeration. * * This is logically part of the Preferences object, but it's annoying to * have to specify the scope resolution operator everywhere. */ typedef enum { /**/ kPrefNumUnknown = 0, /* these are saved in the registry */ // sticky settings for add file options kPrAddIncludeSubFolders, // bool kPrAddStripFolderNames, // bool kPrAddOverwriteExisting, // bool kPrAddTypePreservation, // long kPrAddConvEOL, // long // sticky settings for file extraction //kPrExtractPath, // string kPrExtractConvEOL, // long kPrExtractConvHighASCII, // bool kPrExtractIncludeData, // bool kPrExtractIncludeRsrc, // bool kPrExtractIncludeDisk, // bool kPrExtractEnableReformat, // bool kPrExtractDiskTo2MG, // bool kPrExtractAddTypePreservation, // bool kPrExtractAddExtension, // bool kPrExtractStripFolderNames, // bool kPrExtractOverwriteExisting, // bool // // view file options // kPrViewIncludeDataForks, // bool // kPrViewIncludeRsrcForks, // bool // kPrViewIncludeDiskImages, // bool // kPrViewIncludeComments, // bool // convert disk image to file archive //kPrConvFileConvDOSText, // bool //kPrConvFileConvPascalText, // bool kPrConvFileEmptyFolders, // bool // folders for CFileDialog initialization kPrOpenArchiveFolder, // string kPrConvertArchiveFolder, // string kPrAddFileFolder, // string kPrExtractFileFolder, // string // logical/physical volume prefs kPrVolumeFilter, // long //kPrVolumeReadOnly, // bool // cassette import/export prefs kPrCassetteAlgorithm, // long kPrOpenWAVFolder, // string // items from the Preferences propertypages (must be saved/restored) kPrMimicShrinkIt, // bool kPrBadMacSHK, // bool kPrReduceSHKErrorChecks, // bool kPrCoerceDOSFilenames, // bool kPrSpacesToUnder, // bool kPrPasteJunkPaths, // bool kPrBeepOnSuccess, // bool kPrQueryImageFormat, // bool kPrOpenVolumeRO, // bool kPrOpenVolumePhys0, // bool kPrProDOSAllowLower, // bool kPrProDOSUseSparse, // bool kPrCompressionType, // long kPrMaxViewFileSize, // long kPrNoWrapText, // bool kPrHighlightHexDump, // bool kPrHighlightBASIC, // bool kPrConvHiResBlackWhite, // bool kPrConvDHRAlgorithm, // long kPrRelaxGfxTypeCheck, // bool kPrDisasmOneByteBrkCop, // bool //kPrEOLConvRaw, // bool kPrConvTextEOL_HA, // bool kPrConvPascalText, // bool kPrConvPascalCode, // bool kPrConvCPMText, // bool kPrConvApplesoft, // bool kPrConvInteger, // bool kPrConvBusiness, // bool kPrConvGWP, // bool kPrConvText8, // bool kPrConvGutenberg, // bool kPrConvAWP, // bool kPrConvADB, // bool kPrConvASP, // bool kPrConvSCAssem, // bool kPrConvDisasm, // bool kPrConvHiRes, // bool kPrConvDHR, // bool kPrConvSHR, // bool kPrConvPrintShop, // bool kPrConvMacPaint, // bool kPrConvProDOSFolder, // bool kPrConvResources, // bool kPrTempPath, // string kPrExtViewerExts, // string // open file dialog kPrLastOpenFilterIndex, // long /**/ kPrefNumLastRegistry, /* these are temporary settings, not saved in the registry */ // sticky settings for internal file viewer (ViewFilesDialog) kPrViewTextTypeFace, // string kPrViewTextPointSize, // long kPrFileViewerWidth, // long kPrFileViewerHeight, // long // sticky setting for disk image creator kPrDiskImageCreateFormat, // long /**/ kPrefNumLastEntry } PrefNum; /* * Container for preferences. */ class Preferences { public: Preferences(void); ~Preferences(void) { FreeStringValues(); } // Load/save preferences from/to registry. int LoadFromRegistry(void); int SaveToRegistry(void); ColumnLayout* GetColumnLayout(void) { return &fColumnLayout; } //bool GetShowToolbarText(void) const { return fShowToolbarText; } //void SetShowToolbarText(bool val) { fShowToolbarText = val; } bool GetPrefBool(PrefNum num) const; void SetPrefBool(PrefNum num, bool val); long GetPrefLong(PrefNum num) const; void SetPrefLong(PrefNum num, long val); const WCHAR* GetPrefString(PrefNum num) const; void SetPrefString(PrefNum num, const WCHAR* str); private: void InitTempPath(void); void InitFolders(void); bool GetMyDocuments(CString* pPath); int DefaultCompressionType(void); void FreeStringValues(void); /* * Internal data structure used to manage preferences. */ typedef enum { kPTNone, kBool, kLong, kString } PrefType; typedef struct PrefMap { PrefNum num; PrefType type; const WCHAR* registrySection; const WCHAR* registryKey; } PrefMap; static const PrefMap fPrefMaps[kPrefNumLastEntry]; void ScanPrefMaps(void); // this holds the actual values void* fValues[kPrefNumLastEntry]; // verify that the entry exists and has the expected type bool ValidateEntry(PrefNum num, PrefType type) const { if (num <= kPrefNumUnknown || num >= kPrefNumLastEntry) { ASSERT(false); return false; } if (fPrefMaps[num].type != type) { ASSERT(false); return false; } return true; } // column widths for ContentList ColumnLayout fColumnLayout; /* * Registry helpers. */ UINT GetInt(const WCHAR* section, const WCHAR* key, int dflt) { return gMyApp.GetProfileInt(section, key, dflt); } bool GetBool(const WCHAR* section, const WCHAR* key, bool dflt) { return (gMyApp.GetProfileInt(section, key, dflt) != 0); } CString GetString(const WCHAR* section, const WCHAR* key, const WCHAR* dflt) { return gMyApp.GetProfileString(section, key, dflt); } BOOL WriteInt(const WCHAR* section, const WCHAR* key, int value) { return gMyApp.WriteProfileInt(section, key, value); } BOOL WriteBool(const WCHAR* section, const WCHAR* key, bool value) { return gMyApp.WriteProfileInt(section, key, value); } BOOL WriteString(const WCHAR* section, const WCHAR* key, const WCHAR* value) { return gMyApp.WriteProfileString(section, key, value); } }; #endif /*APP_PREFERENCES_H*/