Jelajahi Sumber

Commands to reset layout of file panels and background transfer queue list columns

Source commit: c379a44054a7f8ec3a76d7e514e2a9402b922326
Martin Prikryl 2 tahun lalu
induk
melakukan
374643000a

+ 4 - 0
source/forms/CustomScpExplorer.cpp

@@ -11957,3 +11957,7 @@ void TCustomScpExplorerForm::AutoSizeColumns(TOperationSide Side)
   SetKeyboardState(KeyState);
 }
 //---------------------------------------------------------------------------
+void TCustomScpExplorerForm::QueueResetLayoutColumns()
+{
+  LoadListViewStr(QueueView3, QueueViewLayoutDefault);
+}

+ 2 - 0
source/forms/CustomScpExplorer.h

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

+ 6 - 0
source/forms/NonVisual.cpp

@@ -390,6 +390,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
   #undef COLVIEWPROPS
   UPD(AutoSizeLocalColumnsAction, DirViewEnabled(osLocal));
   UPD(AutoSizeRemoteColumnsAction, DirViewEnabled(osRemote));
+  UPD(ResetLayoutLocalColumnsAction, true);
+  UPD(ResetLayoutRemoteColumnsAction, true);
 
   // SHOW/HIDE COLUMN
   #define UPDSHCOLL(NAME) UPDSHCOL(Local, NAME, dv ## NAME, -1)
@@ -505,6 +507,7 @@ void __fastcall TNonVisualDataModule::ExplorerActionsUpdate(
   UPDACT(QueueFileListAction,
     Action->Enabled = ScpExplorer->ComponentVisible[fcQueueView];
     Action->Checked = ScpExplorer->ComponentVisible[fcQueueFileList])
+  UPD(QueueResetLayoutColumnsAction, ScpExplorer->ComponentVisible[fcQueueView]);
   ;
 }
 //---------------------------------------------------------------------------
@@ -732,6 +735,8 @@ void __fastcall TNonVisualDataModule::ExplorerActionsExecute(
       COLVIEWPROPS->SortColumn = ListColumn->Index; COLVIEWPROPS->SortAscending = false; ListColumn = NULL )
     EXE(AutoSizeLocalColumnsAction, ScpExplorer->AutoSizeColumns(osLocal))
     EXE(AutoSizeRemoteColumnsAction, ScpExplorer->AutoSizeColumns(osRemote))
+    EXE(ResetLayoutLocalColumnsAction, ScpExplorer->ResetLayoutColumns(osLocal))
+    EXE(ResetLayoutRemoteColumnsAction, ScpExplorer->ResetLayoutColumns(osRemote))
 
     // SHOW/HIDE COLUMN
     #define EXESHCOLL(NAME) EXESHCOL(Local, NAME, dv ## NAME, -1)
@@ -834,6 +839,7 @@ void __fastcall TNonVisualDataModule::ExplorerActionsExecute(
     EXE(QueueShutDownOnceEmptyAction2, SetQueueOnceEmptyAction(QueueShutDownOnceEmptyAction2))
     EXECOMP(QueueToolbar)
     EXECOMP(QueueFileList)
+    EXE(QueueResetLayoutColumnsAction, ScpExplorer->QueueResetLayoutColumns());
     EXE(QueueItemSpeedAction, )
     ;
   }

+ 31 - 0
source/forms/NonVisual.dfm

@@ -204,6 +204,13 @@ object NonVisualDataModule: TNonVisualDataModule
       Hint = 'Adjust columns width to fit their contents'
       ShortCut = 16491
     end
+    object ResetLayoutRemoteColumnsAction: TAction
+      Tag = 15
+      Category = 'Columns'
+      Caption = '&Reset Layout'
+      HelpKeyword = 'ui_file_panel#selecting_columns'
+      Hint = 'Reset to the default layout of file panel columns'
+    end
     object GoToTreeAction: TAction
       Tag = 15
       Category = 'View'
@@ -239,6 +246,13 @@ object NonVisualDataModule: TNonVisualDataModule
       Hint = 'Show pending query of selected queue item'
       ImageIndex = 67
     end
+    object ResetLayoutLocalColumnsAction: TAction
+      Tag = 15
+      Category = 'Columns'
+      Caption = '&Reset Layout'
+      HelpKeyword = 'ui_file_panel#selecting_columns'
+      Hint = 'Reset to the default layout of file panel columns'
+    end
     object QueueItemErrorAction: TAction
       Tag = 12
       Category = 'Queue'
@@ -1625,6 +1639,12 @@ object NonVisualDataModule: TNonVisualDataModule
       Caption = '&File List'
       Hint = 'Hide/show full queue file list'
     end
+    object QueueResetLayoutColumnsAction: TAction
+      Tag = 12
+      Category = 'Queue'
+      Caption = '&Reset Columns Layout'
+      Hint = 'Reset to the default layout of list columns'
+    end
     object QueuePreferencesAction: TAction
       Tag = 12
       Category = 'Queue'
@@ -2893,6 +2913,9 @@ object NonVisualDataModule: TNonVisualDataModule
       object TBXItem264: TTBXItem
         Action = AutoSizeLocalColumnsAction
       end
+      object TBXItem112: TTBXItem
+        Action = ResetLayoutLocalColumnsAction
+      end
     end
   end
   object RemoteDirViewColumnPopup: TTBXPopupMenu
@@ -2967,6 +2990,9 @@ object NonVisualDataModule: TNonVisualDataModule
       object TBXItem114: TTBXItem
         Action = AutoSizeRemoteColumnsAction
       end
+      object TBXItem115: TTBXItem
+        Action = ResetLayoutRemoteColumnsAction
+      end
     end
   end
   object QueuePopup: TTBXPopupMenu
@@ -3079,6 +3105,11 @@ object NonVisualDataModule: TNonVisualDataModule
       object TBXItem83: TTBXItem
         Action = QueueFileListAction
       end
+      object TBXSeparatorItem23: TTBXSeparatorItem
+      end
+      object TBXItem116: TTBXItem
+        Action = QueueResetLayoutColumnsAction
+      end
       object N65: TTBXSeparatorItem
       end
       object Customize3: TTBXItem

+ 7 - 0
source/forms/NonVisual.h

@@ -703,6 +703,13 @@ __published:    // IDE-managed Components
   TTBXItem *TBXItem264;
   TTBXSeparatorItem *TBXSeparatorItem20;
   TTBXItem *TBXItem114;
+  TAction *ResetLayoutRemoteColumnsAction;
+  TAction *ResetLayoutLocalColumnsAction;
+  TTBXItem *TBXItem112;
+  TTBXItem *TBXItem115;
+  TAction *QueueResetLayoutColumnsAction;
+  TTBXSeparatorItem *TBXSeparatorItem23;
+  TTBXItem *TBXItem116;
   void __fastcall ExplorerActionsUpdate(TBasicAction *Action, bool &Handled);
   void __fastcall ExplorerActionsExecute(TBasicAction *Action, bool &Handled);
   void __fastcall SessionIdleTimerTimer(TObject *Sender);

+ 8 - 0
source/forms/ScpCommander.cpp

@@ -2950,3 +2950,11 @@ bool TScpCommanderForm::SupportedSession(TSessionData *)
 {
   return true;
 }
+//---------------------------------------------------------------------------
+void TScpCommanderForm::ResetLayoutColumns(TOperationSide Side)
+{
+  UnicodeString DirViewParamsDefault =
+    IsSideLocalBrowser(Side) ? ScpCommanderLocalPanelDirViewParamsDefault : ScpCommanderRemotePanelDirViewParamsDefault;
+
+  DirView(Side)->ColProperties->ParamsStr = DirViewParamsDefault;
+}

+ 11 - 0
source/forms/ScpCommander.dfm

@@ -156,6 +156,9 @@ inherited ScpCommanderForm: TScpCommanderForm
           object TBXItem263: TTBXItem
             Action = NonVisualDataModule.AutoSizeLocalColumnsAction
           end
+          object TBXItem265: TTBXItem
+            Action = NonVisualDataModule.ResetLayoutLocalColumnsAction
+          end
         end
         object TBXItem221: TTBXItem
           Action = NonVisualDataModule.LocalFilterAction
@@ -620,6 +623,11 @@ inherited ScpCommanderForm: TScpCommanderForm
           object TBXItem255: TTBXItem
             Action = NonVisualDataModule.QueueFileListAction
           end
+          object TBXSeparatorItem74: TTBXSeparatorItem
+          end
+          object TBXItem267: TTBXItem
+            Action = NonVisualDataModule.QueueResetLayoutColumnsAction
+          end
           object TBXSeparatorItem22: TTBXSeparatorItem
           end
           object TBXSubmenuItem8: TTBXSubmenuItem
@@ -784,6 +792,9 @@ inherited ScpCommanderForm: TScpCommanderForm
           object TBXItem264: TTBXItem
             Action = NonVisualDataModule.AutoSizeRemoteColumnsAction
           end
+          object TBXItem266: TTBXItem
+            Action = NonVisualDataModule.ResetLayoutRemoteColumnsAction
+          end
         end
         object TBXItem220: TTBXItem
           Action = NonVisualDataModule.RemoteFilterAction

+ 5 - 0
source/forms/ScpCommander.h

@@ -464,6 +464,10 @@ __published:
   TTBXItem *TBXItem263;
   TTBXSeparatorItem *TBXSeparatorItem73;
   TTBXItem *TBXItem264;
+  TTBXItem *TBXItem265;
+  TTBXItem *TBXItem266;
+  TTBXSeparatorItem *TBXSeparatorItem74;
+  TTBXItem *TBXItem267;
   void __fastcall SplitterMoved(TObject *Sender);
   void __fastcall SplitterCanResize(TObject *Sender, int &NewSize,
     bool &Accept);
@@ -687,6 +691,7 @@ public:
   virtual int GetNewTabTabImageIndex(TOperationSide Side);
   virtual UnicodeString __fastcall DefaultDownloadTargetDirectory();
   virtual bool SupportedSession(TSessionData * SessionData);
+  virtual void ResetLayoutColumns(TOperationSide Side);
 
   __property double LeftPanelWidth = { read = GetLeftPanelWidth, write = SetLeftPanelWidth };
 };

+ 4 - 0
source/forms/ScpExplorer.cpp

@@ -430,3 +430,7 @@ void __fastcall TScpExplorerForm::RemoteOpenDirButtonPopup(TTBCustomItem *, bool
   CreateOpenDirMenu(RemoteOpenDirButton, osRemote);
 }
 //---------------------------------------------------------------------------
+void TScpExplorerForm::ResetLayoutColumns(TOperationSide)
+{
+  RemoteDirView->UnixColProperties->ParamsStr = ScpExplorerDirViewParamsDefault;
+}

+ 5 - 0
source/forms/ScpExplorer.dfm

@@ -424,6 +424,11 @@ inherited ScpExplorerForm: TScpExplorerForm
           object TBXItem164: TTBXItem
             Action = NonVisualDataModule.QueueFileListAction
           end
+          object TBXSeparatorItem51: TTBXSeparatorItem
+          end
+          object TBXItem115: TTBXItem
+            Action = NonVisualDataModule.QueueResetLayoutColumnsAction
+          end
           object TBXSeparatorItem22: TTBXSeparatorItem
           end
           object TBXSubmenuItem8: TTBXSubmenuItem

+ 3 - 0
source/forms/ScpExplorer.h

@@ -333,6 +333,8 @@ __published:
   TTBXSeparatorItem *TBXSeparatorItem50;
   TTBXSeparatorItem *TBXSeparatorItem73;
   TTBXItem *TBXItem264;
+  TTBXSeparatorItem *TBXSeparatorItem51;
+  TTBXItem *TBXItem115;
   void __fastcall RemoteDirViewUpdateStatusBar(TObject *Sender,
           const TStatusFileInfo &FileInfo);
   void __fastcall UnixPathComboBoxBeginEdit(TTBEditItem *Sender,
@@ -381,6 +383,7 @@ public:
   virtual void __fastcall GoToAddress();
   virtual UnicodeString __fastcall DefaultDownloadTargetDirectory();
   virtual bool SupportedSession(TSessionData * SessionData);
+  virtual void ResetLayoutColumns(TOperationSide Side);
 };
 //---------------------------------------------------------------------------
 #endif

+ 14 - 1
source/packages/my/ListViewColProperties.pas

@@ -145,20 +145,33 @@ procedure TCustomListViewColProperties.SetWidthsStr(Value: string; PixelsPerInch
 var
   ColStr: string;
   Index: Integer;
+  NeedInvalidate, NewVisible: Boolean;
 begin
   Index := 0;
+  NeedInvalidate := False;
   BeginUpdate;
   try
     while (Value <> '') and (Index < Count) do
     begin
       ColStr := CutToChar(Value, ';', True);
       Widths[Index] := LoadDimension(StrToInt(CutToChar(ColStr, ',', True)), PixelsPerInch, FListView);
-      Visible[Index] := Boolean(StrToInt(CutToChar(ColStr, ',', True)));
+      NewVisible := Boolean(StrToInt(CutToChar(ColStr, ',', True)));
+      if Visible[Index] <> NewVisible then
+      begin
+        Visible[Index] := NewVisible;
+        NeedInvalidate := True;
+      end;
       Inc(Index);
     end;
   finally
     EndUpdate;
   end;
+
+  // When visibility changes (particularly while reseting layout) redraw is needed
+  // (Invalidate is called in SetVisible too, but maybe it has no effect there, because it is within BeginUpdate/EndUpdate)
+  if NeedInvalidate and FListView.HandleAllocated then
+    FListView.Invalidate;
+
 end;
 
 function TCustomListViewColProperties.GetWidthsStr: string;

+ 19 - 9
source/windows/WinConfiguration.cpp

@@ -31,6 +31,13 @@ static UnicodeString NotepadName(L"notepad.exe");
 static UnicodeString ToolbarsLayoutKey(L"ToolbarsLayout2");
 static UnicodeString ToolbarsLayoutOldKey(L"ToolbarsLayout");
 TDateTime DefaultUpdatesPeriod(7);
+// WORKAROUND (the semicolon, see TCustomListViewColProperties.GetParamsStr, and see other instances below)
+const UnicodeString ScpExplorerDirViewParamsDefault =
+  L"0;1;0|150,1;70,1;150,1;79,1;62,1;55,0;20,0;150,0;125,0;@" + SaveDefaultPixelsPerInch() + L"|6;7;8;0;1;2;3;4;5";
+const UnicodeString ScpCommanderRemotePanelDirViewParamsDefault = ScpExplorerDirViewParamsDefault;
+const UnicodeString ScpCommanderLocalPanelDirViewParamsDefault =
+  L"0;1;0|150,1;70,1;120,1;150,1;55,0;55,0;@" + SaveDefaultPixelsPerInch() + L"|5;0;1;2;3;4";
+UnicodeString QueueViewLayoutDefault;
 //---------------------------------------------------------------------------
 static const wchar_t FileColorDataSeparator = L':';
 TFileColorData::TFileColorData() :
@@ -654,11 +661,15 @@ void __fastcall TWinConfiguration::Default()
 
   FQueueView.Height = 140;
   FQueueView.HeightPixelsPerInch = USER_DEFAULT_SCREEN_DPI;
-  // with 1000 pixels wide screen, both interfaces are wide enough to fit wider queue
-  FQueueView.Layout =
-    UnicodeString((WorkAreaWidthScaled > 1000) ? L"70,250,250,80,80,80,100" : L"70,160,160,80,80,80,100") +
-    // WORKAROUND (the comma), see GetListViewStr
-    L",;" + SaveDefaultPixelsPerInch();
+  if (QueueViewLayoutDefault.IsEmpty())
+  {
+    // with 1000 pixels wide screen, both interfaces are wide enough to fit wider queue
+    QueueViewLayoutDefault =
+      UnicodeString((WorkAreaWidthScaled > 1000) ? L"70,250,250,80,80,80,100" : L"70,160,160,80,80,80,100") +
+      // WORKAROUND (the comma), see GetListViewStr
+      L",;" + SaveDefaultPixelsPerInch();
+  }
+  FQueueView.Layout = QueueViewLayoutDefault;
   FQueueView.Show = qvHideWhenEmpty;
   FQueueView.LastHideShow = qvHideWhenEmpty;
   FQueueView.ToolBar = true;
@@ -689,8 +700,7 @@ void __fastcall TWinConfiguration::Default()
   int ExplorerHeight = Min(WorkAreaHeightScaled - 30, 720);
   FScpExplorer.WindowParams = FormatDefaultWindowParams(ExplorerWidth, ExplorerHeight);
 
-  // WORKAROUND (the semicolon, see TCustomListViewColProperties.GetParamsStr, and see other instances below)
-  FScpExplorer.DirViewParams = L"0;1;0|150,1;70,1;150,1;79,1;62,1;55,0;20,0;150,0;125,0;@" + SaveDefaultPixelsPerInch() + L"|6;7;8;0;1;2;3;4;5";
+  FScpExplorer.DirViewParams = ScpExplorerDirViewParamsDefault;
   FScpExplorer.ToolbarsLayout =
     UnicodeString(
       L"Queue=1::0+-1,"
@@ -756,7 +766,7 @@ void __fastcall TWinConfiguration::Default()
   FScpCommander.TreeOnLeft = false;
   FScpCommander.ExplorerKeyboardShortcuts = false;
   FScpCommander.SystemContextMenu = false;
-  FScpCommander.RemotePanel.DirViewParams = L"0;1;0|150,1;70,1;150,1;79,1;62,1;55,0;20,0;150,0;125,0;@" + SaveDefaultPixelsPerInch() + L"|6;7;8;0;1;2;3;4;5";
+  FScpCommander.RemotePanel.DirViewParams = ScpCommanderRemotePanelDirViewParamsDefault;
   FScpCommander.RemotePanel.StatusBar = true;
   FScpCommander.RemotePanel.DriveView = false;
   FScpCommander.RemotePanel.DriveViewHeight = 100;
@@ -764,7 +774,7 @@ void __fastcall TWinConfiguration::Default()
   FScpCommander.RemotePanel.DriveViewWidth = 100;
   FScpCommander.RemotePanel.DriveViewWidthPixelsPerInch = USER_DEFAULT_SCREEN_DPI;
   FScpCommander.RemotePanel.LastPath = UnicodeString();
-  FScpCommander.LocalPanel.DirViewParams = L"0;1;0|150,1;70,1;120,1;150,1;55,0;55,0;@" + SaveDefaultPixelsPerInch() + L"|5;0;1;2;3;4";
+  FScpCommander.LocalPanel.DirViewParams = ScpCommanderLocalPanelDirViewParamsDefault;
   FScpCommander.LocalPanel.StatusBar = true;
   FScpCommander.LocalPanel.DriveView = false;
   FScpCommander.LocalPanel.DriveViewHeight = 100;

+ 4 - 0
source/windows/WinConfiguration.h

@@ -212,6 +212,10 @@ struct TUpdatesData
 //---------------------------------------------------------------------------
 enum TConnectionType { ctDirect, ctAuto, ctProxy };
 extern TDateTime DefaultUpdatesPeriod;
+extern const UnicodeString ScpExplorerDirViewParamsDefault;
+extern const UnicodeString ScpCommanderRemotePanelDirViewParamsDefault;
+extern const UnicodeString ScpCommanderLocalPanelDirViewParamsDefault;
+extern UnicodeString QueueViewLayoutDefault;
 //---------------------------------------------------------------------------
 struct TUpdatesConfiguration
 {