blob: b2e8af875ecf9b051b2c9526e5ecdebabd2206e0 [file] [log] [blame]
/*
* Copyright (c) 2000, 2015, 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 sun.awt;
import java.awt.peer.TaskbarPeer;
import java.awt.*;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.InvalidDnDOperationException;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.peer.*;
import sun.awt.datatransfer.DataTransferer;
final class LightweightPeerHolder {
static final LightweightPeer lightweightMarker = new NullComponentPeer();
private LightweightPeerHolder() {
}
}
/**
* Interface for component creation support in toolkits.
*/
public interface ComponentFactory {
/**
* Creates a peer for a component or container. This peer is windowless and
* allows the Component and Container classes to be extended directly to
* create windowless components that are defined entirely in java.
*
* @param target The Component to be created
* @return the peer for the specified component
*/
default LightweightPeer createComponent(Component target) {
return LightweightPeerHolder.lightweightMarker;
}
/**
* Creates this toolkit's implementation of the {@code Desktop} using the
* specified peer interface.
*
* @param target the desktop to be implemented
* @return this toolkit's implementation of the {@code Desktop}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Desktop
* @see java.awt.peer.DesktopPeer
* @since 1.6
*/
default DesktopPeer createDesktopPeer(Desktop target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of the {@code Taskbar} using the
* specified peer interface.
*
* @param target the taskbar to be implemented
* @return this toolkit's implementation of the {@code Taskbar}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Taskbar
* @see java.awt.peer.TaskbarPeer
* @since 9
*/
default TaskbarPeer createTaskbarPeer(Taskbar target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Button} using the
* specified peer interface.
*
* @param target the button to be implemented
* @return this toolkit's implementation of {@code Button}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Button
* @see java.awt.peer.ButtonPeer
*/
default ButtonPeer createButton(Button target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code TextField} using the
* specified peer interface.
*
* @param target the text field to be implemented
* @return this toolkit's implementation of {@code TextField}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.TextField
* @see java.awt.peer.TextFieldPeer
*/
default TextFieldPeer createTextField(TextField target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Label} using the
* specified peer interface.
*
* @param target the label to be implemented
* @return this toolkit's implementation of {@code Label}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Label
* @see java.awt.peer.LabelPeer
*/
default LabelPeer createLabel(Label target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code List} using the specified
* peer interface.
*
* @param target the list to be implemented
* @return this toolkit's implementation of {@code List}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.List
* @see java.awt.peer.ListPeer
*/
default ListPeer createList(java.awt.List target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Checkbox} using the
* specified peer interface.
*
* @param target the check box to be implemented
* @return this toolkit's implementation of {@code Checkbox}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Checkbox
* @see java.awt.peer.CheckboxPeer
*/
default CheckboxPeer createCheckbox(Checkbox target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Scrollbar} using the
* specified peer interface.
*
* @param target the scroll bar to be implemented
* @return this toolkit's implementation of {@code Scrollbar}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Scrollbar
* @see java.awt.peer.ScrollbarPeer
*/
default ScrollbarPeer createScrollbar(Scrollbar target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code ScrollPane} using the
* specified peer interface.
*
* @param target the scroll pane to be implemented
* @return this toolkit's implementation of {@code ScrollPane}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.ScrollPane
* @see java.awt.peer.ScrollPanePeer
* @since 1.1
*/
default ScrollPanePeer createScrollPane(ScrollPane target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code TextArea} using the
* specified peer interface.
*
* @param target the text area to be implemented
* @return this toolkit's implementation of {@code TextArea}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.TextArea
* @see java.awt.peer.TextAreaPeer
*/
default TextAreaPeer createTextArea(TextArea target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Choice} using the
* specified peer interface.
*
* @param target the choice to be implemented
* @return this toolkit's implementation of {@code Choice}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Choice
* @see java.awt.peer.ChoicePeer
*/
default ChoicePeer createChoice(Choice target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Frame} using the
* specified peer interface.
*
* @param target the frame to be implemented
* @return this toolkit's implementation of {@code Frame}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Frame
* @see java.awt.peer.FramePeer
*/
default FramePeer createFrame(Frame target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Canvas} using the
* specified peer interface.
*
* @param target the canvas to be implemented
* @return this toolkit's implementation of {@code Canvas}
* @see java.awt.Canvas
* @see java.awt.peer.CanvasPeer
*/
default CanvasPeer createCanvas(Canvas target) {
return (CanvasPeer) createComponent(target);
}
/**
* Creates this toolkit's implementation of {@code Panel} using the
* specified peer interface.
*
* @param target the panel to be implemented
* @return this toolkit's implementation of {@code Panel}
* @see java.awt.Panel
* @see java.awt.peer.PanelPeer
*/
default PanelPeer createPanel(Panel target) {
return (PanelPeer) createComponent(target);
}
/**
* Creates this toolkit's implementation of {@code Window} using the
* specified peer interface.
*
* @param target the window to be implemented
* @return this toolkit's implementation of {@code Window}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Window
* @see java.awt.peer.WindowPeer
*/
default WindowPeer createWindow(Window target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Dialog} using the
* specified peer interface.
*
* @param target the dialog to be implemented
* @return this toolkit's implementation of {@code Dialog}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Dialog
* @see java.awt.peer.DialogPeer
*/
default DialogPeer createDialog(Dialog target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code MenuBar} using the
* specified peer interface.
*
* @param target the menu bar to be implemented
* @return this toolkit's implementation of {@code MenuBar}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.MenuBar
* @see java.awt.peer.MenuBarPeer
*/
default MenuBarPeer createMenuBar(MenuBar target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code Menu} using the specified
* peer interface.
*
* @param target the menu to be implemented
* @return this toolkit's implementation of {@code Menu}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.Menu
* @see java.awt.peer.MenuPeer
*/
default MenuPeer createMenu(Menu target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code PopupMenu} using the
* specified peer interface.
*
* @param target the popup menu to be implemented
* @return this toolkit's implementation of {@code PopupMenu}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.PopupMenu
* @see java.awt.peer.PopupMenuPeer
* @since 1.1
*/
default PopupMenuPeer createPopupMenu(PopupMenu target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code MenuItem} using the
* specified peer interface.
*
* @param target the menu item to be implemented
* @return this toolkit's implementation of {@code MenuItem}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.MenuItem
* @see java.awt.peer.MenuItemPeer
*/
default MenuItemPeer createMenuItem(MenuItem target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code FileDialog} using the
* specified peer interface.
*
* @param target the file dialog to be implemented
* @return this toolkit's implementation of {@code FileDialog}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.FileDialog
* @see java.awt.peer.FileDialogPeer
*/
default FileDialogPeer createFileDialog(FileDialog target) {
throw new HeadlessException();
}
/**
* Creates this toolkit's implementation of {@code CheckboxMenuItem} using
* the specified peer interface.
*
* @param target the checkbox menu item to be implemented
* @return this toolkit's implementation of {@code CheckboxMenuItem}
* @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
* true
* @see java.awt.GraphicsEnvironment#isHeadless
* @see java.awt.CheckboxMenuItem
* @see java.awt.peer.CheckboxMenuItemPeer
*/
default CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
throw new HeadlessException();
}
/**
* Creates the peer for a DragSourceContext. Always throws
* InvalidDndOperationException if GraphicsEnvironment.isHeadless() returns
* true.
*
* @param dge the {@code DragGestureEvent}
* @return the peer created
* @see java.awt.GraphicsEnvironment#isHeadless
*/
default DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) {
throw new InvalidDnDOperationException("Headless environment");
}
/**
* Creates this toolkit's implementation of {@code Font} using the specified
* peer interface.
*
* @param name the font to be implemented
* @param style the style of the font, such as {@code PLAIN}, {@code BOLD},
* {@code ITALIC}, or a combination
* @return this toolkit's implementation of {@code Font}
* @see java.awt.Font
* @see java.awt.peer.FontPeer
* @see java.awt.GraphicsEnvironment#getAllFonts
*/
default FontPeer getFontPeer(String name, int style) {
return null;
}
default RobotPeer createRobot(Robot target, GraphicsDevice screen)
throws AWTException {
throw new HeadlessException();
}
default DataTransferer getDataTransferer() {
return null;
}
/**
* Obtains this toolkit's implementation of helper class for {@code
* MouseInfo} operations.
*
* @return this toolkit's implementation of helper for {@code MouseInfo}
* @throws UnsupportedOperationException if this operation is not
* implemented
* @see java.awt.peer.MouseInfoPeer
* @see java.awt.MouseInfo
* @since 1.5
*/
default MouseInfoPeer getMouseInfoPeer() {
throw new UnsupportedOperationException("Not implemented");
}
}