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

Bug 1024: Option to always sort directories by name

https://winscp.net/tracker/1024

Source commit: 8214bd11646dcc7f4bad4a64cd6ed8ce177c672c
This commit is contained in:
Martin Prikryl
2022-10-13 13:52:58 +00:00
parent 224365680a
commit ce998d551c
10 changed files with 222 additions and 168 deletions

View File

@@ -766,59 +766,66 @@ int __stdcall CompareFile(TListItem * Item1, TListItem * Item2, TUnixDirView * D
{
Result = 0;
switch (DirView->SortColumn)
if (File1->IsDirectory && DirView->AlwaysSortDirectoriesByName)
{
case uvName:
// fallback
break;
case uvSize:
Result = COMPARE_NUMBER(File1->Size, File2->Size);
break;
case uvChanged:
Result = COMPARE_NUMBER(File1->Modification, File2->Modification);
break;
case uvRights:
Result = AnsiCompareText(File1->RightsStr, File2->RightsStr);
break;
case uvOwner:
Result = File1->Owner.Compare(File2->Owner);
break;
case uvGroup:
Result = File1->Group.Compare(File2->Group);
break;
case uvExt:
// Duplicated in uvType branch
if (!File1->IsDirectory)
{
Result = CompareLogicalText(File1->Extension, File2->Extension, DirView->NaturalOrderNumericalSorting);
}
else
{
// fallback
}
else
{
switch (DirView->SortColumn)
{
case uvName:
// fallback
}
break;
break;
case uvLinkTarget:
Result = CompareLogicalText(File1->LinkTo, File2->LinkTo, DirView->NaturalOrderNumericalSorting);
break;
case uvSize:
Result = COMPARE_NUMBER(File1->Size, File2->Size);
break;
case uvType:
Result = CompareLogicalText(File1->TypeName, File2->TypeName, DirView->NaturalOrderNumericalSorting);
// fallback to uvExt
if ((Result == 0) && !File1->IsDirectory)
{
Result = CompareLogicalText(File1->Extension, File2->Extension, DirView->NaturalOrderNumericalSorting);
}
break;
case uvChanged:
Result = COMPARE_NUMBER(File1->Modification, File2->Modification);
break;
default:
DebugFail();
case uvRights:
Result = AnsiCompareText(File1->RightsStr, File2->RightsStr);
break;
case uvOwner:
Result = File1->Owner.Compare(File2->Owner);
break;
case uvGroup:
Result = File1->Group.Compare(File2->Group);
break;
case uvExt:
// Duplicated in uvType branch
if (!File1->IsDirectory)
{
Result = CompareLogicalText(File1->Extension, File2->Extension, DirView->NaturalOrderNumericalSorting);
}
else
{
// fallback
}
break;
case uvLinkTarget:
Result = CompareLogicalText(File1->LinkTo, File2->LinkTo, DirView->NaturalOrderNumericalSorting);
break;
case uvType:
Result = CompareLogicalText(File1->TypeName, File2->TypeName, DirView->NaturalOrderNumericalSorting);
// fallback to uvExt
if ((Result == 0) && !File1->IsDirectory)
{
Result = CompareLogicalText(File1->Extension, File2->Extension, DirView->NaturalOrderNumericalSorting);
}
break;
default:
DebugFail();
}
}
if (Result == 0)

View File

@@ -1125,6 +1125,7 @@ void __fastcall TCustomScpExplorerForm::ConfigurationChanged()
RemoteDirView->FormatSizeBytes = WinConfiguration->FormatSizeBytes;
RemoteDirView->ShowInaccesibleDirectories = WinConfiguration->ShowInaccesibleDirectories;
RemoteDirView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
RemoteDirView->AlwaysSortDirectoriesByName = WinConfiguration->AlwaysSortDirectoriesByName;
UpdateRowSelect(RemoteDirView);

View File

@@ -293,6 +293,7 @@ void __fastcall TPreferencesDialog::LoadConfiguration()
BOOLPROP(ConfirmTemporaryDirectoryCleanup);
BOOLPROP(FullRowSelect);
BOOLPROP(NaturalOrderNumericalSorting);
BOOLPROP(AlwaysSortDirectoriesByName);
ConfirmClosingSessionCheck2->Checked = WinConfiguration->ConfirmClosingSession;
@@ -708,6 +709,7 @@ void __fastcall TPreferencesDialog::SaveConfiguration()
BOOLPROP(ConfirmTemporaryDirectoryCleanup);
BOOLPROP(FullRowSelect);
BOOLPROP(NaturalOrderNumericalSorting);
BOOLPROP(AlwaysSortDirectoriesByName);
WinConfiguration->ConfirmClosingSession = ConfirmClosingSessionCheck2->Checked;

View File

@@ -6,7 +6,7 @@ object PreferencesDialog: TPreferencesDialog
BorderIcons = [biSystemMenu, biMinimize, biMaximize, biHelp]
BorderStyle = bsDialog
Caption = 'Preferences'
ClientHeight = 495
ClientHeight = 519
ClientWidth = 545
Color = clBtnFace
ParentFont = True
@@ -16,12 +16,12 @@ object PreferencesDialog: TPreferencesDialog
OnShow = FormShow
DesignSize = (
545
495)
519)
PixelsPerInch = 96
TextHeight = 13
object OKButton: TButton
Left = 282
Top = 414
Top = 438
Width = 75
Height = 25
Anchors = [akRight, akBottom]
@@ -32,7 +32,7 @@ object PreferencesDialog: TPreferencesDialog
end
object CloseButton: TButton
Left = 370
Top = 414
Top = 438
Width = 75
Height = 25
Anchors = [akRight, akBottom]
@@ -45,7 +45,7 @@ object PreferencesDialog: TPreferencesDialog
Left = 0
Top = 0
Width = 545
Height = 408
Height = 432
Align = alTop
Anchors = [akLeft, akTop, akRight, akBottom]
BevelOuter = bvNone
@@ -54,7 +54,7 @@ object PreferencesDialog: TPreferencesDialog
Left = 132
Top = 0
Width = 413
Height = 408
Height = 432
ActivePage = PreferencesSheet
Align = alClient
MultiLine = True
@@ -71,7 +71,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object CommonPreferencesGroup: TGroupBox
Left = 8
Top = 8
@@ -270,7 +270,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object LoggingGroup: TGroupBox
Left = 8
Top = 8
@@ -502,7 +502,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object InterfaceChangeLabel: TLabel
Left = 8
Top = 280
@@ -515,13 +515,13 @@ object PreferencesDialog: TPreferencesDialog
Left = 8
Top = 66
Width = 389
Height = 208
Height = 232
Anchors = [akLeft, akTop, akRight, akBottom]
Caption = 'User Interface'
TabOrder = 1
DesignSize = (
389
208)
232)
object CommanderDescriptionLabel2: TLabel
Left = 132
Top = 20
@@ -630,21 +630,21 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object PanelsCommonGroup: TGroupBox
Left = 8
Top = 8
Width = 389
Height = 222
Height = 246
Anchors = [akLeft, akTop, akRight]
Caption = 'Common'
TabOrder = 0
DesignSize = (
389
222)
246)
object Label1: TLabel
Left = 16
Top = 167
Top = 191
Width = 84
Height = 13
Caption = 'Show file si&zes in:'
@@ -653,7 +653,7 @@ object PreferencesDialog: TPreferencesDialog
end
object Label2: TLabel
Left = 16
Top = 194
Top = 218
Width = 96
Height = 13
Caption = '&Incremental search:'
@@ -712,7 +712,7 @@ object PreferencesDialog: TPreferencesDialog
end
object FormatSizeBytesCombo: TComboBox
Left = 264
Top = 164
Top = 188
Width = 108
Height = 21
Style = csDropDownList
@@ -737,7 +737,7 @@ object PreferencesDialog: TPreferencesDialog
end
object PanelSearchCombo: TComboBox
Left = 196
Top = 191
Top = 215
Width = 176
Height = 21
Style = csDropDownList
@@ -750,10 +750,20 @@ object PreferencesDialog: TPreferencesDialog
'Any part of name'
'All columns')
end
object AlwaysSortDirectoriesByNameCheck: TCheckBox
Left = 16
Top = 165
Width = 357
Height = 17
Anchors = [akLeft, akTop, akRight]
Caption = 'Always sort &directories by name'
TabOrder = 8
OnClick = ControlChange
end
end
object DoubleClickGroup: TGroupBox
Left = 8
Top = 236
Top = 260
Width = 389
Height = 74
Anchors = [akLeft, akTop, akRight]
@@ -798,7 +808,7 @@ object PreferencesDialog: TPreferencesDialog
end
object PanelFontGroup: TGroupBox
Left = 8
Top = 316
Top = 340
Width = 389
Height = 82
Anchors = [akLeft, akTop, akRight]
@@ -851,7 +861,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object Label3: TLabel
Left = 8
Top = 8
@@ -1002,7 +1012,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object Label4: TLabel
Left = 8
Top = 8
@@ -1046,23 +1056,23 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object EditorPreferenceGroup: TGroupBox
Left = 8
Top = 8
Width = 389
Height = 380
Height = 404
Anchors = [akLeft, akTop, akRight, akBottom]
Caption = 'Editor preference'
TabOrder = 0
DesignSize = (
389
380)
404)
object EditorListView3: TListView
Left = 16
Top = 24
Width = 356
Height = 283
Height = 307
Anchors = [akLeft, akTop, akRight, akBottom]
Columns = <
item
@@ -1098,7 +1108,7 @@ object PreferencesDialog: TPreferencesDialog
end
object AddEditorButton: TButton
Left = 16
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -1108,7 +1118,7 @@ object PreferencesDialog: TPreferencesDialog
end
object EditEditorButton: TButton
Left = 112
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -1118,7 +1128,7 @@ object PreferencesDialog: TPreferencesDialog
end
object UpEditorButton: TButton
Left = 290
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -1128,7 +1138,7 @@ object PreferencesDialog: TPreferencesDialog
end
object DownEditorButton: TButton
Left = 290
Top = 344
Top = 368
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -1138,7 +1148,7 @@ object PreferencesDialog: TPreferencesDialog
end
object RemoveEditorButton: TButton
Left = 16
Top = 344
Top = 368
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -1157,7 +1167,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object ShellIconsGroup: TGroupBox
Left = 8
Top = 8
@@ -1235,23 +1245,23 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object CustomCommandsGroup: TGroupBox
Left = 8
Top = 8
Width = 389
Height = 380
Height = 404
Anchors = [akLeft, akTop, akRight, akBottom]
Caption = 'Custom commands'
TabOrder = 0
DesignSize = (
389
380)
404)
object CustomCommandsView: TListView
Left = 16
Top = 24
Width = 356
Height = 283
Height = 307
Anchors = [akLeft, akTop, akRight, akBottom]
Columns = <
item
@@ -1290,7 +1300,7 @@ object PreferencesDialog: TPreferencesDialog
end
object AddCommandButton: TButton
Left = 16
Top = 313
Top = 337
Width = 98
Height = 25
Anchors = [akLeft, akBottom]
@@ -1302,7 +1312,7 @@ object PreferencesDialog: TPreferencesDialog
end
object RemoveCommandButton: TButton
Left = 16
Top = 344
Top = 368
Width = 98
Height = 25
Anchors = [akLeft, akBottom]
@@ -1312,7 +1322,7 @@ object PreferencesDialog: TPreferencesDialog
end
object UpCommandButton: TButton
Left = 290
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -1322,7 +1332,7 @@ object PreferencesDialog: TPreferencesDialog
end
object DownCommandButton: TButton
Left = 290
Top = 344
Top = 368
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -1332,7 +1342,7 @@ object PreferencesDialog: TPreferencesDialog
end
object EditCommandButton: TButton
Left = 127
Top = 313
Top = 337
Width = 98
Height = 25
Anchors = [akLeft, akBottom]
@@ -1342,7 +1352,7 @@ object PreferencesDialog: TPreferencesDialog
end
object ConfigureCommandButton: TButton
Left = 127
Top = 313
Top = 337
Width = 98
Height = 25
Anchors = [akLeft, akBottom]
@@ -1361,7 +1371,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object DragDropDownloadsGroup: TGroupBox
Left = 8
Top = 8
@@ -1483,7 +1493,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object QueueGroup: TGroupBox
Left = 8
Top = 8
@@ -1637,7 +1647,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object StorageGroup: TGroupBox
Left = 8
Top = 8
@@ -1869,7 +1879,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object ResumeBox: TGroupBox
Left = 8
Top = 8
@@ -2087,7 +2097,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object UpdatesGroup2: TGroupBox
Left = 8
Top = 8
@@ -2299,21 +2309,21 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object CopyParamListGroup: TGroupBox
Left = 8
Top = 8
Width = 389
Height = 380
Height = 404
Anchors = [akLeft, akTop, akRight, akBottom]
Caption = 'Transfer settings presets'
TabOrder = 0
DesignSize = (
389
380)
404)
object CopyParamLabel: TLabel
Left = 18
Top = 228
Top = 252
Width = 354
Height = 53
Anchors = [akLeft, akRight, akBottom]
@@ -2327,7 +2337,7 @@ object PreferencesDialog: TPreferencesDialog
Left = 16
Top = 24
Width = 356
Height = 198
Height = 222
Anchors = [akLeft, akTop, akRight, akBottom]
Columns = <
item
@@ -2360,7 +2370,7 @@ object PreferencesDialog: TPreferencesDialog
end
object AddCopyParamButton: TButton
Left = 16
Top = 287
Top = 311
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -2370,7 +2380,7 @@ object PreferencesDialog: TPreferencesDialog
end
object RemoveCopyParamButton: TButton
Left = 16
Top = 319
Top = 343
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -2380,7 +2390,7 @@ object PreferencesDialog: TPreferencesDialog
end
object UpCopyParamButton: TButton
Left = 289
Top = 287
Top = 311
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -2390,7 +2400,7 @@ object PreferencesDialog: TPreferencesDialog
end
object DownCopyParamButton: TButton
Left = 289
Top = 319
Top = 343
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -2400,7 +2410,7 @@ object PreferencesDialog: TPreferencesDialog
end
object EditCopyParamButton: TButton
Left = 112
Top = 287
Top = 311
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -2410,7 +2420,7 @@ object PreferencesDialog: TPreferencesDialog
end
object DuplicateCopyParamButton: TButton
Left = 112
Top = 319
Top = 343
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -2420,7 +2430,7 @@ object PreferencesDialog: TPreferencesDialog
end
object CopyParamAutoSelectNoticeCheck: TCheckBox
Left = 18
Top = 350
Top = 374
Width = 354
Height = 17
Anchors = [akLeft, akRight, akBottom]
@@ -2439,7 +2449,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object PathInCaptionGroup: TGroupBox
Left = 8
Top = 131
@@ -2603,7 +2613,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object MasterPasswordGroup: TGroupBox
Left = 8
Top = 8
@@ -2667,7 +2677,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object ExternalAppsGroup: TGroupBox
Left = 8
Top = 8
@@ -2775,7 +2785,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object ExternalIpAddressGroupBox2: TGroupBox
Left = 8
Top = 8
@@ -2891,7 +2901,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object PanelsRemoteDirectoryGroup: TGroupBox
Left = 8
Top = 8
@@ -2965,7 +2975,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object LocalPanelGroup: TGroupBox
Left = 8
Top = 8
@@ -3016,21 +3026,21 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object LanguagesGroup: TGroupBox
Left = 8
Top = 8
Width = 389
Height = 380
Height = 404
Anchors = [akLeft, akTop, akRight, akBottom]
Caption = 'Languages'
TabOrder = 0
DesignSize = (
389
380)
404)
object LanguageChangeLabel: TLabel
Left = 16
Top = 349
Top = 373
Width = 177
Height = 13
Anchors = [akLeft, akBottom]
@@ -3041,7 +3051,7 @@ object PreferencesDialog: TPreferencesDialog
Left = 16
Top = 24
Width = 356
Height = 314
Height = 338
Anchors = [akLeft, akTop, akRight, akBottom]
Columns = <
item
@@ -3060,7 +3070,7 @@ object PreferencesDialog: TPreferencesDialog
end
object LanguagesGetMoreButton: TButton
Left = 273
Top = 344
Top = 368
Width = 100
Height = 25
Anchors = [akRight, akBottom]
@@ -3078,7 +3088,7 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object InternalEditorGroup: TGroupBox
Left = 8
Top = 8
@@ -3207,23 +3217,23 @@ object PreferencesDialog: TPreferencesDialog
TabVisible = False
DesignSize = (
405
398)
422)
object FileColorsGroup: TGroupBox
Left = 8
Top = 8
Width = 389
Height = 380
Height = 404
Anchors = [akLeft, akTop, akRight, akBottom]
Caption = 'File colors'
TabOrder = 0
DesignSize = (
389
380)
404)
object FileColorsView: TListView
Left = 16
Top = 24
Width = 356
Height = 283
Height = 307
Anchors = [akLeft, akTop, akRight, akBottom]
Columns = <
item
@@ -3253,7 +3263,7 @@ object PreferencesDialog: TPreferencesDialog
end
object AddFileColorButton: TButton
Left = 16
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -3263,7 +3273,7 @@ object PreferencesDialog: TPreferencesDialog
end
object RemoveFileColorButton: TButton
Left = 16
Top = 344
Top = 368
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -3273,7 +3283,7 @@ object PreferencesDialog: TPreferencesDialog
end
object UpFileColorButton: TButton
Left = 290
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -3283,7 +3293,7 @@ object PreferencesDialog: TPreferencesDialog
end
object DownFileColorButton: TButton
Left = 290
Top = 344
Top = 368
Width = 83
Height = 25
Anchors = [akRight, akBottom]
@@ -3293,7 +3303,7 @@ object PreferencesDialog: TPreferencesDialog
end
object EditFileColorButton: TButton
Left = 112
Top = 313
Top = 337
Width = 83
Height = 25
Anchors = [akLeft, akBottom]
@@ -3308,18 +3318,18 @@ object PreferencesDialog: TPreferencesDialog
Left = 0
Top = 0
Width = 132
Height = 408
Height = 432
Align = alLeft
BevelOuter = bvNone
TabOrder = 0
DesignSize = (
132
408)
432)
object NavigationTree: TTreeView
Left = 8
Top = 9
Width = 116
Height = 398
Height = 422
Anchors = [akLeft, akTop, akRight, akBottom]
DoubleBuffered = True
HideSelection = False
@@ -3379,7 +3389,7 @@ object PreferencesDialog: TPreferencesDialog
end
object HelpButton: TButton
Left = 458
Top = 414
Top = 438
Width = 75
Height = 25
Anchors = [akRight, akBottom]
@@ -3389,7 +3399,7 @@ object PreferencesDialog: TPreferencesDialog
end
object ComponentsPanel: TPanel
Left = 0
Top = 445
Top = 469
Width = 545
Height = 50
Align = alBottom
@@ -3400,7 +3410,7 @@ object PreferencesDialog: TPreferencesDialog
end
object RegisterAsUrlHandlerMenu: TPopupMenu
Left = 56
Top = 443
Top = 470
object RegisterAsUrlHandlerItem: TMenuItem
Caption = 'Register'
OnClick = RegisterAsUrlHandlerItemClick
@@ -3416,7 +3426,7 @@ object PreferencesDialog: TPreferencesDialog
end
object AddCommandMenu: TPopupMenu
Left = 208
Top = 443
Top = 470
object AddCustomCommandMenuItem: TMenuItem
Caption = 'Add &Custom Command...'
OnClick = AddCustomCommandMenuItemClick

View File

@@ -340,6 +340,7 @@ __published:
TLabel *LocalPortNumberRangeLabel;
TUpDownEdit *LocalPortNumberMinEdit;
TUpDownEdit *LocalPortNumberMaxEdit;
TCheckBox *AlwaysSortDirectoriesByNameCheck;
void __fastcall FormShow(TObject *Sender);
void __fastcall ControlChange(TObject *Sender);
void __fastcall EditorFontButtonClick(TObject *Sender);

View File

@@ -787,6 +787,9 @@ void __fastcall TScpCommanderForm::ConfigurationChanged()
OtherLocalDirView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
OtherLocalDriveView->NaturalOrderNumericalSorting = WinConfiguration->NaturalOrderNumericalSorting;
LocalDirView->AlwaysSortDirectoriesByName = WinConfiguration->AlwaysSortDirectoriesByName;
OtherLocalDirView->AlwaysSortDirectoriesByName = WinConfiguration->AlwaysSortDirectoriesByName;
LocalDirView->TimeoutShellIconRetrieval = WinConfiguration->TimeoutShellIconRetrieval;
LocalDirView->UseIconUpdateThread = WinConfiguration->UseIconUpdateThread;
OtherLocalDirView->TimeoutShellIconRetrieval = WinConfiguration->TimeoutShellIconRetrieval;

View File

@@ -166,6 +166,7 @@ type
FOnGetItemColor: TDirViewGetItemColorEvent;
FMask: string;
FNaturalOrderNumericalSorting: Boolean;
FAlwaysSortDirectoriesByName: Boolean;
FDarkMode: Boolean;
FScrollOnDragOver: TListViewScrollOnDragOver;
FStatusFileInfo: TStatusFileInfo;
@@ -313,6 +314,7 @@ type
function EnableDragOnClick: Boolean; override;
procedure SetMask(Value: string); virtual;
procedure SetNaturalOrderNumericalSorting(Value: Boolean);
procedure SetAlwaysSortDirectoriesByName(Value: Boolean);
procedure SetDarkMode(Value: Boolean);
procedure ScrollOnDragOverBeforeUpdate(ObjectToValidate: TObject);
procedure ScrollOnDragOverAfterUpdate;
@@ -432,6 +434,7 @@ type
{filemask, multiple filters are possible: '*.pas;*.dfm'}
property Mask: string read FMask write SetMask;
property NaturalOrderNumericalSorting: Boolean read FNaturalOrderNumericalSorting write SetNaturalOrderNumericalSorting;
property AlwaysSortDirectoriesByName: Boolean read FAlwaysSortDirectoriesByName write SetAlwaysSortDirectoriesByName;
property DarkMode: Boolean read FDarkMode write SetDarkMode;
property OnContextPopup;
@@ -868,6 +871,7 @@ begin
FExeDrag := False;
FMask := '';
FNaturalOrderNumericalSorting := True;
FAlwaysSortDirectoriesByName := False;
FDarkMode := False;
FDoubleBufferedScrollingWorkaround := not IsVistaHard();
@@ -3371,6 +3375,15 @@ begin
end;
end;
procedure TCustomDirView.SetAlwaysSortDirectoriesByName(Value: Boolean);
begin
if AlwaysSortDirectoriesByName <> Value then
begin
FAlwaysSortDirectoriesByName := Value;
SortItems;
end;
end;
procedure TCustomDirView.SetDarkMode(Value: Boolean);
begin
if DarkMode <> Value then

View File

@@ -2095,39 +2095,46 @@ begin
begin
Result := fEqual;
case AOwner.DirColProperties.SortDirColumn of
dvName:
; // fallback
dvSize:
if P1.Size < P2.Size then Result := fLess
else
if P1.Size > P2.Size then Result := fGreater
else ; // fallback
dvType:
Result := CompareFileType(I1, I2, P1, P2);
dvChanged:
Result := CompareFileTime(P1, P2);
dvAttr:
if P1.Attr < P2.Attr then Result := fLess
else
if P1.Attr > P2.Attr then Result := fGreater
else ; // fallback
dvExt:
if not P1.isDirectory then
begin
Result := CompareLogicalTextPas(
P1.FileExt + ' ' + P1.DisplayName, P2.FileExt + ' ' + P2.DisplayName,
AOwner.NaturalOrderNumericalSorting);
end
else ; //fallback
if P1.isDirectory and AOwner.AlwaysSortDirectoriesByName then
begin
// fallback
end
else
; // fallback
begin
case AOwner.DirColProperties.SortDirColumn of
dvName:
; // fallback
dvSize:
if P1.Size < P2.Size then Result := fLess
else
if P1.Size > P2.Size then Result := fGreater
else ; // fallback
dvType:
Result := CompareFileType(I1, I2, P1, P2);
dvChanged:
Result := CompareFileTime(P1, P2);
dvAttr:
if P1.Attr < P2.Attr then Result := fLess
else
if P1.Attr > P2.Attr then Result := fGreater
else ; // fallback
dvExt:
if not P1.isDirectory then
begin
Result := CompareLogicalTextPas(
P1.FileExt + ' ' + P1.DisplayName, P2.FileExt + ' ' + P2.DisplayName,
AOwner.NaturalOrderNumericalSorting);
end
else ; //fallback
else
; // fallback
end;
end;
if Result = fEqual then

View File

@@ -588,6 +588,7 @@ void __fastcall TWinConfiguration::Default()
FPanelFont.FontStyle = 0;
FPanelFont.FontCharset = DEFAULT_CHARSET;
FNaturalOrderNumericalSorting = true;
FAlwaysSortDirectoriesByName = false;
FFullRowSelect = false;
FOfferedEditorAutoConfig = false;
FVersionHistory = L"";
@@ -1046,6 +1047,7 @@ THierarchicalStorage * TWinConfiguration::CreateScpStorage(bool & SessionList)
KEYEX(Integer,PanelFont.FontStyle, L"PanelFontStyle"); \
KEYEX(Integer,PanelFont.FontCharset, L"PanelFontCharset"); \
KEY(Bool, NaturalOrderNumericalSorting); \
KEY(Bool, AlwaysSortDirectoriesByName); \
KEY(Bool, FullRowSelect); \
KEY(Bool, OfferedEditorAutoConfig); \
KEY(Integer, LastMonitor); \
@@ -2301,6 +2303,11 @@ void __fastcall TWinConfiguration::SetNaturalOrderNumericalSorting(bool value)
SET_CONFIG_PROPERTY(NaturalOrderNumericalSorting);
}
//---------------------------------------------------------------------------
void __fastcall TWinConfiguration::SetAlwaysSortDirectoriesByName(bool value)
{
SET_CONFIG_PROPERTY(AlwaysSortDirectoriesByName);
}
//---------------------------------------------------------------------------
void __fastcall TWinConfiguration::SetFullRowSelect(bool value)
{
SET_CONFIG_PROPERTY(FullRowSelect);

View File

@@ -442,6 +442,7 @@ private:
TDateTime FRefreshRemotePanelInterval;
TFontConfiguration FPanelFont;
bool FNaturalOrderNumericalSorting;
bool FAlwaysSortDirectoriesByName;
bool FFullRowSelect;
bool FOfferedEditorAutoConfig;
bool FUseMasterPassword;
@@ -556,6 +557,7 @@ private:
void __fastcall SetRefreshRemotePanelInterval(TDateTime value);
void __fastcall SetPanelFont(const TFontConfiguration & value);
void __fastcall SetNaturalOrderNumericalSorting(bool value);
void __fastcall SetAlwaysSortDirectoriesByName(bool value);
void __fastcall SetFullRowSelect(bool value);
void __fastcall SetOfferedEditorAutoConfig(bool value);
void __fastcall SetLastMonitor(int value);
@@ -759,6 +761,7 @@ public:
__property TDateTime RefreshRemotePanelInterval = { read = FRefreshRemotePanelInterval, write = SetRefreshRemotePanelInterval };
__property TFontConfiguration PanelFont = { read = FPanelFont, write = SetPanelFont };
__property bool NaturalOrderNumericalSorting = { read = FNaturalOrderNumericalSorting, write = SetNaturalOrderNumericalSorting };
__property bool AlwaysSortDirectoriesByName = { read = FAlwaysSortDirectoriesByName, write = SetAlwaysSortDirectoriesByName };
__property bool FullRowSelect = { read = FFullRowSelect, write = SetFullRowSelect };
__property bool OfferedEditorAutoConfig = { read = FOfferedEditorAutoConfig, write = SetOfferedEditorAutoConfig };
__property int LastMonitor = { read = GetLastMonitor, write = SetLastMonitor };