From 963a13dcaa6f54f05fa8b6eb1e486a5b51296f81 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Mon, 19 Feb 2024 14:48:08 +0300 Subject: [PATCH 01/14] Fix SonarCloud warnings: Replace the use of "new" with an operation that automatically manages the memory --- src/NetBox/FarDialog.cpp | 2 +- src/NetBox/FarDialog.h | 7 + src/NetBox/WinSCPDialogs.cpp | 976 +++++++++++++++++------------------ src/core/Terminal.h | 2 +- 4 files changed, 497 insertions(+), 490 deletions(-) diff --git a/src/NetBox/FarDialog.cpp b/src/NetBox/FarDialog.cpp index de4f499f9..5b93a627f 100644 --- a/src/NetBox/FarDialog.cpp +++ b/src/NetBox/FarDialog.cpp @@ -96,7 +96,7 @@ void TFarDialog::InitDialog() FSynchronizeObjects[0] = INVALID_HANDLE_VALUE; FSynchronizeObjects[1] = INVALID_HANDLE_VALUE; - FBorderBox = new TFarBox(this); + FBorderBox = MakeOwnedObject(this); FBorderBox->SetBounds(TRect(3, 1, -4, -2)); FBorderBox->SetDouble(true); FTIdleThread = std::make_unique(this, 400); diff --git a/src/NetBox/FarDialog.h b/src/NetBox/FarDialog.h index fca9d28e4..858521cc4 100644 --- a/src/NetBox/FarDialog.h +++ b/src/NetBox/FarDialog.h @@ -1,5 +1,6 @@ #pragma once +#include #pragma warning(push, 1) #include #pragma warning(pop) @@ -697,3 +698,9 @@ class TFarLister : public TFarDialogItem inline TRect Rect(int32_t Left, int32_t Top, int32_t Right, int32_t Bottom); +template +ObjectType * MakeOwnedObject(OwnerType * Owner) +{ + std::unique_ptr Object(std::make_unique(Owner)); + return Object.release(); +} diff --git a/src/NetBox/WinSCPDialogs.cpp b/src/NetBox/WinSCPDialogs.cpp index e9db8d072..221375982 100644 --- a/src/NetBox/WinSCPDialogs.cpp +++ b/src/NetBox/WinSCPDialogs.cpp @@ -58,7 +58,7 @@ void TWinSCPDialog::AddStandardButtons(int32_t Shift, bool ButtonsOnly) { SetNextItemPosition(ipNewLine); - ButtonSeparator = new TFarSeparator(this); + ButtonSeparator = MakeOwnedObject(this); if (Shift >= 0) { ButtonSeparator->Move(0, Shift); @@ -71,7 +71,7 @@ void TWinSCPDialog::AddStandardButtons(int32_t Shift, bool ButtonsOnly) } DebugAssert(OkButton == nullptr); - OkButton = new TFarButton(this); + OkButton = MakeOwnedObject(this); if (ButtonsOnly) { if (Shift >= 0) @@ -92,7 +92,7 @@ void TWinSCPDialog::AddStandardButtons(int32_t Shift, bool ButtonsOnly) SetNextItemPosition(ipRight); DebugAssert(CancelButton == nullptr); - CancelButton = new TFarButton(this); + CancelButton = MakeOwnedObject(this); CancelButton->SetCaption(GetMsg(MSG_BUTTON_Cancel)); CancelButton->SetResult(brCancel); CancelButton->SetCenterGroup(true); @@ -149,7 +149,7 @@ TTabbedDialog::TTabbedDialog(TCustomFarPlugin * AFarPlugin, int32_t TabCount) no // FAR WORKAROUND // (to avoid first control on dialog be a button, that would be "pressed" // when listbox loses focus) - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); // make next item be inserted to default position Text->Move(0, -1); // on FAR 1.70 alpha 6 and later, empty text control would overwrite the @@ -307,93 +307,93 @@ bool TWinSCPPlugin::ConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_INTERFACE)))); - TFarCheckBox * DisksMenuCheck = new TFarCheckBox(Dialog); + TFarCheckBox * DisksMenuCheck = MakeOwnedObject(Dialog); DisksMenuCheck->SetCaption(GetMsg(NB_CONFIG_DISKS_MENU)); Dialog->SetNextItemPosition(ipNewLine); - TFarCheckBox * PluginsMenuCheck = new TFarCheckBox(Dialog); + TFarCheckBox * PluginsMenuCheck = MakeOwnedObject(Dialog); PluginsMenuCheck->SetCaption(GetMsg(NB_CONFIG_PLUGINS_MENU)); - TFarCheckBox * PluginsMenuCommandsCheck = new TFarCheckBox(Dialog); + TFarCheckBox * PluginsMenuCommandsCheck = MakeOwnedObject(Dialog); PluginsMenuCommandsCheck->SetCaption(GetMsg(NB_CONFIG_PLUGINS_MENU_COMMANDS)); - TFarCheckBox * SessionNameInTitleCheck = new TFarCheckBox(Dialog); + TFarCheckBox * SessionNameInTitleCheck = MakeOwnedObject(Dialog); SessionNameInTitleCheck->SetCaption(GetMsg(NB_CONFIG_SESSION_NAME_IN_TITLE)); - new TFarSeparator(Dialog); + MakeOwnedObject(Dialog); - TFarText * Text = new TFarText(Dialog); + TFarText * Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_CONFIG_COMMAND_PREFIXES)); - TFarEdit * CommandPrefixesEdit = new TFarEdit(Dialog); + TFarEdit * CommandPrefixesEdit = MakeOwnedObject(Dialog); - new TFarSeparator(Dialog); + MakeOwnedObject(Dialog); - TFarCheckBox * CustomPanelCheck = new TFarCheckBox(Dialog); + TFarCheckBox * CustomPanelCheck = MakeOwnedObject(Dialog); CustomPanelCheck->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_CHECK)); CustomPanelCheck->SetEnabled(true); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetLeft(Text->GetLeft() + 4); Text->SetEnabledDependency(CustomPanelCheck); Text->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_TYPES)); Dialog->SetNextItemPosition(ipBelow); - TFarEdit * CustomPanelTypesEdit = new TFarEdit(Dialog); + TFarEdit * CustomPanelTypesEdit = MakeOwnedObject(Dialog); CustomPanelTypesEdit->SetEnabledDependency(CustomPanelCheck); CustomPanelTypesEdit->SetWidth(CustomPanelTypesEdit->GetWidth() / 2 - 1); Dialog->SetNextItemPosition(ipRight); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetEnabledDependency(CustomPanelCheck); Text->Move(0, -1); Text->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_STATUS_TYPES)); Dialog->SetNextItemPosition(ipBelow); - TFarEdit * CustomPanelStatusTypesEdit = new TFarEdit(Dialog); + TFarEdit * CustomPanelStatusTypesEdit = MakeOwnedObject(Dialog); CustomPanelStatusTypesEdit->SetEnabledDependency(CustomPanelCheck); Dialog->SetNextItemPosition(ipNewLine); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetLeft(Text->GetLeft() + 4); Text->SetEnabledDependency(CustomPanelCheck); Text->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_WIDTHS)); Dialog->SetNextItemPosition(ipBelow); - TFarEdit * CustomPanelWidthsEdit = new TFarEdit(Dialog); + TFarEdit * CustomPanelWidthsEdit = MakeOwnedObject(Dialog); CustomPanelWidthsEdit->SetEnabledDependency(CustomPanelCheck); CustomPanelWidthsEdit->SetWidth(CustomPanelTypesEdit->GetWidth()); Dialog->SetNextItemPosition(ipRight); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetEnabledDependency(CustomPanelCheck); Text->Move(0, -1); Text->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_STATUS_WIDTHS)); Dialog->SetNextItemPosition(ipBelow); - TFarEdit * CustomPanelStatusWidthsEdit = new TFarEdit(Dialog); + TFarEdit * CustomPanelStatusWidthsEdit = MakeOwnedObject(Dialog); CustomPanelStatusWidthsEdit->SetEnabledDependency(CustomPanelCheck); Dialog->SetNextItemPosition(ipNewLine); - TFarCheckBox * CustomPanelFullScreenCheck = new TFarCheckBox(Dialog); + TFarCheckBox * CustomPanelFullScreenCheck = MakeOwnedObject(Dialog); CustomPanelFullScreenCheck->SetLeft(CustomPanelFullScreenCheck->GetLeft() + 4); CustomPanelFullScreenCheck->SetEnabledDependency(CustomPanelCheck); CustomPanelFullScreenCheck->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_FULL_SCREEN)); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetLeft(Text->GetLeft()); Text->SetEnabledDependency(CustomPanelCheck); Text->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_HINT)); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetLeft(Text->GetLeft()); Text->SetEnabledDependency(CustomPanelCheck); Text->SetCaption(GetMsg(NB_CONFIG_PANEL_MODE_HINT2)); @@ -441,7 +441,7 @@ bool TWinSCPPlugin::PanelConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_PANEL)))); - TFarCheckBox * AutoReadDirectoryAfterOpCheck = new TFarCheckBox(Dialog.get()); + TFarCheckBox * AutoReadDirectoryAfterOpCheck = MakeOwnedObject(Dialog.get()); AutoReadDirectoryAfterOpCheck->SetCaption(GetMsg(NB_CONFIG_AUTO_READ_DIRECTORY_AFTER_OP)); Dialog->AddStandardButtons(); @@ -474,19 +474,19 @@ bool TWinSCPPlugin::LoggingConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_LOGGING)))); - TFarCheckBox * LoggingCheck = new TFarCheckBox(Dialog); + TFarCheckBox * LoggingCheck = MakeOwnedObject(Dialog); LoggingCheck->SetCaption(GetMsg(NB_LOGGING_ENABLE)); - TFarSeparator * Separator = new TFarSeparator(Dialog); + TFarSeparator * Separator = MakeOwnedObject(Dialog); Separator->SetCaption(GetMsg(NB_LOGGING_OPTIONS_GROUP)); - TFarText * Text = new TFarText(Dialog); + TFarText * Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_LOGGING_LOG_PROTOCOL)); Text->SetEnabledDependency(LoggingCheck); Dialog->SetNextItemPosition(ipRight); - TFarComboBox * LogProtocolCombo = new TFarComboBox(Dialog); + TFarComboBox * LogProtocolCombo = MakeOwnedObject(Dialog); LogProtocolCombo->SetDropDownList(true); LogProtocolCombo->SetWidth(10); for (int32_t Index = 0; Index <= 2; ++Index) @@ -497,31 +497,31 @@ bool TWinSCPPlugin::LoggingConfigurationDialog() Dialog->SetNextItemPosition(ipNewLine); - new TFarSeparator(Dialog); + MakeOwnedObject(Dialog); - TFarCheckBox * LogToFileCheck = new TFarCheckBox(Dialog); + TFarCheckBox * LogToFileCheck = MakeOwnedObject(Dialog); LogToFileCheck->SetCaption(GetMsg(NB_LOGGING_LOG_TO_FILE)); LogToFileCheck->SetEnabledDependency(LoggingCheck); - TFarEdit * LogFileNameEdit = new TFarEdit(Dialog); + TFarEdit * LogFileNameEdit = MakeOwnedObject(Dialog); LogFileNameEdit->SetLeft(LogFileNameEdit->GetLeft() + 4); LogFileNameEdit->SetHistory(LOG_FILE_HISTORY); LogFileNameEdit->SetEnabledDependency(LogToFileCheck); Dialog->SetNextItemPosition(ipBelow); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_LOGGING_LOG_FILE_HINT1)); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_LOGGING_LOG_FILE_HINT2)); - TFarRadioButton * LogFileAppendButton = new TFarRadioButton(Dialog); + TFarRadioButton * LogFileAppendButton = MakeOwnedObject(Dialog); LogFileAppendButton->SetCaption(GetMsg(NB_LOGGING_LOG_FILE_APPEND)); LogFileAppendButton->SetEnabledDependency(LogToFileCheck); Dialog->SetNextItemPosition(ipRight); - TFarRadioButton * LogFileOverwriteButton = new TFarRadioButton(Dialog); + TFarRadioButton * LogFileOverwriteButton = MakeOwnedObject(Dialog); LogFileOverwriteButton->SetCaption(GetMsg(NB_LOGGING_LOG_FILE_OVERWRITE)); LogFileOverwriteButton->SetEnabledDependency(LogToFileCheck); @@ -585,20 +585,20 @@ bool TWinSCPPlugin::EnduranceConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_ENDURANCE)))); - TFarSeparator * Separator = new TFarSeparator(Dialog); + TFarSeparator * Separator = MakeOwnedObject(Dialog); Separator->SetCaption(GetMsg(NB_TRANSFER_RESUME)); - TFarRadioButton * ResumeOnButton = new TFarRadioButton(Dialog); + TFarRadioButton * ResumeOnButton = MakeOwnedObject(Dialog); ResumeOnButton->SetCaption(GetMsg(NB_TRANSFER_RESUME_ON)); - TFarRadioButton * ResumeSmartButton = new TFarRadioButton(Dialog); + TFarRadioButton * ResumeSmartButton = MakeOwnedObject(Dialog); ResumeSmartButton->SetCaption(GetMsg(NB_TRANSFER_RESUME_SMART)); const int32_t ResumeThresholdLeft = ResumeSmartButton->GetRight(); - TFarRadioButton * ResumeOffButton = new TFarRadioButton(Dialog); + TFarRadioButton * ResumeOffButton = MakeOwnedObject(Dialog); ResumeOffButton->SetCaption(GetMsg(NB_TRANSFER_RESUME_OFF)); - TFarEdit * ResumeThresholdEdit = new TFarEdit(Dialog); + TFarEdit * ResumeThresholdEdit = MakeOwnedObject(Dialog); ResumeThresholdEdit->Move(0, -2); ResumeThresholdEdit->SetLeft(ResumeThresholdLeft + 3); ResumeThresholdEdit->SetFixed(true); @@ -608,63 +608,63 @@ bool TWinSCPPlugin::EnduranceConfigurationDialog() Dialog->SetNextItemPosition(ipRight); - TFarText * Text = new TFarText(Dialog); + TFarText * Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_RESUME_THRESHOLD_UNIT)); Text->SetEnabledDependency(ResumeSmartButton); Dialog->SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(Dialog); + Separator = MakeOwnedObject(Dialog); Separator->SetCaption(GetMsg(NB_TRANSFER_SESSION_REOPEN_GROUP)); Separator->Move(0, 1); - TFarCheckBox * SessionReopenAutoCheck = new TFarCheckBox(Dialog); + TFarCheckBox * SessionReopenAutoCheck = MakeOwnedObject(Dialog); SessionReopenAutoCheck->SetCaption(GetMsg(NB_TRANSFER_SESSION_REOPEN_AUTO_LABEL)); Dialog->SetNextItemPosition(ipRight); - TFarEdit * SessionReopenAutoEdit = new TFarEdit(Dialog); + TFarEdit * SessionReopenAutoEdit = MakeOwnedObject(Dialog); SessionReopenAutoEdit->SetEnabledDependency(SessionReopenAutoCheck); SessionReopenAutoEdit->SetFixed(true); SessionReopenAutoEdit->SetMask(L"999"); SessionReopenAutoEdit->SetWidth(5); SessionReopenAutoEdit->Move(12, 0); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_SESSION_REOPEN_AUTO_LABEL2)); Text->SetEnabledDependency(SessionReopenAutoCheck); Dialog->SetNextItemPosition(ipNewLine); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_SESSION_REOPEN_NUMBER_OF_RETRIES_LABEL)); Text->SetEnabledDependency(SessionReopenAutoCheck); Text->Move(4, 0); Dialog->SetNextItemPosition(ipRight); - TFarEdit * SessionReopenNumberOfRetriesEdit = new TFarEdit(Dialog); + TFarEdit * SessionReopenNumberOfRetriesEdit = MakeOwnedObject(Dialog); SessionReopenNumberOfRetriesEdit->SetEnabledDependency(SessionReopenAutoCheck); SessionReopenNumberOfRetriesEdit->SetFixed(true); SessionReopenNumberOfRetriesEdit->SetMask(L"999"); SessionReopenNumberOfRetriesEdit->SetWidth(5); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_SESSION_REOPEN_NUMBER_OF_RETRIES_LABEL2)); Text->SetEnabledDependency(SessionReopenAutoCheck); - Separator = new TFarSeparator(Dialog); + Separator = MakeOwnedObject(Dialog); Separator->SetCaption(GetMsg(NB_TRANSFER_SESSION_TIMEOUTS_GROUP)); Separator->Move(0, 1); Dialog->SetNextItemPosition(ipNewLine); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_SESSION_TIMEOUTS_WAIT_TIMEOUT_LABEL)); Dialog->SetNextItemPosition(ipRight); - TFarEdit * WaitDialogTimeoutEdit = new TFarEdit(Dialog); + TFarEdit * WaitDialogTimeoutEdit = MakeOwnedObject(Dialog); WaitDialogTimeoutEdit->SetEnabledDependency(SessionReopenAutoCheck); WaitDialogTimeoutEdit->SetFixed(true); WaitDialogTimeoutEdit->SetMask(L"999"); @@ -672,7 +672,7 @@ bool TWinSCPPlugin::EnduranceConfigurationDialog() Dialog->SetNextItemPosition(ipRight); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_SESSION_TIMEOUTS_WAIT_TIMEOUT_LABEL2)); Dialog->AddStandardButtons(); @@ -738,28 +738,28 @@ bool TWinSCPPlugin::QueueConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_BACKGROUND)))); - TFarText * Text = new TFarText(Dialog); + TFarText * Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_TRANSFER_QUEUE_LIMIT)); Dialog->SetNextItemPosition(ipRight); - TFarEdit * QueueTransferLimitEdit = new TFarEdit(Dialog); + TFarEdit * QueueTransferLimitEdit = MakeOwnedObject(Dialog); QueueTransferLimitEdit->SetFixed(true); QueueTransferLimitEdit->SetMask(L"9"); QueueTransferLimitEdit->SetWidth(3); Dialog->SetNextItemPosition(ipNewLine); - TFarCheckBox * QueueCheck = new TFarCheckBox(Dialog); + TFarCheckBox * QueueCheck = MakeOwnedObject(Dialog); QueueCheck->SetCaption(GetMsg(NB_TRANSFER_QUEUE_DEFAULT)); - TFarCheckBox * QueueAutoPopupCheck = new TFarCheckBox(Dialog); + TFarCheckBox * QueueAutoPopupCheck = MakeOwnedObject(Dialog); QueueAutoPopupCheck->SetCaption(GetMsg(NB_TRANSFER_AUTO_POPUP)); - TFarCheckBox * RememberPasswordCheck = new TFarCheckBox(Dialog); + TFarCheckBox * RememberPasswordCheck = MakeOwnedObject(Dialog); RememberPasswordCheck->SetCaption(GetMsg(NB_TRANSFER_REMEMBER_PASSWORD)); - TFarCheckBox * QueueBeepCheck = new TFarCheckBox(Dialog); + TFarCheckBox * QueueBeepCheck = MakeOwnedObject(Dialog); QueueBeepCheck->SetCaption(GetMsg(NB_TRANSFER_QUEUE_BEEP)); Dialog->AddStandardButtons(); @@ -826,28 +826,28 @@ TTransferEditorConfigurationDialog::TTransferEditorConfigurationDialog( SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_TRANSFER_EDITOR)))); - EditorMultipleCheck = new TFarCheckBox(this); + EditorMultipleCheck = MakeOwnedObject(this); EditorMultipleCheck->SetCaption(GetMsg(NB_TRANSFER_EDITOR_MULTIPLE)); - EditorUploadOnSaveCheck = new TFarCheckBox(this); + EditorUploadOnSaveCheck = MakeOwnedObject(this); EditorUploadOnSaveCheck->SetCaption(GetMsg(NB_TRANSFER_EDITOR_UPLOAD_ON_SAVE)); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_TRANSFER_EDITOR_DOWNLOAD)); - EditorDownloadDefaultButton = new TFarRadioButton(this); + EditorDownloadDefaultButton = MakeOwnedObject(this); EditorDownloadDefaultButton->SetCaption(GetMsg(NB_TRANSFER_EDITOR_DOWNLOAD_DEFAULT)); - EditorDownloadOptionsButton = new TFarRadioButton(this); + EditorDownloadOptionsButton = MakeOwnedObject(this); EditorDownloadOptionsButton->SetCaption(GetMsg(NB_TRANSFER_EDITOR_DOWNLOAD_OPTIONS)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_TRANSFER_EDITOR_UPLOAD)); - EditorUploadSameButton = new TFarRadioButton(this); + EditorUploadSameButton = MakeOwnedObject(this); EditorUploadSameButton->SetCaption(GetMsg(NB_TRANSFER_EDITOR_UPLOAD_SAME)); - EditorUploadOptionsButton = new TFarRadioButton(this); + EditorUploadOptionsButton = MakeOwnedObject(this); EditorUploadOptionsButton->SetCaption(GetMsg(NB_TRANSFER_EDITOR_UPLOAD_OPTIONS)); AddStandardButtons(); @@ -928,17 +928,17 @@ bool TWinSCPPlugin::ConfirmationsConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_CONFIRMATIONS)))); - TFarCheckBox * ConfirmOverwritingCheck = new TFarCheckBox(Dialog); + TFarCheckBox * ConfirmOverwritingCheck = MakeOwnedObject(Dialog); ConfirmOverwritingCheck->SetAllowGrayed(true); ConfirmOverwritingCheck->SetCaption(GetMsg(NB_CONFIRMATIONS_CONFIRM_OVERWRITING)); - TFarCheckBox * ConfirmCommandSessionCheck = new TFarCheckBox(Dialog); + TFarCheckBox * ConfirmCommandSessionCheck = MakeOwnedObject(Dialog); ConfirmCommandSessionCheck->SetCaption(GetMsg(NB_CONFIRMATIONS_OPEN_COMMAND_SESSION)); - TFarCheckBox * ConfirmResumeCheck = new TFarCheckBox(Dialog); + TFarCheckBox * ConfirmResumeCheck = MakeOwnedObject(Dialog); ConfirmResumeCheck->SetCaption(GetMsg(NB_CONFIRMATIONS_CONFIRM_RESUME)); - TFarCheckBox * ConfirmSynchronizedBrowsingCheck = new TFarCheckBox(Dialog); + TFarCheckBox * ConfirmSynchronizedBrowsingCheck = MakeOwnedObject(Dialog); ConfirmSynchronizedBrowsingCheck->SetCaption(GetMsg(NB_CONFIRMATIONS_SYNCHRONIZED_BROWSING)); Dialog->AddStandardButtons(); @@ -984,28 +984,28 @@ bool TWinSCPPlugin::IntegrationConfigurationDialog() Dialog->SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_INTEGRATION)))); - TFarText * Text = new TFarText(Dialog); + TFarText * Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_INTEGRATION_PUTTY)); - TFarEdit * PuttyPathEdit = new TFarEdit(Dialog); + TFarEdit * PuttyPathEdit = MakeOwnedObject(Dialog); - TFarCheckBox * PuttyPasswordCheck = new TFarCheckBox(Dialog); + TFarCheckBox * PuttyPasswordCheck = MakeOwnedObject(Dialog); PuttyPasswordCheck->SetCaption(GetMsg(NB_INTEGRATION_PUTTY_PASSWORD)); PuttyPasswordCheck->SetEnabledDependency(PuttyPathEdit); - TFarCheckBox * TelnetForFtpInPuttyCheck = new TFarCheckBox(Dialog); + TFarCheckBox * TelnetForFtpInPuttyCheck = MakeOwnedObject(Dialog); TelnetForFtpInPuttyCheck->SetCaption(GetMsg(NB_INTEGRATION_TELNET_FOR_FTP_IN_PUTTY)); TelnetForFtpInPuttyCheck->SetEnabledDependency(PuttyPathEdit); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_INTEGRATION_PAGEANT)); - TFarEdit * PageantPathEdit = new TFarEdit(Dialog); + TFarEdit * PageantPathEdit = MakeOwnedObject(Dialog); - Text = new TFarText(Dialog); + Text = MakeOwnedObject(Dialog); Text->SetCaption(GetMsg(NB_INTEGRATION_PUTTYGEN)); - TFarEdit * PuttygenPathEdit = new TFarEdit(Dialog); + TFarEdit * PuttygenPathEdit = MakeOwnedObject(Dialog); Dialog->AddStandardButtons(); @@ -1082,16 +1082,16 @@ TAboutDialog::TAboutDialog(TCustomFarPlugin * AFarPlugin) : SetCaption(FORMAT("%s - %s", GetMsg(NB_PLUGIN_TITLE), ::StripHotkey(GetMsg(NB_CONFIG_ABOUT)))); TFarText * Text; - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(FileDescription); Text->SetCenterGroup(true); const UnicodeString PluginDescriptionText = GetMsg(NB_StringPluginDescriptionText); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(PluginDescriptionText); Text->SetCenterGroup(true); - Text = new TFarText(this); + Text = MakeOwnedObject(this); UnicodeString VersionStr = GetConfiguration()->GetProductVersion(); if (VersionStr.IsEmpty()) { @@ -1100,31 +1100,31 @@ TAboutDialog::TAboutDialog(TCustomFarPlugin * AFarPlugin) : Text->SetCaption(FORMAT(GetMsg(NB_ABOUT_VERSION), VersionStr, NETBOX_VERSION_BUILD)); Text->SetCenterGroup(true); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->Move(0, 1); Text->SetCaption(LoadStr(WINSCPFAR_BASED_ON)); Text->SetCenterGroup(true); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(FMTLOAD(WINSCPFAR_BASED_VERSION, LoadStr(WINSCPFAR_VERSION))); Text->SetCenterGroup(true); if (!ProductName.IsEmpty()) { - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(FORMAT(GetMsg(NB_ABOUT_PRODUCT_VERSION), ProductName, LoadStr(WINSCP_VERSION))); Text->SetCenterGroup(true); } - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(LoadStr(WINSCPFAR_BASED_COPYRIGHT)); Text->SetCenterGroup(true); if (!Comments.IsEmpty()) { - Text = new TFarText(this); + Text = MakeOwnedObject(this); if (ProductName.IsEmpty()) { Text->Move(0, 1); @@ -1135,13 +1135,13 @@ TAboutDialog::TAboutDialog(TCustomFarPlugin * AFarPlugin) : #if 0 if (!LegalCopyright.IsEmpty()) { - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->Move(0, 1); Text->SetCaption(GetConfiguration()->GetFileInfoString("LegalCopyright")); Text->SetCenterGroup(true); } - Text = new TFarText(this); + Text = MakeOwnedObject(this); if (LegalCopyright.IsEmpty()) { Text->Move(0, 1); @@ -1151,7 +1151,7 @@ TAboutDialog::TAboutDialog(TCustomFarPlugin * AFarPlugin) : Text->SetCenterGroup(true); Text->SetOnMouseClick(nb::bind(&TAboutDialog::UrlTextClick, this)); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->Move(0, 1); Button->SetCaption(GetMsg(NB_ABOUT_HOMEPAGE)); Button->SetOnClick(nb::bind(&TAboutDialog::UrlButtonClick, this)); @@ -1160,7 +1160,7 @@ TAboutDialog::TAboutDialog(TCustomFarPlugin * AFarPlugin) : SetNextItemPosition(ipRight); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_ABOUT_FORUM)); Button->SetOnClick(nb::bind(&TAboutDialog::UrlButtonClick, this)); Button->SetTag(2); @@ -1168,29 +1168,29 @@ TAboutDialog::TAboutDialog(TCustomFarPlugin * AFarPlugin) : SetNextItemPosition(ipNewLine); #endif - new TFarSeparator(this); + MakeOwnedObject(this); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(FMTLOAD(PUTTY_BASED_ON, LoadStr(PUTTY_VERSION))); Text->SetCenterGroup(true); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(LoadStr(PUTTY_COPYRIGHT)); Text->SetCenterGroup(true); #ifndef NO_FILEZILLA - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(LoadStr(FILEZILLA_BASED_ON2)); Text->SetCenterGroup(true); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(LoadStr(FILEZILLA_COPYRIGHT2)); Text->SetCenterGroup(true); #endif - new TFarSeparator(this); + MakeOwnedObject(this); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_CLOSE)); Button->SetDefault(true); Button->SetResult(brOK); @@ -1279,7 +1279,7 @@ TPasswordDialog::TPasswordDialog(TCustomFarPlugin * AFarPlugin, if (ShowSavePassword) { - SavePasswordCheck = new TFarCheckBox(this); + SavePasswordCheck = MakeOwnedObject(this); SavePasswordCheck->SetCaption(GetMsg(NB_PASSWORD_SAVE)); } else @@ -1287,9 +1287,9 @@ TPasswordDialog::TPasswordDialog(TCustomFarPlugin * AFarPlugin, SavePasswordCheck = nullptr; } - new TFarSeparator(this); + MakeOwnedObject(this); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_OK)); Button->SetDefault(true); Button->SetResult(brOK); @@ -1299,13 +1299,13 @@ TPasswordDialog::TPasswordDialog(TCustomFarPlugin * AFarPlugin, if (Truncated) { - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_PASSWORD_SHOW_PROMPT)); Button->SetOnClick(nb::bind(&TPasswordDialog::ShowPromptClick, this)); Button->SetCenterGroup(true); } - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_Cancel)); Button->SetResult(brCancel); Button->SetCenterGroup(true); @@ -1315,7 +1315,7 @@ void TPasswordDialog::GenerateLabel(const UnicodeString & ACaption, bool & Truncated) { UnicodeString Caption = ACaption; - TFarText * Result = new TFarText(this); + TFarText * Result = MakeOwnedObject(this); if (!FPrompt.IsEmpty()) { @@ -1335,7 +1335,7 @@ void TPasswordDialog::GenerateLabel(const UnicodeString & ACaption, TFarEdit * TPasswordDialog::GenerateEdit(bool Echo) { - TFarEdit * Result = new TFarEdit(this); + TFarEdit * Result = MakeOwnedObject(this); Result->SetPassword(!Echo); return Result; } @@ -1443,18 +1443,18 @@ bool TWinSCPFileSystem::BannerDialog(const UnicodeString & SessionName, Dialog->SetSize(TPoint(70, 21)); Dialog->SetCaption(FORMAT(GetMsg(NB_BANNER_TITLE), SessionName)); - TFarLister * Lister = new TFarLister(Dialog); + TFarLister * Lister = MakeOwnedObject(Dialog); FarWrapText(Banner, Lister->GetItems(), Dialog->GetBorderBox()->GetWidth() - 4); Lister->SetHeight(15); Lister->SetLeft(Dialog->GetBorderBox()->GetLeft() + 1); Lister->SetRight(Dialog->GetBorderBox()->GetRight() - (Lister->GetScrollBar() ? 0 : 1)); - new TFarSeparator(Dialog); + MakeOwnedObject(Dialog); TFarCheckBox * NeverShowAgainCheck = nullptr; if (FLAGCLEAR(Options, boDisableNeverShowAgain)) { - NeverShowAgainCheck = new TFarCheckBox(Dialog); + NeverShowAgainCheck = MakeOwnedObject(Dialog); NeverShowAgainCheck->SetCaption(GetMsg(NB_BANNER_NEVER_SHOW_AGAIN)); NeverShowAgainCheck->SetVisible(FLAGCLEAR(Options, boDisableNeverShowAgain)); NeverShowAgainCheck->SetChecked(NeverShowAgain); @@ -1462,7 +1462,7 @@ bool TWinSCPFileSystem::BannerDialog(const UnicodeString & SessionName, Dialog->SetNextItemPosition(ipRight); } - TFarButton * Button = new TFarButton(Dialog); + TFarButton * Button = MakeOwnedObject(Dialog); Button->SetCaption(GetMsg(NB_BANNER_CONTINUE)); Button->SetDefault(true); Button->SetResult(brOK); @@ -1730,10 +1730,10 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum FFirstVisibleTabIndex = 0; #define TRISTATE(COMBO, PROP, MSG) \ - Text = new TFarText(this); \ + Text = MakeOwnedObject(this); \ Text->SetCaption(GetMsg((MSG))); \ SetNextItemPosition(ipRight); \ - (COMBO) = new TFarComboBox(this); \ + (COMBO) = MakeOwnedObject(this); \ (COMBO)->SetDropDownList(true); \ (COMBO)->GetItems()->BeginUpdate(); \ { \ @@ -1765,13 +1765,13 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum Index1 = AddTab(tabSCP, GetMsg(NB_LOGIN_TAB_SCP)); ScpTab = rtti::dyn_cast_or_null(GetItem(Index1)); - PrevTab = new TTabButton(this); + PrevTab = MakeOwnedObject(this); PrevTab->SetTabName(UnicodeString(1, '\x11')); PrevTab->SetBrackets(brNone); PrevTab->SetCenterGroup(false); PrevTab->SetOnClick(nb::bind(&TSessionDialog::PrevTabClick, this)); - NextTab = new TTabButton(this); + NextTab = MakeOwnedObject(this); NextTab->SetTabName(UnicodeString(1, '\x10')); NextTab->SetBrackets(brNone); NextTab->SetCenterGroup(false); @@ -1815,16 +1815,16 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); SetDefaultGroup(tabSession); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_GROUP_SESSION)); int32_t GroupTop = Separator->GetTop(); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TRANSFER_PROTOCOL)); SetNextItemPosition(ipRight); - TransferProtocolCombo = new TFarComboBox(this); + TransferProtocolCombo = MakeOwnedObject(this); TransferProtocolCombo->SetDropDownList(true); TransferProtocolCombo->SetWidth(10); TransferProtocolCombo->GetItems()->Add(GetMsg(NB_LOGIN_SFTP)); @@ -1835,22 +1835,22 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum TransferProtocolCombo->GetItems()->Add(GetMsg(NB_LOGIN_WEBDAV)); TransferProtocolCombo->GetItems()->Add(GetMsg(NB_LOGIN_S3)); - AllowScpFallbackCheck = new TFarCheckBox(this); + AllowScpFallbackCheck = MakeOwnedObject(this); AllowScpFallbackCheck->SetCaption(GetMsg(NB_LOGIN_ALLOW_SCP_FALLBACK)); - InsecureLabel = new TFarText(this); + InsecureLabel = MakeOwnedObject(this); InsecureLabel->SetCaption(GetMsg(NB_LOGIN_INSECURE)); InsecureLabel->MoveAt(AllowScpFallbackCheck->GetLeft(), AllowScpFallbackCheck->GetTop()); SetNextItemPosition(ipNewLine); - FtpEncryptionLabel = new TFarText(this); + FtpEncryptionLabel = MakeOwnedObject(this); FtpEncryptionLabel->SetCaption(GetMsg(NB_LOGIN_FTP_ENCRYPTION)); FtpEncryptionLabel->SetWidth(15); SetNextItemPosition(ipRight); - FtpEncryptionCombo = new TFarComboBox(this); + FtpEncryptionCombo = MakeOwnedObject(this); FtpEncryptionCombo->SetDropDownList(true); FtpEncryptionCombo->GetItems()->Add(GetMsg(NB_LOGIN_FTP_USE_PLAIN_FTP)); FtpEncryptionCombo->GetItems()->Add(GetMsg(NB_LOGIN_FTP_REQUIRE_IMPLICIT_FTP)); @@ -1860,76 +1860,76 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); - HostNameLabel = new TFarText(this); + HostNameLabel = MakeOwnedObject(this); HostNameLabel->SetCaption(GetMsg(NB_LOGIN_HOST_NAME)); - HostNameEdit = new TFarEdit(this); + HostNameEdit = MakeOwnedObject(this); HostNameEdit->SetRight(CRect.Right - 12 - 2); SetNextItemPosition(ipRight); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PORT_NUMBER)); Text->Move(0, -1); SetNextItemPosition(ipBelow); - PortNumberEdit = new TFarEdit(this); + PortNumberEdit = MakeOwnedObject(this); PortNumberEdit->SetFixed(true); PortNumberEdit->SetMask(L"999999"); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); SetNextItemPosition(ipNewLine); - UserNameLabel = new TFarText(this); + UserNameLabel = MakeOwnedObject(this); UserNameLabel->SetCaption(GetMsg(NB_LOGIN_USER_NAME)); UserNameLabel->SetWidth(20); SetNextItemPosition(ipRight); - UserNameEdit = new TFarEdit(this); + UserNameEdit = MakeOwnedObject(this); UserNameEdit->SetWidth(20); UserNameEdit->SetRight(CRect.Right - 12 - 2); UserNameEdit->SetVisible(true); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); SetNextItemPosition(ipNewLine); - PasswordLabel = new TFarText(this); + PasswordLabel = MakeOwnedObject(this); PasswordLabel->SetCaption(GetMsg(NB_LOGIN_PASSWORD)); PasswordLabel->SetWidth(20); PasswordLabel->SetVisible(true); SetNextItemPosition(ipRight); - PasswordEdit = new TFarEdit(this); + PasswordEdit = MakeOwnedObject(this); PasswordEdit->SetPassword(true); PasswordEdit->SetWidth(20); PasswordEdit->SetRight(CRect.Right - 12 - 2); PasswordEdit->SetVisible(true); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PRIVATE_KEY)); - PrivateKeyEdit = new TFarEdit(this); + PrivateKeyEdit = MakeOwnedObject(this); Text->SetEnabledFollow(PrivateKeyEdit); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetTop(CRect.Bottom - 3); Text->SetBottom(Text->GetTop()); Text->SetCaption(GetMsg(NB_LOGIN_TAB_HINT1)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TAB_HINT2)); // Environment tab @@ -1937,16 +1937,16 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabEnvironment); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_ENVIRONMENT_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_EOL_TYPE)); SetNextItemPosition(ipRight); - EOLTypeCombo = new TFarComboBox(this); + EOLTypeCombo = MakeOwnedObject(this); EOLTypeCombo->SetDropDownList(true); EOLTypeCombo->SetWidth(7); EOLTypeCombo->SetRight(CRect.Right); @@ -1956,86 +1956,86 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); // UTF_TRISTATE(); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_CODE_PAGE)); SetNextItemPosition(ipRight); - CodePageEdit = new TFarComboBox(this); + CodePageEdit = MakeOwnedObject(this); CodePageEdit->SetWidth(30); CodePageEdit->SetRight(CRect.Right); FillCodePageEdit(); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TIME_DIFFERENCE)); SetNextItemPosition(ipRight); - TimeDifferenceEdit = new TFarEdit(this); + TimeDifferenceEdit = MakeOwnedObject(this); TimeDifferenceEdit->SetFixed(true); TimeDifferenceEdit->SetMask(L"###"); TimeDifferenceEdit->SetWidth(4); Text->SetEnabledFollow(TimeDifferenceEdit); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TIME_DIFFERENCE_HOURS)); Text->SetEnabledFollow(TimeDifferenceEdit); - TimeDifferenceMinutesEdit = new TFarEdit(this); + TimeDifferenceMinutesEdit = MakeOwnedObject(this); TimeDifferenceMinutesEdit->SetFixed(true); TimeDifferenceMinutesEdit->SetMask(L"###"); TimeDifferenceMinutesEdit->SetWidth(4); TimeDifferenceMinutesEdit->SetEnabledFollow(TimeDifferenceEdit); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TIME_DIFFERENCE_MINUTES)); Text->SetEnabledFollow(TimeDifferenceEdit); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_DST_MODE_GROUP)); - DSTModeUnixCheck = new TFarRadioButton(this); + DSTModeUnixCheck = MakeOwnedObject(this); DSTModeUnixCheck->SetCaption(GetMsg(NB_LOGIN_DST_MODE_UNIX)); - DSTModeWinCheck = new TFarRadioButton(this); + DSTModeWinCheck = MakeOwnedObject(this); DSTModeWinCheck->SetCaption(GetMsg(NB_LOGIN_DST_MODE_WIN)); DSTModeWinCheck->SetEnabledFollow(DSTModeUnixCheck); - DSTModeKeepCheck = new TFarRadioButton(this); + DSTModeKeepCheck = MakeOwnedObject(this); DSTModeKeepCheck->SetCaption(GetMsg(NB_LOGIN_DST_MODE_KEEP)); DSTModeKeepCheck->SetEnabledFollow(DSTModeUnixCheck); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_LOGIN_ENVIRONMENT_UNIX)); Button->SetOnClick(nb::bind(&TSessionDialog::UnixEnvironmentButtonClick, this)); Button->SetCenterGroup(true); SetNextItemPosition(ipRight); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_LOGIN_ENVIRONMENT_WINDOWS)); Button->SetOnClick(nb::bind(&TSessionDialog::WindowsEnvironmentButtonClick, this)); Button->SetCenterGroup(true); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_RECYCLE_BIN_GROUP)); - DeleteToRecycleBinCheck = new TFarCheckBox(this); + DeleteToRecycleBinCheck = MakeOwnedObject(this); DeleteToRecycleBinCheck->SetCaption(GetMsg(NB_LOGIN_RECYCLE_BIN_DELETE)); - OverwrittenToRecycleBinCheck = new TFarCheckBox(this); + OverwrittenToRecycleBinCheck = MakeOwnedObject(this); OverwrittenToRecycleBinCheck->SetCaption(GetMsg(NB_LOGIN_RECYCLE_BIN_OVERWRITE)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_RECYCLE_BIN_LABEL)); - RecycleBinPathEdit = new TFarEdit(this); + RecycleBinPathEdit = MakeOwnedObject(this); Text->SetEnabledFollow(RecycleBinPathEdit); SetNextItemPosition(ipNewLine); @@ -2045,36 +2045,36 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabDirectories); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_DIRECTORIES_GROUP)); - UpdateDirectoriesCheck = new TFarCheckBox(this); + UpdateDirectoriesCheck = MakeOwnedObject(this); UpdateDirectoriesCheck->SetCaption(GetMsg(NB_LOGIN_UPDATE_DIRECTORIES)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_REMOTE_DIRECTORY)); - RemoteDirectoryEdit = new TFarEdit(this); + RemoteDirectoryEdit = MakeOwnedObject(this); RemoteDirectoryEdit->SetHistory(REMOTE_DIR_HISTORY); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_DIRECTORY_OPTIONS_GROUP)); - CacheDirectoriesCheck = new TFarCheckBox(this); + CacheDirectoriesCheck = MakeOwnedObject(this); CacheDirectoriesCheck->SetCaption(GetMsg(NB_LOGIN_CACHE_DIRECTORIES)); - CacheDirectoryChangesCheck = new TFarCheckBox(this); + CacheDirectoryChangesCheck = MakeOwnedObject(this); CacheDirectoryChangesCheck->SetCaption(GetMsg(NB_LOGIN_CACHE_DIRECTORY_CHANGES)); - PreserveDirectoryChangesCheck = new TFarCheckBox(this); + PreserveDirectoryChangesCheck = MakeOwnedObject(this); PreserveDirectoryChangesCheck->SetCaption(GetMsg(NB_LOGIN_PRESERVE_DIRECTORY_CHANGES)); PreserveDirectoryChangesCheck->SetLeft(PreserveDirectoryChangesCheck->GetLeft() + 4); - ResolveSymlinksCheck = new TFarCheckBox(this); + ResolveSymlinksCheck = MakeOwnedObject(this); ResolveSymlinksCheck->SetCaption(GetMsg(NB_LOGIN_RESOLVE_SYMLINKS)); - new TFarSeparator(this); + MakeOwnedObject(this); // SCP Tab @@ -2082,83 +2082,83 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabSCP); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_SHELL_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_SHELL_SHELL)); SetNextItemPosition(ipRight); - ShellEdit = new TFarComboBox(this); + ShellEdit = MakeOwnedObject(this); ShellEdit->GetItems()->Add(GetMsg(NB_LOGIN_SHELL_SHELL_DEFAULT)); ShellEdit->GetItems()->Add(L"/bin/bash"); ShellEdit->GetItems()->Add(L"/bin/ksh"); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_SHELL_RETURN_VAR)); SetNextItemPosition(ipRight); - ReturnVarEdit = new TFarComboBox(this); + ReturnVarEdit = MakeOwnedObject(this); ReturnVarEdit->GetItems()->Add(GetMsg(NB_LOGIN_SHELL_RETURN_VAR_AUTODETECT)); ReturnVarEdit->GetItems()->Add(L"?"); ReturnVarEdit->GetItems()->Add(L"status"); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_SCP_LS_OPTIONS_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_LISTING_COMMAND)); SetNextItemPosition(ipRight); - ListingCommandEdit = new TFarComboBox(this); + ListingCommandEdit = MakeOwnedObject(this); ListingCommandEdit->GetItems()->Add(L"ls -la"); ListingCommandEdit->GetItems()->Add(L"ls -gla"); Text->SetEnabledFollow(ListingCommandEdit); SetNextItemPosition(ipNewLine); - IgnoreLsWarningsCheck = new TFarCheckBox(this); + IgnoreLsWarningsCheck = MakeOwnedObject(this); IgnoreLsWarningsCheck->SetCaption(GetMsg(NB_LOGIN_IGNORE_LS_WARNINGS)); SetNextItemPosition(ipRight); - SCPLsFullTimeAutoCheck = new TFarCheckBox(this); + SCPLsFullTimeAutoCheck = MakeOwnedObject(this); SCPLsFullTimeAutoCheck->SetCaption(GetMsg(NB_LOGIN_SCP_LS_FULL_TIME_AUTO)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_SCP_OPTIONS)); - LookupUserGroupsCheck = new TFarCheckBox(this); + LookupUserGroupsCheck = MakeOwnedObject(this); LookupUserGroupsCheck->SetCaption(GetMsg(NB_LOGIN_LOOKUP_USER_GROUPS)); SetNextItemPosition(ipRight); - UnsetNationalVarsCheck = new TFarCheckBox(this); + UnsetNationalVarsCheck = MakeOwnedObject(this); UnsetNationalVarsCheck->SetCaption(GetMsg(NB_LOGIN_CLEAR_NATIONAL_VARS)); SetNextItemPosition(ipNewLine); - ClearAliasesCheck = new TFarCheckBox(this); + ClearAliasesCheck = MakeOwnedObject(this); ClearAliasesCheck->SetCaption(GetMsg(NB_LOGIN_CLEAR_ALIASES)); SetNextItemPosition(ipRight); - Scp1CompatibilityCheck = new TFarCheckBox(this); + Scp1CompatibilityCheck = MakeOwnedObject(this); Scp1CompatibilityCheck->SetCaption(GetMsg(NB_LOGIN_SCP1_COMPATIBILITY)); SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); // SFTP Tab @@ -2166,14 +2166,14 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabSFTP); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_SFTP_PROTOCOL_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_SFTP_SERVER)); SetNextItemPosition(ipRight); - SftpServerEdit = new TFarComboBox(this); + SftpServerEdit = MakeOwnedObject(this); SftpServerEdit->GetItems()->Add(GetMsg(NB_LOGIN_SFTP_SERVER_DEFAULT)); SftpServerEdit->GetItems()->Add(L"/bin/sftp-server"); SftpServerEdit->GetItems()->Add(L"sudo su -c /bin/sftp-server"); @@ -2181,10 +2181,10 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_SFTP_MAX_VERSION)); SetNextItemPosition(ipRight); - SFTPMaxVersionCombo = new TFarComboBox(this); + SFTPMaxVersionCombo = MakeOwnedObject(this); SFTPMaxVersionCombo->SetDropDownList(true); for (int32_t Index2 = 0; Index2 <= 6; ++Index2) { @@ -2194,18 +2194,18 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_SFTP_BUGS_GROUP)); SFTP_BUGS(); - new TFarSeparator(this); + MakeOwnedObject(this); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_SFTP_MIN_PACKET_SIZE)); SetNextItemPosition(ipRight); - SFTPMinPacketSizeEdit = new TFarEdit(this); + SFTPMinPacketSizeEdit = MakeOwnedObject(this); SFTPMinPacketSizeEdit->SetFixed(true); SFTPMinPacketSizeEdit->SetMask(L"99999999"); SFTPMinPacketSizeEdit->SetWidth(8); @@ -2213,11 +2213,11 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_SFTP_MAX_PACKET_SIZE)); SetNextItemPosition(ipRight); - SFTPMaxPacketSizeEdit = new TFarEdit(this); + SFTPMaxPacketSizeEdit = MakeOwnedObject(this); SFTPMaxPacketSizeEdit->SetFixed(true); SFTPMaxPacketSizeEdit->SetMask(L"99999999"); SFTPMaxPacketSizeEdit->SetWidth(8); @@ -2229,47 +2229,47 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabFTP); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_FTP_GROUP)); TRISTATE(FtpUseMlsdCombo, FtpUseMlsd, NB_LOGIN_FTP_USE_MLSD); - FtpPasvModeCheck = new TFarCheckBox(this); + FtpPasvModeCheck = MakeOwnedObject(this); FtpPasvModeCheck->SetCaption(GetMsg(NB_LOGIN_FTP_PASV_MODE)); - FtpAllowEmptyPasswordCheck = new TFarCheckBox(this); + FtpAllowEmptyPasswordCheck = MakeOwnedObject(this); FtpAllowEmptyPasswordCheck->SetCaption(GetMsg(NB_LOGIN_FTP_ALLOW_EMPTY_PASSWORD)); SetNextItemPosition(ipNewLine); - FtpDupFFCheck = new TFarCheckBox(this); + FtpDupFFCheck = MakeOwnedObject(this); FtpDupFFCheck->SetCaption(GetMsg(NB_LOGIN_FTP_DUPFF)); SetNextItemPosition(ipNewLine); - FtpUndupFFCheck = new TFarCheckBox(this); + FtpUndupFFCheck = MakeOwnedObject(this); FtpUndupFFCheck->SetCaption(GetMsg(NB_LOGIN_FTP_UNDUPFF)); SetNextItemPosition(ipNewLine); - SslSessionReuseCheck = new TFarCheckBox(this); + SslSessionReuseCheck = MakeOwnedObject(this); SslSessionReuseCheck->SetCaption(GetMsg(NB_LOGIN_FTP_SSLSESSIONREUSE)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_FTP_POST_LOGIN_COMMANDS)); for (int32_t Index3 = 0; Index3 < nb::ToInt32(_countof(PostLoginCommandsEdits)); ++Index3) { - TFarEdit * Edit = new TFarEdit(this); + TFarEdit * Edit = MakeOwnedObject(this); PostLoginCommandsEdits[Index3] = Edit; } - new TFarSeparator(this); + MakeOwnedObject(this); // Connection tab @@ -2277,52 +2277,52 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabConnection); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_CONNECTION_GROUP)); SetNextItemPosition(ipNewLine); - SshBufferSizeCheck = new TFarCheckBox(this); + SshBufferSizeCheck = MakeOwnedObject(this); SshBufferSizeCheck->SetCaption(GetMsg(NB_LOGIN_SSH_OPTIMIZE_BUFFER_SIZE)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_TIMEOUTS_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TIMEOUT)); SetNextItemPosition(ipRight); - TimeoutEdit = new TFarEdit(this); + TimeoutEdit = MakeOwnedObject(this); TimeoutEdit->SetFixed(true); TimeoutEdit->SetMask(L"####"); TimeoutEdit->SetWidth(5); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TIMEOUT_SECONDS)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_PING_GROUP)); - PingOffButton = new TFarRadioButton(this); + PingOffButton = MakeOwnedObject(this); PingOffButton->SetCaption(GetMsg(NB_LOGIN_PING_OFF)); - PingNullPacketButton = new TFarRadioButton(this); + PingNullPacketButton = MakeOwnedObject(this); PingNullPacketButton->SetCaption(GetMsg(NB_LOGIN_PING_NULL_PACKET)); - PingDummyCommandButton = new TFarRadioButton(this); + PingDummyCommandButton = MakeOwnedObject(this); PingDummyCommandButton->SetCaption(GetMsg(NB_LOGIN_PING_DUMMY_COMMAND)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PING_INTERVAL)); Text->SetEnabledDependencyNegative(PingOffButton); SetNextItemPosition(ipRight); - PingIntervalSecEdit = new TFarEdit(this); + PingIntervalSecEdit = MakeOwnedObject(this); PingIntervalSecEdit->SetFixed(true); PingIntervalSecEdit->SetMask(L"####"); PingIntervalSecEdit->SetWidth(6); @@ -2330,39 +2330,39 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_IP_GROUP)); - IPAutoButton = new TFarRadioButton(this); + IPAutoButton = MakeOwnedObject(this); IPAutoButton->SetCaption(GetMsg(NB_LOGIN_IP_AUTO)); SetNextItemPosition(ipRight); - IPv4Button = new TFarRadioButton(this); + IPv4Button = MakeOwnedObject(this); IPv4Button->SetCaption(GetMsg(NB_LOGIN_IP_V4)); - IPv6Button = new TFarRadioButton(this); + IPv6Button = MakeOwnedObject(this); IPv6Button->SetCaption(GetMsg(NB_LOGIN_IP_V6)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); SetNextItemPosition(ipNewLine); // Proxy tab SetDefaultGroup(tabProxy); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_PROXY_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PROXY_METHOD)); SetNextItemPosition(ipRight); - FtpProxyMethodCombo = new TFarComboBox(this); + FtpProxyMethodCombo = MakeOwnedObject(this); FtpProxyMethodCombo->SetDropDownList(true); FtpProxyMethodComboAddNewItem(NB_LOGIN_PROXY_NONE, pmNone); FtpProxyMethodComboAddNewItem(NB_LOGIN_PROXY_SOCKS4, pmSocks4); @@ -2380,7 +2380,7 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum FtpProxyMethodComboAddNewItem(NB_LOGIN_PROXY_FTP_USER_USERPROXYUSERHOST, ToProxyMethod(FtpProxyMethod + 8)); FtpProxyMethodCombo->SetWidth(40); - SshProxyMethodCombo = new TFarComboBox(this); + SshProxyMethodCombo = MakeOwnedObject(this); SshProxyMethodCombo->SetLeft(FtpProxyMethodCombo->GetLeft()); SshProxyMethodCombo->SetWidth(FtpProxyMethodCombo->GetWidth()); SshProxyMethodCombo->SetRight(FtpProxyMethodCombo->GetRight()); @@ -2396,26 +2396,26 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PROXY_HOST)); SetNextItemPosition(ipNewLine); - ProxyHostEdit = new TFarEdit(this); + ProxyHostEdit = MakeOwnedObject(this); ProxyHostEdit->SetWidth(42); Text->SetEnabledFollow(ProxyHostEdit); SetNextItemPosition(ipRight); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PROXY_PORT)); Text->Move(0, -1); SetNextItemPosition(ipBelow); - ProxyPortEdit = new TFarEdit(this); + ProxyPortEdit = MakeOwnedObject(this); ProxyPortEdit->SetFixed(true); ProxyPortEdit->SetMask(L"999999"); // ProxyPortEdit->SetWidth(12); @@ -2423,154 +2423,154 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PROXY_USERNAME)); - ProxyUsernameEdit = new TFarEdit(this); + ProxyUsernameEdit = MakeOwnedObject(this); ProxyUsernameEdit->SetWidth(ProxyUsernameEdit->GetWidth() / 2 - 1); Text->SetEnabledFollow(ProxyUsernameEdit); SetNextItemPosition(ipRight); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PROXY_PASSWORD)); Text->Move(0, -1); SetNextItemPosition(ipBelow); - ProxyPasswordEdit = new TFarEdit(this); + ProxyPasswordEdit = MakeOwnedObject(this); ProxyPasswordEdit->SetPassword(true); Text->SetEnabledFollow(ProxyPasswordEdit); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_PROXY_SETTINGS_GROUP)); - ProxyTelnetCommandLabel = new TFarText(this); + ProxyTelnetCommandLabel = MakeOwnedObject(this); ProxyTelnetCommandLabel->SetCaption(GetMsg(NB_LOGIN_PROXY_TELNET_COMMAND)); SetNextItemPosition(ipRight); - ProxyTelnetCommandEdit = new TFarEdit(this); + ProxyTelnetCommandEdit = MakeOwnedObject(this); ProxyTelnetCommandLabel->SetEnabledFollow(ProxyTelnetCommandEdit); SetNextItemPosition(ipNewLine); - ProxyLocalCommandLabel = new TFarText(this); + ProxyLocalCommandLabel = MakeOwnedObject(this); ProxyLocalCommandLabel->SetCaption(GetMsg(NB_LOGIN_PROXY_LOCAL_COMMAND)); ProxyLocalCommandLabel->Move(0, -1); SetNextItemPosition(ipRight); - ProxyLocalCommandEdit = new TFarEdit(this); + ProxyLocalCommandEdit = MakeOwnedObject(this); ProxyLocalCommandLabel->SetEnabledFollow(ProxyLocalCommandEdit); SetNextItemPosition(ipNewLine); - ProxyLocalhostCheck = new TFarCheckBox(this); + ProxyLocalhostCheck = MakeOwnedObject(this); ProxyLocalhostCheck->SetCaption(GetMsg(NB_LOGIN_PROXY_LOCALHOST)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PROXY_DNS)); - ProxyDNSOffButton = new TFarRadioButton(this); + ProxyDNSOffButton = MakeOwnedObject(this); ProxyDNSOffButton->SetCaption(GetMsg(NB_LOGIN_PROXY_DNS_NO)); Text->SetEnabledFollow(ProxyDNSOffButton); SetNextItemPosition(ipRight); - ProxyDNSAutoButton = new TFarRadioButton(this); + ProxyDNSAutoButton = MakeOwnedObject(this); ProxyDNSAutoButton->SetCaption(GetMsg(NB_LOGIN_PROXY_DNS_AUTO)); ProxyDNSAutoButton->SetEnabledFollow(ProxyDNSOffButton); - ProxyDNSOnButton = new TFarRadioButton(this); + ProxyDNSOnButton = MakeOwnedObject(this); ProxyDNSOnButton->SetCaption(GetMsg(NB_LOGIN_PROXY_DNS_YES)); ProxyDNSOnButton->SetEnabledFollow(ProxyDNSOffButton); SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); // Tunnel tab SetNextItemPosition(ipNewLine); SetDefaultGroup(tabTunnel); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_TUNNEL_GROUP)); - TunnelCheck = new TFarCheckBox(this); + TunnelCheck = MakeOwnedObject(this); TunnelCheck->SetCaption(GetMsg(NB_LOGIN_TUNNEL_TUNNEL)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_TUNNEL_SESSION_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_HOST_NAME)); Text->SetEnabledDependency(TunnelCheck); - TunnelHostNameEdit = new TFarEdit(this); + TunnelHostNameEdit = MakeOwnedObject(this); TunnelHostNameEdit->SetRight(CRect.Right - 12 - 2); TunnelHostNameEdit->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipRight); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PORT_NUMBER)); Text->Move(0, -1); Text->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipBelow); - TunnelPortNumberEdit = new TFarEdit(this); + TunnelPortNumberEdit = MakeOwnedObject(this); TunnelPortNumberEdit->SetFixed(true); TunnelPortNumberEdit->SetMask(L"999999"); TunnelPortNumberEdit->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_USER_NAME)); Text->SetEnabledDependency(TunnelCheck); - TunnelUserNameEdit = new TFarEdit(this); + TunnelUserNameEdit = MakeOwnedObject(this); TunnelUserNameEdit->SetWidth(TunnelUserNameEdit->GetWidth() / 2 - 1); TunnelUserNameEdit->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipRight); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PASSWORD)); Text->Move(0, -1); Text->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipBelow); - TunnelPasswordEdit = new TFarEdit(this); + TunnelPasswordEdit = MakeOwnedObject(this); TunnelPasswordEdit->SetPassword(true); TunnelPasswordEdit->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_PRIVATE_KEY)); Text->SetEnabledDependency(TunnelCheck); - TunnelPrivateKeyEdit = new TFarEdit(this); + TunnelPrivateKeyEdit = MakeOwnedObject(this); TunnelPrivateKeyEdit->SetEnabledDependency(TunnelCheck); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_TUNNEL_OPTIONS_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_TUNNEL_LOCAL_PORT_NUMBER)); Text->SetEnabledDependency(TunnelCheck); SetNextItemPosition(ipRight); - TunnelLocalPortNumberEdit = new TFarComboBox(this); + TunnelLocalPortNumberEdit = MakeOwnedObject(this); TunnelLocalPortNumberEdit->SetLeft(TunnelPortNumberEdit->GetLeft()); TunnelLocalPortNumberEdit->SetEnabledDependency(TunnelCheck); TunnelLocalPortNumberEdit->GetItems()->BeginUpdate(); @@ -2592,53 +2592,53 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); // SSH tab SetNextItemPosition(ipNewLine); SetDefaultGroup(tabSsh); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_SSH_GROUP)); - CompressionCheck = new TFarCheckBox(this); + CompressionCheck = MakeOwnedObject(this); CompressionCheck->SetCaption(GetMsg(NB_LOGIN_COMPRESSION)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_SSH_PROTOCOL_GROUP)); - SshProt1onlyButton = new TFarRadioButton(this); + SshProt1onlyButton = MakeOwnedObject(this); SshProt1onlyButton->SetCaption(GetMsg(NB_LOGIN_SSH1_ONLY)); SetNextItemPosition(ipRight); - SshProt1Button = new TFarRadioButton(this); + SshProt1Button = MakeOwnedObject(this); SshProt1Button->SetCaption(GetMsg(NB_LOGIN_SSH1)); - SshProt2Button = new TFarRadioButton(this); + SshProt2Button = MakeOwnedObject(this); SshProt2Button->SetCaption(GetMsg(NB_LOGIN_SSH2)); - SshProt2onlyButton = new TFarRadioButton(this); + SshProt2onlyButton = MakeOwnedObject(this); SshProt2onlyButton->SetCaption(GetMsg(NB_LOGIN_SSH2_ONLY)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_ENCRYPTION_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_CIPHER)); - CipherListBox = new TFarListBox(this); + CipherListBox = MakeOwnedObject(this); CipherListBox->SetRight(CipherListBox->GetRight() - 15); CipherListBox->SetHeight(1 + CIPHER_COUNT + 1); int32_t Pos = CipherListBox->GetBottom(); SetNextItemPosition(ipRight); - CipherUpButton = new TFarButton(this); + CipherUpButton = MakeOwnedObject(this); CipherUpButton->SetCaption(GetMsg(NB_LOGIN_UP)); CipherUpButton->Move(0, 1); CipherUpButton->SetResult(-1); @@ -2646,7 +2646,7 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipBelow); - CipherDownButton = new TFarButton(this); + CipherDownButton = MakeOwnedObject(this); CipherDownButton->SetCaption(GetMsg(NB_LOGIN_DOWN)); CipherDownButton->SetResult(1); CipherDownButton->SetOnClick(nb::bind(&TSessionDialog::CipherButtonClick, this)); @@ -2655,7 +2655,7 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum if (!Limited) { - Ssh2DESCheck = new TFarCheckBox(this); + Ssh2DESCheck = MakeOwnedObject(this); Ssh2DESCheck->Move(0, Pos - Ssh2DESCheck->GetTop() + 1); Ssh2DESCheck->SetCaption(GetMsg(NB_LOGIN_SSH2DES)); Ssh2DESCheck->SetEnabledDependencyNegative(SshProt1onlyButton); @@ -2668,17 +2668,17 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum // KEX tab SetDefaultGroup(tabKex); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_KEX_REEXCHANGE_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_KEX_REKEY_TIME)); Text->SetEnabledDependencyNegative(SshProt1onlyButton); SetNextItemPosition(ipRight); - RekeyTimeEdit = new TFarEdit(this); + RekeyTimeEdit = MakeOwnedObject(this); RekeyTimeEdit->SetFixed(true); RekeyTimeEdit->SetMask(L"####"); RekeyTimeEdit->SetWidth(6); @@ -2686,33 +2686,33 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_KEX_REKEY_DATA)); Text->SetEnabledDependencyNegative(SshProt1onlyButton); SetNextItemPosition(ipRight); - RekeyDataEdit = new TFarEdit(this); + RekeyDataEdit = MakeOwnedObject(this); RekeyDataEdit->SetWidth(6); RekeyDataEdit->SetEnabledDependencyNegative(SshProt1onlyButton); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_KEX_OPTIONS_GROUP)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_LOGIN_KEX_LIST)); Text->SetEnabledDependencyNegative(SshProt1onlyButton); - KexListBox = new TFarListBox(this); + KexListBox = MakeOwnedObject(this); KexListBox->SetRight(KexListBox->GetRight() - 15); KexListBox->SetHeight(1 + KEX_COUNT + 1); KexListBox->SetEnabledDependencyNegative(SshProt1onlyButton); SetNextItemPosition(ipRight); - KexUpButton = new TFarButton(this); + KexUpButton = MakeOwnedObject(this); KexUpButton->SetCaption(GetMsg(NB_LOGIN_UP)); KexUpButton->Move(0, 1); KexUpButton->SetResult(-1); @@ -2720,7 +2720,7 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipBelow); - KexDownButton = new TFarButton(this); + KexDownButton = MakeOwnedObject(this); KexDownButton->SetCaption(GetMsg(NB_LOGIN_DOWN)); KexDownButton->SetResult(1); KexDownButton->SetOnClick(nb::bind(&TSessionDialog::KexButtonClick, this)); @@ -2731,52 +2731,52 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetDefaultGroup(tabAuthentication); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); - SshNoUserAuthCheck = new TFarCheckBox(this); + SshNoUserAuthCheck = MakeOwnedObject(this); SshNoUserAuthCheck->SetCaption(GetMsg(NB_LOGIN_AUTH_SSH_NO_USER_AUTH)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_AUTH_GROUP)); - TryAgentCheck = new TFarCheckBox(this); + TryAgentCheck = MakeOwnedObject(this); TryAgentCheck->SetCaption(GetMsg(NB_LOGIN_AUTH_TRY_AGENT)); - AuthTISCheck = new TFarCheckBox(this); + AuthTISCheck = MakeOwnedObject(this); AuthTISCheck->SetCaption(GetMsg(NB_LOGIN_AUTH_TIS)); - AuthKICheck = new TFarCheckBox(this); + AuthKICheck = MakeOwnedObject(this); AuthKICheck->SetCaption(GetMsg(NB_LOGIN_AUTH_KI)); - AuthKIPasswordCheck = new TFarCheckBox(this); + AuthKIPasswordCheck = MakeOwnedObject(this); AuthKIPasswordCheck->SetCaption(GetMsg(NB_LOGIN_AUTH_KI_PASSWORD)); AuthKIPasswordCheck->Move(4, 0); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_AUTH_PARAMS_GROUP)); - AgentFwdCheck = new TFarCheckBox(this); + AgentFwdCheck = MakeOwnedObject(this); AgentFwdCheck->SetCaption(GetMsg(NB_LOGIN_AUTH_AGENT_FWD)); // GSSAPI - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_LOGIN_AUTH_GSSAPI_PARAMS_GROUP)); - AuthGSSAPICheck3 = new TFarCheckBox(this); + AuthGSSAPICheck3 = MakeOwnedObject(this); AuthGSSAPICheck3->SetCaption(GetMsg(NB_LOGIN_AUTH_ATTEMPT_GSSAPI_AUTHENTICATION)); AuthGSSAPICheck3->SetOnAllowChange(nb::bind(&TSessionDialog::AuthGSSAPICheckAllowChange, this)); - GSSAPIFwdTGTCheck = new TFarCheckBox(this); + GSSAPIFwdTGTCheck = MakeOwnedObject(this); GSSAPIFwdTGTCheck->SetCaption(GetMsg(NB_LOGIN_AUTH_ALLOW_GSSAPI_CREDENTIAL_DELEGATION)); - new TFarSeparator(this); + MakeOwnedObject(this); // Bugs tab SetDefaultGroup(tabBugs); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_BUGS_GROUP)); @@ -2796,26 +2796,26 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipNewLine); SetDefaultGroup(tabWebDAV); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GroupTop); Separator->SetCaption(GetMsg(NB_LOGIN_WEBDAV_GROUP)); - WebDAVCompressionCheck = new TFarCheckBox(this); + WebDAVCompressionCheck = MakeOwnedObject(this); WebDAVCompressionCheck->SetCaption(GetMsg(NB_LOGIN_COMPRESSION)); #undef TRISTATE - new TFarSeparator(this); + MakeOwnedObject(this); // Buttons SetNextItemPosition(ipNewLine); SetDefaultGroup(0); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(CRect.Bottom - 1); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_OK)); Button->SetDefault(Action != saConnect); Button->SetResult(brOK); @@ -2823,13 +2823,13 @@ TSessionDialog::TSessionDialog(TCustomFarPlugin * AFarPlugin, TSessionActionEnum SetNextItemPosition(ipRight); - ConnectButton = new TFarButton(this); + ConnectButton = MakeOwnedObject(this); ConnectButton->SetCaption(GetMsg(NB_LOGIN_CONNECT_BUTTON)); ConnectButton->SetDefault(Action == saConnect); ConnectButton->SetResult(brConnect); ConnectButton->SetCenterGroup(true); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_Cancel)); Button->SetResult(brCancel); Button->SetCenterGroup(true); @@ -4358,7 +4358,7 @@ void TSessionDialog::CodePageEditAdd(uint32_t Cp) int32_t TSessionDialog::AddTab(int32_t TabID, const UnicodeString & TabCaption) { constexpr TFarButtonBrackets TabBrackets = brNone; // brSpace; // - TTabButton * Tab = new TTabButton(this); + TTabButton * Tab = MakeOwnedObject(this); Tab->SetTabName(TabCaption); Tab->SetTab(TabID); Tab->SetBrackets(TabBrackets); @@ -4442,7 +4442,7 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, for (int32_t RowIndex = 0; RowIndex < 3; ++RowIndex) { GetDialog()->SetNextItemPosition(ipNewLine); - TFarText * Text = new TFarText(GetDialog()); + TFarText * Text = MakeOwnedObject(GetDialog()); if (RowIndex == 0) { Text->SetTop(0); @@ -4456,7 +4456,7 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, for (int32_t ColIndex = 0; ColIndex < 3; ++ColIndex) { - TFarCheckBox * CheckBox = new TFarCheckBox(GetDialog()); + TFarCheckBox * CheckBox = MakeOwnedObject(GetDialog()); FCheckBoxes[(RowIndex + 1) * 3 + ColIndex] = CheckBox; Add(CheckBox); CheckBox->SetEnabledDependency(EnabledDependency); @@ -4465,7 +4465,7 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, if (ShowSpecials) { - TFarCheckBox * CheckBox = new TFarCheckBox(GetDialog()); + TFarCheckBox * CheckBox = MakeOwnedObject(GetDialog()); Add(CheckBox); CheckBox->SetVisible(ShowSpecials); CheckBox->SetEnabledDependency(EnabledDependency); @@ -4481,7 +4481,7 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipNewLine); - TFarText * Text = new TFarText(GetDialog()); + TFarText * Text = MakeOwnedObject(GetDialog()); Add(Text); Text->SetEnabledDependency(EnabledDependency); Text->SetLeft(0); @@ -4489,7 +4489,7 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipRight); - FOctalEdit = new TFarEdit(GetDialog()); + FOctalEdit = MakeOwnedObject(GetDialog()); Add(FOctalEdit); FOctalEdit->SetEnabledDependency(EnabledDependency); FOctalEdit->SetWidth(5); @@ -4500,21 +4500,21 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, { GetDialog()->SetNextItemPosition(ipRight); - TFarButton * Button = new TFarButton(GetDialog()); + TFarButton * Button = MakeOwnedObject(GetDialog()); Add(Button); Button->SetEnabledDependency(EnabledDependency); Button->SetCaption(GetMsg(NB_PROPERTIES_NONE_RIGHTS)); Button->SetTag(TRights::rfNo); Button->SetOnClick(nb::bind(&TRightsContainer::RightsButtonClick, this)); - Button = new TFarButton(GetDialog()); + Button = MakeOwnedObject(GetDialog()); Add(Button); Button->SetEnabledDependency(EnabledDependency); Button->SetCaption(GetMsg(NB_PROPERTIES_DEFAULT_RIGHTS)); Button->SetTag(TRights::rfDefault); Button->SetOnClick(nb::bind(&TRightsContainer::RightsButtonClick, this)); - Button = new TFarButton(GetDialog()); + Button = MakeOwnedObject(GetDialog()); Add(Button); Button->SetEnabledDependency(EnabledDependency); Button->SetCaption(GetMsg(NB_PROPERTIES_ALL_RIGHTS)); @@ -4526,7 +4526,7 @@ TRightsContainer::TRightsContainer(TFarDialog * ADialog, if (FAnyDirectories) { - FDirectoriesXCheck = new TFarCheckBox(GetDialog()); + FDirectoriesXCheck = MakeOwnedObject(GetDialog()); Add(FDirectoriesXCheck); FDirectoriesXCheck->SetEnabledDependency(EnabledDependency); FDirectoriesXCheck->SetLeft(0); @@ -4838,13 +4838,13 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, const TRect CRect = GetClientRect(); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_PROPERTIES_PROMPT)); Text->SetCenterGroup(true); SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCenterGroup(true); if (AFileList->GetCount() > 1) { @@ -4858,21 +4858,21 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, if (!File->GetLinkTo().IsEmpty()) { SetHeight(GetHeight() + 1); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_PROPERTIES_LINKTO)); SetNextItemPosition(ipRight); - TFarEdit * Edit = new TFarEdit(this); + TFarEdit * Edit = MakeOwnedObject(this); Edit->SetText(File->GetLinkTo()); Edit->SetReadOnly(true); SetNextItemPosition(ipNewLine); } - new TFarSeparator(this); + MakeOwnedObject(this); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_PROPERTIES_OWNER)); Text->SetEnabled(IsNumericOrText(cpOwner)); @@ -4880,19 +4880,19 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, if (IsNumericOnly(cpOwner)) { - OwnerIDEdit = new TFarEdit(this); + OwnerIDEdit = MakeOwnedObject(this); OwnerIDEdit->SetWidth(8); OwnerIDEdit->SetFixed(true); OwnerIDEdit->SetMask("99999999"); SetNextItemPosition(ipRight); - OwnerNameText = new TFarText(this); + OwnerNameText = MakeOwnedObject(this); OwnerNameText->SetEnabled(false); } else { - OwnerComboBox = new TFarComboBox(this); + OwnerComboBox = MakeOwnedObject(this); OwnerComboBox->SetWidth(20); OwnerComboBox->SetEnabled(IsNumericOrText(cpOwner)); if (UsedUserList.get()) @@ -4903,7 +4903,7 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipNewLine); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_PROPERTIES_GROUP)); Text->SetEnabled(IsNumericOrText(cpGroup)); @@ -4911,19 +4911,19 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, if (IsNumericOnly(cpGroup)) { - GroupIDEdit = new TFarEdit(this); + GroupIDEdit = MakeOwnedObject(this); GroupIDEdit->SetWidth(8); GroupIDEdit->SetFixed(true); GroupIDEdit->SetMask("99999999"); SetNextItemPosition(ipRight); - GroupNameText = new TFarText(this); + GroupNameText = MakeOwnedObject(this); GroupNameText->SetEnabled(false); } else { - GroupComboBox = new TFarComboBox(this); + GroupComboBox = MakeOwnedObject(this); GroupComboBox->SetWidth(20); GroupComboBox->SetEnabled(IsNumericOrText(cpGroup)); if (UsedGroupList.get()) @@ -4933,7 +4933,7 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, } SetNextItemPosition(ipNewLine); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_PROPERTIES_RIGHTS)); RightsContainer = new TRightsContainer(this, FAnyDirectories, @@ -4942,10 +4942,10 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, if (FAnyDirectories) { - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(Separator->GetPosition() + RightsContainer->GetTop()); - RecursiveCheck = new TFarCheckBox(this); + RecursiveCheck = MakeOwnedObject(this); RecursiveCheck->SetCaption(GetMsg(NB_PROPERTIES_RECURSIVE)); } else @@ -4955,10 +4955,10 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(CRect.Bottom - 1); - OkButton = new TFarButton(this); + OkButton = MakeOwnedObject(this); OkButton->SetCaption(GetMsg(MSG_BUTTON_OK)); OkButton->SetDefault(true); OkButton->SetResult(brOK); @@ -4966,7 +4966,7 @@ TPropertiesDialog::TPropertiesDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipRight); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_Cancel)); Button->SetResult(brCancel); Button->SetCenterGroup(true); @@ -5209,7 +5209,7 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, SetLeft(GetLeft() - 1); - TFarBox * Box = new TFarBox(GetDialog()); + TFarBox * Box = MakeOwnedObject(GetDialog()); Box->SetLeft(0); Box->SetTop(0); Box->SetHeight(1); @@ -5219,7 +5219,7 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipRight); - Box = new TFarBox(GetDialog()); + Box = MakeOwnedObject(GetDialog()); Add(Box); Box->SetLeft(Box->GetLeft() - 2); Box->SetRight(Box->GetRight() + 1); @@ -5227,7 +5227,7 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipNewLine); - TMTextButton = new TFarRadioButton(GetDialog()); + TMTextButton = MakeOwnedObject(GetDialog()); TMTextButton->SetLeft(1); Add(TMTextButton); int32_t TMTop = TMTextButton->GetTop(); @@ -5235,25 +5235,25 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, TMTextButton->SetEnabled( FLAGCLEAR(CopyParamAttrs, cpaNoTransferMode)); - TMBinaryButton = new TFarRadioButton(GetDialog()); + TMBinaryButton = MakeOwnedObject(GetDialog()); TMBinaryButton->SetLeft(1); Add(TMBinaryButton); TMBinaryButton->SetCaption(GetMsg(NB_TRANSFER_MODE_BINARY)); TMBinaryButton->SetEnabled(TMTextButton->GetEnabled()); - TMAutomaticButton = new TFarRadioButton(GetDialog()); + TMAutomaticButton = MakeOwnedObject(GetDialog()); TMAutomaticButton->SetLeft(1); Add(TMAutomaticButton); TMAutomaticButton->SetCaption(GetMsg(NB_TRANSFER_MODE_AUTOMATIC)); TMAutomaticButton->SetEnabled(TMTextButton->GetEnabled()); - TFarText * Text = new TFarText(GetDialog()); + TFarText * Text = MakeOwnedObject(GetDialog()); Text->SetLeft(1); Add(Text); Text->SetCaption(GetMsg(NB_TRANSFER_MODE_MASK)); Text->SetEnabledDependency(TMAutomaticButton); - AsciiFileMaskEdit = new TFarEdit(GetDialog()); + AsciiFileMaskEdit = MakeOwnedObject(GetDialog()); AsciiFileMaskEdit->SetLeft(1); Add(AsciiFileMaskEdit); AsciiFileMaskEdit->SetEnabledDependency(TMAutomaticButton); @@ -5261,13 +5261,13 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, AsciiFileMaskEdit->SetHistory(ASCII_MASK_HISTORY); AsciiFileMaskEdit->SetOnExit(nb::bind(&TCopyParamsContainer::ValidateMaskComboExit, this)); - Box = new TFarBox(GetDialog()); + Box = MakeOwnedObject(GetDialog()); Box->SetLeft(0); Add(Box); Box->SetWidth(TMWidth + 2); Box->SetCaption(GetMsg(NB_TRANSFER_FILENAME_MODIFICATION)); - CCNoChangeButton = new TFarRadioButton(GetDialog()); + CCNoChangeButton = MakeOwnedObject(GetDialog()); CCNoChangeButton->SetLeft(1); Add(CCNoChangeButton); CCNoChangeButton->SetCaption(GetMsg(NB_TRANSFER_FILENAME_NOCHANGE)); @@ -5275,14 +5275,14 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipRight); - CCUpperCaseButton = new TFarRadioButton(GetDialog()); + CCUpperCaseButton = MakeOwnedObject(GetDialog()); Add(CCUpperCaseButton); CCUpperCaseButton->SetCaption(GetMsg(NB_TRANSFER_FILENAME_UPPERCASE)); CCUpperCaseButton->SetEnabled(CCNoChangeButton->GetEnabled()); GetDialog()->SetNextItemPosition(ipNewLine); - CCFirstUpperCaseButton = new TFarRadioButton(GetDialog()); + CCFirstUpperCaseButton = MakeOwnedObject(GetDialog()); CCFirstUpperCaseButton->SetLeft(1); Add(CCFirstUpperCaseButton); CCFirstUpperCaseButton->SetCaption(GetMsg(NB_TRANSFER_FILENAME_FIRSTUPPERCASE)); @@ -5290,14 +5290,14 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipRight); - CCLowerCaseButton = new TFarRadioButton(GetDialog()); + CCLowerCaseButton = MakeOwnedObject(GetDialog()); Add(CCLowerCaseButton); CCLowerCaseButton->SetCaption(GetMsg(NB_TRANSFER_FILENAME_LOWERCASE)); CCLowerCaseButton->SetEnabled(CCNoChangeButton->GetEnabled()); GetDialog()->SetNextItemPosition(ipNewLine); - CCLowerCaseShortButton = new TFarRadioButton(GetDialog()); + CCLowerCaseShortButton = MakeOwnedObject(GetDialog()); CCLowerCaseShortButton->SetLeft(1); Add(CCLowerCaseShortButton); CCLowerCaseShortButton->SetCaption(GetMsg(NB_TRANSFER_FILENAME_LOWERCASESHORT)); @@ -5305,20 +5305,20 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipRight); - ReplaceInvalidCharsCheck = new TFarCheckBox(GetDialog()); + ReplaceInvalidCharsCheck = MakeOwnedObject(GetDialog()); Add(ReplaceInvalidCharsCheck); ReplaceInvalidCharsCheck->SetCaption(GetMsg(NB_TRANSFER_FILENAME_REPLACE_INVALID)); ReplaceInvalidCharsCheck->SetEnabled(CCNoChangeButton->GetEnabled()); GetDialog()->SetNextItemPosition(ipNewLine); - Box = new TFarBox(GetDialog()); + Box = MakeOwnedObject(GetDialog()); Box->SetLeft(0); Add(Box); Box->SetWidth(TMWidth + 2); Box->SetCaption(GetMsg(NB_TRANSFER_DOWNLOAD_OPTIONS)); - PreserveReadOnlyCheck = new TFarCheckBox(GetDialog()); + PreserveReadOnlyCheck = MakeOwnedObject(GetDialog()); Add(PreserveReadOnlyCheck); PreserveReadOnlyCheck->SetLeft(1); PreserveReadOnlyCheck->SetCaption(GetMsg(NB_TRANSFER_PRESERVE_READONLY)); @@ -5326,7 +5326,7 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, FLAGCLEAR(CopyParamAttrs, cpaNoPreserveReadOnly)); int32_t TMBottom = PreserveReadOnlyCheck->GetTop(); - PreserveRightsCheck = new TFarCheckBox(GetDialog()); + PreserveRightsCheck = MakeOwnedObject(GetDialog()); Add(PreserveRightsCheck); PreserveRightsCheck->SetLeft(TMWidth + 3); PreserveRightsCheck->SetTop(TMTop); @@ -5342,13 +5342,13 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, RightsContainer->SetLeft(PreserveRightsCheck->GetActualBounds().Left); RightsContainer->SetTop(PreserveRightsCheck->GetActualBounds().Top + 1); - IgnorePermErrorsCheck = new TFarCheckBox(GetDialog()); + IgnorePermErrorsCheck = MakeOwnedObject(GetDialog()); Add(IgnorePermErrorsCheck); IgnorePermErrorsCheck->SetLeft(PreserveRightsCheck->GetLeft()); IgnorePermErrorsCheck->SetTop(TMTop + 6); IgnorePermErrorsCheck->SetCaption(GetMsg(NB_TRANSFER_PRESERVE_PERM_ERRORS)); - ClearArchiveCheck = new TFarCheckBox(GetDialog()); + ClearArchiveCheck = MakeOwnedObject(GetDialog()); ClearArchiveCheck->SetLeft(IgnorePermErrorsCheck->GetLeft()); Add(ClearArchiveCheck); ClearArchiveCheck->SetTop(TMTop + 7); @@ -5357,7 +5357,7 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, FLAGCLEAR(FOptions, coTempTransfer) && FLAGCLEAR(CopyParamAttrs, cpaNoClearArchive)); - Box = new TFarBox(GetDialog()); + Box = MakeOwnedObject(GetDialog()); Box->SetTop(TMTop + 8); Add(Box); Box->SetBottom(Box->GetTop()); @@ -5365,33 +5365,33 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, Box->SetWidth(Box->GetWidth() + 2); Box->SetCaption(GetMsg(NB_TRANSFER_COMMON_OPTIONS)); - PreserveTimeCheck = new TFarCheckBox(GetDialog()); + PreserveTimeCheck = MakeOwnedObject(GetDialog()); Add(PreserveTimeCheck); PreserveTimeCheck->SetLeft(TMWidth + 3); PreserveTimeCheck->SetCaption(GetMsg(NB_TRANSFER_PRESERVE_TIMESTAMP)); PreserveTimeCheck->SetEnabled( FLAGCLEAR(CopyParamAttrs, cpaNoPreserveTime)); - CalculateSizeCheck = new TFarCheckBox(GetDialog()); + CalculateSizeCheck = MakeOwnedObject(GetDialog()); CalculateSizeCheck->SetCaption(GetMsg(NB_TRANSFER_CALCULATE_SIZE)); Add(CalculateSizeCheck); CalculateSizeCheck->SetLeft(TMWidth + 3); GetDialog()->SetNextItemPosition(ipNewLine); - TFarSeparator * Separator = new TFarSeparator(GetDialog()); + TFarSeparator * Separator = MakeOwnedObject(GetDialog()); Add(Separator); Separator->SetPosition(TMBottom + 1); Separator->SetCaption(GetMsg(NB_TRANSFER_OTHER)); - FileMaskText = new TFarText(GetDialog()); + FileMaskText = MakeOwnedObject(GetDialog()); FileMaskText->SetLeft(1); Add(FileMaskText); FileMaskText->SetCaption(GetMsg(NB_TRANSFER_FILE_MASK)); GetDialog()->SetNextItemPosition(ipNewLine); - FileMaskEdit = new TFarEdit(GetDialog()); + FileMaskEdit = MakeOwnedObject(GetDialog()); FileMaskEdit->SetLeft(1); Add(FileMaskEdit); FileMaskEdit->SetWidth(TMWidth); @@ -5401,14 +5401,14 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipNewLine); - Text = new TFarText(GetDialog()); + Text = MakeOwnedObject(GetDialog()); Add(Text); Text->SetCaption(GetMsg(NB_TRANSFER_SPEED)); Text->MoveAt(TMWidth + 3, FileMaskText->GetTop()); GetDialog()->SetNextItemPosition(ipRight); - SpeedCombo = new TFarComboBox(GetDialog()); + SpeedCombo = MakeOwnedObject(GetDialog()); Add(SpeedCombo); SpeedCombo->GetItems()->Add(LoadStr(SPEED_UNLIMITED)); int32_t Speed = 1024; @@ -5421,7 +5421,7 @@ TCopyParamsContainer::TCopyParamsContainer(TFarDialog * ADialog, GetDialog()->SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(GetDialog()); + Separator = MakeOwnedObject(GetDialog()); Separator->SetPosition(FileMaskEdit->GetBottom() + 1); Separator->SetLeft(0); Add(Separator); @@ -5670,36 +5670,36 @@ TCopyDialog::TCopyDialog(TCustomFarPlugin * AFarPlugin, Prompt = FORMAT(PromptMsg, MinimizedName); } - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(Prompt); - DirectoryEdit = new TFarEdit(this); + DirectoryEdit = MakeOwnedObject(this); DirectoryEdit->SetHistory(ToRemote ? REMOTE_DIR_HISTORY : "Copy"); } - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_COPY_PARAM_GROUP)); - CopyParamLister = new TFarLister(this); + CopyParamLister = MakeOwnedObject(this); CopyParamLister->SetHeight(3); CopyParamLister->SetLeft(GetBorderBox()->GetLeft() + 1); CopyParamLister->SetTabStop(false); CopyParamLister->SetOnMouseClick(nb::bind(&TCopyDialog::CopyParamListerClick, this)); - new TFarSeparator(this); + MakeOwnedObject(this); if (FLAGCLEAR(FOptions, coTempTransfer)) { - NewerOnlyCheck = new TFarCheckBox(this); + NewerOnlyCheck = MakeOwnedObject(this); NewerOnlyCheck->SetCaption(GetMsg(NB_TRANSFER_NEWER_ONLY)); NewerOnlyCheck->SetEnabled(FLAGCLEAR(FOptions, coDisableNewerOnly)); - QueueCheck = new TFarCheckBox(this); + QueueCheck = MakeOwnedObject(this); QueueCheck->SetCaption(GetMsg(NB_TRANSFER_QUEUE)); SetNextItemPosition(ipRight); - QueueNoConfirmationCheck = new TFarCheckBox(this); + QueueNoConfirmationCheck = MakeOwnedObject(this); QueueNoConfirmationCheck->SetCaption(GetMsg(NB_TRANSFER_QUEUE_NO_CONFIRMATION)); QueueNoConfirmationCheck->SetEnabledDependency(QueueCheck); @@ -5710,12 +5710,12 @@ TCopyDialog::TCopyDialog(TCustomFarPlugin * AFarPlugin, DebugAssert(FLAGSET(FOptions, coDisableNewerOnly)); } - SaveSettingsCheck = new TFarCheckBox(this); + SaveSettingsCheck = MakeOwnedObject(this); SaveSettingsCheck->SetCaption(GetMsg(NB_TRANSFER_REUSE_SETTINGS)); - new TFarSeparator(this); + MakeOwnedObject(this); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_TRANSFER_SETTINGS_BUTTON)); Button->SetResult(-1); Button->SetCenterGroup(true); @@ -5723,7 +5723,7 @@ TCopyDialog::TCopyDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipRight); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_OK)); Button->SetDefault(true); Button->SetResult(brOK); @@ -5731,7 +5731,7 @@ TCopyDialog::TCopyDialog(TCustomFarPlugin * AFarPlugin, Button->SetEnabledDependency( ((Options & coTempTransfer) == 0) ? DirectoryEdit : nullptr); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_Cancel)); Button->SetResult(brCancel); Button->SetCenterGroup(true); @@ -5930,7 +5930,7 @@ bool TWinSCPPlugin::CopyParamCustomDialog(TCopyParamType & CopyParam, return CopyParamDialog(GetMsg(NB_COPY_PARAM_CUSTOM_TITLE), CopyParam, CopyParamAttrs); } -class TLinkDialog : TFarDialog +class TLinkDialog final : public TFarDialog { CUSTOM_MEM_ALLOCATION_IMPL public: @@ -5959,30 +5959,30 @@ TLinkDialog::TLinkDialog(TCustomFarPlugin * AFarPlugin, SetCaption(GetMsg(Edit ? NB_STRING_LINK_EDIT_CAPTION : NB_STRING_LINK_ADD_CAPTION)); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_STRING_LINK_FILE)); Text->SetEnabled(!Edit); - FileNameEdit = new TFarEdit(this); + FileNameEdit = MakeOwnedObject(this); FileNameEdit->SetEnabled(!Edit); FileNameEdit->SetHistory(LINK_FILENAME_HISTORY); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_STRING_LINK_POINT_TO)); - PointToEdit = new TFarEdit(this); + PointToEdit = MakeOwnedObject(this); PointToEdit->SetHistory(LINK_POINT_TO_HISTORY); - new TFarSeparator(this); + MakeOwnedObject(this); - SymbolicCheck = new TFarCheckBox(this); + SymbolicCheck = MakeOwnedObject(this); SymbolicCheck->SetCaption(GetMsg(NB_STRING_LINK_SYMLINK)); SymbolicCheck->SetEnabled(AllowSymbolic && !Edit); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetPosition(CRect.Bottom - 1); - OkButton = new TFarButton(this); + OkButton = MakeOwnedObject(this); OkButton->SetCaption(GetMsg(MSG_BUTTON_OK)); OkButton->SetDefault(true); OkButton->SetResult(brOK); @@ -5990,7 +5990,7 @@ TLinkDialog::TLinkDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipRight); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(MSG_BUTTON_Cancel)); Button->SetResult(brCancel); Button->SetCenterGroup(true); @@ -6036,7 +6036,7 @@ using TFeedFileSystemDataEvent = nb::FastDelegate3; class TLabelList; -class TFileSystemInfoDialog final : TTabbedDialog +class TFileSystemInfoDialog final : public TTabbedDialog { CUSTOM_MEM_ALLOCATION_IMPL public: @@ -6121,17 +6121,17 @@ TFileSystemInfoDialog::TFileSystemInfoDialog(TCustomFarPlugin * AFarPlugin, SetSize(TPoint(73, 22)); SetCaption(GetMsg(NB_SERVER_PROTOCOL_INFORMATION)); - TTabButton * Tab = new TTabButton(this); + TTabButton * Tab = MakeOwnedObject(this); Tab->SetTabName(GetMsg(NB_SERVER_PROTOCOL_TAB_PROTOCOL)); Tab->SetTab(tabProtocol); SetNextItemPosition(ipRight); - Tab = new TTabButton(this); + Tab = MakeOwnedObject(this); Tab->SetTabName(GetMsg(NB_SERVER_PROTOCOL_TAB_CAPABILITIES)); Tab->SetTab(tabCapabilities); - SpaceAvailableTab = new TTabButton(this); + SpaceAvailableTab = MakeOwnedObject(this); SpaceAvailableTab->SetTabName(GetMsg(NB_SERVER_PROTOCOL_TAB_SPACE_AVAILABLE)); SpaceAvailableTab->SetTab(tabSpaceAvailable); @@ -6140,33 +6140,33 @@ TFileSystemInfoDialog::TFileSystemInfoDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipNewLine); SetDefaultGroup(tabProtocol); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_SERVER_INFORMATION_GROUP)); const int32_t GroupTop = Separator->GetTop(); ServerLabels = CreateLabelArray(5); - new TFarSeparator(this); + MakeOwnedObject(this); - HostKeyFingerprintLabel = new TFarText(this); + HostKeyFingerprintLabel = MakeOwnedObject(this); HostKeyFingerprintLabel->SetCaption(GetMsg(NB_SERVER_HOST_KEY)); - HostKeyFingerprintEdit = new TFarEdit(this); + HostKeyFingerprintEdit = MakeOwnedObject(this); HostKeyFingerprintEdit->SetReadOnly(true); // Protocol tab SetDefaultGroup(tabCapabilities); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_PROTOCOL_INFORMATION_GROUP)); Separator->SetPosition(GroupTop); ProtocolLabels = CreateLabelArray(9); - InfoSeparator = new TFarSeparator(this); + InfoSeparator = MakeOwnedObject(this); InfoSeparator->SetCaption(GetMsg(NB_PROTOCOL_INFO_GROUP)); - InfoLister = new TFarLister(this); + InfoLister = MakeOwnedObject(this); InfoLister->SetHeight(4); InfoLister->SetLeft(GetBorderBox()->GetLeft() + 1); // Right edge is adjusted in FeedControls @@ -6175,26 +6175,26 @@ TFileSystemInfoDialog::TFileSystemInfoDialog(TCustomFarPlugin * AFarPlugin, SetDefaultGroup(tabSpaceAvailable); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_SPACE_AVAILABLE_GROUP)); Separator->SetPosition(GroupTop); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_SPACE_AVAILABLE_PATH)); SetNextItemPosition(ipRight); - SpaceAvailablePathEdit = new TFarEdit(this); + SpaceAvailablePathEdit = MakeOwnedObject(this); SpaceAvailablePathEdit->SetRight(-(nb::ToInt32(GetMsg(NB_SPACE_AVAILABLE_CHECK_SPACE).Length() + 11))); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_SPACE_AVAILABLE_CHECK_SPACE)); Button->SetEnabledDependency(SpaceAvailablePathEdit); Button->SetOnClick(nb::bind(&TFileSystemInfoDialog::SpaceAvailableButtonClick, this)); SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); SpaceAvailableLabels = CreateLabelArray(5); @@ -6202,17 +6202,17 @@ TFileSystemInfoDialog::TFileSystemInfoDialog(TCustomFarPlugin * AFarPlugin, SetDefaultGroup(0); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(GetClientRect().Bottom - 1); - Button = new TFarButton(this); + Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_SERVER_PROTOCOL_COPY_CLIPBOARD)); Button->SetOnClick(nb::bind(&TFileSystemInfoDialog::ClipboardButtonClick, this)); Button->SetCenterGroup(true); SetNextItemPosition(ipRight); - OkButton = new TFarButton(this); + OkButton = MakeOwnedObject(this); OkButton->SetCaption(GetMsg(MSG_BUTTON_OK)); OkButton->SetDefault(true); OkButton->SetResult(brOK); @@ -6231,7 +6231,7 @@ TLabelList * TFileSystemInfoDialog::CreateLabelArray(int32_t Count) std::unique_ptr List(std::make_unique()); for (int32_t Index = 0; Index < Count; ++Index) { - List->Add(new TFarText(this)); + List->Add(MakeOwnedObject(this)); } return List.release(); } @@ -6772,57 +6772,57 @@ TApplyCommandDialog::TApplyCommandDialog(TCustomFarPlugin * AFarPlugin) : SetSize(TPoint(76, 18)); SetCaption(GetMsg(NB_APPLY_COMMAND_TITLE)); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_APPLY_COMMAND_PROMPT)); - CommandEdit = new TFarEdit(this); + CommandEdit = MakeOwnedObject(this); CommandEdit->SetHistory(APPLY_COMMAND_HISTORY); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_APPLY_COMMAND_HINT1)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_APPLY_COMMAND_HINT2)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_APPLY_COMMAND_HINT3)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_APPLY_COMMAND_HINT4)); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_APPLY_COMMAND_HINT5)); - LocalHintText = new TFarText(this); + LocalHintText = MakeOwnedObject(this); LocalHintText->SetCaption(GetMsg(NB_APPLY_COMMAND_HINT_LOCAL)); - new TFarSeparator(this); + MakeOwnedObject(this); - RemoteCommandButton = new TFarRadioButton(this); + RemoteCommandButton = MakeOwnedObject(this); RemoteCommandButton->SetCaption(GetMsg(NB_APPLY_COMMAND_REMOTE_COMMAND)); SetNextItemPosition(ipRight); - LocalCommandButton = new TFarRadioButton(this); + LocalCommandButton = MakeOwnedObject(this); LocalCommandButton->SetCaption(GetMsg(NB_APPLY_COMMAND_LOCAL_COMMAND)); LocalHintText->SetEnabledDependency(LocalCommandButton); SetNextItemPosition(ipNewLine); - ApplyToDirectoriesCheck = new TFarCheckBox(this); + ApplyToDirectoriesCheck = MakeOwnedObject(this); ApplyToDirectoriesCheck->SetCaption( GetMsg(NB_APPLY_COMMAND_APPLY_TO_DIRECTORIES)); SetNextItemPosition(ipRight); - RecursiveCheck = new TFarCheckBox(this); + RecursiveCheck = MakeOwnedObject(this); RecursiveCheck->SetCaption(GetMsg(NB_APPLY_COMMAND_RECURSIVE)); SetNextItemPosition(ipNewLine); - ShowResultsCheck = new TFarCheckBox(this); + ShowResultsCheck = MakeOwnedObject(this); ShowResultsCheck->SetCaption(GetMsg(NB_APPLY_COMMAND_SHOW_RESULTS)); ShowResultsCheck->SetEnabledDependency(RemoteCommandButton); SetNextItemPosition(ipRight); - CopyResultsCheck = new TFarCheckBox(this); + CopyResultsCheck = MakeOwnedObject(this); CopyResultsCheck->SetCaption(GetMsg(NB_APPLY_COMMAND_COPY_RESULTS)); CopyResultsCheck->SetEnabledDependency(RemoteCommandButton); @@ -6961,100 +6961,100 @@ TFullSynchronizeDialog::TFullSynchronizeDialog( SetSize(TPoint(78, 25)); SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_TITLE)); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_LOCAL_LABEL)); - LocalDirectoryEdit = new TFarEdit(this); + LocalDirectoryEdit = MakeOwnedObject(this); LocalDirectoryEdit->SetHistory(LOCAL_SYNC_HISTORY); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_REMOTE_LABEL)); - RemoteDirectoryEdit = new TFarEdit(this); + RemoteDirectoryEdit = MakeOwnedObject(this); RemoteDirectoryEdit->SetHistory(REMOTE_SYNC_HISTORY); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_DIRECTION_GROUP)); - SynchronizeBothButton = new TFarRadioButton(this); + SynchronizeBothButton = MakeOwnedObject(this); SynchronizeBothButton->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_BOTH)); SetNextItemPosition(ipRight); - SynchronizeRemoteButton = new TFarRadioButton(this); + SynchronizeRemoteButton = MakeOwnedObject(this); SynchronizeRemoteButton->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_REMOTE)); - SynchronizeLocalButton = new TFarRadioButton(this); + SynchronizeLocalButton = MakeOwnedObject(this); SynchronizeLocalButton->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_LOCAL)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_MODE_GROUP)); - SynchronizeFilesButton = new TFarRadioButton(this); + SynchronizeFilesButton = MakeOwnedObject(this); SynchronizeFilesButton->SetCaption(GetMsg(NB_SYNCHRONIZE_SYNCHRONIZE_FILES)); SetNextItemPosition(ipRight); - MirrorFilesButton = new TFarRadioButton(this); + MirrorFilesButton = MakeOwnedObject(this); MirrorFilesButton->SetCaption(GetMsg(NB_SYNCHRONIZE_MIRROR_FILES)); - SynchronizeTimestampsButton = new TFarRadioButton(this); + SynchronizeTimestampsButton = MakeOwnedObject(this); SynchronizeTimestampsButton->SetCaption(GetMsg(NB_SYNCHRONIZE_SYNCHRONIZE_TIMESTAMPS)); SynchronizeTimestampsButton->SetEnabled(FLAGCLEAR(Options, fsoDisableTimestamp)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_GROUP)); - SynchronizeDeleteCheck = new TFarCheckBox(this); + SynchronizeDeleteCheck = MakeOwnedObject(this); SynchronizeDeleteCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_DELETE)); SetNextItemPosition(ipRight); - SynchronizeExistingOnlyCheck = new TFarCheckBox(this); + SynchronizeExistingOnlyCheck = MakeOwnedObject(this); SynchronizeExistingOnlyCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_EXISTING_ONLY)); SynchronizeExistingOnlyCheck->SetEnabledDependencyNegative(SynchronizeTimestampsButton); SetNextItemPosition(ipNewLine); - SynchronizePreviewChangesCheck = new TFarCheckBox(this); + SynchronizePreviewChangesCheck = MakeOwnedObject(this); SynchronizePreviewChangesCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_PREVIEW_CHANGES)); SetNextItemPosition(ipRight); - SynchronizeSelectedOnlyCheck = new TFarCheckBox(this); + SynchronizeSelectedOnlyCheck = MakeOwnedObject(this); SynchronizeSelectedOnlyCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_SELECTED_ONLY)); SynchronizeSelectedOnlyCheck->SetEnabled(FLAGSET(FOptions, fsoAllowSelectedOnly)); SetNextItemPosition(ipNewLine); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_FULL_SYNCHRONIZE_CRITERIONS_GROUP)); - SynchronizeByTimeCheck = new TFarCheckBox(this); + SynchronizeByTimeCheck = MakeOwnedObject(this); SynchronizeByTimeCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_BY_TIME)); SetNextItemPosition(ipRight); - SynchronizeBySizeCheck = new TFarCheckBox(this); + SynchronizeBySizeCheck = MakeOwnedObject(this); SynchronizeBySizeCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_BY_SIZE)); SynchronizeBySizeCheck->SetEnabledDependencyNegative(SynchronizeBothButton); SetNextItemPosition(ipNewLine); - new TFarSeparator(this); + MakeOwnedObject(this); - SaveSettingsCheck = new TFarCheckBox(this); + SaveSettingsCheck = MakeOwnedObject(this); SaveSettingsCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_REUSE_SETTINGS)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetGroup(1); Separator->SetCaption(GetMsg(NB_COPY_PARAM_GROUP)); - CopyParamLister = new TFarLister(this); + CopyParamLister = MakeOwnedObject(this); CopyParamLister->SetHeight(3); CopyParamLister->SetLeft(GetBorderBox()->GetLeft() + 1); CopyParamLister->SetTabStop(false); @@ -7063,10 +7063,10 @@ TFullSynchronizeDialog::TFullSynchronizeDialog( // Right edge is adjusted in Change // Align buttons with bottom of the window - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(-4); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_TRANSFER_SETTINGS_BUTTON)); Button->SetResult(-1); Button->SetCenterGroup(true); @@ -7383,9 +7383,9 @@ TSynchronizeChecklistDialog::TSynchronizeChecklistDialog( { SetCaption(GetMsg(NB_CHECKLIST_TITLE)); - Header = new TFarText(this); + Header = MakeOwnedObject(this); - ListBox = new TFarListBox(this); + ListBox = MakeOwnedObject(this); ListBox->SetNoBox(true); // align list with bottom of the window ListBox->SetBottom(-5); @@ -7400,23 +7400,23 @@ TSynchronizeChecklistDialog::TSynchronizeChecklistDialog( } // align buttons with bottom of the window - ButtonSeparator = new TFarSeparator(this); + ButtonSeparator = MakeOwnedObject(this); ButtonSeparator->SetTop(-4); ButtonSeparator->SetBottom(ButtonSeparator->GetTop()); - CheckAllButton = new TFarButton(this); + CheckAllButton = MakeOwnedObject(this); CheckAllButton->SetCaption(GetMsg(NB_CHECKLIST_CHECK_ALL)); CheckAllButton->SetCenterGroup(true); CheckAllButton->SetOnClick(nb::bind(&TSynchronizeChecklistDialog::CheckAllButtonClick, this)); SetNextItemPosition(ipRight); - UncheckAllButton = new TFarButton(this); + UncheckAllButton = MakeOwnedObject(this); UncheckAllButton->SetCaption(GetMsg(NB_CHECKLIST_UNCHECK_ALL)); UncheckAllButton->SetCenterGroup(true); UncheckAllButton->SetOnClick(nb::bind(&TSynchronizeChecklistDialog::CheckAllButtonClick, this)); - VideoModeButton = new TFarButton(this); + VideoModeButton = MakeOwnedObject(this); VideoModeButton->SetCenterGroup(true); VideoModeButton->SetOnClick(nb::bind(&TSynchronizeChecklistDialog::VideoModeButtonClick, this)); @@ -7929,7 +7929,7 @@ bool TWinSCPFileSystem::SynchronizeChecklistDialog( return Result; } -class TSynchronizeDialog : TFarDialog +class TSynchronizeDialog final : public TFarDialog { CUSTOM_MEM_ALLOCATION_IMPL public: @@ -8009,58 +8009,58 @@ TSynchronizeDialog::TSynchronizeDialog(TCustomFarPlugin * AFarPlugin, SetDefaultGroup(1); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_SYNCHRONIZE_LOCAL_LABEL)); - LocalDirectoryEdit = new TFarEdit(this); + LocalDirectoryEdit = MakeOwnedObject(this); LocalDirectoryEdit->SetHistory(LOCAL_SYNC_HISTORY); - Text = new TFarText(this); + Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_SYNCHRONIZE_REMOTE_LABEL)); - RemoteDirectoryEdit = new TFarEdit(this); + RemoteDirectoryEdit = MakeOwnedObject(this); RemoteDirectoryEdit->SetHistory(REMOTE_SYNC_HISTORY); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_SYNCHRONIZE_GROUP)); Separator->SetGroup(0); - SynchronizeDeleteCheck = new TFarCheckBox(this); + SynchronizeDeleteCheck = MakeOwnedObject(this); SynchronizeDeleteCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_DELETE)); SetNextItemPosition(ipRight); - SynchronizeExistingOnlyCheck = new TFarCheckBox(this); + SynchronizeExistingOnlyCheck = MakeOwnedObject(this); SynchronizeExistingOnlyCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_EXISTING_ONLY)); SetNextItemPosition(ipNewLine); - SynchronizeRecursiveCheck = new TFarCheckBox(this); + SynchronizeRecursiveCheck = MakeOwnedObject(this); SynchronizeRecursiveCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_RECURSIVE)); SetNextItemPosition(ipRight); - SynchronizeSelectedOnlyCheck = new TFarCheckBox(this); + SynchronizeSelectedOnlyCheck = MakeOwnedObject(this); SynchronizeSelectedOnlyCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_SELECTED_ONLY)); // have more complex enable rules SynchronizeSelectedOnlyCheck->SetGroup(0); SetNextItemPosition(ipNewLine); - SynchronizeSynchronizeCheck = new TFarCheckBox(this); + SynchronizeSynchronizeCheck = MakeOwnedObject(this); SynchronizeSynchronizeCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_SYNCHRONIZE)); SynchronizeSynchronizeCheck->SetAllowGrayed(true); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetGroup(0); - SaveSettingsCheck = new TFarCheckBox(this); + SaveSettingsCheck = MakeOwnedObject(this); SaveSettingsCheck->SetCaption(GetMsg(NB_SYNCHRONIZE_REUSE_SETTINGS)); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetCaption(GetMsg(NB_COPY_PARAM_GROUP)); - CopyParamLister = new TFarLister(this); + CopyParamLister = MakeOwnedObject(this); CopyParamLister->SetHeight(3); CopyParamLister->SetLeft(GetBorderBox()->GetLeft() + 1); CopyParamLister->SetTabStop(false); @@ -8070,10 +8070,10 @@ TSynchronizeDialog::TSynchronizeDialog(TCustomFarPlugin * AFarPlugin, SetDefaultGroup(0); // align buttons with bottom of the window - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->SetPosition(-4); - TFarButton * Button = new TFarButton(this); + TFarButton * Button = MakeOwnedObject(this); Button->SetCaption(GetMsg(NB_TRANSFER_SETTINGS_BUTTON)); Button->SetResult(-1); Button->SetCenterGroup(true); @@ -8081,20 +8081,20 @@ TSynchronizeDialog::TSynchronizeDialog(TCustomFarPlugin * AFarPlugin, SetNextItemPosition(ipRight); - StartButton = new TFarButton(this); + StartButton = MakeOwnedObject(this); StartButton->SetCaption(GetMsg(NB_SYNCHRONIZE_START_BUTTON)); StartButton->SetDefault(true); StartButton->SetCenterGroup(true); StartButton->SetOnClick(nb::bind(&TSynchronizeDialog::StartButtonClick, this)); - StopButton = new TFarButton(this); + StopButton = MakeOwnedObject(this); StopButton->SetCaption(GetMsg(NB_SYNCHRONIZE_STOP_BUTTON)); StopButton->SetCenterGroup(true); StopButton->SetOnClick(nb::bind(&TSynchronizeDialog::StopButtonClick, this)); SetNextItemPosition(ipRight); - CloseButton = new TFarButton(this); + CloseButton = MakeOwnedObject(this); CloseButton->SetCaption(GetMsg(MSG_BUTTON_CLOSE)); CloseButton->SetResult(brCancel); CloseButton->SetCenterGroup(true); @@ -8471,38 +8471,38 @@ TQueueDialog::TQueueDialog(gsl::not_null AFarPlugin, SetCaption(GetMsg(NB_QUEUE_TITLE)); - TFarText * Text = new TFarText(this); + TFarText * Text = MakeOwnedObject(this); Text->SetCaption(GetMsg(NB_QUEUE_HEADER)); - TFarSeparator * Separator = new TFarSeparator(this); + TFarSeparator * Separator = MakeOwnedObject(this); const int32_t ListTop = Separator->GetBottom(); - Separator = new TFarSeparator(this); + Separator = MakeOwnedObject(this); Separator->Move(0, ListHeight); - ExecuteButton = new TFarButton(this); + ExecuteButton = MakeOwnedObject(this); ExecuteButton->SetCaption(GetMsg(NB_QUEUE_EXECUTE)); ExecuteButton->SetOnClick(nb::bind(&TQueueDialog::OperationButtonClick, this)); ExecuteButton->SetCenterGroup(true); SetNextItemPosition(ipRight); - DeleteButton = new TFarButton(this); + DeleteButton = MakeOwnedObject(this); DeleteButton->SetCaption(GetMsg(NB_QUEUE_DELETE)); DeleteButton->SetOnClick(nb::bind(&TQueueDialog::OperationButtonClick, this)); DeleteButton->SetCenterGroup(true); - MoveUpButton = new TFarButton(this); + MoveUpButton = MakeOwnedObject(this); MoveUpButton->SetCaption(GetMsg(NB_QUEUE_MOVE_UP)); MoveUpButton->SetOnClick(nb::bind(&TQueueDialog::OperationButtonClick, this)); MoveUpButton->SetCenterGroup(true); - MoveDownButton = new TFarButton(this); + MoveDownButton = MakeOwnedObject(this); MoveDownButton->SetCaption(GetMsg(NB_QUEUE_MOVE_DOWN)); MoveDownButton->SetOnClick(nb::bind(&TQueueDialog::OperationButtonClick, this)); MoveDownButton->SetCenterGroup(true); - CloseButton = new TFarButton(this); + CloseButton = MakeOwnedObject(this); CloseButton->SetCaption(GetMsg(NB_QUEUE_CLOSE)); CloseButton->SetResult(brCancel); CloseButton->SetCenterGroup(true); @@ -8510,7 +8510,7 @@ TQueueDialog::TQueueDialog(gsl::not_null AFarPlugin, SetNextItemPosition(ipNewLine); - QueueListBox = new TFarListBox(this); + QueueListBox = MakeOwnedObject(this); QueueListBox->SetTop(ListTop + 1); QueueListBox->SetHeight(ListHeight); QueueListBox->SetNoBox(true); @@ -8955,22 +8955,22 @@ bool TWinSCPFileSystem::CreateDirectoryDialog(UnicodeString & Directory, Dialog->SetCaption(GetMsg(NB_CREATE_FOLDER_TITLE)); Dialog->SetSize(TPoint(66, 15)); - TFarText * Text = new TFarText(Dialog.get()); + TFarText * Text = MakeOwnedObject(Dialog.get()); Text->SetCaption(GetMsg(NB_CREATE_FOLDER_PROMPT)); - TFarEdit * DirectoryEdit = new TFarEdit(Dialog.get()); + TFarEdit * DirectoryEdit = MakeOwnedObject(Dialog.get()); DirectoryEdit->SetHistory(L"NewFolder"); - TFarSeparator * Separator = new TFarSeparator(Dialog.get()); + TFarSeparator * Separator = MakeOwnedObject(Dialog.get()); Separator->SetCaption(GetMsg(NB_CREATE_FOLDER_ATTRIBUTES)); - TFarCheckBox * SetRightsCheck = new TFarCheckBox(Dialog.get()); + TFarCheckBox * SetRightsCheck = MakeOwnedObject(Dialog.get()); SetRightsCheck->SetCaption(GetMsg(NB_CREATE_FOLDER_SET_RIGHTS)); TRightsContainer * RightsContainer = new TRightsContainer(Dialog.get(), false, true, true, SetRightsCheck); - TFarCheckBox * SaveSettingsCheck = new TFarCheckBox(Dialog.get()); + TFarCheckBox * SaveSettingsCheck = MakeOwnedObject(Dialog.get()); SaveSettingsCheck->SetCaption(GetMsg(NB_CREATE_FOLDER_REUSE_SETTINGS)); SaveSettingsCheck->Move(0, 6); diff --git a/src/core/Terminal.h b/src/core/Terminal.h index b64444f4a..88a5188c6 100644 --- a/src/core/Terminal.h +++ b/src/core/Terminal.h @@ -982,7 +982,7 @@ struct NB_CORE_EXPORT TMakeLocalFileListParams : public TObject bool Recursive{false}; }; -struct NB_CORE_EXPORT TSynchronizeOptions : public TObject +struct NB_CORE_EXPORT TSynchronizeOptions final : public TObject { NB_DISABLE_COPY(TSynchronizeOptions) public: From 1e6a18b0a94c99016b5934e2126fd727aaf6b1c6 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Mon, 19 Feb 2024 17:04:22 +0300 Subject: [PATCH 02/14] Fix SonarCloud warnings: Replace the use of "new" with an operation that automatically manages the memory --- src/base/Common.h | 17 +++---- src/core/FileOperationProgress.cpp | 76 +++++++++++++++--------------- src/core/FileOperationProgress.h | 4 +- 3 files changed, 49 insertions(+), 48 deletions(-) diff --git a/src/base/Common.h b/src/base/Common.h index 5bea22443..7c0e172e8 100644 --- a/src/base/Common.h +++ b/src/base/Common.h @@ -372,20 +372,21 @@ UnicodeString AssemblyAddRawSettings( // #include "Global.h" -template +template class TValueRestorer // : public TObject { - TValueRestorer() = delete; public: - inline explicit TValueRestorer(T & Target, const T & Value) : + TValueRestorer() = delete; + TValueRestorer(const TValueRestorer &) = delete; + TValueRestorer(T & Target) : FTarget(Target), - FValue(Value) + FValue(Target) { } - inline explicit TValueRestorer(T & Target) : + TValueRestorer(T & Target, const T & Value) : FTarget(Target), - FValue(Target) + FValue(Value) { } @@ -412,8 +413,8 @@ class TValueRestorer // : public TObject class TAutoNestingCounter : public TValueRestorer { using parent = TValueRestorer; - TAutoNestingCounter() = delete; public: + TAutoNestingCounter() = delete; inline explicit TAutoNestingCounter(int32_t & Target) : parent(Target) { @@ -430,8 +431,8 @@ class TAutoNestingCounter : public TValueRestorer class TAutoFlag : public TValueRestorer { using parent = TValueRestorer; - TAutoFlag() = default; public: + TAutoFlag() = default; explicit TAutoFlag(bool & Target) : parent(Target) { diff --git a/src/core/FileOperationProgress.cpp b/src/core/FileOperationProgress.cpp index 9b520a663..215613bac 100644 --- a/src/core/FileOperationProgress.cpp +++ b/src/core/FileOperationProgress.cpp @@ -78,31 +78,31 @@ TFileOperationProgressType::~TFileOperationProgressType() noexcept { DebugAssert(!GetInProgress() || FReset); DebugAssert(!GetSuspended() || FReset); - SAFE_DESTROY_EX(TCriticalSection, FSection); - SAFE_DESTROY_EX(TCriticalSection, FUserSelectionsSection); + // SAFE_DESTROY_EX(TCriticalSection, FSection); + // SAFE_DESTROY_EX(TCriticalSection, FUserSelectionsSection); } void TFileOperationProgressType::Init() { - FSection = new TCriticalSection(); - FUserSelectionsSection = new TCriticalSection(); + // FSection = new TCriticalSection(); + // FUserSelectionsSection = new TCriticalSection(); FRestored = false; FPersistence.Side = osCurrent; // = undefined value } void TFileOperationProgressType::Assign(const TFileOperationProgressType & Other) { - const TValueRestorer SectionRestorer(FSection); - const TValueRestorer UserSelectionsSectionRestorer(FUserSelectionsSection); - const TGuard Guard(*FSection); - const TGuard OtherGuard(*Other.FSection); + // const TValueRestorer SectionRestorer(&FSection); + // const TValueRestorer UserSelectionsSectionRestorer(&FUserSelectionsSection); + const TGuard Guard(FSection); + const TGuard OtherGuard(Other.FSection); *this = Other; } void TFileOperationProgressType::AssignButKeepSuspendState(const TFileOperationProgressType & Other) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); const TValueRestorer SuspendTimeRestorer(FSuspendTime); const TValueRestorer SuspendedRestorer(FSuspended); @@ -163,7 +163,7 @@ void TFileOperationProgressType::ClearTransfer() { if ((FTransferSize > 0) && (FTransferredSize < FTransferSize)) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); const int64_t RemainingSize = (FTransferSize - FTransferredSize); AddSkipped(RemainingSize); } @@ -188,7 +188,7 @@ void TFileOperationProgressType::Start(TFileOperation AOperation, { { - const TGuard Guard(*FSection); // not really needed, just for consistency + const TGuard Guard(FSection); // not really needed, just for consistency DoClear(!FRestored, (FPersistence.Side != osCurrent) && (FPersistence.Side != ASide)); FTotalTransferBase = FPersistence.TotalTransferred; FOperation = AOperation; @@ -239,7 +239,7 @@ void TFileOperationProgressType::Suspend() { { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); DebugAssert(!FSuspended); FSuspended = true; FSuspendTime = ::GetTickCount(); @@ -252,7 +252,7 @@ void TFileOperationProgressType::Resume() { { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); DebugAssert(FSuspended); FSuspended = false; @@ -300,7 +300,7 @@ int32_t TFileOperationProgressType::TransferProgress() const int32_t TFileOperationProgressType::TotalTransferProgress() const { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); DebugAssert(FTotalSizeSet); int32_t Result; if (FTotalSize > 0) @@ -506,7 +506,7 @@ int64_t TFileOperationProgressType::LocalBlockSize() void TFileOperationProgressType::SetTotalSize(int64_t ASize) { - const TGuard Guard(*FSection); // not really needed, just for consistency + const TGuard Guard(FSection); // not really needed, just for consistency FTotalSize = ASize; FTotalSizeSet = true; @@ -554,7 +554,7 @@ bool TFileOperationProgressType::PassCancelToParent(TCancelStatus ACancel) void TFileOperationProgressType::SetCancel(TCancelStatus ACancel) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); FCancel = ACancel; if ((FParent != nullptr) && PassCancelToParent(ACancel)) @@ -565,7 +565,7 @@ void TFileOperationProgressType::SetCancel(TCancelStatus ACancel) void TFileOperationProgressType::SetCancelAtLeast(TCancelStatus ACancel) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); if (FCancel < ACancel) { FCancel = ACancel; @@ -582,7 +582,7 @@ TCancelStatus TFileOperationProgressType::GetCancel() const TCancelStatus Result = FCancel; if (FParent != nullptr) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); const TCancelStatus ParentCancel = FParent->GetCancel(); if (ParentCancel > Result) { @@ -594,7 +594,7 @@ TCancelStatus TFileOperationProgressType::GetCancel() const bool TFileOperationProgressType::ClearCancelFile() { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); // Not propagated to parent, as this is local flag, see also PassCancelToParent const bool Result = (GetCancel() == csCancelFile); if (Result) @@ -613,7 +613,7 @@ uint64_t TFileOperationProgressType::GetCPSLimit() const } else { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); Result = FPersistence.CPSLimit; } return Result; @@ -627,7 +627,7 @@ void TFileOperationProgressType::SetCPSLimit(uint64_t ACPSLimit) } else { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); FPersistence.CPSLimit = ACPSLimit; } } @@ -641,7 +641,7 @@ TBatchOverwrite TFileOperationProgressType::GetBatchOverwrite() const } else { - const TGuard Guard(*FSection); // not really needed + const TGuard Guard(FSection); // not really needed Result = FPersistence.BatchOverwrite; } return Result; @@ -655,7 +655,7 @@ void TFileOperationProgressType::SetBatchOverwrite(TBatchOverwrite ABatchOverwri } else { - const TGuard Guard(*FSection); // not really needed + const TGuard Guard(FSection); // not really needed FPersistence.BatchOverwrite = ABatchOverwrite; } } @@ -669,7 +669,7 @@ bool TFileOperationProgressType::GetSkipToAll() const } else { - const TGuard Guard(*FSection); // not really needed + const TGuard Guard(FSection); // not really needed Result = FPersistence.SkipToAll; } return Result; @@ -683,7 +683,7 @@ void TFileOperationProgressType::SetSkipToAll() } else { - const TGuard Guard(*FSection); // not really needed + const TGuard Guard(FSection); // not really needed FPersistence.SkipToAll = true; } } @@ -702,7 +702,7 @@ void TFileOperationProgressType::ChangeTransferSize(int64_t ASize) void TFileOperationProgressType::RollbackTransferFromTotals(int64_t ATransferredSize, int64_t ASkippedSize) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); DebugAssert(ATransferredSize <= FPersistence.TotalTransferred - FTotalTransferBase); DebugAssert(ASkippedSize <= FTotalSkipped); @@ -729,7 +729,7 @@ void TFileOperationProgressType::RollbackTransfer() void TFileOperationProgressType::AddTransferredToTotals(int64_t ASize) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); FPersistence.TotalTransferred += ASize; if (ASize >= 0) @@ -764,7 +764,7 @@ void TFileOperationProgressType::AddTotalSize(int64_t ASize) { if (ASize != 0) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); FTotalSize += ASize; if (FParent != nullptr) @@ -798,7 +798,7 @@ void TFileOperationProgressType::AddTransferred(int64_t ASize, void TFileOperationProgressType::AddSkipped(int64_t ASize) { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); FTotalSkipped += ASize; @@ -864,7 +864,7 @@ TDateTime TFileOperationProgressType::TimeElapsed() const uint64_t TFileOperationProgressType::CPS() const { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); return nb::ToUInt64(GetCPS()); } @@ -922,7 +922,7 @@ TDateTime TFileOperationProgressType::TimeExpected() const TDateTime TFileOperationProgressType::TotalTimeLeft() const { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); DebugAssert(FTotalSizeSet); uint64_t CurCps = GetCPS(); // sanity check @@ -936,19 +936,19 @@ TDateTime TFileOperationProgressType::TotalTimeLeft() const int64_t TFileOperationProgressType::GetTotalTransferred() const { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); return FPersistence.TotalTransferred; } int64_t TFileOperationProgressType::GetOperationTransferred() const { - TGuard Guard(*FSection); + TGuard Guard(FSection); return FPersistence.TotalTransferred - FTotalTransferBase + FTotalSkipped; } int64_t TFileOperationProgressType::GetTotalSize() const { - const TGuard Guard(*FSection); + const TGuard Guard(FSection); return FTotalSize; } @@ -960,7 +960,7 @@ void TFileOperationProgressType::LockUserSelections() } else { - FUserSelectionsSection->Enter(); + FUserSelectionsSection.Enter(); } } @@ -972,7 +972,7 @@ void TFileOperationProgressType::UnlockUserSelections() } else { - FUserSelectionsSection->Leave(); + FUserSelectionsSection.Leave(); } } @@ -1011,13 +1011,13 @@ UnicodeString TFileOperationProgressType::GetLogStr(bool ADone) const void TFileOperationProgressType::Store(TPersistence & Persistence) { // in this current use, we do not need this to be guarded actually, as it's used only for a single-threaded synchronization - TGuard Guard(*FSection); + TGuard Guard(FSection); Persistence = FPersistence; } void TFileOperationProgressType::Restore(TPersistence & Persistence) { - TGuard Guard(*FSection); + TGuard Guard(FSection); FPersistence = Persistence; FRestored = true; } diff --git a/src/core/FileOperationProgress.h b/src/core/FileOperationProgress.h index 04fce7d48..ba26db476 100644 --- a/src/core/FileOperationProgress.h +++ b/src/core/FileOperationProgress.h @@ -112,8 +112,8 @@ class NB_CORE_EXPORT TFileOperationProgressType final : public TObject int64_t FRemainingCPS{0}; TOnceDoneOperation FInitialOnceDoneOperation{odoIdle}; TPersistence FPersistence{}; - TCriticalSection * FSection{nullptr}; - TCriticalSection * FUserSelectionsSection{nullptr}; + TCriticalSection FSection; + TCriticalSection FUserSelectionsSection; bool FCounterSet{false}; bool FSkipToAll{false}; From 7fd39991f452ee5fed2fb6c98c498354c4878672 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Mon, 19 Feb 2024 00:11:28 +0300 Subject: [PATCH 03/14] minor: code style --- src/base/Global.cpp | 2 +- src/core/Terminal.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base/Global.cpp b/src/base/Global.cpp index 95a3d4a80..eed4971f4 100644 --- a/src/base/Global.cpp +++ b/src/base/Global.cpp @@ -56,7 +56,7 @@ static HANDLE TraceFile = nullptr; bool IsTracing = false; const uint32_t CallstackTlsOff = static_cast(-1); uint32_t CallstackTls = CallstackTlsOff; -TCriticalSection *TracingCriticalSection = nullptr; +TCriticalSection * TracingCriticalSection = nullptr; bool TracingInMemory = false; HANDLE TracingThread = nullptr; diff --git a/src/core/Terminal.cpp b/src/core/Terminal.cpp index 14706f7c0..9cd0fe4f5 100644 --- a/src/core/Terminal.cpp +++ b/src/core/Terminal.cpp @@ -9537,7 +9537,7 @@ TTerminal * TTerminalList::CreateTerminal(TSessionData * Data) TTerminal * TTerminalList::NewTerminal(TSessionData * Data) { - TTerminal *Result = CreateTerminal(Data); + TTerminal * Result = CreateTerminal(Data); Add(Result); return Result; } From cfdfddcc07cecb98ef5983e7abf02e27afae1cb4 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Mon, 19 Feb 2024 16:15:16 +0300 Subject: [PATCH 04/14] Fix SonarCloud warnings: Make the type of this parameter a pointer-to-const. The current type of "Value" is "class TFarList *" --- src/NetBox/FarDialog.cpp | 2 +- src/NetBox/FarDialog.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NetBox/FarDialog.cpp b/src/NetBox/FarDialog.cpp index 5b93a627f..0ed62501c 100644 --- a/src/NetBox/FarDialog.cpp +++ b/src/NetBox/FarDialog.cpp @@ -2540,7 +2540,7 @@ void TFarListBox::SetItems(const TStrings * Value, bool OwnItems) FList->SetOwnsObjects(OwnItems); } -void TFarListBox::SetList(TFarList * Value, bool OwnItems) +void TFarListBox::SetList(const TFarList * Value, bool OwnItems) { SetItems(Value, OwnItems); } diff --git a/src/NetBox/FarDialog.h b/src/NetBox/FarDialog.h index 858521cc4..9d3cbc354 100644 --- a/src/NetBox/FarDialog.h +++ b/src/NetBox/FarDialog.h @@ -617,7 +617,7 @@ class TFarListBox : public TFarDialogItem void SetWrapMode(bool Value) { SetFlag(DIF_LISTWRAPMODE, Value); } TFarList * GetItems() const { return FList.get(); } TFarList * GetItems() { return FList.get(); } - void SetList(TFarList * Value, bool OwnItems = true); + void SetList(const TFarList * Value, bool OwnItems = true); TFarListBoxAutoSelect GetAutoSelect() const { return FAutoSelect; } void SetAutoSelect(TFarListBoxAutoSelect Value); From 41ca73e65119e0621ca3646553124f76e82f10d7 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Mon, 19 Feb 2024 16:17:22 +0300 Subject: [PATCH 05/14] Fix SonarCloud warnings: non-portable path to file --- src/NetBox/guid.h | 2 +- src/NetBox/vc_crt_fix_impl.cpp | 2 +- src/PluginSDK/Far3/plugin.hpp | 2 +- src/base/Common.cpp | 4 ++-- src/windows/Setup.cpp | 4 ++-- src/windows/Tools.cpp | 2 +- src/windows/Tools.h | 2 +- src/windows/WinApi.h | 2 +- src/windows/WinInterface.cpp | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/NetBox/guid.h b/src/NetBox/guid.h index a2971c4e7..948d1ba1a 100644 --- a/src/NetBox/guid.h +++ b/src/NetBox/guid.h @@ -1,7 +1,7 @@ #pragma once #define INITGUID -#include +#include #include DEFINE_GUID(NetBoxPluginGuid, 0x42e4aeb1, 0xa230, 0x44f4, 0xb3, 0x3c, 0xf1, 0x95, 0xbb, 0x65, 0x49, 0x31); diff --git a/src/NetBox/vc_crt_fix_impl.cpp b/src/NetBox/vc_crt_fix_impl.cpp index 047d0d741..6699836bf 100644 --- a/src/NetBox/vc_crt_fix_impl.cpp +++ b/src/NetBox/vc_crt_fix_impl.cpp @@ -33,7 +33,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -#include +#include #ifdef __clang__ #pragma clang diagnostic ignored "-Wmissing-prototypes" diff --git a/src/PluginSDK/Far3/plugin.hpp b/src/PluginSDK/Far3/plugin.hpp index 9448ab613..6c5a5570e 100644 --- a/src/PluginSDK/Far3/plugin.hpp +++ b/src/PluginSDK/Far3/plugin.hpp @@ -54,7 +54,7 @@ other possible license with no implications from the above license on them. #ifdef FAR_USE_INTERNALS #else // ELSE FAR_USE_INTERNALS #include -#include +#include #endif // END FAR_USE_INTERNALS #undef DefDlgProc diff --git a/src/base/Common.cpp b/src/base/Common.cpp index e7a7a2dce..2a24db82c 100644 --- a/src/base/Common.cpp +++ b/src/base/Common.cpp @@ -18,8 +18,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/src/windows/Setup.cpp b/src/windows/Setup.cpp index 044f45e03..8eb186414 100644 --- a/src/windows/Setup.cpp +++ b/src/windows/Setup.cpp @@ -7,8 +7,8 @@ #include #include -#include -#include +#include +#include #include #include #include diff --git a/src/windows/Tools.cpp b/src/windows/Tools.cpp index c26b61a60..a53c94c17 100644 --- a/src/windows/Tools.cpp +++ b/src/windows/Tools.cpp @@ -3,7 +3,7 @@ #pragma hdrstop // #include -#include +#include #include #include #define INITGUID diff --git a/src/windows/Tools.h b/src/windows/Tools.h index 941ca573b..b285c1b52 100644 --- a/src/windows/Tools.h +++ b/src/windows/Tools.h @@ -1,7 +1,7 @@ #pragma once -#include +#include #include // #include #include diff --git a/src/windows/WinApi.h b/src/windows/WinApi.h index 7866c1b18..3e3835f45 100644 --- a/src/windows/WinApi.h +++ b/src/windows/WinApi.h @@ -4,7 +4,7 @@ // For other API definitions, see also PasTools.pas -#include +#include typedef BOOL WINAPI (* ChangeWindowMessageFilterExProc)( HWND hwnd, UINT message, DWORD action, PCHANGEFILTERSTRUCT pChangeFilterStruct); diff --git a/src/windows/WinInterface.cpp b/src/windows/WinInterface.cpp index f8c3d5c14..e59dd8fe0 100644 --- a/src/windows/WinInterface.cpp +++ b/src/windows/WinInterface.cpp @@ -2,7 +2,7 @@ #include #pragma hdrstop -#include +#include #include #include From e1d032be79bb4159f83c296a10d9e8a13ade7d90 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:05:31 +0300 Subject: [PATCH 06/14] CMakeLists.txt: upd --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6aafdf62..8b693b9da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2492,7 +2492,7 @@ ucm_add_flags(CXX C /DDEBUG CONFIG RelWithDebInfo) ucm_add_linker_flags(MODULE STATIC SHARED EXE /LTCG CONFIG Release) ucm_add_linker_flags(MODULE SHARED ${NETBOX_DLL_LINK_FLAGS} /OPT:REF /OPT:ICF=6 /NXCOMPAT /DYNAMICBASE /MANIFEST:NO CONFIG Release) ucm_add_linker_flags(MODULE SHARED ${NETBOX_DLL_LINK_FLAGS} CONFIG Debug) -ucm_add_linker_flags(MODULE SHARED EXE /DEBUG CONFIG Debug) +ucm_add_linker_flags(MODULE SHARED EXE /DEBUG /MAP CONFIG Debug) ucm_add_linker_flags(MODULE SHARED EXE /DEBUG /INCREMENTAL:NO CONFIG RelWithDebInfo) #ucm_print_flags() #------------------------------------------------------------------------------- From 13486d1ddf9f4f15b630f1d065dc1d9f6f96755e Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:05:42 +0300 Subject: [PATCH 07/14] minor: code cleanup --- src/base/System.SyncObjs.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/base/System.SyncObjs.cpp b/src/base/System.SyncObjs.cpp index 5dceb39af..66ea31a06 100644 --- a/src/base/System.SyncObjs.cpp +++ b/src/base/System.SyncObjs.cpp @@ -39,15 +39,10 @@ void TCriticalSection::Leave() const --FAcquired; // DEBUG_PRINTF("FAcquired: %d", FAcquired); ::LeaveCriticalSection(&FSection); - if (FAcquired == 2) - { - TINYLOG_TRACE(g_tinylog) << repr("FAcquired: %d", FAcquired); - } } bool TCriticalSection::TryEnter() { - // return System.TryEnterCriticalSection(CriticalSection)<>0; return ::TryEnterCriticalSection(&FSection) != FALSE; } From 054802fdf1a108c886302a616a5295efd5a868c6 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:11:14 +0300 Subject: [PATCH 08/14] Fix SonarCloud warnings: Remove the "virtual" specifier --- src/NetBox/FarDialog.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NetBox/FarDialog.h b/src/NetBox/FarDialog.h index 9d3cbc354..e1382ed28 100644 --- a/src/NetBox/FarDialog.h +++ b/src/NetBox/FarDialog.h @@ -521,8 +521,8 @@ class TFarText final : public TFarDialogItem public: explicit TFarText(TFarDialog * ADialog) noexcept; - virtual UnicodeString GetCaption() const { return GetData(); } - virtual void SetCaption(const UnicodeString & Value) { SetData(Value); } + UnicodeString GetCaption() const { return GetData(); } + void SetCaption(const UnicodeString & Value) { SetData(Value); } virtual bool GetCenterGroup() const override { return TFarDialogItem::GetCenterGroup(); } virtual void SetCenterGroup(bool Value) override { TFarDialogItem::SetCenterGroup(Value); } From 83a5b9e251ab1e952cd1d6540be0de8e0fb1e7d0 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:12:56 +0300 Subject: [PATCH 09/14] Fix SonarCloud warnings: Make the type of this parameter a pointer-to-const. The current type of "Item" is "class TFarDialogItem *" --- src/NetBox/FarDialog.cpp | 4 ++-- src/NetBox/FarDialog.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NetBox/FarDialog.cpp b/src/NetBox/FarDialog.cpp index 0ed62501c..766927dc8 100644 --- a/src/NetBox/FarDialog.cpp +++ b/src/NetBox/FarDialog.cpp @@ -278,7 +278,7 @@ int32_t TFarDialog::GetItemCount() const return FItems->GetCount(); } -int32_t TFarDialog::GetItemIdx(TFarDialogItem * Item) const +int32_t TFarDialog::GetItemIdx(const TFarDialogItem * Item) const { if (!Item) return -1; @@ -814,7 +814,7 @@ void TFarDialog::Synchronize(TThreadMethod Method) reinterpret_cast(&FSynchronizeObjects), false, INFINITE); } -void TFarDialog::Close(TFarButton * Button) +void TFarDialog::Close(const TFarButton * Button) { DebugAssert(Button != nullptr); SendDlgMessage(DM_CLOSE, Button->GetItemIdx(), nullptr); diff --git a/src/NetBox/FarDialog.h b/src/NetBox/FarDialog.h index e1382ed28..1112bd4d0 100644 --- a/src/NetBox/FarDialog.h +++ b/src/NetBox/FarDialog.h @@ -74,7 +74,7 @@ class TFarDialog : public TObject TFarButton * GetDefaultButton() const { return FDefaultButton; } TFarBox * GetBorderBox() const { return FBorderBox; } // int32_t GetType(TFarDialogItem * Item) const; - int32_t GetItemIdx(TFarDialogItem * Item) const; + int32_t GetItemIdx(const TFarDialogItem * Item) const; TFarDialogItem * GetItem(int32_t Index) const; TFarDialogItem * GetControl(int32_t Index) const { return GetItem(Index); } int32_t GetItemCount() const; @@ -122,7 +122,7 @@ class TFarDialog : public TObject virtual void Idle(); void BreakSynchronize(); void Synchronize(TThreadMethod Method); - void Close(TFarButton * Button); + void Close(const TFarButton * Button); void ProcessGroup(int32_t Group, TFarProcessGroupEvent && Callback, void * Arg); void ShowItem(TFarDialogItem * Item, void * Arg); void EnableItem(TFarDialogItem * Item, void * Arg); From 915d8ed93dd6bdcc643a153d3b328b4773f727eb Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:15:58 +0300 Subject: [PATCH 10/14] Fix SonarCloud warnings: Make the type of this parameter a reference-to-const --- src/NetBox/FarPlugin.cpp | 2 +- src/NetBox/FarPlugin.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NetBox/FarPlugin.cpp b/src/NetBox/FarPlugin.cpp index bbca91509..0034bdb69 100644 --- a/src/NetBox/FarPlugin.cpp +++ b/src/NetBox/FarPlugin.cpp @@ -1893,7 +1893,7 @@ int32_t TCustomFarPlugin::GetFarVersion() const return FFarVersion; } -UnicodeString TCustomFarPlugin::FormatFarVersion(VersionInfo & Info) const +UnicodeString TCustomFarPlugin::FormatFarVersion(const VersionInfo & Info) const { return FORMAT("%d.%d.%d", Info.Major, Info.Minor, Info.Build); } diff --git a/src/NetBox/FarPlugin.h b/src/NetBox/FarPlugin.h index d9f30d571..e3f490468 100644 --- a/src/NetBox/FarPlugin.h +++ b/src/NetBox/FarPlugin.h @@ -179,7 +179,7 @@ class TCustomFarPlugin : public TObject void FarCopyToClipboard(const UnicodeString & Str); void FarCopyToClipboard(const TStrings * Strings); int32_t GetFarVersion() const; - UnicodeString FormatFarVersion(VersionInfo & Info) const; + UnicodeString FormatFarVersion(const VersionInfo & Info) const; UnicodeString GetTemporaryDir() const; intptr_t InputRecordToKey(const INPUT_RECORD * Rec); TFarEditorInfo * EditorInfo(); From d9099296352516e0b86031e72b75abc71403af92 Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:17:26 +0300 Subject: [PATCH 11/14] Fix SonarCloud warnings: A "constexpr" function should not be declared "inline" --- src/base/Property.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/base/Property.hpp b/src/base/Property.hpp index be029733f..80478537f 100644 --- a/src/base/Property.hpp +++ b/src/base/Property.hpp @@ -130,13 +130,13 @@ CUSTOM_MEM_ALLOCATION_IMPL // constexpr decltype(auto) operator*() const { return *_value; } constexpr T operator *() const { return *_value; } - friend bool constexpr inline operator ==(const ROProperty2 & lhs, const T & rhs) + friend bool constexpr operator ==(const ROProperty2 & lhs, const T & rhs) { DebugCheck(lhs._value); return *lhs._value == rhs; } - friend bool constexpr inline operator !=(ROProperty2 & lhs, const T & rhs) + friend bool constexpr operator !=(ROProperty2 & lhs, const T & rhs) { DebugCheck(lhs._value); return *lhs._value != rhs; @@ -240,13 +240,13 @@ using ValueType = std::conditional_t, T, const T return *this; } - friend bool constexpr inline operator ==(const RWProperty2 & lhs, ValueType rhs) + friend bool constexpr operator ==(const RWProperty2 & lhs, ValueType rhs) { DebugCheck(lhs._value); return *lhs._value == rhs; } - friend bool constexpr inline operator !=(RWProperty2 & lhs, ValueType rhs) + friend bool constexpr operator !=(RWProperty2 & lhs, ValueType rhs) { DebugCheck(lhs._value); return *lhs._value != rhs; @@ -311,13 +311,13 @@ using TSetter = fastdelegate::FastDelegate1; return *this; } - friend bool constexpr inline operator ==(const RWPropertySimple & lhs, ValueType rhs) + friend bool constexpr operator ==(const RWPropertySimple & lhs, ValueType rhs) { DebugCheck(lhs._value); return *lhs._value == rhs; } - friend bool constexpr inline operator !=(const RWPropertySimple & lhs, ValueType rhs) + friend bool constexpr operator !=(const RWPropertySimple & lhs, ValueType rhs) { DebugCheck(lhs._value); return *lhs._value != rhs; From 5ceb8f1b5cd3fe486558408307b2dda90a54c68d Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:18:44 +0300 Subject: [PATCH 12/14] Fix SonarCloud warnings: A "constexpr" function should not be declared "inline" --- src/include/nbglobals.h | 8 +++--- src/include/nbsystem.h | 62 ++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/include/nbglobals.h b/src/include/nbglobals.h index 51b6f9c4b..afd6ae9d6 100644 --- a/src/include/nbglobals.h +++ b/src/include/nbglobals.h @@ -380,16 +380,16 @@ public: \ Class & operator =(const Class &) = delete; template -inline constexpr void used(const T1 &) {} +constexpr void used(const T1 &) {} template -inline constexpr void unused(const T1 &) {} +constexpr void unused(const T1 &) {} template -inline constexpr void ignore(const T1 &) {} +constexpr void ignore(const T1 &) {} template -inline constexpr void ignore_result(const T &) {} +constexpr void ignore_result(const T &) {} template struct add_const diff --git a/src/include/nbsystem.h b/src/include/nbsystem.h index 747254ed0..40894b8e6 100644 --- a/src/include/nbsystem.h +++ b/src/include/nbsystem.h @@ -22,113 +22,113 @@ template using map_t = std::map -inline constexpr T Min(const T a, const T b) { return a < b ? a : b; } +constexpr T Min(const T a, const T b) { return a < b ? a : b; } template -inline constexpr T Max(const T a, const T b) { return a > b ? a : b; } +constexpr T Max(const T a, const T b) { return a > b ? a : b; } template -inline constexpr T Round(const T a, const T b) { return a / b + (a % b * 2 > b ? 1 : 0); } +constexpr T Round(const T a, const T b) { return a / b + (a % b * 2 > b ? 1 : 0); } template -inline constexpr double ToDouble(const T a) { return static_cast(a); } +constexpr double ToDouble(const T a) { return static_cast(a); } template -inline constexpr Word ToWord(const T a) { return static_cast(a); } +constexpr Word ToWord(const T a) { return static_cast(a); } template -inline constexpr DWORD ToDWord(const T a) { return static_cast(a); } +constexpr DWORD ToDWord(const T a) { return static_cast(a); } template -inline constexpr std::enable_if_t, intptr_t> +constexpr std::enable_if_t, intptr_t> ToIntPtr(T a) { return static_cast(a); } template -inline constexpr std::enable_if_t, int32_t> +constexpr std::enable_if_t, int32_t> ToIntPtr(T a) { return static_cast(a); } template -inline constexpr std::enable_if_t, intptr_t> +constexpr std::enable_if_t, intptr_t> ToIntPtr(T a) { return reinterpret_cast(a); } template -inline constexpr typename std::enable_if::value, intptr_t>::type +constexpr typename std::enable_if::value, intptr_t>::type ToIntPtr(T a) { return static_cast(a); } template -inline constexpr typename std::is_convertible::value +constexpr typename std::is_convertible::value ToUIntPtr(T a) { return static_cast(a); } template -inline constexpr typename std::enable_if::value, uintptr_t>::type +constexpr typename std::enable_if::value, uintptr_t>::type ToUIntPtr(T a) { return static_cast(a); } template -inline constexpr typename std::enable_if::value, uintptr_t>::type +constexpr typename std::enable_if::value, uintptr_t>::type ToUIntPtr(T a) { return reinterpret_cast(a); } template -inline constexpr typename std::enable_if::value, uintptr_t>::type +constexpr typename std::enable_if::value, uintptr_t>::type ToUIntPtr(T a) { return static_cast(a); } template -inline constexpr typename std::enable_if= sizeof(uintptr_t), uintptr_t>::value +constexpr typename std::enable_if= sizeof(uintptr_t), uintptr_t>::value ToUIntPtr(T a) { return static_cast(a); } -inline constexpr uintptr_t +constexpr uintptr_t ToUIntPtr(int64_t a) { return static_cast(a); } template -inline constexpr typename std::enable_if::value, int32_t>::type +constexpr typename std::enable_if::value, int32_t>::type ToInt32(T a) { return static_cast(a); } -inline constexpr int32_t +constexpr int32_t ToInt32(int64_t a) { return static_cast(a); } template -inline constexpr int32_t +constexpr int32_t ToInt(T a) { return static_cast(a); } template -inline constexpr typename std::is_convertible::value +constexpr typename std::is_convertible::value ToUInt32(T a) { return static_cast(a); } template -inline constexpr uint32_t +constexpr uint32_t ToUInt32(T a) { return static_cast(a); } template -inline constexpr typename std::is_convertible::value +constexpr typename std::is_convertible::value ToInt64(T a) { return static_cast(a); } template -inline constexpr int64_t +constexpr int64_t ToInt64(T a) { return static_cast(a); } template -inline constexpr uint64_t +constexpr uint64_t ToUInt64(T a) { return static_cast(a); } template -inline constexpr uint16_t +constexpr uint16_t ToUInt16(T a) { return static_cast(a); } template -inline constexpr typename std::is_convertible::value +constexpr typename std::is_convertible::value ToPtr(T a) { return const_cast(a); } template -inline constexpr void * ToPtr(T a) { return reinterpret_cast((intptr_t)(a)); } +constexpr void * ToPtr(T a) { return reinterpret_cast((intptr_t)(a)); } -inline constexpr int8_t * +constexpr int8_t * ToInt8Ptr(void * a) { return static_cast(a); } -inline constexpr const int8_t * +constexpr const int8_t * ToInt8Ptr(const void * a) { return static_cast(a); } -inline constexpr uint8_t * +constexpr uint8_t * ToUInt8Ptr(void * a) { return static_cast(a); } -inline constexpr const uint8_t * +constexpr const uint8_t * ToUInt8Ptr(const void * a) { return static_cast(a); } // MakeOtherType::Type gives an other type corresponding to integer type T. From db424cbfedbd24597459c773d668d8dd27d02d5c Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Tue, 20 Feb 2024 21:24:53 +0300 Subject: [PATCH 13/14] bump version to 24.2.2.590 --- .github/workflows/release.yml | 2 +- ChangeLog | 16 +++------------- src/NetBox/NetBox.rc | 4 ++-- src/NetBox/plugin_version.hpp | 4 ++-- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 371125412..46727f239 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -114,7 +114,7 @@ jobs: - name: Create release shell: bash run: | - gh release create v${{ env.version }} --draft --title "NetBox ${{ env.version_short }}" FarNetBox/* + gh release create v${{ env.version_short }} --draft --title "NetBox ${{ env.version_short }}" FarNetBox/* env: # GITHUB_TOKEN: ${{ secrets.NETBOX_GITHUB_TOKEN }} GH_TOKEN: ${{ github.token }} diff --git a/ChangeLog b/ChangeLog index 20843fd5b..7dd075b1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,16 +5,15 @@ ## [Unreleased] - ReleaseDate -## [24.2.1.589] - 2024-02-19 +## [24.2.2.590] - 2024-02-20 ### Changes - Upgrade WinSCP sources: WinSCP 6.3.0 + - Upgrade dependencies: expat 2.6.0 ### Fixes - - gh-377 No Such File or Directory - Thanks to ssvine https://github.com/ssvine - gh-375 Fix: Many exceptions are not shown - gh-373 Fix russian translation @@ -33,16 +32,7 @@ Thanks to ssvine https://github.com/ssvine - gh-347 Fix the width of dialogs - gh-346 Fix russian translation - -## [24.2.1.583] - 2024-02-07 - - -### Changes - - - Upgrade dependencies: expat 2.6.0 - -### Fixes - + - gh-377 No Such File or Directory - gh-333 Build script fails to collate the finished files - Create Directory: fix position cursor on newly created dir https://forum.farmanager.com/viewtopic.php?p=177192#p177192 diff --git a/src/NetBox/NetBox.rc b/src/NetBox/NetBox.rc index f7ae27d10..a80908896 100644 --- a/src/NetBox/NetBox.rc +++ b/src/NetBox/NetBox.rc @@ -12,13 +12,13 @@ FILETYPE 0x2 { VALUE "CompanyName", "Mikhail Lukashov\0" VALUE "FileDescription", "NetBox: SFTP/FTP/FTPS/SCP/WebDAV/S3 client for Far Manager 3.0\0" - VALUE "FileVersion", "24.2.1.589\0" + VALUE "FileVersion", "24.2.2.590\0" VALUE "InternalName", "FarNetBox\0" VALUE "LegalCopyright", "(c) 2011, 2024 Mikhail Lukashov\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "NetBox.dll\0" VALUE "ProductName", "NetBox\0" - VALUE "ProductVersion", "24.2.1.589\0" + VALUE "ProductVersion", "24.2.2.590\0" VALUE "ReleaseType", "beta\0" VALUE "WWW", "https://github.com/michaellukashov/Far-NetBox\0" } diff --git a/src/NetBox/plugin_version.hpp b/src/NetBox/plugin_version.hpp index ae0421e79..43eefa87d 100644 --- a/src/NetBox/plugin_version.hpp +++ b/src/NetBox/plugin_version.hpp @@ -6,5 +6,5 @@ #define NETBOX_VERSION_MAJOR 24 #define NETBOX_VERSION_MINOR 2 -#define NETBOX_VERSION_PATCH 1 -#define NETBOX_VERSION_BUILD 589 +#define NETBOX_VERSION_PATCH 2 +#define NETBOX_VERSION_BUILD 590 From 451f629760c24de4520edf590e57b11dce6ca98b Mon Sep 17 00:00:00 2001 From: Mikhail Lukashov Date: Wed, 21 Feb 2024 06:18:00 +0300 Subject: [PATCH 14/14] cleanup --- src/resource/Application.ico | Bin 169063 -> 0 bytes src/resource/Site.ico | Bin 37422 -> 0 bytes src/resource/SiteFolder.ico | Bin 37422 -> 0 bytes src/resource/UpdatesRootCA.pem | 22 ---------------------- src/resource/Workspace.ico | Bin 37422 -> 0 bytes 5 files changed, 22 deletions(-) delete mode 100644 src/resource/Application.ico delete mode 100644 src/resource/Site.ico delete mode 100644 src/resource/SiteFolder.ico delete mode 100644 src/resource/UpdatesRootCA.pem delete mode 100644 src/resource/Workspace.ico diff --git a/src/resource/Application.ico b/src/resource/Application.ico deleted file mode 100644 index 1ad1c461f72d289e8deb962e8b2026d7036432de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169063 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 N3WR$DC7*Z>`fu$|t4#m^ diff --git a/src/resource/Site.ico b/src/resource/Site.ico deleted file mode 100644 index 91ef8814df74b7624fda131c1e9ac9c16de72c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37422 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 diff --git a/src/resource/SiteFolder.ico b/src/resource/SiteFolder.ico deleted file mode 100644 index bda16c800747bb715f1c6063d35c7930fb7ce027..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37422 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 diff --git a/src/resource/UpdatesRootCA.pem b/src/resource/UpdatesRootCA.pem deleted file mode 100644 index 3188acc7d..000000000 --- a/src/resource/UpdatesRootCA.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- diff --git a/src/resource/Workspace.ico b/src/resource/Workspace.ico deleted file mode 100644 index 80f43a17c730a7897db4ec95258108626433e864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37422 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