1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00
Files
winscp/source/forms/ImportSessions.cpp
Martin Prikryl 0b4c19ead3 5.2.4
2018-01-11 15:31:27 +01:00

211 lines
7.1 KiB
C++

//---------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <Common.h>
#include "ImportSessions.h"
#include <Configuration.h>
#include <CoreMain.h>
#include <VCLCommon.h>
#include <WinInterface.h>
#include <TextsWin.h>
#include <CoreMain.h>
//---------------------------------------------------------------------
#ifndef NO_RESOURCES
#pragma resource "*.dfm"
#endif
//---------------------------------------------------------------------
bool __fastcall DoImportSessionsDialog()
{
std::auto_ptr<TStoredSessionList> PuttyImportSessionList(
GUIConfiguration->SelectPuttySessionsForImport(StoredSessions));
std::auto_ptr<TStoredSessionList> FilezillaImportSessionList(
GUIConfiguration->SelectFilezillaSessionsForImport(StoredSessions));
std::auto_ptr<TList> SessionListsList(new TList());
SessionListsList->Add(PuttyImportSessionList.get());
SessionListsList->Add(FilezillaImportSessionList.get());
bool ImportKeys = true;
std::auto_ptr<TImportSessionsDialog> ImportSessionsDialog(
new TImportSessionsDialog(Application, SessionListsList.get()));
bool Result = ImportSessionsDialog->Execute(ImportKeys);
if (Result)
{
StoredSessions->Import(PuttyImportSessionList.get(), true);
StoredSessions->Import(FilezillaImportSessionList.get(), true);
if (ImportKeys)
{
UnicodeString TargetKey = Configuration->RegistryStorageKey + L"\\" + Configuration->SshHostKeysSubKey;
UnicodeString SourceKey = Configuration->PuttyRegistryStorageKey + L"\\" + Configuration->SshHostKeysSubKey;
TStoredSessionList::ImportHostKeys(TargetKey, SourceKey, PuttyImportSessionList.get(), true);
// Filezilla uses PuTTY's host key store
TStoredSessionList::ImportHostKeys(TargetKey, SourceKey, FilezillaImportSessionList.get(), true);
}
}
return Result;
}
//---------------------------------------------------------------------
__fastcall TImportSessionsDialog::TImportSessionsDialog(TComponent * AOwner,
TList * SessionListsList)
: TForm(AOwner)
{
UseSystemSettings(this);
// this is loaded from res string to force translation
Caption = LoadStr(IMPORT_CAPTION);
for (int Index = 0; Index < SessionListsList->Count; Index++)
{
SourceComboBox->Items->Objects[Index] = static_cast<TObject *>(SessionListsList->Items[Index]);
if ((SourceComboBox->ItemIndex < 0) && (GetSessionList(Index)->Count > 0))
{
SourceComboBox->ItemIndex = Index;
}
}
// should not happen as we never get here when there are no session to import
if (SourceComboBox->ItemIndex < 0)
{
SourceComboBox->ItemIndex = 0;
}
LoadSessions();
}
//---------------------------------------------------------------------
TStoredSessionList * __fastcall TImportSessionsDialog::GetSessionList(int Index)
{
return dynamic_cast<TStoredSessionList *>(SourceComboBox->Items->Objects[Index]);
}
//---------------------------------------------------------------------
void __fastcall TImportSessionsDialog::UpdateControls()
{
EnableControl(OKButton, ListViewAnyChecked(SessionListView2));
bool AnySshChecked = false;
for (int Index = 0; Index < SessionListView2->Items->Count; Index++)
{
TListItem * Item = SessionListView2->Items->Item[Index];
TSessionData * Data = (TSessionData*)Item->Data;
if (Item->Checked && Data->UsesSsh)
{
AnySshChecked = true;
break;
}
}
EnableControl(ImportKeysCheck, AnySshChecked);
EnableControl(CheckAllButton, SessionListView2->Items->Count > 0);
AdjustListColumnsWidth(SessionListView2);
}
//---------------------------------------------------------------------
void __fastcall TImportSessionsDialog::ClearSelections()
{
for (int Index = 0; Index < SourceComboBox->Items->Count; Index++)
{
TStoredSessionList * SessionList = GetSessionList(Index);
for (int Index = 0; Index < SessionList->Count; Index++)
{
SessionList->Sessions[Index]->Selected = false;
}
}
}
//---------------------------------------------------------------------
void __fastcall TImportSessionsDialog::SaveSelection()
{
for (int Index = 0; Index < SessionListView2->Items->Count; Index++)
{
((TSessionData*)SessionListView2->Items->Item[Index]->Data)->Selected =
SessionListView2->Items->Item[Index]->Checked;
}
}
//---------------------------------------------------------------------
void __fastcall TImportSessionsDialog::LoadSessions()
{
SessionListView2->Items->BeginUpdate();
try
{
SessionListView2->Items->Clear();
TStoredSessionList * SessionList = GetSessionList(SourceComboBox->ItemIndex);
for (int Index = 0; Index < SessionList->Count; Index++)
{
TSessionData * Session = SessionList->Sessions[Index];
TListItem * Item = SessionListView2->Items->Add();
Item->Data = Session;
Item->Caption = Session->Name;
Item->Checked = Session->Selected;
}
}
__finally
{
SessionListView2->Items->EndUpdate();
}
UpdateControls();
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::SessionListView2InfoTip(
TObject * /*Sender*/, TListItem * Item, UnicodeString & InfoTip)
{
InfoTip = ((TSessionData*)Item->Data)->InfoTip;
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::SessionListView2MouseDown(
TObject * /*Sender*/, TMouseButton /*Button*/, TShiftState /*Shift*/,
int /*X*/, int /*Y*/)
{
UpdateControls();
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::SessionListView2KeyUp(
TObject * /*Sender*/, WORD & /*Key*/, TShiftState /*Shift*/)
{
UpdateControls();
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::FormShow(TObject * /*Sender*/)
{
UpdateControls();
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::CheckAllButtonClick(TObject * /*Sender*/)
{
ListViewCheckAll(SessionListView2, caToggle);
UpdateControls();
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::HelpButtonClick(TObject * /*Sender*/)
{
FormHelp(this);
}
//---------------------------------------------------------------------------
bool __fastcall TImportSessionsDialog::Execute(bool & ImportKeys)
{
ImportKeysCheck->Checked = ImportKeys;
bool Result = (ShowModal() == DefaultResult(this));
if (Result)
{
ClearSelections();
SaveSelection();
ImportKeys = ImportKeysCheck->Enabled && ImportKeysCheck->Checked;
}
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TImportSessionsDialog::SourceComboBoxSelect(TObject * /*Sender*/)
{
SaveSelection();
LoadSessions();
}
//---------------------------------------------------------------------------