com.sun.javafx.scene.control.EmbeddedTextContextMenuContent Maven / Gradle / Ivy
/*
* Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.javafx.scene.control;
import java.util.Map;
import com.sun.javafx.scene.control.skin.*;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.collections.ListChangeListener;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.control.*;
import javafx.scene.control.skin.TextAreaSkin;
import javafx.scene.control.skin.TextFieldSkin;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
/**
* The embedded context menu for a text input control.
* The menu will be displayed horizontally underneath the cursor
* with the available text editing options i.e. cut, copy, paste, select all.
*
*/
public class EmbeddedTextContextMenuContent extends StackPane {
private ContextMenu contextMenu;
private StackPane pointer;
private HBox menuBox;
public EmbeddedTextContextMenuContent(final ContextMenu popupMenu) {
this.contextMenu = popupMenu;
this.menuBox = new HBox();
this.pointer = new StackPane();
pointer.getStyleClass().add("pointer");
updateMenuItemContainer();
getChildren().addAll(pointer, menuBox);
contextMenu.ownerNodeProperty().addListener(arg0 -> {
if (contextMenu.getOwnerNode() instanceof TextArea) {
TextAreaSkin tas = (TextAreaSkin)((TextArea)contextMenu.getOwnerNode()).getSkin();
tas.getSkinnable().getProperties().addListener(new InvalidationListener() {
@Override public void invalidated(Observable arg0) {
requestLayout();
}
});
} else if (contextMenu.getOwnerNode() instanceof TextField) {
TextFieldSkin tfs = (TextFieldSkin)((TextField)contextMenu.getOwnerNode()).getSkin();
tfs.getSkinnable().getProperties().addListener(new InvalidationListener() {
@Override public void invalidated(Observable arg0) {
requestLayout();
}
});
}
});
contextMenu.getItems().addListener((ListChangeListener
© 2015 - 2024 Weber Informatics LLC | Privacy Policy