ImportSessions.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. //---------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include <Common.h>
  5. #include "ImportSessions.h"
  6. #include <Configuration.h>
  7. #include <CoreMain.h>
  8. #include <VCLCommon.h>
  9. #include <WinInterface.h>
  10. //---------------------------------------------------------------------
  11. #ifndef NO_RESOURCES
  12. #pragma resource "*.dfm"
  13. #endif
  14. //---------------------------------------------------------------------
  15. Boolean __fastcall DoImportSessionsDialog(TStoredSessionList *SessionList)
  16. {
  17. Boolean Result;
  18. TImportSessionsDialog *ImportSessionsDialog;
  19. TStoredSessionList *ImportSessionList;
  20. try {
  21. ImportSessionsDialog = new TImportSessionsDialog(Application);
  22. ImportSessionList = new TStoredSessionList(true);
  23. ImportSessionList->DefaultSettings = SessionList->DefaultSettings;
  24. TRegistryStorage * Storage = new TRegistryStorage(Configuration->PuttySessionsKey);
  25. try
  26. {
  27. Storage->ForceAnsi = true;
  28. if (Storage->OpenRootKey(false))
  29. {
  30. ImportSessionList->Load(Storage, false, true);
  31. }
  32. }
  33. __finally
  34. {
  35. delete Storage;
  36. }
  37. TSessionData * PuttySession =
  38. (TSessionData *)ImportSessionList->FindByName(GUIConfiguration->PuttySession);
  39. if (PuttySession != NULL)
  40. {
  41. ImportSessionList->Remove(PuttySession);
  42. }
  43. ImportSessionList->SelectSessionsToImport(SessionList, True);
  44. ImportSessionsDialog->SessionList = ImportSessionList;
  45. Result = (ImportSessionsDialog->ShowModal() == mrOk);
  46. if (Result)
  47. {
  48. SessionList->Import(ImportSessionsDialog->SessionList, True);
  49. if (ImportSessionsDialog->ImportKeys)
  50. {
  51. TStoredSessionList::ImportHostKeys(
  52. Configuration->RegistryStorageKey + L"\\" + Configuration->SshHostKeysSubKey,
  53. Configuration->PuttyRegistryStorageKey + L"\\" + Configuration->SshHostKeysSubKey,
  54. ImportSessionsDialog->SessionList, true);
  55. }
  56. }
  57. } __finally {
  58. delete ImportSessionsDialog;
  59. delete ImportSessionList;
  60. }
  61. return Result;
  62. }
  63. //---------------------------------------------------------------------
  64. __fastcall TImportSessionsDialog::TImportSessionsDialog(TComponent* AOwner)
  65. : TForm(AOwner)
  66. {
  67. UseSystemSettings(this);
  68. }
  69. //---------------------------------------------------------------------
  70. void __fastcall TImportSessionsDialog::UpdateControls()
  71. {
  72. bool AnyChecked = ListViewAnyChecked(SessionListView);
  73. EnableControl(OKButton, AnyChecked);
  74. EnableControl(ImportKeysCheck, AnyChecked);
  75. EnableControl(CheckAllButton, SessionListView->Items->Count > 0);
  76. AdjustListColumnsWidth(SessionListView);
  77. }
  78. //---------------------------------------------------------------------
  79. void __fastcall TImportSessionsDialog::SetSessionList(TStoredSessionList *value)
  80. {
  81. if (FSessionList != value)
  82. {
  83. FSessionList = value;
  84. LoadSessions();
  85. }
  86. }
  87. //---------------------------------------------------------------------
  88. void __fastcall TImportSessionsDialog::LoadSessions()
  89. {
  90. SessionListView->Items->BeginUpdate();
  91. try {
  92. SessionListView->Items->Clear();
  93. if (FSessionList)
  94. for (int Index = 0; Index < FSessionList->Count; Index++)
  95. {
  96. TListItem *Item;
  97. TSessionData *Session =
  98. (TSessionData*)FSessionList->AtObject(Index);
  99. Item = SessionListView->Items->Add();
  100. Item->Data = Session;
  101. Item->Caption = Session->Name;
  102. Item->SubItems->Add(Session->ProtocolStr);
  103. Item->Checked = Session->Selected;
  104. }
  105. } __finally {
  106. SessionListView->Items->EndUpdate();
  107. }
  108. UpdateControls();
  109. }
  110. //---------------------------------------------------------------------------
  111. void __fastcall TImportSessionsDialog::FormClose(TObject * /*Sender*/,
  112. TCloseAction & /*Action*/)
  113. {
  114. for (Integer Index = 0; Index < SessionListView->Items->Count; Index++)
  115. ((TSessionData*)SessionListView->Items->Item[Index]->Data)->Selected =
  116. SessionListView->Items->Item[Index]->Checked;
  117. }
  118. //---------------------------------------------------------------------------
  119. void __fastcall TImportSessionsDialog::SessionListViewInfoTip(
  120. TObject * /*Sender*/, TListItem * Item, UnicodeString & InfoTip)
  121. {
  122. InfoTip = ((TSessionData*)Item->Data)->InfoTip;
  123. }
  124. //---------------------------------------------------------------------------
  125. void __fastcall TImportSessionsDialog::SessionListViewMouseDown(
  126. TObject * /*Sender*/, TMouseButton /*Button*/, TShiftState /*Shift*/,
  127. int /*X*/, int /*Y*/)
  128. {
  129. UpdateControls();
  130. }
  131. //---------------------------------------------------------------------------
  132. void __fastcall TImportSessionsDialog::SessionListViewKeyUp(
  133. TObject * /*Sender*/, WORD & /*Key*/, TShiftState /*Shift*/)
  134. {
  135. UpdateControls();
  136. }
  137. //---------------------------------------------------------------------------
  138. void __fastcall TImportSessionsDialog::FormShow(TObject * /*Sender*/)
  139. {
  140. UpdateControls();
  141. }
  142. //---------------------------------------------------------------------------
  143. void __fastcall TImportSessionsDialog::CheckAllButtonClick(TObject * /*Sender*/)
  144. {
  145. ListViewCheckAll(SessionListView, caToggle);
  146. UpdateControls();
  147. }
  148. //---------------------------------------------------------------------------
  149. bool __fastcall TImportSessionsDialog::GetImportKeys()
  150. {
  151. return ImportKeysCheck->Checked;
  152. }
  153. //---------------------------------------------------------------------------
  154. void __fastcall TImportSessionsDialog::HelpButtonClick(TObject * /*Sender*/)
  155. {
  156. FormHelp(this);
  157. }
  158. //---------------------------------------------------------------------------