Resource

Resource Basics

Resource Name Sort by Version Count
Resource Version 1.0
Category Sort Script
Downloads 755
Release Date 3/9/2023 9:24:00 AM
 

Resource Details

Description This script sorts a collection based on the number of versions that each image has. The second sort is on the file name
Installation Instructions na
Usage Instructions 1. Open a collection
2. Click the Sort button
3. Select Sort by Script
4. Select From Repository
5. Select Sort by Version Count
Changes in this version na
Special Requirements
 

Author Information

Author Name IDimager Support
 

Script

var
  FCache1: TTntStringList;
  FCache1Vals: TTntStringList;
  FCache2: TTntStringList;
  FCache2Vals: TTntStringList;

function Initialize: Boolean;
begin
  result := True;
end;

procedure Finalize;
begin
end;

procedure BeginSort;
begin
  FCache1 := TTntStringList.Create;
  FCache1Vals := TTntStringList.Create;
  FCache2 := TTntStringList.Create;
  FCache2Vals := TTntStringList.Create;
  FCache1.Sorted := True;
  FCache2.Sorted := True;
end;

procedure EndSort;
begin
  FCache2Vals.Free;
  FCache2.Free;
  FCache1Vals.Free;
  FCache1.Free;
end;

function IndexValueForImage(AImage: TImageItem): WideString;
begin
  result := AddLeadingChars(IntToStr(AImage._VersionCount), '0', 9, False) +
            AImage.FileNameOnly;
end;

function Sort (AItem1, AItem2: TImageItem): Integer;
var
  AIdx: Integer;
  AVal1, AVal2: WideString;
begin
  result := 0;
  if AItem1 = AItem2 then exit;

  AIdx := FCache1.IndexOf(AItem1.GUID);
  if AIdx = -1 then
  begin
    AVal1 := IndexValueForImage(AItem1);
    AIdx := FCache1Vals.Add(AVal1);
    FCache1.AddObject(AItem1.GUID, IntToStr(AIdx));
  end
  else
    AVal1 := FCache1Vals.Strings[FCache1.Objects[AIdx]];

  AIdx := FCache2.IndexOf(AItem2.GUID);
  if AIdx = -1 then
  begin
    AVal2 := IndexValueForImage(AItem2);
    AIdx := FCache2Vals.Add(AVal2);
    FCache2.AddObject(AItem2.GUID, IntToStr(AIdx));
  end
  else
    AVal2 := FCache2Vals.Strings[FCache2.Objects[AIdx]];

  if AVal1 = AVal2 then
    result := 0
  else if AVal1 > AVal2 then
    result := 1
  else
    result := -1;
end;