Index: src/ch/CfgProperties.h =================================================================== diff -u -r3493e9fc470285b0a0b417d50be281467a071eb7 -rd037fe7234987387e26b0be460be37a956fcb27d --- src/ch/CfgProperties.h (.../CfgProperties.h) (revision 3493e9fc470285b0a0b417d50be281467a071eb7) +++ src/ch/CfgProperties.h (.../CfgProperties.h) (revision d037fe7234987387e26b0be460be37a956fcb27d) @@ -1,112 +1,306 @@ -/************************************************************************ - Copy Handler 1.x - program for copying data in Microsoft Windows - systems. - Copyright (C) 2001-2004 Ixen Gerthannes (copyhandler@o2.pl) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*************************************************************************/ -#ifndef __PROPERTYTYPES_H__ -#define __PROPERTYTYPES_H__ - -#pragma once - -// properties definitions -#define PP_PCLIPBOARDMONITORING 0 -#define PP_PMONITORSCANINTERVAL 1 -#define PP_PRELOADAFTERRESTART 2 -#define PP_PSHUTDOWNAFTREFINISHED 3 -#define PP_PTIMEBEFORESHUTDOWN 4 -#define PP_PFORCESHUTDOWN 5 -#define PP_PAUTOSAVEINTERVAL 6 -#define PP_PPROCESSPRIORITYCLASS 7 -#define PP_PAUTOSAVEDIRECTORY 8 -#define PP_PPLUGINSDIR 9 -#define PP_PHELPDIR 10 -#define PP_PLANGUAGE 11 -#define PP_PLANGDIR 12 - -#define PP_STATUSREFRESHINTERVAL 13 -#define PP_STATUSSHOWDETAILS 14 -#define PP_STATUSAUTOREMOVEFINISHED 15 - -#define PP_FDWIDTH 16 -#define PP_FDHEIGHT 17 -#define PP_FDSHORTCUTLISTSTYLE 18 -#define PP_FDEXTENDEDVIEW 19 -#define PP_FDIGNORESHELLDIALOGS 20 - -#define PP_MVSHOWFILENAMES 21 -#define PP_MVSHOWSINGLETASKS 22 -#define PP_MVREFRESHINTERVAL 23 -#define PP_MVAUTOSHOWWHENRUN 24 -#define PP_MVAUTOHIDEWHENEMPTY 25 -#define PP_MVUSESMOOTHPROGRESS 26 - -#define PP_CMUSEAUTOCOMPLETEFILES 27 -#define PP_CMSETDESTATTRIBUTES 28 -#define PP_CMSETDESTDATE 29 -#define PP_CMPROTECTROFILES 30 -#define PP_CMLIMITMAXOPERATIONS 31 -#define PP_CMREADSIZEBEFOREBLOCKING 32 -#define PP_CMSHOWVISUALFEEDBACK 33 -#define PP_CMUSETIMEDFEEDBACK 34 -#define PP_CMFEEDBACKTIME 35 -#define PP_CMAUTORETRYONERROR 36 -#define PP_CMAUTORETRYINTERVAL 37 -#define PP_CMDEFAULTPRIORITY 38 -#define PP_CMDISABLEPRIORITYBOOST 39 -#define PP_CMDELETEAFTERFINISHED 40 -#define PP_CMCREATELOG 41 - -#define PP_SHSHOWCOPY 42 -#define PP_SHSHOWMOVE 43 -#define PP_SHSHOWCOPYMOVE 44 -#define PP_SHSHOWPASTE 45 -#define PP_SHSHOWPASTESPECIAL 46 -#define PP_SHSHOWCOPYTO 47 -#define PP_SHSHOWMOVETO 48 -#define PP_SHSHOWCOPYMOVETO 49 -#define PP_SHSHOWFREESPACE 50 -#define PP_SHSHOWSHELLICONS 51 -#define PP_SHUSEDRAGDROP 52 -#define PP_SHDEFAULTACTION 53 - -#define PP_BFUSEONLYDEFAULT 54 -#define PP_BFDEFAULT 55 -#define PP_BFONEDISK 56 -#define PP_BFTWODISKS 57 -#define PP_BFCD 58 -#define PP_BFLAN 59 -#define PP_BFUSENOBUFFERING 60 -#define PP_BFBOUNDARYLIMIT 61 - -#define PP_LOGPATH 62 -#define PP_LOGENABLELOGGING 63 -#define PP_LOGLIMITATION 64 -#define PP_LOGMAXLIMIT 65 -#define PP_LOGPRECISELIMITING 66 -#define PP_LOGTRUNCBUFFERSIZE 67 - -#define PP_SNDPLAYSOUNDS 68 -#define PP_SNDERRORSOUNDPATH 69 -#define PP_SNDFINISHEDSOUNDPATH 70 - -#define PP_SHORTCUTS 71 -#define PP_RECENTPATHS 72 - -// register function -bool RegisterProperties(CConfigManager* pManager); - -#endif \ No newline at end of file +/*************************************************************************** +* Copyright (C) 2001-2008 by J�zef Starosczyk * +* ixen@copyhandler.com * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU Library General Public License * +* (version 2) as published by the Free Software Foundation; * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public * +* License along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ +#ifndef __PROPERTYTYPES_H__ +#define __PROPERTYTYPES_H__ + +#pragma once + +#include "../libchcore/TTaskConfiguration.h" +#include "UpdateVersionInfo.h" + +namespace chcore { class TConfig; } + +// properties definitions +enum ECHProperties +{ + PP_PCLIPBOARDMONITORING = 0, + PP_PMONITORSCANINTERVAL, + PP_PRELOADAFTERRESTART, + + PP_PCHECK_FOR_UPDATES_FREQUENCY, + PP_PUPDATECHANNEL, + PP_PUPDATE_USE_SECURE_CONNECTION, + + PP_PSHUTDOWNAFTREFINISHED, + PP_PTIMEBEFORESHUTDOWN, + PP_PFORCESHUTDOWN, + PP_PAUTOSAVEINTERVAL, + PP_PPROCESSPRIORITYCLASS, + PP_PLANGUAGE, + + PP_STATUSREFRESHINTERVAL, + PP_STATUSAUTOREMOVEFINISHED, + + PP_FDWIDTH, + PP_FDHEIGHT, + PP_FDSHORTCUTLISTSTYLE, + PP_FDEXTENDEDVIEW, + PP_FDIGNORESHELLDIALOGS, + + PP_MVSHOWFILENAMES, + PP_MVSHOWSINGLETASKS, + PP_MVREFRESHINTERVAL, + PP_MVAUTOSHOWWHENRUN, + PP_MVAUTOHIDEWHENEMPTY, + PP_MVUSESMOOTHPROGRESS, + + PP_CMSETDESTATTRIBUTES, + PP_CMSETDESTDATE, + PP_CMPROTECTROFILES, + PP_CMLIMITMAXOPERATIONS, + PP_CMREADSIZEBEFOREBLOCKING, + PP_CMFASTMOVEBEFOREBLOCKING, + + PP_CMDEFAULTPRIORITY, + PP_CMDISABLEPRIORITYBOOST, + PP_CMDELETEAFTERFINISHED, + + PP_SHSHOWCOPY, + PP_SHSHOWMOVE, + PP_SHSHOWCOPYMOVE, + PP_SHSHOWPASTE, + PP_SHSHOWPASTESPECIAL, + PP_SHSHOWCOPYTO, + PP_SHSHOWMOVETO, + PP_SHSHOWCOPYMOVETO, + PP_SHSHOWFREESPACE, + PP_SHSHOWSHELLICONS, + PP_SHINTERCEPTDRAGDROP, + PP_SHINTERCEPTKEYACTIONS, + PP_SHINTERCEPTCTXMENUACTIONS, + + PP_BFUSEONLYDEFAULT, + PP_BFDEFAULT, + PP_BFONEDISK, + PP_BFTWODISKS, + PP_BFCD, + PP_BFLAN, + PP_BFUSENOBUFFERING, + PP_BFBOUNDARYLIMIT, + PP_BFQUEUEDEPTH, + + PP_LOGENABLELOGGING, + PP_LOGMAXSIZE, + PP_LOGLEVEL, + + PP_SNDPLAYSOUNDS, + PP_SNDERRORSOUNDPATH, + PP_SNDFINISHEDSOUNDPATH, + + PP_SHORTCUTS, + PP_RECENTPATHS, + + // dialog box "do not show" info + PP_HIDE_SHELLEXT_UNREGISTERED, + PP_HIDE_SHELLEXT_VERSIONMISMATCH, + + // invisible options + PP_LAST_UPDATE_TIMESTAMP, +}; + +enum EUpdatesFrequency : unsigned int +{ + eFreq_Never, + eFreq_EveryStartup, + eFreq_Daily, + eFreq_Weekly, + eFreq_OnceEvery2Weeks, + eFreq_Monthly, + eFreq_Quarterly, + eFreq_Max +}; + +enum EDoNotShowDialog_ShellExtension +{ + eDNS_AlwaysShow = 0, + eDNS_HideAndRegister = 1, + eDNS_HideAndDontRegister = 2 +}; + +enum EUseSecureConnection +{ + eSecure_No = 0, + eSecure_Yes = 1, + eSecure_Auto = 2 +}; + +/////////////////////////////////////////////////////////////////////////////////////////////// +// specific branches in configuration + +#define BRANCH_TASK_SETTINGS _T("CHConfig.TaskSettings") + +///////////////////////////////////////////////////////////////////////////////////////////// +// Properties definitions + +template struct PropData; + +#define PROPERTY(enum_id, val_type, val_name, def_value)\ + template<> struct PropData\ + {\ + typedef val_type value_type;\ + static value_type GetDefaultValue() { return def_value; }\ + static const wchar_t* GetPropertyName() { return val_name; }\ + static const wchar_t* GetPropertyNamePrefix() { return _T(""); }\ + } + +#define PROPERTY_MINMAX(enum_id, val_type, val_name, def_value, min_val, max_val)\ + template<> struct PropData\ + {\ + typedef val_type value_type;\ + static value_type GetDefaultValue() { return def_value; }\ + static const wchar_t* GetPropertyName() { return val_name; }\ + static const wchar_t* GetPropertyNamePrefix() { return _T(""); }\ + } + +#define ADAPT_TASK_PROPERTY(enum_id, task_enum_id)\ + template<> struct PropData\ +{\ + typedef chcore::TaskPropData::value_type value_type;\ + static value_type GetDefaultValue() { return chcore::TaskPropData::GetDefaultValue(); }\ + static const wchar_t* GetPropertyName() { return chcore::TaskPropData::GetPropertyName(); }\ + static const wchar_t* GetPropertyNamePrefix() { return BRANCH_TASK_SETTINGS _T("."); }\ +} + +const long long Hour = 3600UL*1000UL; +const long long Minute = 60UL*1000UL; +const long long Second = 1000UL; + +typedef std::vector CStringVector; + +/////////////////////////////////////////////////////////////////////////////////////////////// +// General settings +PROPERTY(PP_PCLIPBOARDMONITORING, bool, _T("CHConfig.General.Program.EnableClipboardMonitoring"), false); +PROPERTY_MINMAX(PP_PMONITORSCANINTERVAL, unsigned int, _T("CHConfig.General.Program.ClipboardMonitorScanInterval"), 1000, 0, 3600UL*1000UL); +PROPERTY(PP_PRELOADAFTERRESTART, bool, _T("CHConfig.General.Program.RunWithSystem"), false); + +PROPERTY_MINMAX(PP_PCHECK_FOR_UPDATES_FREQUENCY, unsigned int, _T("CHConfig.General.Program.Updates.Frequency"), eFreq_Weekly, eFreq_Never, eFreq_Max - 1); +PROPERTY_MINMAX(PP_PUPDATECHANNEL, int, _T("CHConfig.General.Program.Updates.UpdateChannel"), UpdateVersionInfo::eReleaseCandidate, UpdateVersionInfo::eStable, UpdateVersionInfo::eMax - 1); +PROPERTY_MINMAX(PP_PUPDATE_USE_SECURE_CONNECTION, unsigned int, _T("CHConfig.General.Program.Updates.UseSecureConnection"), eSecure_Auto, eSecure_No, eSecure_Auto); + +PROPERTY(PP_PPROCESSPRIORITYCLASS, int, _T("CHConfig.General.Program.ProcessPriority"), NORMAL_PRIORITY_CLASS); +PROPERTY(PP_PLANGUAGE, CString, _T("CHConfig.General.Program.Language"), _T("\\Langs\\English.lng")); + +PROPERTY(PP_SHORTCUTS, CStringVector, _T("CHConfig.General.Program.Shortcuts.Shortcut"), (CStringVector())); +PROPERTY(PP_RECENTPATHS, CStringVector, _T("CHConfig.General.Program.RecentPaths.Path"), (CStringVector())); + +PROPERTY(PP_LOGENABLELOGGING, bool, _T("CHConfig.General.Logging.Enable"), true); +PROPERTY_MINMAX(PP_LOGMAXSIZE, int, _T("CHConfig.General.Logging.SizeLimit"), 512384, 1024, 0xffffffff); +PROPERTY_MINMAX(PP_LOGLEVEL, unsigned int, _T("CHConfig.General.Logging.LoggingLevel"), 1, 0, 3); + +// GUI +PROPERTY_MINMAX(PP_STATUSREFRESHINTERVAL, unsigned int, _T("CHConfig.GUI.StatusDialog.RefreshInterval"), 1000, 0, 24*Hour); +PROPERTY(PP_STATUSAUTOREMOVEFINISHED, bool, _T("CHConfig.GUI.StatusDialog.AutoRemoveFinishedTasks"), false); + +PROPERTY_MINMAX(PP_FDWIDTH, int, _T("CHConfig.GUI.FolderDialog.Width"), -1, -1, 32767); +PROPERTY_MINMAX(PP_FDHEIGHT, int, _T("CHConfig.GUI.FolderDialog.Height"), -1, -1, 32767); +PROPERTY_MINMAX(PP_FDSHORTCUTLISTSTYLE, int, _T("CHConfig.GUI.FolderDialog.ShortcutListStyle"), 1, 0, 3); +PROPERTY(PP_FDEXTENDEDVIEW, bool, _T("CHConfig.GUI.FolderDialog.ExtendedView"), true); +PROPERTY(PP_FDIGNORESHELLDIALOGS, bool, _T("CHConfig.GUI.FolderDialog.IgnoreShellDialogs"), false); + +PROPERTY(PP_MVSHOWFILENAMES, bool, _T("CHConfig.GUI.MiniView.ShowFilenames"), true); +PROPERTY(PP_MVSHOWSINGLETASKS, bool, _T("CHConfig.GUI.MiniView.ShowSingleTasks"), true); +PROPERTY_MINMAX(PP_MVREFRESHINTERVAL, unsigned int, _T("CHConfig.GUI.MiniView.RefreshInterval"), 200, 0, 24*Hour); +PROPERTY(PP_MVAUTOSHOWWHENRUN, bool, _T("CHConfig.GUI.MiniView.AutoShowOnStartup"), true); +PROPERTY(PP_MVAUTOHIDEWHENEMPTY, bool, _T("CHConfig.GUI.MiniView.AutohideWhenEmpty"), true); +PROPERTY(PP_MVUSESMOOTHPROGRESS, bool, _T("CHConfig.GUI.MiniView.UseSmoothProgress"), true); + +// Core engine +PROPERTY_MINMAX(PP_PAUTOSAVEINTERVAL, unsigned int, _T("CHConfig.Core.AutosaveInterval"), 30*Second, 0, 24*Hour); + +PROPERTY(PP_PSHUTDOWNAFTREFINISHED, bool, _T("CHConfig.Core.Shutdown.ShutdownSystemAfterFinished"), false); +PROPERTY_MINMAX(PP_PTIMEBEFORESHUTDOWN, int, _T("CHConfig.Core.Shutdown.TimeBeforeShutdown"), 10000, 0, 24*Hour); +PROPERTY(PP_PFORCESHUTDOWN, bool, _T("CHConfig.Core.Shutdown.ForceShutdown"), false); + +PROPERTY(PP_SNDPLAYSOUNDS, bool, _T("CHConfig.Core.Notifications.Sounds.Enable"), true); +PROPERTY(PP_SNDERRORSOUNDPATH, CString, _T("CHConfig.Core.Notifications.Sounds.ErrorSoundPath"), _T("\\media\\chord.wav")); +PROPERTY(PP_SNDFINISHEDSOUNDPATH, CString, _T("CHConfig.Core.Notifications.Sounds.FinishedSoundPath"), _T("\\media\\ding.wav")); + +PROPERTY(PP_CMLIMITMAXOPERATIONS, unsigned int, _T("CHConfig.Core.Operation.LimitMaxOperations"), 1); + +// Task default settings (see TTaskConfiguration.h) +ADAPT_TASK_PROPERTY(PP_BFUSEONLYDEFAULT, chcore::eTO_UseOnlyDefaultBuffer); +ADAPT_TASK_PROPERTY(PP_BFDEFAULT, chcore::eTO_DefaultBufferSize); +ADAPT_TASK_PROPERTY(PP_BFONEDISK, chcore::eTO_OneDiskBufferSize); +ADAPT_TASK_PROPERTY(PP_BFTWODISKS, chcore::eTO_TwoDisksBufferSize); +ADAPT_TASK_PROPERTY(PP_BFCD, chcore::eTO_CDBufferSize); +ADAPT_TASK_PROPERTY(PP_BFLAN, chcore::eTO_LANBufferSize); +ADAPT_TASK_PROPERTY(PP_BFUSENOBUFFERING, chcore::eTO_DisableBuffering); +ADAPT_TASK_PROPERTY(PP_BFBOUNDARYLIMIT, chcore::eTO_DisableBufferingMinSize); +ADAPT_TASK_PROPERTY(PP_BFQUEUEDEPTH, chcore::eTO_BufferQueueDepth); + +ADAPT_TASK_PROPERTY(PP_CMSETDESTATTRIBUTES, chcore::eTO_SetDestinationAttributes); +ADAPT_TASK_PROPERTY(PP_CMSETDESTDATE, chcore::eTO_SetDestinationDateTime); +ADAPT_TASK_PROPERTY(PP_CMPROTECTROFILES, chcore::eTO_ProtectReadOnlyFiles); +ADAPT_TASK_PROPERTY(PP_CMREADSIZEBEFOREBLOCKING, chcore::eTO_ScanDirectoriesBeforeBlocking); +ADAPT_TASK_PROPERTY(PP_CMFASTMOVEBEFOREBLOCKING, chcore::eTO_FastMoveBeforeBlocking); +ADAPT_TASK_PROPERTY(PP_CMDEFAULTPRIORITY, chcore::eTO_ThreadPriority); +ADAPT_TASK_PROPERTY(PP_CMDISABLEPRIORITYBOOST, chcore::eTO_DisablePriorityBoost); +ADAPT_TASK_PROPERTY(PP_CMDELETEAFTERFINISHED, chcore::eTO_DeleteInSeparateSubTask); + +// Shell extension +PROPERTY(PP_SHSHOWCOPY, bool, _T("CHConfig.ShellExtension.ShowCommands.Copy"), true); +PROPERTY(PP_SHSHOWMOVE, bool, _T("CHConfig.ShellExtension.ShowCommands.Move"), true); +PROPERTY(PP_SHSHOWCOPYMOVE, bool, _T("CHConfig.ShellExtension.ShowCommands.CopyMoveSpecial"), true); +PROPERTY(PP_SHSHOWPASTE, bool, _T("CHConfig.ShellExtension.ShowCommands.Paste"), true); +PROPERTY(PP_SHSHOWPASTESPECIAL, bool, _T("CHConfig.ShellExtension.ShowCommands.PasteSpecial"), true); +PROPERTY(PP_SHSHOWCOPYTO, bool, _T("CHConfig.ShellExtension.ShowCommands.CopyTo"), true); +PROPERTY(PP_SHSHOWMOVETO, bool, _T("CHConfig.ShellExtension.ShowCommands.MoveTo"), true); +PROPERTY(PP_SHSHOWCOPYMOVETO, bool, _T("CHConfig.ShellExtension.ShowCommands.CopyToMoveToSpecial"), true); +PROPERTY(PP_SHSHOWFREESPACE, bool, _T("CHConfig.ShellExtension.ShowFreeSpaceAlongShortcuts"), true); +PROPERTY(PP_SHSHOWSHELLICONS, bool, _T("CHConfig.ShellExtension.ShowShortcutsShellIcons"), true); +PROPERTY(PP_SHINTERCEPTDRAGDROP, bool, _T("CHConfig.ShellExtension.InterceptDragDrop"), true); +PROPERTY(PP_SHINTERCEPTKEYACTIONS, bool, _T("CHConfig.ShellExtension.InterceptKeyboardActions"), true); +PROPERTY(PP_SHINTERCEPTCTXMENUACTIONS, bool, _T("CHConfig.ShellExtension.InterceptDefaultContextMenuActions"), false); + +// "do not show" dialog boxes +PROPERTY(PP_HIDE_SHELLEXT_UNREGISTERED, int, _T("CHConfig.GUI.ShowHideDialogs.ShellExtensionUnregistered"), eDNS_AlwaysShow); +PROPERTY(PP_HIDE_SHELLEXT_VERSIONMISMATCH, int, _T("CHConfig.GUI.ShowHideDialogs.ShellExtensionVersionMismatch"), eDNS_AlwaysShow); + +// Invisible options +PROPERTY_MINMAX(PP_LAST_UPDATE_TIMESTAMP, long long, _T("CHConfig.RuntimeState.LastCheckedForUpdates"), 0, 0, LLONG_MAX); + +///////////////////////////////////////////////////////////////////////////////////////////// +// Properties retrieval + +template +typename PropData::value_type GetPropValue(const chcore::TConfig& rConfig) +{ + typename PropData::value_type tValue; + if(!GetConfigValue(rConfig, CString(PropData::GetPropertyNamePrefix()) + PropData::GetPropertyName(), tValue)) + tValue = PropData::GetDefaultValue(); + return tValue; +} + +template +bool GetPropValue(const chcore::TConfig& rConfig, typename PropData::value_type& rValue) +{ + bool bResult = GetConfigValue(rConfig, CString(PropData::GetPropertyNamePrefix()) + PropData::GetPropertyName(), rValue); + if(!bResult) + rValue = PropData::GetDefaultValue(); + + return bResult; +} + +template +void SetPropValue(chcore::TConfig& rConfig, const typename PropData::value_type& rValue) +{ + SetConfigValue(rConfig, CString(PropData::GetPropertyNamePrefix()) + PropData::GetPropertyName(), rValue); +} + +#endif