123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773 |
- //---------------------------------------------------------------------------
- #include <FormsPCH.h>
- #pragma hdrstop
- #include "Synchronize.h"
- #include "CopyParams.h"
- #include "Terminal.h"
- #include <TerminalManager.h>
- //---------------------------------------------------------------------------
- #pragma link "HistoryComboBox"
- #pragma link "GrayedCheckBox"
- #pragma resource "*.dfm"
- //---------------------------------------------------------------------------
- const int WM_USER_STOP = WM_WINSCP_USER + 2;
- //---------------------------------------------------------------------------
- bool __fastcall DoSynchronizeDialog(TSynchronizeParamType & Params,
- const TCopyParamType * CopyParams, TSynchronizeStartStopEvent OnStartStop,
- bool & SaveSettings, int Options, int CopyParamAttrs,
- TGetSynchronizeOptionsEvent OnGetOptions,
- TSynchronizeSessionLog OnSynchronizeSessionLog,
- TFeedSynchronizeError & OnFeedSynchronizeError,
- TNotifyEvent & OnSynchronizeAbort,
- TSynchronizeInNewWindow OnSynchronizeInNewWindow,
- int AutoSubmit)
- {
- bool Result;
- TSynchronizeDialog * Dialog = SafeFormCreate<TSynchronizeDialog>(Application);
- Dialog->Init(
- OnStartStop, OnGetOptions, OnSynchronizeSessionLog, OnFeedSynchronizeError, OnSynchronizeAbort,
- OnSynchronizeInNewWindow, AutoSubmit);
- try
- {
- Dialog->Options = Options;
- Dialog->CopyParamAttrs = CopyParamAttrs;
- Dialog->Params = Params;
- Dialog->CopyParams = *CopyParams;
- Dialog->SaveSettings = SaveSettings;
- Result = Dialog->Execute();
- if (Result)
- {
- SaveSettings = Dialog->SaveSettings;
- Params = Dialog->Params;
- }
- }
- __finally
- {
- delete Dialog;
- OnSynchronizeAbort = NULL;
- }
- return Result;
- }
- //---------------------------------------------------------------------------
- const int TSynchronizeDialog::MaxLogItems = 1000;
- //---------------------------------------------------------------------------
- struct TLogItemData
- {
- TSynchronizeLogEntry Entry;
- UnicodeString Message;
- std::unique_ptr<TStrings> MoreMessages;
- TQueryType Type;
- UnicodeString HelpKeyword;
- };
- //---------------------------------------------------------------------------
- __fastcall TSynchronizeDialog::TSynchronizeDialog(TComponent * Owner)
- : TForm(Owner)
- {
- UseSystemSettings(this);
- FOptions = 0;
- FSynchronizing = false;
- FMinimizedByMe = false;
- FPresetsMenu = new TPopupMenu(this);
- FSynchronizeOptions = NULL;
- HotTrackLabel(CopyParamLabel);
- LoadDialogImage(Image, L"Keep remote directory up to date");
- SetGlobalMinimizeHandler(this, GlobalMinimize);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::Init(TSynchronizeStartStopEvent OnStartStop,
- TGetSynchronizeOptionsEvent OnGetOptions,
- TSynchronizeSessionLog OnSynchronizeSessionLog,
- TFeedSynchronizeError & OnFeedSynchronizeError,
- TNotifyEvent & OnSynchronizeAbort,
- TSynchronizeInNewWindow OnSynchronizeInNewWindow,
- int AutoSubmit)
- {
- FOnStartStop = OnStartStop;
- FOnGetOptions = OnGetOptions;
- FOnSynchronizeSessionLog = OnSynchronizeSessionLog;
- FOnFeedSynchronizeError = &OnFeedSynchronizeError;
- OnSynchronizeAbort = &SynchronizeAbort;
- DebugAssert(OnSynchronizeInNewWindow != NULL);
- FOnSynchronizeInNewWindow = OnSynchronizeInNewWindow;
- if (AutoSubmit == 0)
- {
- FStartImmediately = true;
- }
- else
- {
- FStartImmediately = false;
- if (AutoSubmit > 0)
- {
- InitiateDialogTimeout(this, AutoSubmit * MSecsPerSec, StartButton);
- }
- }
- }
- //---------------------------------------------------------------------------
- __fastcall TSynchronizeDialog::~TSynchronizeDialog()
- {
- // if application is closing OnCloseQuery might not get called
- // (this particularly happens if last terminal is disconnected while dialog is
- // open)
- if (FSynchronizing)
- {
- OnlyStop();
- }
- ClearGlobalMinimizeHandler(GlobalMinimize);
- delete FSynchronizeOptions;
- delete FPresetsMenu;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::FeedSynchronizeError(
- const UnicodeString & Message, TStrings * MoreMessages, TQueryType Type,
- const UnicodeString & HelpKeyword)
- {
- DoLogInternal(slContinuedError, Message, MoreMessages, Type, HelpKeyword);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::SynchronizeAbort(TObject *)
- {
- Abort(true);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::UpdateControls()
- {
- EnableControl(StartButton, !LocalDirectoryEdit->Text.IsEmpty() &&
- !RemoteDirectoryEdit->Text.IsEmpty());
- TButton * OldButton = FSynchronizing ? StartButton : StopButton;
- TButton * NewButton = FSynchronizing ? StopButton : StartButton;
- if (!NewButton->Visible || OldButton->Visible)
- {
- NewButton->Visible = true;
- if (OldButton->Focused())
- {
- NewButton->SetFocus();
- }
- OldButton->Default = false;
- NewButton->Default = true;
- OldButton->Visible = false;
- // some of the above steps hides accelerators when start button is pressed with mouse
- ResetSystemSettings(this);
- }
- TTerminalManager * Manager = TTerminalManager::Instance();
- UnicodeString Title = LoadStr(FSynchronizing ? SYNCHRONIZE_SYCHRONIZING : SYNCHRONIZE_TITLE);
- Caption = Manager->FormatFormCaptionWithSession(this, Title);
- EnableControl(TransferSettingsButton, !FSynchronizing);
- CancelButton->Visible = !FSynchronizing || FLAGSET(FOptions, soNoMinimize);
- EnableControl(CancelButton, !FSynchronizing);
- EnableControl(DirectoriesGroup, !FSynchronizing);
- EnableControl(OptionsGroup, !FSynchronizing);
- EnableControl(CopyParamGroup, !FSynchronizing);
- MinimizeButton->Visible = FSynchronizing && FLAGCLEAR(FOptions, soNoMinimize);
- EnableControl(SynchronizeSelectedOnlyCheck,
- OptionsGroup->Enabled && FLAGSET(FOptions, soAllowSelectedOnly));
- UnicodeString InfoStr = CopyParams.GetInfoStr(L"; ", ActualCopyParamAttrs());
- SetLabelHintPopup(CopyParamLabel, InfoStr);
- TransferSettingsButton->Style =
- FLAGCLEAR(Options, soDoNotUsePresets) ?
- TCustomButton::bsSplitButton : TCustomButton::bsPushButton;
- if (LogPanel->Visible != FSynchronizing)
- {
- if (FSynchronizing)
- {
- LogPanel->Visible = true;
- ClientHeight = ClientHeight + LogPanel->Height;
- }
- else
- {
- ClientHeight = ClientHeight - LogPanel->Height;
- LogPanel->Visible = false;
- }
- }
- // When minimizing to tray globally, no point showing special "minimize to tray" command
- MinimizeButton->Style =
- !WinConfiguration->MinimizeToTray ? TCustomButton::bsSplitButton : TCustomButton::bsPushButton;
- StartButton->Style = AllowStartInNewWindow() ? TCustomButton::bsSplitButton : TCustomButton::bsPushButton;
- StartInNewWindowItem->Enabled = CanStartInNewWindow();
- }
- //---------------------------------------------------------------------------
- bool __fastcall TSynchronizeDialog::AllowStartInNewWindow()
- {
- return !IsMainFormLike(this);
- }
- //---------------------------------------------------------------------------
- bool __fastcall TSynchronizeDialog::CanStartInNewWindow()
- {
- return
- AllowStartInNewWindow() &&
- (!SynchronizeSelectedOnlyCheck->Enabled || !SynchronizeSelectedOnlyCheck->Checked);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::ControlChange(TObject * /*Sender*/)
- {
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- bool __fastcall TSynchronizeDialog::Execute()
- {
- // at start assume that copy param is current preset
- FPreset = GUIConfiguration->CopyParamCurrent;
- LocalDirectoryEdit->Items = CustomWinConfiguration->History[L"LocalDirectory"];
- RemoteDirectoryEdit->Items = CustomWinConfiguration->History[L"RemoteDirectory"];
- ShowModal();
- return true;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::SetParams(const TSynchronizeParamType& value)
- {
- FParams = value;
- RemoteDirectoryEdit->Text = value.RemoteDirectory;
- LocalDirectoryEdit->Text = value.LocalDirectory;
- SynchronizeDeleteCheck->Checked = FLAGSET(value.Params, TTerminal::spDelete);
- SynchronizeExistingOnlyCheck->Checked = FLAGSET(value.Params, TTerminal::spExistingOnly);
- SynchronizeSelectedOnlyCheck->Checked = FLAGSET(value.Params, TTerminal::spSelectedOnly);
- SynchronizeRecursiveCheck->Checked = FLAGSET(value.Options, soRecurse);
- SynchronizeSynchronizeCheck->State =
- FLAGSET(value.Options, soSynchronizeAsk) ? cbGrayed :
- (FLAGSET(value.Options, soSynchronize) ? cbChecked : cbUnchecked);
- ContinueOnErrorCheck->Checked = FLAGSET(value.Options, soContinueOnError);
- }
- //---------------------------------------------------------------------------
- TSynchronizeParamType __fastcall TSynchronizeDialog::GetParams()
- {
- TSynchronizeParamType Result = FParams;
- Result.RemoteDirectory = RemoteDirectoryEdit->Text;
- Result.LocalDirectory = LocalDirectoryEdit->Text;
- Result.Params =
- (Result.Params & ~(TTerminal::spDelete | TTerminal::spExistingOnly | TTerminal::spSelectedOnly | TTerminal::spTimestamp)) |
- FLAGMASK(SynchronizeDeleteCheck->Checked, TTerminal::spDelete) |
- FLAGMASK(SynchronizeExistingOnlyCheck->Checked, TTerminal::spExistingOnly) |
- FLAGMASK(SynchronizeSelectedOnlyCheck->Checked, TTerminal::spSelectedOnly);
- Result.Options =
- (Result.Options & ~(soRecurse | soSynchronize | soSynchronizeAsk | soContinueOnError)) |
- FLAGMASK(SynchronizeRecursiveCheck->Checked, soRecurse) |
- FLAGMASK(SynchronizeSynchronizeCheck->State == cbChecked, soSynchronize) |
- FLAGMASK(SynchronizeSynchronizeCheck->State == cbGrayed, soSynchronizeAsk) |
- FLAGMASK(ContinueOnErrorCheck->Checked, soContinueOnError);
- return Result;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::LocalDirectoryBrowseButtonClick(
- TObject * /*Sender*/)
- {
- UnicodeString Directory = LocalDirectoryEdit->Text;
- if (SelectDirectory(Directory, LoadStr(SELECT_LOCAL_DIRECTORY)))
- {
- LocalDirectoryEdit->Text = Directory;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::SetOptions(int value)
- {
- if (Options != value)
- {
- FOptions = value;
- UpdateControls();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::CopyParamListPopup(TRect R, int AdditionalOptions)
- {
- // We pass in FCopyParams, although it may not be the exact copy param
- // that will be used (because of PreserveTime). The reason is to
- // display checkbox next to user-selected preset
- ::CopyParamListPopup(
- R, FPresetsMenu, FCopyParams, FPreset, CopyParamClick,
- AdditionalOptions, ActualCopyParamAttrs());
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::TransferSettingsButtonClick(
- TObject * /*Sender*/)
- {
- CopyParamGroupClick(NULL);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::DoStartStop(bool Start, bool Synchronize)
- {
- if (FOnStartStop)
- {
- TSynchronizeParamType SParams = GetParams();
- SParams.Options =
- (SParams.Options & ~(soSynchronize | soSynchronizeAsk)) |
- FLAGMASK(Synchronize, soSynchronize);
- if (Start)
- {
- DebugAssert(*FOnFeedSynchronizeError == NULL);
- *FOnFeedSynchronizeError =
- (FLAGSET(SParams.Options, soContinueOnError) ? &FeedSynchronizeError : TFeedSynchronizeError(NULL));
- delete FSynchronizeOptions;
- FSynchronizeOptions = new TSynchronizeOptions;
- FOnGetOptions(SParams.Params, *FSynchronizeOptions);
- }
- else
- {
- *FOnFeedSynchronizeError = NULL;
- }
- FOnStartStop(this, Start, SParams, CopyParams, FSynchronizeOptions, DoAbort,
- NULL, DoLog);
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::Dispatch(void * AMessage)
- {
- DebugAssert(AMessage != NULL);
- TMessage & Message = *reinterpret_cast<TMessage *>(AMessage);
- if ((Message.Msg == WM_USER_STOP) && FAbort)
- {
- if (FSynchronizing)
- {
- Stop();
- }
- if (FClose)
- {
- FClose = false;
- ModalResult = mrCancel;
- }
- }
- else if (Message.Msg == WM_MANAGES_CAPTION)
- {
- // caption managed in UpdateControls()
- Message.Result = 1;
- }
- else
- {
- TForm::Dispatch(AMessage);
- }
- }
- //---------------------------------------------------------------------------
- void TSynchronizeDialog::Abort(bool Close)
- {
- FAbort = true;
- FClose = Close;
- PostMessage(Handle, WM_USER_STOP, 0, 0);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::DoAbort(TObject * /*Sender*/, bool Close)
- {
- Abort(Close);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::DoLogInternal(
- TSynchronizeLogEntry Entry, const UnicodeString & Message,
- TStrings * MoreMessages, TQueryType Type, const UnicodeString & HelpKeyword)
- {
- LogView->Items->BeginUpdate();
- try
- {
- TListItem * Item = LogView->Items->Add();
- TLogItemData * LogItemData = new TLogItemData();
- Item->Data = LogItemData;
- LogItemData->Entry = Entry;
- LogItemData->Message = Message;
- if (MoreMessages != NULL)
- {
- LogItemData->MoreMessages.reset(new TStringList());
- LogItemData->MoreMessages->Assign(MoreMessages);
- }
- LogItemData->Type = Type;
- LogItemData->HelpKeyword = HelpKeyword;
- Item->Caption = Now().TimeString();
- UnicodeString UnformattedMessage = UnformatMessage(Message);
- UnformattedMessage = ReplaceStr(UnformattedMessage, L"\r", L"");
- UnformattedMessage = ReplaceStr(UnformattedMessage, L"\n", L" ");
- Item->SubItems->Add(UnformattedMessage);
- Item->MakeVisible(false);
- while (LogView->Items->Count > MaxLogItems)
- {
- LogView->Items->Delete(0);
- }
- }
- __finally
- {
- LogView->Items->EndUpdate();
- if (Entry == slScan)
- {
- // redraw log before the scanning block update
- LogView->Repaint();
- }
- }
- FOnSynchronizeSessionLog(Message);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::DoLog(TSynchronizeController * /*Controller*/,
- TSynchronizeLogEntry Entry, const UnicodeString Message)
- {
- DoLogInternal(Entry, Message,
- // these are unused (as Entry is not slContinuedError here)
- NULL, qtInformation, UnicodeString());
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::StartButtonClick(TObject * /*Sender*/)
- {
- if (OpenInNewWindow())
- {
- if (CanStartInNewWindow())
- {
- StartInNewWindow();
- }
- else
- {
- Beep();
- }
- }
- else
- {
- Start();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::Start()
- {
- bool Synchronize = false; // shut up
- bool Continue = true;
- if (SynchronizeSynchronizeCheck->State == cbGrayed)
- {
- TMessageParams Params(mpNeverAskAgainCheck);
- switch (MoreMessageDialog(LoadStr(SYNCHRONISE_BEFORE_KEEPUPTODATE2),
- NULL, qtConfirmation, qaYes | qaNo | qaCancel, HELP_KEEPUPTODATE_SYNCHRONIZE,
- &Params))
- {
- case qaNeverAskAgain:
- SynchronizeSynchronizeCheck->State = cbChecked;
- // fall thru
- case qaYes:
- Synchronize = true;
- break;
- case qaNo:
- Synchronize = false;
- break;
- default:
- case qaCancel:
- Continue = false;
- break;
- };
- }
- else
- {
- Synchronize = SynchronizeSynchronizeCheck->Checked;
- }
- if (Continue)
- {
- DebugAssert(!FSynchronizing);
- SaveHistory();
- FSynchronizing = true;
- try
- {
- UpdateControls();
- Repaint();
- FAbort = false;
- DoStartStop(true, Synchronize);
- }
- catch(...)
- {
- FSynchronizing = false;
- UpdateControls();
- throw;
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::SaveHistory()
- {
- LocalDirectoryEdit->SaveToHistory();
- CustomWinConfiguration->History[L"LocalDirectory"] = LocalDirectoryEdit->Items;
- RemoteDirectoryEdit->SaveToHistory();
- CustomWinConfiguration->History[L"RemoteDirectory"] = RemoteDirectoryEdit->Items;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::StopButtonClick(TObject * /*Sender*/)
- {
- Stop();
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::OnlyStop()
- {
- FSynchronizing = false;
- DoStartStop(false, false);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::Stop()
- {
- OnlyStop();
- UpdateControls();
- Repaint();
- if (IsApplicationMinimized() && FMinimizedByMe)
- {
- FMinimizedByMe = false;
- ApplicationRestore();
- Application->BringToFront();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::Minimize(TObject * Sender)
- {
- CallGlobalMinimizeHandler(Sender);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::MinimizeButtonClick(TObject * Sender)
- {
- Minimize(Sender);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::GlobalMinimize(TObject * /*Sender*/)
- {
- ApplicationMinimize();
- FMinimizedByMe = true;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::SetSaveSettings(bool value)
- {
- SaveSettingsCheck->Checked = value;
- }
- //---------------------------------------------------------------------------
- bool __fastcall TSynchronizeDialog::GetSaveSettings()
- {
- return SaveSettingsCheck->Checked;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::FormShow(TObject * /*Sender*/)
- {
- InstallPathWordBreakProc(LocalDirectoryEdit);
- InstallPathWordBreakProc(RemoteDirectoryEdit);
- // OnShow gets called more than once sometimes
- if (!FSynchronizing)
- {
- ClearLog();
- UpdateControls();
- if (FStartImmediately)
- {
- // if starting get cancelled (from SYNCHRONISE_BEFORE_KEEPUPTODATE2 prompt),
- // and OnShow gets called again (FSynchronizing is false),
- // we do not want to try to start again
- FStartImmediately = false;
- StartButtonClick(NULL);
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::FormCloseQuery(TObject * /*Sender*/,
- bool & /*CanClose*/)
- {
- if (FSynchronizing)
- {
- Stop();
- }
- }
- //---------------------------------------------------------------------------
- TCopyParamType __fastcall TSynchronizeDialog::GetCopyParams()
- {
- TCopyParamType Result = FCopyParams;
- Result.PreserveTime = true;
- Result.NewerOnly = false;
- return Result;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::SetCopyParams(const TCopyParamType & value)
- {
- FCopyParams = value;
- UpdateControls();
- }
- //---------------------------------------------------------------------------
- int __fastcall TSynchronizeDialog::ActualCopyParamAttrs()
- {
- return FCopyParamAttrs | cpaNoPreserveTime | cpaNoNewerOnly;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::CopyParamClick(TObject * Sender)
- {
- DebugAssert(FLAGCLEAR(FOptions, soDoNotUsePresets));
- // PreserveTime is forced for some settings, but avoid hard-setting it until
- // user really confirms it on custom dialog
- TCopyParamType ACopyParams = CopyParams;
- if (CopyParamListPopupClick(Sender, ACopyParams, FPreset,
- ActualCopyParamAttrs()) > 0)
- {
- FCopyParams = ACopyParams;
- UpdateControls();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::CopyParamGroupContextPopup(
- TObject * /*Sender*/, TPoint & MousePos, bool & Handled)
- {
- if (FLAGCLEAR(FOptions, soDoNotUsePresets))
- {
- CopyParamListPopup(CalculatePopupRect(CopyParamGroup, MousePos),
- cplCustomizeDefault);
- Handled = true;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::CopyParamGroupClick(TObject * /*Sender*/)
- {
- // PreserveTime is forced for some settings, but avoid hard-setting it until
- // user really confirms it on cutom dialog
- TCopyParamType ACopyParams = CopyParams;
- if (DoCopyParamCustomDialog(ACopyParams, ActualCopyParamAttrs()))
- {
- FCopyParams = ACopyParams;
- UpdateControls();
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::HelpButtonClick(TObject * /*Sender*/)
- {
- FormHelp(this);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::ClearLog()
- {
- // TListItems::Clear() does nothing without allocated handle
- LogView->HandleNeeded();
- LogView->Items->Clear();
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::CopyLog()
- {
- TInstantOperationVisualizer Visualizer;
- UnicodeString Content;
- for (int i = 0; i < LogView->Items->Count; i++)
- {
- TListItem * Item = LogView->Items->Item[i];
- Content += Item->Caption + L"\t" + Item->SubItems->Strings[0] + L"\r\n";
- }
- CopyToClipboard(Content);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::LogViewKeyDown(TObject * /*Sender*/,
- WORD & Key, TShiftState Shift)
- {
- if (Key == VK_DELETE)
- {
- ClearLog();
- Key = 0;
- }
- else if ((Key == L'C') && Shift.Contains(ssCtrl) && (LogView->Items->Count > 0))
- {
- CopyLog();
- Key = 0;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::FormKeyDown(TObject * /*Sender*/, WORD & Key,
- TShiftState /*Shift*/)
- {
- if ((Key == VK_ESCAPE) && FSynchronizing)
- {
- Stop();
- Key = 0;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::TransferSettingsButtonDropDownClick(TObject * /*Sender*/)
- {
- CopyParamListPopup(CalculatePopupRect(TransferSettingsButton), cplCustomizeDefault);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::LogViewCustomDrawItem(TCustomListView * Sender,
- TListItem * Item, TCustomDrawState /*State*/, bool & /*DefaultDraw*/)
- {
- TLogItemData * LogItemData = GetLogItemData(Item);
- if (LogItemData->Entry == slContinuedError)
- {
- Sender->Canvas->Font->Color = clRed;
- }
- }
- //---------------------------------------------------------------------------
- TLogItemData * __fastcall TSynchronizeDialog::GetLogItemData(TListItem * Item)
- {
- return reinterpret_cast<TLogItemData *>(Item->Data);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::LogViewDeletion(TObject * /*Sender*/, TListItem * Item)
- {
- delete GetLogItemData(Item);
- Item->Data = NULL;
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::LogViewDblClick(TObject * /*Sender*/)
- {
- if (LogView->ItemFocused != NULL)
- {
- TLogItemData * LogItemData = GetLogItemData(LogView->ItemFocused);
- if (LogItemData->Entry == slContinuedError)
- {
- MoreMessageDialog(
- LogItemData->Message, LogItemData->MoreMessages.get(), LogItemData->Type,
- qaOK, LogItemData->HelpKeyword);
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::Minimize1Click(TObject * Sender)
- {
- Minimize(Sender);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::MinimizetoTray1Click(TObject * Sender)
- {
- bool MinimizeToTrayPrev = WinConfiguration->MinimizeToTray;
- DebugAssert(!MinimizeToTrayPrev);
- WinConfiguration->MinimizeToTray = true;
- try
- {
- Minimize(Sender);
- }
- __finally
- {
- WinConfiguration->MinimizeToTray = MinimizeToTrayPrev;
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::MinimizeButtonDropDownClick(TObject * /*Sender*/)
- {
- MenuPopup(MinimizeMenu, MinimizeButton);
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::StartInNewWindowItemClick(TObject * /*Sender*/)
- {
- StartInNewWindow();
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::StartInNewWindow()
- {
- SaveHistory();
- TSynchronizeParamType AParams = Params;
- TCopyParamType ACopyParams = CopyParams;
- FOnSynchronizeInNewWindow(AParams, &ACopyParams);
- Close();
- }
- //---------------------------------------------------------------------------
- void __fastcall TSynchronizeDialog::StartButtonDropDownClick(TObject * /*Sender*/)
- {
- MenuPopup(StartMenu, StartButton);
- }
- //---------------------------------------------------------------------------
|