]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/tooltip/EditableTextTooltipProvider.java
G2DParentNode handles "undefined" child bounds separately
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / tooltip / EditableTextTooltipProvider.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.g2d.tooltip;
13
14 import java.awt.Frame;
15 import java.awt.Label;
16 import java.awt.TextField;
17 import java.awt.event.FocusEvent;
18 import java.awt.event.FocusListener;
19 import java.awt.event.KeyEvent;
20 import java.awt.event.KeyListener;
21
22 import javax.swing.BoxLayout;
23
24 import org.simantics.g2d.element.IElement;
25
26 public abstract class EditableTextTooltipProvider implements FocusableTooltipProvider {
27         private Frame frame;
28         private TextField field;
29         
30         @Override
31         public void showTooltip(final IElement element, int x, int y) {
32                 if (frame != null) {
33                         frame.setVisible(false);
34                         frame.dispose();
35                         frame = null;
36                 }
37                 frame = new Frame(getTooltipText(element));
38                 frame.setFocusableWindowState(false);
39                 frame.setUndecorated(true);
40                 frame.addFocusListener(new FocusListener() {
41                         
42                         @Override
43                         public void focusLost(FocusEvent arg0) {
44                                 System.out.println("Lost " + arg0);
45                                 
46                         }
47                         
48                         @Override
49                         public void focusGained(FocusEvent arg0) {
50                                 System.out.println("Lost " + arg0);     
51                         }
52                 });
53                 Label label = new Label("Press 'F9' to focus");
54                 field = new TextField(getTooltipText(element));
55                 field.setFocusable(false);
56                 field.setEditable(false);
57                 field.addKeyListener(new KeyListener() {
58                         
59                         @Override
60                         public void keyTyped(KeyEvent arg0) {
61                                 
62                         }
63                         
64                         @Override
65                         public void keyReleased(KeyEvent arg0) {
66                                 if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {
67                                         setText(element, field.getText());
68                                         frame.setVisible(false);
69                                 }
70                         }
71                         
72                         @Override
73                         public void keyPressed(KeyEvent arg0) {
74                                 
75                         }
76                 });
77                 frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
78                 frame.add(label);
79                 frame.add(field);
80                 frame.pack();
81                 frame.setVisible(true);
82                 frame.setLocation(x,y-32);
83                 
84         }
85         
86         @Override
87         public void hideTooltip(IElement element) {
88                 if (frame != null) {
89                         frame.setVisible(false);
90                         frame.dispose();
91                         frame = null;
92                 }
93         }
94         
95         public void focus() {
96                 frame.setFocusableWindowState(true);
97                 frame.setFocusable(true);
98                 field.setFocusable(true);
99                 field.setEditable(true);
100                 frame.requestFocus();
101                 frame.requestFocusInWindow();
102                 //frame.transferFocus();
103                 System.out.println(field.isFocusOwner() + " " + frame.isFocused());
104         }
105         
106         @Override
107         public boolean hasFocus() {
108                 return field.isFocusOwner();
109         }
110         
111         public abstract String getTooltipText(IElement element);
112         
113         public abstract void setText(IElement element, String text);
114
115 }