root / src / gr / grnet / pithos / web / client / Search.java @ 6084aa02
History | View | Annotate | Download (3.6 kB)
1 | a57faaf0 | Christos Stathis | /*
|
---|---|---|---|
2 | a853017c | Christos Stathis | * Copyright (c) 2011 Greek Research and Technology Network
|
3 | a57faaf0 | Christos Stathis | */
|
4 | a57faaf0 | Christos Stathis | package gr.grnet.pithos.web.client; |
5 | a57faaf0 | Christos Stathis | |
6 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.BlurEvent; |
7 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.BlurHandler; |
8 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.ClickEvent; |
9 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.ClickHandler; |
10 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.FocusEvent; |
11 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.FocusHandler; |
12 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.KeyPressEvent; |
13 | a57faaf0 | Christos Stathis | import com.google.gwt.event.dom.client.KeyPressHandler; |
14 | a57faaf0 | Christos Stathis | import com.google.gwt.resources.client.ClientBundle; |
15 | a57faaf0 | Christos Stathis | import com.google.gwt.resources.client.ImageResource; |
16 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.AbstractImagePrototype; |
17 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.Button; |
18 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.Composite; |
19 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.HasHorizontalAlignment; |
20 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.HasVerticalAlignment; |
21 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.HorizontalPanel; |
22 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.TextBox; |
23 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.Widget; |
24 | a57faaf0 | Christos Stathis | |
25 | a57faaf0 | Christos Stathis | /**
|
26 | a57faaf0 | Christos Stathis | * A component that contains the search form.
|
27 | a57faaf0 | Christos Stathis | */
|
28 | a57faaf0 | Christos Stathis | public class Search extends Composite implements FocusHandler,BlurHandler { |
29 | a57faaf0 | Christos Stathis | |
30 | a57faaf0 | Christos Stathis | /**
|
31 | a57faaf0 | Christos Stathis | * The text hint that is displayed in the empty search box.
|
32 | a57faaf0 | Christos Stathis | */
|
33 | a57faaf0 | Christos Stathis | private static final String TEXT_HINT = "Search for files..."; |
34 | a57faaf0 | Christos Stathis | |
35 | a57faaf0 | Christos Stathis | /**
|
36 | a57faaf0 | Christos Stathis | * Specifies the images that will be bundled for this Composite.
|
37 | a57faaf0 | Christos Stathis | */
|
38 | a57faaf0 | Christos Stathis | public interface Images extends ClientBundle { |
39 | a57faaf0 | Christos Stathis | @Source("gr/grnet/pithos/resources/search_16.png") |
40 | a57faaf0 | Christos Stathis | ImageResource searchButton(); |
41 | a57faaf0 | Christos Stathis | } |
42 | a57faaf0 | Christos Stathis | |
43 | a57faaf0 | Christos Stathis | /**
|
44 | a57faaf0 | Christos Stathis | * The embedded text box widget that contains the search query.
|
45 | a57faaf0 | Christos Stathis | */
|
46 | a57faaf0 | Christos Stathis | private TextBox tb = new TextBox(); |
47 | a57faaf0 | Christos Stathis | |
48 | a57faaf0 | Christos Stathis | /**
|
49 | a57faaf0 | Christos Stathis | * The search widget constructor.
|
50 | a57faaf0 | Christos Stathis | *
|
51 | a57faaf0 | Christos Stathis | * @param images the image bundle
|
52 | a57faaf0 | Christos Stathis | */
|
53 | a57faaf0 | Christos Stathis | public Search(final Images images) { |
54 | a57faaf0 | Christos Stathis | tb.setWidth("200px");
|
55 | a57faaf0 | Christos Stathis | tb.setText(TEXT_HINT); |
56 | a57faaf0 | Christos Stathis | tb.setStylePrimaryName("pithos-search");
|
57 | a57faaf0 | Christos Stathis | tb.addStyleDependentName("empty");
|
58 | a57faaf0 | Christos Stathis | tb.addFocusHandler(this);
|
59 | a57faaf0 | Christos Stathis | tb.addBlurHandler(this);
|
60 | a57faaf0 | Christos Stathis | tb.getElement().setId("textBox.search");
|
61 | a57faaf0 | Christos Stathis | tb.addKeyPressHandler(new KeyPressHandler() {
|
62 | a57faaf0 | Christos Stathis | |
63 | a57faaf0 | Christos Stathis | @Override
|
64 | a57faaf0 | Christos Stathis | public void onKeyPress(KeyPressEvent event) { |
65 | a57faaf0 | Christos Stathis | char keyCode = event.getCharCode();
|
66 | 6084aa02 | Christos Stathis | if (keyCode == 27) { |
67 | a57faaf0 | Christos Stathis | // Simulate the proper behavior for the escape key
|
68 | a57faaf0 | Christos Stathis | // (27 == ESC).
|
69 | a57faaf0 | Christos Stathis | onLostFocus((Widget)event.getSource()); |
70 | a57faaf0 | Christos Stathis | tb.setFocus(false);
|
71 | a57faaf0 | Christos Stathis | } |
72 | a57faaf0 | Christos Stathis | } |
73 | a57faaf0 | Christos Stathis | }); |
74 | a57faaf0 | Christos Stathis | |
75 | a57faaf0 | Christos Stathis | HorizontalPanel panel = new HorizontalPanel();
|
76 | a57faaf0 | Christos Stathis | panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); |
77 | a57faaf0 | Christos Stathis | panel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); |
78 | a57faaf0 | Christos Stathis | panel.add(tb); |
79 | a57faaf0 | Christos Stathis | initWidget(panel); |
80 | a57faaf0 | Christos Stathis | } |
81 | a57faaf0 | Christos Stathis | |
82 | a57faaf0 | Christos Stathis | /**
|
83 | a57faaf0 | Christos Stathis | * Creates an HTML fragment that places an image & caption together.
|
84 | a57faaf0 | Christos Stathis | *
|
85 | a57faaf0 | Christos Stathis | * @param imageProto an image prototype for an image
|
86 | a57faaf0 | Christos Stathis | * @param caption the caption
|
87 | a57faaf0 | Christos Stathis | * @return the HTML fragment
|
88 | a57faaf0 | Christos Stathis | */
|
89 | a57faaf0 | Christos Stathis | private String createHeaderHTML(ImageResource imageProto, String caption) { |
90 | a57faaf0 | Christos Stathis | String captionHTML = "<table cellpadding='0' cellspacing='0'>" + "<tr><td>" + |
91 | a57faaf0 | Christos Stathis | AbstractImagePrototype.create(imageProto).getHTML() + "</td><td style='font-size: 90%;'> " +
|
92 | a57faaf0 | Christos Stathis | caption + "</td></tr></table>";
|
93 | a57faaf0 | Christos Stathis | return captionHTML;
|
94 | a57faaf0 | Christos Stathis | } |
95 | a57faaf0 | Christos Stathis | |
96 | a57faaf0 | Christos Stathis | public void onLostFocus(Widget sender) { |
97 | a57faaf0 | Christos Stathis | TextBox b = (TextBox) sender; |
98 | a57faaf0 | Christos Stathis | if (b.getText().equals("")) { |
99 | a57faaf0 | Christos Stathis | b.addStyleDependentName("empty");
|
100 | a57faaf0 | Christos Stathis | b.setText(TEXT_HINT); |
101 | a57faaf0 | Christos Stathis | } |
102 | a57faaf0 | Christos Stathis | } |
103 | a57faaf0 | Christos Stathis | |
104 | a57faaf0 | Christos Stathis | @Override
|
105 | a57faaf0 | Christos Stathis | public void onFocus(FocusEvent event) { |
106 | a57faaf0 | Christos Stathis | TextBox b = (TextBox) event.getSource(); |
107 | a57faaf0 | Christos Stathis | if (b.getText().equals(TEXT_HINT))
|
108 | a57faaf0 | Christos Stathis | b.setText("");
|
109 | a57faaf0 | Christos Stathis | b.removeStyleDependentName("empty");
|
110 | a57faaf0 | Christos Stathis | } |
111 | a57faaf0 | Christos Stathis | |
112 | a57faaf0 | Christos Stathis | @Override
|
113 | a57faaf0 | Christos Stathis | public void onBlur(BlurEvent event) { |
114 | a57faaf0 | Christos Stathis | TextBox b = (TextBox) event.getSource(); |
115 | a57faaf0 | Christos Stathis | onLostFocus(b); |
116 | a57faaf0 | Christos Stathis | } |
117 | a57faaf0 | Christos Stathis | } |