1 /* 2 * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.awt; 27 28 import java.awt.*; 29 import java.awt.dnd.*; 30 import java.awt.dnd.peer.DragSourceContextPeer; 31 import java.awt.event.*; 32 import java.awt.im.InputMethodHighlight; 33 import java.awt.im.spi.InputMethodDescriptor; 34 import java.awt.image.*; 35 import java.awt.datatransfer.Clipboard; 36 import java.awt.peer.*; 37 import java.beans.PropertyChangeListener; 38 import java.lang.reflect.Constructor; 39 import java.lang.reflect.InvocationTargetException; 40 import java.net.URL; 41 import java.util.Map; 42 import java.util.Properties; 43 import sun.awt.im.InputContext; 44 import sun.awt.image.ImageRepresentation; 45 46 public class HeadlessToolkit extends Toolkit 47 implements ComponentFactory, KeyboardFocusManagerPeerProvider { 48 49 private Toolkit tk; 50 private ComponentFactory componentFactory; 51 52 public HeadlessToolkit(Toolkit tk) { 53 this.tk = tk; 54 if (tk instanceof ComponentFactory) { 55 componentFactory = (ComponentFactory)tk; 56 } 57 } 58 59 public Toolkit getUnderlyingToolkit() { 60 return tk; 61 } 62 63 /* 64 * Component peer objects. 65 */ 66 67 /* Lightweight implementation of Canvas and Panel */ 68 69 public CanvasPeer createCanvas(Canvas target) { 70 return (CanvasPeer)createComponent(target); 71 } 72 73 public PanelPeer createPanel(Panel target) { 74 return (PanelPeer)createComponent(target); 75 } 76 77 /* 78 * Component peer objects - unsupported. 79 */ 80 81 public WindowPeer createWindow(Window target) 82 throws HeadlessException { 83 throw new HeadlessException(); 84 } 85 86 public FramePeer createFrame(Frame target) 87 throws HeadlessException { 88 throw new HeadlessException(); 89 } 90 91 public DialogPeer createDialog(Dialog target) 92 throws HeadlessException { 93 throw new HeadlessException(); 94 } 95 96 public ButtonPeer createButton(Button target) 97 throws HeadlessException { 98 throw new HeadlessException(); 99 } 100 101 public TextFieldPeer createTextField(TextField target) 102 throws HeadlessException { 103 throw new HeadlessException(); 104 } 105 106 public ChoicePeer createChoice(Choice target) 107 throws HeadlessException { 108 throw new HeadlessException(); 109 } 110 111 public LabelPeer createLabel(Label target) 112 throws HeadlessException { 113 throw new HeadlessException(); 114 } 115 116 public ListPeer createList(List target) 117 throws HeadlessException { 118 throw new HeadlessException(); 119 } 120 121 public CheckboxPeer createCheckbox(Checkbox target) 122 throws HeadlessException { 123 throw new HeadlessException(); 124 } 125 126 public ScrollbarPeer createScrollbar(Scrollbar target) 127 throws HeadlessException { 128 throw new HeadlessException(); 129 } 130 131 public ScrollPanePeer createScrollPane(ScrollPane target) 132 throws HeadlessException { 133 throw new HeadlessException(); 134 } 135 136 public TextAreaPeer createTextArea(TextArea target) 137 throws HeadlessException { 138 throw new HeadlessException(); 139 } 140 141 public FileDialogPeer createFileDialog(FileDialog target) 142 throws HeadlessException { 143 throw new HeadlessException(); 144 } 145 146 public MenuBarPeer createMenuBar(MenuBar target) 147 throws HeadlessException { 148 throw new HeadlessException(); 149 } 150 151 public MenuPeer createMenu(Menu target) 152 throws HeadlessException { 153 throw new HeadlessException(); 154 } 155 156 public PopupMenuPeer createPopupMenu(PopupMenu target) 157 throws HeadlessException { 158 throw new HeadlessException(); 159 } 160 161 public MenuItemPeer createMenuItem(MenuItem target) 162 throws HeadlessException { 163 throw new HeadlessException(); 164 } 165 166 public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) 167 throws HeadlessException { 168 throw new HeadlessException(); 169 } 170 171 public DragSourceContextPeer createDragSourceContextPeer( 172 DragGestureEvent dge) 173 throws InvalidDnDOperationException { 174 throw new InvalidDnDOperationException("Headless environment"); 175 } 176 177 public RobotPeer createRobot(Robot target, GraphicsDevice screen) 178 throws AWTException, HeadlessException { 179 throw new HeadlessException(); 180 } 181 182 public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) { 183 // See 6833019. 184 return 185 new KeyboardFocusManagerPeer() { 186 public Window getCurrentFocusedWindow() { return null; } 187 public void setCurrentFocusOwner(Component comp) {} 188 public Component getCurrentFocusOwner() { return null; } 189 public void clearGlobalFocusOwner(Window activeWindow) {} 190 }; 191 } 192 193 public TrayIconPeer createTrayIcon(TrayIcon target) 194 throws HeadlessException { 195 throw new HeadlessException(); 196 } 197 198 public SystemTrayPeer createSystemTray(SystemTray target) 199 throws HeadlessException { 200 throw new HeadlessException(); 201 } 202 203 public boolean isTraySupported() { 204 return false; 205 } 206 207 public GlobalCursorManager getGlobalCursorManager() 208 throws HeadlessException { 209 throw new HeadlessException(); 210 } 211 212 /* 213 * Headless toolkit - unsupported. 214 */ 215 protected void loadSystemColors(int[] systemColors) 216 throws HeadlessException { 217 throw new HeadlessException(); 218 } 219 220 public ColorModel getColorModel() 221 throws HeadlessException { 222 throw new HeadlessException(); 223 } 224 225 public int getScreenResolution() 226 throws HeadlessException { 227 throw new HeadlessException(); 228 } 229 230 public Map mapInputMethodHighlight(InputMethodHighlight highlight) 231 throws HeadlessException { 232 throw new HeadlessException(); 233 } 234 235 public int getMenuShortcutKeyMask() 236 throws HeadlessException { 237 throw new HeadlessException(); 238 } 239 240 public boolean getLockingKeyState(int keyCode) 241 throws UnsupportedOperationException { 242 throw new HeadlessException(); 243 } 244 245 public void setLockingKeyState(int keyCode, boolean on) 246 throws UnsupportedOperationException { 247 throw new HeadlessException(); 248 } 249 250 public Cursor createCustomCursor(Image cursor, Point hotSpot, String name) 251 throws IndexOutOfBoundsException, HeadlessException { 252 throw new HeadlessException(); 253 } 254 255 public Dimension getBestCursorSize(int preferredWidth, int preferredHeight) 256 throws HeadlessException { 257 throw new HeadlessException(); 258 } 259 260 public int getMaximumCursorColors() 261 throws HeadlessException { 262 throw new HeadlessException(); 263 } 264 265 public <T extends DragGestureRecognizer> T 266 createDragGestureRecognizer(Class<T> abstractRecognizerClass, 267 DragSource ds, Component c, 268 int srcActions, DragGestureListener dgl) 269 { 270 return null; 271 } 272 273 public int getScreenHeight() 274 throws HeadlessException { 275 throw new HeadlessException(); 276 } 277 278 public int getScreenWidth() 279 throws HeadlessException { 280 throw new HeadlessException(); 281 } 282 283 public Dimension getScreenSize() 284 throws HeadlessException { 285 throw new HeadlessException(); 286 } 287 288 public Insets getScreenInsets(GraphicsConfiguration gc) 289 throws HeadlessException { 290 throw new HeadlessException(); 291 } 292 293 public void setDynamicLayout(boolean dynamic) 294 throws HeadlessException { 295 throw new HeadlessException(); 296 } 297 298 protected boolean isDynamicLayoutSet() 299 throws HeadlessException { 300 throw new HeadlessException(); 301 } 302 303 public boolean isDynamicLayoutActive() 304 throws HeadlessException { 305 throw new HeadlessException(); 306 } 307 308 public Clipboard getSystemClipboard() 309 throws HeadlessException { 310 throw new HeadlessException(); 311 } 312 313 /* 314 * Printing 315 */ 316 public PrintJob getPrintJob(Frame frame, String jobtitle, 317 JobAttributes jobAttributes, 318 PageAttributes pageAttributes) { 319 if (frame != null) { 320 // Should never happen 321 throw new HeadlessException(); 322 } 323 throw new NullPointerException("frame must not be null"); 324 } 325 326 public PrintJob getPrintJob(Frame frame, String doctitle, Properties props) 327 { 328 if (frame != null) { 329 // Should never happen 330 throw new HeadlessException(); 331 } 332 throw new NullPointerException("frame must not be null"); 333 } 334 335 /* 336 * Headless toolkit - supported. 337 */ 338 339 public void sync() { 340 // Do nothing 341 } 342 343 public void beep() { 344 // Send alert character 345 System.out.write(0x07); 346 } 347 348 /* 349 * Event Queue 350 */ 351 public EventQueue getSystemEventQueueImpl() { 352 return SunToolkit.getSystemEventQueueImplPP(); 353 } 354 355 /* 356 * Images. 357 */ 358 public int checkImage(Image img, int w, int h, ImageObserver o) { 359 return tk.checkImage(img, w, h, o); 360 } 361 362 public boolean prepareImage( 363 Image img, int w, int h, ImageObserver o) { 364 return tk.prepareImage(img, w, h, o); 365 } 366 367 public Image getImage(String filename) { 368 return tk.getImage(filename); 369 } 370 371 public Image getImage(URL url) { 372 return tk.getImage(url); 373 } 374 375 public Image createImage(String filename) { 376 return tk.createImage(filename); 377 } 378 379 public Image createImage(URL url) { 380 return tk.createImage(url); 381 } 382 383 public Image createImage(byte[] data, int offset, int length) { 384 return tk.createImage(data, offset, length); 385 } 386 387 public Image createImage(ImageProducer producer) { 388 return tk.createImage(producer); 389 } 390 391 public Image createImage(byte[] imagedata) { 392 return tk.createImage(imagedata); 393 } 394 395 396 /* 397 * Fonts 398 */ 399 public FontPeer getFontPeer(String name, int style) { 400 if (componentFactory != null) { 401 return componentFactory.getFontPeer(name, style); 402 } 403 return null; 404 } 405 406 public FontMetrics getFontMetrics(Font font) { 407 return tk.getFontMetrics(font); 408 } 409 410 public String[] getFontList() { 411 return tk.getFontList(); 412 } 413 414 /* 415 * Desktop properties 416 */ 417 418 public void addPropertyChangeListener(String name, 419 PropertyChangeListener pcl) { 420 tk.addPropertyChangeListener(name, pcl); 421 } 422 423 public void removePropertyChangeListener(String name, 424 PropertyChangeListener pcl) { 425 tk.removePropertyChangeListener(name, pcl); 426 } 427 428 /* 429 * Modality 430 */ 431 public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) { 432 return false; 433 } 434 435 public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) { 436 return false; 437 } 438 439 /* 440 * Always on top 441 */ 442 public boolean isAlwaysOnTopSupported() { 443 return false; 444 } 445 446 /* 447 * AWT Event listeners 448 */ 449 450 public void addAWTEventListener(AWTEventListener listener, 451 long eventMask) { 452 tk.addAWTEventListener(listener, eventMask); 453 } 454 455 public void removeAWTEventListener(AWTEventListener listener) { 456 tk.removeAWTEventListener(listener); 457 } 458 459 public AWTEventListener[] getAWTEventListeners() { 460 return tk.getAWTEventListeners(); 461 } 462 463 public AWTEventListener[] getAWTEventListeners(long eventMask) { 464 return tk.getAWTEventListeners(eventMask); 465 } 466 467 public boolean isDesktopSupported() { 468 return false; 469 } 470 471 public DesktopPeer createDesktopPeer(Desktop target) 472 throws HeadlessException{ 473 throw new HeadlessException(); 474 } 475 476 public boolean areExtraMouseButtonsEnabled() throws HeadlessException{ 477 throw new HeadlessException(); 478 } 479 }