TerminalManager.h 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. //---------------------------------------------------------------------------
  2. #ifndef TerminalManagerH
  3. #define TerminalManagerH
  4. //---------------------------------------------------------------------------
  5. #include <Terminal.h>
  6. #include <Queue.h>
  7. #include <FileOperationProgress.h>
  8. #include <WinInterface.h>
  9. #include <Vcl.AppEvnts.hpp>
  10. //---------------------------------------------------------------------------
  11. class TCustomScpExplorerForm;
  12. class TTerminalQueue;
  13. class TAuthenticateForm;
  14. class ITaskbarList3;
  15. //---------------------------------------------------------------------------
  16. enum TTerminalPendingAction { tpNull, tpNone, tpReconnect, tpFree };
  17. //---------------------------------------------------------------------------
  18. class TManagedTerminal : public TTerminal
  19. {
  20. public:
  21. __fastcall TManagedTerminal(TSessionData * SessionData, TConfiguration * Configuration);
  22. virtual __fastcall ~TManagedTerminal();
  23. TSessionData * StateData;
  24. TObject * LocalExplorerState;
  25. TObject * RemoteExplorerState;
  26. TDateTime ReopenStart;
  27. TDateTime DirectoryLoaded;
  28. TTerminalThread * TerminalThread;
  29. TDateTime QueueOperationStart;
  30. };
  31. //---------------------------------------------------------------------------
  32. class TTerminalManager : public TTerminalList
  33. {
  34. public:
  35. static TTerminalManager * __fastcall Instance(bool ForceCreation = true);
  36. static void __fastcall DestroyInstance();
  37. __fastcall TTerminalManager();
  38. __fastcall ~TTerminalManager();
  39. virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
  40. TTerminal * __fastcall NewTerminals(TList * DataList);
  41. virtual void __fastcall FreeTerminal(TTerminal * Terminal);
  42. void __fastcall Move(TTerminal * Source, TTerminal * Target);
  43. void __fastcall DisconnectActiveTerminal();
  44. void __fastcall ReconnectActiveTerminal();
  45. void __fastcall FreeActiveTerminal();
  46. void __fastcall CycleTerminals(bool Forward);
  47. bool __fastcall ConnectTerminal(TTerminal * Terminal);
  48. void __fastcall SetActiveTerminalWithAutoReconnect(TTerminal * value);
  49. void __fastcall UpdateAppTitle();
  50. bool __fastcall CanOpenInPutty();
  51. void __fastcall OpenInPutty();
  52. void __fastcall NewSession(bool FromSite, const UnicodeString & SessionUrl, bool ReloadSessions = true, TForm * LinkedForm = NULL);
  53. void __fastcall Idle(bool SkipCurrentTerminal);
  54. UnicodeString __fastcall GetTerminalShortPath(TTerminal * Terminal);
  55. UnicodeString __fastcall GetTerminalTitle(TTerminal * Terminal, bool Unique);
  56. UnicodeString __fastcall GetActiveTerminalTitle(bool Unique);
  57. UnicodeString __fastcall GetAppProgressTitle();
  58. void __fastcall HandleException(Exception * E);
  59. void __fastcall SaveWorkspace(TList * DataList);
  60. void __fastcall QueueStatusUpdated();
  61. TTerminal * __fastcall FindActiveTerminalForSite(TSessionData * Data);
  62. TTerminalQueue * __fastcall FindQueueForTerminal(TTerminal * Terminal);
  63. bool __fastcall UploadPublicKey(TTerminal * Terminal, TSessionData * Data, UnicodeString & FileName);
  64. __property TCustomScpExplorerForm * ScpExplorer = { read = FScpExplorer, write = SetScpExplorer };
  65. __property TTerminal * ActiveTerminal = { read = FActiveTerminal, write = SetActiveTerminal };
  66. __property TTerminalQueue * ActiveQueue = { read = GetActiveQueue };
  67. __property int ActiveTerminalIndex = { read = GetActiveTerminalIndex, write = SetActiveTerminalIndex };
  68. __property TStrings * TerminalList = { read = GetTerminalList };
  69. __property TNotifyEvent OnLastTerminalClosed = { read = FOnLastTerminalClosed, write = FOnLastTerminalClosed };
  70. __property TNotifyEvent OnTerminalListChanged = { read = FOnTerminalListChanged, write = FOnTerminalListChanged };
  71. __property TTerminal * LocalTerminal = { read = FLocalTerminal };
  72. protected:
  73. virtual TTerminal * __fastcall CreateTerminal(TSessionData * Data);
  74. void __fastcall DoConnectTerminal(TTerminal * Terminal, bool Reopen, bool AdHoc);
  75. private:
  76. static TTerminalManager * FInstance;
  77. TCustomScpExplorerForm * FScpExplorer;
  78. TTerminal * FActiveTerminal;
  79. TTerminal * FLocalTerminal;
  80. bool FDestroying;
  81. TTerminalPendingAction FTerminalPendingAction;
  82. TNotifyEvent FOnLastTerminalClosed;
  83. TNotifyEvent FOnTerminalListChanged;
  84. TStrings * FTerminalList;
  85. TList * FQueues;
  86. TStrings * FTerminationMessages;
  87. UnicodeString FProgressTitle;
  88. UnicodeString FForegroundProgressTitle;
  89. TDateTime FDirectoryReadingStart;
  90. TAuthenticateForm * FAuthenticateForm;
  91. TCriticalSection * FQueueSection;
  92. DWORD FMainThread;
  93. int FPendingConfigurationChange;
  94. std::unique_ptr<TCriticalSection> FChangeSection;
  95. std::vector<std::pair<TTerminalQueue *, TQueueEvent> > FQueueEvents;
  96. unsigned int FTaskbarButtonCreatedMessage;
  97. ITaskbarList3 * FTaskbarList;
  98. int FAuthenticating;
  99. void * FBusyToken;
  100. bool FAuthenticationCancelled;
  101. std::unique_ptr<TApplicationEvents> FApplicationsEvents;
  102. bool FKeepAuthenticateForm;
  103. bool __fastcall ConnectActiveTerminalImpl(bool Reopen);
  104. bool __fastcall ConnectActiveTerminal();
  105. TTerminalQueue * __fastcall NewQueue(TTerminal * Terminal);
  106. void __fastcall SetScpExplorer(TCustomScpExplorerForm * value);
  107. void __fastcall DoSetActiveTerminal(TTerminal * value, bool AutoReconnect);
  108. void __fastcall SetActiveTerminal(TTerminal * value);
  109. void __fastcall UpdateAll();
  110. void __fastcall ApplicationException(TObject * Sender, Exception * E);
  111. void __fastcall ApplicationShowHint(UnicodeString & HintStr, bool & CanShow,
  112. THintInfo & HintInfo);
  113. void __fastcall ApplicationMessage(TMsg & Msg, bool & Handled);
  114. void __fastcall ConfigurationChange(TObject * Sender);
  115. void __fastcall TerminalUpdateStatus(TTerminal * Terminal, bool Active);
  116. void __fastcall TerminalQueryUser(TObject * Sender,
  117. const UnicodeString Query, TStrings * MoreMessages, unsigned int Answers,
  118. const TQueryParams * Params, unsigned int & Answer, TQueryType Type, void * Arg);
  119. void __fastcall TerminalPromptUser(TTerminal * Terminal,
  120. TPromptKind Kind, UnicodeString Name, UnicodeString Instructions, TStrings * Prompt,
  121. TStrings * Results, bool & Result, void * Arg);
  122. void __fastcall TerminalDisplayBanner(TTerminal * Terminal,
  123. UnicodeString SessionName, const UnicodeString & Banner, bool & NeverShowAgain,
  124. int Options, unsigned int & Params);
  125. void __fastcall TerminalShowExtendedException(TTerminal * Terminal,
  126. Exception * E, void * Arg);
  127. void __fastcall TerminalReadDirectoryProgress(TObject * Sender, int Progress,
  128. int ResolvedLinks, bool & Cancel);
  129. void __fastcall TerminalInformation(TTerminal * Terminal, const UnicodeString & Str,
  130. bool Status, int Phase);
  131. void __fastcall TerminalCustomCommand(TTerminal * Terminal, const UnicodeString & Command, bool & Handled);
  132. void __fastcall FreeAll();
  133. void __fastcall TerminalReady();
  134. TStrings * __fastcall GetTerminalList();
  135. int __fastcall GetActiveTerminalIndex();
  136. TTerminalQueue * __fastcall GetActiveQueue();
  137. void __fastcall SaveTerminal(TTerminal * Terminal);
  138. void __fastcall SetActiveTerminalIndex(int value);
  139. void __fastcall OperationFinished(::TFileOperation Operation, TOperationSide Side,
  140. bool Temp, const UnicodeString & FileName, bool Success,
  141. TOnceDoneOperation & OnceDoneOperation);
  142. void __fastcall OperationProgress(TFileOperationProgressType & ProgressData);
  143. void __fastcall DeleteLocalFile(const UnicodeString FileName, bool Alternative, int & Deleted);
  144. void __fastcall QueueEvent(TTerminalQueue * Queue, TQueueEvent Event);
  145. TAuthenticateForm * __fastcall MakeAuthenticateForm(TTerminal * Terminal);
  146. void __fastcall MasterPasswordPrompt();
  147. void __fastcall FileNameInputDialogInitializeRenameBaseName(
  148. TObject * Sender, TInputDialogData * Data);
  149. void __fastcall InitTaskbarButtonCreatedMessage();
  150. void __fastcall ReleaseTaskbarList();
  151. void __fastcall CreateTaskbarList();
  152. void __fastcall UpdateTaskbarList();
  153. void __fastcall AuthenticateFormCancel(TObject * Sender);
  154. void __fastcall DoTerminalListChanged();
  155. TTerminal * __fastcall DoNewTerminal(TSessionData * Data);
  156. static void __fastcall TerminalThreadIdle(void * Data, TObject * Sender);
  157. void __fastcall SetQueueConfiguration(TTerminalQueue * Queue);
  158. void __fastcall ApplicationModalBegin(TObject * Sender);
  159. void __fastcall ApplicationModalEnd(TObject * Sender);
  160. bool __fastcall HandleMouseWheel(WPARAM WParam, LPARAM LParam);
  161. void __fastcall DoConfigurationChange();
  162. bool __fastcall ShouldDisplayQueueStatusOnAppTitle();
  163. void __fastcall SetupTerminal(TTerminal * Terminal);
  164. void __fastcall CloseAutheticateForm();
  165. void __fastcall AuthenticatingDone();
  166. TRemoteFile * __fastcall CheckRights(
  167. TTerminal * Terminal, const UnicodeString & EntryType, const UnicodeString & FileName, bool & WrongRights);
  168. };
  169. //---------------------------------------------------------------------------
  170. #endif