1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00

All top-level GUI sessions are managed, so treat them as such, to simplify a code

Source commit: 2ec1f86123529455ecd74c7bc2046be997e10573
This commit is contained in:
Martin Prikryl
2019-06-27 11:28:51 +00:00
parent 957b0d58ca
commit 7fc860b312
10 changed files with 112 additions and 112 deletions

View File

@@ -154,7 +154,7 @@ public:
class TTerminalNoteData : public TObject
{
public:
TTerminal * Terminal;
TManagedTerminal * Terminal;
};
//---------------------------------------------------------------------------
__fastcall TCustomScpExplorerForm::TCustomScpExplorerForm(TComponent* Owner):
@@ -529,7 +529,7 @@ bool __fastcall TCustomScpExplorerForm::CommandLineFromAnotherInstance(
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::SetTerminal(TTerminal * value)
void __fastcall TCustomScpExplorerForm::SetTerminal(TManagedTerminal * value)
{
if (FTerminal != value)
{
@@ -538,7 +538,7 @@ void __fastcall TCustomScpExplorerForm::SetTerminal(TTerminal * value)
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::DoSetTerminal(TTerminal * value, bool Replace)
void __fastcall TCustomScpExplorerForm::DoSetTerminal(TManagedTerminal * value, bool Replace)
{
FTerminal = value;
bool PrevAllowTransferPresetAutoSelect = FAllowTransferPresetAutoSelect;
@@ -558,7 +558,7 @@ void __fastcall TCustomScpExplorerForm::DoSetTerminal(TTerminal * value, bool Re
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::ReplaceTerminal(TTerminal * value)
void __fastcall TCustomScpExplorerForm::ReplaceTerminal(TManagedTerminal * value)
{
DoSetTerminal(value, true);
}
@@ -573,10 +573,9 @@ void __fastcall TCustomScpExplorerForm::TerminalChanging()
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::TerminalChanged(bool Replaced)
{
TManagedTerminal * ManagedTerminal = dynamic_cast<TManagedTerminal *>(Terminal);
if (ManagedTerminal != NULL)
if (Terminal != NULL)
{
UpdateSessionColor((TColor)ManagedTerminal->StateData->Color);
UpdateSessionColor((TColor)Terminal->StateData->Color);
}
DoTerminalListChanged();
@@ -598,13 +597,11 @@ void __fastcall TCustomScpExplorerForm::TerminalChanged(bool Replaced)
Terminal->RefreshDirectory();
}
DebugAssert(ManagedTerminal == Terminal);
if (WinConfiguration->PreservePanelState)
{
if (ManagedTerminal->RemoteExplorerState != NULL)
if (Terminal->RemoteExplorerState != NULL)
{
DirView(osRemote)->RestoreState(ManagedTerminal->RemoteExplorerState);
DirView(osRemote)->RestoreState(Terminal->RemoteExplorerState);
}
else
{
@@ -1232,12 +1229,11 @@ void __fastcall TCustomScpExplorerForm::AddQueueItem(
AddQueueItem(Queue, QueueItem, Terminal);
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::AddQueueItem(TTerminalQueue * Queue, TQueueItem * QueueItem, TTerminal * Terminal)
void __fastcall TCustomScpExplorerForm::AddQueueItem(TTerminalQueue * Queue, TQueueItem * QueueItem, TManagedTerminal * Terminal)
{
if (Queue->IsEmpty)
{
TManagedTerminal * ManagedTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(Terminal));
ManagedTerminal->QueueOperationStart = Now();
Terminal->QueueOperationStart = Now();
}
Queue->AddItem(QueueItem);
}
@@ -2824,7 +2820,7 @@ bool __fastcall TCustomScpExplorerForm::ExecuteFileOperation(TFileOperation Oper
{
DebugAssert(!IsSideLocalBrowser(Side));
Result = RemoteTransferFiles(FileList, NoConfirmation,
(Operation == foRemoteMove), reinterpret_cast<TTerminal *>(Param));
(Operation == foRemoteMove), reinterpret_cast<TManagedTerminal *>(Param));
}
else if (Operation == foLock)
{
@@ -3747,7 +3743,7 @@ void __fastcall TCustomScpExplorerForm::ExecutedFileReload(
(ExtractFileName(FileName), Data->SessionName)));
}
TTerminal * PrevTerminal = TTerminalManager::Instance()->ActiveTerminal;
TManagedTerminal * PrevTerminal = TTerminalManager::Instance()->ActiveTerminal;
TTerminalManager::Instance()->ActiveTerminal = Data->Terminal;
NonVisualDataModule->StartBusy();
try
@@ -4003,7 +3999,7 @@ void __fastcall TCustomScpExplorerForm::LockFiles(TStrings * FileList, bool Lock
RemoteDirView->RestoreSelection();
}
//---------------------------------------------------------------------------
bool __fastcall TCustomScpExplorerForm::RemoteTransferDialog(TTerminal *& Session,
bool __fastcall TCustomScpExplorerForm::RemoteTransferDialog(TManagedTerminal *& Session,
TStrings * FileList, UnicodeString & Target, UnicodeString & FileMask, bool & DirectCopy,
bool NoConfirmation, bool Move)
{
@@ -4035,8 +4031,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteTransferDialog(TTerminal *& Sessio
}
else
{
TManagedTerminal * ManagedTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(Session));
Target = ManagedTerminal->StateData->RemoteDirectory;
Target = Session->StateData->RemoteDirectory;
}
Target = UnixIncludeTrailingBackslash(Target);
@@ -4090,7 +4085,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteTransferDialog(TTerminal *& Sessio
void * ASession = Session;
Result = DoRemoteCopyDialog(Sessions, Directories, AllowDirectCopy,
Multi, ASession, Target, FileMask, DirectCopy, TTerminalManager::Instance()->ActiveTerminal);
Session = static_cast<TTerminal *>(ASession);
Session = static_cast<TManagedTerminal *>(ASession);
}
__finally
{
@@ -4102,7 +4097,7 @@ bool __fastcall TCustomScpExplorerForm::RemoteTransferDialog(TTerminal *& Sessio
}
//---------------------------------------------------------------------------
bool __fastcall TCustomScpExplorerForm::RemoteTransferFiles(
TStrings * FileList, bool NoConfirmation, bool Move, TTerminal * Session)
TStrings * FileList, bool NoConfirmation, bool Move, TManagedTerminal * Session)
{
DebugAssert(!IsLocalBrowserMode());
bool DirectCopy;
@@ -4621,11 +4616,8 @@ void __fastcall TCustomScpExplorerForm::Idle()
if (WinConfiguration->RefreshRemotePanel)
{
TManagedTerminal * ManagedTerminal =
dynamic_cast<TManagedTerminal *>(Terminal);
if ((ManagedTerminal != NULL) && (Terminal->Status == ssOpened) &&
(Now() - ManagedTerminal->DirectoryLoaded >
WinConfiguration->RefreshRemotePanelInterval))
if ((Terminal != NULL) && (Terminal->Status == ssOpened) &&
(Now() - Terminal->DirectoryLoaded > WinConfiguration->RefreshRemotePanelInterval))
{
RemoteDirView->ReloadDirectory();
}
@@ -4797,7 +4789,7 @@ void __fastcall TCustomScpExplorerForm::DuplicateSession()
std::unique_ptr<TSessionData> SessionData(CloneCurrentSessionData());
TTerminalManager * Manager = TTerminalManager::Instance();
TTerminal * Terminal = Manager->NewTerminal(SessionData.get());
TManagedTerminal * Terminal = Manager->NewManagedTerminal(SessionData.get());
Manager->ActiveTerminal = Terminal;
}
}
@@ -4877,7 +4869,7 @@ void __fastcall TCustomScpExplorerForm::OpenStoredSession(TSessionData * Data)
else
{
TTerminalManager * Manager = TTerminalManager::Instance();
TTerminal * Terminal = Manager->NewTerminal(Data);
TManagedTerminal * Terminal = Manager->NewManagedTerminal(Data);
Manager->ActiveTerminal = Terminal;
}
}
@@ -6065,20 +6057,17 @@ bool __fastcall TCustomScpExplorerForm::SaveWorkspace(bool EnableAutoSave)
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::UpdateTerminal(TTerminal * Terminal)
void __fastcall TCustomScpExplorerForm::UpdateTerminal(TManagedTerminal * Terminal)
{
DebugAssert(!IsLocalBrowserMode());
TManagedTerminal * ManagedTerminal = dynamic_cast<TManagedTerminal *>(Terminal);
DebugAssert(ManagedTerminal != NULL);
SAFE_DESTROY(ManagedTerminal->RemoteExplorerState);
SAFE_DESTROY(Terminal->RemoteExplorerState);
if (WinConfiguration->PreservePanelState)
{
ManagedTerminal->RemoteExplorerState = RemoteDirView->SaveState();
Terminal->RemoteExplorerState = RemoteDirView->SaveState();
}
UpdateSessionData(ManagedTerminal->StateData);
UpdateSessionData(Terminal->StateData);
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::UpdateSessionData(TSessionData * Data)
@@ -6627,29 +6616,28 @@ void __fastcall TCustomScpExplorerForm::UpdateNewSessionTab()
UnicodeString();
}
//---------------------------------------------------------------------------
TTerminal * __fastcall TCustomScpExplorerForm::GetSessionTabTerminal(TTabSheet * TabSheet)
TManagedTerminal * __fastcall TCustomScpExplorerForm::GetSessionTabTerminal(TTabSheet * TabSheet)
{
return reinterpret_cast<TTerminal *>(TabSheet->Tag);
return reinterpret_cast<TManagedTerminal *>(TabSheet->Tag);
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::UpdateSessionTab(TTabSheet * TabSheet)
{
if (DebugAlwaysTrue(TabSheet != NULL))
{
TManagedTerminal * ManagedTerminal =
dynamic_cast<TManagedTerminal *>(GetSessionTabTerminal(TabSheet));
if (DebugAlwaysTrue(ManagedTerminal != NULL))
TManagedTerminal * ATerminal = GetSessionTabTerminal(TabSheet);
if (DebugAlwaysTrue(ATerminal != NULL))
{
TColor Color = (ManagedTerminal == FTerminal) ? FSessionColor : ManagedTerminal->StateData->Color;
TColor Color = (ATerminal == FTerminal) ? FSessionColor : ATerminal->StateData->Color;
TabSheet->ImageIndex = AddSessionColor(Color);
UnicodeString TabCaption = TTerminalManager::Instance()->GetTerminalTitle(ManagedTerminal, true);
UnicodeString TabCaption = TTerminalManager::Instance()->GetTerminalTitle(ATerminal, true);
TabSheet->Caption = SessionsPageControl->FormatCaptionWithCloseButton(TabCaption);
TThemeTabSheet * ThemeTabSheet = dynamic_cast<TThemeTabSheet *>(TabSheet);
if (DebugAlwaysTrue(ThemeTabSheet != NULL))
{
ThemeTabSheet->Shadowed = !ManagedTerminal->Active;
ThemeTabSheet->Shadowed = !ATerminal->Active;
}
}
}
@@ -6658,7 +6646,7 @@ void __fastcall TCustomScpExplorerForm::UpdateSessionTab(TTabSheet * TabSheet)
bool __fastcall TCustomScpExplorerForm::SessionTabSwitched()
{
DebugAssert(SessionsPageControl->ActivePage != NULL);
TTerminal * Terminal = GetSessionTabTerminal(SessionsPageControl->ActivePage);
TManagedTerminal * Terminal = GetSessionTabTerminal(SessionsPageControl->ActivePage);
bool Result = (Terminal != NULL);
if (Result)
{
@@ -7120,7 +7108,7 @@ void __fastcall TCustomScpExplorerForm::QueueEmptyNoteClicked(TObject * Sender)
if (DebugAlwaysTrue(TerminalNoteData != NULL) &&
!NonVisualDataModule->Busy)
{
TTerminal * Terminal = TerminalNoteData->Terminal;
TManagedTerminal * Terminal = TerminalNoteData->Terminal;
TTerminalManager::Instance()->ActiveTerminal = Terminal;
if (!ComponentVisible[fcQueueView])
{
@@ -7130,10 +7118,9 @@ void __fastcall TCustomScpExplorerForm::QueueEmptyNoteClicked(TObject * Sender)
}
}
//---------------------------------------------------------------------------
void __fastcall TCustomScpExplorerForm::QueueEvent(TTerminal * ATerminal,
void __fastcall TCustomScpExplorerForm::QueueEvent(TManagedTerminal * ATerminal,
TTerminalQueue * /*Queue*/, TQueueEvent Event)
{
TManagedTerminal * ManagedTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(ATerminal));
UnicodeString Message;
TNotifyEvent OnClick = NULL;
TObject * UserData = NULL;
@@ -7152,7 +7139,7 @@ void __fastcall TCustomScpExplorerForm::QueueEvent(TTerminal * ATerminal,
break;
case qeEmpty:
OperationComplete(ManagedTerminal->QueueOperationStart);
OperationComplete(ATerminal->QueueOperationStart);
break;
case qePendingUserAction:
@@ -8314,7 +8301,7 @@ UnicodeString __fastcall TCustomScpExplorerForm::FileStatusBarText(
{
Result = FormatIncrementalSearchStatus(FIncrementalSearch, FIncrementalSearchHaveNext);
}
else if (!IsSideLocalBrowser(Side) && ((Terminal == NULL) || (dynamic_cast<TManagedTerminal *>(Terminal)->Disconnected)))
else if (!IsSideLocalBrowser(Side) && ((Terminal == NULL) || Terminal->Disconnected))
{
// noop
}
@@ -9528,7 +9515,7 @@ void __fastcall TCustomScpExplorerForm::DoFindFiles(
{
if (!NonVisualDataModule->Busy)
{
TTerminalManager::Instance()->ActiveTerminal = ATerminal;
TTerminalManager::Instance()->ActiveTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(ATerminal));
Configuration->Usage->Inc(L"FileFinds");
LockWindow(true);
NonVisualDataModule->StartBusy();
@@ -9550,7 +9537,7 @@ void __fastcall TCustomScpExplorerForm::DoFocusRemotePath(TTerminal * ATerminal,
{
if (!NonVisualDataModule->Busy)
{
TTerminalManager::Instance()->ActiveTerminal = ATerminal;
TTerminalManager::Instance()->ActiveTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(ATerminal));
SetFocus();
RemoteDirView->Path = UnixExtractFilePath(Path);
UnicodeString FileName = UnixExtractFileName(Path);
@@ -9576,7 +9563,7 @@ bool __fastcall TCustomScpExplorerForm::CanOperateOnFoundFiles(TTerminal * ATerm
bool Result = !NonVisualDataModule->Busy;
if (Result)
{
TTerminalManager::Instance()->ActiveTerminal = ATerminal;
TTerminalManager::Instance()->ActiveTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(ATerminal));
}
return Result;
}
@@ -9732,7 +9719,7 @@ void __fastcall TCustomScpExplorerForm::SessionsDDProcessDropped(
{
int Index = SessionsPageControl->IndexOfTabAt(Point.X, Point.Y);
// do not allow dropping on the "+" tab
TTerminal * TargetTerminal = GetSessionTabTerminal(SessionsPageControl->Pages[Index]);
TManagedTerminal * TargetTerminal = GetSessionTabTerminal(SessionsPageControl->Pages[Index]);
if (TargetTerminal != NULL)
{
DebugAssert(!IsFileControl(DropSourceControl, osRemote));

View File

@@ -49,6 +49,7 @@ struct TEditedFileData;
class ITaskbarList3;
struct TSynchronizeParams;
class TBookmark;
class TManagedTerminal;
//---------------------------------------------------------------------------
enum TActionAllowed { aaShortCut, aaUpdate, aaExecute };
enum TActionFlag { afLocal = 1, afRemote = 2, afExplorer = 4 , afCommander = 8 };
@@ -208,7 +209,7 @@ __published:
void __fastcall RemoteDirViewResize(TObject *Sender);
private:
TTerminal * FTerminal;
TManagedTerminal * FTerminal;
TTerminalQueue * FQueue;
TTerminalQueueStatus * FQueueStatus;
TCriticalSection * FQueueStatusSection;
@@ -226,7 +227,7 @@ private:
UnicodeString FClipboardFakeDirectory;
std::unique_ptr<TObjectList> FClipboardFakeMonitors;
std::unique_ptr<TDragDropFilesEx> FClipboardDragDropFilesEx;
TTerminal * FClipboardTerminal;
TManagedTerminal * FClipboardTerminal;
std::unique_ptr<TStrings> FClipboardFileList;
TStrings * FDelayedDeletionList;
TTimer * FDelayedDeletionTimer;
@@ -282,8 +283,8 @@ private:
bool __fastcall GetEnableFocusedOperation(TOperationSide Side, int FilesOnly);
bool __fastcall GetEnableSelectedOperation(TOperationSide Side, int FilesOnly);
void __fastcall SetTerminal(TTerminal * value);
void __fastcall DoSetTerminal(TTerminal * value, bool Replace);
void __fastcall SetTerminal(TManagedTerminal * value);
void __fastcall DoSetTerminal(TManagedTerminal * value, bool Replace);
void __fastcall SetQueue(TTerminalQueue * value);
void __fastcall TransferListChange(TObject * Sender);
void __fastcall TransferListDrawItem(TTBXCustomList * Sender, TCanvas * ACanvas,
@@ -300,7 +301,7 @@ private:
void __fastcall AddQueueItem(TTerminalQueue * Queue, TTransferDirection Direction,
TStrings * FileList, const UnicodeString TargetDirectory,
const TGUICopyParamType & CopyParam, int Params);
void __fastcall AddQueueItem(TTerminalQueue * Queue, TQueueItem * QueueItem, TTerminal * Terminal);
void __fastcall AddQueueItem(TTerminalQueue * Queue, TQueueItem * QueueItem, TManagedTerminal * Terminal);
void __fastcall ClearTransferSourceSelection(TTransferDirection Direction);
void __fastcall SessionsDDDragOver(int KeyState, const TPoint & Point, int & Effect);
void __fastcall SessionsDDProcessDropped(TObject * Sender, int KeyState, const TPoint & Point, int Effect);
@@ -368,13 +369,13 @@ protected:
UnicodeString & TargetDirectory, TGUICopyParamType & CopyParam, bool Confirm,
bool DragDrop, int Options);
virtual void __fastcall CopyParamDialogAfter(TTransferDirection Direction, bool Temp, const UnicodeString & TargetDirectory);
virtual bool __fastcall RemoteTransferDialog(TTerminal *& Session,
virtual bool __fastcall RemoteTransferDialog(TManagedTerminal *& Session,
TStrings * FileList, UnicodeString & Target, UnicodeString & FileMask, bool & DirectCopy,
bool NoConfirmation, bool Move);
virtual void __fastcall CreateParams(TCreateParams & Params);
void __fastcall DeleteFiles(TOperationSide Side, TStrings * FileList, bool Alternative);
bool __fastcall RemoteTransferFiles(TStrings * FileList, bool NoConfirmation,
bool Move, TTerminal * Session);
bool Move, TManagedTerminal * Session);
virtual void __fastcall DoDirViewExecFile(TObject * Sender, TListItem * Item, bool & AllowExec);
virtual TControl * __fastcall GetComponent(Byte Component);
bool __fastcall GetComponentVisible(Byte Component);
@@ -626,7 +627,7 @@ protected:
void __fastcall SetTaskbarListProgressState(TBPFLAG Flags);
void __fastcall SetTaskbarListProgressValue(int Progress);
void __fastcall SetTaskbarListProgressValue(TFileOperationProgressType * ProgressData);
TTerminal * __fastcall GetSessionTabTerminal(TTabSheet * TabSheet);
TManagedTerminal * __fastcall GetSessionTabTerminal(TTabSheet * TabSheet);
bool __fastcall SessionTabSwitched();
void __fastcall RestoreApp();
void __fastcall GoToQueue();
@@ -734,7 +735,7 @@ public:
virtual void __fastcall CompareDirectories();
void __fastcall ExecuteCurrentFile();
virtual void __fastcall OpenConsole(UnicodeString Command = L"");
virtual void __fastcall UpdateTerminal(TTerminal * Terminal);
virtual void __fastcall UpdateTerminal(TManagedTerminal * Terminal);
virtual void __fastcall SynchronizeDirectories();
virtual void __fastcall FullSynchronizeDirectories() = 0;
virtual void __fastcall ExploreLocalDirectory();
@@ -770,7 +771,7 @@ public:
void __fastcall ShowExtendedException(TTerminal * Terminal, Exception * E);
void __fastcall InactiveTerminalException(TTerminal * Terminal, Exception * E);
void __fastcall TerminalReady();
void __fastcall QueueEvent(TTerminal * Terminal, TTerminalQueue * Queue, TQueueEvent Event);
void __fastcall QueueEvent(TManagedTerminal * Terminal, TTerminalQueue * Queue, TQueueEvent Event);
void __fastcall QueueEmptyNoteClicked(TObject * Sender);
bool __fastcall DoSynchronizeDirectories(UnicodeString & LocalDirectory,
UnicodeString & RemoteDirectory, bool UseDefaults);
@@ -812,7 +813,7 @@ public:
bool __fastcall CanPrivateKeyUpload();
void __fastcall PrivateKeyUpload();
bool __fastcall IsComponentPossible(Byte Component);
void __fastcall ReplaceTerminal(TTerminal * value);
void __fastcall ReplaceTerminal(TManagedTerminal * value);
__property bool ComponentVisible[Byte Component] = { read = GetComponentVisible, write = SetComponentVisible };
__property bool EnableFocusedOperation[TOperationSide Side] = { read = GetEnableFocusedOperation, index = 0 };
@@ -820,7 +821,7 @@ public:
__property bool EnableFocusedFileOperation[TOperationSide Side] = { read = GetEnableFocusedOperation, index = 1 };
__property bool EnableSelectedFileOperation[TOperationSide Side] = { read = GetEnableSelectedOperation, index = 1 };
__property bool HasDirView[TOperationSide Side] = { read = GetHasDirView };
__property TTerminal * Terminal = { read = FTerminal, write = SetTerminal };
__property TManagedTerminal * Terminal = { read = FTerminal, write = SetTerminal };
__property TTerminalQueue * Queue = { read = FQueue, write = SetQueue };
__property TColor SessionColor = { read = FSessionColor, write = SetSessionColor };
};

View File

@@ -402,8 +402,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
UPD(DuplicateSessionAction, HasTerminal)
UPD(RenameSessionAction, HasTerminal)
UPD(CloseSessionAction2, (ScpExplorer->Terminal != NULL))
UPDEX1(DisconnectSessionAction, HasTerminal, DisconnectSessionAction->Visible = (ScpExplorer->Terminal == NULL) || !dynamic_cast<TManagedTerminal *>(ScpExplorer->Terminal)->Disconnected)
UPDEX1(ReconnectSessionAction, (ScpExplorer->Terminal != NULL) && dynamic_cast<TManagedTerminal *>(ScpExplorer->Terminal)->Disconnected, ReconnectSessionAction->Visible = ReconnectSessionAction->Enabled)
UPDEX1(DisconnectSessionAction, HasTerminal, DisconnectSessionAction->Visible = (ScpExplorer->Terminal == NULL) || !ScpExplorer->Terminal->Disconnected)
UPDEX1(ReconnectSessionAction, (ScpExplorer->Terminal != NULL) && ScpExplorer->Terminal->Disconnected, ReconnectSessionAction->Visible = ReconnectSessionAction->Enabled)
UPD(SavedSessionsAction2, true)
UPD(WorkspacesAction, StoredSessions->HasAnyWorkspace())
UPD(OpenedSessionsAction, HasTerminal)
@@ -1459,7 +1459,7 @@ void __fastcall TNonVisualDataModule::CreateOpenedSessionListMenu(TAction * Acti
//---------------------------------------------------------------------------
void __fastcall TNonVisualDataModule::OpenedSessionItemClick(TObject * Sender)
{
TTerminalManager::Instance()->ActiveTerminal = (TTerminal*)(((TMenuItem *)Sender)->Tag);
TTerminalManager::Instance()->ActiveTerminal = (TManagedTerminal*)(((TMenuItem *)Sender)->Tag);
}
//---------------------------------------------------------------------------
void __fastcall TNonVisualDataModule::CreateEditorListMenu(TTBCustomItem * Menu, bool OnFocused)

View File

@@ -246,20 +246,18 @@ void __fastcall TScpCommanderForm::StoreParams()
}
}
//---------------------------------------------------------------------------
void __fastcall TScpCommanderForm::UpdateTerminal(TTerminal * Terminal)
void __fastcall TScpCommanderForm::UpdateTerminal(TManagedTerminal * Terminal)
{
DebugAssert(!IsLocalBrowserMode());
TCustomScpExplorerForm::UpdateTerminal(Terminal);
TManagedTerminal * ManagedTerminal = dynamic_cast<TManagedTerminal *>(Terminal);
DebugAssert(ManagedTerminal != NULL);
DebugAssert(LocalDirView != NULL);
SAFE_DESTROY(ManagedTerminal->LocalExplorerState);
SAFE_DESTROY(Terminal->LocalExplorerState);
if (WinConfiguration->PreservePanelState)
{
ManagedTerminal->LocalExplorerState = LocalDirView->SaveState();
Terminal->LocalExplorerState = LocalDirView->SaveState();
}
}
//---------------------------------------------------------------------------
@@ -528,15 +526,12 @@ void __fastcall TScpCommanderForm::TerminalChanged(bool Replaced)
// do not attempt to select previously selected directory
LocalDirView->ContinueSession(false);
TManagedTerminal * ManagedTerminal = dynamic_cast<TManagedTerminal *>(Terminal);
DebugAssert(ManagedTerminal != NULL);
// reset home directory
LocalDirView->HomeDirectory = L"";
if (FFirstTerminal || !WinConfiguration->ScpCommander.PreserveLocalDirectory)
{
UnicodeString LocalDirectory = ManagedTerminal->StateData->LocalDirectory;
UnicodeString LocalDirectory = Terminal->StateData->LocalDirectory;
if (!LocalDirectory.IsEmpty())
{
@@ -564,16 +559,16 @@ void __fastcall TScpCommanderForm::TerminalChanged(bool Replaced)
if (WinConfiguration->PreservePanelState &&
!WinConfiguration->ScpCommander.PreserveLocalDirectory)
{
if (ManagedTerminal->LocalExplorerState != NULL)
if (Terminal->LocalExplorerState != NULL)
{
LocalDirView->RestoreState(ManagedTerminal->LocalExplorerState);
LocalDirView->RestoreState(Terminal->LocalExplorerState);
}
else
{
LocalDirView->ClearState();
}
NonVisualDataModule->SynchronizeBrowsingAction->Checked = ManagedTerminal->StateData->SynchronizeBrowsing;
NonVisualDataModule->SynchronizeBrowsingAction->Checked = Terminal->StateData->SynchronizeBrowsing;
}
}
}

View File

@@ -607,7 +607,7 @@ public:
virtual bool __fastcall AllowedAction(TAction * Action, TActionAllowed Allowed);
virtual void __fastcall ChangePath(TOperationSide Side);
virtual void __fastcall CompareDirectories();
virtual void __fastcall UpdateTerminal(TTerminal * Terminal);
virtual void __fastcall UpdateTerminal(TManagedTerminal * Terminal);
virtual void __fastcall SynchronizeDirectories();
virtual void __fastcall FullSynchronizeDirectories();
virtual void __fastcall StoreParams();

View File

@@ -4,7 +4,7 @@
//---------------------------------------------------------------------------
#include <vector>
//---------------------------------------------------------------------------
class TTerminal;
class TManagedTerminal;
class TTerminalQueue;
//---------------------------------------------------------------------------
struct TEditedFileData
@@ -15,7 +15,7 @@ struct TEditedFileData
UnicodeString LocalRootDirectory;
UnicodeString RemoteDirectory;
bool ForceText;
TTerminal * Terminal;
TManagedTerminal * Terminal;
TSessionData * SessionData;
TTerminalQueue * Queue;
UnicodeString SessionName;

View File

@@ -145,11 +145,21 @@ TTerminalQueue * __fastcall TTerminalManager::NewQueue(TTerminal * Terminal)
return Queue;
}
//---------------------------------------------------------------------------
TTerminal * __fastcall TTerminalManager::CreateTerminal(TSessionData * Data)
TManagedTerminal * __fastcall TTerminalManager::CreateManagedTerminal(TSessionData * Data)
{
return new TManagedTerminal(Data, Configuration);
}
//---------------------------------------------------------------------------
TTerminal * __fastcall TTerminalManager::CreateTerminal(TSessionData * Data)
{
return CreateManagedTerminal(Data);
}
//---------------------------------------------------------------------------
TManagedTerminal * __fastcall TTerminalManager::GetTerminal(int Index)
{
return DebugNotNull(dynamic_cast<TManagedTerminal *>(TTerminalList::Terminals[Index]));
}
//---------------------------------------------------------------------------
void __fastcall TTerminalManager::SetupTerminal(TTerminal * Terminal)
{
Terminal->OnQueryUser = TerminalQueryUser;
@@ -164,9 +174,9 @@ void __fastcall TTerminalManager::SetupTerminal(TTerminal * Terminal)
Terminal->OnCustomCommand = TerminalCustomCommand;
}
//---------------------------------------------------------------------------
TTerminal * __fastcall TTerminalManager::DoNewTerminal(TSessionData * Data)
TManagedTerminal * __fastcall TTerminalManager::DoNewTerminal(TSessionData * Data)
{
TTerminal * Terminal = TTerminalList::NewTerminal(Data);
TManagedTerminal * Terminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(TTerminalList::NewTerminal(Data)));
try
{
FQueues->Add(NewQueue(Terminal));
@@ -193,12 +203,17 @@ TTerminal * __fastcall TTerminalManager::NewTerminal(TSessionData * Data)
return Terminal;
}
//---------------------------------------------------------------------------
TTerminal * __fastcall TTerminalManager::NewTerminals(TList * DataList)
TManagedTerminal * __fastcall TTerminalManager::NewManagedTerminal(TSessionData * Data)
{
TTerminal * Result = NULL;
return DebugNotNull(dynamic_cast<TManagedTerminal *>(NewTerminal(Data)));
}
//---------------------------------------------------------------------------
TManagedTerminal * __fastcall TTerminalManager::NewTerminals(TList * DataList)
{
TManagedTerminal * Result = NULL;
for (int Index = 0; Index < DataList->Count; Index++)
{
TTerminal * Terminal =
TManagedTerminal * Terminal =
DoNewTerminal(reinterpret_cast<TSessionData *>(DataList->Items[Index]));
if (Index == 0)
{
@@ -274,16 +289,16 @@ void __fastcall TTerminalManager::DoConnectTerminal(TTerminal * Terminal, bool R
if (!AdHoc && (DebugAlwaysTrue(Terminal == FActiveTerminal)))
{
// terminal was abandoned, must create a new one to replace it
Terminal = CreateTerminal(new TSessionData(L""));
Terminal = ManagedTerminal = CreateManagedTerminal(new TSessionData(L""));
SetupTerminal(Terminal);
OwnsObjects = false;
Items[ActiveTerminalIndex] = Terminal;
OwnsObjects = true;
FActiveTerminal = Terminal;
FActiveTerminal = ManagedTerminal;
// Can be NULL, when opening the first session from command-line
if (FScpExplorer != NULL)
{
FScpExplorer->ReplaceTerminal(Terminal);
FScpExplorer->ReplaceTerminal(ManagedTerminal);
}
}
// Now we do not have any reference to an abandoned terminal, so we can safely allow the thread
@@ -601,17 +616,17 @@ void __fastcall TTerminalManager::SetScpExplorer(TCustomScpExplorerForm * value)
}
}
//---------------------------------------------------------------------------
void __fastcall TTerminalManager::SetActiveTerminal(TTerminal * value)
void __fastcall TTerminalManager::SetActiveTerminal(TManagedTerminal * value)
{
DoSetActiveTerminal(value, false);
}
//---------------------------------------------------------------------------
void __fastcall TTerminalManager::SetActiveTerminalWithAutoReconnect(TTerminal * value)
void __fastcall TTerminalManager::SetActiveTerminalWithAutoReconnect(TManagedTerminal * value)
{
DoSetActiveTerminal(value, true);
}
//---------------------------------------------------------------------------
void __fastcall TTerminalManager::DoSetActiveTerminal(TTerminal * value, bool AutoReconnect)
void __fastcall TTerminalManager::DoSetActiveTerminal(TManagedTerminal * value, bool AutoReconnect)
{
if (ActiveTerminal != value)
{
@@ -1303,7 +1318,7 @@ TStrings * __fastcall TTerminalManager::GetTerminalList()
FTerminalList->Clear();
for (int i = 0; i < Count; i++)
{
TTerminal * Terminal = Terminals[i];
TManagedTerminal * Terminal = Terminals[i];
UnicodeString Name = GetTerminalTitle(Terminal, true);
FTerminalList->AddObject(Name, Terminal);
}
@@ -1563,7 +1578,7 @@ void __fastcall TTerminalManager::Idle(bool SkipCurrentTerminal)
// the session may not exist anymore
if (Index >= 0)
{
TTerminal * Terminal = Terminals[Index];
TManagedTerminal * Terminal = Terminals[Index];
// we can hardly have a queue event without explorer
DebugAssert(ScpExplorer != NULL);
if (ScpExplorer != NULL)

View File

@@ -42,8 +42,8 @@ public:
__fastcall TTerminalManager();
__fastcall ~TTerminalManager();
virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
TTerminal * __fastcall NewTerminals(TList * DataList);
TManagedTerminal * __fastcall NewManagedTerminal(TSessionData * Data);
TManagedTerminal * __fastcall NewTerminals(TList * DataList);
virtual void __fastcall FreeTerminal(TTerminal * Terminal);
void __fastcall Move(TTerminal * Source, TTerminal * Target);
void __fastcall DisconnectActiveTerminal();
@@ -51,7 +51,7 @@ public:
void __fastcall FreeActiveTerminal();
void __fastcall CycleTerminals(bool Forward);
bool __fastcall ConnectTerminal(TTerminal * Terminal);
void __fastcall SetActiveTerminalWithAutoReconnect(TTerminal * value);
void __fastcall SetActiveTerminalWithAutoReconnect(TManagedTerminal * value);
void __fastcall UpdateAppTitle();
bool __fastcall CanOpenInPutty();
void __fastcall OpenInPutty();
@@ -69,22 +69,24 @@ public:
bool __fastcall UploadPublicKey(TTerminal * Terminal, TSessionData * Data, UnicodeString & FileName);
__property TCustomScpExplorerForm * ScpExplorer = { read = FScpExplorer, write = SetScpExplorer };
__property TTerminal * ActiveTerminal = { read = FActiveTerminal, write = SetActiveTerminal };
__property TManagedTerminal * ActiveTerminal = { read = FActiveTerminal, write = SetActiveTerminal };
__property TTerminalQueue * ActiveQueue = { read = GetActiveQueue };
__property int ActiveTerminalIndex = { read = GetActiveTerminalIndex, write = SetActiveTerminalIndex };
__property TStrings * TerminalList = { read = GetTerminalList };
__property TNotifyEvent OnLastTerminalClosed = { read = FOnLastTerminalClosed, write = FOnLastTerminalClosed };
__property TNotifyEvent OnTerminalListChanged = { read = FOnTerminalListChanged, write = FOnTerminalListChanged };
__property TTerminal * LocalTerminal = { read = FLocalTerminal };
__property TManagedTerminal * Terminals[int Index] = { read=GetTerminal };
protected:
virtual TTerminal * __fastcall CreateTerminal(TSessionData * Data);
void __fastcall DoConnectTerminal(TTerminal * Terminal, bool Reopen, bool AdHoc);
virtual TTerminal * __fastcall NewTerminal(TSessionData * Data);
private:
static TTerminalManager * FInstance;
TCustomScpExplorerForm * FScpExplorer;
TTerminal * FActiveTerminal;
TManagedTerminal * FActiveTerminal;
TTerminal * FLocalTerminal;
bool FDestroying;
TTerminalPendingAction FTerminalPendingAction;
@@ -114,8 +116,8 @@ private:
bool __fastcall ConnectActiveTerminal();
TTerminalQueue * __fastcall NewQueue(TTerminal * Terminal);
void __fastcall SetScpExplorer(TCustomScpExplorerForm * value);
void __fastcall DoSetActiveTerminal(TTerminal * value, bool AutoReconnect);
void __fastcall SetActiveTerminal(TTerminal * value);
void __fastcall DoSetActiveTerminal(TManagedTerminal * value, bool AutoReconnect);
void __fastcall SetActiveTerminal(TManagedTerminal * value);
void __fastcall UpdateAll();
void __fastcall ApplicationException(TObject * Sender, Exception * E);
void __fastcall ApplicationShowHint(UnicodeString & HintStr, bool & CanShow,
@@ -162,7 +164,7 @@ private:
void __fastcall UpdateTaskbarList();
void __fastcall AuthenticateFormCancel(TObject * Sender);
void __fastcall DoTerminalListChanged();
TTerminal * __fastcall DoNewTerminal(TSessionData * Data);
TManagedTerminal * __fastcall DoNewTerminal(TSessionData * Data);
static void __fastcall TerminalThreadIdle(void * Data, TObject * Sender);
void __fastcall SetQueueConfiguration(TTerminalQueue * Queue);
void __fastcall ApplicationModalBegin(TObject * Sender);
@@ -175,6 +177,8 @@ private:
void __fastcall AuthenticatingDone();
TRemoteFile * __fastcall CheckRights(
TTerminal * Terminal, const UnicodeString & EntryType, const UnicodeString & FileName, bool & WrongRights);
TManagedTerminal * __fastcall CreateManagedTerminal(TSessionData * Data);
TManagedTerminal * __fastcall GetTerminal(int Index);
};
//---------------------------------------------------------------------------
#endif

View File

@@ -292,11 +292,10 @@ void __fastcall ShowExtendedExceptionEx(TTerminal * Terminal,
if (ForActiveTerminal)
{
int SessionReopenTimeout = 0;
TManagedTerminal * ManagedTerminal = dynamic_cast<TManagedTerminal *>(Manager->ActiveTerminal);
if ((ManagedTerminal != NULL) &&
if (DebugAlwaysTrue(Manager->ActiveTerminal != NULL) &&
((Configuration->SessionReopenTimeout == 0) ||
((double)ManagedTerminal->ReopenStart == 0) ||
(int(double(Now() - ManagedTerminal->ReopenStart) * MSecsPerDay) < Configuration->SessionReopenTimeout)))
((double)Manager->ActiveTerminal->ReopenStart == 0) ||
(int(double(Now() - Manager->ActiveTerminal->ReopenStart) * MSecsPerDay) < Configuration->SessionReopenTimeout)))
{
SessionReopenTimeout = GUIConfiguration->SessionReopenAutoIdle;
}

View File

@@ -1093,14 +1093,13 @@ int __fastcall Execute()
bool CanStart;
if (DataList->Count > 0)
{
TTerminal * Terminal = TerminalManager->NewTerminals(DataList.get());
TManagedTerminal * Terminal = TerminalManager->NewTerminals(DataList.get());
if (!DownloadFile.IsEmpty())
{
Terminal->AutoReadDirectory = false;
DownloadFile = UnixIncludeTrailingBackslash(Terminal->SessionData->RemoteDirectory) + DownloadFile;
Terminal->SessionData->RemoteDirectory = L"";
TManagedTerminal * ManagedTerminal = DebugNotNull(dynamic_cast<TManagedTerminal *>(Terminal));
ManagedTerminal->StateData->RemoteDirectory = Terminal->SessionData->RemoteDirectory;
Terminal->StateData->RemoteDirectory = Terminal->SessionData->RemoteDirectory;
}
TerminalManager->ActiveTerminal = Terminal;
CanStart = (TerminalManager->Count > 0);