ImageViewerSelectItemsInteractiveMode Object

Summary

Allows selection of items using the mouse, touch or keyboard.

Syntax
TypeScript
JavaScript
function lt.Controls.ImageViewerSelectItemsInteractiveMode 
	extends lt.Controls.ImageViewerRubberBandInteractiveMode 
class lt.Controls.ImageViewerSelectItemsInteractiveMode() 
	extends ImageViewerRubberBandInteractiveMode 
Remarks

The ImageViewerSelectItemsInteractiveMode object derives from the ImageViewerRubberBandInteractiveMode object and subscribes to the following extra events:

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.

Example
SelectedItemsChanged.ts
ImageViewer.ts
SelectedItemsChanged.js
ImageViewer.js
SelectedItemsChanged.html
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> 
Requirements

Target Platforms

Help Version 22.0.2023.2.4
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.

Leadtools.Controls Assembly

Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.