/* * Copyright 1997, 1999 Perforce Software. All rights reserved. * * This file is part of Perforce - the FAST SCM System. */ // P4Registry.cpp #include "stdafx.h" #include "P4Win.h" #include "MainFrm.h" #include "p4registry.h" #include "guiclientuser.h" #include "StringUtil.h" #include "GuiClient.h" #include "ExceptionHandler.h" #define NONE _T("none") #define TabWidth _T("TabWidth") #define WhtSpFlag _T("WhtSpFlag") #define MrgTabWidth _T("MrgTabWidth") #define MrgWhtSpFlag _T("MrgWhtSpFlag") #define AnnotateWhtSpace _T("AnnotateWhtSpace") #define AnnotateIncInteg _T("AnnotateIncInteg") #define TLVWhtSpace _T("TLVWhtSpace") #define TLVIncInteg _T("TLVIncInteg") #define ResolveWhtSp _T("ResolveWhtSp") #define UseTempForView _T("UseTempForView") #define UseTempForExts _T("UseTempForExts") #define EditAppIsConsole _T("EditAppIsConsole") #define DiffAppIsConsole _T("DiffAppIsConsole") #define DiffAppIsClose _T("DiffAppIsClose") #define DiffAppIsBinary _T("DiffAppIsBinary") #define DiffInternal _T("DiffAppInternal") #define DiffOptArgs _T("DiffOptArgs") #define DiffOptArgChk _T("DiffOptArgChk") #define MergeInternal _T("MergeAppInternal") #define MergeOptArgs _T("MergeOptArgs") #define MergeOptArgChk _T("MergeOptArgChk") #define MergeNSF _T("MergeAppNSF") #define MergeAppIsConsole _T("MergeAppIsConsole") #define MergeAppIsClose _T("MergeAppIsClose") #define AlwaysShowFocus _T("AlwaysShowFocus") #define AlwaysWarnOnRevert _T("AlwaysWarnOnRevert") #define AllowPromptAbove _T("AllowPromptAbove") #define AutoMinEditDlg _T("AutoMinEditDlg") #define DoubleClickOption _T("DoubleClickOption") #define OptionStartUpOption _T("OptionStartUpOption") #define OptionStartUpPage _T("OptionStartUpPage") #define StatusUpdateInterval _T("StatusUpdate10thsSec") #define LabelAddRplDefault _T("LabelAddRplDefault") #define Diff2Default1 _T("Diff2Default1") #define Diff2Default2 _T("Diff2Default2") #define TempFiles _T("TempFiles") #define Explorer _T("Explorer") #define Use2Panes _T("Use2Panes") #define AltExplorer _T("AltExplorer") #define PreviewDefault _T("PreviewDefault") #define IsBaselessMerge _T("IntegDefIsBaselessMerge") #define IsIndirectMerge _T("IntegDefIsIndirectMerge") #define IsPropagateTypes _T("IntegDefIsPropagateTypes") #define IsBaseViaDelReadd _T("IntegDefIsBaseViaDelReadd") #define UseNewChglist _T("IntegDefUseNewChglist") #define UseNewChglist2 _T("RenameDefUseNewChglist") #define IsPermitDelReadd _T("IntegDefIsPermitDelReadd") #define DelReaddType _T("IntegDefDelReaddType") #define IsDeleteSource _T("IntegDefIsDeleteSource") #define IsForceInteg _T("IntegDefIsForceInteg") #define IsForceDirect _T("IntegDefIsForceDirect") #define IsNoCopy _T("IntegDefIsNoCopy") #define SyncFirstDefault _T("SyncFirstDefault") #define WarnAlreadyOpened _T("WarnAlreadyOpened") #define ExpandFlag _T("ExpandFlag") #define ExpandPath _T("ExpandPath") #define WarnLimit _T("WarnLimit") #define WarnLimitDiff _T("WarnLimitDiff") #define WarnLimitOpen _T("WarnLimitOpen") #define ExtSortMax _T("ExtSortMax") #define MinMultiLineSize _T("MinMultiLineSize") #define UserFilter _T("UserFilter") #define FilteredByUser _T("FilteredByUser") #define ClientFilter _T("ClientFilter") #define FilteredByClient _T("FilteredByClient") #define LabelFilterByOwnerFlag _T("LabelFilterByOwnerFlag") #define LabelFilterByOwner _T("LabelFilterByOwner") #define LabelFilterIncBlank _T("LabelFilterIncBlank") #define UseOpenForEditExts _T("UseOpenForEditExts") #define UseOpenForEdit _T("UseOpenForEdit") #define UseShortRevHistDesc _T("UseShortRevHistDesc") #define UseShortSubmittedDesc _T("UseShortSubmittedDesc") #define UseLongChglistDesc _T("UseLongChglistDesc") #define BusyWaitTime _T("BusyWaitTime") #define SyncDlgFlag _T("SyncDlgFlag") #define DescWrap _T("DescWrap") #define DescWrapSw _T("DescWrapSw") #define ShowDeleted _T("ShowDeleted") #define SortByExtension _T("SortByExtension") #define SortChgFilesByAction _T("SortChgFilesByAction") #define SortChgFilesByName _T("SortChgFilesByName") #define SortChgFilesByExt _T("SortChgFilesByExt") #define SortChgFilesByResolve _T("SortChgFilesByResolve") #define ShowToolBar _T("ShowToolBar") #define ShowEntireDepot _T("ShowEntireDepot") #define ShowFileTypes _T("ShowFileTypes") #define ShowOpenActions _T("ShowOpenActions") #define ShowChangeDescs _T("ShowChangeDescs") #define SortChgsByUser _T("ShowChgsByUser") #define ShowCommandTrace _T("ShowCommandTrace") #define ShowConnectSettings _T("ShowConnectionSettings") #define ShowConnectPort1st _T("ShowConnectionPort1st") #define ShowClientPath4Chgs _T("ShowClientPath4Chgs") #define ShowClientPath _T("ShowClientPath") #define ShowDepotPathHiLite _T("ShowDepotPathHiLite") #define ShowStatusTime _T("ShowStatusTime") #define ShowHiddenFilesNotInDepot _T("ShowHiddenFilesNotInDepot") #define Use24hourClock _T("Use24hourClock") #define PreserveSpecFormat _T("PreserveSpecFormat") #define AutoExpandOptions _T("AutoExpandOptions") #define LabelFilesInDialog _T("LabelFilesInDialog") #define LabelShowPreviewDetail _T("LabelShowPreviewDetail") #define Diff2InDialog _T("Diff2InDialog") #define AutoTreeExpand _T("AutoTreeExpand") #define UseNotepad4WarnAndErr _T("UseNotepad4WarnAndErr") #define Cvt2ValComboToChkBx _T("Cvt2ValComboToChkBx") #define IconsInMenus _T("IconsInMenus") #define ExpandChgLists _T("ExpandChgLists") #define ReExpandChgs _T("ReExpandChgs") #define EnableSubChgIntegFilter _T("EnableSubChgIntegFilter") #define EnableRevHistShowIntegs _T("EnableRevHistShowIntegs") #define EnablePendingChgsOtherClients _T("EnablePendingChgsOtherClients") #define AddFilterExclude _T("AddFilterExclude") #define AutoPollServer _T("AutoPollServer") #define AutoPollTime _T("AutoPollTime") #define AutoPollIconic _T("AutoPollIconic") #define AutoPollJobs _T("AutoPollJobs") #define LogoutOnExit _T("LogoutOnExit") #define ClearAndReload _T("ClearAndReload") #define ReloadOnUncover _T("ReloadOnUncover") #define ReloadUncoverTime _T("ReloadUncoverTime") #define ChglistSyncDef _T("ChglistSyncDef") #define FetchChangeCount _T("FetchChangeCount") #define FetchAllChanges _T("FetchAllChanges") #define FetchJobCount _T("FetchJobCount") #define FetchAllJobs _T("FetchAllJobs") #define FetchHistCount _T("FetchHistCount") #define FetchAllHist _T("FetchAllHist") #define FetchCompleteHist _T("FetchCompleteHist") #define HistListHeight _T("HistListHeight") #define JobFilterWidth _T("JobFilterWidth") #define IgnoreWinAssoc _T("IgnoreWinAssoc") #define AddFileCurDir _T("AddFileCurDir") #define AddFileExtFilter _T("AddFileExtFilter") #define AddFileFilter _T("AddFileFilter") #define AddFileFilterIndex _T("AddFileFilterIndex") #define DefaultDnDfromExp _T("DefaultDnDfromExp") #define MultiProcessorSleep _T("MultiProcessorSleep") #define MaxStatusLines _T("MaxStatusLines") #define ShowStatusMsgs _T("ShowStatusMsgs") #define ShowTruncTooltip _T("ShowTruncTooltip") #define DontThreadDiffs _T("DontThreadDiffs") #define PendChgExpansion _T("PendChgExpansion") #define LastBranch _T("LastBranch") #define LastLabel _T("LastLabel") #define LastTemplate _T("LastTemplate") #define LocalCliTemplate _T("LocalCliTemplate") #define LocalCliTemplateSw _T("LocalCliTemplateSw") #define UseClientSpecSubmitOpts _T("UseClientSpecSubmitOpts") #define SwapButtonPosition _T("SwapButtonPosition") #define BranchFilteredFlags _T("BranchFilteredFlags") #define BranchFilterOwner _T("BranchFilterOwner") #define ClientFilteredFlags _T("ClientFilteredFlags") #define ClientFilterOwner _T("ClientFilterOwner") #define ClientFilterHost _T("ClientFilterHost") #define ClientFilterDesc _T("ClientFilterDesc") #define WindowPosition _T("WindowPosition") #define WindowIconic _T("WindowIconic") #define WindowRestoreMaximized _T("WindowRestoreMaximized") #define HorizontalSplitter _T("HorizontalSplitter") #define VerticalSplitter _T("VerticalSplitter") #define RecentFindStrList _T("Recent Find String List") #define RecentToolArgList _T("Recent Tool Arg List") #define RecentViewerList _T("Recent Viewer List") #define RecentFilterList _T("Recent Filter List") #define RecentChgFilterList _T("Recent Chg Filter List") #define RecentPortList _T("Recent Port List") #define RecentCharsetList _T("Recent Charset List") #define RecentPcuList _T("Recent Port-Client-User List") #define DlgFontFace _T("DialogFontFace") #define DlgFontSize _T("DialogFontSize") #define DlgFontItalic _T("DialogFontItalic") #define DlgFontWeight _T("DialogFontWeight") #define FindFilesWidth _T("FindFilesWidth") #define P4StartWith _T("P4StartWith") #define P4BusyCursor _T("P4BusyCursor") #define CloseAfterFind _T("CloseAfterFind") #define SubmitOnlyChged _T("SubmitOnlyChged") #define RevertUnchged _T("RevertUnchged") #define AutoReopen _T("AutoReopen") #define LabelDragDropOption _T("LabelDragDropOption") #define ResolveDefault _T("ResolveDefault") #define Resolve2wayDefault _T("Resolve2wayDefault") #define Resolve3wayDefault _T("Resolve3wayDefault") #define ConvertJobNbr _T("ConvertJobNbr") #define Use256colorIcons _T("Use256colorIcons") #define UseDepotInClientView _T("UseDepotInClientView") #define DontShowYouHaveChgClientView _T("DontShowYouHaveChgClientView") #define DontShowYouHaveCr8NewClient _T("DontShowYouHaveCr8NewClient") #define DontShowDiscardFormChgs _T("DontShowDiscardFormChgs") #define AllowExceptionReporting _T("AllowExceptionReporting") #define TryResetingFocus _T("TryResetingFocus") #define FilterPendChgsByMyClient _T("FilterPendChgsByMyClient") #define FilterPendChgsByPath _T("FilterPendChgsByPath") #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif const DWORD SIZE_REG_VALUE = 255; CP4Registry::CP4Registry() { m_AttemptedRead=FALSE; m_Virgin = m_NoCliHost = m_bCharsetFromCmdli = FALSE; m_DefCharset[0] = _T("shiftjis"); m_DefCharset[1] = _T("winansi"); m_DefCharset[2] = _T("eucjp"); m_DefCharset[3] = _T("iso8859-1"); m_DefCharset[4] = _T("utf8"); m_DefCharset[5] = _T("iso8859-15"); m_DefCharset[6] = _T("macosroman"); m_DefCharset[7] = _T("iso8859-5"); m_DefCharset[8] = _T("cp1251"); m_DefCharset[9] = _T("koi8-r"); m_DefCharset[10] = _T("utf16le-bom"); m_DefCharset[11] = _T("utf8-bom"); m_DefCharset[12] = _T(""); m_DefCharset[13] = _T(""); m_DefCharset[14] = _T(""); m_DefCharset[15] = _T(""); } CP4Registry::~CP4Registry() { } /* _________________________________________________________________ Attempt to read all possible registry entries. If any are not found, write defaults to the registry and to member vars. If P4Port, P4User or P4Client are not read successfully, return FALSE _________________________________________________________________ */ BOOL CP4Registry::ReadRegistry() { // The user, client and port will get set the first time that a // command is run (will be MaxChange) // // The __Reg version of each value is what the P4 api will find, // whether that info actually comes from the registry or from a // function like gethostname(). The other version of each value // is the value the user is actually running with, and can be // set via command line args or clicking in UserView or ClientView // m_P4Client_Perm = m_P4Client_Temp = _T(""); m_P4User_Perm = m_P4User_Temp = _T(""); m_P4Port_Perm = m_P4Port_Temp =_T(""); m_P4Password_Perm = m_P4Password_Temp = _T(""); m_P4Charset_Perm = m_P4Charset_Temp =_T(""); m_P4Client_Prev = m_P4User_Prev = m_P4Client_PrevDef = m_P4User_PrevDef = _T("@"); m_AttemptedRead=TRUE; GetP4Client(TRUE); // These 2 will get the values from the registry GetP4User(TRUE); m_AttemptedRead=FALSE; SetMyID(); if(!GetRegKey( m_EditApp, _T("Options"), _T("EditApp"), _T("EDITOR"), _T("notepad") )) SetEditApp( m_EditApp ); if(!GetRegKey( &m_TabWidth, _T("Options"), TabWidth, 4 )) SetTabWidth( m_TabWidth ); if(!GetRegKey( &m_WhtSpFlag, _T("Options"), WhtSpFlag, 0 )) SetWhtSpFlag( m_WhtSpFlag ); if(!GetRegKey( m_DiffApp, _T("Options"), _T("DiffApp"), _T("DIFF"), _T("windiff") )) { SetDiffApp( m_DiffApp ); // if this key is not set, then we ca assume a virgin installation m_Virgin = TRUE; WriteVirginRegistry(); } if(!GetRegKey( m_DiffOptArgs, _T("Options"), DiffOptArgs, _T("DIFFOPTARGS"), _T("%1 %2") )) SetDiffOptArgs( m_DiffOptArgs ); m_AttemptedRead=TRUE; if(!GetRegKey( &m_MrgTabWidth, _T("Options"), MrgTabWidth, GetTabWidth() )) SetMrgTabWidth( m_MrgTabWidth ); m_AttemptedRead=FALSE; if(!GetRegKey( &m_MrgWhtSpFlag, _T("Options"), MrgWhtSpFlag, 0 )) { SetMrgWhtSpFlag( m_MrgWhtSpFlag ); SetResolveWhtSp( m_MrgWhtSpFlag ); } if(!GetRegKey( m_MergeApp, _T("Options"), _T("MergeApp"), _T("MERGE"), _T("") )) SetMergeApp( m_MergeApp ); if(!GetRegKey( m_MergeOptArgs, _T("Options"), MergeOptArgs, _T("MERGEOPTARGS"), _T("%1 %2 %3 %4") )) SetMergeOptArgs( m_MergeOptArgs ); if(!GetRegKey( &m_AnnotateWhtSpace, _T("Options"), AnnotateWhtSpace, 0 )) SetAnnotateWhtSpace( m_AnnotateWhtSpace ); if(!GetRegKey( &m_AnnotateIncInteg, _T("Options"), AnnotateIncInteg, 0 )) SetAnnotateIncInteg( m_AnnotateIncInteg ); if(!GetRegKey( &m_TLVWhtSpace, _T("Options"), TLVWhtSpace, 0 )) SetTLVWhtSpace( m_TLVWhtSpace ); if(!GetRegKey( &m_TLVIncInteg, _T("Options"), TLVIncInteg, 0 )) SetTLVIncInteg( m_TLVIncInteg ); if(!GetRegKey( &m_ResolveWhtSp, _T("Options"), ResolveWhtSp, 0 )) SetResolveWhtSp( m_ResolveWhtSp ); if(!GetRegKey( &m_UseTempForView, _T("Options"), UseTempForView, 1 )) SetUseTempForView( m_UseTempForView ); if(!GetRegKey( m_UseTempForExts, _T("Options"), UseTempForExts, _T("USETEMPFOREXTS"), _T("htm,html,exe") )) SetUseTempForExts( m_UseTempForExts ); if(!GetRegKey( &m_EditAppIsConsole, _T("Options"), EditAppIsConsole, FALSE )) SetEditAppIsConsole( m_EditAppIsConsole ); if(!GetRegKey( &m_IgnoreWinAssoc, _T("Options"), IgnoreWinAssoc, FALSE )) SetIgnoreWinAssoc( m_IgnoreWinAssoc ); if(!GetRegKey( &m_DiffAppIsConsole, _T("Options"), DiffAppIsConsole, FALSE )) SetDiffAppIsConsole( m_DiffAppIsConsole ); if(!GetRegKey( &m_DiffAppIsClose, _T("Options"), DiffAppIsClose, FALSE )) SetDiffAppIsClose( m_DiffAppIsClose ); if(!GetRegKey( &m_DiffAppIsBinary, _T("Options"), DiffAppIsBinary, FALSE )) SetDiffAppIsBinary( m_DiffAppIsBinary ); if(!GetRegKey( &m_DiffOptArgChk, _T("Options"), DiffOptArgChk, FALSE )) SetDiffOptArgChk( m_DiffOptArgChk ); if(!GetRegKey( &m_DiffInternal, _T("Options"), DiffInternal, TRUE )) SetDiffInternal( m_DiffInternal ); if(!GetRegKey( &m_MergeInternal, _T("Options"), MergeInternal, 1 )) SetMergeInternal( m_MergeInternal ); if(!GetRegKey( &m_MergeOptArgChk, _T("Options"), MergeOptArgChk, FALSE )) SetMergeOptArgChk( m_MergeOptArgChk ); if(!GetRegKey( &m_MergeNSF, _T("Options"), MergeNSF, FALSE )) SetMergeNSF( m_MergeNSF ); if(!GetRegKey( &m_MergeAppIsConsole, _T("Options"), MergeAppIsConsole, FALSE )) SetMergeAppIsConsole( m_MergeAppIsConsole ); if(!GetRegKey( &m_MergeAppIsClose, _T("Options"), MergeAppIsClose, FALSE )) SetMergeAppIsClose( m_MergeAppIsClose ); if(!GetRegKey( &m_AlwaysShowFocus, _T("Options"), AlwaysShowFocus, TRUE )) SetAlwaysShowFocus( m_AlwaysShowFocus ); if(!GetRegKey( &m_AlwaysWarnOnRevert, _T("Options"), AlwaysWarnOnRevert, FALSE )) SetAlwaysWarnOnRevert( m_AlwaysWarnOnRevert ); if(!GetRegKey( &m_AllowPromptAbove, _T("Options"), AllowPromptAbove, FALSE )) SetAllowPromptAbove( m_AllowPromptAbove ); if(!GetRegKey( &m_AutoMinEditDlg, _T("Options"), AutoMinEditDlg, FALSE )) SetAutoMinEditDlg( m_AutoMinEditDlg ); if(!GetRegKey( &m_DoubleClickOption, _T("Options"), DoubleClickOption, 0 )) SetDoubleClickOption( m_DoubleClickOption ); if(!GetRegKey( &m_OptionStartUpOption, _T("Options"), OptionStartUpOption, 2 )) SetOptionStartUpOption( m_OptionStartUpOption ); if(!GetRegKey( &m_OptionStartUpPage, _T("Options"), OptionStartUpPage, 0 )) SetOptionStartUpPage( m_OptionStartUpPage ); if(!GetRegKey( &m_StatusUpdateInterval, _T("Options"), StatusUpdateInterval, 0 )) SetStatusUpdateInterval( m_StatusUpdateInterval ); if(!GetRegKey( &m_LabelAddRplDefault, _T("Options"), LabelAddRplDefault, 0 )) SetLabelAddRplDefault( m_LabelAddRplDefault ); if(!GetRegKey( &m_Diff2Default1, _T("Options"), Diff2Default1, 0 )) SetDiff2Default1( m_Diff2Default1 ); if(!GetRegKey( &m_Diff2Default2, _T("Options"), Diff2Default2, 0 )) SetDiff2Default2( m_Diff2Default2 ); // Always set temp dir, to make sure trailing slashes are removed TCHAR EnvStr[MAX_PATH+1]; if (::GetTempPath(sizeof(EnvStr)/sizeof(TCHAR), EnvStr)) lstrcat(EnvStr, _T("p4win")); else lstrcpy(EnvStr, _T("C:\\P4WinTemp")); GetRegKey( m_TempDir, _T("Options"), TempFiles, NULL, EnvStr ); m_TempDir.TrimRight(); SetTempDir( m_TempDir ); if(!GetRegKey( &m_Explorer, _T("Options"), Explorer, 0 )) SetExplorer( m_Explorer ); if(!GetRegKey( &m_2Panes, _T("Options"), Use2Panes, 1 )) Set2Panes( m_2Panes ); if(!GetRegKey( m_AltExpl, _T("Options"), AltExplorer, NULL, _T("Explorer.exe /e,") )) SetAltExpl( m_AltExpl ); if(!GetRegKey( &m_ShowDeleted, _T("Options"), ShowDeleted, FALSE )) SetShowDeleted( m_ShowDeleted ); if(!GetRegKey( &m_SortByExtension, _T("Options"), SortByExtension, FALSE )) SetSortByExtension( m_SortByExtension ); if(!GetRegKey( &m_SortChgFilesByAction, _T("Options"), SortChgFilesByAction, FALSE )) SetSortChgFilesByAction( m_SortChgFilesByAction ); if(!GetRegKey( &m_SortChgFilesByName, _T("Options"), SortChgFilesByName, FALSE )) SetSortChgFilesByName( m_SortChgFilesByName ); if(!GetRegKey( &m_SortChgFilesByExt, _T("Options"), SortChgFilesByExt, FALSE )) SetSortChgFilesByExt( m_SortChgFilesByExt ); if(!GetRegKey( &m_SortChgFilesByResolve, _T("Options"), SortChgFilesByResolve, FALSE )) SetSortChgFilesByResolve( m_SortChgFilesByResolve ); if(!GetRegKey( &m_IsNoCopy, _T("Options"), IsNoCopy, FALSE )) SetIsNoCopy( m_IsNoCopy ); if(!GetRegKey( &m_IsForceInteg, _T("Options"), IsForceInteg, FALSE )) SetIsForceInteg( m_IsForceInteg ); if(!GetRegKey( &m_IsForceDirect, _T("Options"), IsForceDirect, FALSE )) SetIsForceDirect( m_IsForceDirect ); if(!GetRegKey( &m_IsDeleteSource, _T("Options"), IsDeleteSource, FALSE )) SetIsDeleteSource( m_IsDeleteSource ); if(!GetRegKey( &m_IsPermitDelReadd, _T("Options"), IsPermitDelReadd, FALSE )) SetIsPermitDelReadd( m_IsPermitDelReadd ); if(!GetRegKey( &m_DelReaddType, _T("Options"), DelReaddType, 2 )) SetDelReaddType( m_DelReaddType ); if(!GetRegKey( &m_IsPropagateTypes, _T("Options"), IsPropagateTypes, FALSE )) SetIsPropagateTypes( m_IsPropagateTypes ); if(!GetRegKey( &m_IsBaseViaDelReadd, _T("Options"), IsBaseViaDelReadd, FALSE )) SetIsBaseViaDelReadd( m_IsBaseViaDelReadd ); if(!GetRegKey( &m_UseNewChglist, _T("Options"), UseNewChglist, FALSE )) SetUseNewChglist( m_UseNewChglist ); if(!GetRegKey( &m_UseNewChglist2, _T("Options"), UseNewChglist2, TRUE )) SetUseNewChglist2( m_UseNewChglist2 ); if(!GetRegKey( &m_IsBaselessMerge, _T("Options"), IsBaselessMerge, FALSE )) SetIsBaselessMerge( m_IsBaselessMerge ); // Keep this disabled! // if(!GetRegKey( &m_IsIndirectMerge, _T("Options"), IsIndirectMerge, FALSE )) /* SetIsIndirectMerge(*/ m_IsIndirectMerge = FALSE /*)*/; if(!GetRegKey( &m_SyncFirstDefault, _T("Options"), SyncFirstDefault, TRUE )) SetSyncFirstDefault( m_SyncFirstDefault ); if(!GetRegKey( &m_WarnAlreadyOpened, _T("Options"), WarnAlreadyOpened, FALSE )) SetWarnAlreadyOpened( m_WarnAlreadyOpened ); if(!GetRegKey( &m_ExpandFlag, _T("Options"), ExpandFlag, 0 )) SetExpandFlag( m_ExpandFlag ); if(!GetRegKey( m_ExpandPath, _T("Options"), ExpandPath, NULL, _T("") )) SetExpandPath( m_ExpandPath ); if(!GetRegKey( m_WarnLimit, _T("Options"), WarnLimit, NULL, _T("5000") )) SetWarnLimit( m_WarnLimit ); if(!GetRegKey( m_WarnLimitDiff, _T("Options"), WarnLimitDiff, NULL, _T("12") )) SetWarnLimitDiff( m_WarnLimitDiff ); if(!GetRegKey( m_WarnLimitOpen, _T("Options"), WarnLimitOpen, NULL, _T("50") )) SetWarnLimitOpen( m_WarnLimitOpen ); if(!GetRegKey( m_ExtSortMax, _T("Options"), ExtSortMax, NULL, _T("1000") )) SetExtSortMax( m_ExtSortMax ); if(!GetRegKey( m_MinMultiLineSize, _T("Options"), MinMultiLineSize, NULL, _T("3") )) SetMinMultiLineSize( m_MinMultiLineSize ); if(!GetRegKey( m_UserFilter, _T("Options"), UserFilter, NULL, _T("") )) SetUserFilter( m_UserFilter ); if(!GetRegKey( &m_FilteredByUser, _T("Options"), FilteredByUser, 0 )) SetFilteredByUser( m_FilteredByUser ); if(!GetRegKey( m_ClientFilter, _T("Options"), ClientFilter, NULL, _T("") )) SetClientFilter( m_ClientFilter ); if(!GetRegKey( &m_FilteredByClient, _T("Options"), FilteredByClient, 0 )) SetFilteredByClient( m_FilteredByClient ); if(!GetRegKey( m_LabelFilterByOwner, _T("Options"), LabelFilterByOwner, NULL, _T("") )) SetLabelFilterByOwner( m_LabelFilterByOwner ); if(!GetRegKey( &m_LabelFilterByOwnerFlag, _T("Options"), LabelFilterByOwnerFlag, m_LabelFilterByOwner.IsEmpty() ? 0 : 1 )) SetLabelFilterByOwnerFlag( m_LabelFilterByOwnerFlag ); if(!GetRegKey( &m_LabelFilterIncBlank, _T("Options"), LabelFilterIncBlank, 0 )) SetLabelFilterIncBlank( m_LabelFilterIncBlank ); if(!GetRegKey( m_UseOpenForEditExts, _T("Options"), UseOpenForEditExts, NULL, _T("c,cc,cpp,cxx,h,hpp,hxx,rc,ico,def,dsp,dsw,vbs,vcproj,ncb,sln,ilk") )) SetUseOpenForEditExts( m_UseOpenForEditExts ); if(!GetRegKey( &m_UseOpenForEdit, _T("Options"), UseOpenForEdit, 0 )) SetUseOpenForEdit( m_UseOpenForEdit ); if(!GetRegKey( &m_UseShortRevHistDesc, _T("Options"), UseShortRevHistDesc, 0 )) SetUseShortRevHistDesc( m_UseShortRevHistDesc ); if(!GetRegKey( &m_UseShortSubmittedDesc, _T("Options"), UseShortSubmittedDesc, 0 )) SetUseShortSubmittedDesc( m_UseShortSubmittedDesc ); if(!GetRegKey( &m_UseLongChglistDesc, _T("Options"), UseLongChglistDesc, 31 )) SetUseLongChglistDesc( m_UseLongChglistDesc ); if(!GetRegKey( &m_BusyWaitTime, _T("Options"), BusyWaitTime, 250 )) SetBusyWaitTime( m_BusyWaitTime ); if(!GetRegKey( &m_SyncDlgFlag, _T("Options"), SyncDlgFlag, -1 )) SetSyncDlgFlag( m_SyncDlgFlag ); if(!GetRegKey( &m_DescWrap, _T("Options"), DescWrap, 72 )) SetDescWrap( m_DescWrap ); if(!GetRegKey( &m_DescWrapSw, _T("Options"), DescWrapSw, FALSE )) SetDescWrapSw( m_DescWrapSw ); if(!GetRegKey( &m_ShowToolBar, _T("Options"), ShowToolBar, TRUE )) SetShowToolBar( m_ShowToolBar ); if(!GetRegKey( &m_ShowEntireDepot, _T("Options"), ShowEntireDepot, 0 )) SetShowEntireDepot( m_ShowEntireDepot ); if(!GetRegKey( &m_ShowFileType, _T("Options"), ShowFileTypes, TRUE )) SetShowFileType( m_ShowFileType ); if(!GetRegKey( &m_ShowOpenAction, _T("Options"), ShowOpenActions, TRUE )) SetShowOpenAction( m_ShowOpenAction ); if(!GetRegKey( &m_ShowChangeDesc, _T("Options"), ShowChangeDescs, TRUE )) SetShowChangeDesc( m_ShowChangeDesc ); if(!GetRegKey( &m_SortChgsByUser, _T("Options"), SortChgsByUser, FALSE )) SetSortChgsByUser( m_SortChgsByUser ); if(!GetRegKey( &m_ShowCommandTrace, _T("Options"), ShowCommandTrace, FALSE )) SetShowCommandTrace( m_ShowCommandTrace ); if(!GetRegKey( &m_ShowConnectSettings, _T("Options"), ShowConnectSettings, TRUE )) SetShowConnectSettings( m_ShowConnectSettings ); if(!GetRegKey( &m_ShowConnectPort1st, _T("Options"), ShowConnectPort1st, FALSE )) SetShowConnectPort1st( m_ShowConnectPort1st ); // This has been disabled since it causes too muc server overhead SetShowClientPath4Chgs( m_ShowClientPath4Chgs = FALSE ); if(!GetRegKey( &m_ShowClientPath, _T("Options"), ShowClientPath, TRUE )) SetShowClientPath( m_ShowClientPath ); if(!GetRegKey( &m_ShowDepotPathHiLite, _T("Options"), ShowDepotPathHiLite, FALSE )) SetShowDepotPathHiLite( m_ShowDepotPathHiLite ); if(!GetRegKey( &m_ShowStatusTime, _T("Options"), ShowStatusTime, FALSE )) SetShowStatusTime( m_ShowStatusTime ); if(!GetRegKey( &m_ShowHiddenFilesNotInDepot, _T("Options"), ShowHiddenFilesNotInDepot, FALSE )) SetShowHiddenFilesNotInDepot( m_ShowHiddenFilesNotInDepot ); TCHAR cSetting[3]; GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ITIME, cSetting, 3); if(!GetRegKey( &m_Use24hourClock, _T("Options"), Use24hourClock, cSetting[0]==_T('1') )) SetUse24hourClock( m_Use24hourClock ); if(!GetRegKey( &m_PreserveSpecFormat, _T("Options"), PreserveSpecFormat, FALSE )) SetPreserveSpecFormat( m_PreserveSpecFormat ); if(!GetRegKey( &m_AutoExpandOptions, _T("Options"), AutoExpandOptions, FALSE )) SetAutoExpandOptions( m_AutoExpandOptions ); if(!GetRegKey( &m_LabelFilesInDialog, _T("Options"), LabelFilesInDialog, TRUE )) SetLabelFilesInDialog( m_LabelFilesInDialog ); if(!GetRegKey( &m_LabelShowPreviewDetail, _T("Options"), LabelShowPreviewDetail, FALSE )) SetLabelShowPreviewDetail( m_LabelShowPreviewDetail ); if(!GetRegKey( &m_Diff2InDialog, _T("Options"), Diff2InDialog, TRUE )) SetDiff2InDialog( m_Diff2InDialog ); if(!GetRegKey( &m_AutoTreeExpand, _T("Options"), AutoTreeExpand, FALSE )) SetAutoTreeExpand( m_AutoTreeExpand ); if(!GetRegKey( &m_UseNotepad4WarnAndErr, _T("Options"), UseNotepad4WarnAndErr, FALSE )) SetUseNotepad4WarnAndErr( m_UseNotepad4WarnAndErr ); if(!GetRegKey( &m_Cvt2ValComboToChkBx, _T("Options"), Cvt2ValComboToChkBx, FALSE )) SetCvt2ValComboToChkBx( m_Cvt2ValComboToChkBx ); if(!GetRegKey( &m_IconsInMenus, _T("Options"), IconsInMenus, TRUE )) SetIconsInMenus( m_IconsInMenus ); if(!GetRegKey( &m_ExpandChgLists, _T("Options"), ExpandChgLists, TRUE )) SetExpandChgLists( m_ExpandChgLists ); if(!GetRegKey( &m_ReExpandChgs, _T("Options"), ReExpandChgs, FALSE )) SetReExpandChgs( m_ReExpandChgs ); if(!GetRegKey( &m_EnableSubChgIntegFilter, _T("Options"), EnableSubChgIntegFilter, TRUE )) SetEnableSubChgIntegFilter( m_EnableSubChgIntegFilter ); if(!GetRegKey( &m_EnableRevHistShowIntegs, _T("Options"), EnableRevHistShowIntegs, TRUE )) SetEnableRevHistShowIntegs( m_EnableRevHistShowIntegs ); if(!GetRegKey( &m_EnablePendingChgsOtherClients, _T("Options"), EnablePendingChgsOtherClients, TRUE )) SetEnablePendingChgsOtherClients( m_EnablePendingChgsOtherClients ); if(!GetRegKey( &m_AddFilterExclude, _T("Options"), AddFilterExclude, -1 )) SetAddFilterExclude( m_AddFilterExclude ); if(!GetRegKey( &m_AutoPoll, _T("Options"), AutoPollServer, TRUE )) SetAutoPoll( m_AutoPoll ); if(!GetRegKey( &m_AutoPollTime, _T("Options"), AutoPollTime, 10 )) SetAutoPollTime( m_AutoPollTime ); if(!GetRegKey( &m_AutoPollIconic, _T("Options"), AutoPollIconic, FALSE )) SetAutoPollIconic( m_AutoPollIconic ); if(!GetRegKey( &m_AutoPollJobs, _T("Options"), AutoPollJobs, FALSE )) SetAutoPollIconic( m_AutoPollIconic ); if(!GetRegKey( &m_LogoutOnExit, _T("Options"), LogoutOnExit, FALSE )) SetAutoPollIconic( m_AutoPollIconic ); if(!GetRegKey( &m_ClearAndReload, _T("Options"), ClearAndReload, TRUE )) SetClearAndReload( m_ClearAndReload ); if(!GetRegKey( &m_ReloadOnUncover, _T("Options"), ReloadOnUncover, FALSE )) SetReloadOnUncover( m_ReloadOnUncover ); if(!GetRegKey( &m_ReloadUncoverTime, _T("Options"), ReloadUncoverTime, 1 )) SetReloadUncoverTime( m_ReloadUncoverTime ); if(!GetRegKey( &m_ChglistSyncDef, _T("Options"), ChglistSyncDef, 0 )) SetChglistSyncDef( m_ChglistSyncDef ); if(!GetRegKey( &m_FetchChangeCount, _T("Options"), FetchChangeCount, 100 )) SetFetchChangeCount( m_FetchChangeCount ); if(!GetRegKey( &m_FetchAll, _T("Options"), FetchAllChanges, FALSE )) SetFetchAllChanges( m_FetchAll ); if(!GetRegKey( &m_FetchJobCount, _T("Options"), FetchJobCount, 100 )) SetFetchJobCount( m_FetchJobCount ); if(!GetRegKey( &m_FetchAllJobs, _T("Options"), FetchAllJobs, FALSE )) SetFetchAllJobs( m_FetchAllJobs ); if(!GetRegKey( &m_FetchHistCount, _T("Options"), FetchHistCount, 100 )) SetFetchHistCount( m_FetchHistCount ); if(!GetRegKey( &m_FetchAllHist, _T("Options"), FetchAllHist, TRUE )) SetFetchAllHist( m_FetchAllHist ); if(!GetRegKey( &m_FetchCompleteHist, _T("Options"), FetchCompleteHist, 0 )) SetFetchCompleteHist( m_FetchCompleteHist ); if(!GetRegKey( &m_HistListHeight, _T("Options"), HistListHeight, 0 )) SetHistListHeight( m_HistListHeight ); if(!GetRegKey( &m_JobFilterWidth, _T("Options"), JobFilterWidth, 0 )) SetJobFilterWidth( m_JobFilterWidth ); if(!GetRegKey( &m_UseDepotInClientView, _T("Options"), UseDepotInClientView, TRUE )) SetUseDepotInClientView( m_UseDepotInClientView ); if(!GetRegKey( &m_Use256colorIcons, _T("Options"), Use256colorIcons, FALSE )) SetUse256colorIcons( m_Use256colorIcons ); if(!GetRegKey( &m_DontShowYouHaveChgClientView, _T("Options"), DontShowYouHaveChgClientView, FALSE )) SetDontShowYouHaveChgClientView( m_DontShowYouHaveChgClientView ); if(!GetRegKey( &m_DontShowYouHaveCr8NewClient, _T("Options"), DontShowYouHaveCr8NewClient, FALSE )) SetDontShowYouHaveCr8NewClient( m_DontShowYouHaveCr8NewClient ); if(!GetRegKey( &m_DontShowDiscardFormChgs, _T("Options"), DontShowDiscardFormChgs, FALSE )) SetDontShowDiscardFormChgs( m_DontShowDiscardFormChgs ); if(!GetRegKey( m_FontFace, _T("Options"), DlgFontFace, _T(""), LoadStringResource(IDS_DEFAULTFONTNAME) )) SetFontFace( m_FontFace ); if(!GetRegKey( &m_FontSize, _T("Options"), DlgFontSize, _tstoi(LoadStringResource(IDS_DEFAULTFONTSIZE)) )) SetFontSize( m_FontSize ); if(!GetRegKey( &m_IsFontItalic, _T("Options"), DlgFontItalic, FALSE )) SetFontItalic( m_IsFontItalic ); if(!GetRegKey( &m_FontWeight, _T("Options"), DlgFontWeight, FW_NORMAL )) SetFontWeight( m_FontWeight ); if(!GetRegKey( &m_FindFilesWidth, _T("Options"), FindFilesWidth, 0 )) SetFindFilesWidth( m_FindFilesWidth ); if(!GetRegKey( &m_P4StartWith, _T("Options"), P4StartWith, 1 )) SetP4StartWith( m_P4StartWith ); if(!GetRegKey( &m_P4BusyCursor, _T("Options"), P4BusyCursor, TRUE )) SetP4BusyCursor( m_P4BusyCursor ); if(!GetRegKey( &m_CloseAfterFind, _T("Options"), CloseAfterFind, TRUE )) SetCloseAfterFind( m_CloseAfterFind ); if(!GetRegKey( &m_SubmitOnlyChged, _T("Options"), SubmitOnlyChged, FALSE )) SetSubmitOnlyChged( m_SubmitOnlyChged ); if(!GetRegKey( &m_RevertUnchged, _T("Options"), RevertUnchged, FALSE )) SetRevertUnchged( m_RevertUnchged ); if(!GetRegKey( &m_AutoReopen, _T("Options"), AutoReopen, FALSE )) SetAutoReopen( m_AutoReopen ); if(!GetRegKey( &m_FilterPendChgsByMyClient, _T("Options"), FilterPendChgsByMyClient, FALSE )) SetFilterPendChgsByMyClient( m_FilterPendChgsByMyClient ); if(!GetRegKey( m_FilterPendChgsByPath, _T("Options"), FilterPendChgsByPath, _T(""), _T("") )) SetFilterPendChgsByPath( m_FilterPendChgsByPath ); if(!GetRegKey( &m_LabelDragDropOption, _T("Options"), LabelDragDropOption, LDD_MENU )) SetLabelDragDropOption( m_LabelDragDropOption ); if(!GetRegKey( &m_ResolveDefault, _T("Options"), ResolveDefault, 3 )) SetResolveDefault( m_ResolveDefault ); if(!GetRegKey( &m_Resolve2wayDefault, _T("Options"), Resolve2wayDefault, 0 )) SetResolve2wayDefault( m_Resolve2wayDefault ); if(!GetRegKey( &m_Resolve3wayDefault, _T("Options"), Resolve3wayDefault, 2 )) SetResolve3wayDefault( m_Resolve3wayDefault ); if(!GetRegKey( &m_ConvertJobNbr, _T("Options"), ConvertJobNbr, TRUE )) SetConvertJobNbr( m_ConvertJobNbr ); if(!GetRegKey( &m_AllowExceptionReporting, _T("Options"), AllowExceptionReporting, FALSE )) SetAllowExceptionReporting( m_AllowExceptionReporting ); else EnableErrorRecording(m_AllowExceptionReporting == TRUE); if(!GetRegKey( &m_TryResetingFocus, _T("Options"), TryResetingFocus, FALSE )) SetTryResetingFocus( m_TryResetingFocus ); ///////////// // Settings Key if(!GetRegKey( m_AddFileCurDir, _T("Settings"), AddFileCurDir, NULL, _T("") )) SetAddFileCurDir( m_AddFileCurDir ); if(!GetRegKey( m_AddFileExtFilter, _T("Settings"), AddFileExtFilter, NULL, _T("") )) SetAddFileCurDir( m_AddFileExtFilter ); if(!GetRegKey( m_AddFileFilter, _T("Settings"), AddFileFilter, NULL, _T("") )) SetAddFileFilter( m_AddFileFilter ); if(!GetRegKey( &m_AddFileFilterIndex, _T("Settings"), AddFileFilterIndex, 0 )) SetAddFileFilterIndex( m_AddFileFilterIndex ); if(!GetRegKey( &m_DefaultDnDfromExp, _T("Settings"), DefaultDnDfromExp, 2 )) SetDefaultDnDfromExp( m_DefaultDnDfromExp ); if(!GetRegKey( &m_MultiProcessorSleep, _T("Settings"), MultiProcessorSleep, 0 )) SetMultiProcessorSleep( m_MultiProcessorSleep ); if(!GetRegKey( &m_MaxStatusLines, _T("Settings"), MaxStatusLines, 5000 )) SetMaxStatusLines( m_MaxStatusLines ); if(!GetRegKey( &m_ShowStatusMsgs, _T("Settings"), ShowStatusMsgs, TRUE )) SetShowStatusMsgs( m_ShowStatusMsgs ); if(!GetRegKey( &m_ShowTruncTooltip, _T("Settings"), ShowTruncTooltip, TRUE )) SetShowTruncTooltip( m_ShowTruncTooltip ); if(!GetRegKey( &m_DontThreadDiffs, _T("Settings"), DontThreadDiffs, FALSE )) SetDontThreadDiffs( m_DontThreadDiffs ); if(!GetRegKey( m_PendChgExpansion, _T("Settings"), PendChgExpansion, NULL, _T("0") )) SetPendChgExpansion( m_PendChgExpansion ); if(!GetRegKey( m_LastBranch, _T("Settings"), LastBranch, NULL, _T("") )) SetLastBranch( m_LastBranch ); if(!GetRegKey( m_LastLabel, _T("Settings"), LastLabel, NULL, _T("") )) SetLastLabel( m_LastLabel ); if(!GetRegKey( m_LastTemplate, _T("Settings"), LastTemplate, NULL, _T("") )) SetLastTemplate( m_LastTemplate ); if(!GetRegKey( m_LocalCliTemplate, _T("Settings"), LocalCliTemplate, NULL, _T("") )) SetLocalCliTemplate( m_LocalCliTemplate ); if(!GetRegKey( &m_LocalCliTemplateSw, _T("Settings"), LocalCliTemplateSw, FALSE )) SetLocalCliTemplateSw( m_LocalCliTemplateSw ); if(!GetRegKey( &m_UseClientSpecSubmitOpts, _T("Settings"), UseClientSpecSubmitOpts, FALSE )) SetUseClientSpecSubmitOpts( m_UseClientSpecSubmitOpts ); if(!GetRegKey( &m_SwapButtonPosition, _T("Settings"), SwapButtonPosition, FALSE )) SetSwapButtonPosition( m_SwapButtonPosition ); if(!GetRegKey( &m_BranchFilteredFlags, _T("Settings"), BranchFilteredFlags, 0 )) SetBranchFilteredFlags( m_BranchFilteredFlags ); if(!GetRegKey( m_BranchFilterOwner, _T("Settings"), BranchFilterOwner, NULL, _T("") )) SetBranchFilterOwner( m_BranchFilterOwner ); if(!GetRegKey( &m_ClientFilteredFlags, _T("Settings"), ClientFilteredFlags, 0 )) SetClientFilteredFlags( m_ClientFilteredFlags ); if(!GetRegKey( m_ClientFilterOwner, _T("Settings"), ClientFilterOwner, NULL, _T("") )) SetClientFilterOwner( m_ClientFilterOwner ); if(!GetRegKey( m_ClientFilterHost, _T("Settings"), ClientFilterHost, NULL, _T("") )) { SetClientFilterHost( m_ClientFilterHost ); m_NoCliHost = TRUE; } if(!GetRegKey( m_ClientFilterDesc, _T("Settings"), ClientFilterDesc, NULL, _T("") )) SetClientFilterDesc( m_ClientFilterDesc ); ///////////// // Layout Key // Any error reading or parsing the frame position leave position as 0,0,0,0 CString temp; if(!GetRegKey( temp, _T("Layout"), WindowPosition, NULL, _T("0,0,0,0") )) SetWindowPosition(CRect(0,0,0,0)); int left= GetPositiveNumber(temp); int top= GetPositiveNumber(temp); int width= GetPositiveNumber(temp); int height= GetPositiveNumber(temp); m_WindowPosition= CRect(left, top, left+width, top+height); if(!GetRegKey( &m_Iconic, _T("Layout"), WindowIconic, FALSE )) SetWindowIconic( m_Iconic ); if(!GetRegKey( &m_Maximized, _T("Layout"), WindowRestoreMaximized, FALSE )) SetWindowMaximized( m_Maximized ); if(!GetRegKey( &m_HSplitterPosition, _T("Layout"), HorizontalSplitter, 0 )) SetHSplitterPosition( m_HSplitterPosition ); if(!GetRegKey( &m_VSplitterPosition, _T("Layout"), VerticalSplitter, 0 )) SetVSplitterPosition( m_VSplitterPosition ); ///////////// // Bookmarks Key CString keyName; int i; for(i=0; i < MAX_BOOKMARKS; i++) { keyName.Format(_T("MenuName%d"), i); GetRegKey( m_BkMkMenuName[i], _T("Bookmarks"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_BOOKMARKS; i++) { keyName.Format(_T("IsSubMenu%d"), i); GetRegKey( &m_BkMkIsSubMenu[i], _T("Bookmarks"), keyName, FALSE ); } ///////////// // Favorites Key for(i=0; i < MAX_FAVORITES; i++) { keyName.Format(_T("MenuName%d"), i); GetRegKey( m_FavMenuName[i], _T("Favorites"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_FAVORITES; i++) { keyName.Format(_T("IsSubMenu%d"), i); GetRegKey( &m_FavIsSubMenu[i], _T("Favorites"), keyName, FALSE ); } ///////////// // Tools Key for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("MenuName%d"), i); GetRegKey( m_ToolMenuName[i], _T("Tools"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("Command%d"), i); GetRegKey( m_ToolCommand[i], _T("Tools"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("Arguments%d"), i); GetRegKey( m_ToolArgs[i], _T("Tools"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("InitialDirectory%d"), i); GetRegKey( m_ToolInitDir[i], _T("Tools"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("PromptText%d"), i); GetRegKey( m_ToolPromptText[i], _T("Tools"), keyName, _T(""), _T("") ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsConsole%d"), i); GetRegKey( &m_ToolIsConsole[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsPrompt%d"), i); GetRegKey( &m_ToolIsPrompt[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsOutput2Status%d"), i); GetRegKey( &m_ToolIsOutput2Status[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsCloseOnExit%d"), i); GetRegKey( &m_ToolIsCloseOnExit[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsShowBrowse%d"), i); GetRegKey( &m_ToolIsShowBrowse[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsRefresh%d"), i); GetRegKey( &m_ToolIsRefresh[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("OnContext%d"), i); GetRegKey( &m_ToolOnContext[i], _T("Tools"), keyName, FALSE ); } for(i=0; i < MAX_TOOLS; i++) { keyName.Format(_T("IsSubMenu%d"), i); GetRegKey( &m_ToolIsSubMenu[i], _T("Tools"), keyName, FALSE ); } ///////////// // MRU Tool Arguments for(i=0; i < MAX_MRU_TOOLARGS; i++) { keyName.Format(_T("Arg%d"), i); GetRegKey( m_MRUToolArg[i], RecentToolArgList, keyName, _T(""), _T("") ); } ///////////// // MRU Find Strings for(i=0; i < MAX_MRU_FINDSTRS; i++) { keyName.Format(_T("FindStr%d"), i); GetRegKey( m_MRUFindStr[i], RecentFindStrList, keyName, _T(""), _T("") ); } ///////////// // MRU Viewers for(i=0; i < MAX_MRU_VIEWERS; i++) { keyName.Format(_T("File%d"), i); GetRegKey( m_MRUViewer[i], RecentViewerList, keyName, _T(""), _T("") ); } ///////////// // MRU Job Filters for(i=0; i < MAX_MRU_FILTERS; i++) { keyName.Format(_T("Filter%d"), i); GetRegKey( m_MRUFilter[i], RecentFilterList, keyName, _T(""), _T("") ); } ///////////// // MRU Submitted Changelist Filters for(i=0; i < MAX_MRU_FILTERS; i++) { keyName.Format(_T("Filter%d"), i); GetRegKey( m_MRUChgFilter[i], RecentChgFilterList, keyName, _T(""), _T("") ); } ///////////// // MRU Ports & Associated Charsets for(i=0; i < MAX_MRU_PORTS; i++) { keyName.Format(_T("Port%d"), i); GetRegKey( m_MRUPort[i], RecentPortList, keyName, _T(""), _T("") ); keyName.Format(_T("Charset%d"), i); GetRegKey( m_MRUPortCharset[i], RecentPortList, keyName, _T(""), _T("") ); } ///////////// // MRU Charsets for(i=0; i < MAX_MRU_CHARSETS; i++) { keyName.Format(_T("Charset%d"), i); GetRegKey( m_MRUCharset[i], RecentCharsetList, keyName, _T(""), m_DefCharset[i] ); } ///////////// // MRU PCUs for(i=0; i < MAX_MRU_PCUS; i++) { keyName.Format(_T("PCU%d"), i); GetRegKey( m_MRUPcu[i], RecentPcuList, keyName, _T(""), _T("") ); } if (m_P4StartWith == 0) { int j; CString mru = m_MRUPcu[0]; if ((j = mru.Find(_T('@'))) > 0) mru = mru.Left(j); // find the separators (spaces) int firstsep = mru.Find(_T(' ')); int secondsep= mru.Find(_T(' '), firstsep+1); // set the 3 port, client and user edit controls if (firstsep > 0 && secondsep > 0) { m_P4Port_Temp = mru.Left(firstsep); m_P4Client_Temp = mru.Mid(firstsep+1, secondsep - firstsep - 1); m_P4User_Temp = mru.Right(mru.GetLength() - secondsep - 1); } SetMyID(); } ///////////// // File Associations ReadAssociationList(); ///////////// // File Associations ReadDiffAssocList(); ReadMergeAssocList(); m_AttemptedRead=TRUE; return(TRUE); } /* _________________________________________________________________ */ CString CP4Registry::GetPasswordfromReg( ) { HKEY hKey = NULL; CString sKey = _T("Software\\Perforce\\environment"); static TCHAR szTag[ ] = _T("P4PASSWD"); CString sPassword; TCHAR szValue[ SIZE_REG_VALUE + 1 ]; DWORD cbData = sizeof(szValue); DWORD type = 0; if ( RegOpenKeyEx( HKEY_CURRENT_USER, sKey, 0, KEY_QUERY_VALUE, &hKey ) != ERROR_SUCCESS ) goto outreg; if ( RegQueryValueEx( hKey, szTag, NULL, &type , ( LPBYTE ) szValue, &cbData ) != ERROR_SUCCESS ) goto outreg; // end value with a NULL since RegQueryValueEx can return any datatype // szValue[ cbData / sizeof(TCHAR) ] = _T('\0'); sPassword = szValue; outreg: if ( hKey ) RegCloseKey( hKey ); // in case some nimrod uses env variable instead ... // if ( sPassword.IsEmpty() ) { GetEnvironmentVariable( szTag, szValue, SIZE_REG_VALUE ); sPassword = szValue; } return sPassword; } /* _________________________________________________________________ */ void CP4Registry::ReadAssociationList() { // Make sure the list is empty m_AssocViewers.RemoveAll(); // Rummage for entries, which have names like 'cpp' and data fields that are appnames HKEY key; long success= RegOpenKeyEx( HKEY_CURRENT_USER, _T("Software\\Perforce\\P4Win\\Associations"), 0, KEY_READ, &key); if(success == ERROR_SUCCESS) { int i; for(i=0; success == ERROR_SUCCESS; i++) { TCHAR valueName[LONGPATH]; DWORD valueNameLen= LONGPATH; TCHAR buf[LONGPATH]; DWORD bufLen= LONGPATH; DWORD valueType; success= RegEnumValue( key, i, valueName, &valueNameLen, NULL, &valueType, (LPBYTE)buf, &bufLen); if(success == ERROR_SUCCESS && valueType == REG_SZ && bufLen) { lstrcat(valueName, _T("|")); lstrcat(valueName, buf); m_AssocViewers.AddHead(valueName); } } RegCloseKey(key); } } void CP4Registry::ReadDiffAssocList() { // Make sure the list is empty m_AssocDiffs.RemoveAll(); // Rummage for entries, which have names like 'cpp' and data fields that are appnames HKEY key; long success= RegOpenKeyEx( HKEY_CURRENT_USER, _T("Software\\Perforce\\P4Win\\DiffAssocs"), 0, KEY_READ, &key); if(success == ERROR_SUCCESS) { int i; for(i=0; success == ERROR_SUCCESS; i++) { TCHAR valueName[LONGPATH]; DWORD valueNameLen= LONGPATH; TCHAR buf[LONGPATH]; DWORD bufLen= LONGPATH; DWORD valueType; success= RegEnumValue( key, i, valueName, &valueNameLen, NULL, &valueType, (LPBYTE)buf, &bufLen); if(success == ERROR_SUCCESS && valueType == REG_SZ && bufLen) { lstrcat(valueName, _T("|")); lstrcat(valueName, buf); m_AssocDiffs.AddHead(valueName); } } RegCloseKey(key); } } void CP4Registry::ReadMergeAssocList() { // Make sure the list is empty m_AssocMerges.RemoveAll(); // Rummage for entries, which have names like 'cpp' and data fields that are appnames HKEY key; long success= RegOpenKeyEx( HKEY_CURRENT_USER, _T("Software\\Perforce\\P4Win\\MergeAssocs"), 0, KEY_READ, &key); if(success == ERROR_SUCCESS) { int i; for(i=0; success == ERROR_SUCCESS; i++) { TCHAR valueName[LONGPATH]; DWORD valueNameLen= LONGPATH; TCHAR buf[LONGPATH]; DWORD bufLen= LONGPATH; DWORD valueType; success= RegEnumValue( key, i, valueName, &valueNameLen, NULL, &valueType, (LPBYTE)buf, &bufLen); if(success == ERROR_SUCCESS && valueType == REG_SZ && bufLen) { lstrcat(valueName, _T("|")); lstrcat(valueName, buf); m_AssocMerges.AddHead(valueName); } } RegCloseKey(key); } } BOOL CP4Registry::GetRegKey(CString& str, LPCTSTR section, LPCTSTR entry, LPCTSTR envVarName, LPCTSTR defaultValue) { ASSERT(defaultValue != NULL); ASSERT(section != NULL); ASSERT(entry != NULL); BOOL foundIt=TRUE; TCHAR buf[256]; int buflen=255; // First search the registry str=AfxGetApp()->GetProfileString(section, entry); if(str.GetLength()==0) { foundIt=FALSE; // Its not in registry, so check the environment variable if(envVarName != NULL && GetEnvironmentVariable(envVarName, buf, buflen)>0) str=buf; else { // if no environment variable, use the default str=defaultValue; } } return foundIt; } BOOL CP4Registry::GetRegKey(BOOL *num, LPCTSTR section, LPCTSTR entry, BOOL defaultValue) { long lNum; BOOL success=GetRegKey(&lNum, section, entry, (long) defaultValue); *num=(BOOL) lNum; return success; } BOOL CP4Registry::GetRegKey(long *num, LPCTSTR section, LPCTSTR entry, long defaultValue) { ASSERT(section[0] != _T('\0')); ASSERT(entry[0] != _T('\0')); BOOL foundIt=TRUE; // First search the registry CString str=AfxGetApp()->GetProfileString(section, entry); if(str.GetLength()==0) { foundIt=FALSE; *num=defaultValue; } else { *num=_ttol(str); if(*num >= 10000000 || *num < 0) // Assume some 8-ball was hand-editing registry { foundIt=FALSE; *num = 100; } } return foundIt; } BOOL CP4Registry::SetRegKey( CString& str, LPCTSTR section, LPCTSTR entry) { if(AfxGetApp()->WriteProfileString(section, entry, str)) return TRUE; else return FALSE; } BOOL CP4Registry::DelRegKey( LPCTSTR section, LPCTSTR entry) { if(AfxGetApp()->WriteProfileString(section, entry, NULL)) return TRUE; else return FALSE; } LPCTSTR CP4Registry::GetP4Port( BOOL permanent /*=FALSE*/ ) { ASSERT( m_AttemptedRead ); if ( permanent ) return m_P4Port_Perm; else if( m_P4Port_Temp.GetLength() ) return m_P4Port_Temp; else return m_P4Port_Perm; } LPCTSTR CP4Registry::GetP4User( BOOL permanent /*=FALSE*/ ) { ASSERT( m_AttemptedRead ); if ( permanent ) { CString defUser = CGuiClient::GetUserStr(); if (m_P4User_Perm.Compare(defUser)) { if(!m_P4User_Temp.GetLength()) m_P4User_Temp = m_P4User_Perm; m_P4User_Perm = defUser; } return m_P4User_Perm; } else if( m_P4User_Temp.GetLength() ) return m_P4User_Temp; else return m_P4User_Perm; } LPCTSTR CP4Registry::GetP4Client( BOOL permanent /*=FALSE*/ ) { ASSERT( m_AttemptedRead ); if ( permanent ) { CString defclient = CGuiClient::GetClientStr(); if (m_P4Client_Perm.Compare(defclient)) { if(!m_P4Client_Temp.GetLength()) m_P4Client_Temp = m_P4Client_Perm; m_P4Client_Perm = defclient; } return m_P4Client_Perm; } else if( m_P4Client_Temp.GetLength() ) return m_P4Client_Temp; else return m_P4Client_Perm; } LPCTSTR CP4Registry::GetP4UserPassword( BOOL permanent /*=FALSE*/ ) { ASSERT( m_AttemptedRead ); if ( permanent ) return m_P4Password_Perm; else if( m_P4Password_Temp.GetLength() ) return m_P4Password_Temp; else return m_P4Password_Perm; } LPCTSTR CP4Registry::GetP4Charset( BOOL permanent /*=FALSE*/ ) { ASSERT( m_AttemptedRead ); if ( permanent ) return m_P4Charset_Perm == NONE ? _T("") : m_P4Charset_Perm; else if( m_P4Charset_Temp.GetLength() ) return m_P4Charset_Temp == NONE ? _T("") : m_P4Charset_Temp; else return m_P4Charset_Perm == NONE ? _T("") : m_P4Charset_Perm; } BOOL CP4Registry::SetP4Port(LPCTSTR port, BOOL temporary, BOOL permanent, BOOL writetoreg) { bool success = true; if (lstrcmp(GetP4Port(), port)) { CMainFrame * mainWnd = (CMainFrame *)AfxGetMainWnd(); if (mainWnd) ::SendMessage(mainWnd->m_hWnd, WM_COMMAND, ID_VIEW_CLOSEDIALOGS, 0); } if(permanent) { // Use this to keep a copy of the input // since it might get reset by m_P4Port_Temp.Empty(); CString portIn = port; if (writetoreg) success = CGuiClient::DefinePort(port); // If the permanent value changed and we do not as-yet have an over-ride, // turn the old value into a temporary over-ride. This avoids problems // if a user is tinkering with the registry while the app is running if( !temporary && !m_P4Port_Perm.IsEmpty() && m_P4Port_Temp.IsEmpty()) m_P4Port_Temp= m_P4Port_Perm; else if( temporary || ((m_P4Port_Temp.Compare(port) == 0) && (m_P4Port_Perm.Compare(port) == 0)) ) m_P4Port_Temp.Empty(); if (writetoreg || m_P4Port_Perm.IsEmpty()) m_P4Port_Perm = portIn; } else { // Only store m_P4Port_Temp if it is different than the permanent registry // setting for P4PORT if( m_P4Port_Perm.Compare( port ) == 0 ) m_P4Port_Temp.Empty(); else m_P4Port_Temp= port; } if (success && !m_bCharsetFromCmdli && (!permanent || !m_P4Port_Temp.GetLength()) ) { int i; for(i=0; i < MAX_MRU_PORTS; i++) { m_MRUPort[i].TrimRight(); if(m_MRUPort[i].GetLength() > 0 && m_MRUPort[i].Compare(port) == 0) { SetP4Charset(m_MRUPortCharset[i], TRUE, FALSE, FALSE); break; } } AddMRUPort( port, GetP4Charset() ); } else m_bCharsetFromCmdli = FALSE; return success; } BOOL CP4Registry::SetP4User(LPCTSTR user, BOOL temporary, BOOL permanent, BOOL writetoreg) { // Use this to keep a copy of the input // since it might get reset by m_P4User_Temp.Empty(); CString userIn = user; BOOL success = TRUE; if(permanent) { if (writetoreg) { if (!m_P4User_Perm.IsEmpty()) m_P4User_PrevDef = m_P4User_Perm; // save the old value in the registry in case of a failure // due to having a P4CONFIG or SET value that overrides HKEY hKey = NULL; CString sKey = _T("Software\\Perforce\\environment\\"); DWORD type = REG_SZ; DWORD disposition; TCHAR saveRegUser[260]; LONG rc; if ( (rc = RegCreateKeyEx( HKEY_CURRENT_USER, sKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE, NULL, &hKey, &disposition )) == ERROR_SUCCESS ) { disposition = sizeof(saveRegUser); if ((rc = RegQueryValueEx( hKey, _T("P4USER"), NULL, &type, (LPBYTE)saveRegUser, &disposition)) != ERROR_SUCCESS ) saveRegUser[0] = _T('\0'); } if (rc != ERROR_SUCCESS ) RegWriteFailed(rc); // use the api to write it to the registry success = CGuiClient::DefineUser(userIn); if (success) { // make sure the value written is now the value that will be used CString defUser = CGuiClient::GetUserStr(); if (userIn != defUser) { // If we get here, there is a P4CONFIG // or a Enviroment setting overriding. // So set this 'real' value as the permanent value, // then because of possible side effects, // set the value passed in as the temporary value. SetP4User(defUser, temporary, TRUE, FALSE); if (temporary) SetP4User(userIn, TRUE, FALSE, FALSE); // Now because we messed up the registry with the call // CGuiClient::DefineUser(userIn), we have to restore // the original registry value from above (saveRegUser). RegSetValueEx(hKey, _T("P4USER"), NULL, REG_SZ, (LPBYTE)saveRegUser, lstrlen(saveRegUser)*sizeof(TCHAR)+1); RegCloseKey( hKey ); // Finally indicate failure. return FALSE; } } RegCloseKey( hKey ); } // If the permanent value changed and we do not as-yet have an over-ride, // turn the old value into a temporary over-ride. This avoids problems // if a user is tinkering with the registry while the app is running if( !temporary && !m_P4User_Perm.IsEmpty() && m_P4User_Temp.IsEmpty()) m_P4User_Temp= m_P4User_Perm; else if( temporary || ((m_P4User_Temp.Compare(userIn) == 0) && (m_P4User_Perm.Compare(userIn) == 0)) ) m_P4User_Temp.Empty(); if (writetoreg || m_P4User_Perm.IsEmpty()) m_P4User_Perm= userIn; } else { // Only store m_P4User_Temp if it is different than the permanent registry // setting for P4USER if( m_P4User_Perm.Compare( userIn ) == 0 ) m_P4User_Temp.Empty(); else m_P4User_Temp= userIn; } if (m_P4User_Prev.IsEmpty()) m_P4User_Prev = _T("@"); if (m_P4User_Prev != userIn) { CMainFrame * mainWnd = (CMainFrame *)AfxGetMainWnd(); if (mainWnd) ::PostMessage(mainWnd->m_hWnd, WM_NEWUSER, 0, 0); m_P4User_Prev = userIn; SetP4Password( _T(""), TRUE, FALSE, FALSE ); } if (m_P4User_PrevDef.IsEmpty()) m_P4User_PrevDef = _T("@"); if (writetoreg && m_P4User_PrevDef != userIn) { CMainFrame * mainWnd = (CMainFrame *)AfxGetMainWnd(); if (mainWnd) ::PostMessage(mainWnd->m_hWnd, WM_NEWUSER, 1, 0); m_P4User_PrevDef = userIn; } SetMyID(); return success; } BOOL CP4Registry::SetP4Client(LPCTSTR client, BOOL temporary, BOOL permanent, BOOL writetoreg) { // Use this to keep a copy of the input // since it might get reset by m_P4Client_Temp.Empty(); CString clientIn = client; BOOL success = TRUE; if( permanent ) { if (writetoreg) { if (!m_P4Client_Perm.IsEmpty()) m_P4Client_PrevDef = m_P4Client_Perm; // save the old value in the registry in case of a failure // due to having a P4CONFIG or SET value that overrides HKEY hKey = NULL; CString sKey = _T("Software\\Perforce\\environment\\"); DWORD type = REG_SZ; DWORD disposition; TCHAR saveRegClient[260]; LONG rc; if ( (rc = RegCreateKeyEx( HKEY_CURRENT_USER, sKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE, NULL, &hKey, &disposition )) == ERROR_SUCCESS ) { disposition = sizeof(saveRegClient); if ((rc = RegQueryValueEx( hKey, _T("P4CLIENT"), NULL, &type, (LPBYTE)saveRegClient, &disposition)) != ERROR_SUCCESS ) saveRegClient[0] = _T('\0'); } if (rc != ERROR_SUCCESS ) RegWriteFailed(rc); // use the api to write it to the registry success = CGuiClient::DefineClient(clientIn); if (success) { // make sure the value written is now the value that will be used CString defClient = CGuiClient::GetClientStr(); if (clientIn != defClient) { // If we get here, there is a P4CONFIG // or a Enviroment setting overriding. // So set this 'real' value as the permanent value, // then because of possible side effects, // set the value passed in as the temporary value. SetP4Client(defClient, temporary, TRUE, FALSE); if (temporary) SetP4Client(clientIn, TRUE, FALSE, FALSE); // Now because we messed up the registry with the call // CGuiClient::DefineClient(clientIn), we have to restore // the original registry value from above (saveRegClient). RegSetValueEx(hKey, _T("P4CLIENT"), NULL, REG_SZ, (LPBYTE)saveRegClient, lstrlen(saveRegClient)*sizeof(TCHAR)+1); RegCloseKey( hKey ); // Finally indicate failure. return FALSE; } } RegCloseKey( hKey ); } // If the permanent value changed and we do not as-yet have an over-ride, // turn the old value into a temporary over-ride. This avoids problems // if a user is tinkering with the registry while the app is running if( !temporary && !m_P4Client_Perm.IsEmpty() && m_P4Client_Temp.IsEmpty()) m_P4Client_Temp= m_P4Client_Perm; else if( temporary || ((m_P4Client_Temp.Compare(clientIn) == 0) && (m_P4Client_Perm.Compare(clientIn) == 0)) ) m_P4Client_Temp.Empty(); if (writetoreg || m_P4Client_Perm.IsEmpty()) m_P4Client_Perm = clientIn; } else { // Only store m_P4Client_Temp if it is different than the permanent registry // setting for P4CLIENT if( m_P4Client_Perm.Compare( clientIn ) == 0 ) m_P4Client_Temp.Empty(); else m_P4Client_Temp= clientIn; } if (m_P4Client_Prev.IsEmpty()) m_P4Client_Prev = _T("@"); if (m_P4Client_Prev != clientIn) { CMainFrame * mainWnd = (CMainFrame *)AfxGetMainWnd(); if (mainWnd) ::PostMessage(mainWnd->m_hWnd, WM_NEWCLIENT, 0, 0); m_P4Client_Prev = clientIn; } if (m_P4Client_PrevDef.IsEmpty()) m_P4Client_PrevDef = _T("@"); if (writetoreg && m_P4Client_PrevDef != clientIn) { CMainFrame * mainWnd = (CMainFrame *)AfxGetMainWnd(); if (mainWnd) ::PostMessage(mainWnd->m_hWnd, WM_NEWCLIENT, 1, 0); m_P4Client_PrevDef = clientIn; } SetMyID(); return success; } BOOL CP4Registry::SetP4Password(LPCTSTR password, BOOL temporary, BOOL permanent, BOOL writetoreg) { bool success = true; if(permanent) { // Use this to keep a copy of the input // since it might get reset by m_P4Password_Temp.Empty(); CString passwordIn = password; if (writetoreg) success = CGuiClient::DefinePassword(password); // If the permanent value changed and we do not as-yet have an over-ride, // turn the old value into a temporary over-ride. This avoids problems // if a user is tinkering with the registry while the app is running if( !temporary && !m_P4Password_Perm.IsEmpty() && m_P4Password_Temp.IsEmpty()) m_P4Password_Temp= m_P4Password_Perm; else if( temporary || ((m_P4Password_Temp.Compare(password) == 0) && (m_P4Password_Perm.Compare(password) == 0)) ) m_P4Password_Temp.Empty(); if (writetoreg || m_P4Password_Perm.IsEmpty()) m_P4Password_Perm = passwordIn; } else { // Only store m_P4Password_Temp if it is different than the permanent registry // setting for P4PASSWORD if( m_P4Password_Perm.Compare( password ) == 0 ) m_P4Password_Temp.Empty(); else m_P4Password_Temp= password; } return success; } BOOL CP4Registry::SetP4Charset(LPCTSTR charset, BOOL temporary, BOOL permanent, BOOL writetoreg) { bool success = true; m_bCharsetFromCmdli = FALSE; if(permanent) { if (writetoreg) success = CGuiClient::DefineCharset(charset); if (!*charset) charset = NONE; // Use this to keep a copy of the input // since it might get reset by m_P4Charset_Temp.Empty(); CString charsetIn = charset; // If the permanent value changed and we do not as-yet have an over-ride, // turn the old value into a temporary over-ride. This avoids problems // if a user is tinkering with the registry while the app is running if( !temporary && !m_P4Charset_Perm.IsEmpty() && m_P4Charset_Temp.IsEmpty()) m_P4Charset_Temp= m_P4Charset_Perm; else if( temporary || ((m_P4Charset_Temp.Compare(charset) == 0) && (m_P4Charset_Perm.Compare(charset) == 0)) ) m_P4Charset_Temp.Empty(); if (writetoreg || m_P4Charset_Perm.IsEmpty()) m_P4Charset_Perm = charsetIn; } else { if (!*charset) charset = NONE; // Only store m_P4Charset_Temp if it is different than the permanent registry // setting for P4CHARSET if( m_P4Charset_Perm.Compare( charset ) == 0 ) m_P4Charset_Temp.Empty(); else m_P4Charset_Temp= charset; } AddMRUPort( GetP4Port(), charset ); return success; } void CP4Registry::SetMyID() { if(m_P4User_Temp.GetLength()) m_MyID= m_P4User_Temp + _T("@"); else m_MyID= m_P4User_Perm + _T("@"); if(m_P4Client_Temp.GetLength()) m_MyID+= m_P4Client_Temp; else m_MyID+= m_P4Client_Perm; } void CP4Registry::SetHostname(CString& hostname) { m_Hostname = hostname; if (m_NoCliHost && m_ClientFilterHost.IsEmpty()) { SetClientFilterHost(hostname); m_NoCliHost = FALSE; } } /////////////////////////////////////////////////////////////// // Options Keys /////////////////////////////////////////////////////////////// BOOL CP4Registry::SetEditApp(LPCTSTR appPath) { m_EditApp=appPath; return SetRegKey( m_EditApp, _T("Options"), _T("EditApp") ); } BOOL CP4Registry::SetTabWidth(int tabWidth) { CString str; str.Format(_T("%d"), tabWidth); m_TabWidth=tabWidth; return SetRegKey( str, _T("Options"), _T("TabWidth") ); } BOOL CP4Registry::SetWhtSpFlag(int whtSpFlag) { CString str; str.Format(_T("%d"), whtSpFlag); m_WhtSpFlag=whtSpFlag; return SetRegKey( str, _T("Options"), _T("WhtSpFlag") ); } BOOL CP4Registry::SetDiffApp(LPCTSTR appPath) { m_DiffApp=appPath; return SetRegKey( m_DiffApp, _T("Options"), _T("DiffApp") ); } BOOL CP4Registry::SetDiffOptArgs(LPCTSTR optAprg) { m_DiffOptArgs=optAprg; return SetRegKey( m_DiffOptArgs, _T("Options"), _T("DiffOptArgs") ); } BOOL CP4Registry::SetMrgTabWidth(int mrgTabWidth) { CString str; str.Format(_T("%d"), mrgTabWidth); m_MrgTabWidth=mrgTabWidth; return SetRegKey( str, _T("Options"), _T("MrgTabWidth") ); } BOOL CP4Registry::SetMrgWhtSpFlag(int whtSpFlag) { CString str; str.Format(_T("%d"), whtSpFlag); m_MrgWhtSpFlag=whtSpFlag; return SetRegKey( str, _T("Options"), _T("MrgWhtSpFlag") ); } BOOL CP4Registry::SetMergeApp(LPCTSTR appPath) { m_MergeApp=appPath; return SetRegKey( m_MergeApp, _T("Options"), _T("MergeApp") ); } BOOL CP4Registry::SetMergeOptArgs(LPCTSTR optAprg) { m_MergeOptArgs=optAprg; return SetRegKey( m_MergeOptArgs, _T("Options"), _T("MergeOptArgs") ); } BOOL CP4Registry::SetAnnotateWhtSpace(int whtSpFlag) { CString str; str.Format(_T("%d"), whtSpFlag); m_AnnotateWhtSpace=whtSpFlag; return SetRegKey( str, _T("Options"), _T("AnnotateWhtSpace") ); } BOOL CP4Registry::SetAnnotateIncInteg(int incIntegFlag) { CString str; str.Format(_T("%d"), incIntegFlag); m_AnnotateIncInteg=incIntegFlag; return SetRegKey( str, _T("Options"), _T("AnnotateIncInteg") ); } BOOL CP4Registry::SetTLVWhtSpace(int whtSpFlag) { CString str; str.Format(_T("%d"), whtSpFlag); m_TLVWhtSpace=whtSpFlag; return SetRegKey( str, _T("Options"), _T("TLVWhtSpace") ); } BOOL CP4Registry::SetResolveWhtSp(int whtSpFlag) { CString str; str.Format(_T("%d"), whtSpFlag); m_ResolveWhtSp=whtSpFlag; return SetRegKey( str, _T("Options"), _T("ResolveWhtSp") ); } BOOL CP4Registry::SetTLVIncInteg(int incIntegFlag) { CString str; str.Format(_T("%d"), incIntegFlag); m_TLVIncInteg=incIntegFlag; return SetRegKey( str, _T("Options"), _T("TLVIncInteg") ); } BOOL CP4Registry::SetUseTempForView(int useTempForView) { CString str; str.Format(_T("%ld"), (long) useTempForView); m_UseTempForView=useTempForView; return SetRegKey( str, _T("Options"), UseTempForView ); } BOOL CP4Registry::SetUseTempForExts(LPCTSTR useTempForExts) { m_UseTempForExts=useTempForExts; return SetRegKey( m_UseTempForExts, _T("Options"), UseTempForExts ); } BOOL CP4Registry::SetEditAppIsConsole(BOOL isConsole) { CString str; str.Format(_T("%ld"), (long) isConsole); m_EditAppIsConsole=isConsole; return SetRegKey( str, _T("Options"), EditAppIsConsole ); } BOOL CP4Registry::SetDiffAppIsConsole(BOOL isConsole) { CString str; str.Format(_T("%ld"), (long) isConsole); m_DiffAppIsConsole=isConsole; return SetRegKey( str, _T("Options"), DiffAppIsConsole ); } BOOL CP4Registry::SetDiffAppIsClose(BOOL isClose) { CString str; str.Format(_T("%ld"), (long) isClose); m_DiffAppIsClose=isClose; return SetRegKey( str, _T("Options"), DiffAppIsClose ); } BOOL CP4Registry::SetDiffAppIsBinary(BOOL isBinary) { CString str; str.Format(_T("%ld"), (long) isBinary); m_DiffAppIsBinary=isBinary; return SetRegKey( str, _T("Options"), DiffAppIsBinary ); } int CP4Registry::SetDiffInternal(BOOL isInternal) { CString str; str.Format(_T("%ld"), (long) isInternal); m_DiffInternal=isInternal; return SetRegKey( str, _T("Options"), DiffInternal ); } BOOL CP4Registry::SetDiffOptArgChk(BOOL isOptArg) { CString str; str.Format(_T("%ld"), (long) isOptArg); m_DiffOptArgChk=isOptArg; return SetRegKey( str, _T("Options"), DiffOptArgChk ); } int CP4Registry::SetMergeInternal(int isInternal) { CString str; str.Format(_T("%ld"), (long) isInternal); m_MergeInternal=isInternal; return SetRegKey( str, _T("Options"), MergeInternal ); } BOOL CP4Registry::SetMergeOptArgChk(BOOL isOptArg) { CString str; str.Format(_T("%ld"), (long) isOptArg); m_MergeOptArgChk=isOptArg; return SetRegKey( str, _T("Options"), MergeOptArgChk ); } BOOL CP4Registry::SetMergeNSF(BOOL bNSF) { CString str; str.Format(_T("%ld"), (long) bNSF); m_MergeNSF=bNSF; return SetRegKey( str, _T("Options"), MergeNSF ); } BOOL CP4Registry::SetMergeAppIsConsole(BOOL isConsole) { CString str; str.Format(_T("%ld"), (long) isConsole); m_MergeAppIsConsole=isConsole; return SetRegKey( str, _T("Options"), MergeAppIsConsole ); } BOOL CP4Registry::SetMergeAppIsClose(BOOL isClose) { CString str; str.Format(_T("%ld"), (long) isClose); m_MergeAppIsClose=isClose; return SetRegKey( str, _T("Options"), MergeAppIsClose ); } BOOL CP4Registry::SetAlwaysShowFocus(BOOL alwaysShowFocus) { CString str; str.Format(_T("%ld"), (long) alwaysShowFocus); m_AlwaysShowFocus=alwaysShowFocus; return SetRegKey( str, _T("Options"), AlwaysShowFocus ); } BOOL CP4Registry::SetAlwaysWarnOnRevert(BOOL alwaysWarnOnRevert) { CString str; str.Format(_T("%ld"), (long) alwaysWarnOnRevert); m_AlwaysWarnOnRevert=alwaysWarnOnRevert; return SetRegKey( str, _T("Options"), AlwaysWarnOnRevert ); } BOOL CP4Registry::SetAllowPromptAbove(BOOL allowPromptAbove) { CString str; str.Format(_T("%ld"), (long) allowPromptAbove); m_AllowPromptAbove=allowPromptAbove; return SetRegKey( str, _T("Options"), AllowPromptAbove ); } BOOL CP4Registry::SetAutoMinEditDlg(BOOL autoMinEditDlg) { CString str; str.Format(_T("%ld"), (long) autoMinEditDlg); m_AutoMinEditDlg=autoMinEditDlg; return SetRegKey( str, _T("Options"), AutoMinEditDlg ); } BOOL CP4Registry::SetDoubleClickOption(int dblClick) { CString str; str.Format(_T("%ld"), (long) dblClick); m_DoubleClickOption=dblClick; return SetRegKey( str, _T("Options"), DoubleClickOption ); } BOOL CP4Registry::SetOptionStartUpOption(int startupoption) { CString str; str.Format(_T("%ld"), (long) startupoption); m_OptionStartUpOption=startupoption; return SetRegKey( str, _T("Options"), OptionStartUpOption ); } BOOL CP4Registry::SetOptionStartUpPage(int startuppage) { CString str; str.Format(_T("%ld"), (long) startuppage); m_OptionStartUpPage=startuppage; return SetRegKey( str, _T("Options"), OptionStartUpPage ); } BOOL CP4Registry::SetStatusUpdateInterval(int statinterval) { CString str; str.Format(_T("%ld"), (long) statinterval); m_StatusUpdateInterval=statinterval; return SetRegKey( str, _T("Options"), StatusUpdateInterval ); } BOOL CP4Registry::SetLabelAddRplDefault(int defaultNbr) { CString str; str.Format(_T("%ld"), (long) defaultNbr); m_LabelAddRplDefault=defaultNbr; return SetRegKey( str, _T("Options"), LabelAddRplDefault ); } BOOL CP4Registry::SetDiff2Default1(int defaultNbr) { CString str; str.Format(_T("%ld"), (long) defaultNbr); m_Diff2Default1=defaultNbr; return SetRegKey( str, _T("Options"), Diff2Default1 ); } BOOL CP4Registry::SetDiff2Default2(int defaultNbr) { CString str; str.Format(_T("%ld"), (long) defaultNbr); m_Diff2Default2=defaultNbr; return SetRegKey( str, _T("Options"), Diff2Default2 ); } BOOL CP4Registry::SetTempDir(LPCTSTR tempdir) { CString temp(tempdir); // Get rid of trailing slash if(temp.GetLength() > 1 && temp[temp.GetLength()-1] == _T('\\')) temp= temp.Left(temp.GetLength()-1); m_TempDir=temp; return SetRegKey( m_TempDir, _T("Options"), TempFiles ); } BOOL CP4Registry::SetExplorer(int explorersw) { CString str; str.Format(_T("%ld"), (long) explorersw); m_Explorer=explorersw; return SetRegKey( str, _T("Options"), Explorer ); } BOOL CP4Registry::Set2Panes(BOOL b2Panes) { CString str; str.Format(_T("%ld"), (long) b2Panes); m_2Panes=b2Panes; return SetRegKey( str, _T("Options"), Use2Panes ); } BOOL CP4Registry::SetAltExpl(LPCTSTR explorerstring) { CString temp(explorerstring); // Get rid of trailing slash if(temp.GetLength() > 1 && temp[temp.GetLength()-1] == _T('\\')) temp= temp.Left(temp.GetLength()-1); m_AltExpl=temp; return SetRegKey( m_AltExpl, _T("Options"), AltExplorer ); } BOOL CP4Registry::SetIsNoCopy(BOOL isNoCopy) { CString str; str.Format(_T("%ld"), (long) isNoCopy); m_IsNoCopy=isNoCopy; return SetRegKey( str, _T("Options"), IsNoCopy ); } BOOL CP4Registry::SetIsForceInteg(BOOL isForceInteg) { CString str; str.Format(_T("%ld"), (long) isForceInteg); m_IsForceInteg=isForceInteg; return SetRegKey( str, _T("Options"), IsForceInteg ); } BOOL CP4Registry::SetIsForceDirect(BOOL isForceDirect) { CString str; str.Format(_T("%ld"), (long) isForceDirect); m_IsForceDirect=isForceDirect; return SetRegKey( str, _T("Options"), IsForceDirect ); } BOOL CP4Registry::SetIsDeleteSource(BOOL isDeleteSource) { CString str; str.Format(_T("%ld"), (long) isDeleteSource); m_IsDeleteSource=isDeleteSource; return SetRegKey( str, _T("Options"), IsDeleteSource ); } BOOL CP4Registry::SetIsPermitDelReadd(BOOL isPermitDelReadd) { CString str; str.Format(_T("%ld"), (long) isPermitDelReadd); m_IsPermitDelReadd=isPermitDelReadd; return SetRegKey( str, _T("Options"), IsPermitDelReadd ); } BOOL CP4Registry::SetDelReaddType(int delReaddType) { CString str; str.Format(_T("%ld"), (long) delReaddType); m_DelReaddType=delReaddType; return SetRegKey( str, _T("Options"), DelReaddType ); } BOOL CP4Registry::SetIsPropagateTypes(BOOL isPropagateTypes) { CString str; str.Format(_T("%ld"), (long) isPropagateTypes); m_IsPropagateTypes=isPropagateTypes; return SetRegKey( str, _T("Options"), IsPropagateTypes ); } BOOL CP4Registry::SetIsBaseViaDelReadd(BOOL isBaseViaDelReadd) { CString str; str.Format(_T("%ld"), (long) isBaseViaDelReadd); m_IsBaseViaDelReadd=isBaseViaDelReadd; return SetRegKey( str, _T("Options"), IsBaseViaDelReadd ); } BOOL CP4Registry::SetUseNewChglist(BOOL useNewChglist) { CString str; str.Format(_T("%ld"), (long) useNewChglist); m_UseNewChglist=useNewChglist; return SetRegKey( str, _T("Options"), UseNewChglist ); } BOOL CP4Registry::SetUseNewChglist2(BOOL useNewChglist2) { CString str; str.Format(_T("%ld"), (long) useNewChglist2); m_UseNewChglist2=useNewChglist2; return SetRegKey( str, _T("Options"), UseNewChglist2 ); } BOOL CP4Registry::SetIsBaselessMerge(BOOL isBaselessMerge) { CString str; str.Format(_T("%ld"), (long) isBaselessMerge); m_IsBaselessMerge=isBaselessMerge; return SetRegKey( str, _T("Options"), IsBaselessMerge ); } BOOL CP4Registry::SetIsIndirectMerge(BOOL isIndirectMerge) { CString str; str.Format(_T("%ld"), (long) isIndirectMerge); m_IsIndirectMerge=isIndirectMerge; return SetRegKey( str, _T("Options"), IsIndirectMerge ); } BOOL CP4Registry::SetSyncFirstDefault(BOOL syncFirstDefault) { CString str; str.Format(_T("%ld"), (long) syncFirstDefault); m_SyncFirstDefault=syncFirstDefault; return SetRegKey( str, _T("Options"), SyncFirstDefault ); } BOOL CP4Registry::SetWarnAlreadyOpened(BOOL warnAlreadyOpened) { CString str; str.Format(_T("%ld"), (long) warnAlreadyOpened); m_WarnAlreadyOpened=warnAlreadyOpened; return SetRegKey( str, _T("Options"), WarnAlreadyOpened ); } BOOL CP4Registry::SetExpandFlag(BOOL expandFlag) { CString str; str.Format(_T("%ld"), (long) expandFlag); m_ExpandFlag=expandFlag; return SetRegKey( str, _T("Options"), ExpandFlag ); } BOOL CP4Registry::SetExpandPath(LPCTSTR expandPath) { CString str(expandPath); m_ExpandPath=str; return SetRegKey( str, _T("Options"), ExpandPath ); } BOOL CP4Registry::SetShowDeleted(BOOL showDeleted) { CString str; str.Format(_T("%ld"), (long) showDeleted); m_ShowDeleted=showDeleted; return SetRegKey( str, _T("Options"), ShowDeleted ); } BOOL CP4Registry::SetSortByExtension(BOOL sortByExtension) { CString str; str.Format(_T("%ld"), (long) sortByExtension); m_SortByExtension=sortByExtension; return SetRegKey( str, _T("Options"), SortByExtension ); } BOOL CP4Registry::SetSortChgFilesByAction(BOOL sortChgFilesByAction) { CString str; str.Format(_T("%ld"), (long) sortChgFilesByAction); m_SortChgFilesByAction=sortChgFilesByAction; return SetRegKey( str, _T("Options"), SortChgFilesByAction ); } BOOL CP4Registry::SetSortChgFilesByName(BOOL sortChgFilesByName) { CString str; str.Format(_T("%ld"), (long) sortChgFilesByName); m_SortChgFilesByName=sortChgFilesByName; return SetRegKey( str, _T("Options"), SortChgFilesByName ); } BOOL CP4Registry::SetSortChgFilesByExt(BOOL sortChgFilesByExt) { CString str; str.Format(_T("%ld"), (long) sortChgFilesByExt); m_SortChgFilesByExt=sortChgFilesByExt; return SetRegKey( str, _T("Options"), SortChgFilesByExt ); } BOOL CP4Registry::SetSortChgFilesByResolve(BOOL sortChgFilesByResolve) { CString str; str.Format(_T("%ld"), (long) sortChgFilesByResolve); m_SortChgFilesByResolve=sortChgFilesByResolve; return SetRegKey( str, _T("Options"), SortChgFilesByResolve ); } BOOL CP4Registry::SetWarnLimit(LPCTSTR warnLimit) { CString temp(warnLimit); m_WarnLimit=temp; return SetRegKey( m_WarnLimit, _T("Options"), WarnLimit ); } BOOL CP4Registry::SetWarnLimitDiff(LPCTSTR warnLimitDiff) { CString temp(warnLimitDiff); m_WarnLimitDiff=temp; return SetRegKey( m_WarnLimitDiff, _T("Options"), WarnLimitDiff ); } BOOL CP4Registry::SetWarnLimitOpen(LPCTSTR warnLimitOpen) { CString temp(warnLimitOpen); m_WarnLimitOpen=temp; return SetRegKey( m_WarnLimitOpen, _T("Options"), WarnLimitOpen ); } BOOL CP4Registry::SetExtSortMax(LPCTSTR extSortMax) { CString temp(extSortMax); m_ExtSortMax=temp; return SetRegKey( m_ExtSortMax, _T("Options"), ExtSortMax ); } BOOL CP4Registry::SetMinMultiLineSize(LPCTSTR minMultiLineSize) { CString temp(minMultiLineSize); m_MinMultiLineSize=temp; return SetRegKey( m_MinMultiLineSize, _T("Options"), MinMultiLineSize ); } BOOL CP4Registry::SetUserFilter(LPCTSTR userFilter) { CString temp(userFilter); m_UserFilter=temp; return SetRegKey( m_UserFilter, _T("Options"), UserFilter ); } BOOL CP4Registry::SetFilteredByUser(int filteredByUser) { CString str; str.Format(_T("%ld"), (long) filteredByUser); m_FilteredByUser=filteredByUser; return SetRegKey( str, _T("Options"), FilteredByUser ); } BOOL CP4Registry::SetClientFilter(LPCTSTR clientFilter) { CString temp(clientFilter); m_ClientFilter=temp; return SetRegKey( m_ClientFilter, _T("Options"), ClientFilter ); } BOOL CP4Registry::SetFilteredByClient(int filteredByClient) { CString str; str.Format(_T("%ld"), (long) filteredByClient); m_FilteredByClient=filteredByClient; return SetRegKey( str, _T("Options"), FilteredByClient ); } BOOL CP4Registry::SetLabelFilterByOwnerFlag(int labelFilterByOwnerFlag) { CString str; str.Format(_T("%ld"), (long) labelFilterByOwnerFlag); m_LabelFilterByOwnerFlag=labelFilterByOwnerFlag; return SetRegKey( str, _T("Options"), LabelFilterByOwnerFlag ); } BOOL CP4Registry::SetLabelFilterByOwner(LPCTSTR labelFilterByOwner) { CString temp(labelFilterByOwner); m_LabelFilterByOwner=temp; return SetRegKey( m_LabelFilterByOwner, _T("Options"), LabelFilterByOwner ); } BOOL CP4Registry::SetLabelFilterIncBlank(int labelFilterIncBlank) { CString str; str.Format(_T("%ld"), (long) labelFilterIncBlank); m_LabelFilterIncBlank=labelFilterIncBlank; return SetRegKey( str, _T("Options"), LabelFilterIncBlank ); } BOOL CP4Registry::SetUseOpenForEditExts(LPCTSTR useOpenForEditExts) { CString temp(useOpenForEditExts); m_UseOpenForEditExts=temp; return SetRegKey( m_UseOpenForEditExts, _T("Options"), UseOpenForEditExts ); } BOOL CP4Registry::SetUseOpenForEdit(int useOpenForEdit) { CString str; str.Format(_T("%ld"), (long) useOpenForEdit); m_UseOpenForEdit=useOpenForEdit; return SetRegKey( str, _T("Options"), UseOpenForEdit ); } BOOL CP4Registry::SetUseShortRevHistDesc(int useShortRevHistDesc) { CString str; str.Format(_T("%ld"), (long) useShortRevHistDesc); m_UseShortRevHistDesc=useShortRevHistDesc; return SetRegKey( str, _T("Options"), UseShortRevHistDesc ); } BOOL CP4Registry::SetUseShortSubmittedDesc(int useShortSubmittedDesc) { CString str; str.Format(_T("%ld"), (long) useShortSubmittedDesc); m_UseShortSubmittedDesc=useShortSubmittedDesc; return SetRegKey( str, _T("Options"), UseShortSubmittedDesc ); } BOOL CP4Registry::SetUseLongChglistDesc(int useLongChglistDesc) { CString str; str.Format(_T("%ld"), (long) useLongChglistDesc); m_UseLongChglistDesc=useLongChglistDesc; return SetRegKey( str, _T("Options"), UseLongChglistDesc ); } BOOL CP4Registry::SetBusyWaitTime(int busyWaitTime) { CString str; str.Format(_T("%ld"), (long) busyWaitTime); m_BusyWaitTime=busyWaitTime; return SetRegKey( str, _T("Options"), BusyWaitTime ); } BOOL CP4Registry::SetSyncDlgFlag(int syncDlgFlag) { CString str; str.Format(_T("%ld"), (long) syncDlgFlag); m_SyncDlgFlag=syncDlgFlag; return SetRegKey( str, _T("Options"), SyncDlgFlag ); } BOOL CP4Registry::SetDescWrap(int descWrap) { CString str; str.Format(_T("%ld"), (long) descWrap); m_DescWrap=descWrap; return SetRegKey( str, _T("Options"), DescWrap ); } BOOL CP4Registry::SetDescWrapSw(BOOL descWrapSw) { CString str; str.Format(_T("%ld"), (long) descWrapSw); m_DescWrapSw=descWrapSw; return SetRegKey( str, _T("Options"), DescWrapSw ); } BOOL CP4Registry::SetShowToolBar(BOOL showToolBar) { CString str; str.Format(_T("%ld"), (long) showToolBar); m_ShowToolBar=showToolBar; return SetRegKey( str, _T("Options"), ShowToolBar ); } BOOL CP4Registry::SetShowEntireDepot(int showEntire) { CString str; str.Format(_T("%ld"), (long) showEntire); m_ShowEntireDepot=showEntire; return SetRegKey( str, _T("Options"), ShowEntireDepot ); } BOOL CP4Registry::SetShowFileType(BOOL showFileType) { CString str; str.Format(_T("%ld"), (long) showFileType); m_ShowFileType=showFileType; return SetRegKey( str, _T("Options"), ShowFileTypes ); } BOOL CP4Registry::SetShowOpenAction(BOOL showOpenAction) { CString str; str.Format(_T("%ld"), (long) showOpenAction); m_ShowOpenAction=showOpenAction; return SetRegKey( str, _T("Options"), ShowOpenActions ); } BOOL CP4Registry::SetShowChangeDesc(BOOL showChangeDesc) { CString str; str.Format(_T("%ld"), (long) showChangeDesc); m_ShowChangeDesc=showChangeDesc; return SetRegKey( str, _T("Options"), ShowChangeDescs ); } BOOL CP4Registry::SetSortChgsByUser(BOOL sortChgsByUser) { CString str; str.Format(_T("%ld"), (long) sortChgsByUser); m_SortChgsByUser=sortChgsByUser; return SetRegKey( str, _T("Options"), SortChgsByUser ); } BOOL CP4Registry::SetShowCommandTrace( BOOL show ) { CString str; str.Format(_T("%ld"), (long) show ); m_ShowCommandTrace = show; return SetRegKey( str, _T("Options"), ShowCommandTrace ); } BOOL CP4Registry::SetShowConnectSettings(BOOL showConnectSettings) { CString str; str.Format(_T("%ld"), (long) showConnectSettings); m_ShowConnectSettings=showConnectSettings; return SetRegKey( str, _T("Options"), ShowConnectSettings ); } BOOL CP4Registry::SetShowConnectPort1st(BOOL showConnectPort1st) { CString str; str.Format(_T("%ld"), (long) showConnectPort1st); m_ShowConnectPort1st=showConnectPort1st; return SetRegKey( str, _T("Options"), ShowConnectPort1st ); } BOOL CP4Registry::SetShowClientPath4Chgs(BOOL showClientPath4Chgs) { CString str; str.Format(_T("%ld"), (long) showClientPath4Chgs); m_ShowClientPath4Chgs= showClientPath4Chgs; return SetRegKey( str, _T("Options"), ShowClientPath4Chgs ); } BOOL CP4Registry::SetShowClientPath(BOOL showClientPath) { CString str; str.Format(_T("%ld"), (long) showClientPath); m_ShowClientPath= showClientPath; return SetRegKey( str, _T("Options"), ShowClientPath ); } BOOL CP4Registry::SetShowDepotPathHiLite(BOOL showDepotPathHiLite) { CString str; str.Format(_T("%ld"), (long) showDepotPathHiLite); m_ShowDepotPathHiLite= showDepotPathHiLite; return SetRegKey( str, _T("Options"), ShowDepotPathHiLite); } BOOL CP4Registry::SetShowStatusTime(BOOL showStatusTime) { CString str; str.Format(_T("%ld"), (long) showStatusTime); m_ShowStatusTime= showStatusTime; return SetRegKey( str, _T("Options"), ShowStatusTime); } BOOL CP4Registry::SetShowHiddenFilesNotInDepot(BOOL showHiddenFilesNotInDepot) { CString str; str.Format(_T("%ld"), (long) showHiddenFilesNotInDepot); m_ShowHiddenFilesNotInDepot= showHiddenFilesNotInDepot; return SetRegKey( str, _T("Options"), ShowHiddenFilesNotInDepot); } BOOL CP4Registry::SetUse24hourClock(BOOL use24hourClock) { CString str; str.Format(_T("%ld"), (long) use24hourClock); m_Use24hourClock= use24hourClock; return SetRegKey( str, _T("Options"), Use24hourClock); } BOOL CP4Registry::SetPreserveSpecFormat(BOOL preserveSpecFormat) { CString str; str.Format(_T("%ld"), (long) preserveSpecFormat); m_PreserveSpecFormat= preserveSpecFormat; return SetRegKey( str, _T("Options"), PreserveSpecFormat); } BOOL CP4Registry::SetAutoExpandOptions(BOOL autoExpandOptions) { CString str; str.Format(_T("%ld"), (long) autoExpandOptions); m_AutoExpandOptions= autoExpandOptions; return SetRegKey( str, _T("Options"), AutoExpandOptions); } BOOL CP4Registry::SetLabelFilesInDialog(BOOL labelFilesInDialog) { CString str; str.Format(_T("%ld"), (long) labelFilesInDialog); m_LabelFilesInDialog= labelFilesInDialog; return SetRegKey( str, _T("Options"), LabelFilesInDialog); } BOOL CP4Registry::SetLabelShowPreviewDetail(BOOL labelShowPreviewDetail) { CString str; str.Format(_T("%ld"), (long) labelShowPreviewDetail); m_LabelShowPreviewDetail= labelShowPreviewDetail; return SetRegKey( str, _T("Options"), LabelShowPreviewDetail); } BOOL CP4Registry::SetDiff2InDialog(BOOL diff2InDialog) { CString str; str.Format(_T("%ld"), (long) diff2InDialog); m_Diff2InDialog= diff2InDialog; return SetRegKey( str, _T("Options"), Diff2InDialog); } BOOL CP4Registry::SetAutoTreeExpand(BOOL autoTreeExpand) { CString str; str.Format(_T("%ld"), (long) autoTreeExpand); m_AutoTreeExpand= autoTreeExpand; return SetRegKey( str, _T("Options"), AutoTreeExpand); } BOOL CP4Registry::SetUseNotepad4WarnAndErr(BOOL useNotepad4WarnAndErr) { CString str; str.Format(_T("%ld"), (long) useNotepad4WarnAndErr); m_UseNotepad4WarnAndErr= useNotepad4WarnAndErr; return SetRegKey( str, _T("Options"), UseNotepad4WarnAndErr); } BOOL CP4Registry::SetCvt2ValComboToChkBx(BOOL cvt2ValComboToChkBx) { CString str; str.Format(_T("%ld"), (long) cvt2ValComboToChkBx); m_Cvt2ValComboToChkBx= cvt2ValComboToChkBx; return SetRegKey( str, _T("Options"), Cvt2ValComboToChkBx); } BOOL CP4Registry::SetIconsInMenus(BOOL iconsInMenus) { CString str; str.Format(_T("%ld"), (long) iconsInMenus); m_IconsInMenus= iconsInMenus; return SetRegKey( str, _T("Options"), IconsInMenus); } BOOL CP4Registry::SetExpandChgLists(BOOL expandChgLists) { CString str; str.Format(_T("%ld"), (long) expandChgLists); m_ExpandChgLists= expandChgLists; return SetRegKey( str, _T("Options"), ExpandChgLists); } BOOL CP4Registry::SetReExpandChgs(BOOL reExpandChgs) { CString str; str.Format(_T("%ld"), (long) reExpandChgs); m_ReExpandChgs= reExpandChgs; return SetRegKey( str, _T("Options"), ReExpandChgs); } BOOL CP4Registry::SetEnableSubChgIntegFilter(BOOL enableSubChgIntegFilter) { CString str; str.Format(_T("%ld"), (long) enableSubChgIntegFilter); m_EnableSubChgIntegFilter= enableSubChgIntegFilter; return SetRegKey( str, _T("Options"), EnableSubChgIntegFilter); } BOOL CP4Registry::SetEnableRevHistShowIntegs(BOOL enableRevHistShowIntegs) { CString str; str.Format(_T("%ld"), (long) enableRevHistShowIntegs); m_EnableRevHistShowIntegs= enableRevHistShowIntegs; return SetRegKey( str, _T("Options"), EnableRevHistShowIntegs); } BOOL CP4Registry::SetEnablePendingChgsOtherClients(BOOL enablePendingChgsOtherClients) { CString str; str.Format(_T("%ld"), (long) enablePendingChgsOtherClients); m_EnablePendingChgsOtherClients= enablePendingChgsOtherClients; return SetRegKey( str, _T("Options"), EnablePendingChgsOtherClients); } BOOL CP4Registry::SetAddFilterExclude(long addFilterExclude) { CString str; str.Format(_T("%ld"), addFilterExclude); m_AddFilterExclude= addFilterExclude; return SetRegKey( str, _T("Options"), AddFilterExclude); } BOOL CP4Registry::SetAutoPoll(BOOL autoPoll) { CString str; str.Format(_T("%ld"), (long) autoPoll); m_AutoPoll=autoPoll; return SetRegKey( str, _T("Options"), AutoPollServer ); } BOOL CP4Registry::SetAutoPollTime(long autoPollTime) { ASSERT( autoPollTime >= 0); CString str; str.Format(_T("%ld"), (long) autoPollTime); m_AutoPollTime=autoPollTime; return SetRegKey( str, _T("Options"), AutoPollTime ); } BOOL CP4Registry::SetAutoPollIconic(BOOL autoPollIconic) { CString str; str.Format(_T("%ld"), (long) autoPollIconic); m_AutoPollIconic=autoPollIconic; return SetRegKey( str, _T("Options"), AutoPollIconic ); } BOOL CP4Registry::SetAutoPollJobs(BOOL autoPollJobs) { CString str; str.Format(_T("%ld"), (long) autoPollJobs); m_AutoPollJobs=autoPollJobs; return SetRegKey( str, _T("Options"), AutoPollJobs ); } BOOL CP4Registry::SetLogoutOnExit(BOOL logoutOnExit) { CString str; str.Format(_T("%ld"), (long) logoutOnExit); m_LogoutOnExit=logoutOnExit; return SetRegKey( str, _T("Options"), LogoutOnExit ); } BOOL CP4Registry::SetClearAndReload(BOOL clearAndReload) { CString str; str.Format(_T("%ld"), (long) clearAndReload); m_ClearAndReload=clearAndReload; return SetRegKey( str, _T("Options"), ClearAndReload ); } BOOL CP4Registry::SetReloadOnUncover(BOOL reloadOnUncover) { CString str; str.Format(_T("%ld"), (long) reloadOnUncover); m_ReloadOnUncover=reloadOnUncover; return SetRegKey( str, _T("Options"), ReloadOnUncover ); } BOOL CP4Registry::SetReloadUncoverTime(long reloadUncoverTime) { ASSERT( reloadUncoverTime >= 0); CString str; str.Format(_T("%ld"), (long) reloadUncoverTime); m_ReloadUncoverTime=reloadUncoverTime; return SetRegKey( str, _T("Options"), ReloadUncoverTime ); } BOOL CP4Registry::SetChglistSyncDef(long chglistSyncDef) { CString str; str.Format(_T("%ld"), (long) chglistSyncDef); m_ChglistSyncDef=chglistSyncDef; return SetRegKey( str, _T("Options"), ChglistSyncDef ); } BOOL CP4Registry::SetFetchChangeCount(long fetchChangeCount) { ASSERT( fetchChangeCount >= 0); CString str; str.Format(_T("%ld"), (long) fetchChangeCount); m_FetchChangeCount=fetchChangeCount; return SetRegKey( str, _T("Options"), FetchChangeCount ); } BOOL CP4Registry::SetFetchAllChanges(BOOL fetchAll) { CString str; str.Format(_T("%ld"), (long) fetchAll); m_FetchAll=fetchAll; return SetRegKey( str, _T("Options"), FetchAllChanges ); } BOOL CP4Registry::SetFetchJobCount(long fetchJobCount) { ASSERT( fetchJobCount >= 0); CString str; str.Format(_T("%ld"), (long) fetchJobCount); m_FetchJobCount=fetchJobCount; return SetRegKey( str, _T("Options"), FetchJobCount ); } BOOL CP4Registry::SetFetchAllJobs(BOOL fetchAll) { CString str; str.Format(_T("%ld"), (long) fetchAll); m_FetchAllJobs=fetchAll; return SetRegKey( str, _T("Options"), FetchAllJobs ); } BOOL CP4Registry::SetFetchHistCount(long fetchHistCount) { ASSERT( fetchHistCount >= 0); CString str; str.Format(_T("%ld"), (long) fetchHistCount); m_FetchHistCount=fetchHistCount; return SetRegKey( str, _T("Options"), FetchHistCount ); } BOOL CP4Registry::SetFetchAllHist(BOOL fetchAll) { CString str; str.Format(_T("%ld"), (long) fetchAll); m_FetchAllHist=fetchAll; return SetRegKey( str, _T("Options"), FetchAllHist ); } BOOL CP4Registry::SetFetchCompleteHist(long fetchComplete) { CString str; str.Format(_T("%ld"), (long) fetchComplete); m_FetchCompleteHist=fetchComplete; return SetRegKey( str, _T("Options"), FetchCompleteHist ); } BOOL CP4Registry::SetHistListHeight(int histListHeight) { CString str; str.Format(_T("%ld"), (long) histListHeight); m_HistListHeight=histListHeight; return SetRegKey( str, _T("Options"), HistListHeight ); } BOOL CP4Registry::SetJobFilterWidth(int jobFilterWidth) { CString str; str.Format(_T("%ld"), (long) jobFilterWidth); m_JobFilterWidth=jobFilterWidth; return SetRegKey( str, _T("Options"), JobFilterWidth ); } BOOL CP4Registry::SetUseDepotInClientView(BOOL useDepotInClientView) { CString str; str.Format(_T("%ld"), (long) useDepotInClientView); m_UseDepotInClientView=useDepotInClientView; return SetRegKey( str, _T("Options"), UseDepotInClientView ); } BOOL CP4Registry::SetUse256colorIcons(BOOL use256colorIcons) { CString str; str.Format(_T("%ld"), (long) use256colorIcons); m_Use256colorIcons=use256colorIcons; return SetRegKey( str, _T("Options"), Use256colorIcons ); } BOOL CP4Registry::SetDontShowYouHaveChgClientView(BOOL bDontShowYouHaveChgClientView) { CString str; str.Format(_T("%ld"), (long) bDontShowYouHaveChgClientView); m_DontShowYouHaveChgClientView=bDontShowYouHaveChgClientView; return SetRegKey( str, _T("Options"), DontShowYouHaveChgClientView ); } BOOL CP4Registry::SetDontShowYouHaveCr8NewClient(BOOL bDontShowYouHaveCr8NewClient) { CString str; str.Format(_T("%ld"), (long) bDontShowYouHaveCr8NewClient); m_DontShowYouHaveCr8NewClient=bDontShowYouHaveCr8NewClient; return SetRegKey( str, _T("Options"), DontShowYouHaveCr8NewClient ); } BOOL CP4Registry::SetDontShowDiscardFormChgs(BOOL bDontShowDiscardFormChgs) { CString str; str.Format(_T("%ld"), (long) bDontShowDiscardFormChgs); m_DontShowDiscardFormChgs=bDontShowDiscardFormChgs; return SetRegKey( str, _T("Options"), DontShowDiscardFormChgs ); } BOOL CP4Registry::SetFontFace( LPCTSTR fontFace ) { m_FontFace= fontFace; return SetRegKey( m_FontFace, _T("Options"), DlgFontFace ); } BOOL CP4Registry::SetFontSize( int fontSize ) { ASSERT( fontSize >= 0); CString str; str.Format(_T("%ld"), (long) fontSize); m_FontSize= fontSize; return SetRegKey( str, _T("Options"), DlgFontSize ); } BOOL CP4Registry::SetFontItalic( BOOL isItalic ) { CString str; str.Format(_T("%ld"), (long) isItalic); m_IsFontItalic= isItalic; return SetRegKey( str, _T("Options"), DlgFontItalic ); } BOOL CP4Registry::SetFontWeight( int fontWeight ) { ASSERT( fontWeight >= 0); CString str; str.Format(_T("%ld"), (long) fontWeight); m_FontWeight= fontWeight; return SetRegKey( str, _T("Options"), DlgFontWeight ); } BOOL CP4Registry::SetFindFilesWidth( int findFilesWidth ) { CString str; str.Format(_T("%ld"), (long) findFilesWidth); m_FindFilesWidth= findFilesWidth; return SetRegKey( str, _T("Options"), FindFilesWidth ); } BOOL CP4Registry::SetP4StartWith( int p4StartWith ) { CString str; str.Format(_T("%ld"), (long) p4StartWith); m_P4StartWith= p4StartWith; return SetRegKey( str, _T("Options"), P4StartWith ); } BOOL CP4Registry::SetP4BusyCursor( int p4BusyCursor ) { CString str; str.Format(_T("%ld"), (long) p4BusyCursor); m_P4BusyCursor= p4BusyCursor; return SetRegKey( str, _T("Options"), P4BusyCursor ); } BOOL CP4Registry::SetCloseAfterFind( int closeAfterFind ) { CString str; str.Format(_T("%ld"), (long) closeAfterFind); m_CloseAfterFind= closeAfterFind; return SetRegKey( str, _T("Options"), CloseAfterFind ); } BOOL CP4Registry::SetSubmitOnlyChged( BOOL submitOnlyChged ) { CString str; str.Format(_T("%ld"), (long) submitOnlyChged); m_SubmitOnlyChged= submitOnlyChged; return SetRegKey( str, _T("Options"), SubmitOnlyChged ); } BOOL CP4Registry::SetRevertUnchged( BOOL revertUnchged ) { CString str; str.Format(_T("%ld"), (long) revertUnchged); m_RevertUnchged= revertUnchged; return SetRegKey( str, _T("Options"), RevertUnchged ); } BOOL CP4Registry::SetAutoReopen( BOOL autoReopen ) { CString str; str.Format(_T("%ld"), (long) autoReopen); m_AutoReopen= autoReopen; return SetRegKey( str, _T("Options"), AutoReopen ); } BOOL CP4Registry::SetFilterPendChgsByMyClient( BOOL filterPendChgsByMyClient ) { CString str; str.Format(_T("%ld"), (long) filterPendChgsByMyClient); m_FilterPendChgsByMyClient= filterPendChgsByMyClient; return SetRegKey( str, _T("Options"), FilterPendChgsByMyClient ); } BOOL CP4Registry::SetFilterPendChgsByPath( LPCTSTR filterPendChgsByPath ) { m_FilterPendChgsByPath= filterPendChgsByPath; return SetRegKey( m_FilterPendChgsByPath, _T("Options"), FilterPendChgsByPath ); } BOOL CP4Registry::SetLabelDragDropOption( int labelDragDropOption ) { CString str; str.Format(_T("%ld"), (long) labelDragDropOption); m_LabelDragDropOption= labelDragDropOption; return SetRegKey( str, _T("Options"), LabelDragDropOption ); } BOOL CP4Registry::SetResolveDefault( int resolveDefault ) { CString str; str.Format(_T("%ld"), (long) resolveDefault); m_ResolveDefault= resolveDefault; return SetRegKey( str, _T("Options"), ResolveDefault ); } BOOL CP4Registry::SetResolve2wayDefault( int resolve2wayDefault ) { CString str; str.Format(_T("%ld"), (long) resolve2wayDefault); m_Resolve2wayDefault= resolve2wayDefault; return SetRegKey( str, _T("Options"), Resolve2wayDefault ); } BOOL CP4Registry::SetResolve3wayDefault( int resolve3wayDefault ) { CString str; str.Format(_T("%ld"), (long) resolve3wayDefault); m_Resolve3wayDefault= resolve3wayDefault; return SetRegKey( str, _T("Options"), Resolve3wayDefault ); } BOOL CP4Registry::SetConvertJobNbr( BOOL convertJobNbr ) { CString str; str.Format(_T("%ld"), (long) convertJobNbr); m_ConvertJobNbr= convertJobNbr; return SetRegKey( str, _T("Options"), ConvertJobNbr ); } BOOL CP4Registry::SetAllowExceptionReporting(BOOL allowExceptionReporting) { CString str; str.Format(_T("%ld"), (long) allowExceptionReporting); m_AllowExceptionReporting= allowExceptionReporting; EnableErrorRecording(allowExceptionReporting == TRUE); return SetRegKey( str, _T("Options"), AllowExceptionReporting); } BOOL CP4Registry::SetTryResetingFocus(BOOL tryResetingFocus) { CString str; str.Format(_T("%ld"), (long) tryResetingFocus); m_TryResetingFocus= tryResetingFocus; EnableErrorRecording(tryResetingFocus == TRUE); return SetRegKey( str, _T("Options"), TryResetingFocus); } /////////////////////////////////////////////////////////////// // Settings Key /////////////////////////////////////////////////////////////// BOOL CP4Registry::SetAddFileCurDir(LPCTSTR dir) { m_AddFileCurDir=dir; return SetRegKey( m_AddFileCurDir, _T("Settings"), AddFileCurDir ); } BOOL CP4Registry::SetAddFileExtFilter(LPCTSTR exts) { m_AddFileExtFilter=exts; return SetRegKey( m_AddFileExtFilter, _T("Settings"), AddFileExtFilter ); } BOOL CP4Registry::SetAddFileFilter(LPCTSTR filter) { m_AddFileFilter=filter; return SetRegKey( m_AddFileFilter, _T("Settings"), AddFileFilter ); } BOOL CP4Registry::SetAddFileFilterIndex(int index) { CString str; str.Format(_T("%ld"), (long) index); m_AddFileFilterIndex= index; return SetRegKey( str, _T("Settings"), AddFileFilterIndex ); } BOOL CP4Registry::SetDefaultDnDfromExp(int index) { CString str; str.Format(_T("%ld"), (long) index); m_DefaultDnDfromExp= index; return SetRegKey( str, _T("Settings"), DefaultDnDfromExp ); } BOOL CP4Registry::SetMultiProcessorSleep(int index) { ASSERT( index >= 0); CString str; str.Format(_T("%ld"), (long) index); m_MultiProcessorSleep= index; return SetRegKey( str, _T("Settings"), MultiProcessorSleep ); } BOOL CP4Registry::SetMaxStatusLines(int maxStatusLines) { if (maxStatusLines < 1000) maxStatusLines = 1000; CString str; str.Format(_T("%ld"), (long) maxStatusLines); m_MaxStatusLines= maxStatusLines; return SetRegKey( str, _T("Settings"), MaxStatusLines ); } BOOL CP4Registry::SetShowStatusMsgs(BOOL showStatusMsgs) { CString str; str.Format(_T("%ld"), (long) showStatusMsgs); m_ShowStatusMsgs= showStatusMsgs; return SetRegKey( str, _T("Settings"), ShowStatusMsgs ); } BOOL CP4Registry::SetShowTruncTooltip(BOOL showTruncTooltip) { CString str; str.Format(_T("%ld"), (long) showTruncTooltip); m_ShowTruncTooltip= showTruncTooltip; return SetRegKey( str, _T("Settings"), ShowTruncTooltip ); } BOOL CP4Registry::SetDontThreadDiffs(BOOL dontThreadDiffs) { CString str; str.Format(_T("%ld"), (long) dontThreadDiffs); m_DontThreadDiffs= dontThreadDiffs; return SetRegKey( str, _T("Settings"), DontThreadDiffs ); } BOOL CP4Registry::SetPendChgExpansion(LPCTSTR pendChgExpansion) { m_PendChgExpansion=pendChgExpansion; return SetRegKey( m_PendChgExpansion, _T("Settings"), PendChgExpansion ); } BOOL CP4Registry::SetLastBranch(LPCTSTR lastBranch) { m_LastBranch=lastBranch; return SetRegKey( m_LastBranch, _T("Settings"), LastBranch ); } BOOL CP4Registry::SetLastLabel(LPCTSTR lastLabel) { m_LastLabel=lastLabel; return SetRegKey( m_LastLabel, _T("Settings"), LastLabel ); } BOOL CP4Registry::SetLastTemplate(LPCTSTR lastTemplate) { m_LastTemplate=lastTemplate; return SetRegKey( m_LastTemplate, _T("Settings"), LastTemplate ); } BOOL CP4Registry::SetLocalCliTemplate(LPCTSTR localCliTemplate) { m_LocalCliTemplate=localCliTemplate; return SetRegKey( m_LocalCliTemplate, _T("Settings"), LocalCliTemplate ); } BOOL CP4Registry::SetLocalCliTemplateSw(BOOL localCliTemplateSw) { CString str; str.Format(_T("%ld"), (long) localCliTemplateSw); m_LocalCliTemplateSw=localCliTemplateSw; return SetRegKey( str, _T("Settings"), LocalCliTemplateSw ); } BOOL CP4Registry::SetUseClientSpecSubmitOpts(BOOL useClientSpecSubmitOpts) { CString str; str.Format(_T("%ld"), (long) useClientSpecSubmitOpts); m_UseClientSpecSubmitOpts=useClientSpecSubmitOpts; return SetRegKey( str, _T("Settings"), UseClientSpecSubmitOpts ); } BOOL CP4Registry::SetSwapButtonPosition(BOOL swapButtonPosition) { CString str; str.Format(_T("%ld"), (long) swapButtonPosition); m_SwapButtonPosition=swapButtonPosition; return SetRegKey( str, _T("Settings"), SwapButtonPosition ); } BOOL CP4Registry::SetBranchFilteredFlags(int branchFilteredFlags) { CString str; str.Format(_T("%ld"), (long) branchFilteredFlags); m_BranchFilteredFlags= branchFilteredFlags; return SetRegKey( str, _T("Settings"), BranchFilteredFlags ); } BOOL CP4Registry::SetBranchFilterOwner(LPCTSTR branchFilterOwner) { m_BranchFilterOwner=branchFilterOwner; return SetRegKey( m_BranchFilterOwner, _T("Settings"), BranchFilterOwner ); } BOOL CP4Registry::SetClientFilteredFlags(int clientFilteredFlags) { CString str; str.Format(_T("%ld"), (long) clientFilteredFlags); m_ClientFilteredFlags= clientFilteredFlags; return SetRegKey( str, _T("Settings"), ClientFilteredFlags ); } BOOL CP4Registry::SetClientFilterOwner(LPCTSTR clientFilterOwner) { m_ClientFilterOwner=clientFilterOwner; return SetRegKey( m_ClientFilterOwner, _T("Settings"), ClientFilterOwner ); } BOOL CP4Registry::SetClientFilterHost(LPCTSTR clientFilterHost) { m_ClientFilterHost=clientFilterHost; return SetRegKey( m_ClientFilterHost, _T("Settings"), ClientFilterHost ); } BOOL CP4Registry::SetClientFilterDesc(LPCTSTR clientFilterDesc) { m_ClientFilterDesc=clientFilterDesc; return SetRegKey( m_ClientFilterDesc, _T("Settings"), ClientFilterDesc ); } /////////////////////////////////////////////////////////////// // Layout Key /////////////////////////////////////////////////////////////// BOOL CP4Registry::SetWindowPosition(CRect rect) { m_WindowPosition=rect; CString str; str.Format(_T("%d,%d,%d,%d"), rect.TopLeft().x, rect.TopLeft().y, rect.Width(), rect.Height()); return SetRegKey( str, _T("Layout"), WindowPosition ); } BOOL CP4Registry::SetWindowIconic(BOOL iconic) { CString str; str.Format(_T("%ld"), (long) iconic); m_Iconic=iconic; return SetRegKey( str, _T("Layout"), WindowIconic ); } BOOL CP4Registry::SetWindowMaximized(BOOL maximized) { CString str; str.Format(_T("%ld"), (long) maximized); m_Maximized=maximized; return SetRegKey( str, _T("Layout"), WindowRestoreMaximized ); } BOOL CP4Registry::SetHSplitterPosition(int position) { ASSERT(position>=0); CString str; str.Format(_T("%ld"), (long) position); m_HSplitterPosition=position; return SetRegKey( str, _T("Layout"), HorizontalSplitter ); } BOOL CP4Registry::SetVSplitterPosition(int position) { ASSERT(position>=0); CString str; str.Format(_T("%ld"), (long) position); m_VSplitterPosition=position; return SetRegKey( str, _T("Layout"), VerticalSplitter ); } /////////////////////////////////////////////////////////////// // Tools Key /////////////////////////////////////////////////////////////// CString CP4Registry::GetToolMenuName(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return CString( m_ToolMenuName[index] ); } BOOL CP4Registry::SetToolMenuName(int index, CString menuName) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("MenuName%d"), index); m_ToolMenuName[index] = menuName; if (!menuName.GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( menuName, _T("Tools"), str ); } CString CP4Registry::GetToolCommand(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return CString( m_ToolCommand[index] ); } BOOL CP4Registry::SetToolCommand(int index, CString command) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("Command%d"), index); m_ToolCommand[index] = command; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( command, _T("Tools"), str ); } CString CP4Registry::GetToolArgs(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return CString( m_ToolArgs[index] ); } BOOL CP4Registry::SetToolArgs(int index, CString args) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("Arguments%d"), index); m_ToolArgs[index] = args; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( args, _T("Tools"), str ); } CString CP4Registry::GetToolInitDir(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return CString( m_ToolInitDir[index] ); } CString CP4Registry::GetToolPromptText(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return CString( m_ToolPromptText[index] ); } BOOL CP4Registry::SetToolInitDir(int index, CString initDir) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("InitialDirectory%d"), index); m_ToolInitDir[index] = initDir; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( initDir, _T("Tools"), str ); } BOOL CP4Registry::SetToolPromptText(int index, CString promptText) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("PromptText%d"), index); m_ToolPromptText[index] = promptText; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( promptText, _T("Tools"), str ); } BOOL CP4Registry::GetToolIsConsole(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsConsole[index] ); } BOOL CP4Registry::SetToolIsConsole(int index, BOOL isConsole) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsConsole%d"), index); CString value; value.Format(_T("%ld"), (long) isConsole); m_ToolIsConsole[index] = isConsole; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::GetToolIsPrompt(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsPrompt[index] ); } BOOL CP4Registry::SetToolIsPrompt(int index, BOOL isPrompt) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsPrompt%d"), index); CString value; value.Format(_T("%ld"), (long) isPrompt); m_ToolIsPrompt[index] = isPrompt; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::GetToolIsOutput2Status(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsOutput2Status[index] ); } BOOL CP4Registry::GetToolIsCloseOnExit(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsCloseOnExit[index] ); } BOOL CP4Registry::SetToolIsOutput2Status(int index, BOOL isOutput2Status) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsOutput2Status%d"), index); CString value; value.Format(_T("%ld"), (long) isOutput2Status); m_ToolIsOutput2Status[index] = isOutput2Status; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::SetToolIsCloseOnExit(int index, BOOL isCloseOnExit) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsCloseOnExit%d"), index); CString value; value.Format(_T("%ld"), (long) isCloseOnExit); m_ToolIsCloseOnExit[index] = isCloseOnExit; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::GetToolIsShowBrowse(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsShowBrowse[index] ); } BOOL CP4Registry::SetToolIsShowBrowse(int index, BOOL isShowBrowse) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsShowBrowse%d"), index); CString value; value.Format(_T("%ld"), (long) isShowBrowse); m_ToolIsShowBrowse[index] = isShowBrowse; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::GetToolIsRefresh(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsRefresh[index] ); } BOOL CP4Registry::SetToolIsRefresh(int index, BOOL isRefresh) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsRefresh%d"), index); CString value; value.Format(_T("%ld"), (long) isRefresh); m_ToolIsRefresh[index] = isRefresh; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::GetToolOnContext(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolOnContext[index] ); } BOOL CP4Registry::SetToolOnContext(int index, BOOL onContext) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("OnContext%d"), index); CString value; value.Format(_T("%ld"), (long) onContext); m_ToolOnContext[index] = onContext; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } BOOL CP4Registry::GetToolIsSubMenu(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_TOOLS); return BOOL( m_ToolIsSubMenu[index] ); } BOOL CP4Registry::SetToolIsSubMenu(int index, BOOL isSubMenu) { ASSERT(index>=0 && index < MAX_TOOLS); CString str; str.Format(_T("IsSubMenu%d"), index); CString value; value.Format(_T("%ld"), (long) isSubMenu); m_ToolIsSubMenu[index] = isSubMenu; if (!m_ToolMenuName[index].GetLength()) return DelRegKey( _T("Tools"), str ); else return SetRegKey( value, _T("Tools"), str ); } /////////////////////////////////////////////////////////////// // Bookmarks Key /////////////////////////////////////////////////////////////// CString CP4Registry::GetBkMkMenuName(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_BOOKMARKS); return CString( m_BkMkMenuName[index] ); } BOOL CP4Registry::SetBkMkMenuName(int index, CString menuName) { ASSERT(index>=0 && index < MAX_BOOKMARKS); CString str; str.Format(_T("MenuName%d"), index); m_BkMkMenuName[index] = menuName; if (!menuName.GetLength()) return DelRegKey( _T("Bookmarks"), str ); else return SetRegKey( menuName, _T("Bookmarks"), str ); } BOOL CP4Registry::GetBkMkIsSubMenu(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_BOOKMARKS); return BOOL( m_BkMkIsSubMenu[index] ); } BOOL CP4Registry::SetBkMkIsSubMenu(int index, BOOL isSubMenu) { ASSERT(index>=0 && index < MAX_BOOKMARKS); CString str; str.Format(_T("IsSubMenu%d"), index); CString value; value.Format(_T("%ld"), (long) isSubMenu); m_BkMkIsSubMenu[index] = isSubMenu; if (!m_BkMkMenuName[index].GetLength()) return DelRegKey( _T("Bookmarks"), str ); else return SetRegKey( value, _T("Bookmarks"), str ); } /////////////////////////////////////////////////////////////// // Favorites Key /////////////////////////////////////////////////////////////// CString CP4Registry::GetFavMenuName(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_FAVORITES); return CString( m_FavMenuName[index] ); } BOOL CP4Registry::SetFavMenuName(int index, CString menuName) { ASSERT(index>=0 && index < MAX_FAVORITES); CString str; str.Format(_T("MenuName%d"), index); m_FavMenuName[index] = menuName; if (!menuName.GetLength()) return DelRegKey( _T("Favorites"), str ); else return SetRegKey( menuName, _T("Favorites"), str ); } BOOL CP4Registry::GetFavIsSubMenu(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_FAVORITES); return BOOL( m_FavIsSubMenu[index] ); } BOOL CP4Registry::SetFavIsSubMenu(int index, BOOL isSubMenu) { ASSERT(index>=0 && index < MAX_FAVORITES); CString str; str.Format(_T("IsSubMenu%d"), index); CString value; value.Format(_T("%ld"), (long) isSubMenu); m_FavIsSubMenu[index] = isSubMenu; if (!m_FavMenuName[index].GetLength()) return DelRegKey( _T("Favorites"), str ); else return SetRegKey( value, _T("Favorites"), str ); } /////////////////////////////////////////////////////////////// // MRU Tool Arguments /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUToolArg(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_TOOLARGS); return CString( m_MRUToolArg[index] ); } void CP4Registry::AddMRUToolArg( LPCTSTR toolArg ) { ASSERT(m_AttemptedRead); if( lstrlen(toolArg) == 0) return; CString temp[MAX_MRU_TOOLARGS+1]; CString txt; // Put toolArg at the top of a temporary list of MRU args, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[numEntries]=toolArg; numEntries++; int i; for(i=0; i < MAX_MRU_TOOLARGS; i++) { m_MRUToolArg[i].TrimRight(); if(m_MRUToolArg[i].GetLength() > 0 && m_MRUToolArg[i].Compare(toolArg) != 0) { temp[numEntries]= m_MRUToolArg[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRU_TOOLARGS; i++) { if(i < numEntries) m_MRUToolArg[i]= temp[i]; else m_MRUToolArg[i].Empty(); } // And write the new MRU Tool Arguments CString keyName; for(i=0; i < MAX_MRU_TOOLARGS; i++) { keyName.Format(_T("Arg%d"), i); SetRegKey( m_MRUToolArg[i], RecentToolArgList, keyName); } } /////////////////////////////////////////////////////////////// // MRU Find Strings /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUFindStr(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_FINDSTRS); return CString( m_MRUFindStr[index] ); } void CP4Registry::AddMRUFindStr( LPCTSTR findStr ) { ASSERT(m_AttemptedRead); if( lstrlen(findStr) == 0) return; CString temp[MAX_MRU_FINDSTRS+1]; CString txt; // Put findStr at the top of a temporary list of MRU args, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[numEntries]=findStr; numEntries++; int i; for(i=0; i < MAX_MRU_FINDSTRS; i++) { m_MRUFindStr[i].TrimRight(); if(m_MRUFindStr[i].GetLength() > 0 && m_MRUFindStr[i].Compare(findStr) != 0) { temp[numEntries]= m_MRUFindStr[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRU_FINDSTRS; i++) { if(i < numEntries) m_MRUFindStr[i]= temp[i]; else m_MRUFindStr[i]= ""; } // And write the new MRU Find String CString keyName; for(i=0; i < MAX_MRU_FINDSTRS; i++) { keyName.Format(_T("FindStr%d"), i); SetRegKey( m_MRUFindStr[i], RecentFindStrList, keyName); } } /////////////////////////////////////////////////////////////// // MRU viewers /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUViewer(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_VIEWERS); return CString( m_MRUViewer[index] ); } CString CP4Registry::GetMRUViewerName(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_VIEWERS); if(m_MRUViewer[index].GetLength() ==0 ) return CString(""); else { int lastSlash=m_MRUViewer[index].ReverseFind(_T('\\')); if(lastSlash != -1) return CString(m_MRUViewer[index].Mid(lastSlash+1)); else return CString(m_MRUViewer[index]); } } void CP4Registry::AddMRUViewer( LPCTSTR viewerPath ) { ASSERT(m_AttemptedRead); if( lstrlen(viewerPath) == 0) { ASSERT(0); return; } CString temp[MAX_MRU_VIEWERS+1]; CString txt; // Put viewerPath at the top of a temporary list of MRU viewers, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[numEntries]=viewerPath; numEntries++; int i; for(i=0; i < MAX_MRU_VIEWERS; i++) { m_MRUViewer[i].TrimRight(); if(m_MRUViewer[i].GetLength() > 0 && m_MRUViewer[i].Compare(viewerPath) != 0) { temp[numEntries]= m_MRUViewer[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRU_VIEWERS; i++) { if(i < numEntries) m_MRUViewer[i]= temp[i]; else m_MRUViewer[i].Empty(); } // And write the new MRU Viewers CString keyName; for(i=0; i < MAX_MRU_VIEWERS; i++) { keyName.Format(_T("File%d"), i); SetRegKey( m_MRUViewer[i], RecentViewerList, keyName); } } void CP4Registry::RmvMRUViewer( LPCTSTR viewerPath ) { int i, j; CString nuthin; ASSERT(m_AttemptedRead); CString keyName; for(i=j=0; i < MAX_MRU_VIEWERS; i++) { if (m_MRUViewer[i].Compare(viewerPath)) { keyName.Format(_T("File%d"), j++); SetRegKey( m_MRUViewer[i], RecentViewerList, keyName ); } else m_MRUViewer[i].Empty(); } // Write empty MRU Viewers while (j < MAX_MRU_VIEWERS) { keyName.Format(_T("File%d"), j++); SetRegKey( nuthin, RecentViewerList, keyName ); } } /////////////////////////////////////////////////////////////// // MRU job filters /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUFilter(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_FILTERS); return CString( m_MRUFilter[index] ); } void CP4Registry::AddMRUFilter( LPCTSTR filterStr ) { ASSERT(m_AttemptedRead); if( lstrlen(filterStr) == 0) { ASSERT(0); return; } CString temp[MAX_MRU_FILTERS+1]; CString txt; // Put filterStr at the top of a temporary list of MRU filters, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[numEntries]=filterStr; numEntries++; int i; for(i=0; i < MAX_MRU_FILTERS; i++) { m_MRUFilter[i].TrimRight(); if(m_MRUFilter[i].GetLength() > 0 && m_MRUFilter[i].Compare(filterStr) != 0) { temp[numEntries]= m_MRUFilter[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRU_FILTERS; i++) { if(i < numEntries) m_MRUFilter[i]= temp[i]; else m_MRUFilter[i].Empty(); } // And write the new MRU Filters CString keyName; for(i=0; i < MAX_MRU_FILTERS; i++) { keyName.Format(_T("Filter%d"), i); SetRegKey( m_MRUFilter[i], RecentFilterList, keyName); } } void CP4Registry::RmvMRUFilter( LPCTSTR filterStr ) { int i, j; CString nuthin; ASSERT(m_AttemptedRead); CString keyName; for(i=j=0; i < MAX_MRU_FILTERS; i++) { if (m_MRUFilter[i].Compare(filterStr)) { keyName.Format(_T("Filter%d"), j++); SetRegKey( m_MRUFilter[i], RecentFilterList, keyName ); } else m_MRUFilter[i].Empty(); } // Write empty MRU Filters while (j < MAX_MRU_FILTERS) { keyName.Format(_T("Filter%d"), j++); SetRegKey( nuthin, RecentFilterList, keyName ); } } /////////////////////////////////////////////////////////////// // MRU submitted changelist filters /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUChgFilter(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRUCHG_FILTERS); return CString( m_MRUChgFilter[index] ); } void CP4Registry::AddMRUChgFilter( LPCTSTR filterStr ) { ASSERT(m_AttemptedRead); if( lstrlen(filterStr) == 0) { ASSERT(0); return; } CString temp[MAX_MRUCHG_FILTERS+1]; CString txt=filterStr; txt.TrimRight(); // Put filterStr at the top of a temporary list of MRU chg filters, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[numEntries]=txt; numEntries++; int i; for(i=0; i < MAX_MRUCHG_FILTERS; i++) { m_MRUChgFilter[i].TrimRight(); if(m_MRUChgFilter[i].GetLength() > 0 && m_MRUChgFilter[i].Compare(txt) != 0) { temp[numEntries]= m_MRUChgFilter[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRUCHG_FILTERS; i++) { if(i < numEntries) m_MRUChgFilter[i]= temp[i]; else m_MRUChgFilter[i].Empty(); } // And write the new MRU Filters CString keyName; for(i=0; i < MAX_MRUCHG_FILTERS; i++) { keyName.Format(_T("Filter%d"), i); SetRegKey( m_MRUChgFilter[i], RecentChgFilterList, keyName); } } void CP4Registry::RmvMRUChgFilter( LPCTSTR filterStr ) { int i, j; CString nuthin; ASSERT(m_AttemptedRead); CString keyName; for(i=j=0; i < MAX_MRUCHG_FILTERS; i++) { if (m_MRUChgFilter[i].Compare(filterStr)) { keyName.Format(_T("Filter%d"), j++); SetRegKey( m_MRUChgFilter[i], RecentChgFilterList, keyName ); } else m_MRUChgFilter[i].Empty(); } // Write empty MRU Filters while (j < MAX_MRUCHG_FILTERS) { keyName.Format(_T("Filter%d"), j++); SetRegKey( nuthin, RecentChgFilterList, keyName ); } } /////////////////////////////////////////////////////////////// // MRU Ports /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUPort(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_PORTS); return CString( m_MRUPort[index] ); } void CP4Registry::AddMRUPort( LPCTSTR portStr, LPCTSTR charsetStr ) { ASSERT(m_AttemptedRead); if( lstrlen(portStr) == 0) { ASSERT(0); return; } CString temp[MAX_MRU_PORTS+1]; CString temp2[MAX_MRU_PORTS+1]; CString txt; // Put portStr at the top of a temporary list of MRU ports, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[0]=portStr; temp2[0]=charsetStr; if (temp[0].Find('@') != -1) return; // ports with @ in them cause problems - don't add 'em to the mru list numEntries++; int i; for(i=0; i < MAX_MRU_PORTS; i++) { m_MRUPort[i].TrimRight(); if(m_MRUPort[i].GetLength() > 0 && m_MRUPort[i].Compare(portStr) != 0) { temp[numEntries]= m_MRUPort[i]; temp2[numEntries]= m_MRUPortCharset[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRU_PORTS; i++) { if(i < numEntries) { m_MRUPort[i]= temp[i]; m_MRUPortCharset[i]= temp2[i]; } else { m_MRUPort[i].Empty(); m_MRUPortCharset[i].Empty(); } } // And write the new MRU Ports and Charsets CString keyName; for(i=0; i < MAX_MRU_PORTS; i++) { keyName.Format(_T("Port%d"), i); SetRegKey( m_MRUPort[i], RecentPortList, keyName); keyName.Format(_T("Charset%d"), i); SetRegKey( m_MRUPortCharset[i], RecentPortList, keyName); } } /////////////////////////////////////////////////////////////// // MRU Charsets /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUCharset(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_CHARSETS); return CString( m_MRUCharset[index] ); } void CP4Registry::AddMRUCharset( LPCTSTR charsetStr ) { ASSERT(m_AttemptedRead); if( lstrlen(charsetStr) == 0) return; CString temp[MAX_MRU_CHARSETS+1]; CString txt; // Put charsetStr at the top of a temporary list of MRU Charsets, // and add all non-blank, non-duplicates from existing MRU list int numEntries=0; temp[0]=charsetStr; if (temp[0].Find('@') != -1) return; // Charsets with @ in them cause problems - don't add 'em to the mru list numEntries++; int i; for(i=0; i < MAX_MRU_CHARSETS; i++) { m_MRUCharset[i].TrimRight(); if(m_MRUCharset[i].GetLength() > 0 && m_MRUCharset[i].Compare(charsetStr) != 0) { temp[numEntries]= m_MRUCharset[i]; numEntries++; } } // Then copy temp list over MRU list, for(i=0; i < MAX_MRU_CHARSETS; i++) { if(i < numEntries) m_MRUCharset[i]= temp[i]; else m_MRUCharset[i].Empty(); } // And write the new MRU Charsets CString keyName; for(i=0; i < MAX_MRU_CHARSETS; i++) { keyName.Format(_T("Charset%d"), i); SetRegKey( m_MRUCharset[i], RecentCharsetList, keyName); } } /////////////////////////////////////////////////////////////// // MRU Port-Client-User combinations /////////////////////////////////////////////////////////////// CString CP4Registry::GetMRUPcu(int index) { ASSERT(m_AttemptedRead); ASSERT(index >=0 && index < MAX_MRU_PCUS); return CString( m_MRUPcu[index] ); } void CP4Registry::AddMRUPcu( LPCTSTR pcuStr ) { ASSERT(m_AttemptedRead); if( lstrlen(pcuStr) == 0) { ASSERT(0); return; } GET_P4REGPTR()->SetExpandPath(_T("")); CString temp[MAX_MRU_PCUS+1]; CString txt; // Put pcuStr at the top of a temporary list of MRU pcus, // and add all non-blank, non-duplicates from existing MRU list int j; int numEntries=0; temp[0]=pcuStr; temp[0].TrimRight(); if (temp[0].Find('@') != -1) return; // PCUs with @ in them cause problems - don't add 'em to the mru list numEntries++; CString str; BOOL b = FALSE; int i; for(i=-1; ++i < MAX_MRU_PCUS; ) { m_MRUPcu[i].TrimRight(); if(m_MRUPcu[i].GetLength() > 0) { str = m_MRUPcu[i]; if ((j = str.Find(_T('@'))) > 0) { str = str.Left(j); str.TrimRight(); } if (str.Compare(pcuStr) != 0) { temp[numEntries]= m_MRUPcu[i]; numEntries++; } else { temp[0] = m_MRUPcu[i]; if ((j = temp[0].Find(_T('@'))) != -1) { GET_P4REGPTR()->SetExpandPath(temp[0].Right(temp[0].GetLength() - j - 1)); b = TRUE; // we found an expand-path } } } } if (!b) // do we need to search the Favorites for an expand-path? { for(i=-1; ++i < MAX_FAVORITES; ) { if (m_FavMenuName[i].GetLength() > 0) { str = m_FavMenuName[i]; if ((j = str.Find(_T('@'))) > 0) { str = str.Left(j); str.TrimRight(); } if (str.Compare(pcuStr) == 0) { if (j > 0) { str = m_FavMenuName[i].Mid(j+1); if ((j = str.Find(_T('#'))) != -1) str = str.Left(j); GET_P4REGPTR()->SetExpandPath(str); } break; } } } } // Then copy temp list over MRU list, for(i=-1; ++i < MAX_MRU_PCUS; ) { if(i < numEntries) m_MRUPcu[i]= temp[i]; else m_MRUPcu[i].Empty(); } // And write the new MRU Pcus CString keyName; for(i=0; i < MAX_MRU_PCUS; i++) { keyName.Format(_T("Pcu%d"), i); SetRegKey( m_MRUPcu[i], RecentPcuList, keyName ); } } void CP4Registry::RmvMRUPcu( LPCTSTR pcuStr ) { int i, j, k; CString nuthin; ASSERT(m_AttemptedRead); CString keyName; for(i=j=0; i < MAX_MRU_PCUS; i++) { CString str = m_MRUPcu[i]; if ((k = str.Find(_T('@'))) > 0) { str = str.Left(k); str.TrimRight(); } if (str.Compare(pcuStr)) { keyName.Format(_T("Pcu%d"), j++); SetRegKey( m_MRUPcu[i], RecentPcuList, keyName ); } else m_MRUPcu[i].Empty(); } // Write empty MRU Pcus while (j < MAX_MRU_PCUS) { keyName.Format(_T("Pcu%d"), j++); SetRegKey( nuthin, RecentPcuList, keyName ); } } BOOL CP4Registry::AddMRUPcuPath( LPCTSTR path ) { int j; ASSERT(m_AttemptedRead); CString str; CString pcu0 = m_MRUPcu[0]; if ((j = pcu0.Find(_T('@'))) > 0) { pcu0 = pcu0.Left(j); pcu0.TrimRight(); } if (pcu0.IsEmpty()) return FALSE; CString newpath = path; if (!newpath.IsEmpty()) m_MRUPcu[0] = pcu0 + _T('@') + newpath; CString desc; int i; for(i=-1; ++i < MAX_FAVORITES; ) { if (m_FavMenuName[i].GetLength() > 0) { str = m_FavMenuName[i]; if ((j = str.Find(_T('#'))) > 0) { desc = str.Mid(j+1); str = str.Left(j); str.TrimRight(); } else desc.Empty(); if ((j = str.Find(_T('@'))) > 0) { str = str.Left(j); str.TrimRight(); } if (str.Compare(pcu0) == 0) { str = m_FavMenuName[i].Mid(j+1); m_FavMenuName[i] = pcu0; if (!newpath.IsEmpty()) m_FavMenuName[i] += _T('@') + newpath; if (!desc.IsEmpty()) m_FavMenuName[i] += _T('#') + desc; str.Format(_T("MenuName%d"), i); SetRegKey( m_FavMenuName[i], _T("Favorites"), str ); break; } } } return SetRegKey( m_MRUPcu[0], RecentPcuList, LPCTSTR(_T("Pcu0")) ); } /////////////////////////////////////////////////////////////// // File Associations /////////////////////////////////////////////////////////////// BOOL CP4Registry::SetIgnoreWinAssoc(BOOL ignore) { CString str; str.Format(_T("%ld"), (long) ignore); m_IgnoreWinAssoc=ignore; return SetRegKey( str, _T("Options"), IgnoreWinAssoc ); } BOOL CP4Registry::SetAssociation(LPCTSTR extension, LPCTSTR application) { ASSERT(lstrlen(extension) > 0); CString newValue= extension; newValue+=_T("|"); newValue+=application; ///////// // Find the extension in the cache list and update the list POSITION pos=FindAssociation(extension); if(pos != NULL) { if(lstrlen(application)==0) { // delete from list m_AssocViewers.RemoveAt(pos); } else { // update on list m_AssocViewers.GetAt(pos)=newValue; } } else if(lstrlen(application)) { // add it to the list m_AssocViewers.AddHead(newValue); } ///////// // Find the value in the registry and update the registry HKEY key; DWORD disposition; long success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("Software\\Perforce\\P4Win\\Associations"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) { // Always delete the existing key success=RegDeleteValue( key, extension ); if((success == ERROR_SUCCESS || success == ERROR_FILE_NOT_FOUND) && lstrlen(application) > 0) { // Add a new key if required success= RegSetValueEx(key, extension, 0, REG_SZ, (LPBYTE) application, lstrlen(application) * sizeof(TCHAR) +1); } RegCloseKey(key); } return (success == ERROR_SUCCESS); } BOOL CP4Registry::ClearAssociation(LPCTSTR extension) { return SetAssociation(extension, _T("")); } CString CP4Registry::GetAssociatedApp(LPCTSTR extension) { ASSERT(lstrlen(extension) > 0); CString path; POSITION pos=FindAssociation(extension); if(pos == NULL) path=_T(""); else { path= m_AssocViewers.GetAt(pos); int bar= path.Find(_T("|")); if(bar == -1) ASSERT(0); else path=path.Mid(bar+1); } return CString(path); } CString CP4Registry::GetAssociatedAppName(LPCTSTR extension) { CString path= GetAssociatedApp(extension); int lastSlash=path.ReverseFind(_T('\\')); if(lastSlash != -1) return CString(path.Mid(lastSlash+1)); else return CString(path); } POSITION CP4Registry::FindAssociation(LPCTSTR extension) { int len=lstrlen(extension); POSITION pos= m_AssocViewers.GetHeadPosition(); POSITION lastpos; while(pos != NULL) { lastpos=pos; CString str= m_AssocViewers.GetNext(pos); if(_tcsncicmp(str.GetBuffer(len), extension, len) == 0 && str[len]==_T('|') ) { // make sure we return the position pointing at the correct entry pos=lastpos; break; } } return pos; } BOOL CP4Registry::SetDiffAssociation(LPCTSTR extension, LPCTSTR application) { ASSERT(lstrlen(extension) > 0); CString newValue= extension; newValue+=_T("|"); newValue+=application; ///////// // Find the extension in the cache list and update the list POSITION pos=FindDiffAssociation(extension); if(pos != NULL) { if(lstrlen(application)==0) { // delete from list m_AssocDiffs.RemoveAt(pos); } else { // update on list m_AssocDiffs.GetAt(pos)=newValue; } } else if(lstrlen(application)) { // add it to the list m_AssocDiffs.AddHead(newValue); } ///////// // Find the value in the registry and update the registry HKEY key; DWORD disposition; long success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("Software\\Perforce\\P4Win\\DiffAssocs"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) { // Always delete the existing key success=RegDeleteValue( key, extension ); if((success == ERROR_SUCCESS || success == ERROR_FILE_NOT_FOUND) && lstrlen(application) > 0) { // Add a new key if required success= RegSetValueEx(key, extension, 0, REG_SZ, (LPBYTE) application, lstrlen(application)*sizeof(TCHAR)+1); } RegCloseKey(key); } return (success == ERROR_SUCCESS); } BOOL CP4Registry::ClearDiffAssociation(LPCTSTR extension) { return SetDiffAssociation(extension, _T("")); } CString CP4Registry::GetAssociatedDiff(LPCTSTR extension) { ASSERT(lstrlen(extension) > 0); CString path; POSITION pos=FindDiffAssociation(extension); if(pos == NULL) path=_T(""); else { path= m_AssocDiffs.GetAt(pos); int bar= path.Find(_T("|")); if(bar == -1) ASSERT(0); else path=path.Mid(bar+1); } return CString(path); } CString CP4Registry::GetAssociatedDiffName(LPCTSTR extension) { CString path= GetAssociatedDiff(extension); int lastSlash=path.ReverseFind(_T('\\')); if(lastSlash != -1) return CString(path.Mid(lastSlash+1)); else return CString(path); } POSITION CP4Registry::FindDiffAssociation(LPCTSTR extension) { int len=lstrlen(extension); POSITION pos= m_AssocDiffs.GetHeadPosition(); POSITION lastpos; while(pos != NULL) { lastpos=pos; CString str= m_AssocDiffs.GetNext(pos); if(_tcsncicmp(str.GetBuffer(len), extension, len) == 0 && str[len]==_T('|') ) { // make sure we return the position pointing at the correct entry pos=lastpos; break; } } return pos; } BOOL CP4Registry::SetMergeAssociation(LPCTSTR extension, LPCTSTR application) { ASSERT(lstrlen(extension) > 0); CString newValue= extension; newValue+=_T("|"); newValue+=application; ///////// // Find the extension in the cache list and update the list POSITION pos=FindMergeAssociation(extension); if(pos != NULL) { if(lstrlen(application)==0) { // delete from list m_AssocMerges.RemoveAt(pos); } else { // update on list m_AssocMerges.GetAt(pos)=newValue; } } else if(lstrlen(application)) { // add it to the list m_AssocMerges.AddHead(newValue); } ///////// // Find the value in the registry and update the registry HKEY key; DWORD disposition; long success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("Software\\Perforce\\P4Win\\MergeAssocs"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) { // Always delete the existing key success=RegDeleteValue( key, extension ); if((success == ERROR_SUCCESS || success == ERROR_FILE_NOT_FOUND) && lstrlen(application) > 0) { // Add a new key if required success= RegSetValueEx(key, extension, 0, REG_SZ, (LPBYTE) application, lstrlen(application)*sizeof(TCHAR)+1); } RegCloseKey(key); } return (success == ERROR_SUCCESS); } BOOL CP4Registry::ClearMergeAssociation(LPCTSTR extension) { return SetMergeAssociation(extension, _T("")); } CString CP4Registry::GetAssociatedMerge(LPCTSTR extension) { ASSERT(lstrlen(extension) > 0); CString path; POSITION pos=FindMergeAssociation(extension); if(pos == NULL) path=_T(""); else { path= m_AssocMerges.GetAt(pos); int bar= path.Find(_T("|")); if(bar == -1) ASSERT(0); else path=path.Mid(bar+1); } return CString(path); } CString CP4Registry::GetAssociatedMergeName(LPCTSTR extension) { CString path= GetAssociatedMerge(extension); int lastSlash=path.ReverseFind(_T('\\')); if(lastSlash != -1) return CString(path.Mid(lastSlash+1)); else return CString(path); } POSITION CP4Registry::FindMergeAssociation(LPCTSTR extension) { int len=lstrlen(extension); POSITION pos= m_AssocMerges.GetHeadPosition(); POSITION lastpos; while(pos != NULL) { lastpos=pos; CString str= m_AssocMerges.GetNext(pos); if(_tcsncicmp(str.GetBuffer(len), extension, len) == 0 && str[len]==_T('|') ) { // make sure we return the position pointing at the correct entry pos=lastpos; break; } } return pos; } void CP4Registry::WriteVirginRegistry() { HKEY key; DWORD disposition; long success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("AppEvents\\EventLabels\\PerforceCompleted"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) { if((success == ERROR_SUCCESS || success == ERROR_FILE_NOT_FOUND)) { // Add a new value success= RegSetValueEx(key, _T(""), 0, REG_SZ, (LPBYTE) _T("Perforce: Task Completed"), lstrlen(_T("Perforce: Task Completed"))*sizeof(TCHAR)+1); } RegCloseKey(key); } if (success != ERROR_SUCCESS ) RegWriteFailed(success); success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("AppEvents\\EventLabels\\PerforceWarning"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) { if((success == ERROR_SUCCESS || success == ERROR_FILE_NOT_FOUND)) { // Add a new value success= RegSetValueEx(key, _T(""), 0, REG_SZ, (LPBYTE) _T("Perforce: Warning"), lstrlen(_T("Perforce: Warning"))*sizeof(TCHAR)+1); } RegCloseKey(key); } success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("AppEvents\\EventLabels\\PerforceError"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) { if((success == ERROR_SUCCESS || success == ERROR_FILE_NOT_FOUND)) { // Add a new value success= RegSetValueEx(key, _T(""), 0, REG_SZ, (LPBYTE) _T("Perforce: Error"), lstrlen(_T("Perforce: Error"))*sizeof(TCHAR)+1); } RegCloseKey(key); } success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("AppEvents\\Schemes\\Apps\\.Default\\PerforceCompleted"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) RegCloseKey(key); success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("AppEvents\\Schemes\\Apps\\.Default\\PerforceWarning"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) RegCloseKey(key); success= RegCreateKeyEx( HKEY_CURRENT_USER, _T("AppEvents\\Schemes\\Apps\\.Default\\PerforceError"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &key, &disposition ); if(success == ERROR_SUCCESS) RegCloseKey(key); } BOOL CP4Registry::TestRegWrite2HKLM() { HKEY hKey = NULL; CString sKey = _T("Software\\Perforce\\environment\\"); DWORD disposition; TCHAR test[] = _T("test"); LONG rc; if ( (rc = RegCreateKeyEx( HKEY_LOCAL_MACHINE, sKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ|KEY_WRITE, NULL, &hKey, &disposition )) == ERROR_SUCCESS ) { disposition = sizeof(test); rc = RegSetValueEx(hKey, _T("P4Win"), NULL, REG_SZ, (LPBYTE)test, disposition); } if (rc != ERROR_SUCCESS ) { RegWriteFailed(rc); return FALSE; } return TRUE; } void CP4Registry::RegWriteFailed(LONG rc) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, rc, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); CString msg; msg.FormatMessage(IDS_FAILEDREGWRITE, (TCHAR *)lpMsgBuf); MainFrame()->AddToStatusLog( msg, SV_WARNING ); }