| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- #pragma hdrstop
- #include <Common.h>
- #include "CopyParams.h"
- #include <VCLCommon.h>
- #include <ScpMain.h>
- #include "CustomWinConfiguration.h"
- #include "TextsWin.h"
- #include "Tools.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- #pragma link "Rights"
- #pragma link "HistoryComboBox"
- #pragma link "XPThemes"
- #pragma link "ComboEdit"
- #pragma resource "*.dfm"
- //---------------------------------------------------------------------------
- __fastcall TCopyParamsFrame::TCopyParamsFrame(TComponent* Owner)
- : TFrame(Owner)
- {
- FAddXToDirectoriesSuffix = "+x";
- FRightsFrame = new TRightsExtFrame(this);
- FRightsFrame->TabStop = false;
- FRightsFrame->Parent = this;
- FRightsFrame->TabOrder = 1000;
- FRightsFrame->AllowAddXToDirectories = True;
- FRightsFrame->Popup = true;
- FRightsFrame->PopupParent = RightsEdit;
- FRightsFrame->OnChange = RightsFrameChange;
- // on start set different value than we want to allow property-setter to proceed
- FDirection = pdToLocal;
- Direction = pdToRemote;
- FCopyParamAttrs = 0;
- FParams = new TCopyParamType();
- TCopyParamType DefParams;
- Params = DefParams;
- InstallPathWordBreakProc(AsciiFileMaskCombo);
- InstallPathWordBreakProc(ExcludeFileMaskCombo);
- HintLabel(ExcludeFileMaskHintText,
- FORMAT("%s\n \n%s",(LoadStr(MASK_HINT), LoadStr(PATH_MASK_HINT))));
- }
- //---------------------------------------------------------------------------
- __fastcall TCopyParamsFrame::~TCopyParamsFrame()
- {
- delete FParams;
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::SetParams(TCopyParamType value)
- {
- assert((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: CCFirstUpperCaseButton->Checked = True; break;
- case ncLowerCaseShort: CCLowerCaseShortButton->Checked = True; break;
- }
- ReplaceInvalidCharsCheck->Checked =
- (value.InvalidCharsReplacement != TCopyParamType::NoReplacement);
- FRightsFrame->AddXToDirectories = value.AddXToDirectories;
- FRightsFrame->Rights = value.Rights;
- PreserveRightsCheck->Checked = value.PreserveRights;
- IgnorePermErrorsCheck->Checked = value.IgnorePermErrors;
- PreserveReadOnlyCheck->Checked = value.PreserveReadOnly;
- assert(PreserveTimeCheck);
- PreserveTimeCheck->Checked = value.PreserveTime;
- CommonCalculateSizeCheck->Checked = value.CalculateSize;
- NegativeExcludeCombo->ItemIndex = (value.NegativeExclude ? 1 : 0);
- ExcludeFileMaskCombo->Text = value.ExcludeFileMask.Masks;
- ClearArchiveCheck->Checked = value.ClearArchive;
- *FParams = value;
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- TCopyParamType __fastcall TCopyParamsFrame::GetParams()
- {
- TCopyParamType Result = *FParams;
- assert(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 (!Result.AsciiFileMask.IsValid()) Result.AsciiFileMask.Masks = FOrigMasks;
- if (CCLowerCaseButton->Checked) Result.FileNameCase = ncLowerCase;
- else
- if (CCUpperCaseButton->Checked) Result.FileNameCase = ncUpperCase;
- else
- if (CCFirstUpperCaseButton->Checked) Result.FileNameCase = ncFirstUpperCase;
- 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;
- assert(PreserveTimeCheck);
- Result.PreserveTime = PreserveTimeCheck->Checked;
- Result.CalculateSize = CommonCalculateSizeCheck->Checked;
- Result.ExcludeFileMask.Masks = ExcludeFileMaskCombo->Text;
- Result.NegativeExclude = (NegativeExcludeCombo->ItemIndex == 1);
- Result.ClearArchive = ClearArchiveCheck->Checked;
- return Result;
- }
- //---------------------------------------------------------------------------
- TCheckBox * __fastcall TCopyParamsFrame::GetPreserveTimeCheck()
- {
- switch (Direction) {
- case pdToRemote: return RemotePreserveTimeCheck;
- case pdToLocal: return LocalPreserveTimeCheck;
- case pdBoth:
- default: return CommonPreserveTimestampCheck;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::UpdateControls()
- {
- EnableControl(CommonPropertiesGroup, FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(LocalPropertiesGroup, FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(RemotePropertiesGroup, FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(TransferModeGroup,
- FLAGCLEAR(CopyParamAttrs, cpaNoTransferMode) &&
- FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(AsciiFileMaskLabel,
- TransferModeGroup->Enabled && TMAutomaticButton->Checked);
- EnableControl(AsciiFileMaskCombo,
- TransferModeGroup->Enabled && TMAutomaticButton->Checked);
- EnableControl(PreserveRightsCheck, FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoRights) && Enabled);
- EnableControl(RightsEdit, PreserveRightsCheck->Checked &&
- PreserveRightsCheck->Enabled);
- EnableControl(FRightsFrame, RightsEdit->Enabled);
- EnableControl(PreserveReadOnlyCheck, FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoPreserveReadOnly) && Enabled);
- EnableControl(ExcludeFileMaskCombo,
- (FLAGCLEAR(CopyParamAttrs, cpaNoExcludeMask) ||
- FLAGSET(CopyParamAttrs, cpaExcludeMaskOnly)) &&
- Enabled);
- EnableControl(ExclusionFileMaskLabel, ExcludeFileMaskCombo->Enabled);
- EnableControl(NegativeExcludeCombo, ExcludeFileMaskCombo->Enabled);
- EnableControl(ClearArchiveCheck, FLAGCLEAR(CopyParamAttrs, cpaNoClearArchive) &&
- FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(PreserveTimeCheck, FLAGCLEAR(CopyParamAttrs, cpaNoPreserveTime) &&
- FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(ChangeCaseGroup, FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly) && Enabled);
- EnableControl(IgnorePermErrorsCheck,
- ((PreserveRightsCheck->Enabled && PreserveRightsCheck->Checked) ||
- (PreserveTimeCheck->Enabled && PreserveTimeCheck->Checked)) &&
- FLAGCLEAR(CopyParamAttrs, cpaNoIgnorePermErrors) &&
- FLAGCLEAR(CopyParamAttrs, cpaExcludeMaskOnly));
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::SetDirection(TParamsForDirection value)
- {
- if (Direction != value)
- {
- Boolean APreserveTime = PreserveTimeCheck->Checked;
- FDirection = value;
- PreserveTimeCheck->Checked = APreserveTime;
- LocalPropertiesGroup->Visible = (Direction == pdToLocal || Direction == pdAll );
- RemotePropertiesGroup->Visible = (Direction == pdToRemote || Direction == pdAll );
- CommonPropertiesGroup->Visible = (Direction == pdBoth || Direction == pdAll );
- LocalPreserveTimeCheck->Visible = (Direction != pdAll);
- RemotePreserveTimeCheck->Visible = (Direction != pdAll);
- ReplaceInvalidCharsCheck->Visible =
- (Direction == pdToLocal || Direction == pdBoth || Direction == pdAll);
- CCFirstUpperCaseButton->Visible =
- (Direction == pdToLocal || Direction == pdToRemote);
- CCLowerCaseShortButton->Visible =
- (Direction == pdToRemote || Direction == pdBoth || Direction == pdAll);
- if (Direction == pdBoth || Direction == pdAll)
- {
- CCLowerCaseShortButton->Top = CCFirstUpperCaseButton->Top;
- IgnorePermErrorsCheck->Top = RemotePreserveTimeCheck->Top;
- }
- else
- {
- CCLowerCaseShortButton->Top = ReplaceInvalidCharsCheck->Top;
- IgnorePermErrorsCheck->Top = CCFirstUpperCaseButton->Top;
- }
- UpdateControls();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::ControlChange(TObject * /*Sender*/)
- {
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::BeforeExecute()
- {
- // adding TRightsFrame on run-time corrupts the tab order, fix it
- TransferModeGroup->TabOrder = 0;
- assert(CustomWinConfiguration);
- AsciiFileMaskCombo->Items = CustomWinConfiguration->History["Mask"];
- ExcludeFileMaskCombo->Items = CustomWinConfiguration->History["ExcludeMask"];
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::AfterExecute()
- {
- assert(CustomWinConfiguration);
- AsciiFileMaskCombo->SaveToHistory();
- CustomWinConfiguration->History["Mask"] = AsciiFileMaskCombo->Items;
- ExcludeFileMaskCombo->SaveToHistory();
- CustomWinConfiguration->History["ExcludeMask"] = ExcludeFileMaskCombo->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*/)
- {
- AnsiString RightsStr = FRightsFrame->Rights.Text;
- if (FRightsFrame->AddXToDirectories)
- {
- RightsStr = FORMAT("%s (%s)", (RightsStr, FAddXToDirectoriesSuffix));
- }
- RightsEdit->Text = RightsStr;
- RightsEdit->Modified = false;
- RightsEdit->SelectAll();
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::UpdateRightsByStr()
- {
- if (!RightsEdit->Text.IsEmpty())
- {
- AnsiString RightsStr = RightsEdit->Text;
- int P = RightsStr.LowerCase().Pos(FAddXToDirectoriesSuffix);
- bool AddXToDirectories = (P > 0);
- if (AddXToDirectories)
- {
- RightsStr.Delete(P, FAddXToDirectoriesSuffix.Length());
- }
- RightsStr = DeleteChar(DeleteChar(RightsStr, '('), ')').Trim();
- TRights R = FRightsFrame->Rights;
- int Dummy;
- if (((RightsStr.Length() == 3) || (RightsStr.Length() == 4)) &&
- TryStrToInt(RightsStr, Dummy))
- {
- R.Octal = RightsStr;
- }
- else
- {
- R.Text = RightsStr;
- }
- FRightsFrame->Rights = R;
- FRightsFrame->AddXToDirectories = AddXToDirectories;
- }
- UpdateControls();
- RightsEdit->Modified = false;
- }
- //---------------------------------------------------------------------------
- void __fastcall TCopyParamsFrame::RightsEditExit(TObject * /*Sender*/)
- {
- if (RightsEdit->Modified)
- {
- try
- {
- UpdateRightsByStr();
- }
- catch(...)
- {
- RightsEdit->SelectAll();
- RightsEdit->SetFocus();
- throw;
- }
- }
- }
- //---------------------------------------------------------------------------
|