123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- //---------------------------------------------------------------------------
- #include <FormsPCH.h>
- #pragma hdrstop
- #include "CopyParams.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "Rights"
- #pragma link "HistoryComboBox"
- #pragma link "ComboEdit"
- #pragma resource "*.dfm"
- //---------------------------------------------------------------------------
- __fastcall TCopyParamsFrame::TCopyParamsFrame(TComponent* Owner)
- : TFrame(Owner)
- {
- FRightsFrame = new TRightsFrame(this);
- FRightsFrame->TabStop = false;
- FRightsFrame->Parent = this;
- FRightsFrame->TabOrder = 1000;
- FRightsFrame->AllowAddXToDirectories = True;
- FRightsFrame->Popup = true;
- FRightsFrame->PopupParent = RightsEdit;
- FRightsFrame->OnChange = RightsFrameChange;
- RightsEdit->PopupMenu = FRightsFrame->RightsPopup;
- FCopyParamAttrs = 0;
- FParams = new TCopyParamType();
- TCopyParamType DefParams;
- Params = DefParams;
- HintLabel(IncludeFileMaskHintText,
- FORMAT(L"%s\n \n%s\n \n%s\n \n%s\n \n%s\n \n%s", (LoadStr(MASK_HINT2),
- LoadStr(FILE_MASK_EX_HINT), LoadStr(COMBINING_MASKS_HINT),
- LoadStr(PATH_MASK_HINT2),
- LoadStr(DIRECTORY_MASK_HINT), LoadStr(MASK_HELP))));
- }
- //---------------------------------------------------------------------------
- __fastcall TCopyParamsFrame::~TCopyParamsFrame()
- {
- delete FParams;
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::SetParams(TCopyParamType value)
- {
- DebugAssert((value.TransferMode == tmAscii) ||
- (value.TransferMode == tmBinary) || (value.TransferMode == tmAutomatic));
- switch (value.TransferMode) {
- case tmAscii: TMTextButton->Checked = True; break;
- case tmBinary: TMBinaryButton->Checked = True; break;
- default: TMAutomaticButton->Checked = True; break;
- }
- FOrigMasks = value.AsciiFileMask.Masks;
- AsciiFileMaskCombo->Text = value.AsciiFileMask.Masks;
- switch (value.FileNameCase) {
- case ncNoChange: CCNoChangeButton->Checked = True; break;
- case ncLowerCase: CCLowerCaseButton->Checked = True; break;
- case ncUpperCase: CCUpperCaseButton->Checked = True; break;
- case ncFirstUpperCase: CCNoChangeButton->Checked = True; break; // unsupported
- case ncLowerCaseShort: CCLowerCaseShortButton->Checked = True; break;
- }
- ReplaceInvalidCharsCheck->Checked = value.ReplaceInvalidChars;
- FRightsFrame->AddXToDirectories = value.AddXToDirectories;
- FRightsFrame->Rights = value.Rights;
- PreserveRightsCheck->Checked = value.PreserveRights;
- IgnorePermErrorsCheck->Checked = value.IgnorePermErrors;
- PreserveReadOnlyCheck->Checked = value.PreserveReadOnly;
- PreserveTimeCheck->Checked = value.PreserveTime;
- PreserveTimeDirsCheck->Checked = value.PreserveTimeDirs;
- CommonCalculateSizeCheck->Checked = value.CalculateSize;
- IncludeFileMaskCombo->Text = value.IncludeFileMask.Masks;
- ClearArchiveCheck->Checked = value.ClearArchive;
- if (FLAGSET(CopyParamAttrs, cpaNoRemoveCtrlZ))
- {
- FRemoveCtrlZ = value.RemoveCtrlZ;
- RemoveCtrlZAndBOMCheck->Checked = value.RemoveBOM;
- }
- else
- {
- DebugAssert(FLAGCLEAR(CopyParamAttrs, cpaNoRemoveBOM));
- RemoveCtrlZAndBOMCheck->Checked = value.RemoveCtrlZ && value.RemoveBOM;
- }
- SpeedCombo->Text = SetSpeedLimit(value.CPSLimit);
- NewerOnlyCheck->Checked = value.NewerOnly;
- EncryptNewFilesCheck->Checked = value.EncryptNewFiles;
- ExcludeHiddenFilesCheck->Checked = value.ExcludeHiddenFiles;
- ExcludeEmptyDirectoriesCheck->Checked = value.ExcludeEmptyDirectories;
- *FParams = value;
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- TCopyParamType __fastcall TCopyParamsFrame::GetParams()
- {
- TCopyParamType Result = *FParams;
- DebugAssert(TMTextButton->Checked || TMBinaryButton->Checked || TMAutomaticButton->Checked);
- if (TMTextButton->Checked) Result.TransferMode = tmAscii;
- else
- if (TMBinaryButton->Checked) Result.TransferMode = tmBinary;
- else Result.TransferMode = tmAutomatic;
- Result.AsciiFileMask.Masks = AsciiFileMaskCombo->Text;
- if (CCLowerCaseButton->Checked) Result.FileNameCase = ncLowerCase;
- else
- if (CCUpperCaseButton->Checked) Result.FileNameCase = ncUpperCase;
- else
- if (CCLowerCaseShortButton->Checked) Result.FileNameCase = ncLowerCaseShort;
- else Result.FileNameCase = ncNoChange;
- Result.ReplaceInvalidChars = ReplaceInvalidCharsCheck->Checked;
- Result.AddXToDirectories = FRightsFrame->AddXToDirectories;
- Result.Rights = FRightsFrame->Rights;
- Result.PreserveRights = PreserveRightsCheck->Checked;
- Result.IgnorePermErrors = IgnorePermErrorsCheck->Checked;
- Result.PreserveReadOnly = PreserveReadOnlyCheck->Checked;
- Result.PreserveTime = PreserveTimeCheck->Checked;
- Result.PreserveTimeDirs = PreserveTimeDirsCheck->Checked;
- Result.CalculateSize = CommonCalculateSizeCheck->Checked;
- Result.IncludeFileMask.Masks = IncludeFileMaskCombo->Text;
- Result.ClearArchive = ClearArchiveCheck->Checked;
- if (FLAGSET(CopyParamAttrs, cpaNoRemoveCtrlZ))
- {
- Result.RemoveCtrlZ = FRemoveCtrlZ;
- }
- else
- {
- Result.RemoveCtrlZ = RemoveCtrlZAndBOMCheck->Checked;
- }
- Result.RemoveBOM = RemoveCtrlZAndBOMCheck->Checked;
- Result.CPSLimit = GetSpeedLimit(SpeedCombo->Text);
- Result.NewerOnly = NewerOnlyCheck->Checked;
- Result.EncryptNewFiles = EncryptNewFilesCheck->Checked;
- Result.ExcludeHiddenFiles = ExcludeHiddenFilesCheck->Checked;
- Result.ExcludeEmptyDirectories = ExcludeEmptyDirectoriesCheck->Checked;
- return Result;
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::UpdateControls()
- {
- EnableControl(CommonPropertiesGroup, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- EnableControl(LocalPropertiesGroup, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- EnableControl(RemotePropertiesGroup, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- EnableControl(TransferModeGroup,
- FLAGCLEAR(CopyParamAttrs, cpaNoTransferMode) &&
- FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- EnableControl(AsciiFileMaskLabel,
- TransferModeGroup->Enabled && TMAutomaticButton->Checked);
- EnableControl(AsciiFileMaskCombo,
- TransferModeGroup->Enabled && TMAutomaticButton->Checked);
- EnableControl(PreserveRightsCheck, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoRights) && Enabled);
- EnableControl(RightsEdit, PreserveRightsCheck->Checked &&
- PreserveRightsCheck->Enabled);
- EnableControl(FRightsFrame, RightsEdit->Enabled);
- EnableControl(PreserveReadOnlyCheck, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoPreserveReadOnly) && Enabled);
- EnableControl(IncludeFileMaskCombo,
- (FLAGCLEAR(CopyParamAttrs, cpaNoIncludeMask) ||
- FLAGSET(CopyParamAttrs, cpaIncludeMaskOnly)) &&
- Enabled);
- EnableControl(IncludeFileMaskLabel, IncludeFileMaskCombo->Enabled);
- EnableControl(ClearArchiveCheck, FLAGCLEAR(CopyParamAttrs, cpaNoClearArchive) &&
- FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- // Do not mention EOF when not supported, but only when at least BOM is supported.
- // This is not ideal as it shows both BOM and EOF for FTP downloads
- // (when EOF is never supported for FTP).
- // But as the option is disabled for FTP download, it's not that bad.
- // We do not have enough information here to implement this correctly.
- RemoveCtrlZAndBOMCheck->Caption =
- LoadStr(
- FLAGSET(CopyParamAttrs, cpaNoRemoveCtrlZ) && FLAGCLEAR(CopyParamAttrs, cpaNoRemoveBOM) ?
- COPY_PARAM_REMOVE_BOM : COPY_PARAM_REMOVE_BOM_EOF);
- EnableControl(RemoveCtrlZAndBOMCheck,
- (FLAGCLEAR(CopyParamAttrs, cpaNoRemoveCtrlZ) || FLAGCLEAR(CopyParamAttrs, cpaNoRemoveBOM)) &&
- FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) &&
- (TMTextButton->Checked || TMAutomaticButton->Checked) &&
- Enabled);
- EnableControl(PreserveTimeCheck, FLAGCLEAR(CopyParamAttrs, cpaNoPreserveTime) &&
- FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- // The checkbox can be enabled even then "preserve time" checkbox is not (such as on the Synchronize dialog);
- EnableControl(PreserveTimeDirsCheck,
- FLAGCLEAR(CopyParamAttrs, cpaNoPreserveTimeDirs) &&
- FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled &&
- PreserveTimeCheck->Checked);
- EnableControl(CommonCalculateSizeCheck,
- FLAGCLEAR(CopyParamAttrs, cpaNoCalculateSize) && FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- EnableControl(ChangeCaseGroup, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) && Enabled);
- EnableControl(IgnorePermErrorsCheck,
- ((PreserveRightsCheck->Enabled && PreserveRightsCheck->Checked) ||
- (PreserveTimeCheck->Enabled && PreserveTimeCheck->Checked)) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoIgnorePermErrors) &&
- FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly));
- EnableControl(NewerOnlyCheck, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoNewerOnly) && Enabled);
- EnableControl(EncryptNewFilesCheck, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoEncryptNewFiles) && Enabled);
- EnableControl(ExcludeHiddenFilesCheck, IncludeFileMaskCombo->Enabled);
- EnableControl(ExcludeEmptyDirectoriesCheck, FLAGCLEAR(CopyParamAttrs, cpaIncludeMaskOnly));
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::ControlChange(TObject * /*Sender*/)
- {
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::BeforeExecute()
- {
- // only now is IncludeFileMaskHintText->Width updated to match actual caption
- // (localized one)
- TPoint P(IncludeFileMaskCombo->Width, 0);
- P = IncludeFileMaskHintText->ScreenToClient(IncludeFileMaskCombo->ClientToScreen(P));
- IncludeFileMaskHintText->Left = IncludeFileMaskHintText->Left + P.x - IncludeFileMaskHintText->Width;
- // adding TRightsFrame on run-time corrupts the tab order, fix it
- TransferModeGroup->TabOrder = 0;
- DebugAssert(CustomWinConfiguration);
- AsciiFileMaskCombo->Items = CustomWinConfiguration->History[L"Mask"];
- IncludeFileMaskCombo->Items = CustomWinConfiguration->History[L"IncludeMask"];
- CopySpeedLimits(CustomWinConfiguration->History[L"SpeedLimit"], SpeedCombo->Items);
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::AfterExecute()
- {
- DebugAssert(CustomWinConfiguration);
- AsciiFileMaskCombo->SaveToHistory();
- CustomWinConfiguration->History[L"Mask"] = AsciiFileMaskCombo->Items;
- IncludeFileMaskCombo->SaveToHistory();
- CustomWinConfiguration->History[L"IncludeMask"] = IncludeFileMaskCombo->Items;
- SpeedCombo->SaveToHistory();
- CustomWinConfiguration->History[L"SpeedLimit"] = SpeedCombo->Items;
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::SetCopyParamAttrs(int value)
- {
- FCopyParamAttrs = value;
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::SetEnabled(Boolean Value)
- {
- TFrame::SetEnabled(Value);
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::ValidateMaskComboExit(TObject * Sender)
- {
- ValidateMaskEdit(dynamic_cast<TComboBox*>(Sender));
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::RightsEditButtonClick(TObject * Sender)
- {
- if (!FRightsFrame->Visible)
- {
- // validate input before showing the popup
- RightsEditExit(Sender);
- FRightsFrame->DropDown();
- }
- else
- {
- FRightsFrame->CloseUp();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::RightsFrameChange(TObject * /*Sender*/)
- {
- RightsEdit->Text = FRightsFrame->Text;
- RightsEdit->Modified = false;
- RightsEdit->SelectAll();
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::UpdateRightsByStr()
- {
- if (!RightsEdit->Text.IsEmpty())
- {
- FRightsFrame->Text = RightsEdit->Text;
- // change handler may not be called if the rights were not actually changed,
- // but we want to normalize the user-entered information anyway
- RightsFrameChange(NULL);
- }
- UpdateControls();
- RightsEdit->Modified = false;
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::RightsEditExit(TObject * /*Sender*/)
- {
- if (RightsEdit->Modified && !IsCancelButtonBeingClicked(this))
- {
- try
- {
- UpdateRightsByStr();
- }
- catch(...)
- {
- RightsEdit->SelectAll();
- RightsEdit->SetFocus();
- throw;
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::RightsEditContextPopup(TObject * Sender,
- TPoint & MousePos, bool & Handled)
- {
- MenuPopup(Sender, MousePos, Handled);
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::SpeedComboExit(TObject * /*Sender*/)
- {
- if (!IsCancelButtonBeingClicked(this))
- {
- try
- {
- SpeedCombo->Text = SetSpeedLimit(GetSpeedLimit(SpeedCombo->Text));
- }
- catch (Exception & E)
- {
- ShowExtendedException(&E);
- SpeedCombo->SetFocus();
- SpeedCombo->SelectAll();
- Abort();
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::IncludeFileMaskButtonClick(TObject * /*Sender*/)
- {
- TFileMasks Masks = IncludeFileMaskCombo->Text;
- if (DoEditMaskDialog(Masks))
- {
- IncludeFileMaskCombo->Text = Masks.Masks;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::CreateWnd()
- {
- TFrame::CreateWnd();
- if (AsciiFileMaskCombo != NULL)
- {
- InstallPathWordBreakProc(AsciiFileMaskCombo);
- }
- if (IncludeFileMaskCombo != NULL)
- {
- InstallPathWordBreakProc(IncludeFileMaskCombo);
- }
- }
- //---------------------------------------------------------------------------
|