Browse Source

Bug 2196: Automatically size file panel columns

https://winscp.net/tracker/2196

Source commit: 3ff10bcbf29d7b3083f240348c459c1a70e7d63e
Martin Prikryl 2 years ago
parent
commit
36e7719c62

+ 14 - 0
source/forms/CustomScpExplorer.cpp

@@ -11943,3 +11943,17 @@ void __fastcall TCustomScpExplorerForm::MessageDockRequestDock(TObject *, TTBCus
   Accept = false;
 }
 //---------------------------------------------------------------------------
+void TCustomScpExplorerForm::AutoSizeColumns(TOperationSide Side)
+{
+  // Send Ctrl+Gray+ to the list view
+  TKeyboardState KeyState;
+  GetKeyboardState(KeyState);
+  TKeyboardState NewKeyState;
+  memset(NewKeyState, 0, sizeof(NewKeyState));
+  NewKeyState[VK_CONTROL] = 0x81;
+  SetKeyboardState(NewKeyState);
+
+  SendMessage(DirView(Side)->Handle, WM_KEYDOWN, VK_ADD, 0);
+  SetKeyboardState(KeyState);
+}
+//---------------------------------------------------------------------------

+ 1 - 0
source/forms/CustomScpExplorer.h

@@ -906,6 +906,7 @@ public:
   virtual int GetNewTabActionImageIndex();
   virtual int GetNewTabTabImageIndex(TOperationSide Side);
   void CalculateDirectorySizes(TOperationSide Side);
+  void AutoSizeColumns(TOperationSide Side);
 
   __property bool ComponentVisible[Byte Component] = { read = GetComponentVisible, write = SetComponentVisible };
   __property bool EnableFocusedOperation[TOperationSide Side] = { read = GetEnableFocusedOperation, index = 0 };

+ 4 - 2
source/forms/NonVisual.cpp

@@ -388,6 +388,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
   UPDEX(SortColumnDescendingAction, (ListColumn != NULL), SortColumnDescendingAction->Checked =
     (COLVIEWPROPS->SortColumn == ListColumn->Index) && !COLVIEWPROPS->SortAscending, )
   #undef COLVIEWPROPS
+  UPD(AutoSizeLocalColumnsAction, DirViewEnabled(osLocal));
+  UPD(AutoSizeRemoteColumnsAction, DirViewEnabled(osRemote));
 
   // SHOW/HIDE COLUMN
   #define UPDSHCOLL(NAME) UPDSHCOL(Local, NAME, dv ## NAME, -1)
@@ -408,7 +410,6 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
   UPDSHCOL(Remote, LinkTarget, -1, uvLinkTarget)
   UPDSHCOL(Remote, Type, dvType, uvType)
   UPD(HideColumnAction, (ListColumn != NULL))
-  UPD(BestFitColumnAction, (ListColumn != NULL))
 
   // SESSION
   UPDACT(NewTabAction, Action->ImageIndex = ScpExplorer->GetNewTabActionImageIndex())
@@ -729,6 +730,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsExecute(
       COLVIEWPROPS->SortColumn = ListColumn->Index; COLVIEWPROPS->SortAscending = true; ListColumn = NULL )
     EXE(SortColumnDescendingAction, DebugAssert(ListColumn);
       COLVIEWPROPS->SortColumn = ListColumn->Index; COLVIEWPROPS->SortAscending = false; ListColumn = NULL )
+    EXE(AutoSizeLocalColumnsAction, ScpExplorer->AutoSizeColumns(osLocal))
+    EXE(AutoSizeRemoteColumnsAction, ScpExplorer->AutoSizeColumns(osRemote))
 
     // SHOW/HIDE COLUMN
     #define EXESHCOLL(NAME) EXESHCOL(Local, NAME, dv ## NAME, -1)
@@ -750,7 +753,6 @@ void __fastcall TNonVisualDataModule::ExplorerActionsExecute(
     EXESHCOL(Remote, Type, dvType, uvType)
     EXE(HideColumnAction, DebugAssert(ListColumn);
       COLVIEWPROPS->Visible[ListColumn->Index] = false; ListColumn = NULL )
-    EXE(BestFitColumnAction, DebugAssert(ListColumn); ListColumn = NULL ) // TODO
     #undef COLVIEWPROPS
 
     // SESSION

+ 28 - 10
source/forms/NonVisual.dfm

@@ -86,6 +86,14 @@ object NonVisualDataModule: TNonVisualDataModule
     OnUpdate = ExplorerActionsUpdate
     Left = 440
     Top = 24
+    object AutoSizeRemoteColumnsAction: TAction
+      Tag = 12
+      Category = 'Columns'
+      Caption = 'Size &Automatically'
+      HelpKeyword = 'ui_file_panel#selecting_columns'
+      Hint = 'Adjust columns width to fit their contents'
+      ShortCut = 16491
+    end
     object RemoteCopyQueueAction: TAction
       Tag = 14
       Category = 'Remote Selected Operation'
@@ -188,11 +196,13 @@ object NonVisualDataModule: TNonVisualDataModule
       Hint = 'Download|Download selected remote file(s) to local directory'
       ImageIndex = 89
     end
-    object BestFitColumnAction: TAction
-      Tag = 15
+    object AutoSizeLocalColumnsAction: TAction
+      Tag = 8
       Category = 'Columns'
-      Caption = '&Best Fit'
-      Hint = 'Best fit|Adjust column width to fit its content'
+      Caption = 'Size &Automatically'
+      HelpKeyword = 'ui_file_panel#selecting_columns'
+      Hint = 'Adjust columns width to fit their contents'
+      ShortCut = 16491
     end
     object GoToTreeAction: TAction
       Tag = 15
@@ -2860,10 +2870,9 @@ object NonVisualDataModule: TNonVisualDataModule
     end
     object TBXSeparatorItem8: TTBXSeparatorItem
     end
-    object Showcolumns3: TTBXSubmenuItem
-      Caption = 'Show &Columns'
+    object LocalColumnsSubmenuItem: TTBXSubmenuItem
+      Caption = '&Columns'
       HelpKeyword = 'ui_file_panel#selecting_columns'
-      Hint = 'Select columns to show in panel'
       object Name3: TTBXItem
         Action = ShowHideLocalNameColumnAction2
       end
@@ -2879,6 +2888,11 @@ object NonVisualDataModule: TNonVisualDataModule
       object Attributes3: TTBXItem
         Action = ShowHideLocalAttrColumnAction2
       end
+      object TBXSeparatorItem73: TTBXSeparatorItem
+      end
+      object TBXItem264: TTBXItem
+        Action = AutoSizeLocalColumnsAction
+      end
     end
   end
   object RemoteDirViewColumnPopup: TTBXPopupMenu
@@ -2921,10 +2935,9 @@ object NonVisualDataModule: TNonVisualDataModule
     end
     object TBXSeparatorItem7: TTBXSeparatorItem
     end
-    object Showcolumns4: TTBXSubmenuItem
-      Caption = 'Show &Columns'
+    object RemoteColumnsSubmenuItem: TTBXSubmenuItem
+      Caption = '&Columns'
       HelpKeyword = 'ui_file_panel#selecting_columns'
-      Hint = 'Select columns to show in panel'
       object Name4: TTBXItem
         Action = ShowHideRemoteNameColumnAction2
       end
@@ -2949,6 +2962,11 @@ object NonVisualDataModule: TNonVisualDataModule
       object TBXItem1: TTBXItem
         Action = ShowHideRemoteLinkTargetColumnAction2
       end
+      object TBXSeparatorItem20: TTBXSeparatorItem
+      end
+      object TBXItem114: TTBXItem
+        Action = AutoSizeRemoteColumnsAction
+      end
     end
   end
   object QueuePopup: TTBXPopupMenu

+ 8 - 3
source/forms/NonVisual.h

@@ -336,7 +336,7 @@ __published:    // IDE-managed Components
   TTBXItem *SortDescending1;
   TTBXItem *Hidecolumn1;
   TTBXSeparatorItem *N37;
-  TTBXSubmenuItem *Showcolumns3;
+  TTBXSubmenuItem *LocalColumnsSubmenuItem;
   TTBXItem *Name3;
   TTBXItem *Size3;
   TTBXItem *Type2;
@@ -347,7 +347,7 @@ __published:    // IDE-managed Components
   TTBXItem *MenuItem2;
   TTBXItem *Hidecolumn2;
   TTBXSeparatorItem *N38;
-  TTBXSubmenuItem *Showcolumns4;
+  TTBXSubmenuItem *RemoteColumnsSubmenuItem;
   TTBXItem *Name4;
   TTBXItem *Size4;
   TTBXItem *Modification4;
@@ -411,7 +411,7 @@ __published:    // IDE-managed Components
   TTBXItem *TBXItem4;
   TTBXItem *TBXItem5;
   TAction *PresetsPreferencesAction;
-  TAction *BestFitColumnAction;
+  TAction *AutoSizeLocalColumnsAction;
   TAction *CustomCommandsEnterAction;
   TAction *LockToolbarsAction;
   TTBXItem *TBXItem6;
@@ -698,6 +698,11 @@ __published:    // IDE-managed Components
   TAction *RemoteOtherDirAction;
   TTBXItem *TBXItem109;
   TTBXItem *TBXItem113;
+  TAction *AutoSizeRemoteColumnsAction;
+  TTBXSeparatorItem *TBXSeparatorItem73;
+  TTBXItem *TBXItem264;
+  TTBXSeparatorItem *TBXSeparatorItem20;
+  TTBXItem *TBXItem114;
   void __fastcall ExplorerActionsUpdate(TBasicAction *Action, bool &Handled);
   void __fastcall ExplorerActionsExecute(TBasicAction *Action, bool &Handled);
   void __fastcall SessionIdleTimerTimer(TObject *Sender);

+ 14 - 6
source/forms/ScpCommander.dfm

@@ -133,10 +133,9 @@ inherited ScpCommanderForm: TScpCommanderForm
             RadioItem = True
           end
         end
-        object TBXSubmenuItem4: TTBXSubmenuItem
-          Caption = 'S&how Columns'
+        object LocalColumnsSubmenuItem: TTBXSubmenuItem
+          Caption = '&Columns'
           HelpKeyword = 'ui_file_panel#selecting_columns'
-          Hint = 'Select columns to show in panel'
           object TBXItem19: TTBXItem
             Action = NonVisualDataModule.ShowHideLocalNameColumnAction2
           end
@@ -152,6 +151,11 @@ inherited ScpCommanderForm: TScpCommanderForm
           object TBXItem23: TTBXItem
             Action = NonVisualDataModule.ShowHideLocalAttrColumnAction2
           end
+          object TBXSeparatorItem72: TTBXSeparatorItem
+          end
+          object TBXItem263: TTBXItem
+            Action = NonVisualDataModule.AutoSizeLocalColumnsAction
+          end
         end
         object TBXItem221: TTBXItem
           Action = NonVisualDataModule.LocalFilterAction
@@ -748,10 +752,9 @@ inherited ScpCommanderForm: TScpCommanderForm
             RadioItem = True
           end
         end
-        object TBXSubmenuItem17: TTBXSubmenuItem
-          Caption = 'S&how Columns'
+        object RemoteColumnsSubmenuItem: TTBXSubmenuItem
+          Caption = '&Columns'
           HelpKeyword = 'ui_file_panel#selecting_columns'
-          Hint = 'Select columns to show in panel'
           object TBXItem101: TTBXItem
             Action = NonVisualDataModule.ShowHideRemoteNameColumnAction2
           end
@@ -776,6 +779,11 @@ inherited ScpCommanderForm: TScpCommanderForm
           object TBXItem179: TTBXItem
             Action = NonVisualDataModule.ShowHideRemoteLinkTargetColumnAction2
           end
+          object TBXSeparatorItem73: TTBXSeparatorItem
+          end
+          object TBXItem264: TTBXItem
+            Action = NonVisualDataModule.AutoSizeRemoteColumnsAction
+          end
         end
         object TBXItem220: TTBXItem
           Action = NonVisualDataModule.RemoteFilterAction

+ 6 - 2
source/forms/ScpCommander.h

@@ -108,7 +108,7 @@ __published:
   TTBXItem *TBXItem16;
   TTBXItem *TBXItem17;
   TTBXItem *TBXItem18;
-  TTBXSubmenuItem *TBXSubmenuItem4;
+  TTBXSubmenuItem *LocalColumnsSubmenuItem;
   TTBXItem *TBXItem19;
   TTBXItem *TBXItem20;
   TTBXItem *TBXItem21;
@@ -233,7 +233,7 @@ __published:
   TTBXItem *TBXItem98;
   TTBXItem *TBXItem99;
   TTBXItem *TBXItem100;
-  TTBXSubmenuItem *TBXSubmenuItem17;
+  TTBXSubmenuItem *RemoteColumnsSubmenuItem;
   TTBXItem *TBXItem101;
   TTBXItem *TBXItem102;
   TTBXItem *TBXItem103;
@@ -460,6 +460,10 @@ __published:
   TTBXItem *TBXItem260;
   TTBXItem *TBXItem261;
   TTBXItem *TBXItem262;
+  TTBXSeparatorItem *TBXSeparatorItem72;
+  TTBXItem *TBXItem263;
+  TTBXSeparatorItem *TBXSeparatorItem73;
+  TTBXItem *TBXItem264;
   void __fastcall SplitterMoved(TObject *Sender);
   void __fastcall SplitterCanResize(TObject *Sender, int &NewSize,
     bool &Accept);

+ 7 - 3
source/forms/ScpExplorer.dfm

@@ -540,10 +540,9 @@ inherited ScpExplorerForm: TScpExplorerForm
             GroupIndex = 1
           end
         end
-        object TBXSubmenuItem17: TTBXSubmenuItem
-          Caption = 'Show &Columns'
+        object ColumndsSubmenuItem: TTBXSubmenuItem
+          Caption = '&Columns'
           HelpKeyword = 'ui_file_panel#selecting_columns'
-          Hint = 'Select columns to show in panel'
           object TBXItem101: TTBXItem
             Action = NonVisualDataModule.ShowHideRemoteNameColumnAction2
           end
@@ -568,6 +567,11 @@ inherited ScpExplorerForm: TScpExplorerForm
           object TBXItem76: TTBXItem
             Action = NonVisualDataModule.ShowHideRemoteLinkTargetColumnAction2
           end
+          object TBXSeparatorItem73: TTBXSeparatorItem
+          end
+          object TBXItem264: TTBXItem
+            Action = NonVisualDataModule.AutoSizeRemoteColumnsAction
+          end
         end
         object TBXItem138: TTBXItem
           Action = NonVisualDataModule.RemoteFilterAction

+ 3 - 1
source/forms/ScpExplorer.h

@@ -113,7 +113,7 @@ __published:
   TTBXItem *TBXItem98;
   TTBXItem *TBXItem99;
   TTBXItem *TBXItem100;
-  TTBXSubmenuItem *TBXSubmenuItem17;
+  TTBXSubmenuItem *ColumndsSubmenuItem;
   TTBXItem *TBXItem101;
   TTBXItem *TBXItem102;
   TTBXItem *TBXItem103;
@@ -331,6 +331,8 @@ __published:
   TTBXSeparatorItem *TBXSeparatorItem29;
   TTBXItem *TBXItem90;
   TTBXSeparatorItem *TBXSeparatorItem50;
+  TTBXSeparatorItem *TBXSeparatorItem73;
+  TTBXItem *TBXItem264;
   void __fastcall RemoteDirViewUpdateStatusBar(TObject *Sender,
           const TStatusFileInfo &FileInfo);
   void __fastcall UnixPathComboBoxBeginEdit(TTBEditItem *Sender,