TerminalManager.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. //---------------------------------------------------------------------------
  10. class TCustomScpExplorerForm;
  11. class TLogMemo;
  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. TColor Color;
  24. bool SynchronizeBrowsing;
  25. UnicodeString LocalDirectory;
  26. UnicodeString RemoteDirectory;
  27. TObject * LocalExplorerState;
  28. TObject * RemoteExplorerState;
  29. TDateTime ReopenStart;
  30. TDateTime DirectoryLoaded;
  31. TTerminalThread * TerminalThread;
  32. };
  33. //---------------------------------------------------------------------------
  34. class TTerminalManager : public TTerminalList
  35. {
  36. public:
  37. static TTerminalManager * __fastcall Instance(bool ForceCreation = true);
  38. static void __fastcall DestroyInstance();
  39. __fastcall TTerminalManager();
  40. __fastcall ~TTerminalManager();
  41. virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
  42. virtual void __fastcall FreeTerminal(TTerminal * Terminal);
  43. void __fastcall Move(TTerminal * Source, TTerminal * Target);
  44. bool __fastcall ConnectActiveTerminal();
  45. void __fastcall DisconnectActiveTerminal();
  46. void __fastcall ReconnectActiveTerminal();
  47. void __fastcall FreeActiveTerminal();
  48. void __fastcall CycleTerminals(bool Forward);
  49. static void ConnectTerminal(TTerminal * Terminal, bool Reopen);
  50. void __fastcall UpdateAppTitle();
  51. bool __fastcall CanOpenInPutty();
  52. void __fastcall OpenInPutty();
  53. bool __fastcall NewSession();
  54. void __fastcall Idle();
  55. UnicodeString __fastcall TerminalTitle(TTerminal * Terminal);
  56. void __fastcall HandleException(Exception * E);
  57. __property TCustomScpExplorerForm * ScpExplorer = { read = FScpExplorer, write = SetScpExplorer };
  58. __property TTerminal * ActiveTerminal = { read = FActiveTerminal, write = SetActiveTerminal };
  59. __property TTerminalQueue * ActiveQueue = { read = GetActiveQueue };
  60. __property int ActiveTerminalIndex = { read = GetActiveTerminalIndex, write = SetActiveTerminalIndex };
  61. __property UnicodeString ActiveTerminalTitle = { read = GetActiveTerminalTitle };
  62. __property TStrings * TerminalList = { read = GetTerminalList };
  63. __property TLogMemo * LogMemo = { read = FLogMemo };
  64. __property TNotifyEvent OnLastTerminalClosed = { read = FOnLastTerminalClosed, write = FOnLastTerminalClosed };
  65. __property TNotifyEvent OnTerminalListChanged = { read = FOnTerminalListChanged, write = FOnTerminalListChanged };
  66. protected:
  67. virtual TTerminal * __fastcall CreateTerminal(TSessionData * Data);
  68. private:
  69. static TTerminalManager * FInstance;
  70. TCustomScpExplorerForm * FScpExplorer;
  71. TTerminal * FActiveTerminal;
  72. TLogMemo * FLogMemo;
  73. bool FDestroying;
  74. TTerminalPendingAction FTerminalPendingAction;
  75. TNotifyEvent FOnLastTerminalClosed;
  76. TNotifyEvent FOnTerminalListChanged;
  77. TStrings * FTerminalList;
  78. TList * FQueues;
  79. TStrings * FTerminationMessages;
  80. UnicodeString FProgressTitle;
  81. TDateTime FDirectoryReadingStart;
  82. TAuthenticateForm * FAuthenticateForm;
  83. TCriticalSection * FQueueSection;
  84. TTerminalQueue * FQueueWithEvent;
  85. TQueueEvent FQueueEvent;
  86. unsigned int FTaskbarButtonCreatedMessage;
  87. ITaskbarList3 * FTaskbarList;
  88. int FAuthenticating;
  89. bool __fastcall ConnectActiveTerminalImpl(bool Reopen);
  90. TTerminalQueue * __fastcall NewQueue(TTerminal * Terminal);
  91. void __fastcall CreateLogMemo();
  92. void __fastcall FreeLogMemo();
  93. void __fastcall SetScpExplorer(TCustomScpExplorerForm * value);
  94. void __fastcall SetActiveTerminal(TTerminal * value);
  95. void __fastcall SetLogMemo(TLogMemo * value);
  96. void __fastcall UpdateAll();
  97. void __fastcall ApplicationException(TObject * Sender, Exception * E);
  98. void __fastcall ApplicationShowHint(UnicodeString & HintStr, bool & CanShow,
  99. THintInfo & HintInfo);
  100. void __fastcall ApplicationMessage(TMsg & Msg, bool & Handled);
  101. void __fastcall ConfigurationChange(TObject * Sender);
  102. void __fastcall TerminalUpdateStatus(TTerminal * Terminal, bool Active);
  103. void __fastcall TerminalQueryUser(TObject * Sender,
  104. const UnicodeString Query, TStrings * MoreMessages, unsigned int Answers,
  105. const TQueryParams * Params, unsigned int & Answer, TQueryType Type, void * Arg);
  106. void __fastcall TerminalPromptUser(TTerminal * Terminal,
  107. TPromptKind Kind, UnicodeString Name, UnicodeString Instructions, TStrings * Prompt,
  108. TStrings * Results, bool & Result, void * Arg);
  109. void __fastcall TerminalDisplayBanner(TTerminal * Terminal,
  110. UnicodeString SessionName, const UnicodeString & Banner, bool & NeverShowAgain,
  111. int Options);
  112. void __fastcall TerminalShowExtendedException(TTerminal * Terminal,
  113. Exception * E, void * Arg);
  114. void __fastcall TerminalReadDirectoryProgress(TObject * Sender, int Progress,
  115. bool & Cancel);
  116. void __fastcall TerminalInformation(TTerminal * Terminal, const UnicodeString & Str,
  117. bool Status, int Phase);
  118. void __fastcall FreeAll();
  119. void __fastcall TerminalReady();
  120. TStrings * __fastcall GetTerminalList();
  121. int __fastcall GetActiveTerminalIndex();
  122. UnicodeString __fastcall GetActiveTerminalTitle();
  123. TTerminalQueue * __fastcall GetActiveQueue();
  124. void __fastcall SaveTerminal(TTerminal * Terminal);
  125. void __fastcall SetActiveTerminalIndex(int value);
  126. void __fastcall OperationFinished(::TFileOperation Operation, TOperationSide Side,
  127. bool Temp, const UnicodeString & FileName, bool Success,
  128. TOnceDoneOperation & OnceDoneOperation);
  129. void __fastcall OperationProgress(TFileOperationProgressType & ProgressData,
  130. TCancelStatus & Cancel);
  131. void __fastcall DeleteLocalFile(const UnicodeString FileName, bool Alternative);
  132. void __fastcall QueueEvent(TTerminalQueue * Queue, TQueueEvent Event);
  133. TAuthenticateForm * __fastcall MakeAuthenticateForm(TTerminal * Terminal);
  134. void __fastcall MasterPasswordPrompt();
  135. void __fastcall FileNameInputDialogInitializeRenameBaseName(
  136. TObject * Sender, TInputDialogData * Data);
  137. void __fastcall InitTaskbarButtonCreatedMessage();
  138. void __fastcall ReleaseTaskbarList();
  139. void __fastcall CreateTaskbarList();
  140. void __fastcall UpdateTaskbarList();
  141. void __fastcall AuthenticateFormCancel(TObject * Sender);
  142. void __fastcall DoTerminalListChanged();
  143. static void __fastcall TerminalThreadIdle(void * Data, TObject * Sender);
  144. };
  145. //---------------------------------------------------------------------------
  146. #endif