|
|
@@ -56,7 +56,7 @@
|
|
|
#pragma resource "*.dfm"
|
|
|
//---------------------------------------------------------------------------
|
|
|
#define WM_COMPONENT_HIDE (WM_WINSCP_USER + 4)
|
|
|
-static const int SessionPanelCount = 4;
|
|
|
+static const int SessionPanelCount = 3;
|
|
|
//---------------------------------------------------------------------------
|
|
|
class TMutexGuard
|
|
|
{
|
|
|
@@ -605,13 +605,9 @@ void __fastcall TCustomScpExplorerForm::TerminalChanged(bool Replaced)
|
|
|
DirView(osRemote)->ClearState();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (!Replaced && Terminal->Active)
|
|
|
- {
|
|
|
- InitStatusBar();
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
+ InitStatusBar();
|
|
|
UpdateTransferList();
|
|
|
// Update panels Enable state before refreshing the labels
|
|
|
UpdateControls();
|
|
|
@@ -4547,48 +4543,77 @@ void __fastcall TCustomScpExplorerForm::KeyDown(Word & Key, Classes::TShiftState
|
|
|
//---------------------------------------------------------------------------
|
|
|
void __fastcall TCustomScpExplorerForm::InitStatusBar()
|
|
|
{
|
|
|
- DebugAssert(Terminal != NULL);
|
|
|
- const TSessionInfo & SessionInfo = Terminal->GetSessionInfo();
|
|
|
- const TFileSystemInfo & FileSystemInfo = Terminal->GetFileSystemInfo();
|
|
|
+ bool OpenedTerminal = false;
|
|
|
+ UnicodeString ProtocolName;
|
|
|
+ UnicodeString ProtocolNameHint;
|
|
|
+ UnicodeString SecurityProtocolName;
|
|
|
+ UnicodeString DurationHint;
|
|
|
+
|
|
|
+ // See the comment in TScpCommanderForm::UpdateControls()
|
|
|
+ TTerminal * ActiveTerminal = TTerminalManager::Instance()->ActiveTerminal;
|
|
|
+ if (ActiveTerminal != NULL)
|
|
|
+ {
|
|
|
+ // Active is not enough here
|
|
|
+ if (ActiveTerminal->Status == ssOpened)
|
|
|
+ {
|
|
|
+ const TSessionInfo & SessionInfo = ActiveTerminal->GetSessionInfo();
|
|
|
+ const TFileSystemInfo & FileSystemInfo = ActiveTerminal->GetFileSystemInfo();
|
|
|
+ if (FileSystemInfo.ProtocolName.IsEmpty())
|
|
|
+ {
|
|
|
+ ProtocolName = SessionInfo.ProtocolName;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ProtocolName = FileSystemInfo.ProtocolName;
|
|
|
+ }
|
|
|
+ ProtocolNameHint = LoadStr(STATUS_PROTOCOL_HINT);
|
|
|
+ SecurityProtocolName = SessionInfo.SecurityProtocolName;
|
|
|
+
|
|
|
+ DurationHint = LoadStr(STATUS_DURATION_HINT);
|
|
|
+ OpenedTerminal = true;
|
|
|
+ }
|
|
|
+ else if (ActiveTerminal->Status > ssClosed)
|
|
|
+ {
|
|
|
+ ProtocolName = LoadStr(STATUS_CONNECTING);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ProtocolName = LoadStr(STATUS_NOT_CONNECTED2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
TTBXStatusBar * SessionStatusBar = (TTBXStatusBar *)GetComponent(fcStatusBar);
|
|
|
|
|
|
int Offset = SessionStatusBar->Panels->Count - SessionPanelCount;
|
|
|
|
|
|
- bool SecurityEnabled = !SessionInfo.SecurityProtocolName.IsEmpty();
|
|
|
- SessionStatusBar->Panels->Items[Offset + 0]->Enabled = SecurityEnabled;
|
|
|
- // expanded from ?: to avoid memory leaks
|
|
|
- if (SecurityEnabled)
|
|
|
- {
|
|
|
- SessionStatusBar->Panels->Items[Offset + 0]->Hint =
|
|
|
- FMTLOAD(STATUS_SECURE, (SessionInfo.SecurityProtocolName));
|
|
|
- }
|
|
|
- else
|
|
|
+ TTBXStatusPanel * ProtocolStatusPanel = SessionStatusBar->Panels->Items[Offset + 0];
|
|
|
+ ProtocolStatusPanel->ViewPriority = (ActiveTerminal != NULL) ? 100 : 0;
|
|
|
+ if (ProtocolStatusPanel->Caption != ProtocolName)
|
|
|
{
|
|
|
- SessionStatusBar->Panels->Items[Offset + 0]->Hint = LoadStr(STATUS_INSECURE);
|
|
|
+ ProtocolStatusPanel->Caption = ProtocolName;
|
|
|
+ std::unique_ptr<TCanvas> Canvas(CreateControlCanvas(SessionStatusBar));
|
|
|
+ ProtocolStatusPanel->Size = Canvas->TextWidth(ProtocolName) + ScaleByTextHeight(SessionStatusBar, 32);
|
|
|
}
|
|
|
+ ProtocolStatusPanel->Hint = ProtocolNameHint;
|
|
|
|
|
|
- if (FileSystemInfo.ProtocolName.IsEmpty())
|
|
|
+ TTBXStatusPanel * SecurityStatusPanel = SessionStatusBar->Panels->Items[Offset + 1];
|
|
|
+ SecurityStatusPanel->ViewPriority = OpenedTerminal ? 98 : 0;
|
|
|
+ bool SecurityEnabled = !SecurityProtocolName.IsEmpty();
|
|
|
+ SecurityStatusPanel->Enabled = SecurityEnabled;
|
|
|
+ UnicodeString SecurityProtocolHint;
|
|
|
+ if (SecurityEnabled)
|
|
|
{
|
|
|
- SessionStatusBar->Panels->Items[Offset + 1]->Caption = SessionInfo.ProtocolName;
|
|
|
+ SecurityProtocolHint = FMTLOAD(STATUS_SECURE, (SecurityProtocolName));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- SessionStatusBar->Panels->Items[Offset + 1]->Caption = FileSystemInfo.ProtocolName;
|
|
|
+ SecurityProtocolHint = LoadStr(STATUS_INSECURE);
|
|
|
}
|
|
|
- SessionStatusBar->Panels->Items[Offset + 1]->Hint = LoadStr(STATUS_PROTOCOL_HINT);
|
|
|
+ SecurityStatusPanel->Hint = SecurityProtocolHint;
|
|
|
|
|
|
- SessionStatusBar->Panels->Items[Offset + 2]->Enabled =
|
|
|
- (!SessionInfo.CSCompression.IsEmpty() || !SessionInfo.SCCompression.IsEmpty());
|
|
|
- UnicodeString CSCompressionStr = DefaultStr(SessionInfo.CSCompression, LoadStr(NO_STR));
|
|
|
- UnicodeString SCCompressionStr = DefaultStr(SessionInfo.SCCompression, LoadStr(NO_STR));
|
|
|
- UnicodeString CompressionStr = CSCompressionStr;
|
|
|
- if (CSCompressionStr != SCCompressionStr)
|
|
|
- {
|
|
|
- CompressionStr += UnicodeString(L"/") + SCCompressionStr;
|
|
|
- }
|
|
|
- SessionStatusBar->Panels->Items[Offset + 2]->Hint = FMTLOAD(STATUS_COMPRESSION_HINT, (CompressionStr));
|
|
|
-
|
|
|
- SessionStatusBar->Panels->Items[Offset + 3]->Hint = LoadStr(STATUS_DURATION_HINT);
|
|
|
+ TTBXStatusPanel * DurationStatusPanel = SessionStatusBar->Panels->Items[Offset + 2];
|
|
|
+ DurationStatusPanel->ViewPriority = OpenedTerminal ? 99 : 0;
|
|
|
+ DurationStatusPanel->Hint = DurationHint;
|
|
|
|
|
|
UpdateStatusBar();
|
|
|
}
|
|
|
@@ -4597,33 +4622,29 @@ void __fastcall TCustomScpExplorerForm::UpdateStatusBar()
|
|
|
{
|
|
|
TTBXStatusBar * SessionStatusBar = (TTBXStatusBar *)GetComponent(fcStatusBar);
|
|
|
DebugAssert(SessionStatusBar != NULL);
|
|
|
- if (!HasActiveTerminal() || (Terminal->Status < ssOpened))
|
|
|
+
|
|
|
+ TTBXStatusPanel * NoteStatusPanel = SessionStatusBar->Panels->Items[0];
|
|
|
+ if (!FNote.IsEmpty())
|
|
|
{
|
|
|
- // note: (Terminal->Status < sshReady) currently never happens here,
|
|
|
- // so STATUS_CONNECTING is never used
|
|
|
- SessionStatusBar->SimplePanel = true;
|
|
|
- SessionStatusBar->SimpleText = LoadStr(
|
|
|
- !HasActiveTerminal() ? STATUS_NOT_CONNECTED : STATUS_CONNECTING);
|
|
|
+ NoteStatusPanel->Caption = FNote;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- DebugAssert(Terminal);
|
|
|
- SessionStatusBar->SimplePanel = false;
|
|
|
- const TSessionInfo & SessionInfo = Terminal->GetSessionInfo();
|
|
|
-
|
|
|
- if (!FNote.IsEmpty())
|
|
|
- {
|
|
|
- SessionStatusBar->Panels->Items[0]->Caption = FNote;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- UpdateStatusPanelText(SessionStatusBar->Panels->Items[0]);
|
|
|
- }
|
|
|
+ UpdateStatusPanelText(NoteStatusPanel);
|
|
|
+ }
|
|
|
+ NoteStatusPanel->Hint = FNoteHints;
|
|
|
|
|
|
- SessionStatusBar->Panels->Items[SessionStatusBar->Panels->Count - 1]->Caption =
|
|
|
- FormatDateTimeSpan(Configuration->TimeFormat, Now() - SessionInfo.LoginTime);
|
|
|
+ UnicodeString LoginTime;
|
|
|
+ // See the comment in TScpCommanderForm::UpdateControls()
|
|
|
+ TTerminal * ActiveTerminal = TTerminalManager::Instance()->ActiveTerminal;
|
|
|
+ // Active is not enough here
|
|
|
+ if ((ActiveTerminal != NULL) && (ActiveTerminal->Status == ssOpened))
|
|
|
+ {
|
|
|
+ const TSessionInfo & SessionInfo = ActiveTerminal->GetSessionInfo();
|
|
|
+ LoginTime = FormatDateTimeSpan(Configuration->TimeFormat, Now() - SessionInfo.LoginTime);
|
|
|
}
|
|
|
- SessionStatusBar->Panels->Items[0]->Hint = FNoteHints;
|
|
|
+ TTBXStatusPanel * DurationStatusPanel = SessionStatusBar->Panels->Items[SessionStatusBar->Panels->Count - 1];
|
|
|
+ DurationStatusPanel->Caption = LoginTime;
|
|
|
}
|
|
|
//---------------------------------------------------------------------------
|
|
|
void __fastcall TCustomScpExplorerForm::UpdateStatusPanelText(TTBXStatusPanel * Panel)
|
|
|
@@ -4908,9 +4929,15 @@ void __fastcall TCustomScpExplorerForm::TerminalDisconnected()
|
|
|
DetachTerminal(Terminal);
|
|
|
RemoteDirView->Terminal = Terminal;
|
|
|
UpdateRemotePathComboBox(false);
|
|
|
+ InitStatusBar();
|
|
|
UpdateControls();
|
|
|
}
|
|
|
//---------------------------------------------------------------------------
|
|
|
+void __fastcall TCustomScpExplorerForm::TerminalConnecting()
|
|
|
+{
|
|
|
+ InitStatusBar();
|
|
|
+}
|
|
|
+//---------------------------------------------------------------------------
|
|
|
void __fastcall TCustomScpExplorerForm::ReconnectSession()
|
|
|
{
|
|
|
if (DebugAlwaysTrue(!Terminal->Active))
|
|
|
@@ -7104,6 +7131,7 @@ void __fastcall TCustomScpExplorerForm::UpdatePixelsPerInchMainWindowCounter()
|
|
|
void __fastcall TCustomScpExplorerForm::StartingDisconnected()
|
|
|
{
|
|
|
DoTerminalListChanged();
|
|
|
+ InitStatusBar();
|
|
|
UpdateControls();
|
|
|
}
|
|
|
//---------------------------------------------------------------------------
|
|
|
@@ -9495,7 +9523,8 @@ void __fastcall TCustomScpExplorerForm::StatusBarPanelDblClick(
|
|
|
OnNoteClick(NoteData.get());
|
|
|
}
|
|
|
}
|
|
|
- if (Panel->Index >= Sender->Panels->Count - SessionPanelCount)
|
|
|
+ if (HasActiveTerminal() &&
|
|
|
+ (Panel->Index >= Sender->Panels->Count - SessionPanelCount))
|
|
|
{
|
|
|
FileSystemInfo();
|
|
|
}
|