diff mupdf-source/thirdparty/tesseract/java/com/google/scrollview/ui/SVPopupMenu.java @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/tesseract/java/com/google/scrollview/ui/SVPopupMenu.java	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,144 @@
+// Copyright 2007 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); You may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+// OF ANY KIND, either express or implied. See the License for the specific
+// language governing permissions and limitations under the License.
+
+package com.google.scrollview.ui;
+
+import com.google.scrollview.events.SVEventType;
+import com.google.scrollview.ui.SVMenuItem;
+import com.google.scrollview.ui.SVWindow;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.HashMap;
+
+import javax.swing.JMenu;
+import javax.swing.JPopupMenu;
+
+/**
+ * The SVPopupMenu class provides the functionality to add a popup menu to
+ * ScrollView. Each popup menu item gets associated with a (client-defined)
+ * command-id, which SVPopupMenu will return upon clicking it.
+ *
+ * @author wanke@google.com
+ *
+ */
+
+public class SVPopupMenu implements ActionListener {
+  /** The root entry to add items to. */
+  private JPopupMenu root;
+  /** Contains a map of item name to its actual entry. */
+  private HashMap<String, SVAbstractMenuItem> items;
+  /** The window the menubar belongs to. */
+  private SVWindow svWindow;
+
+  /**
+   * Create a new SVPopupMenu and associate it with a ScrollView window.
+   *
+   * @param sv The window our popup menu belongs to.
+   */
+  SVPopupMenu(SVWindow sv) {
+    root = new JPopupMenu();
+    svWindow = sv;
+    items = new HashMap<String, SVAbstractMenuItem>();
+  }
+
+  /**
+   * Add a new entry to the menubar. For these items, the server will poll the
+   * client to ask what to do.
+   *
+   * @param parent The menu we add our new entry to (should have been defined
+   *        before). If the parent is "", we will add the entry to the root
+   *        (top-level).
+   * @param name The caption of the new entry.
+   * @param id The Id of the new entry. If it is -1, the entry will be treated
+   *        as a menu.
+   */
+  public void add(String parent, String name, int id) {
+    // A duplicate entry - we just throw it away, since its already in.
+    if (items.get(name) != null) { return; }
+    // A new submenu at the top-level.
+    if (parent.equals("")) {
+      JMenu jli = new JMenu(name);
+      SVAbstractMenuItem mli = new SVSubMenuItem(name, jli);
+      items.put(name, mli);
+      root.add(jli);
+    }
+    // A new sub-submenu.
+    else if (id == -1) {
+      SVAbstractMenuItem jmi = items.get(parent);
+      JMenu jli = new JMenu(name);
+      SVAbstractMenuItem mli = new SVSubMenuItem(name, jli);
+      items.put(name, mli);
+      jmi.add(jli);
+    }
+    // A new child entry. Add to appropriate parent.
+    else {
+      SVAbstractMenuItem jmi = items.get(parent);
+      if (jmi == null) {
+        System.out.println("ERROR: Unknown parent " + parent);
+        System.exit(1);
+      }
+      SVAbstractMenuItem mli = new SVEmptyMenuItem(id, name);
+      mli.mi.addActionListener(this);
+      items.put(name, mli);
+      jmi.add(mli);
+    }
+  }
+
+  /**
+   * Add a new entry to the menubar. In this case, we also know its value and
+   * possibly even have a description. For these items, the server will not poll
+   * the client to ask what to do, but just show an input dialog and send a
+   * message with the new value.
+   *
+   * @param parent The menu we add our new entry to (should have been defined
+   *        before). If the parent is "", we will add the entry to the root
+   *        (top-level).
+   * @param name The caption of the new entry.
+   * @param id The Id of the new entry. If it is -1, the entry will be treated
+   *        as a menu.
+   * @param value The value of the new entry.
+   * @param desc The description of the new entry.
+   */
+  public void add(String parent, String name, int id, String value, String desc) {
+    SVAbstractMenuItem jmi = items.get(parent);
+    SVMenuItem mli = new SVMenuItem(id, name, value, desc);
+    mli.mi.addActionListener(this);
+    items.put(name, mli);
+    if (jmi == null) { // add to root
+      root.add(mli.mi);
+    } else { // add to parent
+      jmi.add(mli);
+    }
+  }
+
+
+
+  /**
+   * A click on one of the items in our menubar has occurred. Forward it
+   * to the item itself to let it decide what happens.
+   */
+  public void actionPerformed(ActionEvent e) {
+
+    // Get the corresponding menuitem
+    SVAbstractMenuItem svm = items.get(e.getActionCommand());
+
+   svm.performAction(svWindow, SVEventType.SVET_POPUP);
+  }
+
+  /**
+   * Gets called by the SVEventHandler of the window to actually show the
+   * content of the popup menu.
+   */
+  public void show(Component Invoker, int x, int y) {
+    root.show(Invoker, x, y);
+  }
+}