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

Status bar works better in local-local mode and when session is disconnected + Removing the "compression" indicator from the status bar

Source commit: fe877066845f2b7b6a323fca8bdf165c6e77eb33
This commit is contained in:
Martin Prikryl
2020-09-24 15:12:50 +00:00
parent d951f87ce8
commit 3241540ae8
8 changed files with 96 additions and 80 deletions

View File

@@ -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
TTBXStatusPanel * ProtocolStatusPanel = SessionStatusBar->Panels->Items[Offset + 0];
ProtocolStatusPanel->ViewPriority = (ActiveTerminal != NULL) ? 100 : 0;
if (ProtocolStatusPanel->Caption != ProtocolName)
{
ProtocolStatusPanel->Caption = ProtocolName;
std::unique_ptr<TCanvas> Canvas(CreateControlCanvas(SessionStatusBar));
ProtocolStatusPanel->Size = Canvas->TextWidth(ProtocolName) + ScaleByTextHeight(SessionStatusBar, 32);
}
ProtocolStatusPanel->Hint = ProtocolNameHint;
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 + 0]->Hint =
FMTLOAD(STATUS_SECURE, (SessionInfo.SecurityProtocolName));
SecurityProtocolHint = FMTLOAD(STATUS_SECURE, (SecurityProtocolName));
}
else
{
SessionStatusBar->Panels->Items[Offset + 0]->Hint = LoadStr(STATUS_INSECURE);
SecurityProtocolHint = LoadStr(STATUS_INSECURE);
}
SecurityStatusPanel->Hint = SecurityProtocolHint;
if (FileSystemInfo.ProtocolName.IsEmpty())
{
SessionStatusBar->Panels->Items[Offset + 1]->Caption = SessionInfo.ProtocolName;
}
else
{
SessionStatusBar->Panels->Items[Offset + 1]->Caption = FileSystemInfo.ProtocolName;
}
SessionStatusBar->Panels->Items[Offset + 1]->Hint = LoadStr(STATUS_PROTOCOL_HINT);
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]);
}
SessionStatusBar->Panels->Items[SessionStatusBar->Panels->Count - 1]->Caption =
FormatDateTimeSpan(Configuration->TimeFormat, Now() - SessionInfo.LoginTime);
UpdateStatusPanelText(NoteStatusPanel);
}
SessionStatusBar->Panels->Items[0]->Hint = FNoteHints;
NoteStatusPanel->Hint = FNoteHints;
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);
}
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();
}

View File

@@ -792,6 +792,7 @@ public:
void __fastcall LastTerminalClosed(TObject * Sender);
void __fastcall TerminalRemoved(TObject * Sender);
void __fastcall TerminalDisconnected();
void __fastcall TerminalConnecting();
void __fastcall TerminalListChanged(TObject * Sender);
void __fastcall ApplicationTitleChanged();
unsigned int __fastcall MoreMessageDialog(const UnicodeString Message,

View File

@@ -10982,7 +10982,7 @@ object GlyphsModule: TGlyphsModule
PngImages = <
item
Background = clWindow
Name = 'Compressed connection status bar indicator'
Name = 'Compressed connection status bar indicator (not in use)'
PngImage.Data = {
89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
61000000097048597300000EC400000EC401952B0E1B00000A4F694343505068

View File

@@ -1874,13 +1874,6 @@ inherited ScpCommanderForm: TScpCommanderForm
Tag = 0
TextTruncation = twEndEllipsis
end
item
Alignment = taCenter
ImageIndex = 1
MaxSize = 35
Size = 35
Tag = 0
end
item
Alignment = taCenter
MaxSize = 70
@@ -1891,7 +1884,7 @@ inherited ScpCommanderForm: TScpCommanderForm
end
item
Alignment = taCenter
ImageIndex = 0
ImageIndex = 1
MaxSize = 35
Size = 35
Tag = 0

View File

@@ -1068,13 +1068,6 @@ inherited ScpExplorerForm: TScpExplorerForm
Tag = 0
TextTruncation = twEndEllipsis
end
item
Alignment = taCenter
ImageIndex = 1
MaxSize = 35
Size = 35
Tag = 0
end
item
Alignment = taCenter
MaxSize = 70
@@ -1085,7 +1078,7 @@ inherited ScpExplorerForm: TScpExplorerForm
end
item
Alignment = taCenter
ImageIndex = 0
ImageIndex = 1
MaxSize = 35
Size = 35
Tag = 0

View File

@@ -316,7 +316,7 @@
#define NEW_FOLDER 1621
#define SELECT_MASK_DESELECT_CAPTION 1624
#define SELECT_MASK_SELECT_CAPTION 1625
#define STATUS_NOT_CONNECTED 1675
#define STATUS_NOT_CONNECTED2 1675
#define STATUS_CONNECTING 1676
#define PROPERTIES_FILE 1626
#define PROPERTIES_FILES 1627

View File

@@ -352,7 +352,7 @@ BEGIN
EDITOR_INVALID_LINE, "Invalid line number."
LINK_EDIT_CAPTION, "Edit link/shortcut"
LINK_ADD_CAPTION, "Add link/shortcut"
STATUS_NOT_CONNECTED, "Not connected."
STATUS_NOT_CONNECTED2, "Not connected"
STATUS_CONNECTING, "Connecting..."
OPENEDSESSION_HINT, "Select session '%s'"
ADD_BOOKMARK_CAPTION, "Add Location Profile"

View File

@@ -1267,7 +1267,7 @@ void __fastcall TTerminalManager::AuthenticatingDone()
void __fastcall TTerminalManager::TerminalInformation(
TTerminal * Terminal, const UnicodeString & Str, bool /*Status*/, int Phase)
{
ScpExplorer->TerminalConnecting();
if (Phase == 1)
{
if (FAuthenticating == 0)