Hi to all!
I have slightly redesigned the "Find similar files" UI. Here's the result.
All three types of tabs have unified and consistent interface.
They share common controls and layout.
As previously mentioned interface should be non blocking.
After XnView finds similar images, the search results displayed to the user in a separate "Find similar" tab.
1. "Find similar" tab.

- find_similar_ui.png (236.2 KiB) Viewed 16150 times

- find_similar_ui_marks.png (236.37 KiB) Viewed 16150 times
Tab should have its own settings independent from settings of tab of other types.
Pane #2 contains the search results.
Pane #1 allows the user to visually compare two images and their metadata.
And here:
Mouse wheel - zoom both images synchronously.
Left mouse button - move images synchronously.
Right mouse button - call context menu with different, rarely used, actions on left/right image.
Ctrl + mouse wheel - zoom each image independently.
Ctrl + left mouse button - move each image independently.
Double-click opens "Compare images" tab with both images centered on click point with 100% (should be customizable) zoom.
"Deferred actions" - postpones the actual deletion, copying and moving images until user close search tab (see below).
"Compare" button opens "Compare images (side by side)" tab with both images centered with 100% (should be customizable) zoom.
"Overlaid compare" button opens "Overlaid compare " tab with both images centered with 100% (should be customizable) zoom.
"Delta diff" button opens "Delta difference" tab.
Status bar #3 shows the current sorting mode.
Status bar #4 shows the number of found files and the number of groups of similar files.
Pane #14 shows metadata information about compared images. All information (fields) on pane #14 should be customizable by user. It should be possible to set the vertical dividers (useful with monospaced fonts) and various info from file's metadata into one string. File size should be always in the same units (left in KB and right in KB, left in MB and right in MB...) for easy comparison.
Customization of pane #14 may looks like this (explanation below):
{"Filename:",15em,left} | Filename
{"Folder:",15em,left} | Filepath
{"Size:",15em,left} | {Filesize,15em,left} | {"EXIF: ",EXIF.exists,100px,left} | "Date modified: " {EXIF.date_modified}
{"Dimensions:",15em,left} | {Dimensions,15em,left} | {"IPTC: ",IPTC.exists,100px,left} |
2. "Compare images (side by side)" tab.

- compare_ui.jpg (180.21 KiB) Viewed 16150 times
Tab should have its own settings independent from settings of tab of other types.
We get UI of "Compare images (side by side)" tab from "Find similar" simply by removing
the pane #2 and the replacing "Compare" button with "Overlaid compare"
button.
All actions, like panning and zooming, is absolutely identical to a Pane #1 on "Find similar" tab.
In this tab "Deferred actions" applies to operations on the files displayed
on this tab only, but not to all search results.
"Overlaid compare" button opens "Overlaid compare" tab with left image first and
the current position and scale equal to those on the "Compare images" tab.
Pane with metadata should have its own settings independent from "Find similar"'s settings.
Esc - close tab and returns the user back to the calling tab.
3. "Overlaid compare" tab.
Please, download GIF to view animation:
Tab should have its own settings independent from settings of tab of other types.
On this tab the user has the ability to quickly switch between the two compared images,
the position and scale of which is synchronized like in "Compare images" tab.
All actions, like panning and zooming, the image is absolutely identical to a
Pane #1 on "Find similar" tab.
Buttons
"Left image" and
"Right image" should work like a switch.
Pressing the
"Left image" shows the left image and left image metadata.
Pressing the
"Right image" shows the right image and right image metadata.
Spacebar could be a image switch on the keyboard.
In this tab
"Deferred actions" is the same checkbox as in corresponding "Compare images" tab if tab called from corresponding "Compare images" tab.
If otherwise, the checkbox is independent and option applies only to operations on the files in this tab.
Esc - close tab and returns the user back to the calling tab.
4. Deferred actions.
If a user deletes, moves or copies files while "Deferred actions" option is enabled,
the operation on files is not performed immediately, but deferred until the close
"Find similar" tab.
Postponed actions are "accumulated" and displayed on "Find similar" tab in the form of
some icons over of found files thumbnails.
Before closing the tab the user can verify and confirm their actions or selectively cancel
some of them using context menu on thumbnails.
5. Search by sample(s).
Suppose I have several sample images in directory named "samples".
Now I want to check whether exist these or similar images in the 10Gb directory "my_collection".
I add both directories in the "Find Similar" dialog.
And XnView begins to search for similar images among whole 10Gb collection too, that is superfluous in this case.
So, it's impossible not search for similar images within a dir and subdir.
Propose to introduce an option for each directory in the "Find Similar" dialog, which would mean that XnView must not search for similar images within this directory.
So, with option like "Do not search for similar among the files in this directory" enabled for "samples" and "my_collection" dirs, XnView compares the images from "samples" and "my_collection" only, but does not compare images to each other within the directory "samples", as well as within the directory "my_collection".
6. Proposed syntax for metadata description in EBNF.
metadata_string = item , { whitespace , item } ;
item = string | identifier | format | vertical_bar ;
string = '"' , unicode_chars , '"';
identifier = Filesize | Filename | Filepath | EXIF.exists | EXIF.date_modified | ? and all other reserved words ? ;
format = "{" , string | identifier , { string | identifier } , [ "," , number , units , [ "," , alignment ] ] , "}" ;
vertical_bar = "|" ;
number = digit , { digit } ;
units = "em" | "px" ;
alignment = "left" | "right" | "center" ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
unicode_chars = ? all Unicode characters ? - whitespace;
whitespace = " " ;