| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| import sun.awt.*; |
| import com.sun.star.awt.*; |
| import com.sun.star.lang.*; |
| import java.util.*; |
| import javax.swing.*; |
| |
| public class WindowAdapter |
| { |
| private java.awt.Frame maFrame; |
| private LinkedList maEventListeners = new LinkedList(); |
| private LinkedList maWindowListeners = new LinkedList(); |
| private LinkedList maFocusListeners = new LinkedList(); |
| private LinkedList maKeyListeners = new LinkedList(); |
| private LinkedList maMouseListeners = new LinkedList(); |
| private LinkedList maMouseMotionListeners = new LinkedList(); |
| private LinkedList maPaintListeners = new LinkedList(); |
| private boolean mbShift = false, mbMod1 = false, mbMod2 = false; |
| |
| // ----------------- |
| // - WindowAdapter - |
| // ----------------- |
| |
| public WindowAdapter( int windowHandle ) |
| { |
| maFrame = SystemWindowAdapter.createFrame( windowHandle ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public java.awt.Frame getJavaFrame() |
| { |
| return maFrame; |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| private short implGetUNOKeyCode( int nJavaKeyCode ) |
| { |
| short nRet = 0; |
| |
| switch( nJavaKeyCode ) |
| { |
| case( java.awt.event.KeyEvent.VK_NUMPAD0 ): |
| case( java.awt.event.KeyEvent.VK_0 ): nRet = com.sun.star.awt.Key.NUM0; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD1 ): |
| case( java.awt.event.KeyEvent.VK_1 ): nRet = com.sun.star.awt.Key.NUM1; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD2 ): |
| case( java.awt.event.KeyEvent.VK_2 ): nRet = com.sun.star.awt.Key.NUM2; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD3 ): |
| case( java.awt.event.KeyEvent.VK_3 ): nRet = com.sun.star.awt.Key.NUM3; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD4 ): |
| case( java.awt.event.KeyEvent.VK_4 ): nRet = com.sun.star.awt.Key.NUM4; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD5 ): |
| case( java.awt.event.KeyEvent.VK_5 ): nRet = com.sun.star.awt.Key.NUM5; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD6 ): |
| case( java.awt.event.KeyEvent.VK_6 ): nRet = com.sun.star.awt.Key.NUM6; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD7 ): |
| case( java.awt.event.KeyEvent.VK_7 ): nRet = com.sun.star.awt.Key.NUM7; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD8 ): |
| case( java.awt.event.KeyEvent.VK_8 ): nRet = com.sun.star.awt.Key.NUM8; break; |
| case( java.awt.event.KeyEvent.VK_NUMPAD9 ): |
| case( java.awt.event.KeyEvent.VK_9 ): nRet = com.sun.star.awt.Key.NUM9; break; |
| |
| case( java.awt.event.KeyEvent.VK_A ): nRet = com.sun.star.awt.Key.A; break; |
| case( java.awt.event.KeyEvent.VK_B ): nRet = com.sun.star.awt.Key.B; break; |
| case( java.awt.event.KeyEvent.VK_C ): nRet = com.sun.star.awt.Key.C; break; |
| case( java.awt.event.KeyEvent.VK_D ): nRet = com.sun.star.awt.Key.D; break; |
| case( java.awt.event.KeyEvent.VK_E ): nRet = com.sun.star.awt.Key.E; break; |
| case( java.awt.event.KeyEvent.VK_F ): nRet = com.sun.star.awt.Key.F; break; |
| case( java.awt.event.KeyEvent.VK_G ): nRet = com.sun.star.awt.Key.G; break; |
| case( java.awt.event.KeyEvent.VK_H ): nRet = com.sun.star.awt.Key.H; break; |
| case( java.awt.event.KeyEvent.VK_I ): nRet = com.sun.star.awt.Key.I; break; |
| case( java.awt.event.KeyEvent.VK_J ): nRet = com.sun.star.awt.Key.J; break; |
| case( java.awt.event.KeyEvent.VK_K ): nRet = com.sun.star.awt.Key.K; break; |
| case( java.awt.event.KeyEvent.VK_L ): nRet = com.sun.star.awt.Key.L; break; |
| case( java.awt.event.KeyEvent.VK_M ): nRet = com.sun.star.awt.Key.M; break; |
| case( java.awt.event.KeyEvent.VK_N ): nRet = com.sun.star.awt.Key.N; break; |
| case( java.awt.event.KeyEvent.VK_O ): nRet = com.sun.star.awt.Key.O; break; |
| case( java.awt.event.KeyEvent.VK_P ): nRet = com.sun.star.awt.Key.P; break; |
| case( java.awt.event.KeyEvent.VK_Q ): nRet = com.sun.star.awt.Key.Q; break; |
| case( java.awt.event.KeyEvent.VK_R ): nRet = com.sun.star.awt.Key.R; break; |
| case( java.awt.event.KeyEvent.VK_S ): nRet = com.sun.star.awt.Key.S; break; |
| case( java.awt.event.KeyEvent.VK_T ): nRet = com.sun.star.awt.Key.T; break; |
| case( java.awt.event.KeyEvent.VK_U ): nRet = com.sun.star.awt.Key.U; break; |
| case( java.awt.event.KeyEvent.VK_V ): nRet = com.sun.star.awt.Key.V; break; |
| case( java.awt.event.KeyEvent.VK_W ): nRet = com.sun.star.awt.Key.W; break; |
| case( java.awt.event.KeyEvent.VK_X ): nRet = com.sun.star.awt.Key.X; break; |
| case( java.awt.event.KeyEvent.VK_Y ): nRet = com.sun.star.awt.Key.Y; break; |
| case( java.awt.event.KeyEvent.VK_Z ): nRet = com.sun.star.awt.Key.Z; break; |
| |
| case( java.awt.event.KeyEvent.VK_F1 ): nRet = com.sun.star.awt.Key.F1; break; |
| case( java.awt.event.KeyEvent.VK_F2 ): nRet = com.sun.star.awt.Key.F2; break; |
| case( java.awt.event.KeyEvent.VK_F3 ): nRet = com.sun.star.awt.Key.F3; break; |
| case( java.awt.event.KeyEvent.VK_F4 ): nRet = com.sun.star.awt.Key.F4; break; |
| case( java.awt.event.KeyEvent.VK_F5 ): nRet = com.sun.star.awt.Key.F5; break; |
| case( java.awt.event.KeyEvent.VK_F6 ): nRet = com.sun.star.awt.Key.F6; break; |
| case( java.awt.event.KeyEvent.VK_F7 ): nRet = com.sun.star.awt.Key.F7; break; |
| case( java.awt.event.KeyEvent.VK_F8 ): nRet = com.sun.star.awt.Key.F8; break; |
| case( java.awt.event.KeyEvent.VK_F9 ): nRet = com.sun.star.awt.Key.F9; break; |
| case( java.awt.event.KeyEvent.VK_F10 ): nRet = com.sun.star.awt.Key.F10; break; |
| case( java.awt.event.KeyEvent.VK_F11 ): nRet = com.sun.star.awt.Key.F11; break; |
| case( java.awt.event.KeyEvent.VK_F12 ): nRet = com.sun.star.awt.Key.F12; break; |
| case( java.awt.event.KeyEvent.VK_F13 ): nRet = com.sun.star.awt.Key.F13; break; |
| case( java.awt.event.KeyEvent.VK_F14 ): nRet = com.sun.star.awt.Key.F14; break; |
| case( java.awt.event.KeyEvent.VK_F15 ): nRet = com.sun.star.awt.Key.F15; break; |
| case( java.awt.event.KeyEvent.VK_F16 ): nRet = com.sun.star.awt.Key.F16; break; |
| case( java.awt.event.KeyEvent.VK_F17 ): nRet = com.sun.star.awt.Key.F17; break; |
| case( java.awt.event.KeyEvent.VK_F18 ): nRet = com.sun.star.awt.Key.F18; break; |
| case( java.awt.event.KeyEvent.VK_F19 ): nRet = com.sun.star.awt.Key.F19; break; |
| case( java.awt.event.KeyEvent.VK_F20 ): nRet = com.sun.star.awt.Key.F20; break; |
| case( java.awt.event.KeyEvent.VK_F21 ): nRet = com.sun.star.awt.Key.F21; break; |
| case( java.awt.event.KeyEvent.VK_F22 ): nRet = com.sun.star.awt.Key.F22; break; |
| case( java.awt.event.KeyEvent.VK_F23 ): nRet = com.sun.star.awt.Key.F23; break; |
| case( java.awt.event.KeyEvent.VK_F24 ): nRet = com.sun.star.awt.Key.F24; break; |
| |
| case( java.awt.event.KeyEvent.VK_UP ): nRet = com.sun.star.awt.Key.UP; break; |
| case( java.awt.event.KeyEvent.VK_DOWN): nRet = com.sun.star.awt.Key.DOWN; break; |
| case( java.awt.event.KeyEvent.VK_LEFT ): nRet = com.sun.star.awt.Key.LEFT; break; |
| case( java.awt.event.KeyEvent.VK_RIGHT ): nRet = com.sun.star.awt.Key.RIGHT; break; |
| |
| case( java.awt.event.KeyEvent.VK_HOME ): nRet = com.sun.star.awt.Key.HOME; break; |
| case( java.awt.event.KeyEvent.VK_END ): nRet = com.sun.star.awt.Key.END; break; |
| |
| case( java.awt.event.KeyEvent.VK_PAGE_UP ): nRet = com.sun.star.awt.Key.PAGEUP; break; |
| case( java.awt.event.KeyEvent.VK_PAGE_DOWN ): nRet = com.sun.star.awt.Key.PAGEDOWN; break; |
| |
| case( java.awt.event.KeyEvent.VK_ENTER ): nRet = com.sun.star.awt.Key.RETURN; break; |
| case( java.awt.event.KeyEvent.VK_ESCAPE ): nRet = com.sun.star.awt.Key.ESCAPE; break; |
| |
| case( java.awt.event.KeyEvent.VK_TAB ): nRet = com.sun.star.awt.Key.TAB; break; |
| case( java.awt.event.KeyEvent.VK_BACK_SPACE ): nRet = com.sun.star.awt.Key.BACKSPACE; break; |
| case( java.awt.event.KeyEvent.VK_SPACE ): nRet = com.sun.star.awt.Key.SPACE; break; |
| case( java.awt.event.KeyEvent.VK_INSERT): nRet = com.sun.star.awt.Key.INSERT; break; |
| case( java.awt.event.KeyEvent.VK_DELETE): nRet = com.sun.star.awt.Key.DELETE; break; |
| case( java.awt.event.KeyEvent.VK_ADD ): nRet = com.sun.star.awt.Key.ADD; break; |
| case( java.awt.event.KeyEvent.VK_SUBTRACT ): nRet = com.sun.star.awt.Key.SUBTRACT; break; |
| case( java.awt.event.KeyEvent.VK_MULTIPLY ): nRet = com.sun.star.awt.Key.MULTIPLY; break; |
| case( java.awt.event.KeyEvent.VK_DIVIDE ): nRet = com.sun.star.awt.Key.DIVIDE; break; |
| case( java.awt.event.KeyEvent.VK_DECIMAL ): nRet = com.sun.star.awt.Key.POINT; break; |
| // case( java.awt.event.KeyEvent.VK_ COMMA; break; |
| case( java.awt.event.KeyEvent.VK_LESS ): nRet = com.sun.star.awt.Key.LESS; break; |
| case( java.awt.event.KeyEvent.VK_GREATER ): nRet = com.sun.star.awt.Key.GREATER; break; |
| case( java.awt.event.KeyEvent.VK_EQUALS ): nRet = com.sun.star.awt.Key.EQUAL; break; |
| // case( java.awt.event.KeyEvent.VK_ OPEN; break; |
| // case( java.awt.event.KeyEvent.VK_ CUT; break; |
| // case( java.awt.event.KeyEvent.VK_ COPY; break; |
| // case( java.awt.event.KeyEvent.VK_ PASTE; break; |
| // case( java.awt.event.KeyEvent.VK_ UNDO; break; |
| // case( java.awt.event.KeyEvent.VK_ REPEAT; break; |
| // case( java.awt.event.KeyEvent.VK_ FIND; break; |
| // case( java.awt.event.KeyEvent.VK_ PROPERTIES; break; |
| // case( java.awt.event.KeyEvent.VK_ FRONT; break; |
| // case( java.awt.event.KeyEvent.VK_ CONTEXTMENU; break; |
| // case( java.awt.event.KeyEvent.VK_ HELP; break; |
| |
| default: |
| break; |
| } |
| |
| return nRet; |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void fireKeyEvent( java.awt.event.KeyEvent aEvt ) |
| { |
| if( maKeyListeners.size() > 0 ) |
| { |
| boolean bProcess = false, bPressed = false; |
| |
| if( java.awt.event.KeyEvent.KEY_PRESSED == aEvt.getID() ) |
| { |
| switch( aEvt.getKeyCode() ) |
| { |
| case( java.awt.event.KeyEvent.VK_SHIFT ): mbShift = true; break; |
| case( java.awt.event.KeyEvent.VK_CONTROL ): mbMod1 = true; break; |
| case( java.awt.event.KeyEvent.VK_ALT ): mbMod2 = true; break; |
| |
| default: |
| { |
| bProcess = bPressed = true; |
| } |
| break; |
| } |
| } |
| else if( java.awt.event.KeyEvent.KEY_RELEASED == aEvt.getID() ) |
| { |
| switch( aEvt.getKeyCode() ) |
| { |
| case( java.awt.event.KeyEvent.VK_SHIFT ): mbShift = false; break; |
| case( java.awt.event.KeyEvent.VK_CONTROL ): mbMod1 = false; break; |
| case( java.awt.event.KeyEvent.VK_ALT ): mbMod2 = false; break; |
| |
| default: |
| { |
| bProcess = true; |
| } |
| break; |
| } |
| } |
| |
| if( bProcess ) |
| { |
| KeyEvent aUNOEvt = new KeyEvent(); |
| |
| aUNOEvt.Modifiers = 0; |
| |
| if( mbShift ) |
| aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.SHIFT; |
| |
| if( mbMod1 ) |
| aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD1; |
| |
| if( mbMod2 ) |
| aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD2; |
| |
| aUNOEvt.KeyCode = implGetUNOKeyCode( aEvt.getKeyCode() ); |
| aUNOEvt.KeyChar = aEvt.getKeyChar(); |
| aUNOEvt.KeyFunc = com.sun.star.awt.KeyFunction.DONTKNOW; |
| |
| ListIterator aIter = maKeyListeners.listIterator( 0 ); |
| |
| while( aIter.hasNext() ) |
| { |
| if( bPressed ) |
| ( (XKeyListener) aIter.next() ).keyPressed( aUNOEvt ); |
| else |
| ( (XKeyListener) aIter.next() ).keyReleased( aUNOEvt ); |
| } |
| } |
| } |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void fireMouseEvent( java.awt.event.MouseEvent aEvt ) |
| { |
| MouseEvent aUNOEvt = new MouseEvent(); |
| |
| aUNOEvt.Modifiers = 0; |
| aUNOEvt.Buttons = 0; |
| aUNOEvt.X = aEvt.getX(); |
| aUNOEvt.Y = aEvt.getY(); |
| aUNOEvt.PopupTrigger = false; |
| |
| // Modifiers |
| if( aEvt.isShiftDown() ) |
| aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.SHIFT; |
| |
| if( aEvt.isControlDown() ) |
| aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD1; |
| |
| if( aEvt.isAltDown() ) |
| aUNOEvt.Modifiers |= com.sun.star.awt.KeyModifier.MOD2; |
| |
| // Buttons |
| if( SwingUtilities.isLeftMouseButton( aEvt ) ) |
| aUNOEvt.Buttons |= com.sun.star.awt.MouseButton.LEFT; |
| |
| if( SwingUtilities.isMiddleMouseButton( aEvt ) ) |
| aUNOEvt.Buttons |= com.sun.star.awt.MouseButton.MIDDLE; |
| |
| if( SwingUtilities.isRightMouseButton( aEvt ) ) |
| aUNOEvt.Buttons |= com.sun.star.awt.MouseButton.RIGHT; |
| |
| // event type |
| if( java.awt.event.MouseEvent.MOUSE_PRESSED == aEvt.getID() ) |
| { |
| ListIterator aIter = maMouseListeners.listIterator( 0 ); |
| |
| aUNOEvt.ClickCount = 1; |
| |
| while( aIter.hasNext() ) |
| ( (XMouseListener) aIter.next() ).mousePressed( aUNOEvt ); |
| } |
| else if( java.awt.event.MouseEvent.MOUSE_RELEASED == aEvt.getID() ) |
| { |
| ListIterator aIter = maMouseListeners.listIterator( 0 ); |
| |
| aUNOEvt.ClickCount = 1; |
| |
| while( aIter.hasNext() ) |
| ( (XMouseListener) aIter.next() ).mouseReleased( aUNOEvt ); |
| } |
| else if( java.awt.event.MouseEvent.MOUSE_DRAGGED == aEvt.getID() ) |
| { |
| ListIterator aIter = maMouseMotionListeners.listIterator( 0 ); |
| |
| aUNOEvt.ClickCount = 0; |
| |
| while( aIter.hasNext() ) |
| ( (XMouseMotionListener) aIter.next() ).mouseDragged( aUNOEvt ); |
| } |
| else if( java.awt.event.MouseEvent.MOUSE_MOVED == aEvt.getID() ) |
| { |
| ListIterator aIter = maMouseMotionListeners.listIterator( 0 ); |
| |
| aUNOEvt.ClickCount = 0; |
| |
| while( aIter.hasNext() ) |
| ( (XMouseMotionListener) aIter.next() ).mouseMoved( aUNOEvt ); |
| } |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void fireFocusEvent( java.awt.event.FocusEvent aEvt ) |
| { |
| if( java.awt.event.FocusEvent.FOCUS_GAINED == aEvt.getID() ) |
| { |
| ListIterator aIter = maFocusListeners.listIterator( 0 ); |
| FocusEvent aUNOEvt = new FocusEvent(); |
| |
| while( aIter.hasNext() ) |
| { |
| ( (XFocusListener) aIter.next() ).focusGained( aUNOEvt ); |
| } |
| } |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void fireDisposingEvent() |
| { |
| ListIterator aIter = maEventListeners.listIterator( 0 ); |
| |
| while( aIter.hasNext() ) |
| { |
| ( (XEventListener) aIter.next() ).disposing( new com.sun.star.lang.EventObject() ); |
| } |
| } |
| |
| // -------------------- |
| // - XWindow methods - |
| // -------------------- |
| |
| public void setPosSize( int X, int Y, int Width, int Height, short Flags ) |
| { |
| maFrame.setBounds( X, Y, Width, Height ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public com.sun.star.awt.Rectangle getPosSize( ) |
| { |
| java.awt.Rectangle bounds = maFrame.getBounds(); |
| return new com.sun.star.awt.Rectangle( bounds.x, bounds.y, bounds.width, bounds.height ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void setVisible( boolean visible ) |
| { |
| maFrame.setVisible( visible ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void setEnable( boolean enable ) |
| { |
| maFrame.setEnabled( enable ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void setFocus() |
| { |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addEventListener( XEventListener xListener ) |
| { |
| if( xListener != null ) |
| maEventListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removeEventListener( XEventListener xListener ) |
| { |
| if( xListener != null ) |
| maEventListeners.remove( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addWindowListener( XWindowListener xListener ) |
| { |
| if( xListener != null ) |
| maWindowListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removeWindowListener( XWindowListener xListener ) |
| { |
| if( xListener != null ) |
| maWindowListeners.remove( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addFocusListener( XFocusListener xListener ) |
| { |
| if( xListener != null ) |
| maFocusListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removeFocusListener( XFocusListener xListener ) |
| { |
| if( xListener != null ) |
| maFocusListeners.remove( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addKeyListener( XKeyListener xListener ) |
| { |
| if( xListener != null ) |
| maKeyListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removeKeyListener( XKeyListener xListener ) |
| { |
| if( xListener != null ) |
| maKeyListeners.remove( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addMouseListener( XMouseListener xListener ) |
| { |
| if( xListener != null ) |
| maMouseListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removeMouseListener( XMouseListener xListener ) |
| { |
| if( xListener != null ) |
| maMouseListeners.remove( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addMouseMotionListener( XMouseMotionListener xListener ) |
| { |
| if( xListener != null ) |
| maMouseMotionListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removeMouseMotionListener( XMouseMotionListener xListener ) |
| { |
| if( xListener != null ) |
| maMouseMotionListeners.remove( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void addPaintListener( XPaintListener xListener ) |
| { |
| if( xListener != null ) |
| maPaintListeners.add( xListener ); |
| } |
| |
| //---------------------------------------------------------------------------------- |
| |
| public void removePaintListener( XPaintListener xListener ) |
| { |
| if( xListener != null ) |
| maPaintListeners.remove( xListener ); |
| } |
| } |