Browse Source

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

Source commit: fe877066845f2b7b6a323fca8bdf165c6e77eb33
Martin Prikryl 5 years ago
parent
commit
3241540ae8

+ 86 - 57
source/forms/CustomScpExplorer.cpp

@@ -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();
   }

+ 1 - 0
source/forms/CustomScpExplorer.h

@@ -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,

+ 1 - 1
source/forms/Glyphs.dfm

@@ -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

+ 1 - 8
source/forms/ScpCommander.dfm

@@ -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

+ 1 - 8
source/forms/ScpExplorer.dfm

@@ -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

+ 1 - 1
source/resource/TextsWin.h

@@ -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

+ 1 - 1
source/resource/TextsWin1.rc

@@ -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"

+ 1 - 1
source/windows/TerminalManager.cpp

@@ -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)