Allows selection of items using the mouse, touch or keyboard.
function lt.Controls.ImageViewerSelectItemsInteractiveMode
extends lt.Controls.ImageViewerRubberBandInteractiveMode
class lt.Controls.ImageViewerSelectItemsInteractiveMode()
extends ImageViewerRubberBandInteractiveMode
The ImageViewerSelectItemsInteractiveMode object derives from the ImageViewerRubberBandInteractiveMode object and subscribes to the following extra events:
keyDown if isKeyboardEnabled is true
In a break from normal behavior, the InteractiveEventArgs.IsHandled property is explicitly set to false when a valid rubberband operation starts in order to allow fall-through to other interactive modes that may handle scrolling.
If isKeyboardEnabled is true and a valid navigation key is pressed (Left, Up, Right, or Down arrows; or the PageUp, PageDown, Home, or End keys), the InteractiveEventArgs.isHandled will be set to true regardless of whether selections change.
This mode allows you to use the mouse, touch or keyboard devices to select items in the image viewer. Use this interactive mode to create an image viewer that acts like a Windows Explorer view in thumbnail modes.
The selectionMode property determines whether one or multiple items can be selected. Items are selected by modifying the ImageViewerItem.isSelected property (refer to Image Viewer Items).
If the viewer was set up with a different style for selected items, then the UI will be updated accordingly. Refer to Image Viewer Appearance for more information.
If selectionMode is Single, then this mode will work as follows:
Clicking an item will select it. The previously selected item, if any, will be de-selected.
When isKeyboardEnabled is true, using the cursor, page up/down, home and end keys will move the selection in the items in a grid fashion inside the current ViewLayout. For example, pressing the left key will select the item to the left of the currently selected one while pressing up will select the item above, and so forth. The previously selected item, if any, will be de-selected.
Clicking an area outside any item will be ignored.
If selectionMode is Multi, then this mode will work as follows:
Clicking an item will select it, if the current multiSelectKeyModifier is pressed (by default it is CTRL), then the previously selected item(s) state will not change. If the key was not pressed, the previously selected item(s) will be de-selected.
When IsKeyboardEnabled is true, using the keys mentioned above will work in the same manner except that MultiSelectKeyModifier is also used to keep or remove the selection state of the previously selected items.
Clicking an area outside any item and dragging with the mouse will start drawing a rubber band selection rectangle. When this is done, all the items that intersect with this rectangle will be selected. The multiSelectKeyModifier is also used as before. If no items intersect with the rubber band rectangle and the multiSelectKeyModifier was not pressed, then all the items are de-selected.
If SelectionMode is None, then this interactive mode does not change an item's selection state. Hover will continue working.
The ImageViewerSelectItemsInteractiveMode will also update the hover state of the items in platforms where a mouse is supported. When the mouse is over an item, the ImageViewerItem.isHovered property will be set to true. If the viewer was set up with different styles for hovered items, the UI is updated. Moving out of an item area will set the ImageViewerItem.isHovered back to false.
Yhe canSelectDisabledItems and canHoverDisabledItems properties control how the mode treats items that are disabled (the value of ImageViewerItem.IsEnabled is false). By default, these items' selection and hover states cannot be changed. By setting CanSelectDisabledItems or CanHoverDisabledItems to true, disabled items can be selected/deselected or hovered/unhovered accordingly.
The mode sets the value of ImageViewerInteractiveMode.workOnBounds to false and autoItemMode to ImageViewerAutoItemMode.never since it does not work on any specific items. The isDragMouseWheelEnabled property is set to false as well, to disable firing drag events using the mouse wheel.
Note: For optimization purposes, this mode will use ImageViewerItems.select to select and unselect items in a bulk instead of setting the ImageViewerItem.IsSelected property directly.
For more information, refer to Image Viewer Interactive Modes, Image Viewer Items and Image Viewer Appearance.
import { ImageViewer_Example } from "../ImageViewer";
export class ImageViewer_SelectedItemsChangedExample {
private viewerExample;
constructor() {
this.viewerExample = new ImageViewer_Example(this.run);
}
private run = (viewer: lt.Controls.ImageViewer) => {
// Clear all the images already the viewer
viewer.items.clear();
// Use vertical view layout
viewer.viewLayout = new lt.Controls.ImageViewerVerticalViewLayout();
// Make sure the item size is larger than the image size (thumbnails mode)
viewer.imageBorderThickness = 1;
// Change the selected item background color
viewer.selectedItemBackgroundColor = "lightblue";
// Add 4 items to the viewer
for (let page = 1; page <= 4; page++) {
const item: lt.Controls.ImageViewerItem = new lt.Controls.ImageViewerItem();
const imageUrl: string = "https://demo.leadtools.com/images/png/ocr" + page.toString() + ".png";
item.url = imageUrl;
viewer.items.add(item);
}
// Add the interface mode to select items (multiple)
const selectItemsMode: lt.Controls.ImageViewerSelectItemsInteractiveMode = new lt.Controls.ImageViewerSelectItemsInteractiveMode();
selectItemsMode.selectionMode = lt.Controls.ImageViewerSelectionMode.multi;
viewer.interactiveModes.clear();
viewer.interactiveModes.add(selectItemsMode);
const output = document.getElementById("output");
// Hook to the SelectItemsChanged event and update the text
viewer.selectedItemsChanged.add((sender, e) => {
// Get the selected items
let items: lt.Controls.ImageViewerItem[] = viewer.items.getSelected();
let indices: number[] = [];
for (let i = 0; i < items.length; i++) {
const item: lt.Controls.ImageViewerItem = items[i];
indices.push(viewer.items.indexOf(item));
}
output.innerHTML = "Selected indices: " + indices.join(", ");
});
}
}
export class ImageViewer_Example {
// LEADTOOLS ImageViewer to be used with this example
protected imageViewer: lt.Controls.ImageViewer = null;
// Generic state value used by the examples
public timesClicked: number = 0;
constructor(callback?: (viewer: lt.Controls.ImageViewer) => void) {
// Set the LEADTOOLS license. Replace this with your actual license file
lt.RasterSupport.setLicenseUri("https://demo.leadtools.com/licenses/js/LEADTOOLSEVAL.txt", "EVAL", null);
// Create an image viewer inside the imageViewerDiv element
const imageViewerDiv = document.getElementById("imageViewerDiv");
const createOptions: lt.Controls.ImageViewerCreateOptions = new lt.Controls.ImageViewerCreateOptions(imageViewerDiv);
this.imageViewer = new lt.Controls.ImageViewer(createOptions);
this.imageViewer.viewVerticalAlignment = lt.Controls.ControlAlignment.center;
this.imageViewer.viewHorizontalAlignment = lt.Controls.ControlAlignment.center;
this.imageViewer.autoCreateCanvas = true;
// Add Pan/Zoom interactive mode
// Click and drag to pan, CTRL-Click and drag to zoom in and out
this.imageViewer.interactiveModes.add(new lt.Controls.ImageViewerPanZoomInteractiveMode());
// Load an image
this.imageViewer.imageUrl = "https://demo.leadtools.com/images/jpeg/cannon.jpg";
this.imageViewer.zoom(lt.Controls.ControlSizeMode.fit, .9, this.imageViewer.defaultZoomOrigin);
const exampleButton = document.getElementById("exampleButton");
exampleButton.addEventListener("click", () => {
this.timesClicked++;
// Run the example
if (callback)
callback(this.imageViewer);
});
}
}
import { ImageViewer_Example } from "../ImageViewer";
export class ImageViewer_SelectedItemsChangedExample {
viewerExample;
constructor() {
this.viewerExample = new ImageViewer_Example(this.run);
}
run = (viewer) => {
// Clear all the images already the viewer
viewer.items.clear();
// Use vertical view layout
viewer.viewLayout = new lt.Controls.ImageViewerVerticalViewLayout();
// Make sure the item size is larger than the image size (thumbnails mode)
viewer.imageBorderThickness = 1;
// Change the selected item background color
viewer.selectedItemBackgroundColor = "lightblue";
// Add 4 items to the viewer
for (let page = 1; page <= 4; page++) {
const item = new lt.Controls.ImageViewerItem();
const imageUrl = "https://demo.leadtools.com/images/png/ocr" + page.toString() + ".png";
item.url = imageUrl;
viewer.items.add(item);
}
// Add the interface mode to select items (multiple)
const selectItemsMode = new lt.Controls.ImageViewerSelectItemsInteractiveMode();
selectItemsMode.selectionMode = lt.Controls.ImageViewerSelectionMode.multi;
viewer.interactiveModes.clear();
viewer.interactiveModes.add(selectItemsMode);
const output = document.getElementById("output");
// Hook to the SelectItemsChanged event and update the text
viewer.selectedItemsChanged.add((sender, e) => {
// Get the selected items
let items = viewer.items.getSelected();
let indices = [];
for (let i = 0; i < items.length; i++) {
const item = items[i];
indices.push(viewer.items.indexOf(item));
}
output.innerHTML = "Selected indices: " + indices.join(", ");
});
}
}
export class ImageViewer_Example {
// LEADTOOLS ImageViewer to be used with this example
imageViewer = null;
// Generic state value used by the examples
timesClicked = 0;
constructor(callback) {
// Set the LEADTOOLS license. Replace this with your actual license file
lt.RasterSupport.setLicenseUri("https://demo.leadtools.com/licenses/js/LEADTOOLSEVAL.txt", "EVAL", null);
// Create an image viewer inside the imageViewerDiv element
const imageViewerDiv = document.getElementById("imageViewerDiv");
const createOptions = new lt.Controls.ImageViewerCreateOptions(imageViewerDiv);
this.imageViewer = new lt.Controls.ImageViewer(createOptions);
this.imageViewer.viewVerticalAlignment = lt.Controls.ControlAlignment.center;
this.imageViewer.viewHorizontalAlignment = lt.Controls.ControlAlignment.center;
this.imageViewer.autoCreateCanvas = true;
// Add Pan/Zoom interactive mode
// Click and drag to pan, CTRL-Click and drag to zoom in and out
this.imageViewer.interactiveModes.add(new lt.Controls.ImageViewerPanZoomInteractiveMode());
// Load an image
this.imageViewer.imageUrl = "https://demo.leadtools.com/images/jpeg/cannon.jpg";
this.imageViewer.zoom(lt.Controls.ControlSizeMode.fit, .9, this.imageViewer.defaultZoomOrigin);
const exampleButton = document.getElementById("exampleButton");
exampleButton.addEventListener("click", () => {
this.timesClicked++;
// Run the example
if (callback)
callback(this.imageViewer);
});
}
}
<!doctype html>
<html lang="en">
<title>Controls Example | SelectedItemsChanged</title>
<head>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script src="../../LT/Leadtools.js"></script>
<script src="../../LT/Leadtools.Controls.js"></script>
<script src="../../LT/Leadtools.Annotations.Engine.js"></script>
<script src="../../LT/Leadtools.Annotations.Designers.js"></script>
<script src="../../LT/Leadtools.Annotations.Rendering.Javascript.js"></script>
<script src="../../LT/Leadtools.Annotations.Automation.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Main.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Color.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Core.js"></script>
<script src="../../LT/Leadtools.ImageProcessing.Effects.js"></script>
<script src="../../LT/Leadtools.Document.js"></script>
<script src="../../LT/Leadtools.Document.Viewer.js"></script>
<style>
body {
font-family: 'Segoe UI', sans-serif;
}
#imageViewerDiv {
border: 1px solid #888;
width: 500px;
height: 500px;
background-color: #eee;
}
</style>
<!-- All demo files are bundled and appended to the window -->
<script src="../../bundle.js" type="text/javascript"></script>
</head>
<body>
<p>Press and drag on the image to pan.</p>
<p>Hold down the control key and press and drag on the image or pinch with two fingers to zoom in and out.</p>
<div>
<button type="button" id="exampleButton">Run Example</button>
</div>
<div id="imageViewerDiv"></div>
<div id="output"></div>
</body>
<script>
window.onload = () => {
const example = new window.examples.ImageViewer.SelectedItemsChanged();
};
</script>
</html>
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document